前言
面试了差不多两个月,从bat到只有一个后端的小公司都面过,对面试常问的问题做一些总结。
八股文
网络、web服务器
- 网络模型
osi七层。tcp/ip4层
- tcp
三挥四握及其客户端与服务器的状态、排查,拥塞控制,滑动窗口,报文结构,为什么可靠,粘包
- upd
一般和tcp做对比,需了解基础
- http
http1,http1.1(和tcp keep-alive作区分),http2都需了解,https的ssl协议需了解
- nginx
工作模式,一些简单配置,用途,负载均衡策略
数据库(mysql)
- 索引结构
为什么使用b+tree,b+tree结构,什么时候会退化,和b tree、skiplist 比较
- 索引
类型,使用索引的优劣(就是空间换时间),索引的使用
- 引擎
一般就说说myisam与innodb异同。
- 事务
概念,隔离级别以及解决的问题,mvcc以及实现,redolog,undolog。分布式事务2PX 3PX
- 日志
binlog redolog undolog relaylog 慢日志 概念功能
- 构架
分库分表,主从,读写分离
- 如果问mysql优化 建议从构架设计、数据库设计、sql三个方面说
缓存(redis)
- 为什么单线程也高效
数据都在内部里,io多路复用,多线程上下文切换的损耗
- string hash list set sortset 的底层结构和场景必须清除的了解
我之前在《redis设计实现》看 list 由linkedlist实现,后来发现之后是升级quicklist节省内存空间。hashmap和skiplist是重点。
- redis主从过程
9个过程,百度就有
- cluster
槽 ,hash一致性,大key(拆),热key(代码实现负载均衡)
- 内存淘汰策略
lru 可对比朴素lru,innodb缓冲池的lru,lfu
- bitmap hyperloglog
- 过期键删除
惰性 定期 结合
- 缓存与数据库一致性
双删 延时双删 订阅binlog
- 缓存穿透雪崩击穿
提到布隆过滤器就要了解原理(位数组+几个哈希函数)
- 故障转移
参考raft
队列
- 异步 削峰 解耦
- rabbitmq感觉没啥好说的,kafka问就是不熟0.0
elasticsearch
- 基础概念
- 单机数据写入过程
为何准实时
- 多机数据读取/写入过程
协调节点与哈希路由算法
- 倒排索引
分词, trim dictionary,跳表,trim index,postling list,fst,bitmap
linux
- top free 问的多点
- epoll select poll
- 协程 上下文切换 用户态内核态
算法
- 除了一线厂,其实只要了解一下几个排序算法的实现、时间复杂度、优劣就行
- 面一线厂肯定要刷leetcode,感觉刷个300道差不多,字节的最难
项目
- 自己的项目一定要有通彻的了解,最好做一下总结,用到的技术不管是不是自己写都要了解。有些场景的设计要思考为什么(没有原因也要想个理由)
其他
- 如果用了微信小程序就要知道auth2
- 工作中看中什么? 无非就是平台/工资/项目/团队
- 关于语言 我写php的,感觉php也没啥好问的,一般也就垃圾回收和swoole,php7特性
后记
- 我准备面试大概用了一个月不到,后面的边面边看。感觉面一线厂还是不够,面了几次一面挂,菜的离谱。感觉准备面试也是对自己的提升,对业务和技术的理解都提升了很多,比如mysql很多围绕磁盘io,redis很多围绕使用更少内存
- 本来打算每次面试都更新的,后来觉得重复度很高就没写了
- 就写了写技术面,hr面。。。我被hrbp挂过两次,就不误人子弟了
2021.5面试总结
原文:https://www.cnblogs.com/wenzaicaicai/p/14766547.html