【写在前面】
背景中流985,非科班,但相近专业渣硕。没有互联网相关项目,只会C++和Python。8月初开始准备秋招。岗位锁定后端,目标定位前十大厂,侥幸拿到了理想的offer。
【准备】
目标后端,主要复习内容:刷题+基础,觉得有时间的同学最好多增加一个项目。我由于准备得太晚,优招内推基本都没来得及,所以只能走校招。
基础部分:C++、数据库、操作系统、网络,数据结构与算法五门。C++看的是程序员面试宝典。其余主要靠的牛客网上github资料:https://github.com/CyC2018/CS-Notes
刷题:剑指offer牛客网上刷了两遍,一遍python,一遍C++,然后手写一遍,由于时间关系却没有总结。LeetCode核心题目,参照上面github资料。牛客网上2017年编程题合集。一共差不多200道题,LeetCode部分有总结。
建议:勤记笔记,基础+实践+总结,这三步走下来基本没问题。经常容易忘,所以需要经常看看。
【面经】
一共面了6家。拼多多,网易游戏,招商,平安,百度,滴滴,头条。
【头条面经】:
最想去的公司,挂的最快,一面问了两个问题,
1. 一张纸平摊在桌上,不断从左边往右边对折N次,然后按折叠顺序展开,会有折痕,折痕向上记为1,向下记为0,求N次的序列,在线写代码。
2. 用实现一个可以在时间复杂度为O(1)内能找到栈的最大值的栈。面完5分钟接到通知说挂了。
【拼多多面经】:
一面
1. 看笔试的答题,为什么用python不用C++
2. 找出笔试中有bug的地方
3. 一个算法题,给定n多个线段(ai,bi),输出并集的长度。(我的方法是每新加入一段,就找他应该在的位置,然后根据情况可以合并。其实有更简单的办法,先按起始节点排序再逐个合并。两种方法效率类似,但是第二种更好操作)可能由于想的时候时间太多,没有写代码了
4. 后面问了一些基础知识,包括:大段小段、x86平台是大端还是小段(小端)、c++内存泄露、c++智能指针、move操作、IO复用技术、线程安全、GDB调试如何查看堆栈(bt)、Python的GIL、数据库的隔离性有几个级别。
二面
1. 写代码翻转二叉树(递归实现)
2. 不用递归实现(增加一个队列记录翻转的节点,再挨个翻转,直到队列为空)
3. Socket (不会)
4. TCP协议(传输层、三次握手、四次挥手,画四次挥手具体图,问为什么服务端为什么需要发送两次,没想出来)
5. 聊HTTP协议(状态码、请求、cookies的用vd法、session用法、怎么保存session用数据库不用文件、登录一个网站建立cookies和session的过程、cookies里面的内容)
6. 数据库联合查询(join,inner join。。。)
7. C++内存泄露、gdb调试如果程序很大,同时卡住在某个地方,怎么调试(中止看调用栈)、如何中止(ctrl+c)、如果是后台程序怎么中止(不知道,告诉我是kill,kill还有很多其他命令)、为什么ctrl+c可以中止程序、如何让程序不受ctrl+c中止。
8. 又出了一道算法题,和第一个差不多,给定很多个线段,和一个目标线段,看目标线段的并集有没有覆盖目标线段。要求写出程序,时间10分钟,写完解释一下
9. 这样做的时间复杂度是多少,快速排序的时间复杂度,归并排序的时间复杂度,怎么推的
10. 有什么问题,1、主要使用语言,会扩展c、java、golang等。2、主要工作内容:后端平台组件等
【网易面经】
一面:
1. C++相关基础知识,const,static,类的从初始化,存储区
2. 笔试题讲解
3. LRU实现o(1)时间查找
4. 有权重的图最短路径
5. 100W数据,设计数据结构显示大致段位排名
6. 多线程访问
7. 是否对游戏感兴趣,比较难转行
二面:
1. 项目,基本上自己说
2. 将一下笔试题
3. 三个盒子,其中一个有奖品,任选一个后,打开两个中没有奖品的那个,问选择原来的那个中奖概率大还是换成另一个
4. 给定若干个点,依次连接,求折线的K等分点的坐标
5. 问一下实习,用C++lambda表达式实现一个计算数组中在某个范围内的数值个数。
【百度面经】
一面
1. 虚函数
2. 数据库事务
3. 很多数据找最大的10个
4. 如何设计一个秒杀系统
5. 写程序反转链表
6. 写程序全排列
7. TCP链接与断开,TCP链接与UDP链接的差别
8. 其他简单的基础知识
二面
1. 实习,实习主要用到的技术,整个系统框架
2. 多态的实现,手写一个简单的多态
3. 求链表倒数第K个节点,讲思路
4. 判断两个链表是否相交,讲思路
5. 数组求最大子序列和,手写
6. 阻塞非阻塞,同步异步的概念和区别
7. 再聊了一下网络相关的知识,以及对前端的了解
三面,被三面小哥哥虐惨了
1. 简历上有地方写错了
2. tensor-flow用了多少,项目里怎么用的,还教我为什么我的方法不行
3. 为什么选择百度,为什么转行
4. 平时用什么多,C++新特性有哪些,各个智能指针的来源,用法,实现。
5. 设计模式,手写单例模式,有什么问题,没有加static,对象用引用无法删除怎么修改,如果改为引用,后面的实例怎么修改。
6. 设计malloc和free函数,每次申请和释放2bytes的地址。说用双链表存储信息,存储空间太大,改为bit位存储,还是太大。改为分段式,还是太大,要求极致压缩空间。提示可以使用mem本身存储信息,没想出来,就告诉我本身全部建立链表,每次申请都从头节点申,每次释放都添加到尾节点。
7. 设计一个求滑动窗口的最大值的容器,要求每次时间复杂度尽可能小。说用最大堆,时间太慢。说用一个队列,并且保存最大值,但是最大值出去后,需要能循环查找。然后说不稳定,让在想,没想出来。然后提示说可以用两个队列,队列保持后面n个数的最大值。
【滴滴面经】
一面
1. 数据库的索引,join,leftjoin,on和where的差别。
2. 手撸代码,求树的深度
3. C++中的map,实现原理
4. 二叉查找树,红黑树的结构
5. 线程和进程的关系
6. 多线程如何处理
7. linux命令,top,找关键字
8. 虚拟内存
二面
1. linux下编译过程,makefile机制,编译原理
2. 手写代码,找一个数组中的三个数和为0的所有组合
3. 上面写的代码如何设计测试用例
4. 手写代码,将一个打乱的数组排序,要求最小空间复杂度和最小时间复杂度。
5. 上面写的代码给出数学证明
三面
1. 找出两个集合中公共的元素
2. 如果是两个文件,并且文件不足够放入内存
3. 如果元素不足以放入元素中,该怎么办
4. 写代码建立一个堆
5. 排序算法知道哪些,快速排序,算法复杂度,如何得出,怎么样取平均算法复杂度。
【平安面经】
一面
1. Java了解么?
2. 数据库索引有哪些,怎么建立
3. 网络安全,加密算法相关(不了解)
4. 网络通信(各个主要协议的层次,TCP/UDP区别)
5. Linux(各种命令,top,查找文件,查看文件)
二面
1. 介绍实习经历
2. 介绍项目经历
3. 主要自己会的技术
4. 这个数学建模获奖怎么样
5. 有什么问题
因为是最后一个面试的,面试官很开心,随便问了一问,就10分钟左右,然后回答我的问题说了10分钟左右,然后就结束了
【招行卡中心】
一面
1. 自我介绍,实习经历,项目经历
2. 说一下具体的工作内容,难点,收获
3. 工作中项目的通信分发机制
4. 除此之外,对后端还有什么了解
5. 数据库索引有哪些,建立索引时注意什么
6. 最近在看什么书
7. 两个实习工作喜欢哪一个
8. 既然喜欢那个,为什么来招行
二面
1. 自我介绍
2. 为什么做研发
3. 觉得自己做研发的优势在哪里
4. 和其他同学有什么优势和差距
5. 怎么选择实习岗位
6. 觉得实习岗位在互联网领域里面有哪些优势
7. 拿了几个offer
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)