字节后端开发一二面面经(已OC)
一面
自我介绍
算法
- 删除链表中的重复节点。讲思路:用列表存储,说能不能使用更少空间,改为了双指针
项目
- 说一下自己收获最多的项目,主要功能
- 你主要做了哪些内容,一共几个人,使用的技术栈
- 数据库表是如何设计的
- 用了几台服务实例(没有)
数据库
- 索引类型
- 聚集索引和非聚集索引有什么区别
- 索引什么时候会失效
- 具体介绍一下联合索引
- 数据库的隔离级别
- 可重复读是如何实现的
- MVCC多版本控制
操作系统
- 进程和线程的区别
- 操作系统的页面置换算法有哪些
- 出现死锁的原因
- 如何避免死锁
- 内存碎片是如何产生的
- 分段和分页的区别
网络
- ISO的七层协议
- 网络层有哪些协议
- ICMP协议是干什么的
- TCP的拥塞控制,具体解释一下
redis
- zset的底层是如何实现的
- 跳表和b+树的区别(都可以范围查询,一个是链表一个是树,没有做过区分,所以了解不多)
再问项目
- 主从分离是怎么实现的
- 主从如何进行同步的
- redis同步(知道redis能集群,但同步没有了解过)
设计模式
- 常见的设计模式
Spring
- 介绍一下Ioc
反问
问:还有什么可以提升的地方
答:基础还可以,基本都问到了,等面试结果
二面
自我介绍
姓名,学校,方向,熟悉技术,项目
项目
- redis怎么使用的,存储是的key value是什么
- 数据表怎么设计的
- 为什么使用主从分离
做题
- 1 2 3 4 5 6 7 8 9这样一个 3 X 3 的矩阵,进行一个密码的设置,密码的长度是4-9,就是手机上的绘图密码,规定就是1->3时,必须保证2已经被选择过;同理1->9时,必须保证5已经被选取。求总共的密码种类数。
- 岛屿数量(leetcode原题) 链接:https://leetcode-cn.com/problems/number-of-islands/
数据库
- 数据库三范式
- 反范式了解过吗?就是实际的数据库设计一定会遵顼规定吗
- 介绍一下垂直分表和水平分表
- 水平分表的几种方式
- 不同的水平分表方式有什么区别
- 基于时间戳分片有什么缺点(没了解过)
操作系统
- 我在终端跑了一个程序,然后按了Ctrl + c,中间操作系统发生了什么
- 应用程序能感知到这个消息吗(不太明白问的是哪方面)
- cpu访问内存对象需要访问内存多少次
- 线程调度算法
数据结构
- 堆这个结构使用过吧,能解决哪些问题
- 堆的初始化和插入操作的时间复杂度
排序
- 对比一下归并排序和快速排序
- 两个排序的空间复杂度
并发
- ReentrantLock的底层实现(AQS,UNSAFE,LockSupport)
- UNSAFE用c++实现的地方看过吗,说一下(说了一点,c++看的少)
- 线程获取可重入锁的时候会是什么状态(从公平锁和非公平锁实现去说)
反问
- 问:第一个算法题有些磕绊,最终也没有写出来,会不会直接决定面试结果
答:这个还好,大致有思路还是可以的 - 问:有哪些需要提升的地方
答:倒也没有什么说的建议吧,基础还不错,招实习生更看重算法和基础,项目不影响