面经 1
- 自我介绍
- 你觉得最能表现出你的水平的一个项目是哪个
- 你的 webpack-cli 项目主要涉及什么知识点(webpack 配置、yeoman、nodejs、sftp、git 操作.
- webpack 使用过哪些插件,目的是什么
- webpack 做了哪些性能优化工作,网站项目做了哪些性能优化
- 你们做的性能监控系统是怎么实现性能分析的、错误信息怎么捕获
- 你的网页是如何适配 web 端、SDK webview、移动端的
- 前端如何与 SDK 通讯比如我离开网页去 app store 下载某个软件,如何实现
- 你们是如何接入 h5 游戏的,iframe 里边的游戏怎么跟你们传递信息,你们如何与 iframe 里边的游戏传递信息
- 一个项目上线后,你怎么知道有没有发生异常?发生异常后怎么处理
- 雪碧图是怎么自动合成的,底层原理是什么
- cdn 原理是什么
- 除了 http2、cdn、资源压缩这些,还有没有其他的性能优化方案(答了 14、15、16 相关)
- http 缓存的了解,etag 怎么生成的
- 服务端渲染是怎么做的
- sdk 预加载前端资源是什么实现的,他们怎么知道需不需要拉取新文件
- 我这边问题大概这些,你有什么问题需要问我的吗
面经 2
- 并行和并发
- tcp 拥塞控制
- 6 个 tcp 请求限制是谁限制的,没有客户端的话限制吗
- class 和 function 有什么区别
- 箭头函数 和普通函数的区别
- http2.0 协议
- HTTPS 的原理,以及具体实现的过程
- 是否了解 HTTP2,跟旧版有什么区别?
- 是否了解前端安全性的防范?
- 怎么去监听浏览器的错误捕获?
- 是否了解 Promise 的用法?
- Link 标签引用 CSS,然后用 Script 标签引用 JS,再用 ING 引用的图片,怎么去监听这些脚本的加载情况?
- 用原生怎么去实现 AJAS?
- JS 怎么去实现大数据相加?
- 协商缓存和强缓存的应用场景和具体的实现方式是怎样的?
面经 3
- 介绍自己的工作经历和项目经历,项目相关工作和技术问题,业务内容等
- 闭包以及实际行用
- 原型原型链
- 继承的方式以及具体实现
- New 一个对象的时候做了什么,绑定 this 到新对象的时候是怎么绑定的
- BFC
- 重绘回流,具体指什么,哪些会导致回流(重排),怎么优化
- 页面刷新到显示 经历了什么,越详细越好
- http 缓存
- 执行上下文
- 作用域,作用域链
- 垃圾回收
- 原生的 ajax ,这个会问到具体点,传参,请求头的设置==
- 节流和防抖的具体实现,浏览器的缓存
- 跨域
- 平时会做哪些性能优化
- 浏览器缓存
- 做项目当中怎么选择图片
- 事件代理,这个要给出具体实现方案
- target 和 currenttarget 的区别
- setTimeOut3 秒后一定会执行吗,考的 js 执行机制
- onload 和 DOMContentLoaded 区别
- tcp 和 udp
- 页面白屏时间计算
- Csrf 的攻击防范,以及具体的实施过程,这个问的很细,问道了具体怎么攻击
- 浏览器的错误捕获,如果让你设计一个捕获异常的 sdk 你怎么做
- 一个台阶 一次可能走 1 阶或 2 阶 有多少种走法
- 这个是基础实现是递归,然后优化部分是重点
面经 4
- 计算机基础
- 计算机有哪些数据结构
- 哈希表有什么特点
- 堆是什么介绍下有什么特点
- 栈这种结构的特点
- 链表特点
- 数组和链表插入元素的时间复杂度
- 数组和链表查找一个元素有什么不同
- 浏览器+网络
- JS 中的基础数据类型:基础类型与引用类型的存放位置是哪里?
- 性能优化:有特色的深入的东西;网上那些面试官说,这些都是些普遍的优化,有没有更加深入一点的
- 浏览器缓存:
- (1) 为啥有了 last-modified 还要有 etag
- (2) 为啥读取的时候先从 disk cache 再从 memory cache
- (3) Exqires 时间是什么格式
- (4) Cache-control 的 max-age 是什么格式?单位是啥
- csrf 攻击:如何被攻击的为什么会被攻击?如何防范?
- xSs 攻击:我说需要将内容转义,他问怎么转义,转义成什么.
- 实际项目中有没有做过安全防护
- tcp 的四次挥手
- tcp 与 udp 的区别
面经 5
说出具体的 js 的基础类型, 复杂类型
说一说常见的数据结构以及他们的特性
特定问了数据结构:链表 和 堆
说说浏览器缓存机制:强缓存和协商缓存的含义
强缓存是利用了 Http 头部的哪几个字段?
Cache-Control: max-age 的字段的单位是什么?Expires 的格式是什么?
强缓存和协商缓存命中后分别返回什么样的状态码?
Etag 是怎么生成的?默认包含哪些?
有了 last-Modified,为什么要需要 Etag?
jsp 的生命周期?js 变量的生命周期?(没听清楚)
用原生 js 怎么去实现 AJAX
什么是 csrf 攻击?具体的攻击方式是怎么样的?
csrf 的防范措施以及 csrf token 在客户端和服务器的交互方式 以及 客户端怎么存储 token
XSS 攻击是什么?如何防范
介绍项目;介绍项目中困难的地方;追问一些问题;然后聊到性能问题,介绍项目中的性能前后对比;
技术选择为什么要用 react;对比下 react 和 vue;
redux 和 vuex 对比;说下它们的设计思想;
性能优化的方法;说下 visual-list 的思想;怎么确保快速下滑的白屏问题;如果一下直接到底部呢;
nodejs 知道吗(不会)
说下你们用的路由;改变路由时候,react-router 是怎么切换页面的;
es6 用过哪些东西;箭头函数和普通函数的区别;除了这些还有吗? 箭头函数和 Generator(没答上最后一点)
es6 和 es5 继承的区别;defineProperty 和 proxy 的区别;
最近学习哪些东西、你是怎么学习的
面经 6
- 讲一下 eval 函数,这个函数的缺点及他的作用域
- jsonp 和 cors 的原理,jsonp 的缺点
- 跨域预检请求原理
- 作用域(全局,局部,块级)
- 闭包函数
- js 有哪几种数据类型,分别是传值还是引用
- 项目优化,性能测试,错误日志上报(页面性能分析,重要的时间指标)
- window. onload 和 DOMContentLoaded 区别 9. 同步和异步区别
- xss csrf
- prosess 判断是否是 node 环境还是浏览器环境
- nodejs 压力测试,服务器容灾,ssr 直出降级
- 事件冒泡
- 缓存,indexdb,workerservice
- 判断一个变量属于哪种类型 instanceof
- IIFE 自执行函数
面经 7
- 侧重 javascript、css 基础,例如:js 有哪几种基本类型?css 实现垂直居中有哪些方法?
- React 框架的基础知识,例如:描述 React 生命周期?
- 父子组件兄弟组件之间如何进行数据通信?
- props 和 state 的区别是什么?如何管理组件状态?Redux 状态管理机制是怎样的?
- 前端工程化简单问了下,例如:webpack 打包。
着重问了下所做项目的架构设计方案
- 前后端整体架构,我说了下兔展的前后端五层整体架构,我负责前端的浏览器层和 Node.js Web 层。
- 重点问了前端的浏览器层架构,我花很多功夫描述浏览器端的 SPA 场景架构、富交互 Web 应用的架构,包括技术选型、框架、core 封装、基础模块、UI 组件库、状态管理、模块化、组件化、工程化等等,涵盖了诸多面向现代前端开发的必备知识。
- 还侧重问了 Node.js Web 层架构,主要是 Node.js 在项目中的角色,例如:作为应用入口服务器,可以自由控制前端页面和路由,包括 SSR;还有和后端 API 网关的通信,包括接口转发和接口聚合;还有用户会话管理、Redis 缓存技术、mysql 数据库技术等等。
侧重于问题的解决思路和方案、以及个人规划、技术方向相关。
- 假设 Node.js 服务器出了问题,如何排查和解决?
- 你的未来规划是怎样的?管理还是技术?技术方向的话,想往什么方向突破? 其他的比较模糊记不太清了,问题很开放,有点泛泛而谈的意思。
面经 8
- 项目经历相关,有什么重点难点项目如何解决
- 性能优化相关 如何计算 LCP FID CLS 的时间
- 做过什么优化,达到什么效果
- 事件循环机制,node 循环机制和浏览器有什么区别,为什么要有微任务
- V8 垃圾回收机制
- http1.0, 1.1, 2.0 要有什么区别,多路复用的实现原理
- VUE P 更新,nextTick 原理,computed 原理,componentAPI 相比 optionsAPI 优势在哪里,具体例子
- VUE react 区别,hook 开发是什么
- 组合总和算法,手写 schedule,时间复杂度怎么计算
面经 9
- Node.js 为什么会有内存限制
- Node.js 服务线上部署
- Node.js 读取大体积文件方式
- Node.js 未捕获错误怎么处理
- 分片上传
- dll plugin 能否做到自动重建,如果 dll 的 entry 里面声明的是某个文件,应该怎么做
- Node.js 多进程通信、主进程怎么调度子进程 Round-Robin
- 性能监控怎么做,重要指标
- 前端 JS 主线程与 WebWorker 怎样通信时怎样减小开销
- XSS、CSRF 怎么防范
面经 10
- 项目经验
- webpack
- toB 优化(我主要回答了网络问题,缓存和分包)
- 图片懒加载实现方案
- http 缓存(强缓存,协商缓存)
- 闭包
- bind,call,apply
- dom 碎片
- onLoad 和 DOMContentLoaded 区别
- 首屏优化
- 跨域
- 事件委托
- 安全问题:xss,csrf
- new 一个对象的时候做了什么,this 怎么绑定的和原型链
- 作用域(深入)
- 浏览器垃圾回收机制
面经 11
- 一上来就问网站的优化
- 跨域的解决方案
- 浏览器的事件循环机制
- 怎么实现继承
- 创建 ajax 的过程
- 浏览器事件捕获跟冒泡
- http1.0 和 http2.0 的区别
- 浏览器缓存
- 数据的存储堆和栈
- Http 的状态码
- Web 安全意外问的很深
面经 12
- react 用了几年?
- 小程序有用过吗?
- 询问是做后台管理端的还是更多面向用户的前端
- react 的生命周期介绍
- 新版生命周期函数相对于旧版改动的好处和坏处?
- 对 react 中 dom 的了解,它主要的作用是什么?
- 解释 diff 算法用来干嘛的?具体的算法是怎么样的?
- 聊埋点方案(没有做过,答的不好) 方案 1:埋点放在 dom 结构上和业务解耦会好点,但封装到 dom 中会有什么坏处?;
方案 2:考虑到性能会将埋点代码写道应用逻辑中去。 - 询问家庭状态(单身/结婚/小孩),现在家庭住址 10.总结下自己的优势。
面经 13
- 项目介绍
- 原型链,继承
- 跨域的具体实现,有几种方式
- 反向代理
- 闭包的实现和应用场景
- JS 的垃圾回收机制
- 性能优化
- (1)路由软加载
- (2)首屏优化,首屏渲染时间
- (3)事件委托
- (4)虚拟列表具体实现
- (5)网络协议方向的优化->Http2.0 相比 http1.1, 新版本 tcp 连接可以并行处理,老版本是串行处理
面经 14
列举 ES6 的特性,并讲解 let/const 和 var 的差别,set/map 和 array 的差别
安全问题:讲解 XSS/CSRF 的攻击原理和防御方法
列举跨域方法并解释(jsonp/cors/反向代理等)
列举性能优化的方法
解释 Event loop
vue 简单问了下生命周期和组件之间的通信
打包工具
浏览器事件触发原理,过程;
浏览器垃圾回收机制;
h5 性能优化做了哪些;
webpack 打包优化;
网络安全,什么是 CSRF 攻击?举个例子?如何预防?scrf_token 怎么生成。
事件代理
作用域
闭包
解决跨域的方法
script 标签上 async 与 deffer 属性的区别
手动实现 5 题中的 deffer 效果
XSS 攻击?如何预防?字符转译后输出的结果?
项目优化做了哪些?
性能监控怎么做?哪些指标?
1 如何监控第三方脚本的报错信息?
面经 15
- h5 项目优化做了哪些?
- 在原公司的主要工作;
- 如何与产品或运营团队协商需求实现方案
- 对 rn 的了解
- 浏览器缓存策略,项目中如何运用
- 1、js 数据类型有哪些?如何判断?
- 2、闭包及作用域,闭包的运用
- js 内存溢出,为什么会导致,如何检查处理
- 浏览器地址栏输入内容到页面展现的整个过程(这个可以答得很细,答的好是个加分项);
- 性能优化做了哪些?(我答了 webpack 打包、缓存、cdn、懒加载、页面事件代理、观察者模式肩痛滚动事件)
- 线上问题如何预防(其实就是监控工具或者脚本)
- node 会哪些/
- 项目优化做了哪些
- rn 会哪些,跨端开发经验,rn 是否满足了我们的跨端需求
面经 16
- vue react 有什么不同
- state = {a: 1} setState({ a : 2}) 会重新渲染么
- redux 是如何监听监听到新增的对象的
- webpack 性能优化 为什么要拆 chunk
- react 解决性能问题 有使用过 performance 么
- 浏览器缓存,如何利用
- router 如何实现
- primise 求执行顺序
- 实现一个带并发限制的调度器
- vue 双向绑定的实现原理、
- 怎么对数组进行监听、
- nexttick 的实现、
- 组件之间的监听、
- 手写一个 eventbus 的实现、
- 手写 2 个有序数组的合并、
- import 和 require 的区别、
- 对 AMD 和 CMD 和 UMD 的了解、
- js 基本数据类型、
- undefined 和 null 的区别、
- 为什么设置了 height 和 line-height 一样能居中、line-height=1 是什么意思、平时怎么设置元素的垂直居中、
- vertical-align 在什么情况下生效
- webpack 的 loader 和 plugin 的差别、有没有实现过这些
- css position 5 种定位 absolute 依据什么定位
- v-show 和 v-if 区别
- 隐藏一个元素的多种办法
- promise 数组依次调用
- await async 使用
- 判断两个二叉树是否相等
- vnode 有什么好处
- nexttick 的原理,vue 更新 dom 的时机,宏任务与微任务
- 移动端适配,自适应问题和兼容性问题
- history hash 模式
面经 17
- 函数柯里化
- 数组的最大子序列和
- 实现带并发的异步任务调度器-promise
- 实现一个 event emitter
富途 2023 面经
const func1 = async () => {
console.log(1);
await func2();
console.log(2);
};
const func2 = async () => {
console.log(3);
};
func1();
setTimeout(() => console.log(4), 0);
new Promise((resolve) => {
resolve();
console.log(5);
}).then(() => {
console.log(6);
Promise.resolve().then(() => {
console.log(7);
});
});
console.log(8);
sum(1, 2, 3).sumOf(); // 6
sum(1)(2, 4)(2).sumOf(); //9
// 题一:
function Base() {}
Base.prototype.a = 1;
Base.prototype.add = function (num) {
this.a += num;
};
function Extended() {}
Extended.prototype = new Base();
const ext1 = new Extended();
const ext2 = new Extended();
console.log(ext1.a);
console.log("a" in ext1);
console.log(Object.keys(ext1).includes("a"));
ext1.a = 2;
console.log(ext1.a);
console.log(ext2.a);
ext2.add(2);
console.log(ext1.a);
console.log(ext2.a);
// 写出输出结果
- 题二:
// - 有一系列并发请求,写一个队列,让它们串行执行 例如:
foo() foo()
foo()
// 三个都是执行一秒,一秒后输出 3 个结果
const foow = wrapper(foo)
foow()
foow()
foow() // 1、2、3 秒各输出一个结果
leetcode 已处理
- 每次上 1 个台阶或 2 个台阶,求上 n 楼的方案问题
leetcode 未处理
- N 个数,找第 K 大数
- 找出两个子 view 最近的共同父 view(算法)
- 红黑树的特点是什么,什么情况下使用 hashmap,什么情况下使用红黑树
- 一个 Int 型是有 4 个字节,a = 1, b = 2,怎样不使用第三个变量,使得 a,b 变量交换值。
- 写一个迭代器
- 100 万个 16 位整数,内存不限,找出 Top K。
- 例如:输入:[2, 1, 4, 5, 8, 3, 7, 10, 2, 5], k = 2 输出:[1, 4, 5, 8], [3, 7, 10]
- 给定一个序列,求最长递增子序列有几个(动态规划)
- 算法写个 3sum(leetcode)
- 排序算法
- 算法整数反转
- N 个数,找第 K 大数,经典题,leetcode 原题
- 求 double 类型的 n 次方,double pow(double base , int n) 注意边界问题
- 只描述思路:10T 大小的文件,每行为一个单词,找出词频最高的前 k 个单词
- 实现一个单例类
- 手写一个智能指针实现,线程安全的智能指针
- 找出一个字符串 s 包含字符串 t 的最小重复字符串
- 怎么从一对数里面最快找到最大值和最小值
- 给出一个字符串 N “ABBCDB”(大小英文字母组成) ,按照一下任意一个规则,一:从头部删除一个字母,并追加到新字符串尾;二:从尾删除一个字母,并追加到新字符串尾;期望最后得到一个字典排序最小的字符串
数组
- 一个包含 0-9 的数组,只有一个数字是两次出现,如何在 O(n)时间,O(1)空间下找出这个数字
- 将一个数组的所有元素向右移动若干单位,并把数组右侧溢出的元素填补在数组左侧的空缺中,这种经操作称为数组的循环平移,给你一个不小于 3 个元素的数组 a,已知 a 是从一个有序且不包含重复元素的数组平移 k(k 大于等于 0 且小于数组长度)个单位而来;请写一个函数,输入 int 类型数组 a,返回 k 的值。例如,对于数组 a = {5, 1, 2, 3, 4},它由有序数组 {1, 2, 3, 4, 5} 循环平移 1 个单位而来,因此 k = 1。
- 给一个数组,求如何划分数组,使得 abs(sum【A】 - sum【B】)最小
- 给个有序数组,将数组非重复部分排在前面,不占用额外空间,输出数组
- 找出一个数组的长度 Top2 的连续升序子数组,并按长度降序输出
- 一个乱序的整型数组,输出数组中没出现的最小的整数
- 一个正整数数组 找出连续和为 K 的整数倍的最短序列
- 给一个数组,用二分法查找某个元素是否在里面,在就返回 0,不在就返回-1
- 一个 n 的数组,有一些随机数据,怎么抽出 m 长度的数据,保证数组的数据唯一,方法可能有很多,面试官会探讨最优方法
- 给一个任意整数组,剔除一个元素后,得出最大乘积例如:[4]int{2,3,4,-4} 最大乘积 24
- 给定一个整数数组,使得去除一个数后,剩余数相乘最大
- 有一个任意的整形数组,[]int,从数组取出任意一个元素是的它是符合下面条件的,一:它的左边都比它小,二它的右边都比它大。 10000 个整数的升序数组,无重复数,找出最接近目标数的下标
链表
- 旋转链表: 给定一个单链表,旋转链表,将链表每个节点向后移动 k 个位置,如果是尾节点,则把它移动到最前面;其中 k 是正数。要求:时间复杂度 O(n),空间复杂度 O(1)
- 两条链表是否含有交叉
- 实现一个单链表反转
- 实现单链表的逆序,普通的修改链接指针的逆序方式之外是否还有其他方式实现逆序。
二叉树
- 二叉排序树实现插入算法
- 二叉树最近公共祖先节点
- 给定一个二叉树和一个数字 n,判断二叉树中是否有一个路径上的数字之和等于给定的数字 n
- 二叉树翻转 (递归和迭代)
- 判断两个二叉树是否相等
- 写一个二叉树的层序遍历
- 一颗二叉树从右边看过去,把看到的节点打印出来
- 求二叉树的直径,即一个叶子节点到另一个叶子节点的最大长度
- 倒置二叉树
- 二叉树遍历