虽然金三银四已经过了,虽然今年大环境不是特别好,但是八股文该背还是要背的,在这给大家总结了100道初中级前端面试题,在这个假期,尽情的卷吧,这篇文章没有只提供了题目,没有提供答案,如果大家需要答案,到时候可以开一个git仓库。让我们开始吧:
理论题
- 浏览器重绘、重排
- html5新增特性
- localStroage、sessionStroage、cookie的区别
- css3新增特性
- px、rpx、rem、em的区别
- 子元素如何相对于父元素垂直水平居中
- 如何实现两边宽度固定,中间宽度自适应布局
- 如何实现一个div和屏幕一样宽高
- 如何实现一个div宽度和高度都和屏幕宽度一致
- 如何实现一个三角形
- css盒子模型
- css样式优先级
- 什么是BFC?BFC的布局规则是什么?如何创建BFC?BFC应用?
- flex布局常用属性
- js数据类型?如何检测数据类型?
- 闭包是什么?闭包的应用场景?
- 解释原型和原型链
- 解释this指向
- new关键字是什么?new的过程做了哪些操作?
- 解释作用域、作用域链、变量提升、函数提升
- js事件循环机制?常见的微任务和宏任务?
- 改变this执行的方法
- 防抖和节流是什么?应用场景?
- 深拷贝和浅拷贝?如何实现深拷贝?
- es6新增特性
- 箭头函数和普通函数的区别?哪些场景不能使用箭头函数?
- Promise解决了什么问题?
- Promise.all、Promise.race、Promise.any、Promise.allSettled用法和区别
- 解释async和await?如何使用?和Promise的区别
- async能不能单独使用?await能不能单独使用?
- async和await如何纠错?
- es6新增的模块化?export和export default的区别?
- es6新增的模块化和common.js模块化的区别?
- export导出的数据能不能修改?module.exports能不能修改?为什么?
- 常见网络状态码
- 封装过axios吗?如何封装的?项目是如何处理请求的?
- vue常见指令
- v-if和v-show区别和使用场景
- class和style如何绑定
- computed和watch的区别
- 如何实现v-model和组件自定义v-model
- vue2的生命周期
- 父子组件生命周期执行顺序
- nextTick是干什么的?
- vue2种为什么data是一个函数
- vue2组件传值
- vue3组件传值
- keep-alive和使用场景?keep-alive会增加哪些生命周期
- vue3和vue2的区别
- vue和react的区别
- v-for为什么要加key
- vue2如何给对象新增属性?为什么?
- vue2能不能检测数组的变化?
- vue的修饰符有哪些
- 插槽有几种?怎么使用?
- vue2和vue3分别怎么样抽离相同逻辑
- vue2响应式原理
- vue3响应式原理?和vue2有哪些区别
- 父组件可以监听到子组件的生命周期吗
- 什么是虚拟dom
- 虚拟dom的优点
- vue-router有几种模式?有什么区别?
- 路由传值
- 路由守卫
- 路由实现原理
- vuex有几部分构成?分别是什么作用?
- 如何理解vuex模块化
- vuex实现原理
- 使用了哪些vue的组件库?封装过组件没有?
- 封装组件的思想和原则
- react组件如何传值
- react常用hooks函数
- useCallback和useMemo怎么使用和区别
- 自己封装过hooks函数没有
- 微信小程序和vue的区别
- 微信小程序组件生命周期和常用api
- 微信小程序登录流程
- 微信小程序组件传值
- uni-app和vue的区别
- uni-app踩过哪些坑
- 项目优化
- 跨域是什么?如何解决跨域?
- 浏览器输入url到页面显示发生了什么?
编码题
- 手写防抖函数
- 手写节流函数
- 手写深拷贝
- 数组去重
- 数组扁平化
- 手写发布订阅函数
- 以下代码输出什么
var a = {n: 1}
var b = a
a.x = a = {n: 2}
console.log(a)
console.log(b)
- 以下代码输出什么?如何修改代码保证按顺序输出?如何修改代码每隔1秒按顺序输出?
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i)
}, 1000)
}
- 以下代码输出什么?
console.log(1)
setTimeout(() => {
console.log(2)
new Promise((resolve) => {
console.log(3)
resolve()
}).then(() => {
console.log(4)
})
})
new Promise((resolve) => {
console.log(5)
resolve()
}).then(() => {
console.log(6)
})
console.log(7)
setTimeout(() => {
console.log(8)
}, 0)
console.log(9)
- 有以下数组,将*移到数组最后面并保证其他元素顺序不变
let arr = ['*', '1', '*', '*', '2', '*', '3', '4']
- 找出一个字符串出现次数最多的字符及出现的次数,例如
hello,l是出现最多的并出现了2次 - 求两个数组的交集,如
let arr1 = [1,2,3]
let arr2 = [2,3,4]
输出[2,3]