【地址】
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地址及子网
  |- 链路层:怎么组装有特定意义的数据帧
物理层:定义帧结构-------------------------
<画 |- 的目的是为了直观的展示不同数据分层的结构,应用层数据经过组装成为传输层数据,传输层经过组装成为网络层数据......>

开课吧-孤尽公开课视频内容整理笔记_数据

开课吧-孤尽公开课视频内容整理笔记_递归_02

开课吧-孤尽公开课视频内容整理笔记_递归_03

一些要注意的问题:

  • 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,存储在操作系统中。

开课吧-孤尽公开课视频内容整理笔记_红黑树_04

常考:为什么要三次握手?
开课吧-孤尽公开课视频内容整理笔记_传输层_05
1.信息对等:
关于信息对等的含义就是,不仅要知道对方收到了自己的消息,还要让对方知道我们收到了对方的消息。
举个例子,两个人背对背坐着,看不到对方,只能通过听来判断。那如果第一个人说,你好,第二个人再说,你好。此时都不说话了,这个时候我们是没办法判断出来第一个人是不是聋子,所以必须要第一个人对第二个人这句话有个回应,才能说双方说话,和听话都是没有问题的。这是下一步交流的基础。
开课吧-孤尽公开课视频内容整理笔记_红黑树_06
2.防止请求超时导致的脏连接;
这里主要是跟2次握手方案的对比,如果是两次握手,那么a和b在建立连接之后,a超时发送给b的数据,b就会建立连接,而此时a是没有连接的,这就是脏连接。
开课吧-孤尽公开课视频内容整理笔记_红黑树_07

为什么要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