百度一面:
本文是根据记忆整理的百度面试题,由于作者知识储备有限,有些许偏差
JavaScript
js的数据类型有哪些,Number,String,Boolean,Null,Undefined,Symbol
ES6新增了哪种数据类型,bigint Symbol(笑死,这里本来说了bigint的,但是普通话不标准,面试官没听到,后面他补充了)
有哪两种数据类型,引用数据类型和基本数据类型
引用数据类型有哪些,Object,Array,Data,Function()
判断数据类型有几种方法,typeof和Object.prototype.toString.call
typeof的缺点,typeof(null)的值是什么,这里回答了undefined,后面面试官说了是object
作用域和作用域链,规定变量和函数的可使用范围称作作用域,每个函数都有一个作用域链,查找变量或者函数时,需要从局部作用域到全局作用域依次查找,这些作用域集合称作作用域链
原型和原型链,原型分为隐式原型和显示原型,每个对象都有一个隐式原型,他指向自己构造函数的显示原型,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是平时我们说的原型链概念
什么是闭包,js中内层函数可以访问外层函数的变量,使内部私有变量不受外界干扰,起到保护变量的作用,这个特性叫做闭包,(这里我说了外层函数不可以访问内层函数,面试官纠正说可以,但一般不用)
箭头函数和普通函数的区别,不能用new,没有arguments,面试的时候我说箭头函数this指向是固定的,但是面试官说箭头函数没有this,后面我查了,箭头函数没有this,写在箭头函数中的this,会自动向当前作用域的上一层作用域寻找,是否含有this,如果有就指代,没有就继续寻找上一层
var let const ,var声明变量存在变量提升,即变量可以可以在声明之前调用,var可以允许重复声明,var不存在块级作用域,let和const不存在变量提升,let和const存在块级作用域
ES6的新特性,模板字符串,箭头函数,扩展运算符,map和ste,promise和proxy,数组方法Array.from(),filter(),forEach(),some()
map和forEach的区别,都是遍历数组中的每一项forEach和map方法里每次执行匿名函数都支持3个参数,map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值
常用的数组方法有哪些,改变原数组;push,pop,shift,unshift,sort,solice,reverse,不改变原数组,concat,join,map,forEach,filter,slice
slice和splice的区别,slice切片的意思,根据传入的起始和终止下标,获取该范围数组,splice可根据传入参数个数不同实现删除,插入操作,直接操作原数组,第一个参数为起始下标,第二个参数为要删除的个数,第三个为要删除的个数,第三个为要增加的数据
如何改变this指向,call,bind,apply都是JavaScript用于改变函数执行上下文,即this指向的方法,传参call,bind可以传递无数个参数,apply只有两个参数,第二个参数为数组,返回call和apply方法是直接调用函数并改变函数的上下文,而bind方法则是返回一个新函数,稍后调用时绑定指定的上下文
防抖和节流,防抖只会在最后一次事件触发函数,如果在此之前触发函数,则取消之前的计时器重新计时,节流不管多么频繁,都会保证在规定时间段触发函数,使用场景,防抖用在input,节流用在滚动事件,鼠标事件
什么是promise,Promise异步编程的一种解决方案,Promise是一个构造函数,接受一个函数作为参数,返回一个promise实例,promise对象的三种状态,他们分别是pending(等待中),resolved(已完成),rejected(拒绝)
CSS
你除了用TailwindCss实现响应式布局还用其他什么方法,flex
flex中怎么实现水平分布,justify-content
justify-content怎么实现在项目剩余空间项目于容器起始边贴边对齐,space-between
盒子模型和怪异盒模型,盒模型,总宽度等于width+border+padding+margin,怪异盒模型,width包括内容+padding+margin+border
动画,怎么平移,属性,animation,transform:translate(),50%,-50%
Vue
vue的生命周期beforeCreate,create,beforeMounted,mounted,beforeUpdate,update,beforeDestroy,destroyed
vuex中mutation和action的区别和使用:
Mutation用于执行简单的同步操作,比如直接修改state的值,Action用于执行更复杂的异步操作,比如发起API请求或批量的异步操作,并可以在异步操作完成后在触发mutation来修改状态
vueX中数据存在哪里,怎么修改:数据存在state中,可以用Mutation修改
vue watch和computed区别,watch用来监听某个变量,当被监听的值发生变化时,执行相关的操作,computed中的属性本质是一个变量,一个特殊的变量,它由其他变量计算或者说赋值而来,它依赖于其他变量的变化,无需也无法像普通v变量一样直接赋值修改
vue的响应式原理,采用数据劫持结合订阅者,发布者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调
有一万条数据,怎么做虚拟滚动列表
router的钩子函数有哪些,全局前置守卫router.beforeEach,全局解析守卫router.beforeResolve,全局后置钩子router.afterEach,路由独享守卫beforeEnter
封装axios
import axios from 'axios'
const httpInstance=axios.create({
baseURL:'http://pcapi-xiaotuxian-front-devtest.itheima.net',
timeout:5000
})
//拦截器
//axios拦截器
httpInstance.interceptors.request.use(config=>{
return config
},e=>Promise.reject(e))
//axios响应式拦截器
httpInstance.interceptors.response.use(res=>res.data,e=>{
return Promise.reject(e)
})
export default httpInstance
asyic await,asyic和await是一种同步的写法,但还是异步的操作,两个必须配合使用
页面如何跳转?如何跨页面传参数:
router-link标签跳转
路由跳转,顺便把参数传了
query传参
this.$router.push({
path:'/url',
query:{
par:parid
}
})
params传参
//编程式
this.$router.push({
name:'home',
params:{username:this.username},
})
<router-link :to="{name:"home",params:{username:username}}">
node
express
cors,解决前端后端跨域问题
npm是什么,为什么用npm命令下载包?npm 是一个管理包的地方,npm下的包放在node_moudle中
webpack
…
git
git常用哪些语句,pull,commit,push,reset,merge,log,branch,stash
版本回退语句,git reset --soft版本号,git reset --hard 版本号,soft 回退后,代码改动在本地还保存有,hard会删除本地改动,彻底抹去该版本的痕迹