Bootstrap

已拿腾讯后台开发岗offer,简单说下自己的面试经历和学习路线

面前准备

敲定了方向和目标后就开始系统准备,主要分为以下几个方面来准备。

算法题

事先已经看过别人的社招面经知道头条每轮技术面都有算法题,而这一块平时练习的比较少,校招时刷的题也忘记了很多。因此系统复习的时候算法题还是花了比较多时间的。先是快速刷完了剑指 offer,这个校招时已经刷过两边了,因此现在刷起来会相对快一些。然后就是啃 LeetCode 的题了,LeetCode 的题比较多,想在短短几周内刷完基本是不可能的,因此我主要按照类型去刷,每个类型刷几道就会比较有感觉了。比如链表的题优先考虑递归和双指针来解决,栈和队列的题优先考虑用两个栈或队列来解决,树的题基本都是递归等。不过数组和字符串的题一般比较灵活,这种题只能尽量多刷了。平时要上班刷题也不方便,我采用的方法就是看题,用手机打开 LeetCode 的网站,看完题目后直接想解决方案,脑子里大概捋一下代码怎么写,能想到的就过,想不出的就看看别人的解法,用这个方法刷起来就很快。用这种方法你可能会担心面试时题写不完整,其实不用太担心,因为面试的时候面试官看你写的核心思路是正确的,边界处理是对的基本就过了,面试时间比较有限。

理论基础

基础这一块主要以快速复习为主,主要是语言(我主要用C++,所以复习C++)、操作系统和网络编程。校招这一块会问题的比较多,社招这一块问的比较少,但是如果这一块打不上来就比较尴尬了。语言就不说了,这一块大家应该都知道会考些什么,校招的时候毕竟都疯狂准备过。操作系统就看内存管理、进程管理和文件系统,一般虚拟内存问的多。网络编程这块就包括 TCP/IP 协议,HTTP协议,网络安全三个方面。TCP/IP主要就是三次握手,四次挥手,TIME_WAIT 的作用等这些常考的题了。HTTP 协议考察 HTTP 协议的返回码、HTTP 的方法等。需要特别指出的是 HTTPS 加密的详细过程要非常透彻,不然容易产生一种感觉好像都清楚了,但是一问就有点说不清楚。最后就是网络安全,主要考察也是 WEB 安全,包括XSS,CSRF,SQL注入等。

后端技术

这里的后端技术主要指工作中要用到的一些基础组件,一些常见的后端架构设计。主要准备了MySQL、Redis、消息队列、zookeeper、分布式系统架构设计和docker。MySQL 主要看了 《高性能MySQL 第三版》,关于事务、索引、锁以及 binlog 和 redolog 都讲的非常好,也是面试最爱考的,除此之外对数据库的读写分离、分库分表也要掌握。Redis 主要看了《Redis 的设计与实现》,然后自己再总结了一下 Redis 的使用场景,以及 Redis 实现分布式锁基本 Redis 就没有问题了。分布式系统的就准备CAP理论、BASE理论、限流、熔断、一致性***算法、主从架构、集群架构、异地多活、负载均衡、分层架构、微服务等。

深挖项目

没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:

腾讯面试

腾讯面试提前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上面钻研这些东西,

我个人在这里学到的东西比较多(/狗头)

技术知识学习路线

【文章福利】小编推荐自己的linuxC/C++语言交流群:832218493!整理了一些个人觉得比较好的学习书籍、视频资料共享在里面,有需要的可以自行添加哦!~

一、 数据结构与算法、设计模式、工程管理

二、代码实现、方案分析

三、池式结构、高性能组件、开源组件

四、协程框架的实现、用户态协议栈 NtyTCP (tcp/ip)

五、Skynet、ZeroMQ、DPDK

六、 MySQL、Redis、Nginx、mongodb、dfs

七、Linux内核进程管理、内存管理、文件系统

八、性能分析

九、分布式架构篇