秋招总结(百度,阿里,好未来,腾讯,美团) | 掘金技术征文

2,649 阅读10分钟

前几天收到美团和百度的意向书,算是对自己秋招的一个收尾了吧。总结一下这个秋招。
首先感谢牛客网,所有的offer都是通过牛客网上帖子内推获得的,也在这个平台上看了不少面经,刷了不少题,腾讯和好未来我已经拒掉了,剩下在百度和美团再这两家选,可参考我的前一个帖子,请大家给点建议。

PS:楼主是C++后台

阿里巴巴,蚂蚁金服(二面跪)
阿里巴巴跪了首先确实是因为自己能力不足,其次是因为自己作死投了JAVA岗(本人主要会C++)。

  1. 一面:
    1.实习经历
    2.说一下迪克斯特拉算法
    3.LinkedList和ArrayList区别
    4.B树B+
    5.一致性哈希
    6.图的的环检测(深搜)

    7.对称加密与非对称加密

    8.还有些东西时间有些久远不记得了

  2. 二面:
    1.写堆排序
    2.二叉树先序遍历(用递归和非递归)
    3.TCP三次握手,四次挥手
    4.说自己的项目,怎么优化

结果GG

百度运维部(三面跪)

  1. 一面
    1.TCP三次握手,以及为什么不是两次或四次
    2.TCP四次挥手状态,为什么要有time_wait,以及如何避免
    3.文件系统实现
    5.proc文件系统(meminfo,cpuinfo)
    6.Linux命令查看文件大小
    7.布隆过滤算法
    8.项目,如何改进

  2. 二面
    1.全程谈实习
    2.问了一个堆排序,然后堆得作用

    3.Topk

    4.将一个只含有1~n的乱序数组(不重复)的第一个数变成-1,求哪个数被变成了-1

    问面试官我进去做的是运维还是开发,被他教育了一番,但他说还是给我过了

  3. 三面
    1.输入baidu.com是怎么通信的
    2.能不能来实习
    3.。。。剩下的不记得了,被虐了

结果GG,被自己菜醒。。。

好未来(拒offer)

  1. 一面
    1.二叉树高度(递归,非递归)
    2.一个数组只有一个数不重复,找出这个数。
    3.一个数组有两个不重复,找出这两个数
    4.写一下堆排序
    5.虚函数实现机制
    6.一个硬币,有A,和B两人投币,A先投,正面A赢,反面B继续投,B投到正面算B赢否则A继续投,这个规则持续下去求A赢得概率(等比数列公式忘了*_*)
    7.Java与C++区别
    8.怎么学习的

  2. 二面
    1.快排如何优化,快排与堆排优缺点
    2.设计一个类,...忘记了
    3.static作用
    4.讲项目
    5.愿不愿意转算法方向

结果offer

美团 餐饮(offer)

  1. 一面
    1.meituan.com通信过程
    2.TCP三次握手,四次挥手,状态
    3.虚拟内存机制
    4.缺页操作系统如何处理
    5.什么是elf头文件
    6.写快排,二分,单例

    7.volatile作用,内存屏障

    8.Java与C++区别(从模板,编译,链接,内存,库几个方向解释)

  2. 二面
    1.给一个字符串数组和一个字符串S,找出字符串数组中所有的字符串s符合规则:s通过删除,增加,替换一个字符可以变为S。
    2.简单讲讲操作系统内存管理机制,段式与页式内存管理的优缺点(顺道讲了下段页式)
    3.知道sendfile吗(表示不知道),啥是NIO(小白表示没听过。。。)
    4.RPC实现(答得很烂)
    5.讲一下一个C文件的编译链接过程
    6.B树B+
    7.讲实习,讲自己的项目
    上来这个面试官就说前面的算法太简单,来个稍微难点的第一题,(也不算难吧*_*。。。

  3. 三面
    1.45度斜线打印二维数组
    2.讲一下网络通信协议栈
    3.TCP和UDP区别,TCP如何保证可靠性,time_wait,TCP有哪些缺点
    4.HTTPS如何实现

    5.什么是缓存,为什么需要缓存,有哪些缓存使用场景

    6.最近看了什么讲一下,讲了一下GFS的核心和mapreduc

  4. 4个瓶盖换1瓶酒,要喝150瓶酒,他自己最少买多少瓶?

  5. 8.聊了下人生

结果 offer

腾讯 SNG QQ音乐(拒offer)

  1. 一面
    1.vector与list区别
    2.什么是traits,作用
    3.迭代器失效
    4.unorderd_map如何实现
    5.模板两种特化,作用(要求根据STL讲,再配合traits说了下)
    6.说一下yacc和lex,递归下降
    7.tcp/ip...(这个答得都快吐了,参考前面
    8.深拷贝浅拷贝,右值引用,智能指针,引用计数,循环引用如何解决

  2. 二面
    1.两个排序数组合并成一个排序数组

    2.游戏(农药)用的TCP还是UDP为什么

    3.Epoll与Select区别以及epoll优点,为什么一般情况下epoll性能比select好,ET模式与LT模式

    4.Epoll ET下非阻塞读,为什么不能是阻塞

    5.发送3个80字节包,TCP与UDP下对端分别接受几次(其实就是TCP与UDP区别之一,TCP基于流)

    6.实习,项目

  3. 三面

    1.如何判断一个数是2的次幂

    2.快排

    3.还有些不记得了,回答的不是很好

    4.谈谈理想啥的

百度云计算事业部(offer)

  1. 一面

    1.给一个先序序列,重构完全二叉树,如果是一般二叉树能不能重构,为什么(QQ写代码_)

    2.有三个消息队列,随机的向三个队列插入元素(概率可能不同),如何保证插入和查找的高效(有两种思路,一种是加一个控制器,队列通知占用率,由控制器控制插入和查找,另一种是计算阻塞次数,再根据阻塞次数按比例控制该队列的插入频率和查找频率)

    3.最长公共子序列

    4.vector的拷贝,swap函数交换指针

    5.线程与进程区别,优缺点,进程内存模型

    6.IPC有哪些,共享内存原理

    7.说一下LRU cache思路

    8.赛马问题,36匹马,6个赛道,找出最快6匹马的最小赛马次数,如果是n匹马,m个赛道呢

  2. 二面

    1.虚函数实现机制

    2.内存模型影响因素(内存对齐,多重继承下的内存模型,菱形问题,虚拟继承内存模型,虚拟继承是如何处理的)

    3.NRVO优化,右值引用

    4.extern C作用,为什么需要

    5.C++重载,name manging机制

    6.Epoll与Select区别以及epoll优点,为什么一般情况下epoll性能比select好,ET模式与LT模式

    7..如何用epoll实现高并发,多线程,线程池,线程惊群问题

    8.二叉树先序遍历,递归,非递归,如何用O(1)空间实现(morris 遍历)
    9.互斥锁的实现原理(屏蔽中断,CAS),读写锁实现

  3. 三面

    1.实习,项目

    2.TCP拥塞控制,滑动窗口协议,糊涂窗口

    3.虚拟内存机制,二级页表,TLB快表,缺页,swap

    4.操作系统调度算法

    5.TCP如何保证可靠性,四种定时器,time_wait如何解决,Nagle算法

    6.一致性算法(raft),一致性哈希

    7.优点缺点,是否愿意来实习

结果offer

总结

作为一个学校不太好,非科班的同学,跟大神收们比还是有些差距的(**比如内核及TDF大佬 @赛罗·奥特曼)。楼主拿到成都美团的offer和百度的offer后就没有参加别的校招了,其他笔试也没去做了(**) ,上面就是我的全部面经。下面说一下我的学习经验,再分享些学习资源,有需要的可以自取

总结一下经验,有些常见的问题(比如线程进程区别,extern C,虚函数,IPC)可以深入去回答,面试官考这些问题其实是想了解学习的深度如何,这个就跟平时的积累有关。有些问题提前准备,不要临时去发挥,比如:自我介绍,offer意向,优缺点等的问题,个人项目和实习经历一定要提前复习,反复去演练,看看有哪些可以提升的地方。算法题要多练(leetcode,剑指offer),特别是剑指offer。面经可以多看,毕竟很多问题提前准备大有益处,也可以查漏补缺,还有一点,能走内推尽量内推,可以免去不少精力。

分享一些学习资料

这个是侯捷的C++教程视频,非常非常好的教学视频涵盖了内存管理,STL(从源码层面分析),C++11这些内容,面试关于内存管理,STL的内容,学会了视频里的可以说是秒杀这些问题,这里我骗下赞,求大家赏个脸,点个赞,涨涨经验(*_*)

链接: pan.baidu.com/s/1qXQynz2 密码: fus4

还有一些书籍推荐给大家,其实都是些常见的书,需要的看看就行:

C++

《C++primer》这不用说了吧,用了都说好。

《STL源码剖析》模板,traits,数据结构。。这个对我面试加成挺大的,看了几遍后,仿了个小STL

《深度探索C 对象模型》虚表,多继承,虚继承,NRVO。。。。

《Effective C++》学些C++技巧

还有些比较杂的就不推荐了

算法与数据结构

我看的是《算法》,红皮书,跟着coursera mooc(Algorithms I,II)走一遍,做做课后lab,功力大升

《算法导论》,没看完,查漏补缺用,补充上面书没提到的动态规划,B树等知识

剩下就是刷leetcode oj,楼主刷的不多就把前150道搞定了,听说某大佬大二刷了300多道,惭愧。。

网络

先看《计算机网络自顶向下方法》,再看《TCP/IP详解》

操作系统:

必须推荐一下神书《深入理解计算机系统》,内功大法好,面试吹逼必备

然后看《现代操作系统》,主要看进程,线程,内存管理,文件系统

实践的书推荐一下《操作系统真象还原》,实现一个小内核,挺好玩的,记得 @赛罗·奥特曼 大佬也推荐过。看之前回顾一下CSAPP的汇编那章。

Linux

stevens那几本圣经书,不在多说。。。

设计模式

简单易懂《head first 设计模式》,看了之后了解下设计模式,但我觉得这东西还是要落实到工程上,否则就是空谈。。。

其他的就是编译原理啥的,有兴趣的可以看看。。。《编程语言实现模式》这书挺有意思的,教你写parser啥的。然后是《编译原理及实践》,讲解基本原理LR,递归下降,DFA,NFA,程序编译过程的原理都涵盖了,但不深入。。。再深点就是大名鼎鼎的龙书《编译原理》,这个在看了前面两本书的基础下看就没啥压力。。看完这些书写点Parser,Lexer还是挺有意思的。。有兴趣玩玩再代码生成,优化等等,楼主才疏学浅玩不动,只看了点编译后端的原理。。。

关于分布式的学习大家也可以向我推荐一下方法,还是有些simple and naive的,一直都在学习理论,缺少实践,,准备学下Redis(*_*),再看点源码


2017.09.18更新

关于简历

简历的书写着重突出重点,个人信息,实习经历,项目(两三个),然后介绍下技能点,我是这样的排版。一般简历一页就足够了。推荐一个神器Typora,可以用markdown写简历,这个软件可以转md格式为pdf,而且有不同的markdown风格,当然用LaTeX写最好了。

另外,推荐一下印度人的一个网站Geeksforgeeks,这个网站有很多算法和数据结构的讲解实例,虽然是英文的但挺好理解的,还有很多外企的面经。