2015年校招总结:技术面试干货

关于实习及校招的全面概括性总结在这篇博文,里面也提出了一些技术面试过程中的注意事项。本文主要是单纯针对程序员技术面试的面试内容,将(1)推荐一些优秀的资源(包括书籍、网站等),以及(2)总结一下自己及周遭同学在实习与校招技术面试过程中遇到的各种原题,以供后人参考。


推荐资源

书籍

算法类

这本书是经典的程序员技术面试必备书了,作者是曾经的Google面试官,从面试官的角度教你应该如何一步步地准备面试。书中分析了硅谷的一些巨头公司的面试风格和特点,对于想要面国外公司的再合适不过了;还帮助你制定了面试准备的流程和计划,给出写简历的建议,如何应对行为面试(Behavioral Interview)等;当然,最主要的篇幅集中在技术面试的准备中,总结了常见的数据结构及相应的算法题,数理概率,及一些其他面试中常见的技术题型。

  • 《进军硅谷:程序员面试揭秘》(陈东锋著) [豆瓣地址]

尽管这本书在豆瓣上的评分很低(leetcode作者认为该书抄袭了leetcode上的题目…),但对于面试者来说,这本书还是值得推荐的。这本书前面部分也是主要介绍了一下面试流程和注意事项,硅谷公司的特点;其余的大篇幅都是集中在算法题的解题思路分析和代码实现,确实大部分的算法题与leetcode上的一样,所以刷leetcode的时候配合这本书,应该会顺畅挺多的。这本书的代码都是Java,简单易懂。

这本书的结构其实与前两本比较类似,但是有一个亮点是,对于所有的算法题都会给出测试样例,包括特殊边界和正常功能测试样例等。写算法题能够提前考虑测试样例是非常好的编程习惯,称之为防御式编程;大多数人都是习惯写完代码后,再进行样例测试,然后修修补补之类的。

严格上来说,这个并不是一本正式的书籍。但是这个资料里收集了许多经典真实的企业面试题。题型比较杂,大部分是算法题,还有智力题等。虽然答案不是很全,但是值得好好看看里面的题,从本人的笔试面试经历来看,遇到了里面挺多的原题~

如果时间充裕的话,这本书也可一看。这本书是由MSRA的一些FTE和实习生们编写的,老实说,这本书中很多题还是挺有难度的,有许多数学相关的题,不折不扣地考验你的智商……偶尔翻翻,转转脑子也挺好的。

此外,还有一些神书,例如《算法导论》《编程珠玑》也可一看。但是,时间总是有限的,认真刷刷1-2本书,然后多动手配合刷题(刷题平台下面有推荐),应付面试的算法能力自然会慢慢变强。

数据结构类

相比起清华的严奶奶那本,这本书通俗易懂得多:)要是觉得之前的数据结构掌握的不够好,这本书绝对能拉你入门~

虽然刚学的时候觉得晦涩难懂,但是还是国内经典的书籍,对数据结构研究的比较深刻,内容较上本会丰富很多。

编程语言类

  • Java

《Java编程思想》(Bruce Eckel著) [PDF下载地址]

《Effective Java》(Joshua Bloch著)(中文版) [PDF下载地址] | (英文版) [PDF下载地址]

《疯狂Java讲义》(李刚著) [PDF下载地址]

  • C

《C Primer Plus》(Stephen Prata著) [PDF下载地址]

《征服C指针》(前桥和弥著) [PDF下载地址]

  • Python

《Python基础教程》(Magnus Lie Hetland著) [PDF下载地址]

《Python简明教程》(Swaroop著) [PDF下载地址]

《利用Python进行数据分析》(Wes McKinney著) [PDF下载地址]

《Learn Python The Hard Way》[PDF下载地址]

数据库类

《SQL必知必会》(Ben Forta著) [PDF下载地址]

《深入浅出SQL》(Lynn Beighley著) [PDF下载地址]

《高性能MySQL》(Baron Schwarlz等著) [PDF下载地址]

刷题网站

众所周知的刷题网站了,许多公司的面试题都是从里面出的。建议刷3遍左右。

一个类似于leetcode的刷题网站,但是比起leetcode,里面的题目更加齐全。还有一些特色的功能,如限时提交,编程风格检测等。

里面收录了《剑指Offer》中的题,可以配合看书练习。还有一些考研机试、比赛类型的题,适合刷完leetcode等网站后,磨练算法能力。

这个平台经常举办一些编程比赛,一些公司的笔试会选择在这个平台进行,例如微软(中国)、网易游戏等。另外,这个平台里面的题有一定难度,适合算法能力中上的人。

网站与论坛

曾经上过它的算法课,还可以。里面有leetcode中大多数题的解答(只有代码,大多数是Java),还有一些面筋之类的分享。有时间和米的还可以去听听他家的课,都是PPT+白板+语音的形式。

以上这两个网站上面有很多国外最近的、真实的面试题分享和讨论,也可以经常去水水~另外,这个知乎问题,票数第一的回答还总结了挺多的。

这个博主总结了之前提及的《微软面试100题系列》,有个教你如何迅速秒杀99%的海量数据处理面试题也写得不错,基本足够应付面试中遇到的大数据相关的题。

之前在面试准备过程中,在cnblog上建了个博客,记录了以下刷的算法题及面试题。欢迎访问。

真实面筋

算法和数据结构

Google SED实习

  • 非递归实现二叉树深度的求解
  • 如何实现双端队列

阿里春招实习

  • 一维的连连看实现
  • 动归和贪心的区别
  • 大小为999的一维数组,按序存放着1-1000的数字,但有一个数字缺失,找到它
  • 最长公共子序列
  • 一个排序的数组, 如何做压缩?
  • 三个排序数组, 找到同时存在于三个数组中的元素
  • three sum
  • 判断链表中有环 环的大小
  • 写个KMP
  • 给定一些金币,金币的数额都是2的整数幂,然后每种硬币都有两枚,然后给定一个数额,求可行的组合方式(重复不算)[动态规划]
  • 给定一个m*n的长方形,然后每次对长方形进行分割,分割的直线均平行于长方形的边,而且落在长方形内,给定一系列有顺序的分割直线,问每次分割后形成的所有小长方形中面积最大的。[最小堆]
  • Leetcode: Excel Sheet Column Title
  • 给定N个骰子, 每一面上有一个字母. 给定一个长度为M的单词. 问这些骰子您不能拼出这个单词. 每个骰子只能用一次, 顺序随便排.
  • 两个骰子, 每个骰子各个面上可以放不同数字(自己安排数字), 问能否组成1~31. 如果扩展为N个骰子, 能组成的最长的连续数字(从1开始)是多大.
  • 数组表示的数, 实现一个加一函数.
  • 字符串中找到字母数不超过M的最长子串.

Hulu实习

  • 判断一颗二叉树是否完全二叉树
  • 给一个整数数组,找其中的连续子序列,使得字段和的绝对值最小
  • 给一个单链表,写个快排
  • 给一个值已排序的双链表,双链表存储在一个Node*数组里,每个元素是一个指向双链表某个节点的指针。现在只有一次查询x,找到x在双链表中的位置或报告找不到
  • 整数数组,找到满足f(j) > f(i) 最大的(j - i)
  • 一个数组两种操作,1)修改数组中的一个值,2)计算数组某个子区间所有数字之和。写个线段树?
  • 一个矩形格子区域,每个格子上有一个数字,还有红蓝2中颜色其中之一,初始从某个位置开始,问能否找到一条能够走到边界外的路线,这条路线要满足,1)数字大小严格递增,2)红蓝两色至少各出现一次。(搜索?我先说宽搜,后来想想只要找一条就行那就深搜。这里貌似可以记忆化一下存储一些信息,可惜当时并没有很清晰地考虑清楚,而且时间不很足够的样子了。写代码。)
  • 写代码判断一棵树是否是完全二叉树
  • 一个长度为n的数组,求最小连续子段和,求绝对值最小的连续子段和,求绝对值最接近某个数的连续子段和
  • 蛇形打印矩阵
  • n个数字,a1,a2…an,数字之间可以添加+、*、括号变成一个表达式,求表达式的最大值
  • 有一个字符串流,里面是一些单词和空格。给一个api:read_char(),每次调用将在流中读取一个字符,如果遇到流的结尾,则返回0。请设计函数print_stream(),通过调用read_char()打印流中的单词,要求,每行长度不超过M,一个单词不能跨越两行,单词之间只保留1个空格,删除首尾空格。
  • n个元素的数组,设计算法找出现次数大于n/3的元素,要求时空复杂度尽可能小

有道实习

  • 判断2个url是否是同一个网站的。比如news.sina.com.cn/asdasd和car.sina.com.cn/asdasd/asdasd就是同一个网站的.
  • 给定整数b,求最大的a,满足a*(a+b)是完全平方数
  • 给定一个棋盘,马初始在(0,0),棋盘上有些点为禁行点,用*表示。另外棋盘上有个兵,兵的移动路线已知,每次移一步,在棋盘上用1,2,3….表示出。要求计算马最少跳多少步能把兵吃掉。

豌豆荚

  • 实现atoi函数
  • 码镜像二叉树
  • 找最后一个出现的字符串匹配
  • 求树的深度
  • 高精度加法

网易游戏实习

  • m个数中找最小的n个
  • 删除链表的某个节点
  • 无向普通图G中找两个点最短路径

大数据

阿里春招实习

  • 集合A:40亿个未排序,不重复的unsigned int;集合B:1万个unsined int;判断集合B中的数是否属于集合A。(输出1W个bool值)
  • 1亿个查询记录,找出frequency top1000;follow up:讲解堆的调整过程。
  • 一个100G的文件, 存放搜索的关键词, 统计其中出现最多的20个
  • 现在有淘宝的登录日志5亿条, 支付宝登录日志3亿条, 假设账号最多20个汉字. 找到所有两个都登陆过的账号. (哈希表使用的具体数据结构, 冲突如何处理, 分析下分解之后文件应该有多大才能保证内存能装下, 重复条目处理)
  • 100万个数字, 没有重复的有序数组, 有什么办法压缩大小.
  • Hadoop题:一个表每一行是一个key和许多value,有另一个表,记录着value到value’的映射。问题1)若第二个表不很大,写个hadoop 2)若第二个表很大,写个hadoop。
  • 1亿条搜索输入文本记录,找到频率topN条,写代码。

数据挖掘和机器学习

阿里春招实习

  • 如何识别买家评价的虚假评价
  • SVM特征怎么提的,参数怎么调的,半监督学习是在干嘛,整体学习是在干嘛?
  • 讲解CNN,CNN和DNN相比有什么优点为什么用它?
  • 随机森林和决策树的基本原理
  • SVM原理及公式推导
  • Boosting算法
  • 对数线性模型
  • 概率主题模型,LDA思想
  • 怎么判断两个词指的是同一个东西(语言模型,Wordvec)
  • 对推荐和搜索排序的理解

编程语言

C/C++

阿里春招实习

网易游戏实习

  • 如果一个static对象被创建,什么时候被创建和删除
  • 介绍overload和override
  • 介绍inline (原理,编译器,优缺点,虚函数和Inline同时声明)
  • 多态的实现机制(虚函数表,虚指针)
  • 知不知道智能指针,介绍一下,如果多个线程同用一个shared_ptr,会不会互相影响,实现机制是什么样的(比如shared_ptr和它所指向的对象分别存在哪)
  • vector实现机制,他和list区别
  • map和set的实现机制,以及为什么不用其他的平衡二叉树;除了上面的BST实现方法,map还能怎么实现,以及实现机制
  • 虚拟内存的作用和实现机制
  • 介绍动态链接库和静态连接库,如果在运行时找到DLL中的那个函数入口

Java

阿里春招实习

  • Spring的IOC是什么?Spring是怎么实现依赖控制的?
  • Java的synchronized和lock有什么区别?volatile有什么作用?
  • Java的hashmap怎么实现。

网易游戏实习

  • 豌豆荚实习

  • 类继承/接口实现

  • synchronize
  • 线程安全的单例模式

Python

移动客户端开发

Android

阿里春招实习

  • Android的fragment和activity有什么区别?activity能否在不同的进程中启动?

iOS

计算机网络

阿里春招实习

  • HTTP协议中的SSL怎么实现?
  • 1G文件, 点到点传输, 提高传输速率

网易游戏实习

  • TCP三次握手和四次握手
  • TCP, UPD, HTTP的关系,还问我会不会socket编程
  • cache的作用和实现机制

数据库

操作系统

阿里春招实习

  • 操作系统分页和分块有什么区别?
  • 什么是线程安全?

网易游戏实习

  • 进程之间通信方法

Linux

系统设计

阿里春招实习

  • 设计个系统:在搜索框里输入一个词,找到以它为前缀的商品,显示给用户作为辅助输入提示

数学、智力题

Hulu实习

  • 四个瓶子,每个瓶子10个药丸,某些瓶子里的药丸全是坏的,正常药丸是10g,坏药丸是9g。现在只能进行一次称量重量操作,确定哪些药瓶里的药丸是坏的。药瓶里的药丸全是好的或者全是坏的;不准切割或溶解药丸。 如果每个瓶子里只有7个药丸呢?
  • 四个人A、B、C、D,站成一排,面向西边,每人头顶戴顶帽子,帽子有红黄蓝三种颜色,每个人只能看见自己前面的人的帽子的颜色,比如C可以看见A的和B的,A看不见任何人的帽子。现在有3顶红色帽子,2顶黄色帽子,1顶蓝色帽子,随机给这几个人带上。然后D说自己不知道自己是什么颜色,C说自己不知道自己是是什么颜色,B说自己不知道自己是什么颜色,A说自己知道自己是什么颜色,问A怎么推测的。在A说出自己帽子的颜色后,B、C、D能否确定自己帽子的颜色?

杂项

阿里春招实习

  • 接触过什么开源项目
  • 最近读过的值得推荐的书是什么

本文结束,感谢欣赏。

欢迎转载,请注明本文的链接地址:

http://www.jeyzhang.com/2015-campus-recurit-technology-interview-summary.html

最后特别感谢2015年面点交流群各位伙伴的面筋:)