笔面试重点最全攻略(持续更新)
绪论
秋招结束很久了,勉强算得上有一些收获和心得。其实我的面试经历不太多,主要是七月就拿到了百度的offer,之后很多同级别的或者是更差的都没有面了。应该算得上是比较有良心的,也并不愿意去当那种传说中不怎么有品的offer收割机。但是后面发现其实还是挺吃亏的,因为在谈薪资待遇的时候还是需要很多同等级offer来argue的,比如假设你有阿里,腾讯offer就有可能把你百度的白菜offer argue成Special Offer(亲测有效)。原本百度之后,我其实已经有些懒得面了,毕竟面试也挺累的,我对百度也挺有好感,没想到后面联系HR的时候他一直不理我。于是我就怀疑会被毁约,毕竟我们不应该假设互联网公司有太高的道德水准,于是我又陆续面了京东,猿辅导,阿里,快手等公司,说到这里很不好意思,京东给我发了三个offer(寻猎计划,新星计划以及部门直推),但是我最后还是没去。但是我十分感激京东,希望后续还有合作机会。
个人背景
末流211本科,半个科班出身,是管理学学位(电商专业),后来保送到一所中流985读研,终于成了科班出身。硕士期间有一些简单的科研成果,成绩排名较为靠前,拿到了国家奖学金,无实习,无项目经验。说到这里感觉自己惨极了。
秋招Offer:后端,大数据以及C++开发
主要拿到了如下几个Offer,运气挺好的,还是拿到了好几个Special Offer,不过阿里没拿到心很痛。
- 阿里巴巴-C++开发工程师
- 百度-大数据开发工程师(架构方向) Special Offer
- 滴滴-Go Special Offer
- 京东-大数据SSP Offer和开发SP Offer
- 快手-Special Offer
- 电信云
- 猿辅导
- 中国移动研究院
- 航天科工二院 etc
不要脸的给自己打个广告,最近在牛客做了一个求职辅导,感谢给予这个机会。如果大家有问题的话,可以问问我,不过不是免费的哦,但是我真的便宜好用,哈哈。
方向选择
其实一开始犹豫过要找算法工程师岗位,后来还是考虑到以后跳槽到国企或者运营商的话可能还是开发更方便,当然也是觉得算法太卷了。后面主要还是分享一下自己面试的经验吧
简历撰写
我做简历用这个网站:https://www.wondercv.com/ 在线的直接导出,可以自动翻译成英文模板,投外企必备。简历只可以一页,如果多就双栏,包含基本信息(头像,姓名,年龄,电话,邮箱就可以),学历信息(本科/硕士/成绩排名(如果好的话)),项目经验<最重要>,论文(挑一个最好的可以写,比如A,没有的话不用写),最后是荣誉奖项。不要写自我评价啥的。
笔试经验
强烈推荐大家走提前批这种面试机会,因为它免笔试,笔试题确实还是有些难。得益于我面的比较早,大多是提前批次,做的笔试题不是太多,笔试题这块我个人感觉能对一半儿的话就能够进面试了,今年猿辅导的题还是有点难。对了,好好写简历的话,很可能可以免笔试哦。
面试算法题准备
一般,公司会有2-4轮技术面试,基本上都是要求写算法的,按照今年的情况来看,基本上算法完蛋,面试就完蛋。我先说一下面试写算法的形式,大多数公司会在牛客网上对你进行面试,开着视频,你就在代码框里写代码就行,但是要注意,写的是完整代码,输入输出头文件都是你自己控制的,和leetcode中只写一个函数的形式是不同的。此外,还有一些公司同意让你用本地编译器写,这种就很友好了,比如京东。但是像阿里的伯乐系统这种,基本上可以算作是在记事本里面写了。还是要多练练写完整代码的能力。
简历是一定要好好写的,据我所知很多大厂直接使用算法计算简历和岗位的匹配度,如果匹配度不够很可能没有面试机会。
- 最重要的我认为是《剑指offer》牛客网上可以刷,建议多刷几遍
- 《编程之美》中我遇到了一些原题
- 《挑战程序设计竞赛》
- 《算法4》,对于算法的时空复杂度一定要清晰
- 排序算法:堆排,快排以及归并排比较重要
- 此外就是我刷了大概200多道leetcode,主要是按照标签刷的。基本难度处于中等和hard这个水准上。
数组部分
- 乘积小于K的子数组
- 找出数组对之间第k小距离
- 数组中哪些元素是给定字符串的子序列
- 消失的数字
- 寻找符合某个条件的数(基本都是log复杂度)
- 合并K个数组等
动态规划算法
- 最长回文子串:动态规划算法,中心扩展算法
- 正则表达式匹配:递归,DP
- 最大子序和
- 爬楼梯
- 二叉树打印
- 买卖股票的最佳时机
- 单词拆分
- 乘积最大子数组
- 打家劫舍问题
- 最长上升序列
- 零钱兑换问题
- 划分子集问题
- 子集满足性问题最多
- 鸡蛋掉落问题
- 连续子数组模K问题
- 最长公共子数组或者最长递增序列问题
- 背包问题
- 青蛙跳台阶问题
排序算法
- 归并排序
- 随机快排
- 堆排
- 荷兰国旗问题
- 煎饼排序
- 优化版本的冒泡
二叉树问题
- 前中后序遍历:递归非递归
- 验证是否是二叉树
- 二叉搜索树的对称性
- 二叉树的层次遍历
- 二叉树的镜像
- 二叉树最大深度问题
- 构造二叉树问题
- 二叉树最大路径和
- 二叉树第K小的/第k大的结点
- 最近公共祖先
- 序列化问题 等等
字符串问题
- 无重复字符最长子串
- 字符串Z字形状打印
- 字符串转整数:状态机方法
- 最长公共前缀
- 电话号码的组合
- 字母异位词
- 最小覆盖子串
- 判断字符串是否是数字:正则表达式
- strStr
- 计算器:+ - * / ()
- 字符串编码
我真心觉得算法是最难的,他是一个长期战役,无法靠短时突击拿到好的效果。对于一些基础薄弱的同学来说,我感觉可能就更难了,所以我还是有先跟着视频课看一下。无论是算法还是开发算法都是必备的了,强推左神的课程链接和优惠码。
看这里
基础入门班(优惠码:AggSrmP,立减200元! )
https://www.nowcoder.com/courses/cover/live/520?coupon=AggSrmP
基础提升班 (优惠码:ASS0iwF,立减200元!)
https://www.nowcoder.com/courses/cover/live/512?coupon=ASS0iwF
算法真题精讲中级班 (优惠码:AK4BoIJ,立减300元!)
https://www.nowcoder.com/courses/cover/live/501?coupon=AK4BoIJ
算法真题精讲高级班 (优惠码:AvDzcXK,立减300元!)
https://www.nowcoder.com/courses/cover/live/493?coupon=AvDzcXK
项目部分
我个人认为算法,项目和实习是三轮车的三个轮子,也就是最重要的部分。当然项目和实习是有一定的替代性的,比如实习可以看做一个项目,有很好的项目也可以替代实习。项目在每一轮面试中都是关注的重点,我认为也是评价SSP和SP的重要准则,那这么看,一个好的项目是非常重要的。我的项目只选择了两个,一个是数据库项目,一个是我的研究生项目,做的是问答。我认为项目可以分为两个部分:看了哪些源代码,学到了什么,根据学到的东西做了什么。这个项目就是做了什么。如果自己就是没有拿得出手的项目,那么推荐在github上搜一些与自己投递岗位高度match的项目来看,看透,也是一个项目。
C++(我主要用C++)
我当然没有全部看完,主要是查漏补缺,相比网上的资料,我更愿意在书本里找答案。通过几个月的面试我发现,找Java开发的人是远远多于C++的,我个人感觉Java岗位比较卷,可能是出于自己喜欢C++的原因我还是一直坚持着。C++在复习的时候,对于类,编译器优化,指针包括智能指针和引用这块一定要十分的注意,要看的深一些,最好自己实现以下智能指针。此外,要看一些C++经典的项目吧,github上可以找找。
一些基础知识的学习:
高频面经:
书籍
- C++ Primer
- C和C++程序员面试宝典
- 深度探索C++对象模型
- Effective C++
- Effective STL
计算机网络
面试过程中我觉得网络是很重要的部分,其核心就是:TCP/IP,几层协议,HTTP/HTTPS等
书籍
- 图解Http
- 自顶向下
- TCP-IP详解
- 图解TCP/IP
高频面经
分布式系统理论
-CAP
-BASE等
数据库
书籍
- MySQL技术内幕(Innodb)
- 高性能MySQL
- Redies设计与实现
- Leveldb-Handbooks
高频面经
Hadoop
高频面经
Spark
书籍
- SparkInternals
- Spark SQL内核解析
- 深入理解Spark核心思想与源码解析
高频面经
服务端
书籍
- Linux高性能服务器编程
- Linux多线程
- Linux 多线程服务端编程 使用 muduo C++ 网络库
高频面经
数据仓库
书籍
- 数据仓库原理与实践