前端八股文
Group1
Q1:说一说cookie sessionStorage localStorage 区别?
1 | A1:共同点:都是浏览器存储,都存储在浏览器本地 |
Q2:JS数据类型有哪些,区别是什么?
1 | A2:JS数据类型分为两类:一类是基本数据类型,也叫简单数据类型,包含7种类型,分别是Number 、String、Boolean、BigInt、Symbol、Null、Undefined。另一类是引用数据类型也叫复杂数据类型,通常用Object代表,普通对象,数组,正则,日期,Math数学函数都属于Object。 |
Q3:说一说你对闭包的理解?
1 | A3:内层函数引用外层函数中变量,这些变量的集合就是闭包。 |
Q4:说一说promise是什么与使用方法?
1 | A4:是ES6提供的一个构造函数,异步编程的一种解决方案,用来封装异步操作并获取其成功或失败的结果。 |
Q5:说一说跨域是什么?如何解决跨域问题?
1 | A5:跨域:当前页面中的某个接口请求的地址和当前页面的地址如果协议、域名、端口其中有一项不同,就说该接口跨域了。 |
Q6:说一说BFC?
1 | A6:BFC(Block Formatting Context)块级格式化上下文,是Web页面一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素。 |
Q7:说一说Vuex是什么,每个属性是干嘛的,如何使用 ?
1 | A7:Vuex是集中管理项目公共数据的。 |
Q8:说一说JavaScript有几种方法判断变量的类型?
1 | A8:JavaScript有4种方法判断变量的类型,分别是typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、 constructor (用于引用数据类型) 。 |
Q9:说一说样式优先级的规则是什么?
1 | A9:CSS样式的优先级应该分成四大类。 |
Q10:说一说JS实现异步的方法?
1 | A10:所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。 |
Q11:说一说Vue2.0 双向绑定的原理与缺陷?
1 | A11:vue的双向绑定是采用数据劫持结合发布者订阅者模式的方式来实现响应式,通过Object.defineProperty来劫持数据的getter,setter,在数据变化时发送消息给订阅者,订阅者收到消息后进行相应的处理。 |
Q12:说一说数组去重都有哪些方法?
1 | A12:第一种方法:利用对象属性key排除重复项。遍历数组,每次判断对象中是否存在该属性,不存在就存储在新数组中,并且把数组元素作为key,设置一个值,存储在对象中,最后返回新数组。 |
Q13:说一说null 和 undefined 的区别,如何让一个属性变为null?
1 | A13:null表示一个值被定义了,但是是空值,但是undefined表示未被定义,undefind 是全局对象的一个属性。 |
Q14:说一下浮动?
1 | A14:浮动的作用:设置了浮动的块级元素可以排列在同一行,设置了浮动的行内元素可以设置宽高,同时可以按照浮动设置的方向对齐排列盒子。会脱离文档流,悬浮在未浮动的盒子上面,同时能开启BFC但是会造成高度塌陷,影响其他元素排版。 |
Q15:说一说es6中箭头函数?
1 | A15:1.写法简洁,省去了function关键字,使用=>来定义函数;2.不能new;3.无自己的this,继承上一个作用域的this;4.不能作为构造函数;5.没有自己的prototype;6.没有arguments对象。 |
Q16:说一说call apply bind的作用和区别?
1 | A16:call apply bind三个方法都可以用来改变函数的this指向。 |
Q17:说一说HTML语义化?
1 | A17:HTML语义化就是指在使用HTML标签构建页面时,避免大篇幅的使用无语义的标签,要求尽可能的使用具有语义的标签,比如<header>、<footer>等。 |
Q18:说一说this指向(普通函数、箭头函数)?
1 | A18:this关键字由来:在对象内部的方法中使用对象内部的属性。this存在的场景有三种:全局执行上下文、函数执行上下文、eval执行上下文。 |
Q19:说一说CSS尺寸设置的单位?
1 | A19:px:pixel像素的缩写,绝对长度单位,它的大小取决于屏幕的分辨率,是开发网页中常常使用的单位。 |
Q20:说几个未知宽高元素水平垂直居中方法?
1 | A20:1. 设置元素相对父级定位position:absolute;left:50%;right:50%,让自身平移自身高度50% transform: translate(-50%,-50%);,这种方式兼容性好,被广泛使用的一种方式; |
Q21:说一说JS变量提升?
1 | A21:变量提升是指JS的变量和函数声明会在代码编译期,提升到代码的最前面。 |
Q22:说一说 HashRouter 和 HistoryRouter的区别和原理?
1 | A22:区别: 1. history和hash都是利用浏览器的两种特性实现前端路由,history是利用浏览历史记录栈的API实现,hash是监听location对象hash值变化事件来实现; |
Q23:说一说map 和 forEach 的区别?
1 | A23:区别:map有返回值,可以开辟新空间,return出来一个length和原数组一致的数组,即便数组元素是undefined或者是null。forEach默认无返回值,返回结果为undefined,可以通过在函数体内部使用索引修改数组元素。 |
Q24:说一说事件循环Event loop,宏任务与微任务?
1 | A24:浏览器的事件循环:执行js代码的时候,遇见同步任务,直接推入调用栈中执行,遇到异步任务,将该任务挂起,等到异步任务有返回之后推入到任务队列中,当调用栈中的所有同步任务全部执行完成,将任务队列中的任务按顺序一个一个的推入并执行,重复执行这一系列的行为。 |
Q25:说一说Vue3.0 实现数据双向绑定的方法 ?
1 | A25:在Vue2.0的基础上将Object.definedproperty换成了功能更强大的proxy,Vue3.0 是通过Proxy实现的数据双向绑定,Proxy是ES6中新增的一个特性,实现的过程是在目标对象之前设置了一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。 |
Q26:说一下Diff算法?
1 | A26:Diff算法主要就是在虚拟DOM树发生变化后,生成DOM树更新补丁的方式,对比新旧两株虚拟DOM树的变更差异,将更新补丁作用于真实DOM,以最小成本完成视图更新。 |
Q27:说一说三栏布局的实现方案?
1 | A27:三栏布局,要求左右两边盒子宽度固定,中间盒子宽度自适应,盒子的高度都是随内容撑高的,一般都是中间盒子内容较多,为了保证页面渲染快,在写结构的时候,需要把中间盒子放在左右盒子的前面。 |
1 | <div class="father"> |
1 | .father{ |
加了*{outline:1px solid red;}
样式之后可以看到布局轮廓
1 | <div class="father"> |
1 | .father{ |
Q28:说一下浏览器垃圾回收机制?
1 | 浏览器垃圾回收机制根据数据的存储方式分为栈垃圾回收和堆垃圾回收。 |
Q29:说一说 vue 的 ?
1 | 定义:keep-alive是vue的内置组件,能在组件切换过程中将状态保留在内存中,相当于缓存,防止DOM的重复渲染。 |
Q30:CSRF攻击是什么?
1 | CSRF跨站点请求伪造(Cross Site Request Forgery)和XSS攻击一样,有巨大的危害性,就是攻击者盗用了用户的身份,以用户的身份发送恶意请求,但是对服务器来说这个请求是合理的,这样就完成了攻击者的目标。 |
Q31:XSS攻击是什么?
1 | XSS是跨站脚本攻击(Cross Site Scripting),不写为CSS是为了避免和层叠样式表(Cascading Style Sheets)的缩写混淆。 |
Q32:说一说js继承的方法和优缺点?
1 | 1.原型链继承:当一个构造函数的原型是另一个类型的实例,那么这个构造函数new出来的实例就具有该实例的属性。 |
Q33:说一说defer和async区别?
1 | 浏览器会立即加载JS文件并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。 |
Q34:说一下浏览器如何渲染页面的?
1 | 浏览器拿到HTML,先将HTML转换成dom树,再将CSS样式转换成stylesheet,根据dom树和stylesheet创建布局树,对布局树进行分层,为每个图层生成绘制列表,再将图层分成图块,紧接着光栅化将图块转换成位图,最后合成绘制生成页面。 |
Q35:说一说computed和watch的区别?
1 | computed:计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算。 |
Q36:说一说 Vue 中 $nextTick 作用与原理?
1 | Vue 在更新 DOM 时是异步执行的,在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。所以修改完数据,立即在方法中获取DOM,获取的仍然是未修改的DOM。 |
Q37:说一说new会发生什么?
1 | 1.创建一个空的简单JavaScript对象(即{}); 2.为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象; 3.将步骤1新创建的对象作为this的上下文; 4.如果该函数没有返回对象,则返回this。 |
Q38:说一下token 能放在cookie中吗?
1 | 能。 |
Q39:说一下浏览器输入URL发生了什么?
1 | 1. url解析:判断是搜索内容还是请求URL |
Q40:说一说组件通信的方式?
1 | Vue组件的通信方式分为两大类,一类是父子组件通信,另一类是任何关系类型组件通信(父子、兄弟、非兄弟)。 |
Q41:说一说 v-if 和 v-show区别?
1 | v-show: 控制的元素无论是true还是false,都被渲染出来了,通过display:none控制元素隐藏,适合使用在切换频繁显示/隐藏的元素上。 |
Q42:说一说盒模型?
1 | CSS盒模型定义了盒的每个部分包含 margin, border, padding, content。 |
Q43:说一说伪数组和数组的区别?
1 | 伪数组它的类型不是Array,而是Object,而数组类型是Array。 |
Q44:说一说如何实现可过期的localstorage数据?
1 | localStorage只能用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。所以要实现可过期的localStorage缓存的中重点就是:如何清理过期的缓存。 |
Q45:说一说axios的拦截器原理及应用?
1 | axios为开发者提供了这样一个API:拦截器。拦截器分为 请求(request)拦截器和 响应(response)拦截器。 |
Q46:说一说创建ajax过程?
1 | 1. 创建XHR对象:new XMLHttpRequest() ; |
Q47:说一下fetch 请求方式?
1 | fetch是一种HTTP数据请求的方式,是XMLHttpRequest的一种替代方案。Fetch函数就是原生js,没有使用XMLHttpRequest对象。fetch()方法返回一个Promise解析Response来自Request显示状态(成功与否)的方法。 |
Q48:说一下有什么方法可以保持前后端实时通信?
1 | 1.轮询:客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。 |
Q49:说一下重绘、重排区别如何避免?
1 | 重排:当DOM的变化影响了元素的几何信息(元素的的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。 |
Q50:说一说 Vue 列表为什么加 key?
1 | 为了性能优化。因为vue是虚拟DOM,更新DOM时用diff算法对节点进行一一比对,比如有很多li元素,要在某个位置插入一个li元素,但没有给li上加key,那么在进行运算的时候,就会将所有li元素重新渲染一遍,但是如果有key,那么它就会按照key一一比对li元素,只需要创建新的li元素,插入即可,不需要对其他元素进行修改和重新渲染。 |
Q51:说一说vue-router 实现懒加载的方法?
1 | vue-router 实现懒加载的方法有两种: |
Q52:说一说前端性能优化手段?
1 | 前端性能优化分为两类,一类是文件加载更快,另一类是文件渲染更快。 |
Q53:说一说性能优化有哪些性能指标,如何量化?
1 | 1.Speed Index(lighthouse,速度指数) |
Q54:说一说服务端渲染?
1 | SSR是Server Side Render的简称。 |
Q55:事件扩展符用过吗(…),什么场景下?
1 | 展开语法(Spread syntax), 可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。 |
Q56:说一说vue钩子函数?
1 | 钩子函数用来描述一个组件从引入到退出的全过程中的某个过程,整个过程称为生命周期。 |
Group2
Q1:HTML 中 href、src 区别?
1 | A1:href 是 Hypertext Reference 的缩写,表示超文本引用。常用的有:link、a。 |
Q2:script标签在HTML页面放置的位置?
1 | 1.script标签放在head标签内部 |
评论
GitalkValine