腾讯wxg软件后台开发一面速挂
《面试题目》
自我介绍
两道算法:
- 找出现频率前k大, 用了堆做出来,但是可能面试官希望你手写堆,而不是用编程语言自带的实现,这里我不记得实现具体怎么写了,但是我说了大概的思路
- 2。链表扭转,从中间分开两边,左右两边的链表都要翻转,最终拼成一个新链表(其实就是反转链表啦),用了栈来做,但是后面面试官问我为啥不用单向链表来做,我说之前有试过,但是好像行不通(以前做过反转链表的题,当时就是想用链表来做,但是后面没解决出来,我就和面试官说了),后面结束面试后回想好像确实单向链表能做,有点后悔那么说了
- 实习项目里面哪个地方,做的最有成就感,解决了什么问题,选了什么方案,这个有提前准备,所以自我感觉还行?
- 讲讲你的秒杀场景?也有准备过,但是后面面试官新说了一个场景,我也圆过去了
- mysql相关(在项目里面穿插来问):事务隔离机制的原理:临建锁…mvcc(说了大概的步骤,记得不是很清楚)
- 事务回滚,undolog,
- mysql宕机,redolog ,redolog啥时候发生,事务提交前
- 操作系统:(这些都看过,但是忘了,,,,)
- 讲讲淘汰缓存的一些算法 没答出来
- 讲讲虚拟内存 这个答了个大概
- tcp三次握手四次挥手
- 缺页,物理内存满了,怎么淘汰 也没答上
- tcp半连接队列全连接队列 这个没答上
- 操作系统堆和栈的区别
- java相关(还是最熟悉java)
深拷贝和浅拷贝 8. 怎么实现深拷贝java 9. java的clone方法是怎么样的 10. jvm内存模型中创建一个对象的过程 11. 反问:业务有没有agent相关 答:主要还是电商场景 12. 最后第二天流程就结束了,感觉自己还有很多不足的地方,这些八股都没怎么背(主要是计网和操作系统,java和mysqlh还是相对熟悉的),以为可能会多问项目,但是项目才问了一点点。可能面试官比较看重这些基础知识,虽然算法题都做对了,可能实习的项目不太行,或者横向有很多比我优秀的吧,也没能挺进二面,还是有点遗憾的,其实还是很sad的哈哈哈,俺不会被打倒的。
《参考解析》
-
计算机网络:TCP(传输控制协议)是面向连接、可靠的传输协议,提供流量控制和拥塞控制;UDP(用户数据报协议)是无连接、不可靠但速度更快的协议。TCP通过三次握手建立连接(SYN→SYN+ACK→ACK),四次挥手断开(FIN→ACK→FIN→ACK)。
-
MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
JVM与GC:JVM内存模型:堆(对象分配,GC管理)、方法区(类信息、常量池)、虚拟机栈(栈帧/局部变量/操作数栈)、本地方法栈、程序计数器。GC算法:标记-清除(内存碎片)、标记-整理(无碎片,但移动对象)、复制(新生代)。G1按Region划分堆,预测停顿时间。