10个重要的面试问题 *

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

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

Interview Questions

1.

如果您要编写一个端点来检查资源是否存在, 你会用什么途径和方法?

View answer

这个问题的目的是测试应试者对RESTful API标准的了解程度. 构建端点时的一个常见错误是在路径中使用描述性动词. For example:

  • GET /users/search
  • GET /posts/create

Instead, 真正的RESTful路径应该只包含名词——端点上使用的方法应该决定操作. For example:

  • POST /users (create a user model)
  • PUT /users/{id|slug} (replace a user model)
  • PATCH /users/{id|slug} (update part of a user model)
  • DELETE /users/{id|slug} (delete a user model)
  • GET /users/{id|slug} (retrieve a user model)

确定资源是否存在是api中经常需要的操作, 但很少按照RESTful和行业标准正确地完成. 确定资源是否存在的常用方法, 以上面的“user”资源为例, is like so:

  • HEAD /users/{id|slug}

此请求将使用最少的带宽,因为它将不返回任何数据,仅返回一个 200 (resource exists) or 404 (资源不存在)HTTP状态.

2.

考虑下面的数据库表设计:

CREATE TABLE `notifications` (
	' id ' INT NOT NULL AUTO_INCREMENT;
	`type` INT(8) NOT NULL,
	' notifiable_id ' INT unsigned NOT NULL,
	' notifiable_type ' VARCHAR(10) NOT NULL,
	`relation_id_1` INT unsigned,
	`relation_type_1` VARCHAR(10),
	`relation_id_2` INT unsigned,
	`relation_type_2` VARCHAR(10),
	' updated_at ' TIMESTAMP NOT NULL,
	' created_at ' TIMESTAMP NOT NULL,
	PRIMARY KEY (`id`)
);

上面的问题是什么,如何改进?

View answer

建议的表设计的关键问题是 object_id_X and object_type_X fields. 当数据可以像这样存储在相关表中时,增加命名字段被认为是糟糕的设计:

Notifications Table

CREATE TABLE `notifications` (
	' id ' INT NOT NULL AUTO_INCREMENT;
	`type` INT(8) NOT NULL,
	' notifiable_id ' INT unsigned NOT NULL,
	' notifiable_type ' VARCHAR(10) NOT NULL,
	' updated_at ' TIMESTAMP NOT NULL,
	' created_at ' TIMESTAMP NOT NULL,
	PRIMARY KEY (`id`)
);

Notification Relations Table

创建表notification_relations
	' notification_id ' INT unsigned NOT NULL,
	' relation_id ' INT unsigned NOT NULL,
	'关系类型' VARCHAR(10) NOT NULL,
	PRIMARY KEY (`notification_id`)
);
3.

在您自己的API请求中集成第三方服务时,一个常见的问题是必须等待响应, and as such, 迫使用户等待更长时间.

你会如何避免这种情况? 如果合适,请列举任何相关技术

View answer

解决这个问题最有效的方法是使用队列.

当向我们的API发出请求时,将创建一个单独的作业并将其添加到队列中. 然后,该作业将在请求的端点上独立执行, 从而允许服务器无延迟地响应.

有许多队列提供程序,但最值得注意的是:

  • Amazon SQS
  • Redis
  • Beanstalkd

申请加入Toptal的发展网络

并享受可靠、稳定、远程 自由的全栈开发人员工作

Apply as a Freelancer
4.

如果用户试图创建一个已经存在的资源,例如, 已经注册的电子邮件地址—您将返回什么HTTP状态码?

View answer

尽管这个问题的答案存在争议,但广泛接受的做法是使用 409 Conflict HTTP status code.

返回a也可以接受 422 Unprocessable Entity.

Some may argue that a 400 Bad Request is acceptable, but we discourage this, 因为它通常意味着服务器不理解请求, which in this case is not true.

5.

如何防止僵尸抓取你的公开API?

View answer

如果API中的数据是可公开访问的,那么, technically, 完全防止数据抓取是不可能的. However, 有一个有效的解决方案可以阻止大多数人/机器人:速率限制(也称为节流)。.

节流将阻止某个设备在规定时间内发出规定数量的请求. 当超过定义的请求数时,a 429 Too Many Attempts HTTP error should be thrown.

注意:使用不止一个IP地址来跟踪设备是很重要的,因为这不是设备唯一的,并且可能导致整个网络失去对API的访问.

其他不太理想的答案包括:

  • 基于用户代理字符串阻止请求(很容易绕过)
  • 在前端为访问者生成临时“会话”访问令牌. 这并不安全:在前端存储秘密可能会被逆向工程, 因此,任何人都可以生成访问令牌.
6.

考虑以下两张表:

CREATE TABLE `posts` (
	' id ' INT NOT NULL AUTO_INCREMENT;
	`text` TEXT,
	' user_id ' INT unsigned NOT NULL,
	' updated_at ' TIMESTAMP NOT NULL,
	' created_at ' TIMESTAMP NOT NULL,
	PRIMARY KEY (`id`)
);

CREATE TABLE `post_likes` (
	' post_id ' INT unsigned NOT NULL
	' user_id ' INT unsigned NOT NULL,
	`created_at` TIMESTAMP NOT NULL
);

中检索所有数据的查询 posts table for a given user_id. 除此之外,返回的记录集还应该包括的计数 post_likes for each post.

View answer

首先,也是最重要的,答案应该包括一个,而且只有一个查询. 达到预期结果的方法有很多,但正确的方法是:

SELECT
   posts.*,
   COUNT(post_likes.user_id) AS likes 
FROM
   posts 
   LEFT JOIN
      post_likes 
      ON posts.id = post_likes.post_id
WHERE posts.user_id = 'XXX'
GROUP BY posts.id
7.

考虑一个响应式网站设计,它需要在所有响应状态下使用全宽图像. 正确的编码方式是什么,以确保页面加载填充空间所需的最小图像?

View answer

The key attributes here are srcset and sizes. 这些属性允许开发人员为一个图像指定多个图像大小 , for example:


By using srcset and sizes, 然后,浏览器将根据访问者视口的大小智能地选择要使用的正确图像源.

任何基于视口大小使用JavaScript更改图像源的建议都应该被视为危险信号. 这表明开发人员没有跟上最新的CSS特性支持和/或最佳实践.

8.

考虑一个在页面中心有一个登录表单的站点设计. 使用CSS,什么是最好的方法来确保框是水平和垂直居中?

View answer

从技术上讲,有多种方法可以实现这一点. 然而,如今,有一种“正确”的方法来做到这一点:使用 display: flex and margin: auto.

Other methods include position: absolute;, top: 50%, and margin-top: -Xpx,但是自从引入了 display: flex.

9.

在使用SEO进行编码时,请列出三个需要考虑的关键事项.

View answer

为了建立一个网站优化的有机搜索引擎排名, 在整个代码中实现某些标准是很重要的. These include:

  • Specifying an alt tag on images
  • 为内容层次结构i使用正确的HTML标记.e.,

    /

    /

    and p

  • 将网站连接到公司的社交页面
  • Add an XML sitemap
  • Avoid broken links
  • 使用虚荣/友好的url(人类可读)
  • Add a robots.txt file
  • 整合谷歌分析(或替代)
  • 指定一个favicon,用于指定特定于浏览器的图标
  • 确保闪电般的页面加载时间
  • Avoid JavaScript errors
  • 优化资产(包括最小化)
  • Enable and force SSL
  • 为每页指定唯一的标题,但不能超过70个字符
  • 在每一页都包含一个元描述
  • 确保有足够的内容和足够的相关关键词(如果所有页面都是一句话页面,搜索引擎会惩罚你的网站)
  • Leverage browser caching
  • 避免W3C标记验证错误
  • Specify relevant meta tags
10.

列出五种或更多优化网站的方法,使其尽可能高效和可扩展.

View answer

优化网站是一门很少有人熟悉的艺术. 工程师能想到的就越多, 他们就越有可能在编写代码时自然地执行以下所有操作,而不必稍后返回.

(此外,通常一个专业构建的网站在分析时应该得分超过75% gtmetrix.com,这也可以作为一个清单.)

  • Optimize all assets
  • 将所有资产放在一个单独的、无cookie的域中. Using a CDN is best
  • 避免内联JavaScript和CSS
  • Enable gzipping
  • Ensure all code is minified
  • Defer parsing of JavaScript
  • Use srcset for responsive images
  • Leverage browser caching
  • Reduce DNS lookups
  • Avoid duplicate code
  • Avoid URL redirects
  • Enable HTTP keep-alive
  • Serve scaled images
  • 在适当的地方使用图像精灵
  • Prefer asynchronous resources
  • 指定服务器级别的字符集
  • Avoid CSS @import
  • Specify a cache validator
  • Minimize request size
  • Avoid bad requests and 404s
  • Specify image dimensions
  • Reduce cookie size
  • Make fewer HTTP requests, i.e.,加载尽可能少的外部资源
  • Avoid unnecessary images; where possible, use CSS
  • 确保没有W3C验证错误

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

Why Toptal

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

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

现在就雇佣一名顶级全栈开发人员

我们的独家全栈开发者网络

希望找到一份全栈开发人员的工作?

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

Apply as a Full-stack Developer

工作机会从我们的网络

Submit an interview question

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

* All fields are required

寻找全栈开发人员?

Looking for Full-stack Developers? 查看Toptal的全栈开发人员.

Leah Sapan

Freelance Full-stack Developer

United StatesToptal Member Since August 31, 2015

Leah is a motivated, self-taught, 拥有超过13年专业软件开发经验的分析思考者. 她有丰富的建筑经验, developing, 部署全功能的web应用程序,专注于用户体验和高性能的后端设计. Leah可以在软件开发生命周期中管理多个项目, 在充满挑战的环境中茁壮成长,以满足严格的最后期限, 并且对指导和帮助同事成长充满热情.

Show More

Matthieu Pons

Freelance Full-stack Developer

GermanyToptal Member Since September 29, 2022

Matthieu是一名全栈软件工程师,在前端和后端开发方面拥有超过15年的实践经验. 他对产品的专注使他与人合作经营了一家媒体机构,甚至创办了一家初创公司. 总是寻找具有挑战性的学习机会, Matthieu探索了机器学习领域,并编写了一个快速高效的推荐系统,至今仍在为最终用户服务.

Show More

Carlos Ramirez III

Freelance Full-stack Developer

United StatesToptal Member Since December 6, 2014

Carlos是一名专业的软件工程师和全栈web开发人员,专注于Ruby on Rails框架. 他在科技公司工作了十多年, 帮助建立以技术为基础的企业. 他拥有威廉姆斯学院计算机科学学士学位.

Show More

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

Join the Toptal community.

Learn more