30道经典面试题,靠它我在一线拿到了20k的前端开发工程师岗位

本文汇总了30道前端开发面试题,涵盖npm模块安装机制、HTTP请求、JavaScript特性、CSS优化策略、浏览器事件循环、跨域请求方式、Web安全、前端性能优化等多个方面。通过这些题目,帮助读者掌握前端开发的核心知识点,助你在面试中脱颖而出。
摘要由CSDN通过智能技术生成

在这里插入图片描述

题 1 :什么是防抖和节流?有什么区别?如何实现?

**防抖:**触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间

**思路:**每次触发事件时都取消之前的延时调用方法

img

**节流:**高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率

**思路:**每次触发事件时都判断当前是否有等待执行的延时函数

img

题 2 :get请求传参长度的误区、get和post请求在缓存方面的区别误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。

实际上 HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对 get 请求参数的限制是来源与浏览器或 web 服务器,浏览器或 web 服务器限制了 url 的长度。为了明确这个概念,我们必须再次强调下面几点:

  • HTTP 协议未规定 GET 和 POST 的长度限制
  • GET 的最大长度显示是因为浏览器和 web 服务器限制了 URI 的长度
  • 不同的浏览器和 WEB 服务器,限制的最大长度不一样
  • 要支持 IE,则最大长度为 2083byte,若只支持 Chrome,则最大长度 8182byte

补充补充一个 get 和 post 在缓存方面的区别:

  • get 请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。
  • post 不同,post 做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此 get 请求适合于请求缓存。

题 3:模块化发展历程

可从IIFE、AMD、CMD、CommonJS、UMD、webpack(require.ensure)、ES Module、

img

AMD:使用 requireJS 来编写模块化,特点:依赖必须提前声明好

img

CMD:使用 seaJS 来编写模块化,特点:支持动态引入依赖文件

img

CommonJS:nodejs 中自带的模块化。

img

UMD:兼容 AMD,CommonJS 模块化语法。webpack(require.ensure):webpack 2.x 版本中的代码分割。ES Modules:ES6 引入的模块化,支持 import 来引入另一个 js 。

img

题 4:npm模块安装机制,为什么输入 npm install 就可以自动安装对应的模块?

1. npm 模块安装机制

  • 发出npm install命令
  • 查询node_modules目录之中是否已经存在指定模块
  • 若存在,不再重新安装
  • 若不存在
  • npm 向 registry 查询模块压缩包的网址
  • 下载压缩包,存放在根目录下的.npm目录里
  • 解压压缩包到当前项目的node_modules目录

2. npm 实现原理输入 npm install 命令并敲下回车后,会经历如下几个阶段(以 npm 5.5.1 为例):

  • 执行工程自身 preinstall

当前 npm 工程如果定义了 preinstall 钩子此时会被执行。

  • 确定首层依赖模块

首先需要做的是确定工程中的首层依赖,也就是 dependencies 和 devDependencies 属性中直接指定的模块(假设此时没有添加 npm install 参数)。工程本身是整棵依赖树的根节点,每个首层依赖模块都是根节点下面的一棵子树,npm 会开启多进程从每个首层依赖模块开始逐步寻找更深层级的节点。

  • 获取模块获取模块是一个递归的过程,分为以下几步:

  • 获取模块信息。在下载一个模块之前,首先要确定其版本,这是因为 package.json 中往往是 semantic version(semver,语义化版本)。此时如果版本描述文件(npm-shrinkwrap.json 或 package-lock.json)中有该模块信息直接拿即可,如果没有则从仓库获取。如 packaeg.json 中某个包的版本是 ^1.1.0,npm 就会去仓库中获取符合 1.x.x 形式的最新版本。

  • 获取模块实体。上一步会获取到模块的压缩包地址(resolved 字段),npm 会用此地址检查本地缓存,缓存中有就直接拿,如果没有则从仓库下载。

  • 查找该模块依赖,如果有依赖则回到第1步,如果没有则停止。

  • 模块扁平化(dedupe)

上一步获取到的是一棵完整的依赖树,其中可能包含大量重复模块。比如 A 模块依赖于 loadsh,B 模块同样依赖于 lodash。在 npm3 以前会严格按照依赖树的结构进行安装,因此会造成模块冗余。从 npm3 开始默认加入了一个 dedupe的过程。它会遍历所有节点,逐个将模块放在根节点下面,也就是 node-modules 的第一层。当发现有重复模块时&#x

公司:前端开发岗位的公司比较多,大型互联网公司如阿里巴巴、腾讯、百度、京东等都需要前端开发工程师,此外还有一些创业公司和中小型企业也需要前端开发人员。 岗位前端开发工程师 主要工作内容: 1. 负责公司网站、移动端网站、Web应用等前端开发工作; 2. 与UI设计师和后端开发人员紧密配合,完成产品界面的开发、优化和维护; 3. 负责前端性能优化,提高用户体验和系统性能; 4. 参与技术选型和架构设计,保证前端技术的先进性和可持续性。 工作要求: 1. 熟练掌握HTML、CSS、JavaScript等前端技术; 2. 熟悉至少一种主流的JavaScript框架(如Vue.js、React、AngularJS等); 3. 具备良好的团队协作能力和沟通能力; 4. 对新技术有敏锐的嗅觉和学习能力。 典型工作环境:前端开发工程师通常在办公室内工作,需要使用电脑和相关软件进行开发工作。一些公司可能会采用敏捷开发的工作方式,需要与其他团队成员密切合作。 职业前景与发展:随着互联网和移动互联网的不断发展,前端开发工程师的职业前景非常广阔。可以在大型互联网公司、创业公司、中小型企业等多个方向发展,同时也可以转型到UI设计、产品经理等职位。 薪资范围:前端开发工程师的薪资范围会受到很多因素的影响,比如公司规模、地理位置、个人能力和经验等。一般而言,新入职的前端开发工程师薪资在5k-10k左右,经验丰富的高级前端开发工程师薪资在20k-30k左右。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值