赞
踩
原标题:一定是最适合你的后端面试指南
本文转自公众号:Java面试通关手册
友情提示:阅读+独立思考的方式学习本文效果最佳。本文干货较多,如果大家觉得不错请转发给可能需要本文的朋友哦!最后,不要忘记给作者点赞点广告哦!
目录
前言
一 简历该如何写 1.1 为什么说简历很重要? 1.2-这3点你必须知道 1.3-两大法则了解一 1.4-项目经历怎么写? 1.5-专业技能该怎么写? 1.6-开源程序员简历模板分享 1.7 其他的一些小tips
二 计算机网络常见面试点总结 计算机网络常见问题回顾 2.1 TCP、UDP 协议的区别 2.2 在浏览器中输入url地址 ->> 显示主页的过程 2.3 各种协议与HTTP协议之间的关系 2.4 HTTP长连接、短连接 2.5 TCP 三次握手和四次挥手
三 Linux 3.1-简单介绍一下-linux-文件系统? 3.2 一些常见的 Linux 命令了解吗?
四 MySQL 4.1 说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解 4.2 数据库索引了解吗? 4.3 对于大表的常见优化手段说一下
五 Redis 5.1 redis 简介 5.2 为什么要用 redis /为什么要用缓存 5.3 为什么要用 redis 而不用 map/guava 做缓存? 5.4 redis 和 memcached 的区别 5.5 redis 常见数据结构以及使用场景分析 5.6 redis 设置过期时间 5.7 redis 内存淘汰机制 5.8 redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复) 5.9 缓存雪崩和缓存穿透问题解决方案 5.10 如何解决 Redis 的并发竞争 Key 问题 5.11 如何保证缓存与数据库双写时的数据一致性?
六 Java 6.1 Java 基础知识 6.2 Java 集合框架 6.3 Java多线程 6.4 Java虚拟机 6.5 设计模式
七 数据结构
八 算法 8.1 举个栗子(手写快排)
九 Spring 9.1 Spring Bean 的作用域 9.2 Spring 事务中的隔离级别 9.3 Spring 事务中的事务传播行为 9.4 AOP 9.5 IOC
十 实际场景题
写在最后
前言
不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。
运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:
自我介绍。(你可千万这样介绍:“我叫某某,性别,来自哪里,学校是那个,自己爱干什么”,记住:多说点简历上没有的,多说点自己哪里比别人强!)
自己面试中可能涉及哪些知识点、那些知识点是重点。
面试中哪些问题会被经常问到、面试中自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多少?能记住多久?第二:背题的方式的学习很难坚持下去!)
自己的简历该如何写。
“80%的offer掌握在20%的人手中”这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。
另外,大家要明确的很重要的几点是:
写在简历上的东西一定要慎重,这可能是面试官大量提问的地方;
大部分应届生找工作的硬伤是没有工作经验或实习经历;
将自己的项目经历完美的展示出来非常重要。
笔主能力有限,如果有不对的地方或者和你想法不同的地方,敬请雅正、不舍赐教。
如果想了解我的更多信息,可以关注我的 Github 或者微信公众号:"Java面试通关手册"。
一 简历该如何写
程序员的简历之道
俗话说的好:“工欲善其事,必先利其器”。准备一份好的简历对于能不能找到一份好工作起到了至关重要的作用。
1.1 为什么说简历很重要?
假如你是网申,你的简历必然会经过HR的筛选,一张简历HR可能也就花费10秒钟看一下,然后HR就会决定你这一关是Fail还是Pass。
假如你是内推,如果你的简历没有什么优势的话,就算是内推你的人再用心,也无能为力。
另外,就算你通过了筛选,后面的面试中,面试官也会根据你的简历来判断你究竟是否值得他花费很多时间去面试。
1.2 这3点你必须知道
大部分应届生找工作的硬伤是没有工作经验或实习经历;
写在简历上的东西一定要慎重,这可能是面试官大量提问的地方;
将自己的项目经历完美的展示出来非常重要。
1.3 两大法则了解一下
目前写简历的方式有两种普遍被认可,一种是 STAR, 一种是 FAB。
STAR法则(Situation Task Action Result):
Situation: 事情是在什么情况下发生;
Task:: 你是如何明确你的任务的;
Action: 针对这样的情况分析,你采用了什么行动方式;
Result: 结果怎样,在这样的情况下你学习到了什么。
FAB 法则(Feature Advantage Benefit):
Feature: 是什么;
Advantage: 比别人好在哪些地方;
Benefit: 如果雇佣你,招聘方会得到什么好处。
1.4 项目经历怎么写?
简历上有一两个项目经历很正常,但是真正能把项目经历很好的展示给面试官的非常少。对于项目经历大家可以考虑从如下几点来写:
对项目整体设计的一个感受
在这个项目中你负责了什么、做了什么、担任了什么角色
从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的。
1.5 专业技能该怎么写?
先问一下你自己会什么,然后看看你意向的公司需要什么。一般HR可能并不太懂技术,所以他在筛选简历的时候可能就盯着你专业技能的关键词来看。对于公司有要求而你不会的技能,你可以花几天时间学习一下,然后在简历上可以写上自己了解这个技能。比如你可以这样写:
Dubbo:精通
Spring:精通
Docker:掌握
SOA分布式开发 :掌握
Spring Cloud:了解
1.6 开源程序员简历模板分享
分享一个Github上开源的程序员简历模板。包括PHP程序员简历模板、iOS程序员简历模板、Android程序员简历模板、Web前端程序员简历模板、Java程序员简历模板、C/C++程序员简历模板、NodeJS程序员简历模板、架构师简历模板以及通用程序员简历模板 。
Github地址:https://github.com/geekcompany/ResumeSample
如果想学如何用 Markdown 写简历写一份高质量简历,请看这里:https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/手把手教你用Markdown写一份高质量的简历.md
1.7 其他的一些小tips
尽量避免主观表述,少一点语义模糊的形容词,尽量要简洁明了,逻辑结构清晰。
注意排版(不需要花花绿绿的),尽量使用Markdown语法。
如果自己有博客或者个人技术栈点的话,写上去会为你加分很多。
如果自己的Github比较活跃的话,写上去也会为你加分很多。
注意简历真实性,一定不要写自己不会的东西,或者带有欺骗性的内容
项目经历建议以时间倒序排序,另外项目经历不在于多,而在于有亮点。
如果内容过多的话,不需要非把内容压缩到一页,保持排版干净整洁就可以了。
简历最后最好能加上:“感谢您花时间阅读我的简历,期待能有机会和您共事。”这句话,显的你会很有礼貌。
二 计算机网络常见面试点总结
网络分层结构 计算机网络常见问题回顾
TCP三次握手和四次挥手、
在浏览器中输入url地址->>显示主页的过程
TCP 协议如何保证可靠传输
HTTP和HTTPS的区别
TCP、UDP协议的区别
常见的状态码。
下面列举几个常见问题的回答!
2.1 TCP、UDP 协议的区别
TCP、UDP协议的区别
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的运输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
2.2 在浏览器中输入url地址 ->> 显示主页的过程
百度好像最喜欢问这个问题。
打开一个网页,整个过程会使用哪些协议
图片来源:《图解HTTP》
状态码
总体来说分为以下几个过程:
DNS解析
TCP连接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束
具体可以参考下面这篇文章:
https://segmentfault.com/a/1190000006879700
2.3 各种协议与HTTP协议之间的关系
一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。
图片来源:《图解HTTP》
各种协议与HTTP协议之间的关系 2.4 HTTP长连接、短连接
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如Java文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
—— 《HTTP长连接、短连接究竟是什么?》
2.5 TCP 三次握手和四次挥手(面试常客)
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。
漫画图解:
图片来源:《图解HTTP》
TCP三次握手
简单示意图:
TCP三次握手
客户端–发送带有 SYN 标志的数据包–一次握手–服务端
服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端
为什么要三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
-
传了 SYN,为啥还要传 ACK
双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
TCP四次挥手
断开一个 TCP 连接则需要“四次挥手”:
客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
服务器-关闭与客户端的连接,发送一个FIN给客户端
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
上面讲的比较概括,推荐一篇讲的比较细致的文章:
https://blog.csdn.net/qzcsu/article/details/72861891
三 Linux
Linux 3.1 简单介绍一下 Linux 文件系统?
Linux文件系统简介
在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。
也就是说在LINUX系统中有一个重要的概念:一切都是文件。其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
文件类型与目录结构
Linux支持5种文件类型 :
文件类型
Linux的目录结构如下:
Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
Linux的目录结构
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。