shopee基本就没问语言相关问题,很大的一部分难点在网络和数据库,其他的方面都是很常规的题
一面
项目相关
- 介绍了一下项目
- 怎么避免线程空转的
- epoll和select和poll
- 什么是线程安全,怎么做到线程安全
数据结构&&操作系统&&网络
这几个方面好像很少,写在一起吧
- 数组和链表不同
- set和unordered_set的底层
- 具体说说哈希表
- 什么是堆,堆排序
- 进程通信方式
- 虚拟地址的好处
- 什么是缺页异常
- 三次握手四次挥手
- time_wait状态在哪里
- https过程
数据库
- mysql的存储引擎
- 索引的数据结构
- 创建索引要考虑什么问题,例如索引越多越好吗(索引的维护需要时间空间不是越多越好,要考虑哪些列常被用来做条件,考虑联合索引的最左匹配,非聚簇索引可以用覆盖索引)
- redis的五种基本数据结构
- 说出redis的10个命令(我就憋了几个,不到10个,他估计也看透了我水平了)
- redis的过期策略(有lru还有随机吧)
- lru是属于主动过期还是被动过期(这啥啊,我不会……)
做题
小case,写的挺快的,面试官可能觉得我编程题还可以才给过的吧,毕竟我数据库那块那么烂……
- 合并链表
- 最长不重复子串
二面
项目
- (一见面就夸我项目经验多)介绍了后台和安卓两个项目
- reactor模式介绍
- 使用多路复用和普通的方式对比有什么好处(一个线程能维护多个连接,减少线程数)
- 使用多路复用的话怎么做到快速响应一个连接上的事件(非阻塞io,耗时任务丢给计算线程)
- 非阻塞io和阻塞io区别
网络
- tcp和udp的不同
- tcp怎么处理丢包的问题的(ack,超时重传,接收缓冲,快重传)
- 如果接收方发了重复ack了,但是对方一直没有回应会怎样(不知道,我说可能就丢弃接收缓冲的数据了)
- 知道一个域名,怎么和他通信(dns,ip,路由)
- http除了常用的get和post还有什么方法
- 说了一个广播造成的问题问怎么解决,我想了一会才反应过来是广播风暴,我说我只记得可以用“生成树协议”
- A要用到B服务器的服务,开了多个连接,但是只有一小部分连接成功了,怎么排查原因(我说可以用netstat查看一下两端的连接状态,比如可以判断B是否被SYN攻击了,还是单纯网络问题。 另外也可能B端的文件描述符用完了,他表示能想到文件描述符这个层面很好)
数据库
- 索引的数据结构,与B树的区别
- 事务的特性
- 原子性怎么实现(undo log做回滚)
- undo log什么情况会执行(崩溃重启)
- 那重启时怎么判断是要做undo log还是redo log(不会……)
- 隔离级别说一下
- 和隔离级别对应的有三个问题说一下
- 那隔离级别是怎么实现的(我说用锁,但是具体用什么锁怎么用我忘了)
- 了解redis那其他的中间件例如*¥%¥#,#¥#%,H%454^……有了解的吗(有一两个大概知道做什么的但是确实不了解)
- 微服务呢(我了解个概念吧……)
智力题
本来已经结束了,结果我问他这轮怎么没写代码,他说你要的话我出几道题,口述即可
- 检测链表是否有环
- 圆形棋盘下棋,最后一个放的赢,问先手策略(这题我拼多多面过……)
- 2个玻璃球100层楼问题,没想到最优,只想到2分
网友评论