HTML +CSS
- 说下你对WEB标准以及W3C的理解与认识?
- DOCTYPE 作用?严格模式与混杂模式如何区分?它们有何意义?
- 什么是 DTD ?
- 知道XHTML吗?说一下XHTML的局限性?
- xhtml 和 html 的区别?
- JSON 和 XML 的区别?
- 前端页面由哪三层构成,分别是什么?作用是什么?
- 标签上 title 与 alt 属性的区别是什么?
- 对HTML语义化标签的理解?
- 说一下html头部属性 mate?
- 常见 MIME 类型列表
- src 和 href 的区别?
- 说一下a标签中rel的nofollow、noopener 和 noreferrer属性是做什么用的?
- 设计中使用了非标准的字体,该如何处理?
- 什么是BFC?如何触发?有何特点?如何解决margin“塌陷”?
- HTML和CSS有什么规范需要遵循?从命名、结构上谈谈
- CSS 什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?
- CSS如何出来溢出?说一下overflow 不同值的区别。
- css calc属性作用是什么?主要用于解决什么问题?
- 描述一下渐进增强(progressive enhancement)和优雅降级(graceful degradation)
- iframe 有哪些优点?哪些缺点?用它来解决过什么问题?
- html页面引入另一个html页面?
- 如何 Chrome 浏览器支持小于12px的文字?
- 如何画一条0.5px的线
- 用CSS画一个三角形,有哪些办法?
- 简述一下css盒子模型
- HTML5有哪些特性?
- CSS3的特性有哪些?
- 如何实现水平居中?
- 如何实现垂直居中?
- 如何实现在某个容器中居中的?
- 有一个固定长宽div,怎么实现在屏幕上垂直水平居中
- 如何实现双圣杯布局?
- 三栏布局有什么实现方式?
- 自适应式布局实现方案? 响应式网站开发你知道哪些方案?
- 什么是弹性盒子flex布局?
- multi-column多列布局实现瀑布流
- 怎么使用使用 display: box 盒子属性布局?
- 怎么使用使用 display:flex 容器项目布局?
- 怎么使用使用 display:grid 网格布局(Grid) ?
- CSS中选择器的优先级?
- CSS权重如何计算?
- CSS自动换行、强制不换行、强制断行、超出显示省略
- HTML5 input元素type 属性有哪些?
- 隐藏一个元素有哪些方法?元素隐藏的多种方法
- display: none 与 visibility:hidden 与opacity:0之间的区别?
- inline-block、inline和block的区别?
- 行内元素怎么变块级元素、行内块元素?
- line-height 和 height的区别?
- 设置一个元素的背景颜色,背景颜色会填充哪些区域?
- 为什么img是inline还可以设置宽高?
- 如何让文档脱离文档流?
- position的值有哪些,分别有什么特点?
- 相对布局和绝对布局,position:relative和obsolute。
- box-sizing的作用,如何使用?
- 什么是浮动,浮动会引起什么问题,有何解决方案,如何实现清除浮动?
- 如何改变一个DOM元素的字体颜色?
- CSS 选择符有哪些?
- CSS中哪些属性可继承,哪些不可以?
- ::before 和 ::after 中双冒号和单冒号的区别?
- CSS3新增伪类,以及伪元素?
- nth-child 和 nth-of-type的区别?
- css 的 tabindex 属性是用来做什么的?
- link 标签和import标签的区别?
- 说下css预编译器?
- less 和 scss 有什么区别?
- 说一下块元素、行元素、置换元素
- 多行元素的文本省略号如何实现?
- 静态、动态、伪静态的URL结构到底哪种更利于SEO
- 网站伪静态和静态的区别?
- 做过网站支持国际化多语言吗?你是怎么去实现的?
- JavaScript 动画和CSS3动画有什么区别?
- css 动画如何实现
- transition 和 animation 的区别?
- 简述下SVG样式?怎么使用SVG?
- 讲一下 canvas 的使用吧?
- canvas和SVG 的区别?
- 怎么实现换肤?
- 什么是CSS工程化?
- 为什么要做样式初始化?
- CSS有哪些优化手段?
- 怎么调用QQ聊天、打电话、发短信?
- 不希望产生 favicon.ico 的请求,该怎么做?
JavaScript
- 说说你所知道的JS语言特性?
- 请说几条书写 JavaScript语句的基本规范
- javascript的数据类型(datatypes)有哪些?
- javascript 有哪些引用类型?
- 如何判断javascript的数据类型?
- 强制类型转换、隐式类型转换分别是什么,列举场景说明。
- JS 字符串转数字的方法?JS 数字转字符串的方法?
- 如何在 JavaScript中将base字符串转换为 integer? 答案:parseInt
- 简述Number() 的存储空间是多大?如果后台发送了一个超过最大自己的数字怎么办 ?
- typeof 和 instanceof 区别?
- 说一下instanceof操作符的局限性?
- 说下 instanceof 和 in 的区别?
- instance 的原理,能手写一个吗?
- 怎么判断两个对象相等?如何判断空对象?
- 如何判断对象为空?答案:Reflect.ownKeys
- 0.1+0.2为什么不等于0.3?(解释原理)
- 说下运算符的分类有哪些?
- 什么是条件运算符?
- Javascript 什么是三元表达式?“三元”表示什么意思?
- 你能链接条件运算符吗?
- JavaScript中常用的逻辑运算符有哪些?
- JavaScript中的循环结构都有哪些?
- 那为什么typeof判断null为object?
- 对象的特性有哪些?简述面向对象编程的三大特点 ?
- 哪些方法可以访问对象属性?怎么删除对象的属性?
- JavaScript如何获取对象的键列表?
- javascript 创建对象的几种方式?
- 列举宿主对象、内置对象、原生对象并说明其定义。
- 造成 NAN 和 Infinity 的原因?
- Object.is 和 === 的区别?Object.is实现的原理是什么?说一下isNaN?
- === 和 == 的区别?
- null == undefined 输出什么?null === undefined呢?
- 判断 []==0? [] == [] ?
- javascript中奇葩的类型判断与转换有哪些?
- {} 和 [] 的valueOf和toString的结果是什么?
- 判断是否是整数?
- null, undefined 的区别
- 什么情况下会返回 undefined值?
- 怎么获取当前日期(年-月-日 时:分:秒)? 知道 moment 这个包是用来干什么的吗?
- 如何区分数组和对象?
- 数组常用方法有哪些?有哪些原生方法?
- 多维数组如何降维?数组扁平化 flat
- 如何实现数组的随机排序?
- 数组去重有哪些方法?
- 什么是稀疏数组?
- 如何判断一个数组?
- 什么是类数组(伪数组),如何将其转化为真实的数组?
- 创建函数的几种方式?
- js 函数中 arguments 是什么?接收的是实参还是形参?
- 变量提升(hoisting) 是什么?与函数提升的区别?
- JavaScript如何为变量分配默认值?
- 简述 JavaScript 中的高阶函数是什么?
- 解释什么是JavaScript立即执行函数(IIFE)?
- 封装 JavaScript源文件内容到一个函数块有什么意义?
- 在 JavaScript中,为什么说函数是第一公民、第一类对象?
- 解释 javascript: void (0): 的作用是什么?
- noscript 标签有什么作用?
- 数组遍历的方法有哪些,分别有什么特点,性能如何?
- 如何给一个按钮绑定两个 onclick 事件?
- 什么是作用域链?如何延长?
- document.write和 innerHTML的区别?
- 简述为什么不建议在 JavaScript中使用 innerHTML?
- innerText 和 innerHTML 的区别?
- dom 中 nodetype 的类型?
- dom结构操作怎样添加、移除、移动、复制、创建和查找节点?
- DOM节点的Attribute和Property有何区别?
- 讲一下什么是事件捕获,它是如何工作的?
- 讲一下什么是事件冒泡,它是如何工作的?
- 如何阻止事件冒泡?
如何让事件先冒泡后捕获?(Chrome 89.0.4363.0更新后 这题过时了)- 对事件委托的理解
- dom的事件模型,三种事件模型是什么?
- 说说事件流顺序是?
- 事件三要素是什么?
- mouseover 和mouseenter的区别?
- 获取元素位置?
- JS的各种位置,比如clientHeight,scrollHeight,offsetHeight,以及clientTop,scrollTop,offsetTop的区别?
- 谈谈 getBoundingClientRect 是干什么用的?
- 谈谈 IntersectionObserver 是干什么用的?
- 谈谈 requestIdleCallback 是干什么用的?
- 谈谈 requestAnimationFrame 的作用?
- 如何绑定事件,如何解除事件?
- 解释 JavaScript中定时器的工作,并说明使用定时器的缺点 ?
- setTimeout 和setInterval的区别及用法是什么?
- 用setTimeout 来实现 setlnterval
- 什么是内存泄漏?哪些情况会导致内存泄漏?
- 继承有哪些方法?继承的优缺点?
- 说一下重写和重栽?它们的区别?
- 说一下类的创建和继承,列举一下你所知道的继承方式
- ES6的继承和ES5的继承有什么区别?
- class、extends 是什么,有什么作用?
- class 和 ES5 构造函数的不同点?
- 如何实现sleep的效果s5或者es6
- ES5和ES6的区别有哪些?ES6新增了什么?
- 如果没有第三个变量,如何交换两个变量?答案: [a, b] = [b, a]
- 知道哪些ES6,ES7的语法?
- 解释JavaScript 中的展开运算符是什么?
- 知道 WeakMap 吗?它的作用和应用场景?
- 知道 WeakSet 吗?它的作用和应用场景?
- object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别?
- var、 let、 const之间的区别?
- 什么是Javascript 暂时性死区、时间死区?
- let和const的优点?
- 什么是JS闭包?
- Javascript中callee和caller作用?
- 什么是尾调用?
- 如何解决异步回调地狱?
- 讲一下你对JS异步的理解?答案:callback -> Promise -> async/await
- 谈谈为什么要把API给 promisify 化?
- Promise 构造函数是同步执行还是异步执行,那么 then 方法呢 ?
- 介绍一下promise,及其底层如何实现
- 说一下 Promise.all(),知道其中的原理吗?能手写一个?
- 说一下 Promise.race(),知道其中的原理吗?能手写一个?
- 说一下 Promise.allSettled()?
- Promise 的 finally 怎么实现的?
- promise+Generator+Async的使用
- promise 和await/async的关系? async/await 原理 & 实现?
- async、await 怎么串行处理?怎么并行处理?怎么错误处理?
- 什么是迭代器?什么是可迭代对象?什么是生成器?yeild是用来做什么的?
- new操作符做了哪些事情?
- new 一个构造函数,如果函数返回 return {} 、 return null , return 1 , return true 会发生什么情况?
- 什么是构造函数?它与普通函数有什么区别?
- 改变函数内部 this 指针的指向函数(bind,apply,call的区别),内在分别是如何实现的?
- 如果一个构造函数,bind了一个对象,用这个构造函数创建出的实例会继承这个对象的属性吗?为什么?
- 谈谈执行上下文(EC)的理解?
- 简述下JavaScript中this是如何工作的?
- 说下使用箭头函数的注意事项?
- 箭头函数的格式有哪些?
- 箭头函数中this指向
- 箭头函数和普通函数的区别有哪些?
- 谈一下 "use strict" 严格模式的限制
- 在严格模式"use strict"下,函数中的this是?
- 什么是eval()函数?eval的作用是什么?
- 如何安全的获取 undefined 的值?答案:void 0 或 void (0)
- 平时是怎么调试JS的
- 实现一个once函数,传入函数参数只执行一次
- 如何实现一个私有变量,用getXXX 可以访问,不能直接访问
- 说出 JavaScript无阻塞加载的方式有哪些?
- 异步加载JS的方法
- 延迟加载的方式有哪些?
- 简述script标签中 defer和 async属性的区别 ?
- 如何在页面加载后执行 JavaScript 代码?答案:onload
- 说一下图片的 懒加载 和 预加载
- 怎么控制一次加载一张图片,加载完后再加载下一张
- 如何去除字符串首尾空格
- 简单介绍一下symbol
- Symbol有哪些使用场景?
- JS原型链,原型链的顶端是什么?Object 的原型是什么?Object的原型的原型是什么?
- Function._proto_是什么? Object.getPrototypeOf(Function.proto)是什么?
- JavaScript中对象有一个函数,执行直接对象查找时,它始终不会查找原型,这个函数是什么?
- 对象 hasOwnProperty() 和 in 的区别?
- Object对象中原型prototype上的方法?、freeze、definedProperty、seal
- JavaScript对象的key可以为数字吗?
- 怎么获得对象上的属性?如何遍历对象的属性?
- JS中string的 startwith 和 indexof 两种方法的区别
- indexOf ()、includes()有何异同?
- async和await具体该怎么用?
- JS加载过程阻塞,解决方法。
- Localstorage、sessionStorage、 cookie的区别
- 怎么删除cookie?
- cookie 怎么读取/写入
- 了解IndexedDB吗?
- 你有几种获取URL参数的方法?知不知道最新的 url 参数获取的 api
- 写一个通用的方法来获取地址栏的某个参数对应的值,不能使用正则表达式。
- 原生时间戳转换规范格式 ,转化成 “YYYY-MM-DD hh:mm:ss” 格式
- 什么是模板文字?
- 什么是正则表达式?
- 说说JavaScript中转义字符是用来做什么的?
- 说一下字符编码有哪些?
- 简述Javascript gb2312转utf8 ?
- 说一下uft-8是怎么实现可以变可变长度的字符存储的?
- 字符中如果有表情emoji,或者有一些复杂文字繁体字,截取后成乱码了怎么处理?
- 谈谈JS的运行机制
- 什么是堆栈?
- 解释一下JS的事件循环
- 讲一下你对EventLoop的理解吧
- 垃圾回收机制有哪些?具体怎么如何执行?讲一下浏览器的垃圾回收机制
- 介绍一下V8隐藏类
- 元素拖动如何实现,原理是怎样?
- 解释一下HTML5 拖拽 Drag API
- 怎么实现本地文件拖拽上传和复制上传?
- 条形码和二维码的解析和生成有没有做过?如果识别率低下,我们可以采取哪些办法?
- 轮播的实现原理?假如一个页面上有两个轮播,你会怎么实现?
- 知道js的二进制吗?Blob、ArrayBuffer、Buffer了解多少?
- 如果网页文字不想被复制,可以使用哪些方法? 答案:css禁止选择、监听 copy 复制事件
- 怎么让网站全部元素变灰色,怎么让一切元素可以编辑?
- JavaSctipt怎么让网页上的元素可以编辑?
- JavaScript中如何处理异常?说下 try、catch、finally
- JavaScript中不同类型的错误有几种?
- JavaScript中读取文件的方法是什么?答案:new FileRender()
- 知道 Blob 和 ArrayBuffer 吗?
- JavaScript如何检测客户端机器上的操作系统? 答案:navigator
- 如何强制页面加载 JavaScript中的其他页面?答案:location
- 讲一下你所知道的设计模式有哪些?答案:工厂模式、 单例模式、 建造者模式、 适配器模式、 装饰器模式、 解释器模式、 代理模式、 桥接模式、 组合模式、 策略模式 Java的23中设计模式
- 适配器模式(Adapter)
- 装饰模式(Decorator)
- 代理模式(Proxy)
- 外观模式(Facade)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 享元模式(Flyweight)
- 策略模式(strategy)
- 模板方法模式(Template Method)
- 观察者模式(Observer)
- 迭代子模式(Iterator)
- 责任链模式(Chain of Responsibility)
- 命令模式(Command)
- 备忘录模式(Memento)
- 状态模式(State)
- 访问者模式(Visitor)
- 中介者模式(Mediator)
- 解释器模式(Interpreter)
JavaScript 代码编程实战
setTimeout(function () {
console.log(this)
}, 1000);
/* 浏览器中
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
*/
/* node中
Timeout {
_idleTimeout: 1000,
_idlePrev: null,
_idleNext: null,
_idleStart: 68,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
*/
var counter = {
count: 0,
addCount() {
// setTimeout()的匿名函数中的this,指向的是宿主对象(浏览器:window|node:Timeout)
setInterval(function () {
console.log(this);
console.log(++this.count);
}, 1000)
}
}
counter.addCount()
/*
Timeout {
_idleTimeout: 1000,
_idlePrev: null,
_idleNext: null,
_idleStart: 1026,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: 1000,
_destroyed: false,
count: NaN,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
NaN
...
*/
/* 改善 */
var counter = {
count: 0,
addCount() {
setInterval(function () {
console.log(++this.count);
}.bind(this), 1000)
let self = this
setInterval(function () {
console.log(++self.count);
}, 1000)
setInterval(() => {
console.log(++this.count);
}, 1000)
}
}
var arr = [1, 2, 3, 4]
var i = 100;
for (var i = 0; i < arr.length; i++) {
if (i == 0) { sum = 0 }
sum += arr[i]
}
console.log(sum,i);
/*
// 因为JavaScript没有块级作用域,因此能在for语句外部访问变量 i 和 sum
console.log(sum); // 10
console.log(i); // 4
*/
const a = 1
const b = 2
const c = 4
console.log(a | b | c);
// 对传入的 subject 对象内部存储的所有内容执行回调
function execRecursively(subject, fn) {
fn(subject);
if (typeof subject === "object") {
for (const key in subject) {
execRecursively(subject[key], fn);
}
}
}
const foo = { foo: "Foo", bar: { bar: "Bar", }, };
foo.bar.baz = foo; // 循环引用!
execRecursively(foo, (obj) => console.log(obj));
let obj1 = { name: "ken" }
let obj2 = { name: "一缕清风" }
obj1.obj2 = obj2
obj2.obj1 = obj1
execRecursively(obj1, (obj) => console.log(obj));
/*
const constructorName = getCtxStyle(value, constructor, tag).slice(0, -1);
RangeError: Maximum call stack size exceeded
*/
console.log(1);
Promise.resolve().then(() => {
console.log(2);
setTimeout(() => {
console.log(3);
}, 0);
});
setTimeout(() => {
console.log(4);
new Promise((resolve) => {
console.log(5)
resolve();
}).then(() => { console.log(6); });
}, 0);
console.log(7);
/*
1
7
2
4
5
6
3
*/
if (a == 1 && a == 2 && a == 3) {
console.log("Hello word");
}
// 答案
var a = {
value: 1,
valueOf: function () {
return this.value++;
},
[Symbol.toPrimitive]() {
return this.value++;
}
}
add(1,2,3)()=>输出6
add(1)(2)(3)()=>输出6
add(1,2)(3)(4,5,6)(7,8)()=>输出 36
add(1,2)(3,4,5,6)()=>输出 21
function add() {}
- ["1,", 2, 3].map(parseInt) 的执行结果是多少?
console.log(["1,", 2, 0, 3].map(parseInt)); // [ 1, NaN, 0, NaN ]
/*
[ 1, NaN, 0, NaN ]
console.log(parseInt("1", 0)); // 1
console.log(parseInt(2, 1)); // NaN
console.log(parseInt(0, 2)); // 0
console.log(parseInt("3", 2)); // NaN
因为 parseInt需要两个参数(val, radix),
其中 radix表示解析时用的基数(进制);
map传递了3个参数(item, index,aray),对应的radix不合法导致解析失败。
*/
- 用户需要上传一个文件,你需要根据文件的后缀来做限制一些操作?下面获取后缀的方法有什么缺陷?你有什么办法解决吗?答案:后缀名字容易被魔改后绕过判断鉴定。解决:我们可以根据二进制前几位特定的字节来判断后缀
function getSuffix(filePath) {
//文件路径
var index = filePath.lastIndexOf("."); //获取最后一个.的位置
var ext = filePath.slice(index + 1); //获取后缀
console.log(ext); // 输出:png
}
let suffix = getSuffix("file://upload/test.png")
if (suffix = "png") {
// 上传服务器
}
- 写个匹配电话号码的正则表达式
- 写个匹配邮箱的正则表达式
- 手写防抖、节流,防抖(debounce)与节流(throttle)的区别 ?
- 实现转化下划线命名到驼峰命名。
- 实现对象简易深拷贝
- 实现JS中所有对象的深度克隆(包装对象,Date对象,正则对象)
- JS 监听对象属性的改变
- 如果已经有三个promise,A、B和C,想串行执行,该怎么写?
- 假设前端需要发n个请求(n很大),写一个方法同时只并发10个请求,直到n个请求完成。答案:Promise.race()+队列
- 能不能实现数组map方法?
- 能不能实现数组reduce方法?
- 能不能实现数组 push、pop 方法?
- 能不能实现数组filter方法?
- 能不能实现数组splice方法?
- 能不能实现数组sort方法?
- 能不能写一个完整的深拷贝?
- 能不能模拟实现一个new的效果?
- 能不能模拟实现一个 bind 的效果?
- 能不能实现一个 call/apply 函数?
- 实现 Object.create
- 实现 Object.assign
TypeScript
- TS有什么优缺点?为什么要用TS?
- 什么是泛型,有什么作用?
- 类型别名type和接口interface有什么区别?
- 什么是装饰器?
- 什么是类型体操,有哪些应用?
- any用的多吗,有什么弊端?
- 你知道哪些工具类型,怎么用?
- TS里怎么处理第三方库类型,怎么给第三方库编写类型文件?
- React项目怎么使用TS?Vue项目怎么使用TS?
浏览器
- 你现在常用哪些浏览器?它们有哪些内核(Layout Engine)?
- 一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?
- window.onload和DOMContentLoaded的区别?
- 说说完整的HTTP事务是怎样的一个过程?
- 讲一下浏览器的渲染流程
- DOM树和渲染树的区别
- 浏览器发送HTTP请求时候缓存的流程
- 谈谈你对浏览器架构的理解
- 讲一下浏览器多进程的优势
- 知道进程调度策略吗?
- 什么是重绘(repaint)?什么是回流(reflow)?如何最小化重绘和回流?
- 如何实现浏览器内多个标签页之间的通信?
计算机网络
- 什么是URI?如何理解URI?URI的结构是?
- 请介绍一下XMLHTTPrequest对象及常用方法和属性
- 什么是Ajax,Ajax都有哪些优点和缺点?
- Ajax的实现流程是怎样的?
- Ajax 接收到的数据类型有哪些,数据如何处理?
- 封装好的Ajax里的常见参数及其代表的含义
- Ajax 注意事项及适用和不适用场景
- Ajax解决浏览器缓存问题
- 将原生的xhr 封装成 promise
- 一个图片url访问后直接下载怎样实现?
- 前端实现访问一个图片URL直接下载该图片?
- 谈谈你理解的RESTFUL 规范
- http状态码有那些?
- 常见的 HTTP状态码 以及代表的意义
- 301、302、303状态码的区别?
- 补充400和401、403状态码
- 谈谈304状态码
- 什么是同源策略?
- fetch发送2次请求的原因?
- 谷歌浏览器的option预检请求?
- 简述下什么时候会发送非简单请求?
- 知道 cors 与 jsonp 吗 ,他们的区别?
- 能详细说一下cors吗?
- 为什么会有跨域的问题出现,如何解决跨域问题?
- 什么是四层、七层网络模型?
- 说一下你知道的网络各种协议?
- TCP和UDP分别是什么?
- 什么是UDP?
- DNS 是什么
- 什么是CDN,以及如何优化?
- 你知道的HTTP请求方式有几种
- Get 和 Post 的区别以及使用场景
- GET 和 POST 方法都是安全和幂等的吗?
- jsonp了解嘛?解释原理以及优缺点?
- HTTP与HTTPS的区别?
- 说下HTTP1.0的队头阻塞,HTTP1.1是怎么改进的?
- 说说 HTTP1.1 相比 HTTP1.0 提高了什么性能?
- HTTP1.1 的缺陷?它的性能如何?
- 关于HTTP2.0 的概念和描述以及实现?
- HTTP2 做了什么优化?
- HTTP2 相比 HTTP1.1 的优点
- HTTP2 有哪些缺陷?HTTP3 做了哪些优化?
- 解释一下三次握手是什么,具体流程。变为二次握手会发生什么问题?
- TCP 四次挥手终止连接?
- HTTPS 是如何建立连接的?其间交互了什么?
- RSA 握手过程?
- 知道RSA 和 ECDHE吗?
- RSA、DH 密钥交换原理
- 说一下什么是长连接?
- Cookie 和 Session的区别?
- ViewState和SessionState有什么区别?
- 知道JWT吗?它的原理?和Session的区别是什么?
- 简述web前端Cookie机制,并结合该机制说明会话保持原理
- 强缓存 和 协商缓存 本质和区别?什么时候用哪个?
- cache-control的值有哪些
- Last-Modified/ETag与Cache-Control/Expires
- 常见的请求头和响应头有哪些?
- http 常见的请求头字段有哪些?
- 对于定长和不定长的数据,HTTP 是怎么传输的?答案:Transfer-Encoding: chunked
- HTTP 如何处理大文件的传输?
- Http分块下载、分片下载
- 大文件分切片上传+断点续传?
- Javascript 图片/文件上传到后台是什么类型?
- 网络请求怎么监控上传/下载,实现进度状况?
- HTTP请求中,几种常见的Content-Type类型
- HTTP 中如何处理表单数据的提交?
- web-garden 和 web-farm 有什么不同?
- 保持前后端通信有哪些方法?
- Web应用从服务器主动推送Data到客户端有那些方式?
- WebSocket的实现和应用
- 说一下webworker,它的作用是什么?
- PWA使用过吗?简述下 Service Worker的使用和实现原理是什么?
- 知道 WebAssembly(wasm) 吗?是用来干什么的
网络安全
React生态
- 知道 react 的 fiber,谈谈它的作用和实现?
- 述说 React 和 Vue 的区别
- redux主要解决什么问题?有什么优缺点?
- 如何划分业务组件和技术组件?
- React生命周期函数
- React 性能优化方案有哪些?和哪个周期函数关联性较大?
- 为什么虚拟dom会提高性能?
- DOM Diff 算法? react 的 diff 算法?
- 简述Virtual DOM 真的比操作原生 DOM 快吗 ?
- 简述 flux 思想
- React 项目用过什么脚手架?
- React 解决了什么问题?
- React的工作原理?
- 使用React有何优点?
- 展示组件(Presentational component)和 容器组件(Container component)之间有何
- 类组件(Class component)和 函数式组件(Functional component)之间有何不同?
- 状态(state)和 属性(props)之间有何不同?
- 应该在React组件的何处发起 Ajax请求?
- 在React中,refs的作用是什么?
- 何为高阶组件(higher order component)?
- setState发生了什么?是同步还是异步?
- 为什么建议传递给setState的参数是一个callback而不是一个对象?
- 除了在构造函数中绑定this,还有其它方式吗?
- 怎么阻止组件的渲染?
- 当渲染一个列表时,何为key?设置 key 的目的是什么?
- 为什么要设计 React hook,它解决了什么问题?
- react中的hooks为什么不能写在判断代码块中?为什么React的Hooks不能在if里面调用呢?
Vue生态
- 简述Vue的MVVM模式?
- 间述MVC和MVVM的区别?
- 说一下Vue2中的路由守卫?
- 说说你对Proxy的理解。
- 说一下 proxy 中的 receiver 是做什么用的?
- 说说你对Vue的理解,有何优缺点?
- Vue和React有什么不同?
- 什么是虚拟 DOM?
- 描述下vue的生命周期有哪些?分别做了什么事情?
- watch怎么深度监听对象变化
- 删除数组用delete 和Vue.delete 有什么区别?
- watch 和computed有什么区别?
- v-for 没有key会发生什么问题?
- 你讲一下vue双向绑定的原理
- v-model是什么?有什么用呢?
- 在vue项目中如何引入第三方库?有哪些具体操作方法?
- Vue3.0里为什么要用Proxy API替代 defineProperty API?
- Vue3.0编译做了哪些优化?
- Vue3.0新特性--Composition API与 React.js中Hooks的异同点
- vue 要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
- vue 在created和mounted这两个生命周期中请求数据有什么区别呢?
- Vue3.0性能提升主要是体现在哪些方面?
- vue3有哪些新特性?
- vue3有哪些新的组件?
- Vue2.0和Vue3.0有什么区别?
- Composition Api 与 Options Api有什么不同?
- 对Vue项目你做过哪些性能优化?
- Vue组件通信的方式有哪些?
- Vue常用的修饰符有哪些?
- Vue中的$nextTick有什么作用?底层如何实现?
- v-show和v-if有什么区别?
- 有用过keep-alive吗?它有什么作用?
- 如何实现一个虚拟DOM吗?
- 为什么data属性是一个函数而不是一个对象,具体原因是什么?
- Vue2的初始化过程你有过了解吗,做了哪些事情?
- Vue3初始化的一个大概流程?
- vue3响应式api如何编写?
- 在Vue项目中你是如何做的SSR渲染
- 说一下最长递增子序列?
- 讲一下vue3相比vue2有哪些提升
- 讲一下vue3相比vue2,它在diff算法上做了哪些优化?
- vue3.0 是如何变得更快的?dom diff 算法有何优化?
- vue2为什么要对数组的常用方法进行重写?
混合开发面试题
移动web开发
- 移动布局方案
- 讲讲viewport和移动端布局
- 什么是rem布局?
- Rem布局及其优缺点
- CSS单位中px、em和rem的区别?配合font-size如何计算?(移动端适配方案)
- 说一下CSS长度单位?
- px、em、rem、%、vw、vh、vm这些单位的区别
- 2X图、3X图适配
- 移动端适配1px的问题
- 移动端性能优化相关经验
- 移动端兼容性
- 小程序
- 图片在安卓上,有些设备模糊问题
- 固定定位布局键盘挡住输入框内容
- click的300ms延迟问题和点击穿透问题
- 防止手机中页面放大和缩小
- 移动端适配-dpr 浅析
- 移动端扩展点击区域
- 上下拉动滚动条时卡顿、慢
- 长时间按住页面出现闪退
- webkit mask 兼容处理
- transiton 闪屏
微信小程序
- 简单描述下微信小程序的相关文件类型?请简述微信小程序主要目录和文件的作用?
- 请简述wxss和css的异同?
- 你是怎么封装微信小程序的数据请求的?
- 有哪些参数传值的方法?
- 你使用过哪些方法,来提高微信小程序的应用速度?
- 小程序与原生App哪个好?
- 简述微信小程序原理?
- 分析下微信小程序的优劣势?
- 微信小程序与H5的区别?
- 怎么解决小程序的异步请求问题?
- 小程序的双向绑定和vue哪里不一样?
- 哪些方法可以用来提高微信小程序的应用速度
- 如何实现下拉刷新
- bindtap 和 catchtap 的区别是什么
- 简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(),wx.navigateBack(), wx.reLaunch()的区别
- js文件怎么在 wxml 中使用
- 讲一下小程序的双线程实现原理?
flutter
- JS和WebView之间通信有哪些方式?
- Hybrid、React Native和Flutter原理有什么区别,怎么做技术选型?
- 什么是热重载,有什么好处,Flutter热重载是怎么实现的?
- 什么是热修复,Flutter有哪些热修复方案?
- Flutter和原生之间如何通信?
- 怎么开发一个Flutter插件?
- Flutter怎么做屏幕适配?
- Flutter怎么做性能优化?
兼容性问题
- 列出不同浏览器中关于 JavaScript兼容性的两个常见问题
- 你常见的常见前端开发测试兼容性问题?你是怎么解决的
- 遇到过ios时间转换异常吗,你是怎么兼容处理的?
- ios滚动时卡顿怎么解决?
- 部分安卓机input得焦时输入框被键盘覆盖,你怎么处理
- 用户修改微信字体大小导致网页布局错乱
- 有没有遇到过处理字符串emoji出错问题
性能优化
- 知道 RAIL 吗?
- 解释一下,性能指标FP、FCP、FMP、LCP、TTI、TBT是什么意思?
- 如何衡量站点性能?性能指标如何计算?
- 谈谈你是如何判断网站的性能的?
- 什么是SPA单页面应用,SPA首屏为什么加载慢?
- 首屏加载你是如何优化的?
- seo优化有了解过吗?讲一下你的见解?在seo优化方面,前端要从哪些点去考虑?
- 什么是按需加载?
- 做过哪些前端性能优化相关的事情?
- 要加载大量图片,你有哪些方法优化方案?
- 列表无限滚动,数据越来越多,页面卡顿,如何解决?怎么做长列表优化?
- for (let i=0;i<1000000;i++){console.log(i)}如何优化?
- 怎么实现页面阻塞3秒?
前端模块工程化
- 你平常包管理器用的哪个?
- 打包工具了解哪些?简要说下Webpack、Rollup、Parcel等有什么区别?
- 简述前端自动化构建工具? 答案:Webpack、 Vite、 Parcel、 Rollup、 esbuild、 Gulp、 swc、Rome、 Turbopack、 Snowpack、 Nx、 WMR、 Rspack
- 有用过Vite吗,为什么Vite会那么快?
- 微前端适用于什么场景?设计一个微前端框架要怎么考虑?微前端适用于什么场景?设计一个微前端框架要怎么考虑?
- 简述前端模块化开发的认识理解?
- 简述模块化的JavaScript开发的优势? 模块化开发的好处是什么?
- 简述require.js解决了什么问题?
- 说一下 CommonJS、AMD和 CMD?
- commonJS中的require/exports和 ES6中import/export的区别是什么
- 简述CMD(Common module Definition,通用模块定义)规范的理解?
- 讲一下你了解哪些前端模块化规范?
- AMD 和 CMD 的区别?
- 简述CommonJS规范?
- 简述EMAScript 6模块规范?
- 前端模块化是否等同于JavaScript模块化?
- 如何理解前后端分离
- dependencies 和devDependencies 两者区别?
babel
- 讲一下AST抽象语法树
- 讲一下Babel的原理是什么?
- 如何写一个babel插件?
webpack
-
简述对webpack的理解?
-
有自己配置过webpack吗?如果需求是多页面与单页面并行,需要如何配置?
-
Webpack的优点是什么?
-
Webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全
-
讲一下webpack的打包原理、流程
-
说一下Webpack的热更新原理 监控文件改变监控文件改变 watchFile
-
如何利用Webpack来优化前端性能
-
使用Webpack开发时,你用过哪些可以提高效率的插件?
-
如何提高Webpack的构建速度?
-
什么是长缓存?在Webpack中如何做到长缓存优化?
-
怎么实现Webpack的按需加载?什么是神奇注释?
-
有哪些常见的Loader?他们是解决什么问题的
-
Loader 和Plugin的不同?
-
是否写过Loader 和Plugin?描述一下编写 loader 或 plugin的思路?
-
webpack和vite区别(模块化与流的区别)
-
webpack文件指纹策略:hash chunkhash contenthash
-
讲一下你对webpack5模块联邦的理解?
-
简述下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块 ?
常用框架的
- echarts的基本用法?
- 如何在vue中引入?
- 如何绘制条形图?
- 切换时卡顿如何解决?
- echarts图表自适应div resize问题?
- 你有开发过不用脚手架的项目吗?你封装过哪些脚手架,其他同事怎么用你封装的脚手架?
Nodejs
- 对Node.js有没有了解,它有什么特点,适合做什么业务或场景?
- Node的优点是什么?缺点是什么
- 说一下前端前端解决的方法?后端node是怎么解决跨域的
- 怎么解决express跨域的?解决案例
- 简述同步和异步的区别,如何避免回调地狱,Node的异步问题是如何解决的?
- node的stream(流)?
- 说说 Buffer 与字符编码?
- 能说一下什么是中间件吗?
- 谈谈你对Express和Koa的理解,二者的区别是?
- 谈谈对egg和nest.js的理解,二者的区别是?
- 什么是BFF?答案:中间层,像SSR用来解决SEO问题,GraphQL用来聚合数据,解决API查询的问题
- 什么是ORM?Nodejs的ORM框架有哪些?答案 Sequelize、TypeORM
- SQLite是什么?
- 有没有了解过Redis?
- 有没有做过数据库优化?
- 有了解过分布式和微服务吗?
- 描述一下从接到url开始,到逻辑处理,到DB查询,到返回结果,整个过程是怎么处理的?
Mysql
- mysql和mongoDB有什么区别
算法
// 把下面变成以下格式:
var data = [
['A1', 'A2'],
['B1', 'B2', 'B3'],
['C1', 'C2'],
];
/*
[
['A1', 'B1', 'C1'],
['A1', 'B1', 'C2'],
['A1', 'B2', 'C1'],
['A1', 'B2', 'C2'],
['A1', 'B3', 'C1'],
['A1', 'B3', 'C2'],
['A2', 'B1', 'C1'],
['A2', 'B1', 'C2'],
['A2', 'B2', 'C1'],
['A2', 'B2', 'C2'],
['A2', 'B3', 'C1'],
['A2', 'B3', 'C2']
]
*/
- 说一下你知道哪些排序,各有什么特点?说下他们的空间复杂度和时间复杂度
- 能否手写一个快速排序
- 写个直接插入排序
- 写一个归并排序
- 手写一个LRU缓存算法
- 深度优先遍历(DFS)和广度优先遍历(BFS)
- 如何把斐波那契数列优化成O(n)?
优化时间复杂度**采用公式算法,查看 **复杂度为O(log2n)的代码案例
function Fibonacci(n) {
var sqrt = Math.sqrt(5);
var phi = (1 + sqrt) / 2.0;
var fn = (Math.pow(phi, n) - Math.pow(1 - phi, n)) / sqrt;
return fn;
}
console.log(Fibonacci(5))
**采取空间换时间的方法,**查看 闭包 + 记忆函数 的案例
class XXX {
public static void main(String[] args) {
System.out.println(new XXX().Fibonacci(12)); // 144
System.out.println(new XXX().Fibonacci2(12)); // 144
}
public int Fibonacci(int n) {
if (n <= 1)
return n;
else {
int[] f = new int[n + 1];
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
}
public int Fibonacci2(int n) {
if (n <= 1)
return n;
else {
int iter1 = 0;
int iter2 = 1;
int f = 0;
for (int i = 2; i <= n; i++) {
f = iter1 + iter2;
iter1 = iter2;
iter2 = f;
}
return f;
}
}
}
项目管理
团队成员线上出现p0级 bug,你会怎么处理?
- **紧急响应:**立即响应并确认该问题的严重性和紧急程度。P0级别的bug通常表示系统的重要功能受到了严重影响,可能导致系统崩溃、数据丢失或用户无法正常使用。
- **集中资源:**我会与团队成员紧密合作,集中所有可用的资源和专业知识来解决这个问题。这可能包括开发人员、测试人员、运维人员和其他相关人员。
- 确定根本原因:我们会对该问题进行深入分析,以确定导致P0级别bug的根本原因。这可能涉及代码审查、日志分析、排查线上环境等。目标是快速而准确地找到问题所在,并采取措施解决它。
- **实施临时修复:**在查找根本原因和解决方案的过程中,我们会优先考虑实施临时修复措施,以尽快恢复系统的正常功能。这可以是一种临时性的解决方案,用于减轻问题的影响并确保系统的稳定性。
- **持续沟通:**我会与相关利益相关者保持密切沟通,包括产品经理、项目经理、客户和其他相关团队。我会及时向他们报告问题的进展、解决方案和预计的时间表,以便他们了解问题的状态并采取适当的措施。
- **彻底解决问题:**一旦临时修复措施实施成功,我会确保团队致力于彻底解决该问题,以防止类似问题的再次发生。这可能包括代码重构、流程改进、自动化测试增加等,以提高系统的稳定性和质量。
- **审查和总结经验:**一旦问题解决,我会与团队一起审查该事件,总结经验教训,并提出改进意见。这有助于我们识别潜在的改进机会,以及避免类似问题在未来的发生。
总的来说,处理P0级别的bug需要快速响应、紧密合作和专注于解决问题。我会确保团队充分投入,并采取适当的措施来最大限度地减轻问题的影响,并确保系统的正常运行。同时,我也会注重预防措施,以避免类似问题的再次发生。
如果团队的人不服你,你会怎么处理?
- **倾听和理解:**首先,我会倾听他们的观点和不满,努力理解他们的立场和关注点。这可以通过开放的对话和沟通来实现,以确保每个人都有机会表达自己的意见和观点。
- **解决冲突:**如果存在团队成员之间的冲突或分歧,我会努力促成解决方案。这可能包括组织团队会议、提供调解或引入其他解决冲突的方法,以便找到双方都可以接受的共同点和妥协方案。
- **透明和开放:**我会保持透明和开放的沟通方式,与团队成员分享决策背后的原因和依据,以便让他们了解决策的合理性和目标。这可以帮助建立信任和理解,减少不满和猜测。
- **激励和赋能:**我会努力激励团队成员,帮助他们理解自己的价值和贡献,以及他们在团队中的重要性。我会提供支持和资源,使他们能够充分发挥自己的能力,并参与到决策和解决问题的过程中。
- **持续改进:**我会积极寻求反馈和建议,不断改进我的领导方式和团队管理策略。我相信通过反思和学习,我可以提高自己的领导能力,并与团队成员建立更加积极和有效的工作关系。
总的来说,我会致力于建立开放、包容和积极的团队文化,促进良好的团队合作和共同目标的实现。如果团队成员不服从,我会尽力采取适当的措施来解决问题,并确保每个人都感到被尊重和重视。
前端开发团队开发宫格流程图
研发流程
技术设计
- 你知道有哪些互联网专业术语?
- 设计文档需要涵盖哪些部分?
代码规范
研发协同 (Git)
- git 的基本使用方法
- 讲一下你最常用的git命令,你们团队的git提交规范是什么?
- 我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些,文件显示出来,我们该如何操作?
- git fetch 和git merge 和git pull的区别。
- 如何把本地仓库的内容推向一个空的远程仓库
- git 工作流程
- 需要合并别人代码进来
- 需要切换分支
- 我们如何使用 git 和开源的码云或github上面的远端仓库的项目进行工作呢
- git、github、gitlab 三者之间的联系以及区别
- github 和码云的区别
- 提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的
- 如果本次提交误操作,如何撤销
- git 修改提交的历史信息
- 如何删除github和gitlab上的文件夹
- 如何查看分支提交的历史记录?查看某个文件的历史记录呢
- rebase与merge的区别?
- git reset、git revert 和git checkout 有什么区别?
- git 跟svn有什么区别
- 谈谈commit message 规范
测试
- 单元测试如何做?
- 如何解决联调依赖问题?
- 提测阶段bug和线上bug解决过程有和区别?
发布上线
- 流水线如何搭建
- 对Docker理解
- pm2与 docker 有何区别?