数据结构论坛

首页 » 分类 » 分类 » 程序员面试金典,为你解码微软苹果谷歌
TUhjnbcbe - 2025/2/21 17:32:00

面试之前的准备

录用与否取决你在面试中的表现,而简历和过往经验则决定你有没有面试机会。科技公司最青睐人才的两大特性:天资聪颖,扎实的编程功底。如你能在简历上充分展示这两点,面试机会就唾手可得了。

积累相关经验

在校生可以这么做:

选修有大作业的课程。这些经历写在简历上将大幅提升你得到顶尖科技公司面试机会的几率。找一些实习生工作。如有BAT、华为这些企业组织大学生编程大赛之类的活动要积极参加;如有机会也可以参加如“微软挑战者”、“谷歌编程夏令营”这样的活动。如果没有这样的机会,能进入创业公司历练一下也不错。开拓一些业务或项目。绝大多数公司都青睐有创业精神的人。如此既可锻炼自己的技术,也可以展示自己主观能动性和把事情做好的能力。利用空闲时间写个软件。甚至可以找老师或其他人资助,将自己的工作变成一项独立研究。已在职场中的专业人士如想从小公司跳到科技巨头,或者想从测试岗位转到开发人员:

多承担一些编程职责。尽可能参与一些重大项目,多使用对自己以后有利的技术,将来它会成为自己简历上的亮点。善用闲暇时间。自学新技术,参与开源项目。

写好简历

程序员的简历筛选标准与面试并无两样,也是看你是否聪明又会写程序。

简历篇幅长度适中工作经验不足10年的将简历压缩成一页,超过10年的至多用两页。这样做的理由有两点:招聘人员浏览一份简历一般只花20秒,言简意赅突出重点才能吸引注意力。有些人碰上冗长的简历连看都不看。你真愿意冒被人直接扔掉简历的风险吗?工作经历,只列出与工作相关的经验。列举要点。尽量套用格式:“使用Y实现了X,从而达到了Z效果”。比如:通过实施分布式缓存功能减少了75%的对象渲染时间,从而使用户登录时间加快了10%。原则就是:描述做过的事,怎么做的,以及结果如何。尽可能量化结果。项目,只需列出2到4个最重要的项目即可。

行为面试

行为面试是一种结构化面试。其理论是假设通过一个人过去的行为能够预测其未来的行为。

如何准备

行为面试一般这么问:“说说你曾经。。。”面试官可能要求你举例说明具体项目或岗位。

你可以事先准备一份面试表格,并对其内容烂熟于心。

在相应的单元格中写上小故事,故事要体现你的特点,并提炼一些关键词。熟悉它,面试前记得复习表格内容,就可从容应对。电话面试可以把表格放在面前,作为面试提纲。

你应该问面试官哪些问题

大多数时候面试官会给你提问的机会,有时提问的质量也是评估你表现的因素之一。

虽然你可能在过程中会临时想到若干问题,但还是可以提交准备好问题。对公司和团队做些调研究,有助于你准备问题。

问题可以分成三类:

真实的问题,是你真的想知道答案的问题,比如:你每天花多少时间在写代码上?你一周开几次会?整个团队中,测试、开发和项目经理的比例是多少?他们如何互动?团队怎么做项目计划?这些问题有助于你了解公司工作环境和日常安排。有见地的问题,可以反应你的编程水平和技术功底,同时显示你对公司或其产品感兴趣。我注意到你们使用了X技术,请问你们是如何处理Y问题的?为什么你们产品选择使用X协议而不是Y协议?据我所知,X虽然有A、B、C等几大好处,但因为存在D问题,很多公司并未采取该协议。只有事先对该公司做过充分调研,才能问得出这类有深度的问题。富有激情的问题,这类问题展示你对技术的热忱,让面试官知道你热衷学习,将来能为公司做出较大贡献。我对X技术不太熟悉,不过听上去是个不错的解决方案。你能给我讲讲它的工作原理吗?

回答条理清晰

回答行为面试题有两种常见组织方式:主题先行和SAR法。你可以单独或组合运用这两种方法。

主题先行,即是开门见山、直奔主题,简洁明了,快速抓住面试官注意力,让他了解事情梗概。SAR法,是指先描述场景,然后解释你采取的行动,最后陈述结果。可让面试官快速了解你在项目中如何解决问题,施加影响,最后起到什么作用的。

技术面试

技术面试是科技企业程序员好面试的重头戏,一定要做充分准备。

技术准备

一定要动手练习解题。

如何练习

尽量独立解题在纸上编写算法代码在纸上测试代码将代码原样输入计算机

你需要掌握的知识,一般掌握基础知识即可。下面清单列出了必须掌握的知识:

对以上主题,务必要掌握它们的具体实现和用法、应用场景、空间和时间复杂度等。对其中的数据结构和算法,要练习如何从无到有地实现。

2的幂表

最好能记下来。借助它可以快速算出一组数据占用多少空间。

解决技术面试题的五步法:

一、向面试官提问,以消除歧义

举例:设计一种列表排序算法

问:具体是哪种列表?数组还是链表?答:数组问:数组里存放什么?数字、字符、还是字符串?答:数字问:这些数字都是整数吗?答:是的问:这些数字来自何处?是身份证号还是别的什么数字?答:顾客年龄问:总共有多少顾客?答:大概一百万通过提问明确了问题为:对一个包含一百万个整数的数组进行排序,这些整数在0到(一个合理的最高年龄)之间。

怎么解决呢?只需创建一个包含一个包含个元素的数组,然后计算每一个元素出现的次数。

二、设计一种算法

设计算法时问问自己几个问题:

该算法的空间和时间复杂度如何?碰到大量数据会怎么样?你的设计会引发其它问题吗?如果有其他问题你会做出正确的取舍吗?你能否善用面试官给的特定数据?

三、先写伪代码,告诉面试官接下来会写真实的代码

写伪代码,主要帮助理清思路,减少错误。

四、写代码要不紧不慢

多用数据结构,写代码不要太杂乱,不要仓促草率。

五、测试写好的代码,仔细修正每一处错误

要测试自己的代码,考虑以下测试用例。

边界用例:0、负数、空值、最大值、最小值用户错误:输入空值或负数会出现什么问题?特殊符合呢?一般用例:测试正常用例

算法题的五种解法

方法一:举例法

先从具体例子出发,来发现一般规则。

举例:给定一个具体时间,计算时针与分针之间的角度。

以3点27分为例。用h表示小时,m表示分钟。假定h的范围是0-23。由此可以得到如下规则:

分针的角度(从12点整开始算起):*m/60时针的角度(从12点整开始算起):(h%12)/12+(m/60)*(1/12)时针和分针间的角度:(时针的角度-分针的角度)%简化上面的式子可以得到:(30h-5.5m)%

方法二:模式匹配法

将现有问题与相似问题类比,通过修改相关问题的解法来解决新问题。

方法三:简化推广法

首先修改某个约束条件,从而简化问题。转化成处理问题的简化版本,找到算法后再推广到复杂版本的解决方案。分布实现算法。

方法四:简单构造法

有时候这种方法非常奏效。先计算n=1的结果,再计算n=2,n=3,n=4然后发现规律,解决问题。

方法五:数据结构头脑风暴法

快速过一遍数据结构列表,逐一尝试各种数据结构(链表、数组、二叉树、堆等),找到合适的数据结构。

1
查看完整版本: 程序员面试金典,为你解码微软苹果谷歌