10个基本的Web开发面试问题 *

最好的web开发人员可以回答的全部基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

现在就雇佣一名顶级网络开发人员
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, 和世界上的项目经理. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

面试问题

1.

What is CORS? How does it work?

View answer

跨域资源共享(CORS) 是否有一种机制允许多种资源(例如.g.,字体,JavaScript等.),以便从资源来源的域之外的另一个域请求网页. 这是HTML5支持的一种管理机制 XMLHttpRequest 访问不同的域.

CORS添加了新的HTTP头,提供对允许的源域的访问. 对于GET以外的HTTP方法(或带有某些MIME类型的POST), 该规范要求浏览器首先使用HTTP OPTIONS请求头从服务器请求支持(和可用)方法的列表. 然后可以提交实际的请求. 服务器还可以通知客户端是否应该随请求一起发送“凭据”(包括cookie和HTTP身份验证数据).

2.

解释每种HTTP请求类型在与RESTful web服务一起使用时的用途.

View answer

当与RESTful web服务一起使用时,每种HTTP请求类型的目的如下:

  1. GET: 从服务器检索数据(应该只检索数据,不应该有其他效果).
  2. POST: 为新实体向服务器发送数据. 它通常用于上传文件或提交完整的web表单.
  3. PUT: 类似于POST,但用于替换现有实体.
  4. PATCH: 类似于PUT,但仅用于更新现有实体中的某些字段.
  5. DELETE: 从服务器中删除数据.
  6. TRACE: 提供一种方法来测试在发出请求时网络路径上的机器接收到的内容. 因此,它只是返回发送的内容.
  7. OPTIONS: 允许客户端请求有关服务支持的请求方法的信息. 相关的响应头是Allow,它简单地列出了支持的方法. (还可以通过在URI中使用*通配符来请求有关服务所在服务器所支持的请求方法的信息.)
  8. HEAD: 与资源的GET方法相同,但只返回响应头(i.e.(没有实体).
  9. CONNECT: 主要用于建立到资源的网络连接(通常通过一些代理,可以请求将HTTP请求转发为TCP并维护连接)。. 一旦建立,响应发送一个200状态码和一条“Connection established”消息.
3.

描述HTTP/2与HTTP 1相比的主要优势.1.

View answer

HTTP/2提供了减少延迟,以提高页面加载速度,通过支持:

  • HTTP头数据压缩
  • 服务器推送技术
  • 通过单个TCP连接并行加载页面元素
  • 请求的优先级

HTTP/2的一个重要的操作优势是它避免了 head-of-line阻塞 HTTP 1中的问题.

申请加入Toptal的发展网络

并享受可靠、稳定、远程 自由网页开发员职位

申请成为自由职业者
4.

解释MIME多部分消息用于传输不同内容类型部分时的基本结构. 提供一个简单的例子.

View answer

MIME多部分消息的一个简单示例如下:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=frontier

这是一条包含多个MIME格式部分的消息.
--frontier
内容类型:文本/平原

这是消息的主体.
--frontier
内容类型:应用程序/八进制
Content-Transfer-Encoding: base64

PGh0bWw + CiAgPGhlYWQ + CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA + VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A + CiAgPC9ib2R5Pgo8L2h0bWw + Cg = =
--frontier--

每个MIME消息都以消息头开始. 此报头包含有关消息内容和边界的信息. In this case Content-Type: multipart/mixed; boundary=frontier 表示消息包含多个部分,其中每个部分具有不同的内容类型,它们由。分隔 --frontier 作为它们的边界.

每个部分都有自己的内容头(零个或多个) Content- 头字段)和正文. 可以嵌套多部分内容. The content-transfer-encoding 多部分类型的必须总是 7bit, 8bit, or binary 为了避免多层解码所带来的复杂性. The multipart block as a whole does not have a charset; non-ASCII characters in the part headers are handled by the Encoded-Word 系统中,部件主体可以有适合它们的字符集 content-type.

5.

What is Long polling它是如何工作的,以及为什么要使用它? 考虑到服务器和客户端资源,使用长轮询的主要缺点是什么? 哪个HTML5功能是长轮询的最佳选择?

View answer

HTTP协议基于请求/响应模式,这意味着服务器不能 push 提供给客户端的任何数据(例如.e.,服务器只能在响应客户端请求时向客户端提供数据). Long polling web应用程序开发模式是用来 emulate 将数据从服务器推送到客户端. 当使用长轮询模式时,客户机向服务器提交请求,然后 然后连接保持活动状态,直到服务器准备好向客户端发送数据. 只有在将数据发送回客户端或发生连接超时后,连接才会关闭. 然后,客户端在连接关闭时创建一个新请求,从而重新启动循环.

在使用长轮询时,需要考虑两个重要的缺点:

  1. 长轮询请求与任何其他HTTP请求没有什么不同,web服务器以相同的方式处理它们. 这意味着每个长轮询连接都将保留服务器资源, 可能会使服务器可以处理的连接数量达到最大值. 这可能导致HTTP连接超时.

  2. 每个浏览器都会限制web应用程序的最大连接数. 这意味着您的应用程序加载时间和性能可能会降低.

在HTML5中,长轮询的一个有用替代方案是使用 WebSocket. WebSocket是一个在单个TCP连接上提供全双工通信通道的协议. WebSocket协议使浏览器和网站之间的交互成为可能, 促进实时内容并消除对长轮询范式的需求.

另一个可能的答案是 服务器发送的DOM事件. 哪一种方法可以连续地将数据从服务器发送到浏览器, 而不是反复要求. However, 微软Internet Explorer不支持这个HTML5特性, 因此使它不那么有吸引力的解决方案.

6.

考虑以下在浏览器中执行的JavaScript代码:

函数startAjaxQueue () {
  for (var i = 0; i < 50; i++){
  	executeAjaxCallAsync ();
  }
}; 

Assuming that executeAjaxCallAsync () uses a standard XmlHttpRequest 从服务器异步检索数据,有多少 concurrent HTTP请求将由此循环创建?

View answer

并发HTTP请求数和 XmlHttpRequest 在所有浏览器中都受限制. 具体限制根据浏览器类型和版本而有所不同.

例如,根据 Mozilla开发者网络 Firefox 3将每台服务器的XMLHttpRequest连接数限制为6(以前的版本将其限制为每台服务器2个).

Having this mind, 在此循环中创建的并发HTTP请求的数量永远不会(默认情况下)大于6, 因此,浏览器将分块执行这个循环.

7.

什么是ETag,它是如何工作的?

View answer

ETag是一个不透明的标识符,由web服务器分配给在URL中找到的资源的特定版本. 如果该URL上的资源内容发生了变化,则会分配一个新的不同的ETag.

在典型用法中, 当一个URL被检索时,web服务器将返回该资源及其相应的ETag值, 它被放置在HTTP“ETag”字段中:

ETag:“unique_id_of_resource_version”

然后,客户端可以决定缓存资源,以及它的 ETag. Later, 如果客户端想再次检索相同的URL, 它将把之前保存的ETag副本连同请求一起发送到 "If-None-Match" field.

具有:“unique_id_of_resource_version”

在这个后续请求中,服务器现在可以比较客户端的请求 ETag with the ETag 资源的当前版本. If the ETag values match, 这意味着资源没有改变, 然后,服务器可能会发回一个非常短的响应,其中包含 HTTP 304未修改 status. 304状态告诉客户端它的缓存版本仍然是好的,它应该使用它.

However, if the ETag 值不匹配, 这意味着资源可能发生了变化, 然后返回包含资源内容的完整响应, just as if ETag 我们没有被利用. 在这种情况下,客户端可能决定用新返回的资源和新版本替换其先前缓存的版本 ETag.

8.

解释无状态协议和有状态协议之间的区别. HTTP是哪种类型的协议? 解释你的答案.

View answer

A stateless 通信协议将每个请求视为一个独立的事务. 因此,它不需要服务器保留任何会话, identity, 或者跨越来自同一来源的多个请求的状态信息. 类似地,请求者不能依赖于响应者保留的任何此类信息.

In contrast, a stateful 通信协议是响应者维护“状态”信息(会话数据)的协议, identity, status, etc.)跨来自同一来源的多个请求.

HTTP是一种无状态协议. HTTP不要求服务器在多个请求期间保留每个用户的信息或状态.

一些web服务器使用不同的方法(使用cookie)实现状态, custom headers, 隐藏表单字段等.). However, 在每个web应用程序的核心,一切都依赖于HTTP,它仍然是一个基于简单请求/响应范式的无状态协议.

9.

什么是“MIME类型”,它由什么组成,它的用途是什么? 提供一个示例.

View answer

MIME是 Multi-purpose Internet Mail Extensions. 它被用作Internet上对文件类型进行分类的标准方法.

Web服务器和浏览器有一个定义好的MIME类型列表, 哪种方式便于传送已知类型的文件, 无论操作系统或浏览器.

MIME类型实际上有两个部分:A type and a subtype 用斜杠(/)分隔. 例如,Microsoft Word文件的MIME类型为 应用程序/ msword (i.e., type is application 亚型是 msword).

10.

GET和POST之间的区别是什么?

View answer

两者都是HTTP请求中使用的方法. 通常说GET是下载数据,PUT是上传数据. 但是我们可以通过GET/POST进行下载和上传.

GET:

  1. 如果我们在GET请求中向服务器发送参数, 那么这些参数将在URL中可见, because in GET, 参数被追加到URL. 所以在上传文件到服务器的时候会缺乏安全性.
  2. 我们只能在GET请求中发送有限数量的数据, 因为URL有它的最大限制,我们不能在URL上附加一个长数据字符串.

POST:

  1. 如果我们使用POST,那么我们在请求的主体部分发送参数. 如果我们在http请求正文中使用加密后发送数据,则会更加安全.
  2. 我们可以使用POST发送更多的数据.

注意:在不需要传递任何参数的情况下,如果只使用静态API调用获取数据,GET会更快.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. 一天结束的时候, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

现在就雇佣一名顶级网络开发人员

我们的独家网络开发人员

想找一份网络开发人员的工作?

让Toptal为你找到合适的工作.

申请成为Web开发人员

工作机会从我们的网络

提出面试问题

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.

*所有字段均为必填项

寻找Web开发人员?

Looking for Web Developers? 看看Toptal的网页开发人员.

Carlson Lau

自由网页开发员

CanadaToptal Member Since May 2, 2022

Carlson是一名在开发前端、后端和CI/CD管道方面经验丰富的全栈开发人员. 他有在亚马逊等大型科技公司工作的经验, Okta, and IBM, 以及人工智能创业公司. Carlson擅长全栈web开发,但也有可扩展数据库设计和DevOps自动化方面的专业知识.

Show More

泰勒Hicks-Wright

自由网页开发员

United StatesToptal Member Since June 24, 2021

Tyler是一位在全栈web开发方面经验丰富的创新问题解决者, 桌面应用程序, 移动应用开发. 他创造了教育游戏, 视频内容分发平台, 和用户管理系统为一个客户端, 在不到12个月的时间里,游戏便拥有了超过200万的用户,并覆盖了100多个国家. Tyler的见解扩展并极大地增强了许多程序和流程, 帮助客户扩大业务范围,增加收入.

Show More

理查德·奈特·哈里森

自由网页开发员

United StatesToptal Member Since 2022年11月4日

Richard拥有15年的web开发经验,专注于全栈web应用程序. 他擅长使用React、Angular、Vue进行前端开发.js and Node.js、PHP、Django、Ruby on Rails和 .. NET后端, 拥有部署到AWS上的服务器和无服务器环境的专业知识, Azure, and GCP. 他还处理关系和非关系数据库以及大型数据集.

Show More

Toptal连接 Top 3% 世界各地的自由职业人才.

加入Toptal社区.

Learn more