4月26日收到了腾讯的offer,终于安心了,很多小伙伴们要我写面经介绍下,其实自己能拿到腾讯的offer 99%是运气~,
这里就介绍下自己的面经跟总结自己的看的书跟学习方法,
自己来自一所非985垫底的211大学)~大三本科,主要学习的是Linux内核/C++,投的岗位都是后台开发,
自己的项目也就2个demo,一个简易kernel,一个很简单的网络库.
因为学校位置不方便,只投了腾讯跟美团.不可以投那么多互联网公司(路费.一出疆就上千),美团各种原因放弃了,
然后就这次到西安参加腾讯面试花了1800左右,拿到了腾讯的offer就不打算再找了,结束自己的春招求职.
以下是自己面腾讯的坎坷经历,只记得部分问题,很多都忘了,见谅
-----------------腾讯电面-----------------
4月10日,是日也,天朗气清、惠风和畅~牵着女朋友的小手手,手机突然显示来自深圳腾讯的电话,惊慌失措中……
(因为内推失败,然后笔试时间因为个人原因错过了,怎么腾讯面试官还给我电话)
然后就在路边进行了电话面试……
面试内容如下:
1.c++的static关键字的作用(我从elf结构,链接过程来回答)
2.内联函数跟普通函数区别(从反汇编角度来回答)
3.select跟epoll的区别(epoll内核源码看过,从内核实现角度回答,所以回答的不错),
small插曲:对于很多博客说epoll使用了共享内存,我说完全错误的,然后就扯到共享内存的内核实现(基于tmpfs,为何2个进程映射同一个文件会映射到同一片物理内存,根本机制是page
cache)
4.STL中的迭代器失效问题
5.指针,引用区别(反汇编分析,其实汇编指令实现都一样,可以把引用看做编译器管理的指针,语法糖)
6.Linux相关cpu内存网络相关指令
7.父子进程fork时,打开的文件的偏移量是否是相同的(从内核角度看,父子进程fork会将file文件复制一份,所以肯定会的)
8.Linux虚拟地址空间(3G以上内核,因为进程创建时,内核的页表全部拷贝到进程第768页目录项以上的,3G以下则是代码段(.init节,.text节,.rodata节),数据段(.data节,.bss节),堆(brk指针),栈从3G往下)
9.【计算机网络】只问了time_wait的危害,三次握手,四次断开
10.c++多态的机制实现(虚函数表,看过深度探索c++对象模型的都会的)
11.vector跟list区别,还有map的底层实现(红黑树)
12.extern关键字
50分钟电话面试~then接到去西安面试的通知
讲一波心路历程:
其实去西安面试心里很忐忑的,毕竟腾讯的面试都比较难,而感觉自己非常渣,然后路费都要1k5+,本来都放弃了……
【撒一波×粮~微笑~】
还好世界上最可爱最贴心最善良最美的女票鼓励我去,然后还给我出路费什么的,安慰我即使失败了,就当做增加面经,来西安旅游什么的.
so. 4月15号灰机来到西安,整夜辗转难眠……
【安利一波~】
腾讯面试点,五星级酒店,可谓是辉煌而精致,土豪中带着典雅,优雅中充满了艺术气息,奢华而不失内涵~腾讯土大哥
一面10:30,签到..等待面试地点通知...
-----------------一面---------------------
别说我low(好吧,我可能就是比较low)来到一个非常豪华的房间面试,面试官让我做自我介绍...
程序化中:我来自xxx大学,对xx很感兴趣,....(此处省略)
then面试官把代码题给我看
1.一个数组传递到函数,蜕变成指针,求字节数
2.定义在全局的对象,定义在堆中对象,定义在静态局部变量对象,定义在栈中的对象,析构函数的析构顺序(从函数汇编角度看待,非常容易这道题)
3.new int[10]跟new int[10]()区别
4.epoll的多选题.....正确答案只有一个...
5.让手写代码,求二叉树的翻转(镜像问题),刚好我在刷题的时候,刷过,还给女朋友讲过这道题,自己用了非递归队列实现,也用了递归实现,面试官觉得还行,就看了看我简历.
6.问到epoll跟select实现区别,
#好了~终于轮到我装逼了!#
从linux内核源码分析epoll的实现..把面试官忽悠住了.夸我很不错,有深度。
#果然装逼有时效,猝不及防面试哥哥一个问题抛来#
epoll的ET模式时,如果数据只读了一半,也就是缓冲区的数据只读了一点,然后又来新事件了..怎么办.
我当时听错了,一脸懵逼,结果乱猜了..面试官也猜到了..就没问了
(实际,fd都要支持内核的poll机制,新事件对应的fd.会把当前进程注册到等待队列,同时设置回调函数.,等fd对应的设备就绪时会唤醒等待队列中的进程,然后放入就绪链表..等等.肯定会继续啊)
然后又扯到网上那些破博客说什么epoll用了共享内存,一派胡言,把共享内存的实现说了一遍,基于tmpfs,然后tmpfs有什么不同,就扯到文件系统了...
7.红黑树,普通二叉树,AVL树,完全二叉树的区别(很简单,数据结构书都有)
8.编写c语言程序判断该大小端
9: linux内核解决惊群问题
10.hash碰撞,Trie树
11.map /set容器的实现原理(红黑树知识+STL容器内部原理)
Q:熟悉shell么..
A:不怎么熟悉
Q:说说tcp/udp区别,
(OK,轮到我装逼了~)
A:我把如果基于udp如何实现可靠传输说了一遍(网上有教程),然后udp啥一般用于视频传输,丢包几乎不影响,tcp有拥塞避免,流量控制,慢启动,快速回复算法,什么的都说了一通
切换至聊天模式~(面试官S. 我B)
S:你有什么想问的呢
B:我技术有什么缺陷,
S:在同级的人中算非常深入的研究这些技术的本质,基础非常不错,对内核也有不错的了解(看来我忽悠住了~),但感觉你缺少实践,书看的非常多,知识掌握也不错,就是实践差了点,不过你可以来腾讯实习,对你会很有帮助的.我会尽快安排你二面的..
S:因为你是从外地过来,让你高兴高兴,直接过了一面,等待晚上短信通知复试吧
...哈哈哈哈好高兴呀~~~啦啦啦啦啦
只能说又tmd一夜没睡好,持续性辗转难眠,间接性紧张失眠……尼玛其他人一面过后都要很久才收到二面,我tmd第二天9:30就二面...好坑啊啊啊..
一夜醒来三次,紧张到不行,8:40就到了酒店签到,9:23收到面试房间号..
-----------------二面---------------------
一进门,面试官又tmd让我自我介绍,程序化中xxxxxxxxx....省略..
他只提了一个问题,让我说说自己最熟悉的一部分。What?!我擦....我想想..
灵光一闪~想到Linux内核的内存管理机制,
就把Linux内核的物理内存管理(numa,uma架构,ZONE,PAGE,伙伴算法,SLAB机制,
冷热页缓冲机制基于LRU,OOM内存溢出机制,struct page跟物理内存的映射,page
cache,还有swap分区等等),
虚拟内存管理,高端映射,(进程pcb中的mm_struct结构指向整个进程的虚拟内存空间,vm_area_struct结构.堆栈,数据段,代码段什么的,malloc实现机制,mmap映射)
(说了非常久,希望唬住面试官..结果悲剧惹……面试官懂Linux内核.你不废话嘛~二面面试官可是部门总监)
指出了几个错误(自己挖的坑(具体的就不说了..对看面经的同学没啥用))
不想说面试官全程对我微笑,莫名心虚……
然后聊到如何防止内存泄漏,把c++11的智能指针还有auto_ptr的实现说了一遍),
然后面试官又微笑~(面试官:S.我:B)
S:技术说了这么多很累了吧,你觉得自己最大的缺点是什么.
B:现实不会主动问人或者与人交朋友,不过在网上很活跃
S:你是键盘侠吧(开玩笑中……)
B:当然不是
S:你的表达能力还是要改善改善.
B:我意识到这方面了,所以经常给我女票讲解c/c++知识还有算法题,希望提高自己的语音表达能力,
S:那就很好.你今后的职业规划是怎样的
B:我会继续读Linux内核,因为我对内核的实现机制非常感兴趣还有底层的实现机制,还有会往分布式存储(乱说的)发展,希望自己技术得到非常大的提升.
S:你书读了很多,基础非常不错,对技术也有很深的探索,就是缺少实践,做的都是demo,需要来公司实践,
【接下来就是面试官装逼time.默默聆听中……】
把他那部门给夸的天花乱坠,什么负责整个腾讯虚拟币支付啥的,说我在他那部门实习技术会得到很大提升,
他有个带了10年的徒弟也一直在研究内核什么的,现在非常强,让我不要放弃继续研究内核实现.
然后问我还有什么问题,我说我从外地过来的,能否直接告知我结果
面试官直接说:你过了二面,等待hr面试吧,我会尽快把你简历给hr,让你早点回学校QAQ.
-----------------HR面---------------------
下午hr面试,躺在床上睡觉,被hr的电话吵醒来,问我方便么
(腾讯非常人性化,很多人hr面都是现场面试,而西安的hr要明天才到西安,然后我在外地,所以直接给我电话面试)
问哪里人什么的..有木有女朋友,什么是否是独生子.其实就是闲聊........
hr问了10多分钟就挂了电话~
有些小伙伴们问我看了哪些书,其实c/c++后台开发就那些经典书
另外介绍一点人生的经验:选购书籍.尽量选择国外的书...原因不多说,另外从豆瓣里选择书籍,看评论,评分
以下是自己看的书籍介绍
汇编部分:
汇编语言(masm汇编,王爽写的非常不错)
x86从实模式到保护模式(学习kernel必备,保护模式是一大坑)
c/c++部分:
C++ Primer(入门必备(但并不是0基础可以看,0基础看C++ Primer Plus)
Effective C++,More Effective C++(提升c++的编程技巧,面试官很多都从这书里问)
深度探索c++对象模型(了解c++的底层实现机制,不然面试官问了多态的实现,你不会就挂了)
STL部门:C++标准库(侯捷)(介绍STL六大组件的应用)
STL源码剖析(STL的源码,不过自己只看了一半而已)
范型编程与STL(绝版书,不过讲解traits时非常的nice)
操作系统概念部分 Linux鸟哥私房菜(linux相关命令操作,不过自己推荐the linux command
line这电子书更棒)
《轻松学用linux shell编程》(shell学习相关的)
现代操作系统(非常经典的操作系统书,不要看国内的操作系统书)
深入理解计算机系统(CSAPP)(豆瓣高达9.0以上的书,含金量就不多说了,其中的第7章有关elf看懂了,那就不必看那本程序员的自我修养了)
操作系统内核部分:
操作系统真象还原(教你怎么从0实现一个kernel,看完对操作系统绝对有一个飞一般的认识,另外作者钢哥非常棒
,我经常骚扰他问内核问题,都会耐心回答)
Linux内核源代码情景分析(毛德操所写的2.4内核源码,感觉非常有深度,自己囫囵吞枣的看完,细节部门略过了)
Linux内核设计与实现(一本比较薄的2.6内核剖析书,很容易看懂其内幕)
深入分析Linux内核源代码(一本绝版书,陈莉君教授所写的2.4内核源代码,配合Linux内核源代码情景分析使用,效果更佳)
深入理解Linux虚拟内存管理(这本才刚开始看,没看多久)
Linux环境编程:从应用到内核(一本非常棒的新书,讲解apue的api背后的内核实现,作者我也加了,内核功底非常深厚)
计算机网络:
(计算机网络:自顶向下,不过学院那本谢仁希的还凑合吧)
tcp/ip详解卷1(腾讯课堂有明教教主讲解这本书)
网络编程:
Unix环境高级编程,Unix网络编程(这两本就不多说了,unix的圣经),
linux 高性能服务器编程(国内写的一本不错的书)
数据库那块自己很弱只看了mysql必知必会,redis入门实战 ~面试时也没问到数据库相关的,运气爆棚~
算法与数据结构:
自己的算法能力都很弱,这里只推荐那些算法比较弱的同学:
数据结构与算法分析(维斯),还有剑指offer题必须刷完,leetcode,编程之美也最好刷一刷,
,那算法那块就没问题了,当然这里指的是普通的开发岗位,而非算法岗
设计模式:
《设计模式:可复用面向对象软件的基础》,还有博览网上面的c++设计模式视频
辅助类的网址
牛客网(
牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力),牛客网上瘾有剑指offer,leetcode等各大互联网公司的涉及操作系统,数据结构什么的选择题,填空题,编程题,非常不错
还有各路大牛的面经,各种公司的内推什么的,感觉是校招必备的网址
当然最重要的一点,光看书远远不够,需要不断的写代码,才能提高编程能力,现在很多公司都要手写代码,所以这方面也要练练
以上是小弟的面试经历~End
作者:赛罗·奥特曼(自己啦)
链接:
新疆学子的腾讯后台开发的面经_笔经面经_牛客网来源:牛客网