2018腾讯阿里面试经历整理

前言

内推轮基本已经结束,在这里整理一下有关内推的面试经历。投了挺多家公司,最终只有腾讯和阿里发起了面试,有些磕磕绊绊,最后拿到了AT两家的实习offer。
实习面试的内容基本上是一些比较基础的操作系统、数据库、算法和数据结构,还有语言层面上的一些的内容。面试官对我的Web开发经历没有特别感兴趣,只在问到项目的时候问了问项目中遇到的最难的问题以及解决方案等。
另外面试还是挺考耐心和承受力的,有些面试问得有些难,时间又比较长,会让人压力比较大,这个时候心态就比较重要了。
这些经历整理只放问题,因为自己的答案可能不太正确。

腾讯面试

腾讯面试比较曲折一些,前后面了几个事业群,最开始很多东西没复习好所以表现不太好。

SNG的后台开发一面(3.9)

时长约40分钟
按照顺序说一下

  1. 自我介绍
  2. C++/C语言获取文件大小(因为说做过模拟Linux文件系统)
  3. 虚析构函数、虚函数表
  4. 多态和继承
  5. 快速排序
  6. C++多线程编程(pthread)
  7. Linux基本命令(详细问了如何看系统负载)
  8. 实习经历
  9. 进程间通讯(Linux使用进程间的一些基本函数)
  10. strcpy的实现(这一类可以归到C的一些库函数实现如memcpy,strcat,strlen,strpbrk,strstr)
  11. 奖学金
  12. 你自己用的比较多数据结构中用的树
  13. map相关
  14. 提到了redis,所以问了一点redis相关的内容
  15. 其他想介绍的体现自己学习能力的过程
  16. 问了问简历上有关的参赛记录(美国大学生数模,天池)
  17. 问了下基本信息(哪里人、课业压力,实习时间,大四能实习吗,又问了问成绩)
  18. 还有什么想问的
  19. 问了下微信号,然后加了微信,然后说3月31的深圳专场线下面,问肯不肯去面试,到时候约时间。

自我评价:这次面试在我投了内推简历之后第二天收到的,有点突然,所以有一些没有准备好,感觉表现不是很好,不过面试官看起来愿意给二面机会,只不过线下专场面试安排的太晚了,基本上是内推快结束的时间,所以过了几天面试官又电话问我安排的时间太晚,愿不愿意等,或者要不要给我面其他事业群的机会,然后如果31号前还没确定去向,就再邀请我参加线下面试,所以我同意了,就有后面的其他面试。

WXG的微信深圳岗面试(3.13,Failed)

线上笔试+面试共计两个小时

笔试环节
  1. 斐波那契数列非递归方法,问如何用数学模型更直观的去做(只答了计算根据通项公式去算,时间复杂度为常数,后来查资料发现因为引入无理数所以精度无法保证,还有一种矩阵计算方式,复杂度logn)
  2. 实现memcpy库函数(主要考察批量复制的时候转为char*,提高复制速度,以及跟strcpy的区别)
  3. 找到数组中出现次数超过n/2次的数(快速选择前n/2的值,时间复杂度O(n),第二种是写法不用那么复杂的方法,这道题的解法剑指offer上应该都有)
  4. 30万员工,随机取10万员工获奖,不可重复,怎么编程实现。
  5. 最长递增子序列(动态规划O(n^2),还有一种O(NlogN)的算法没答出来)
  6. 逻辑题,甲乙分别知道两个不同的数,甲知道两数之和,乙知道两数之积,乙问甲知道吗,甲说不知道,甲又问乙知道吗,乙说不知道。然后甲就知道了,乙也知道了。问这两数是多少?(网上答案貌似是2、3,这道题我诚实的说不会Orz)
面试环节
  1. 在浏览器输入Url后整个流程(比较常规的题目,能讲多底层就多底层,可以看出知识深度)
  2. TCP和UDP的差别(为什么TCP是可靠传输,TCP的流量控制和拥塞控制:滑动窗口、慢开始和拥塞窗口)
  3. Linux多线程多进程编程
  4. 问了问简历上的模拟Linux文件系统,遇到的最难的问题,怎么解决
  5. 又问了问Sample编译器的内容,重点问了语法分析,又问没有做到汇编吗(Orz只做到四元式生成)
  6. 问了问其他项目经历和机器学习比赛、美赛经历
  7. spark,MapReduce有用过吗
  8. PHP的优化,问echo缓冲区的优化,每次都要等待写完才能吐出数据,如何优化(ob_start,ob_end,ob_flush)
  9. XSS攻击和SQL注入

TEG后台开发一面(3.19)

面试时间30分钟左右

  1. 自我介绍
  2. C++了解多少(C的库函数实现了解多少)
  3. malloc和new的区别(最好答到初始化、构造函数以及new[]的不同)
  4. 虚函数作用和实现(虚函数表)
  5. 虚析构函数,析构函数的调用顺序
  6. 纯虚函数的作用
  7. Linux基本操作(查看进程和CPU负荷)
  8. gdb用过吗(Unix下的调试程序)
  9. 网络开发接触过吗?(HTTP的状态码讲一下)
  10. http1.0和http1.1版本区别(长连接,cache,host字段;http2还有多路复用、数据压缩和服务器推送)
  11. 三次握手四次挥手
  12. 快排
  13. 2.5亿个整数,找出没有重复的整数(答的位图去存储)
  14. 简历上的项目经历
  15. 抓包软件用过吗(Wireshark,fiddler)

TEG后台开发复试(3.20,Failed)

面试时间10分钟

  1. 自我介绍
  2. C++虚继承
  3. Linux进程空间从低到高的分布
  4. http状态码
  5. sed和awk脚本
  6. 平时开发是在Windows还是Linux
  7. Linux基本命令
    感觉不太符合部门要求,sed和awk没用过,然后就Failed了,显示当前职位不适合你。

TEG后台开发笔试面试(3.27)

笔试+面试共计一个半小时时间

面试
  1. 自我介绍
  2. C++项目经历及遇到的困难和解决方法
  3. 问了Linux的Shell同时登陆时锁的优化
  4. 问了文件同时编辑的锁优化
  5. Linux移动文件夹的操作流程(实现)
  6. 问了内存中维护Dentry项的缓存淘汰算法
  7. 数模国赛美赛担任角色以及天池比赛担任角色,为什么没有取得更好的名次
  8. 三次握手和四次挥手,如果发送数据过程中受到了RST包是什么情况
  9. UDP包的ip和端口都不存在,会怎么处理
  10. 跨域解决方案
  11. TCP相关开发遇到过什么问题
  12. vector和map的底层实现
  13. STL中的内存分配有了解吗
  14. C++虚函数实现原理,如果想指向父类虚函数,要怎么做,如果父类虚函数是纯虚函数,会在编译还是执行阶段报错
笔试
  1. 快排
  2. 快排特性,适用于什么场景,和堆排序以及归并排序的对比(快排不稳定在哪里,如何改进,pivot选取的改进)
  3. 写一个stringToInt的函数,不借助库函数。
  4. sizeof和strlen的区别,如果把数组传到指针内后结果会有变化吗,什么时候计算什么时候得出结论(sizeof在编译时,strlen在执行时才得知)
  5. 单向链表判断有没有环,用快慢指针时,如果为1一个为3,能相遇吗?答案是可以,但是2循环更少,网上有相应证明。
  6. 如果有环相遇了,如何找到环的起点?(相遇点时,让一个指针指向头,两个指针每次走一步,再相遇就是起点)
  7. 知道了环起点,如何知道环长度?(这个就容易点,一个不动,另一个一直走就行)

TEG二面(3.28)

时长一个小时

笔试
  1. 把整数转为字符串
  2. 上面那题中的各种边界条件和内存释放
面试
  1. C++的项目经历
  2. 实现Http Server如何实现高并发?
  3. 算法接触多吗
  4. QQ的登陆日志50亿条,统计不重复的QQ号码,假设QQ号码都是32位无符号整数。还是位图去做,统计的时候用什么方法统计?(n&n-1),有更快的方法吗?(先算表,然后按字节去计算查表),那么表应该开多大,如何折中?

TEG复面(3.30上午)

时长12分钟
这次面试时间较短,倾向于项目面和未来发展

  1. 自我介绍
  2. 比赛经历(天池),解决思路,遇到什么困难,跟排名较前的差距在哪
  3. 未来的职业规划

TEG的HR面(3.30下午)

时长2分钟

  1. 面试难度怎么样
  2. 有没有亲属在腾讯工作
  3. 家庭和个人基本情况
  4. 发口头offer

阿里面试

阿里的面试比较顺利一些,不过轮数较长,总共面了5轮,不过是在内推后过了挺长时间才联系我,而且基本都问愿不愿意去杭州(我意向城市填的是广州深圳),投的岗位是Java工程师,虽然Java不是太熟,但是听说阿里基本都是Java岗所以就投这个岗位了。

阿里一面(3.17)

面试时间40分钟

  1. 工作地点为杭州愿意吗?
  2. 提出对Java不算特别熟悉
  3. 做过印象比较深的项目,遇到了什么问题,怎么解决
  4. 详细问了线上商城的项目,并且指出了我项目中设计的问题,并询问我怎么解决(这里花了很长时间,跟面试官边讨论边回答)
  5. 按时间顺序在极大量的情况下取前TopK的算法,分布式方案呢?
  6. 并发和并行的区别
  7. 死锁的条件
  8. MySQL的索引是什么
  9. MySQL的索引实现方式?什么是B+树
  10. MySQL中的cache和磁盘一致性怎么保证的
  11. MySQL的内存结构
  12. MySQL如何从请求到执行完成的生命周期是什么
  13. 常用缓存淘汰算法
  14. Windows/Linux的进程优先级调度
  15. 有什么想问面试官的吗

阿里二面(3.19)

时间一个小时

  1. 对比一下Java、Python、C++内存管理上的区别
  2. Java、Python和C++高并发解决方案
  3. 看过哪些Python的书
  4. Python装module的命令
  5. 从机械磁盘读文件到内存中的整个过程,越详细越好
  6. 文件缓存机制和缓存淘汰算法
  7. 文件加载的块机制,一般块大小
  8. 文件的缓存刷回机制
  9. TCP和UDP的区别
  10. TCP协议格式和头的组成
  11. TCP的确认重传和拥塞控制
  12. HTTP和TCP的区别
  13. GET和POST的区别
  14. HTTP缓存机制304
  15. HTTP错误码(2xx-5xx)
  16. Cookie和Session
  17. 用户名密码的保存,明文密码还是哈希盐加密
  18. 非盐加密的方式破解成本
  19. 用户账号密码传输你是用HTTP还是HTTPS
  20. 介绍一下HTTPS加密传输的过程(非对称加密)
  21. 对称加密和非对称加密
  22. 有了非对称加密,为什么还要对称加密(非对称会慢)
  23. 并行和并发的区别
  24. 进程的调度机制
  25. 进程优先级如何改变
  26. 进程间的调度
  27. 进程间通讯的方式
  28. 输入URL后的整个过程

阿里三面(3.20)

面试时间25分钟

  1. 自我介绍
  2. 介绍一下自己的大部分项目
  3. 大部分项目时间重叠,是如何处理这些事务的
  4. 针对商城项目问的稍微详细一些
  5. MySQL的一些外键优化
  6. 并发高的时候主页的优化
  7. RBAC的实现(自己项目中的权限控制内容)
  8. PHP的自动加载机制
  9. C++的一些项目和其中的一些优化

阿里四面(3.28)

面试时间20分钟

  1. 自我介绍
  2. 还是项目面,问比较多项目方面的内容
  3. OAuth2.0的内容
  4. 问在广州市内设消防站和消防车和消防人员配备方案,会怎么设计
  5. 未来的职业规划

阿里HR面

面试时间30分钟

  1. 自我介绍
  2. 家庭情况
  3. 成绩
  4. 有读研的打算等吗等个人的细节…
    具体也没什么好记录的

总结

面试心态要放好,多复习基础知识(操作系统、算法和数据结构),最后感觉运气成分也有一些,也希望后面找实习的各位加油!