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