AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

2020 年最常见的 25 个 Web 开发面试问题

  • 2020-07-07
  • 本文字数:5527 字

    阅读完需:约 18 分钟

2020年最常见的25个Web开发面试问题

本文最初发布于 Medium 网站,经原作者授权由 InfoQ 中文站翻译并分享。


你把闹钟设定在了下午 2:45。


Web开发面试预定在下午 3:00 开始。


你耐心而紧张地看着时间一点点流逝,神经都绷得死死的,两手不知不觉间微微颤抖,等待着手机铃声响起的一刻。你在想面试官会对你抛出一堆什么样的面试问题。你的精神越来越脆弱,汗珠一滴滴落了下来。“我真的为这次编程面试做好准备了吗?"你开始质疑自己。


你看了看手机——下午 3:05。没有未接来电。什么都没有。


你着急地再次确认了一遍——下午 3:15……还是沉默。


你在压力下已经过了半小时,满头大汗,默默地抱怨,心跳声清晰可闻。你开始胡思乱想,突然惊慌失措……是电话号码填写错误了吗?还是他们干脆把你忘了?


你的脑海里爆发了激烈的战斗,想要克服焦虑的情绪。希望之火快要熄灭了,你抓起满是汗水的手机,最后再确认一遍……然后,它响了。


立刻接通,说出“你好”二字,试图掩盖颤抖的音调,压制嘴唇和手指的抖动,同时与脑海中涌起的紧张感搏斗。彼此介绍已毕,然后是……针对 Web 开发人员的五花八门的面试问题让你措手不及,你的答案几乎没一个像样的。


你意识到自己已经搞砸了。排山倒海的焦虑感迎面袭来。你感觉胸口压了一块大石,连呼吸都成了困难。头晕眼花,突然什么都想不起来了。你忘了自己在哪里,在和谁交流……什么都忘掉了。双手被汗液浸湿,连握住手机都成了难事。


你知道,想要留下好印象的机会已经十分渺茫了,如果事前的准备能更充分些,或许结果就不会那么糟了。


为避免这种情况,你需要为下一次编程面试做足准备。你需要大致了解对方会问出哪些针对 Web 开发人员的面试问题。在参加电话或现场面试之前,这样的准备工作可以增强你的自信,并减少焦虑情绪。


在本文中,我将讨论开发面试流程背后的规则——面试官最可能问哪些问题?如何漂亮地给出回应,让苛刻的他们点头称赞?

软件开发面试是一种谈判

首先,你需要意识到 Web 开发面试更像是一场谈判。你可能从小就被教导要在面试过程中无懈可击,并准确回答所有问题,这样才能给面试官留下好印象,拿到工作。


现实根本不是这么回事。


当然,你肯定要给人留下深刻印象才行。但是,如果你觉得面无表情地盯着你的面试官,然后像机器人一样回答所有面试问题……就能留下好印象的话,你的误会就大了。


你需要与未来的雇主轻松地交流,同时展现出自信、知识和好奇心,最重要的是热情。


雇主在招聘员工时主要会考虑以下内容:


  1. 性格。

  2. 基本资格。

  3. 文化认同。

  4. 热情。


你的性格需要有足够的适应性,意思是说你应该能轻松与团队打成一片。你还要提出清晰明确的问题,并对面试官的提问给出详尽的答案。


当然,你还需要具备符合岗位要求的基本资格。似乎很多人都将注意力集中在了这一点上(这当然没错),但这只是整个等式中四分之一的部分。


文化认同——这与你的性格息息相关。你必须能够与团队保持同步,并融入团队认可的文化氛围。


最后,对工作充满激情。你会发现这种热情的影响力多么惊人。


比如说,你的简历可能不如其他竞争对手那么亮眼。但如果你表现出强烈的热情,愿意全力以赴,那就可以击败其他求职者赢得工作。当然,这一套并不是每次都行得通。不过雇主一般更有可能雇佣热情满满的员工。


下面,我们就来看一看你可能会遇到的一些最常见的 Web 开发面试问题(和答案)。首先从专业软件工程师的行为问题开始,然后转向更偏技术的问题。


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


注意:某些行为问题在 Web 设计面试中也会遇到。因此如果你是 Web 设计师,那么本文也能帮你备战下一次 Web 设计面试。

你开始编程的契机是?或者为什么你选择了软件开发这个职业?

多数面试官会从介绍性问题问起。应对这些软件工程师面试问题时,只需照常回复即可。尽量坦诚地回答。告诉他们是什么激发了你对编程的兴趣,以及为什么你要申请这个职位。

到目前为止,你的编程经验有多少?

如果你正在申请入门级的 Web 开发人员工作,由于你可能刚刚毕业或刚从培训班出来,面试官不会要求应聘者有多年经验(他们甚至可能会跳过这个问题)。但是,如果你要应聘的是高级软件工程师,则需要有多年的经验打底才能应聘这个 Web 开发岗位。

你熟悉敏捷方法吗?

你需要熟悉诸如看板和Scrum之类的敏捷框架,因为今天的公司都在采用敏捷实践,并逐渐淘汰瀑布流模式。面试官还可能问你有关 SDLC(软件开发生命周期)流程的问题。

你正在使用哪些编程语言?

问题很简单。你应该重点提到那些 Web 开发工作用的最多的语言。


如今,拥有多种语言(例如C++JavaPython)的开发经验肯定会给你的面试官留下深刻的印象。

你最擅长的语言是什么?

坦率回答,并给出具体解释。有时,面试官可能会进一步询问:“使用这些语言时你会感到兴奋吗”,但这种情况很少见。你的答案当然应该是肯定的,然后说明你为什么会感到兴奋。

你是否有兴趣进一步发展自己的技能?

这更偏向于一个软技​​能问题。软件工程是一项工作,你需要不断提升自己,增强自己的技能水平。雇主想看到的是,他们的开发人员擅长最新的技术并在不断打磨自己的技能。因此,这个面试问题的答案显然是肯定的,你还可以多谈一谈你在学习新的编程技能时最感兴趣的内容。

你最喜欢从事哪些类型的项目?

谈一谈与你应聘的岗位类型接近的那些项目。如果你没有类似的案例,那就坦诚相待,并告诉他们点燃你对软件开发的激情的因素都有哪些。

谈一谈你最引以为傲的软件工程项目。你在其中具体有哪些出色的表现?

问到这个问题时,面试官想要听到的答案应该涉及一些非常困难的挑战,你的团队里很少有人能应付这些挑战,而解决问题的就是你。要记住,关键在于不要讨好面试官,对方很容易就能看出来的。你会给人留下糟糕的印象。谈到那些只有你才能解决的问题时,语气要轻松自然。这里的要点是你应该展现自信和头脑,并谦虚地回答问题。

谈一谈你最失败的软件开发项目。再来一次的话你会怎么做?

这又是一个软技能问题。生活就是不断吸取教训的过程。尽可能坦诚,公开承认你过去犯了哪些错误。谈谈你学到了什么教训。总之,请告诉对方你是怎样应对最失败的经历,并变得更加强大的。

你对我们公司了解多少?

面试之前要做足功课。浏览他们所有的社交媒体资料,找出那些能让你的面试官印象深刻的边缘信息。对公司表现出热情。热情在面试过程中起着重要作用。

你是否对我们公司的某个项目感兴趣?

和上面一样——在面试之前做足研究和分析工作,表现出你的热情。告诉面试官你为什么想要参与那些项目。这样他们就能知道你的热情背后有着怎样的动力,并且知道你不是在特意讨好他们了。


上面这些 Web 开发面试问题可能出现在电话面试中,也可能会在现场问到。


下面的技术面试问题通常会出现在现场面试里,但有时也可以在远程面试时提到。如果是远程的情况,面试官会要求你共享屏幕,看你怎样一边写代码一边回答面试问题。


请记住,你会被问到的技术问题类型在很大程度上取决于你申请的岗位类别。我们将尝试覆盖一些最常见的软件开发面试问题,并给出合理的答案选项,这样你就可以根据自己的情况做调整了。

技术面试问题

你如何管理类模块和资产?

编写程序的方法有很多,而且没有对错之分。你想加入的公司可能有一套编写代码的标准,并且可能会将你的答案与他们的标准做比较。通常,大多数公司都希望聘用习惯最简单编程方法的开发人员,并对那些喜欢复杂方法的应聘者敬而远之。这是因为公司都希望能轻松维护代码和编写文档。

具体讲一下AJAX(JavaScript)。能谈一谈你上次使用它的情况吗?

当面试官问你这类软件工程师的“解释性”问题时,重点实际上不是要背定义,而是告诉对方你在编程中是怎样用这些技术的。这会告诉面试官你实际上可以“思考”,并展示出你编程的方式。


AJAX 是"异步 JavaScript 和 XML"的缩写。AJAX 是一种借助XMLHTMLCSSJavaScript创建更好、更快、更具交互性的 Web 应用程序的技术。

你如何向非技术背景的利益相关者解释 API 的概念?

API 是不同软件产品之间的通信使者。它让各个软件系统之间可以相互通信和同步。例如,你可以使用Facebook的 API 在你自己的网站上显示你在 Facebook 发布的帖子,并允许人们直接在你的网站上共享或评论你的帖子,无需切换到 Facebook 上。

解释非功能性需求和功能性需求?

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

黑盒测试和白盒测试有什么区别?

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

可以谈谈模型-视图-控制器(MVC)架构吗?

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

什么是递归函数?

直接或间接调用自身的函数。递归会一直持续到函数到达一组参数,并返回一个值而非递归调用自己为止。递归函数可以很快地解决某些问题。

请以最简单的方式解释大 O 符号。

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


大 O 符号(也称为朗道符号)告诉我们函数的运行时或空间要求随输入增长的情况。也就是说算法速度不是以秒为单位,而是以操作数量的增长情况来衡量。

A*算法的机制?

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


它使用公式 f(n)=g(n)+h(n),将与起始节点相邻的每个节点及其成本估算值添加到队列中。g(n)是从起始节点到节点 n 的实际成本,而 h(n)是启发式函数。在每一步,具有最低成本估算值 f(n)的节点都会进一步扩展。当最后一个节点是扩展节点时,路径就完成了。

你对面向对象编程(OOP)有什么看法?

你可以在 freeCodeCamp 上参考这篇关于OOP的详尽指南。这篇指南细化解释了这个概念。

你的 SQL 技能怎么样?

也许数据库不是你工作的核心内容,但你也需要了解数据的结构。你谈到的 SQL 实践经验肯定会为你的 Web 开发面试加分不少。

编写一个函数来计算第 N 个斐波那契数。

以下代码段来自Geeksforgeeks。这是一个很好的例子。


在 C++中:


//Fibonacci Series using Recursion#include<bits/stdc++.h>using namespace std;int fib(int n){if (n <= 1)return n;return fib(n-1) + fib(n-2);}int main (){int n = 9;cout << fib(n);getchar();return 0;}// This code is contributed(Credits to Akanksha Rai)
复制代码

反转一个字符串(str:String)

面试官要求你反转字符串时,并不是说他们会要求你在生产代码中实际实现 reversed()。他们只想看看你是用什么方法来解决问题的。


显然,大多数大型技术企业都会向你提出算法问题,尤其是 FAANG 公司。


以下代码段来自 Geeksforgeeks。它给出了一个完美的例子。


// A Simple C++ program to reverse a string#include <bits/stdc++.h>using namespace std;// Function to reverse a stringvoid reverseStr(string& str){int n = str.length();// Swap character starting from two// cornersfor (int i = 0; i < n / 2; i++)swap(str[i], str[n — i — 1]);}// Driver programint main(){string str = “geeksforgeeks”;reverseStr(str);cout << str;return 0;}
复制代码


归根结底,公司要找的是聪明的人。算法问题是一个很好的筛选手段,可以淘汰很多“愚蠢”的候选人。

一道编程题:

以前微软在面试中用过这道题,它是一道很好的编程题目。

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

最明显的方法是将列表中的每个数字与其他所有数字对比,这个方法具有 O(n²)的时间和 O(1)的空间复杂度。

那么我们假设列表很大,所以你需要更快的算法。

我可以只使用一个布尔数组,然后使用整数值作为索引(时间复杂度为 O(n))来遍历列表,数组/哈希的空间复杂度是 O(n)。

假设列表特别大,所以你不能复制它。也许你有 8GB 的内存,而列表有 6GB 大。

我可以对数字排序并对比相邻的对。如果我使用像 mergesort 这样的原地排序算法,那就是 O(n*logn)的时间复杂度和 O(1)的空间复杂度。

如果你想要比 O(n²)更快,又负担不起那么多额外空间,还无法操纵原始列表,该怎么办?例如,列表可能位于只读 CD 上。

(到这里,几乎所有人都需要一到两个提示。)


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

小结

写到这里就差不多了。无论你是初级 Web 开发人员还是高级软件工程师,都希望你能从本文找到有用的面试问题和答案。你可以再读一遍,以进一步增强信心。


请记住,你在 Web 开发面试中的表现并不会影响你的软件工程技能。如果你头几次搞砸了——没什么大不了的。只需准备下一次面试即可。最终,你将在自己梦寐以求的公司中找到一个职位,你所经历的所有面试都是有意义的。


如果你正在寻找DevOps工具(带有直观的问题跟踪器、git 存储库、内置的 CI/CD 和可发布的文档),请随时尝试Codegiant


原文链接:


https://blog.codegiant.io/25-web-developer-interview-questions-and-answers-3030b21ae016


2020-07-07 14:517075

评论 1 条评论

发布
用户头像
说的对极了
2020-07-07 21:46
回复
没有更多了
发现更多内容

模块五作业

危险游戏

架构实战营

☕【并发技术系列】「多线程并发编程」技术体系和并发模型的基础探究(夯实基础)

码界西柚

Java 并发编程 多线程 多进程 12月日更

dart系列之:还在为编码解码而烦恼吗?用dart试试

程序那些事

flutter dart flutter 面向切面 aop 程序那些事 12月日更

Selenium之css怎么实现元素定位?

六十七点五

大前端 软件测试 自动化测试 接口测试 selenium

等保工作中常见导致测评结论为差的高风险项

行云管家

网络安全 等级保护 等保测评 等保结论

恒源云(GPUSHARE)_分享一个技巧!CV训练时容易忽视的数据标签问题

恒源云

深度学习 算法 CV

小程序与H5适合的场景应用都有哪些

Speedoooo

ios开发 APP开发 容器安全 Andriod开发 容器应用

常用项目部署方案和区别

进击的梦清

DevOps 运维 项目 部署与维护

基于星环科技大数据平台 辽宁城市建设职业技术学院打造智慧校园

星环科技

大数据

PackML从会到不会——命令标签(4)

陈的错题集

标准化 PackML

短视频平台的风控系统设计

Bill Zhang

一场关于元宇宙公司之死的剧本杀

白洞计划

周边生态|RoP 重磅发布 0.2.0 版本: 架构全新升级,消息准确性达 100%

Apache Pulsar

Java 开源 架构 云原生 Apache Pulsar

12 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

初识JVM的内存结构

Ayue、

技术专题合集

云智慧正式开源运维管理平台(OMP),加速AIOps社区生态建设

云智慧AIOps社区

运维 运维监控 开源软件 运维体系 运维系统

Linux一学就会之Centos8用户管理

学神来啦

Linux centos 运维 linux云计算

恒源云(GPUSHARE)_CIFAR-10数据集实战:构建ResNet18神经网络

恒源云

深度学习 算法

我不用“996”,更不用“007”,可我赚的就是比你多

六十七点五

软件测试 自动化测试 接口测试 测试工程师 功能测试

vCenter管理软件用什么牌子好?有哪些用处?

行云管家

虚拟化 vcenter

分享一个从源码快速构建应用的小工具

Draven Gorden

开发者工具 开发工具 开源项目

使用工具Source Monitor测量您Java代码的环复杂度

汪子熙

Java 软件工程 28天写作 12月日更 代码复杂度

Cordova插件中JavaScript代码与Java的交互细节介绍

汪子熙

Java JavaScript 移动应用 28天写作 12月日更

如何在Flutter应用程序中创建不同的渐变 【Flutter专题14】

坚果

flutter 28天写作 12月日更

Sinfonia: a new paradigm for building scalable distributed systems--翻译理解【1】

Krysta

分布式 transaction Sinfonia DSM 两阶段提交改进

模块5作业

覃飞

MySQL探秘(二):SQL语句执行过程详解

程序员历小冰

MySQL 28天写作 12月日更

带你了解Typescript的14个基础语法

华为云开发者联盟

typescript 数组 开发 js 语法

当我们谈论“远程开发”时,我们在谈论什么

Draven Gorden

云原生 开发者工具 开发工具 远程协作 开发环境

Java和ABAP中的几种引用类型的分析和比较

汪子熙

Java 引用 28天写作 abap 12月日更

Camtasia视频剪辑功能详解

淋雨

Camtasia

2020年最常见的25个Web开发面试问题_大前端_Team Codegiant_InfoQ精选文章