字节抖音后端一面
时间:2020/01/16 15:00
历时:1小时01分钟
第一次面试,真的很紧张,说话吞吞吐吐,应该凉了,不过面试官人很nice,是一次不错的经历,查缺补漏,争取下次更好
-
自我介绍
-
开始聊专业知识:
- java中的hashmap 和 concurrenHashmap的区别?
- hashmap和hashTable的区别?为何一个线程安全一个线程不安全?
- hashmap线程不安全,hashtable线程安全,hashTable方法上加了synchronize关键字
- concurrenHashMap如何实现线程安全且并发性能比hashTable高?
- 锁分段
- 解释下锁分段?
- 这个太菜了,直接跟面试官说没研究过concurrenHashmap的源码,不想浪费自己的时间
- 聊一下volatile作用?
- 我答了实现共享变量的可见性
- 然后聊聊可见性实现原理:
- 我答了通过在两个操作之间插入内存屏障禁止操作系统重排序
- 最后聊聊volatile使用场景
- 我答了在共享变量读多写少的情况。。。
- 聊一下synchronize关键字实现原理?
- synchronize的锁升级?
- 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁
- 有用过java中的队列吗?
- 我说有,我使用过优先队列
- 然后问我java中priorityQueue线程安全吗?
- 不安全
- java中的队列有线程安全的队列吗?
- 我蒙了阻塞队列hhh
- 怎么实现线程安全的?
- 不清楚
-
聊聊数据库吧
- MySQL事务隔离级别说一下?
- 说了那四个
- 可重复读如何实现?
- 我一开始是说了不可重复读实现是, undo日志保存的是开始前数据值,redo日志保存的是事务结束后数据的值。不可重复读是每次读undo日志的最近版本,所以可能对同一数据读到不同的版本,而可重复读是因为,在读时加行锁,因此数据能保证统一,但是没有对表加锁,所以不能知道是否有新的数据插入,所以可能会出现幻读
- MySQL中有几种类型的锁?
- 我答了,页级锁,表级锁,行级锁
- 更新,查询数据库记录时是如何加锁的?
- 我答的是,更新时加表锁,查询时加的是行锁(这块我也不是很清楚,因为还在复习,得好好补补了)
- 聊一下索引,MySQL的索引是什么数据结构
- B+树
- 为什么用B+树?
- B+树,多叉平衡树,可以在较少的IO次数下,完成我们的查询工作
- 聊一下最左匹配原则
- MySQL事务隔离级别说一下?
-
看你项目中有用到redis,聊一下
- redis你在项目中怎么用
- 保存token
- redis在项目你们有几台
- 一台
- 挂了怎么办?
- 我说我配置了持久化
- redis你在项目中怎么用
-
计网
- tcp三次握手,四次挥手过程
- 最后的等待2msl的作用
-
最后15分钟做一道算法题?
- leetcode单词分割,我太菜了没写出来,应该gg了