一、自我介绍
面试官手中有包括应聘者详细信息的简历,所以不用花很多时间,用30秒到1分钟时间来介绍自己的主要学习、工作经历即可。
二、应聘者的项目经验
(1)简短的项目背景:如项目规模、软件功能、目标用户等。
(2)完成的任务:“负责”慎用,面试官会问总体框架设计、核心算法、团队合作等问题。
(3)Action行动:为了完成任务做了哪些工作,是怎么做的。(讲项目难点及怎么克服)
做系统设计的,介绍系统结构的特点;
做软件开发的,写基于什么工具在哪个平台下应用了哪些技术;
做软件测试的,可以写手工测试还是自动化测试。
(4)Result贡献:参与功能开发,完成了多少功能;
如果做优化,性能提高的百分比;
如果做维护,修改了多少个Bug。
除此之外,面试官针对项目经验最常问的问题还包括如下几个类型:
(1)你在该项目中碰到的最大问题是什么,你是怎么解决的?
(2)从这个项目中你学到了什么?
(3)什么时候会和其他团队成员有什么样的冲突,你们是怎么解决冲突的?
三、应聘者技能:注意区分“了解”、“熟悉”和“精通”
1、扎实的基础知识
(1)编程语言:大部分公司面试要求C++举例,如const加在指针的不同位置是否有区别。
(2)数据结构:应熟练掌握链表、树(二叉树)、栈、队列和哈希表等数据结构,以及它们的操作。
(3)算法:大部分公司注重考查查找、排序等算法,重点掌握二分查找、归并排序和快速排序,
因为很多面试题都是这些算法的变体而已。谷歌百度等公司还要求熟练掌握动态规划和贪婪算法。
2、高质量的代码
面试过程中,面试官会格外关注边界条件、特殊输入(如NULL指针、空字符串等)以及错误处理等对代码质量至关重要的地方。
技术面试的面试官一般是程序员,程序员通常没有那么多想法,
他们只认一个理:题目做对、做完整了,就让你通过面试;否则失败。
举例:int strToInt( char* str );// 字符串转换成整数,以及求链表倒数第k个结点
3、清晰的思路
面试官通常不喜欢应聘者在没有形成清晰的思路之前就草率地开始写代码,
这样写出来的代码容易逻辑混乱、错误百出。(血的教训:腾讯技术二面,单词反序)
如果在面试的时候遇到难题,我们有3种办法分析、解决复杂的问题:
画图能使抽象问题形象化,举例能使抽象问题具体化,分解使复杂问题简单化。
【经验】对涉及数据结构的问题,同时用画图和举例,使问题形象化、具体化非常便于解题)
4、优化效率的能力
当面试官提示还有更好的解法的时候,应聘者不能放弃思考,
而应努力寻找在时间消耗或空间消耗上可以优化的地方。
5、优秀的综合能力
(1)软技能:程序员与他人沟通越来越重要;在面试过程中,面试官会观察应聘者在介绍项目经验
或者算法思路时是否观点明确、逻辑清晰,并以此判断其沟通能力的强弱。另神态和语气要有合作意识。
(2)学习能力:IT行业知识更新很快,考查学习能力有两种办法,
一是问最近在看什么书,从书中学到了哪些新技术,以了解其学习愿望和学习能力;
二是抛出一个新概念,看应聘者能不能在较短时间内理解新概念并解决问题。
(3)知识迁移能力:面试官先问一个简单的问题,再问一个很复杂但和前面的简单问题相关的问题。
举例:一只青蛙一次可以跳1级,也可以跳2级,这只青蛙跳上n级共有多少种跳法?实质斐波那契数列的应用。
从底往上考虑,不容易发现规律;而此时换个角度,自顶向下考虑问题,发现可以有递推关系式,f(n) = f(n-1) + f(n-2).
(4)还有不少面试官喜欢考查应聘者的抽象建模能力和发散思维能力。
如面试题44中“扑克牌中的顺子”,考查应聘者能不能把问题抽象出来 用合理的数据结构表示,找到规律并解决问题。
四、应聘者提问环节
准备2~3个与面试官相关的问题,以表现对公司、职位的兴趣。
如:您是部门负责技术的?那么。。。最看重什么,该岗位最重要的是、最核心的是什么?
其次,不要跟技术面试官谈薪水。