Back-End-Developer-Interview-Questions(后端开发面试题)是一个开放性的题库,包含面试时可能会考到的各种题目。项目中并没有提供这些问题的答案,不过当然大家也知道,比起答案来更重要的是藉由这个问题与面试官交流的过程,这能让面试官更能知道你在后端开发这方面的独有的见解与思路。这样看来这个题库更主要地是在告诉你在面试时你可能会需要的思路与一定的知识储备。出于该目的,笔者将与该题库的有关内容整理出来,并从题库中甄选了一些较为有趣的题目,希望能对大家有所帮助。

首先,该题库是有中文版的,由monklof对其进行了翻译,但更新不及时。连接:

https://github.com/monklof/Back-End-Developer-Interview-Questions

其次,题库中的一部分问题可以在这个项目中获得一定的解答,虽然可能不适用于面试,但也可以提供许多有用的信息:

https://github.com/monklof/Back-End-Developer-Interview-Questions

作者将问题分为以下类型:

通用问题:有较为标准的答案的问题

开放式问题:没有固定答案,与编程经验有关的问题

设计模式相关问题:与体系的架构有关的问题

代码设计相关问题:与编程习惯、规范有关的问题

语言相关问题:与某种语言的特性有关的问题

Web相关问题

数据库相关问题

非关系型数据库相关问题

代码版本管理相关问题:对各个代码版本管理的应用之间的带有比较性的问题

并发问题

分布式系统相关问题

软件生命周期和团队管理相关问题:有关代码的可延展性以及工作方式的问题

逻辑和算法相关问题

软件架构相关问题

面向服务架构(SOA)和微服务(Microservice)相关问题

安全相关问题

比尔盖茨式问题:玄学问题,哲学问题……

代码示例问题:提供代码并以此为题作出解答

通用问题示例

1、微软、谷歌、欧朋(opera)和火狐这类公司是如何从他们的浏览器中获利的?

思路:浏览器最大的收入在于广告收入,竞价链接、与搜索引擎合作分成。广告一直是传媒业的主要收入。而像google一直做的事就是信息精确投放,这就是google的优势所在。所以本质上浏览器公司获利的主要来源还是广告。

这方面的内容推荐一本书:https://book.douban.com/subject/6709783/

2、封装的重要性:

思路:抽象和封装是互补的概念,抽象关注对象的可观察到的行为(外部),而封装关注的是行为的实现。封装通常是通过信息隐藏来实现的。信息隐藏是将那些不涉及对象本质特征的秘密都隐藏起来的过程。“复杂系统的每部分都不应该依赖于其他部分的内部细节”,抽象“帮助人们思考他们做什么”,而封装“让程序可以借助最少的工作进行可靠的修改”。其中底层封装,对用户来说是没什么影响的,但是对于编程人员来说,封装和私有提升了接口的可读性,规范性,用封装好的函数会极大的提高程序编写效率。

开放式问题

这种问题就比较多样化了,更强调对应聘者的思维及各种能力的考察。比如:

在你当前的工作流中,什么事情是你计划下一步需要自动化的?

如何向你的祖母解释什么是线程?

为什么写软件是困难的?是什么使软件的维护变得困难?

等等范围很广的问题,当然也没什么标准的答案。个人认为这种问题的意义在于应聘者是否对自己的领域有所思考。这当然是个很重要的事情,就算对于没有面试要进行的人也同样重要,赶紧去试试回答吧。

设计模式相关问题

为什么说goto语句是恶魔般的存在?

思路:这个说法最早是由荷兰著名计算机科学家E.W.Dijkstra于1968年提出的,在一封给ACM编辑的信《go to statement considered harmful》中指出。http://ce.sharif.edu/courses/90-91/1/ce364-1/resources/root/GoTo/Dijkstra.pdf

非结构性地使用goto可能导致程序流图不可规约(irreducible)。而非系统的使用goto语句并且会降低代码的可读性。对于编译器来说,良好结构的代码和goto语句产生的面条式代码(这里没有贬义)根本没有区别。这里引用一篇文章             (http://blog.csdn.net/cpq37/article/details/47342665)其中节选:Donald Knuth在他的论文结构化编程语句写道,”过早的优化是万恶之源。”清晰的编程重要得多,直到你知道您的代码中的hot spot,特别是考虑到现代的优化和分析工具比Knuth当他在1974年写论文是更加强大;大部分他给出的例子:使用goto来进行优化,事实上现代编译器都已经做了这部分工作。

数据库问题:什么是N + 1问题?

可以参考:https://secure.phabricator.com/book/phabcontrib/article/n_plus_one/