百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

程序员面试白皮书

haoteby 2025-03-01 14:01 40 浏览

我的故事,你的故事:

这是一本我希望我在大学就能看到的一本书。在我读大学的时候,跟很多同学一样也走过不少弯路:艰难地啃着计算机必修课,被里面的指针对象搞的晕头转向,对i++, ++i区别死活不理解,对操作系统的调度策略而抓狂,很难对专业书产生兴趣,只是想着去应付考试和学分。当我们毕业后,哪怕有了计算机学位和实际工作经历,但其实还是不知道最想得到什么。我当时心中有个情节,就是希望能去最好的公司,比如Google,因为那边听说都是最聪明的人,有着最好的待遇和福利做着最有影响力的事情,当我鼓起勇气去尝试的时候,我发现我失败了,并且要进入6个月的冷藏期(失去在一段时期内继续面试的机会),而我发现当时的面试表现是那么的稚嫩和糟糕,我开始懊恼,开始反省,开始重新准备,这样才有了我下一个面试机会和其他的Offer,当然如果一切可以重新再来,我可以更有自信更好地发挥我的能力,也许当时的理想公司就会给我Offer。

有些朋友会认为只要能混过面试,拿到工作之后有的是时间可以继续学习。这话听起来有道理,但我给个教训:我记得多年前第一份实习的任务是对某个大型应用程序进行性能测试 。我不知道如何创建一个用户界面,然后随意定义文本字段,菜单和按钮。我不知道如何用线程来思考,我错误调用整个缓存和线程池。我也不知道如何去做代码维护,并没有单元测试,和编写基本的文档,最后我还是写了几千行的Java代码,这是个无法维护的巨大的类。而这些如果我在工作之前多一些积累和看一些代码,或许不会那么尴尬。

也有些同学说面试中只会考没有用的算法,这跟工作没有任何直接关系。我同意工作中大多数情况是不会用到复杂的算法,但如果你没有过硬的基本功,在面对一些新情况,你就很难举一反三,灵活运用了。我记得我在第一家公司第一个项目是在一个新城市中增加新的排序选项来选择上市的所有租房。这是一个紧急任务,上司希望我尽快熟悉代码库,我当时也顶着压力,做到了一周上线。不久后,我就在我们总裁面前演示:我看着他点击了某个区的房源,选择了新的排序选项,结果花了几分钟去加载页面。我之前也验证过应该没问题,平常应该是几秒才对,我当时满头大汗,真是搞砸了。那天晚上,我思考了很久也想通了。我看中的新代码做两个数据库调用需要遍历其中的每一个,它需要的N * log N比较的次数,而对于那个区域,其中有大约N =1000个房源,那么大约要2万次数据库调用才能完成一个页面加载。当然知道了原因怎么优化就简单了,通过调用缓冲,把数据切成更小块,做数据量的控制,最后性能提高了100倍,所以说系统优化是离不开算法和扎实计算机基本功的。

其实每个工程师都讨厌BUG,代码不整洁,性能太差,用户界面不人性,这些都是一些技术细节,是可以慢慢体会和提高,总会能找到答案去改进的。但在工作中,我应该学习和使用什么样的技术?为什么要自动化测试?如何搭建一个产品,看起来比较靠谱?我怎么去选择一份工作?如果我在一家大公司工作,如何跳槽到创业公司?我如何谈判取得更多的薪金或奖金?什么是股票激励?这些问题倒是更棘手,我也会在第0章给出一些介绍和辅助工具补充。

回看我走过的一路艰辛,我尝试反思学到了什么,我发现其中大部分经验都是来自于痛苦的反复试验的结果。当我意识到成千上万的面试者或者IT开发人员正在经历同样的试错,犯同样的错误, 我觉得应该做一些更有意义的事情:这本书就是一个工具。诚然有些教训只能从在自己的错误中学习,但我希望为你能够从别人的经验中获得通向成功的捷径。

现状:

俗话说凡事要“顺势而为”,找工作亦是如此。现如今,借助手机网络带宽的快速提升以及移动互联网的概念,原先在PC平台才能开展的服务一下被冠上了“移动”二字。在手机上使用服务和电脑上使用服务本质上并没有太大区别,但关键在于手机更具有“私密性”和“便携性”,大大增加了客户粘性和使用时间,进而会对服务提供商产生更大的依赖性。在中国,互联网公司中百度,腾讯,阿里巴巴三驾马车分别把持搜索,社交游戏和电商平台三大主战场,互相竞争。而硅谷更是百花齐放:Apple,Google, Microsoft致力于打造自己的生态圈,完成硬件,软件,服务的闭环;而Facebook,Twitter,LinkedIn等为代表的社交平台也迅速通过巨大的用户群体完成“圈地运动”,将管辖区域内的用户导向各个实体商户;更有Uber,Airbnb等新兴公司,致力于通过移动互联网思维改变人们的实际生活。相比于2000年左右的互联网泡沫,这次的计算机高潮来势更为凶猛:不单单提供资讯,门户,电邮等虚拟线上服务,而是直接破坏性地侵入传统行业,以更高的效率改变原有行业。这就是为什么许多新兴科技企业号称是技术公司,但实际上提供着传统行业的服务。当前的趋势也会逼迫着传统公司作出改变,引入更多计算机人才,利用云计算,机器学习等新手段与新兴公司竞争。最简单的例子比如Wal-Mart Labs,以一个科技智囊的角色隶属于Wal-Mart,通过计算机技术分析,优化Wal-Mart的营运效率。更有金融,银行,地产,石油,制造,电子硬件等各个行业引入计算机技术,大大创造了从业人员的工作机会。

这样的趋势对你我有什么影响?人才需求的极速扩张意味着找工作难度降低,并且待遇也是水涨船高。举例来说,在美国,硕士毕业加入Apple,Google,Facebook等等公司起薪至少十多万美金,每年有年终奖金和数万美金的股票。更不要说加入最火的创业公司,三四年后一旦上市就可以提前退休,或者把工作作为兴趣。在国内,阿里巴巴上市也造就了成百上千个千万富翁,即使是上市前一两年刚加入的新人,也拿到了一百万人民币左右的股权。

如果说这些职位难度太高,对于你遥不可及,或者需要很长的准备时间,那也许对于上面的文字你只会一笑而过。但是,如果告诉你通过正确的方式准备,上面所说的职位触手可及,是不是听起来更有吸引力了呢?事实就是,由于软件工程师的职业特性,面试要求及局限性,以及市场需求等因素,程序员求职是一种比较具有应试性,相对容易找到门道的简单职业道路。网上不乏相关或不那么相关专业的毕业生通过半年到一年的努力拿到理想的计算机相关工作,由此可见,挑战不在于“能”和“不能”,而是如何通过正确的方法,迅速地进入潮流分一杯羹。

目的:

本书存在的目的并不在于代替课本教材,系统性地讲授计算机技术,而是作为一本工具书,创建一个实际的、可操作的面试方法论教程,提供一条快速熟悉技术面试题目的捷径,并且针对不同类型的题目,归纳总结解题方法。

程序员面试是对于面试者计算机知识的全面检测,因此,关于计算机诸如网络,操作系统,编译器,算法,数据结构等等各个领域的系统性学习不可或缺。但是考虑到面试的局限性,诸如时间限制,面试官对于面试者的熟悉程度等等,在白板(或者白纸)上写程序解决一些算法问题成为面试官较为青睐的方法之一。由于该面试方法比较机械,相对容易准备,也最适合总结一些方法论,所以本书的目的就在于传授白板写代码的准备技巧,帮助大家通过面试。我们将会遇到的题目、技术都是来自于我们实际面试过的一些炙手可热的硅谷公司和我们自己作为面试官的一些心得及宝贵经验。正如参加GRE考试一样,关于考试技巧的书籍并不能让一个完全不懂英语的人通过考试,但是可以使得英语基础合格的人如虎添翼,大大增加通过考试的几率。这就是本书的全部存在意义。

特色:

其实市面关于程序员面试的参考书也不少,但是我们认为这些书的关键问题在于它们大多是教你“怎么做”,但很少涉及“为什么这么做”。于是乎,读者往往会觉得书中的解法十分精妙,但是在面试的时候完全想不起来用哪种方法解决问题。其本质原因在于,这些参考书代替你做了最关键的一步:判断用什么方法解决当前的问题。本书遵从大多数面试参考书的构成方式,结合实例按照常见的数据结构,算法以及计算机基础知识进行章节划分,但是,本书着眼于如何进行“模式识别”,通过分析为什么这个问题被划分到这个章节,来教大家如何判断实际面试问题的类型,并且顺水推舟地得出解决问题的方法。对于每个章节,“The Rules”介绍章节涉及的相关知识点,回顾通常出现在教材中的重点内容;“模式识别”给出一些实例,帮助大家总结解决相关问题的常见方法,并且通过分析问题中的关键信息,教授大家如何从题目中得到关于题型分类以及解题方法的蜘丝马迹;最后,“工具箱”给出该章节涉及的C++/JAVA类,它们的常见函数及使用方法,还提供一些标准库函数,以及相关参考资料或扩展阅读。

相关推荐

强烈推荐APP破解常用工具集合_强烈推荐app破解常用工具集合

抓包...

介绍一些网络安全工作中常用的三层发现工具

这里主要分享介绍一些网络安全中的三层发现工具,第三层网络扫描基于TCP/IP、ICMP协议,这类工具有这样两个优点:可路由速度比较快但是也存在比较明显的缺点:...

IPsec 中的IKE(互联网密钥交换协议)工作流程详解

IKE是IPsec的核心组成部分,如果说IPsec是负责给网络数据“上锁”(加密)和“验身”(认证),IKE则用于“商量怎么锁”,“怎么交换钥匙”的。它是IPsec的助手,负责密钥和安全规则的交换...

新浪微博、搜狗输入法曝漏洞:数据明文传输

IT之家(www.ithome.com):新浪微博、搜狗输入法曝漏洞:数据明文传输IT之家讯1月19日消息,近日安全软件McAfee在其官方博客撰文称新浪微博、搜狗输入法等存在安全漏洞,数据直接使用...

一张图理解网络的几个专有名词:数据、段、包、帧、比特

今天工作的时候刚好有客户对我说:“包”和“帧”有啥区别,你咋一会说“包”,一会说“帧”呢?太不讲究了!这说的让我有点脸红,工作中我们通常会把“包”和“帧“混着说,两者在大部分场景中都代表着相同的意...

作为程序猿,你有必要了解这些黑客工具

我们曾对黑客的世界充满着无限的幻想和畏惧,但随着技术的崛起和安全领域的进步,黑客技术已经变得越来越普遍。事实上,很多黑客工具被用于网络安全的工具可以用来进行渗透测试和安全测试,所以作为程序猿,很有必要...

安全课堂:工欲善其事必先利其器之kali工具使用篇

本课程主要讲解Kali里面的基本工具,包括NETCAT、WIRESHARK、TCPDUMP。作为安全从业者是必不可少的帮手,这些工具非常的强大,而且对日后的工作非常重要。1.NETCATNETCAT...

弱电入门工具集 | Wireshark 常用命令

Wireshark是一款网络协议分析工具,可以实时捕获和交互式浏览网络上的数据包。Wireshark特别强大,门槛也比较高,以下是Wireshark中的一些常用操作和功能,如果有兴趣,可以给我留言,...

嵌入式软件开发常用工具列举_嵌入式软件开发的主流技术

今天给小伙伴们介绍一下嵌入式软件开发中常用的一些软件和功用,希望对想要入门的小伙伴们有些帮助,正所谓,工欲善其事必先利其器,下面就为大家一一介绍。一、音频分析工具1.AdobeAudition是一...

测试工程师得力助手:Fiddler和Wireshark进行抓包对比(实战)

了解过网络安全技术的人都知道一个名词"抓包"。那对于局外人,一定会问什么是抓包?考虑到,大家的技术水平不一,我尽可能用非专业的口吻简单的说一下。抓包就是将网络传输发送与接收的数据包进行...

用Wireshark抓包看懂DHCP全过程,新手也能秒懂!

一、DHCP概述DHCP(动态主机配置协议)是一种网络协议,用于自动为网络中的主机分配IP地址、子网掩码等网络配置信息。它极大地减轻了网络管理员的工作量,是现代网络环境中不可或缺的重要协议。DHCP的...

记一次黑客攻击安全分析事件_黑客攻击案例

昨天某时,正吃完午饭的我,揉着眼睛打开态势感知平台准备日常划水,突然一个告警引起了我的注意,于是我“啪”的一下,很快啊,赶紧把相关告警进行溯源排查,一个小时后就生成了一份像模像样的安全分析告警溯源报...

使用windows自带的网络工具抓包_windows抓包wifi

1使用windows自带的网络工具抓包1.1windows下抓包过程1.2抓包文件分析在音视频领域,涉及到对接码流传输的各种问题,很多是通过抓包来定位,常用的抓包工具,windows下使用wir...

抓包神器 Wireshark,帮你快速定位线上网络故障(3)

回顾:TCP三次握手&四次挥手...

这年头, 普通人也该认识这些黑客工具吧?

(图片源于网络,侵删)PS:这些工具都可以去尝试一下,大家加油!随着安全领域的不断发展,黑客技术已变得越来越普遍。所以作为一名网民,真的很有必要了解甚至尝试一下这些开源的黑客工具,但是请不要将它们用在...