一面(放松版)实习LRU(下来后发现一摸一样的代码在本地可以运行,在如流的编译器不行,下次遇到这种可以申请本地试试)LRU为啥不用单向链表(删除保证o1)多线程如何改进(syc,reentrantlock,currenthashmap)reentrantlock比起syc的有点在哪(获取线程失败不卡死也就是不会死锁,更灵活可配置,锁中断,锁状态)cas聊聊(乐观锁的实现,重点在于无锁原子化操作)cas出现的问题(aba,单一变量原子性)aba问题有没有什么解决办法呢(版本号/时间戳,比较并且交换的过程不止比较目标值,还比较版本号)update...where name=a,update...where name=b,一个全表扫描,一个走了二级索引原因(a多)如果这两条update并发执行,发生死锁,什么原因(全表扫描是一行一行锁,锁主键就会隐式锁该行二级索引,二级索引更新是先锁索引再锁主键)openclaw和agent的区别在哪(前者是后者的实现,本地文件系统操作,im接入,skill优先)二面(燃尽版)-------------------------------------分割线--------------------------------------------实习explain可以看什么(key,type,row,extra)走了索引还是慢,什么原因(表太大,回表查询,orderby/groupby没走索引)extra可以看什么(这是个补充信息,看是不是走了索引,索引下推,还是说Using filesort)sql优化手段(建索引,小表驱动大表,分库分表,覆盖索引,关联字段索引)超大分页怎么解决(利用主键的范围查询,禁止跳超大页码)b+树(层高,范围查询)如果一个表没有主键id,它有聚簇索引吗(有,默认寻找非空唯一索引,没有的话会创建一个隐藏字段作为聚簇索引)唯一索引是主键索引吗(nope)索引下推是啥(走索引的时候顺带着筛选符合要求的结果,避免回表)索引合并是啥(走多次的单列索引进行交合操作)索引合并和联合索引哪个效果好(一般是联合索引)索引失效(最左前缀,计算,优化器判断走全表效果更优)什么情况下优化器判断走全表效果更优(表的数据量太小,查询数据占比太大需要大量回表,索引选择性不佳)数据库的隔离性怎么保证(锁,mvcc,隔离级别)数据库有什么锁(共享锁,排他锁,临键锁,元数据锁,表锁,页锁,行锁)乐观锁和悲观锁的使用场景(乐观锁读多写少,悲观锁读少写多)为啥乐观锁适合读多写少(写多的时候,会造成大量的cpu自旋)aba怎么解决(版本号,时间戳)元数据锁是啥(保护表结构的锁)元数据锁啥时候用到(修改表结构,执行select/update都会,防止查询的时候表结构改变)意向锁知道吗(表级别的锁,要加表锁的时候可以快速判断有没有行锁,不需要遍历整个表数据)临键锁怎么实现的知道吗(锁一般是mysql中定义的结构体实现,由于索引是有序的,直接锁住上一条记录和当前记录的间隙,左开右闭)java垃圾收集器(cms,g1)cms说说(从名字也看的出来标记清除算法,追求最短stw,也容易有内存碎片)g1说说(分Region,标记复制算法,可预测停顿,一般是堆内存>=45%开始标记)g1工作流程(初识标记stw,并发标记,最终标记也就是stw,筛选回收stw)如果线上服务出现延时比较高的现象,你怎么排查(全局->sql,同步,redis,单点->GC,锁竞争,网络)访问慢可能会排查线程阻塞,那你怎么排查线程阻塞(jstack打印堆栈线程信息)java的两个集合类的根接口(单列collection,双列map)List下面的实现类(arraylist,linkedlist)ArrayDeque的底层数据结构(数组加上双指针)ConcurrentHashMap里什么时候会用CAS,什么时候会用synchronized(cas在目标桶为空的的时候尝试原子无锁插入,如果不为空那么就syc)java对象的组成结构有哪些(对象头,实例数据,对齐字段)mark word存的啥(hashcode,gcage,锁状态,类型指针)你刚才说对象头里有哈希值,那是不是每一种锁状态下,对象头里都会存哈希值?(不是,只有无锁才有,才有空间存储)那你说一说Java锁升级的完整过程。(无锁->单线程获取锁偏向锁,出现竞争升级为轻量级锁,当线程自旋次数过多或者竞争太大改为重量级锁)对象的哈希值是怎么计算的?(直接生成一个随机数)cpu飙到100%(top,top -hp,jastck配合grep,找到对应的代码)k组反转(秒了)三面(写题目被拷打版,一个没写对该死)-----------------------------------分割线------------------------------------个人情况mysql的索引锁在哪里(锁在叶子节点的索引字段)你刚刚说的是逻辑实现,物理实现呢(锁的内存结构体+全局的哈希索引表)这个全局索引表干嘛的(记录挂在当前索引的锁有哪些)输入url到返回结果的过程(1 解析URL,2 dns解析获取ip层数据可能是cdn的服务ip,3 arp获取mac地址,4 tcp三次握手,5 tls握手,6 发送根据网络模型构建的http请求报文,按照上述过程反向注意这个步骤cdn的命中, 8 浏览器解析html,如果是接口库数据,交给框架渲染)arp获取的mac地址是服务器的地址吗(下一跳的路由器mac地址)tcp有什么字段(妈的,当时脑子蒙了,一下没答出来。源端口,目标端口,序列号,确认号,标志位)socket的四元组和上面的关系是啥(四元组由tcp头部的端口字段和ip头部的ip字段标识)dns解析一定是基于udp的吗(不一定)流式传输的实现方式有哪些(websocket,sse,streamablehttp)mysql一定要开启事务才会死锁吗(是的,否则单条sql执行完就释放,不会长时间持有锁)写一个mysql的死锁(怎么开启事务给忘了。。。)给个代码优化(其实是写个策略模式,不会)去掉链表中的重复数(傻逼了有个地方当时没调好)反问:我都没反问,心态有点炸了,下次面试一定要语速慢一点镇定一点,反问可以问一下万能的ai取代问题