常见面试问题(和答案)

2020-06-27 22:52:36

你正在耐心而紧张地等待着你的手机响起,你的胸口越来越紧张,双手无缘无故地颤抖。你想知道面试官会问你哪些网络开发面试问题。你的思想在刺激你的神经。张力逐级上升。“我真的准备好参加编码面试了吗?”--你开始责备自己。

你已经在压力下30分钟了,满头大汗,默默呻吟--你的心跳加速。潜伏的冒名顶替者综合症是从深处产生的。你开始把…吓坏了。想知道你是否给错了电话号码…。或者他们会不会忘了你。

你的头脑正在领导一场激烈的战斗,以克服你焦虑的思路。你满怀绝望的希望,用汗流浃背的爪子抓起你的手机,最后看了一眼,…。然后是…。它响了。

你拿起话筒说“你好”,试图掩盖声音中颤抖的音符,嘴唇和手指的焦虑颤抖,同时与内心极度紧张的情绪作斗争。你们互相介绍,然后…。各种面向网络开发人员的面试问题抛给你,让你措手不及,你几乎不能给出足够的答案。

你意识到你完全被搞砸了。压倒性的焦虑在你心中变得越来越深。你感觉你的胸口有一个200公斤重的仰卧撑,你举不起来。眩晕出现了,你突然忘记了。你忘了你的位置,忘了和你说话的人…。所有的一切。手中汗流浃背,以至于你拿着手机的时候,它不会从你的手指间溜走。

你知道,给人留下好印象的机会是如此之低,如果你赌蟑螂赛车,你会有更多的运气。

为了避免这种情况,您需要为下一次编码面试做好充分准备。你需要对你被问到的网络开发人员的面试问题有一个把握。这会增强你的信心,减少你在电话或现场面试前的焦虑。

在这篇文章中,我将谈论开发人员面试过程背后的原则-你可以从面试官那里期待的最常见的网络开发人员问题,以及如何以一种令人着迷的方式回答这些问题,让他们的脸上露出令人惊叹的表情(即使他们想把你的头拧下来,重新整理你的脸,或者只是擦他们的鞋子;-)。

首先,您需要认识到,网络开发人员面试过程更像是一场谈判。你很可能在孩提时代就被教导过,你需要在面试中无懈可击,准确回答每一个问题,才能给人留下好印象,才能被录用。

这与事实大相径庭(出自那些通过直接向雇主发出冷淡信息而被录用的人--既没有正式的面试程序,也没有传统的面试程序)。

是的,当然,你需要给人留下好印象。但是,如果你认为给人留下好印象归根结底是笨拙地盯着你的面试官,僵住了,同时像机器人…一样回答每一个开发人员面试问题。你大错特错了,我的朋友。

你需要能够与未来的雇主自由沟通,同时流露出自信、知识、好奇心,最重要的是热情。

你需要有一个合适的个性,也就是说,你需要能够轻松地与你的团队沟通,没有任何麻烦。你需要问清楚而简明的问题,同时给出全面而详细的答案。

当然,你还需要具备应聘工作的基本资格。然而,许多人似乎把大量的注意力放在这一点上(这是非常好的),但它只是整个等式的1/4。

文化契合度--这与你的个性息息相关。你必须能够与你的团队同步,并发展一种每个人都喜欢在其中工作的文化。

最后,对你的工作要有燃烧的激情和热情。你会惊讶于热情会有多么大的帮助。

例如,你的简历可能不像隔壁房间里也在接受面试的那个人那么好,…。但是,如果你表现出燃烧的热情和不畏艰辛的意愿,你就可以击败其他候选人,赢得这份工作。当然,情况可能并不总是如此。尽管如此,雇主更有可能把你作为一个超级热情的人来雇用,而不是作为一名普通员工。

好的,让我们来看看你可能会遇到的一些最常见的网络开发人员面试问题(和答案)。我们将首先从专业的软件工程师行为问题开始,然后切换到更多的技术问题。

无论您是前端软件开发人员、后端软件开发人员还是全栈软件开发人员,这些常见的计算机科学面试问题都将帮助您为下一次编码面试做准备。

注意:一些行为问题也可以在网页设计面试中注意到。因此,如果你是一名网页设计师,这篇文章会让你为下一次网页设计面试做好充分准备。

是什么让你开始编程的?或者你为什么对软件开发人员的职业感兴趣?

大多数面试官从介绍性问题开始。回答这些软件工程师面试问题时,只需遵循常识即可。尽量做到透明。告诉他们是什么真正激发了你对编程的兴趣,以及你为什么申请这份工作。

如果你申请的是入门级网络开发人员的工作,面试官不会期望你有多年的经验(他们甚至可能会跳过这个问题),因为你可能刚刚毕业或完成了一个编程新兵训练营。然而,如果你正在申请一个高级软件工程师的职位,你需要有多年的经验来支持你的网络开发工作的申请。

您需要熟悉诸如看板和Scrum这样的敏捷框架,因为现在的公司正在采用敏捷实践,并远离瀑布方法论。面试官可能还会问您有关SDLC(软件开发生命周期)过程的问题。

就这么简单。您可能希望将重点放在Web开发工作需要您最频繁使用的特定语言上。

最近,拥有C++、Java和Python等多种语言的经验肯定会让你的面试官大吃一惊。

要透明,要有透彻的解释。有时,面试官可能会问:“你使用这些语言会感到兴奋吗?”但很少见。显然,回答“是”并解释为什么你感到兴奋。

这更像是一个软技能面试问题。软件工程是一份需要你始终茁壮成长并磨练技能的工作。雇主需要知道,他们的开发人员在使用最新技术并不断磨练自己的技能方面处于领先地位。因此,软件开发人员面试问题的答案显然是“是的”--但进一步扩展一下,告诉他们在学习新的编码技能时,您最感兴趣的是什么。

谈论与你将要在你申请的职位上工作的项目类似的项目。如果不是,(总是)真诚地告诉他们是什么真正激发了你对软件开发的热情。

告诉我你最引以为豪的软件工程项目。你做了什么特别成功的事情?

在这里,面试官特别想听到一些严重的问题,你们团队里能解决的人不多,而你却能解决。重要的是要记住,不要试图给面试官留下深刻印象--天平马上就会从他的眼睛里掉下来。你不仅不会给人留下好印象,反而会给人留下绝望的印象。当谈论除了你没有人能解决的问题时,要随心所欲。因此,你散发出自信和知识。在回答这个网络开发人员面试问题时谦虚是关键。

告诉我你最不引以为豪的软件开发项目。你会有什么不同的做法?

另一个软技能面试问题。生活就是从你的错误中吸取教训。尽可能透明,公开承认你过去犯过的错误。谈谈你学到的教训。基本上,解释一下你是如何应对最严重的失败并变得更坚强的。

面试前要做大量的调查研究。仔细阅读他们所有的社交媒体资料,找出能给面试官留下深刻印象的小信息。表现出对公司的热情和热情。热情在面试过程中起着巨大的作用。

和以前一样-在面试前进行彻底的研究和分析。表现出激情和热情。告诉面试官你为什么喜欢做那些特别的项目。因此,他们可以看到这种热情背后的原因,并将所有这些都是空洞的想法抛诸脑后。

以下技术面试问题通常在现场进行,但有时也可以远程进行。如果是远程访问,面试官会要求您共享屏幕,以便在您编写代码的同时回答软件开发面试问题。

记住,你被问到的技术问题在很大程度上取决于你申请的职位。我们将尝试涵盖一些最常见的软件开发人员面试问题,并为您提供合理的答案,使您能够轻松适应您的情况。

编写代码的方法有很多种,而且都是正确的。您想要加入的公司可能有一套编写代码的标准,并且可能会将您的答案与该标准进行比较。通常,大多数公司寻找采用最简单的编码方法的开发人员,并试图赶走那些称赞复杂的编码方法的开发人员。这是因为公司希望轻松维护和记录代码。

详细介绍一下Ajax(JavaScript)。你能给我举个例子说明你最后一次使用它是什么时候吗?

Java开发人员面试问题相当常见。当面试官问你这样的软件工程师“解释性”问题时,重点实际上不是解释定义,而是告诉你将如何在代码中使用它。这向面试官发出了你可以真正“思考”的信号。它还显示了您进行编码的方式。

Ajax是异步JavaScript和XML的缩写。Ajax是一种新技术,可以在XML、HTML、CSS和JavaScript的帮助下创建更好、更快、更具交互性的Web应用程序。

它是软件产品之间的信使。它允许软件系统相互通信和同步。例如,您可以使用Facebook的API在您的网站上显示您的Facebook帖子。并允许人们直接从你的网站分享或评论你的帖子,而不需要切换到Facebook。

非功能需求描述了系统的类型(可访问性、可维护性、安全性)。而功能需求描述了该系统的特定功能。

黑盒测试仅用于在给定输入的情况下建立正确的输出。相比之下,白盒测试还涵盖了该特定功能的实现-它测试其实现是否正确。

它将数据与用户界面分开。MVC架构主要用于GUI应用程序。模型层包含数据,视图层将数据发送给用户,而控制器是根据用户输入对模型进行更改的控制器。

直接或间接调用自身的函数。递归将继续进行,直到到达返回值的一组参数,而不是递归调用函数。递归函数可以相当快地解决特定问题。

大O符号告诉我们算法有多快。无论你是在评估别人的算法还是你自己的算法,这一点都非常重要。

大O符号,也称为朗道符号,告诉函数的运行时或空间需求如何随着输入的增长而增长。这意味着算法速度不是以秒来衡量的,而是以操作数量的增长来衡量的。

这是一种广泛用于寻路和图遍历的计算机算法。它使用一个启发式函数来估计从节点A到B的成本。每个步骤中的节点都挤在一个优先级队列中。

它使用公式f(N)=g(N)+h(N)将与起始节点相邻的每个节点连同它们的成本估计一起添加到队列中。g(N)是从起始节点到节点n的实际成本,而h(N)是启发式函数。在每个步骤,具有最低估计成本f(N)的节点被进一步扩展。当最后一个节点是展开的那个节点时,路径结束。

您可以参考免费CodeCamp上关于OOP的这份详细说明的指南。它详细分析了这个概念。

即使数据库可能不是您工作的核心,您也需要了解数据是如何构造的。您可以讲述的任何实际SQL体验肯定会给您的Web应用程序面试增加额外的分数。

面试官要求您反转字符串并不意味着他们会要求您在生产代码中实际实现reverted()。他们只是想看看你用来解决问题的方法。

归根结底,公司最看重的是聪明人。算法问题是一个很好的代理,可以淘汰许多“愚蠢的”候选人。

这实际上是微软曾经问过受访者的一个很棒的软件工程师面试问题。

您有一个介于1和N之间的N+1个整数列表。您知道至少有一个重复项,但可能还有更多重复项。例如,如果N=3,则您的列表可能是3、1、1、3,也可能是1、3、2、2。打印出在列表中多次出现的数字。(也就是说,在第一个示例中,您可以打印‘1’或‘3’-您不必同时打印两者。)

最明显的方法是将列表中的每个数字与其他数字进行比较,直到找到时间复杂度和空间复杂度分别为O(n²)和O(1)的重复数字。

好的,假设列表很大,所以你需要比O(n²)更快的值。

我只需使用布尔数组并使用整数值作为索引,迭代列表的时间复杂度和数组/散列的空间复杂度分别为O(N)和O(N)。

好的,假设数字列表非常大,所以您希望避免创建它的副本。也许你有8 GB的内存,而列表占用了6 GB。

我可以对数字进行排序并比较相邻的对。如果我使用像Mergesort这样的就地排序,这将花费O(n*logn)时间和O(1)空间。

如果您想要比O(n²)更快的内容,并且您负担不起使用大量额外空间,但是您也不能操作原始列表,该怎么办呢?例如,列表可能在只读CD上。

我想我可以用二进制搜索重复的数字。例如,我遍历列表并计算介于1和N/2之间的整数数量。如果计数大于该范围内可能的整数数量,则我知道该范围内存在重复。否则,在N/2+1到N的范围内必须存在重复项。一旦我知道重复项在范围的哪一半,我就可以在这一半中进行递归和二进制搜索,然后继续重复这个过程,直到找到重复的数字。时间复杂度为O(n*logn),空间复杂度为O(1)。

所以这篇帖子--最常见的软件开发人员面试问答--差不多就到此为止了。无论您是初级Web开发人员还是高级软件工程师,希望您能够发现这些面试问题和答案很有用。你可以再过一次帖子,这样更能增强你的信心。

记住--你在网络开发面试中的表现对你的软件工程技能毫无意义。如果你头几次搞砸了-没什么大不了的。只需继续进行下一次软件开发面试即可。最终,你会在梦寐以求的公司找到一个职位,你经历的所有开发人员面试都会是值得的。

如果您正在搜索DevOps工具(具有直观的问题跟踪器、GIT存储库、内置的CI/CD和可发布的文档),请随意尝试CodeGiant。