整个过程一小时左右,面试官很和善,会主动引导。一面主要问理论知识,项目和实习都没怎么问。
多线程
- 线程A对某变量的修改对于线程B是否可见,为什么(线程对变量的修改在工作内存中,修改完后同步到主内存中)
- 工作内存和主内存对应操作系统中的什么(只记得有个缓存行,有点模糊)
- 还是第一个问题,如何解决变量可见性(volatile,顺便讲了原理)
- 多线程操作ArrayList的问题(数组越界、数值覆盖)
- 多线程操作LinkedList的问题(数值覆盖、出现环)
- 如何解决多线程对某资源的访问问题(synchronized、CAS)
- ReentrantLock的实现原理(讲了底层用的AQS,以及AQS的实现原理)
- 对可重入锁的理解,ReentrantLock可重入如何实现(记录线程ID,下次线程进入时比对ID)
- 线程池的核心参数以及执行流程(核心线程->阻塞队列->非核心线程->拒绝策略)
- 为什么线程池要先把任务放在阻塞队列中再调用非核心线程处理任务,即设计思想(这里我随便猜了一个,面试官讲他的理解是为了维护核心线程数的稳定)
Java基础
- 常用集合类,说一下HashMap和TreeMap(主要说了HashMap底层实现,TreeMap不熟)
- HashMap如何通过键快速找到值(哈希函数算出hashcode,再通过hashcode定位到数组中对应位置)
- 如何通过hashcode定位到数组中的位置,具体怎么实现(取模运算,hashcode模上长度,见源码)
- TreeMap底层实现(红黑树)
MySQL
- 事务隔离级别(读未提交、读已提交、可重复读、串行化)
- 对幻读的理解(事务A读到了事务B新插入的事务,两次读取不一致)
- RR级别下,事务A能否读到事务B修改的值(不能,说了MVCC以及实现原理)
- 事务A什么时候开启ReadView(读取数据时)
- RR级别下,什么情况下会出现幻读(事务A更新了事务B插入的数据,之后事务A中执行查询语句就能查出事务B插入的数据)
- 主从同步的方式(只知道同步异步)
- 问了半同步,多主多从如何防止数据丢失(不会)
题目
简单聊了一下项目,开始写题
先结合业务场景写SQL
算法1:二叉树的层序遍历
算法2:每次可以走1步2步或3步,走1000步有多少种走法
第一题直接拿下,第二题时间不够了说了下思路,动态规划
反问
最后面试官说可能会有二面,要我做好准备查漏补缺。希望一切顺利,边实习边秋招真的太难了
ps:快手算法题要自己import相关的包
#如何一边实习一边秋招##实习与准备秋招该如何平衡#