深挖项目
没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:
-
找项目中相对而言具有亮点的地方。比如我用 redis 实现了一个延时队列,然后对这个延时队列我通过分片来解决瓶颈,通过分发来加快处理速度。
-
找项目中复杂的地方。如果你做的项目中有复杂的地方,即使不是你做的,也可以拿来说,前提是你要搞得非常清楚来。
-
量化指标。一个接口原来有性能问题,比如你做了一个小的优化,将其 TP99 的耗时从原来的 500ms 优化至多少 200ms。
-
赋能整个团队。在开发业务的过程中肯定会遇到一些重复的工作,或者可以复用的服务。你可以开发了某个工具或者服务化了某个功能推广到了全组使用,给公司创造了价值。
腾讯面试
腾讯面试提前 1 天和提前一个小时都会发短信提示。去的腾讯滨海大厦面试,大楼的现代化程度很高,不过需要提醒一下的是,腾讯的滨海大厦分为南塔和北塔。我去的时候就上错楼了,需要下到 4 楼重新换成电梯。
一面
笔试
-
微服务的特点,如何实现服务发现和负载均衡
-
c++内存管理
-
time_wait 在哪一端产生,作用是什么
-
程序 crash 如何定位
-
服务性能问题如何定位
-
两个排序数组找中位数
-
就数字 n 的平方根
-
设计一个算法,抽奖次数越多中奖概率就越高
-
MySQL 如何分析一条语句的执行过程。delete from t1 limit 3 和 delete from t1 的区别?
一面
-
问项目
-
跳台阶
-
数组中奇数个元素
-
一栋楼有 n 层,不知道鸡蛋从第几层扔下去会碎,用最少的次数找出刚好会碎的楼层
-
动态规划与贪心有什么区别
-
redis 数据结构的底层实现
-
redis 如何实现高可用
-
负载均衡算法有哪些
-
服务发现是怎么实现的
-
熔断是怎么实现的
-
id 生成器怎么实现的,如何实现全局递增
-
协程和线程的区别
-
进程间通讯方法
-
平时逛哪些论坛,研究哪些算法
-
paxos 算法,这个算法我说不清楚,然后说了 raft 算法
-
gdb 怎么切换线程
-
如何判断一个图是否有环
-
介绍一下缓存
-
查看 CPU 的命令和磁盘 IO 的命令
二面
-
项目的系统架构画一下
-
如果用户量上涨怎么优化
-
负载均衡的加权轮询算法怎么实现
-
背包问题
-
贝叶斯的概率学原理
-
分词算法
-
连续整数求和(leetcode 第 829 题),要求时间复杂度小于 O(N)
HR 面
1.询问了除腾讯以外,还在看其他工作机会么?分别是什么 2.腾讯、XXX 公司、XXX 公司,你的优先级是什么,为什么?3.之前薪资待遇是多少?你期望的薪资是多少?4.平时有什么爱好?5.了解职位需求吗?6.有没有想问的?
腾讯二面最后一道算法题只能想出 O(N) 复杂度的,面试官一定要小于 O(N) 的,答不上来。这道题是 leetcode hard 级别的难度,所以没有刷。后来又跟面试官探讨了一下自己比较擅长的方面,比如协程与 TCP 方面的,因为自己也比较喜欢在 GitHub 上面钻研这些东西,
https://github.com/wangbojing/NtyCo
https://github.com/wangbojing/NtyTCP
我个人在这里学到的东西比较多(/狗头)
技术知识学习路线
一、 数据结构与算法、设计模式、工程管理
=====================
-
排序 (11 种排序) 与 KMP
-
红黑树 证明
-
B 树与 B+树
-
Hash 与布隆过滤器
-
责任链模式
-
过滤器模式
-
发布订阅模式
-
工厂模式
-
Makefile/cmake/configure
-
git /svn 与持续集成
-
Linux 系统运行时命令
二、代码实现、方案分析
-
网络 io 与 select/poll/epoll
-
reactor 的原理与实现
-
http/https web 服务器的实现
-
websocket 协议与服务器实现
-
服务器百万并发的实现(c10K,c1000k, C10M)
-
redis/memcached/Nginx 网络组件
-
Posix API 与网络协议栈
-
UDP 可靠协议 QUIC/KCP
三、池式结构、高性能组件、开源组件
-
线程池(手写)
-
内存池 ringbuffer
-
异步请求池 性能优化,异步 mysql 异步 dns 异步 redis
-
mysql 连接池
-
redis 连接池
-
原子操作 CAS
-
消息队列与无锁队列
-
定时器的方案 红黑树 时间轮 最小堆
-
锁的实现原理 互斥锁,自旋锁 ,乐观锁,悲观锁,分布式锁
-
服务器连接保活 keepalived
-
try/catch 的实现
-
libevent/libev 框架
-
异步日志方案 log4cpp
-
应用层协议 protobuf/thrift
-
openssl 加密
-
json 与 xml 解析器
-
字符编码 unicode/gbk/utf-
四、协程框架的实现、用户态协议栈 NtyTCP (tcp/ip)
-
协程的原理与工程案例
-
协程的调度器实现
-
滑动窗口 拥塞控制 满启动
-
tcp 定时器的实现
-
epoll 的源码实现
五、Skynet、ZeroMQ、DPDK
-
skynet 高性能网关
-
actor 实现与 cluster/负载均衡
-
skynet 网络与热更新 数据共享
-
ZeroMQ Router-Dealter 模式
-
源码分析:消息模型与工程案例
-
源码分析:网络机制
-
dpdk PCI 原理与 testpmd/l3fwd/skeletion
-
kni 数据流程
-
dpdk 实现 dns
-
dpdk 的高性能网关的实现