《crack the code interview》,出自谷歌的面试官之手,几乎是所有程序员面试的时候可能遇到的题目。
这本书大家应该都说烂了,问题看起来很简单,题量也不多,但这本书却长盛不衰,必然有他的道理,它的好处正是以最经典的方式呈现了面试题的类型和归类。在准备面试的时候,可以从这一套题目中发现自己的薄弱点,也可以把他当作一个面试前的训练。
【部分《crack the code interview》】
1.1 判断一个字符串中的字符是否唯一1.2 字符串翻转1.3 去除字符串中重复字符1.4 写一个函数判断两个字符串是否是变位词1.5 写一个函数,把字符串中所有的空格替换为%201.6 矩阵旋转1.7 矩阵行列置01.8 利用已知函数判断字符串是否为另一字符串的子串2.1 从链表中移除重复结点2.2 实现一个算法从一个单链表中返回倒数第n个元素2.3 给定链表中间某结点指针,删除链表中该结点2.4 求由两个链表结点组成的数之和2.5 给定一个循环链表,实现一个算法返回这个环的开始结点3.1 如何只用一个数组实现三个栈3.2 实现一个栈,要求实现min函数以返回栈中的最小值3.3 实现数据结构SetOfStacks来模拟叠盘子3.4 编程解决汉诺塔问题3.5 使用两个栈实现一个队列3.6 写程序将一个栈按升序排序4.1 用一个函数判断一棵树是否平衡4.2 设计算法判断有向图两结点间是否存在路径4.3 将递增数组构建成一颗最小高度二叉树4.4 将二叉树每一层结点构建成一个链表4.5 查找二叉查找树的任意给定结点的“下一个”结点4.6 找出一棵二叉树中两个结点的第一个共同祖先结点4.7 判断一棵二叉树是否为另一棵二叉树的子树4.8 输出二叉树中路径上结点值之和为给定值的所有路径5.1 写程序使整数N中第i位到第j位的值与整数M中的相同5.2 给定一个字符串类型表示的小数,输出其二进制表示5.3 给定一个整数x,找出另外两个二进制表示中1的个数和x相同的数5.4 解释以下代码的作用:((n & (n-1)) == 0)5.5 写程序计算从整数A变为整数B需要修改的二进制位数5.6 交换一个整数二进制表示中的奇数位和偶数位5.7 写程序找出丢失的整数,要求时间复杂度O(n)6.1-6.6 程序员”脑筋急转弯”7.1 为通用卡牌游戏设计数据结构,并设计子类7.2 为电话呼叫中心设计类和数据结构7.3 用面向对象的方法设计一个音乐播放机7.4 用面向对象思想设计一个国际象棋游戏7.5 利用OOP思想设计在线读书系统7.6 设计一个拼图游戏的数据结构7.7 如何设计一个聊天服务程序7.8 用面向对象思想设计奥赛罗游戏(Othello)7.9 为一个内存文件系统设计数据结构和算法7.10 使用C++实现一个垃圾回收器8.1 写一个函数来产生第n个斐波那契数8.2 机器人路径计算8.3 写一个函数返回一个集合中的所有子集8.4 写一个函数返回一个串的所有排列8.5 实现一个算法打印出n对括号的有效组合8.6 实现图像处理软件中的“填充”函数8.7 有25分,10分,5分和1分的硬币无限个,计算组成n分的组合数8.8 经典八皇后问题9.1 写一个函数将数组B融入数组A,并使其有序9.2 写一个函数对字符串数组排序,使所有变位词都相邻9.3 在一个数字中查找特定元素9.4 如何给一个2G文件中的字符串排序?9.5 写一个函数找到给定字符串的位置9.6 在一个矩阵中找出特定的数9.7 写一个函数模拟叠罗汉节目10.1-10.7 程序员面试——数学相关题目看完这些题目你发现了什么,是不是很容易就发现这些都是比较偏理论的题目。就算你的开发能力非常强,但如果有一段时间没有看书或者练习,再来做这些题也会遇到很多不会的。
而已经入行的程序员更明白这一点:做题目做的准确程度与实际开发应用中的能力强弱无关,在职场上,我们注重的更多的是发现问题、解决问题的能力,而这些能力与上面的题目有关吗?我敢说没有太大关系,甚至没有关系。以上的面试题目,涉及的都是简单的算法和数据结构,是最能体现一个人的理解能力和学习态度的。
虽然说这不是一个真正考察程序员能力的好办法。但你能不做吗?答案当然是不能。因为这个面试的存在就是为了把不会做或者不愿意做面试题的人给排除掉,如果你不想要这个Offer当然可以选择不做。
其次,如果靠投递简历来选择工作的,这个公司并不认识你,对你也没有了解,除了做这些题目,实在没有办法来考察你的能力和学习态度。
如果你不想通过做题来获得Offer,走其他面试渠道的话,可以通过内推,通过企业内部员工推荐,绕过猎头公司、招聘网站等中间步骤,使应聘者和招聘方直接沟通。前提是在相应的公司有认识的人并获得他的认可。