【地址】
https://www.kaikeba.com/open/item?c=681&channelCode=gjsh6ytvxy
------------------------------------------------------------------------------------
【面试经验】
版面整洁,信息精炼:
最多两页,字句不多余,恰到好处;
便于快速阅读,关键信息粗体标出,但不超过5处。
有的放矢,突出优势:
建立多版本化,如研发,算法,技术支持类...
有含金量的技术比赛经历和获奖情况。
切忌正确废话的堆砌。
吃苦耐劳,学习能力强......
熟悉,了解,精通满屏飞。
电话,视频面试
安静,网络通畅,尽量看着镜头。
现场面试
STAR
- Surrounding,项目的时间、地点、背景;
- Target,任务,描述,要求;
- Action,做了什么,工具,困难;
- Result,成就,认知,结果量化。
SA要讲清楚
互动,节奏,表达连贯;深度广度和要求是否一致;精气神,勇气-指出来面试的问题,让面试官给出答案(态度谦虚);把问题主动难度,深度延伸,结合项目。
------------------------------------------------------------------------------------
【如何清晰地回答好TCP三次握手】
网络怎么分层的:按照数据格式和解决传输问题的角度来进行分层。
|-应用层(HTTP/FTP):程序中的数据
|-传输层(TCP/UDP):定义端口
|-网络层(IP/ARP):定义IP地址及子网
|- 链路层:怎么组装有特定意义的数据帧
物理层:定义帧结构-------------------------
<画 |- 的目的是为了直观的展示不同数据分层的结构,应用层数据经过组装成为传输层数据,传输层经过组装成为网络层数据......>
一些要注意的问题:
- IP报文结构中的TTL:IP报文被路由器丢弃之前可经过的最多路由总数。
- 区别于MSL:报文的最大存在时间。
- 区别于RTT:客户端到服务器往返所花费的时间。TCP含有动态估算RTT的算法,会持续估算,因为网络传输拥塞程度是动态的。
TCP报头的标志性也是高频使用的内容:SYN(建立连接),ACK(响应),FIN(关闭连接)
TCP共有10种实际状态存在。
建立连接4中:
LISTENING,SYN_SENT,SYN_RECEIVED,ESTABLISHED
断开连接8种:
ESTABLISHED,FIN_WAIT_1,FIN_WAIT_2,CLOSE_WAIT,LAST_ACK,TIME_WAIT,CLOSING,LISTENING
其中的LISTENING和ESTABLISHED是重复的。
它们以 源目的IP+端口号为Key,状态为Value,存储在操作系统中。
常考:为什么要三次握手?
1.信息对等:
关于信息对等的含义就是,不仅要知道对方收到了自己的消息,还要让对方知道我们收到了对方的消息。
举个例子,两个人背对背坐着,看不到对方,只能通过听来判断。那如果第一个人说,你好,第二个人再说,你好。此时都不说话了,这个时候我们是没办法判断出来第一个人是不是聋子,所以必须要第一个人对第二个人这句话有个回应,才能说双方说话,和听话都是没有问题的。这是下一步交流的基础。
2.防止请求超时导致的脏连接;
这里主要是跟2次握手方案的对比,如果是两次握手,那么a和b在建立连接之后,a超时发送给b的数据,b就会建立连接,而此时a是没有连接的,这就是脏连接。
为什么要4次挥手?
主要是为了传回未处理完成的包。
- 1.A发FIN消息
- 2.B响应ACK消息
- 3.B做好准备,发送FIN+ACK给A
- 4.A返回ACK,并TIME_WAIT
经过2MSL之后,A进入CLOSE,释放TCP;B在收到A的ACK后就进入CLOSE,释放TCP;
为什么需要TIME_WAIT?
默认2分钟。确认被关闭方直接进入ACK状态。net.ipv4.tcp_fin_timeout=15。
------------------------------------------------------------------------------------
数据结构-算法复杂度O
猜数字-100以内的数字,二分法最多几次可以猜到呢?
算法复杂度的排序O(n!)>O(2^n)>O(n^2)>O(nlogn)>O(n)>O(logn)>O(1)
面试常考-快排说明
流程:分界点(pivot)--分区(left, right)--递归处理左右分区
难点:递归;指针移动与数值交换;复杂度计算与最坏情况
最坏情况是:升序,倒序或者全部相等,O(nlogn)--O(n^2)
递归-recursion
- 1.要有退出条件
- 2.参数在变化
- 3.递归方法必须有参数
实例:计算阶乘(负数阶乘没有意义,13!就超出了int的范围)
------------------------------------------------------------------------------------
HashMap<13>什么时候变为16的?--resize
异或、>>>无符号位运算、HashMap size()小于64时,一律先扩容,小于64是不可能树化的,没必要。大于64时,节点大于8会树化,小于6会链化,链表长度为8则平均查找次数为4,树化后查找深度为3,有收益;而6时,链化的平均查找长度也是3,树化查找深度为3,收益不大。
平衡树,AVL树,红黑树概念:
红黑树的特性(有红必有黑,红红不相连):
- 根节点必须是黑色;
- 所有的NIL节点都是黑色;
- 一条路径不能出现相邻的两个红色节点;
- 任何递归子树内,根节点到叶子节点的所有路径上包含相同数目的黑色节点。
AVL绝对的平衡二叉查找树,红黑树不是绝对平衡。红黑树两次就能调整,频繁插入删除时红黑树更合适,avl的旋转成本很高的。
HashCode与String的神秘31:
最简单的Hash算法:所有字符的ASCII码相加
但很容易冲突,选质数31(不容易溢出,31可以被优化-32-1,即i<<5)
------------------------------------------------------------------------------------
线程与线程池:
- 线程状态:new runnable running dead blocked
- 线程池状态:running shutdown stop tidying(新任务不能添加了,老任务继续消耗) terminated
线程池的作用:
- 利用线程池管理并复用线程、控制最大并发数
- 增加对线程的管理,快速排查问题
- 实现任务线程队列的缓存策略与拒绝机制
- 实现某些与时间相关的功能,如定时执行、周期执行等
- 隔离线程环境
------------------------------------------------------------------------------------
ConcurrentHashMap类
AQS
Spring中的主线:
BeanFactory,FactoryBean