头条一面二面面经
1. Java线程的状态 Runnable状态与操作系统中进程运行状态的关系 2. sleep和wait的区别 从资源层面来看,sleep占有哪些资源??? 什么是锁? 3. 乐观锁与悲观锁 平时有没有用过乐观锁,怎么用的 4. CAS原理。有用过CAS吗 5. 什么是内存可见性,怎么保证的,可见性和原子性有什么关系? 6. 解释一下volatile和synchronized,两者一样吗?volatile能保证线程安全吗? 7. 索引的种类?什么是聚族索引?什么是覆盖索引? 8. 数据库的隔离级别有哪些 9. Redis出现多个Client同时修改redis服务器中同一个key怎么办?(redis并发竞争问题?) 10. redis的事务跟数据库的事务一样吗? 11. 一道算法题: 输入:1->2->3->….>n-1>n 输出:1->n->2->n-1->3->n-2….. 二面: 1. JVM 2. MVCC是什么?原理? 3. 乐观锁与悲观锁 4. volatile的原理?volatile有那些应用场景,写下代码 答:单例模式 写的代码: public class Singleton { private Singleton(){} private volatile static Singleton instance; public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 问:为什么要使用volatile修饰。 答:为了防止指令重排序。 这行代码instance = new Singleton();实际上涉及到3个步骤 1.分配内存空间 2.初始化 3.instance指向分配的内存空间 2,3步骤是可以指令重排序的,如果不用volatile修饰,会造成 return一个未初始化的instance 继续问:synchronized(Singleton.class)已经保证了获取这个类锁的只能有一个线程,为什么还会出现这种情况?结合具体例子分析一下? 答:???? (感觉他是想让我分析一下,在不用volatile情况下,线程A与线程B同时执行这部分代码,如何才能出现return一个未初始化的instance) 5. 结合项目。 项目中的注册登录模块。能记住登录用户吗?怎么做到的? Cookie与Session的区别? 服务端是怎么验证用户的?生成的token有可能重复吗? 客户端怎么存储token的?明文吗?如果被人截取怎么办,怎么保证安全性? 6. TCP/IP与UDP什么关系? TCP/IP是协议族,它的四层概念模型的传输层包含了UDP与TCP协议。 那TCP与UDP有什么区别? UDP一对多怎么实现呢? 7. 什么是平衡二叉数 答:我先讲了一下排序二叉树,有什么缺点,然后讲什么是平衡二叉树 再问:给了个具体例子: 10 8 16 6 9 这颗二叉树要新插入一个5怎么做? 答:5成为6的左孩子导致二叉树不平衡,要进行右旋转。 问:具体怎么旋转的,给你15分钟,代码实现一下 答:????? 8. 算法题:k个有序链表合并。要求讲一下时间复杂度。
#字节跳动##秋招##提前批##Java工程师##面经#