转载声明:文章来源:https://www.nowcoder.com/discuss/518481695310352384
总时长:1h左右,八股文为主,项目基本没问到
开场:自我介绍,研究生阶段的研究方向以及获奖经历
操作系统
1. 进程和线程的概念和区别?
2. 你刚才提及到上下文切换,那么线程的上下文切换是从什么切换到什么?(我回答的是从用户态切换到内核态)
3. 用户态和内核态的区别?
4. 为什么用户态和内核态之间的切换会影响到线程的执行效率,真正慢的点在哪里?
5. 操作系统有一个锁的概念,谈谈你对它的理解?
6. 死锁四个条件?
7. 怎么解决死锁?
8. CPU和内存之间的三级缓存有了解吗?(L1、L2、L3缓存)
9. 多核CPU下,三级缓存对于每个内核来说是共享的吗?那你知道它的数据存储以及指令存储的方式有了解过吗?
10. CPU指令重排序的好处?
11. 你刚才提到的volatile关键字,除了禁止CPU指令重排,还有什么其他作用?
计算机网络
1. OSI七层协议?
2. TCP和UDP传输协议的区别?
3. TCP是可靠的传输协议,你知道它怎么实现的一些拥塞控制,或者说对于数据发送量的合理限制?
4. 拥塞控制、超时重传的具体原理?
5. Http和Https的区别?
6. Https的具体加密过程具体聊一下,比如说密钥的交换实现流程?
7. Http 2.0 相比 1.0做了哪些更新?
数据结构
1. 平衡二叉树和完全二叉树的概念和区别?
2. 现在有一棵树,左子树的高度是2,右子树的高度是3,但是叶子的分布是从右向左的,它是平衡二叉树吗?
3. 有了解过哈希表吗?哈希表如何解决冲突?(开放地址法、拉拉链法)
4. 线性探测情景:哈希表中下标为4的桶位存有一个对象A,现在新增一个对象B,哈希地址也为4,线性探测,找到下标为5的桶位发现没有值,然后就把对象B放在下标5的位置,现在需要删除对象B,应该怎么做?
a. 首先找到要删除的对象B所在的桶位,即下标为5的位置
b. 将该桶位标记为"已删除"或者置为一个特殊的空值,而不是直接删除它,这是因为其他元素可能依赖于当前位置 进行探测,如果直接删除,可能导致探测链的断裂,使得后续查找操作失败。
-我自己没回答到点上(=-=)
5. 算法(口述):
a. 链表反转 (我说了一种递归的方法 时间复杂度O(n) )
b. 背包问题,求获得的最大价值(动态规划,并说一下时间复杂度)
c. 青蛙跳台阶问题(动态规划 时间复杂度)
Java
1. 对于多态的理解?
2. 对于static变量的理解?static变量分配内存的时候发生在哪个环节?
3. JDK1.8对于方法区的实现是?(元空间)元空间还会存放什么东西?
4. JVM运行时数据区有哪几部分?虚拟机栈和本地方法栈的区别?
5. 堆中年轻代和老年代的垃圾回收算法?
6. JVM判断一个对象是否可回收?(可达性分析)
7. 哪些对象可以作为GC root?类加载器可以作为GC root吗?
8. 类加载器有哪些?说一下双亲委派机制?
MySQL
1. MVCC原理?
2. MySQL的三大日志?
3. Innodb引擎执行update语句的执行流程?
4. 数据库的两阶段提交是怎样的?
5. MySQL关键字的执行顺序?比如select、from、where、order by
6. 索引的数据结构?
7. 什么样的数据不推荐加索引?
Java并发
1. synchronized关键字是一个什么锁?(悲观锁、非公平锁)
2. synchronized是否可重入,你对可重入锁的理解?
3. 线程重入会发生锁升级吗?锁升级的过程?
4. 重量级锁会发生线程阻塞,那么阻塞之后CPU会对它进行怎样的处理?
5. 锁被释放之后,队列中阻塞线程获取锁的流程是怎么样的?
6. 线程池的参数以及执行流程?
7. 线程池任务提交,比如调用execute或submit API之后的流程有了解吗?
Spring 框架
1. spring 如何解决循环依赖?
2. AOP相关知识,以及两种动态代理实现方法的区别?
3. SpringBoot与Spring框架的区别?
反问:
公司业务
今年就业形势是不是很难?(面试官:微微一笑,今年投递我们公司的简历很多,但是能达到我们要求的其实也不少,毕竟岗位有限。)“但是”这个词用的好啊。
总结:
问的问题还是比较基础的,大多问题也会,但我自己复盘的时候,感觉表达能力方面还是不太行,有时候思考的时候就会“额...”这样,整体下来感觉不太流畅,在表达方面还是要多多练习吧!(=-=)
帖子还没人回复快来抢沙发