1.剑指Offer --- 面试的流程

1.面试官谈面试
	1.对于初级程序员,会比较偏向靠算法和数据结构。对于高级程序员,会关注专业技能和项目经验。
	2.应聘者事先做好准备,对公司的近况,项目所有了解,对所应聘的工作有热情,另外,应聘者还要准备合适的问题问面试官。
	3.面试过程要放松,不要着急写代码,先了解清楚问题,多和面试官做沟通,然后开始做一些整体规划,写完代码后不要马上提交,最好自己review并借助一些测试用例来走几遍代码。
 
2.面试的三种形式
	1.电话面试
		应聘者在电话面试的时候尽可能的用形象化的语言把细节说清楚。
 
	2.桌面面试
		考察应聘者的编程习惯及调试能力:
			1.思考清楚再开始。
			2.良好的代码命名和缩进对齐习惯
			3.能够单元测试
				如果应聘者先写测试用例,再写解决问题的函数,会刮目相看。
 
			当应聘者运行代码发现结果不对之后的表现,也是关注重点。此时会展现出他的调试能力。熟练的设置断点,单步追踪,查看内存,分析调用栈,能很快地发现问题的根源并解决
		  问题。会觉得应聘者开发经验丰富。
 
	3.现场面试
		1.规划好路线并估算出行时间,预留半小时左右。
		2.穿着得体
		3.注意面试邀请的面试流程
		4.准备几个问题
 
3.面试的三个环节
	1.行为面试
		面试开始的 5~10 分钟通常是行为面试时间。这个环节,面试官会注意应聘者的性格特点,深入了解简历中列举的项目经历,是一个暖场的过程。
		不少面试官会让应聘者做一个简短的自我介绍,由于面试官手里已经有简历了,所以自我介绍用30s到1分钟介绍自己的主要学习,工作经历就可以了。如果面试官对你的某项经历
	  感兴趣,会针对性的提几个问题了解。
 
	  	1.应聘者的项目经验
	  		自我介绍完之后,面试官会照着简历了解他感兴趣的项目。准备简历的时候,按照 STAR 模型描述自己经历的每一个项目。
	  		STAR :
	  			Situation : 简短的项目背景,比如项目的规模,开发的软件的功能,目标用户等。
	  			Task : 自己完成的任务,这个要详细写,注意区分'参与'和'负责'。负责的话,可能会问项目的总体框架设计,核心算法,团队合作等问题。
	  			Action : 为了完成任务自己做了哪些工作,是怎么做的。这里可以详细介绍。做系统设计,可以介绍下系统架构的特点;做软件开发的,可以写基于什么工具在哪个平台下应用了哪些
	  		    	技术。
	  			Result : 自己的贡献,这方面可以具体些,最好用数字加以说明。如果是做功能开发的,可以说按时完成了多少功能;如果做优化的,可以说性能提高了百分比是多少;如果是维护的,
	  				可以说修改了多少个bug。
 
	  		例子:
	  			Winforms 是微软.net中的一个成熟UI平台(Situation)。本人的工作是添加少量新功能之外主要负责维护已有的功能(Task)。新功能主要是让Winforms的控件风格和Vista,
	  		  Windows7的风格保持一致。在维护方面,对于比较难的问题我用WinDbg等工具进行调试(Action)。在过去两年中我总共修改了200个bug。(Result)。
 
	  		    如果在应聘者的简历中上述4类信息不够清晰,可能还会追问如下问题:
	  		    1.你在该项目中碰到的最大的问题是什么,你是怎么解决的?
	  		    2.从这个项目中你学到什么
	  		    3.什么时候会和其他团队成员有什么样的冲突,你们是怎么解决冲突的?
 
	    2.应聘者掌握的技能
	    	面试官除了对参与的项目感兴趣,也可能对掌握的技能感兴趣。注意描述技能的'了解','熟悉'和'精通'的区别。
	    	'了解' :
	    		指对某一项技术只是上过课或者看过书,但是没有实际做过项目。
	    	'熟悉' :
	    		我们在实际项目中使用某一项技术已经很长时间了,通过查阅相关的文档可以独立解决大部分问题,我们就熟悉它。
	    	'精通' :
	    		如果我们对某一项技术使用得心应手,在项目开发过程中同学或者同事向我们请教这个领域的问题我们都有信心也有能力解决,这个时候可以是精通。
 
	    3.回答为什么跳槽
	    	每个人都有自己的跳槽动机和原因,面试官不会期待一个标准答案。只是想通过这个了解应聘者的性格,因此应聘者可以大胆的根据自己的真实想法来回答这个问题。
	    但是也不要什么都说,不要抱怨,也不要流露出负面情绪。

	    	最好不要说下面4点:
	      	1.老板太苛刻
	      	2.同事太难相处
	      	3.加班太频繁
	      	4.工资太低
 
	      	例子:
	      		现在的工作做了一段时间了,已经没有太多的激情,因此希望寻找一份更有挑战的工作。然后具体论述为什么有些厌倦现在的岗位,以及面试的岗位为什么会感兴趣。
 
	2.技术面试
		技术面试通常占用40~50分钟。会关注应聘者5种素质:
		1.扎实的基础知识
			编程语言,数据结构和算法。
			编程语言,应该至少掌握1~2门编程语言。
			数据结构,应该熟练掌握,链表,树,栈,队列和哈希表等数据结构以及它们的操作。如链表的插入和删除节点,对二叉树的各种遍历方法的循环和递归。
			算法,查找,排序。重点是二分查找,归并排序和快速排序。
 
		2.能编写高质量的代码
			只要关注质量的程序员,才能写出鲁棒稳定的大型软件。面试官会格外关注边界条件,特殊输入等看似细枝末节但实质至关重要的地方,以考察代码质量。
 
		3.分析问题时思路清晰
			有时候面试官会有意出一些比较复杂的问题,以考察应聘者能够在短时间内形成清晰的思路并解决问题。对于确实复杂的问题,甚至不期望应聘者能在面试
		  不到1小时的时间内给出完整的思路,更看重的是应聘者是否有清晰的思路。
		  	应聘者可以用几个简单的方法帮助自己形成清晰的思路。首先是举几个简单的例子让自己理解问题。其次可以试着用图形表示抽象的数据结构。最后可以把复杂
		  的问题分解成若干个简单的子问题。

		  	面试遇到难题的时候,我们有3种办法分析:
		  		1.画图:抽象问题形象化
		  		2.举例:抽象问题具体化
		  		3.分解:复杂问题简单化
 
		4.能优化时间效率和空间效率
			优秀的程序员对时间和内存的消耗很锱铢必较。当面试官的题目有很多种解法的时候,通常会期待找出最优解。
 
		5.学习沟通等能力(软技能)
			除了展示编程能力和技术功底之外,还需要展示软技能,诸如自己的沟通能力和学习能力。在面试过程中,面试官会观察应聘者在介绍项目经验或者算法思路时是否
		  观点明确,逻辑清晰,并以此判断其沟通能力的强弱。另外,从应聘者的神态和语气来判断他是否有合作的意识。通常面试官不喜欢高傲或者轻视合作的人。

		  	IT 行业知识更新很快,因此程序员要具有很好的学习能力才能更上知识的更替步伐。通常会问,最近在看什么书,从中学到了哪些新技术。可以了解应聘者的学习
		  意愿和学习能力。第二个问题是,抛出一个新的概念,接下来观察应聘者能不能在较短的时间内理解这个新概念并解决相关的问题。

		  	知识迁移能力是一种特殊的学习能力。如果我们能够把已经掌握的知识迁移到其他领域,那么学习新技术或者解决新问题就会变得容易。面试官通常会问一个简单的问题,
		  再问一个很复杂但和前面的简单问题相关的问题。这个时候期望应聘者从中得到启示,从而找到解决的方法。比如先让写一个斐波那契数列,再问一个青蛙跳台阶的问题:
		  一只青蛙一次可以跳1级台阶,也可以跳上2级台阶。请问这只青蛙上n级台阶总共多少种跳法。

		  	还有不少面试官喜欢考察应聘者的抽象建模能力和发散思维能力。
 
		简单的问题,要注重细节,写出完整的,鲁棒的代码。复杂的问题,可以通过画图,举具体例子分析和分解复杂问题等方法先理清思路再动手编程。除此之外,应该不断优化
	  时间效率和空间效率,力求找到最优解。在面试过程,还应该主动提问,以弄清楚题目要求,表现自己的沟通能力。当面试官前后问的2个问题有相关性,尽可能把前面问题的
	  思路迁移到后面的问题中去,以展示自己的良好学习能力。
 
	3.应聘者提问
		面试结束前5~10分钟,面试官会给机会问几个问题。主要想了解应聘者最关心的问题有哪些,因此应聘者应该准备1,2个问题,否则会觉得你对我们公司都不感兴趣,那来面试
	  做什么。
	  	不适合问的问题:
	  		1.不要问和自己职位没关系的
	  		2.不要问薪水
	  			跟hr聊。
	  		3.不要立即打听面试结果
	  			一般面试都有好几轮,共同决定。这么问,会觉得应聘者没自我评估能力。
 
	  	推荐问的问题是与招聘的岗位相关的问题。问的好,会觉得你对岗位很感兴趣。首先你要对应聘的岗位或者项目背景有一定的了解,我们可以从2方面去了解相关的信息:
	  		1.面试前做功课,到网上收集一些信息,对公司的成立时间,主要业务,岗位要求等。
	  		2.面试过程留心面试官说过的话

面试的流程:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值