2020-09-21字节一面 - 草稿

记录一下字节一面的折磨历程

  1. 首先根据简历,问了项目你的分工;问了具体模块如何实现;

  2. 在存储的时候发生意外的话,如何确保数据一致性?
    我的回答:给程序加锁,比如Synchronized关键字,WriteLock或者ReadLock加锁;
    又问:Synchronized具体是如何实现的?这个没回答上来
    Synchronized进过编译,会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令。在执行monitorenter指令时,首先要尝试获取对象锁。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。

  3. 问:了解ReentrantLock吗?如何理解这个可重入?
    概念没怎么回答上来,回答了个tryLock()与lock()的区别;又问tryLock()底层如何实现?
    重入锁是指一个线程获取到该锁之后,该线程可以继续获得该锁。
    底层原理维护一个计数器,当线程获取该锁时,计数器加一,再次获得该锁时继续加一,释放锁时,计数器减一,当计数器值为0时,表明该锁未被任何线程所持有,其它线程可以竞争获取锁。
    为社么Java的任意对象都可以作为锁?
    在Java对象头中,存在一个monitor对象,每个对象自创建之后在对象头中就含有monitor对象,monitor是线程私有的,不同的对象monitor自然也是不同的,因此对象作为锁的本质是对象头中的monitor对象作为了锁。这便是为什么Java的任意对象都可以作为锁的原因。

  4. 问用过哪些数据结构?
    回答:ArrayList、HashMap、HashTable
    又问ArrayList底层如何实现(mad,没了解的以后不要乱说,给自己挖坑);回答了个HashMap的底层是数组+链表的形式;jdk1.8之后的改进;
    又问:具体是如何存储的?时间复杂度是多少?

  5. Http和Https哪个更安全?如何加密的?为什么访问有些网站会跳出不安全的提示?

  6. TCP三次握手

  7. mysql是如何存储的?
    回答了B+树;又问B树和B+树的区别;B+树的应用场景,回答了数据库,又问查询的时间复杂度;

  8. 了解事务吗?

  9. 编程题:给一个数组,返回一个数组中和为0的数对。不能有重复。
    问实现思路;回答遍历;又问能不能优化一下;回答排序,优化截止条件;
    又问:能不能用常数时间查询的数据结构存储?提示了HashMap
    但是没用过,最后还是用双重循环做的。
    其实应该将数组的值存储在HashMap的key中,之后直接使用contains方法,查询它的相反数key。最后打印。

  10. HashMap相关,如何put,扩容,是否线程安全,为什么不安全,如何使用安全的HashMap?ConcurrentHashMap实现原理,具体如何给Segment枷锁的,每次获取size都要按顺序加锁吗

  11. reentrantlock、Synchronized底层实现

  12. AOP实现原理,使用场景,

  13. 知道什么引擎?有什么区别?INnoDB如何实现保证事务的特性,与MyISAM的区别,为什么数据 不存储在非叶子节点上

  14. TCP和UDP的区别,TCP如何保证可靠性?

  15. 三次握手,四次挥手,为什么要等待2MSL,拥塞控制?
    编程:

  16. sql:查询连续七天登陆的用户数量

  17. 将key之后的链表反转。

  18. 类加载机制

  19. ArrayList扩容机制,会不会缩容

  20. ConcurrentHashMap1.8的优化

  21. 跳表,线程池,HashMap扩容,红黑树会不会转换为链表

  22. Synchronized,ReentrantLock

  23. Tcp流量控制,拥塞控制

你可能感兴趣的:(2020-09-21字节一面 - 草稿)