【部分】前端八股,希望有所帮助
进程和线程的区别:
TCP的三次握手和四次挥手:
为什么是三次而不是两次或者四次:如果是两次,服务端不知道客户端是否具有接收消息的能力(还有网络阻塞的考量,两次握手会造成资源浪费)。如果是四次显然是浪费资源。综上所述,三次握手是用最小的代价确定客户端和服务端同时具有发送和接收数据的能力。
css和js会阻塞HTML吗(js放在body和head的区别):
css不阻塞dom的解析,js阻塞dom的解析。css和js都会阻塞dom的渲染。
闭包及用途:闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部定义另一个函数。可以借助闭包从外部读取函数内的某个私有变量。它的典型应用是定义模块(对象)时作为私有函数暴露给外部。但是它会增加内存负担(变量将始终保存在内存中)。
跨域的方法:
l 前端:使用jsonp(利用script标签不受限制的从其它域加载资源的特性),iframe(location.href)。这两种方法都存在较高的安全风险(恶意代码注入)
l 后端: 配置CORS允许跨域(Access-Control-Allow-Origin);前端框架的proxy代理(webpack会在本地创建一个web服务器,该服务器和客户端同源。它作为中间层帮助客户端去向服务端请求数据);nginx的方向代理
l Websocket
浅拷贝与深拷贝:前者仅仅是复制指向原对象的指针,新旧对象共享内存。后者是开辟一个新的存储空间存放数据。修改新对象旧对象不受影响。
谈谈js的垃圾回收:
js引擎会跟踪每个值被引用的次数,然后会定期释放哪些引用次数为0的值所占的内存。将一个变量设为null,可以尽快回收释放其内存。
如何实现浏览器响应式布局:
l 使用flex弹性布局
l 使用媒体查询(@media)
l 使用百分比单位
l 使用REM单位
l 使用VW、VH单位
什么是单页面应用:
就是指一个系统只加载一次资源,之后的操作交互、数据交互是通过路由、ajax来进行,页面并没有刷新
优点
1. 加载次数少,加载以后性能较高
2. 前后端分离,前端负责界面显示,后端负责数据存储和计算
3. 良好的交互体验
缺点
1. 不利于SEO优化
2. 单页面不能使用浏览器的前进后退,页面切换要自己建立堆栈管理
3. 首次加载耗时比较长
vue父子组件(兄弟组件)传值:
1. 子组件通过props属性接收父组件的数据(向下传递)。然后父组件在子组件上绑定自定义事件,子组件通过emit触发该事件来向父组件传递数据(向上传递)。
2. 通过ref属性给子组件设置一个名字,父组件通过$refs组件名来获取子组件。子组件则可通过$parent调用父组件。
3. 兄弟组件间通讯,通常使用vuex,也可借助事件总线(新建一个空的vue实例,不过官网最新的教程已经删除了)。
nextTick的理解:
下次DOM更新循环结束后执行延迟回调。简单的理解就是DOM更新完成后执行回调函数。因为vue采用的是异步渲染—Vue实现响应性并不是数据变更后DOM立即变化,而是按照一定的策略进行DOM的更新。
介绍一下虚拟dom:
虚拟dom是vue和react都用到的一种技术。虚拟DOM是对真实DOM的一种抽象,会根据DOM标签的名字、属性、孩子对真实DOM进行映射。使用虚拟DOM的原因是,真实DOM进行更新时的过程很笨拙,虚拟DOM配合diff算法,可以很轻便的进行DOM的操作。提高渲染性能。
v-if与v-show的区别:v-show其实是控制css样式的display属性,v-if则是根据表达式的值销毁或者创建dom节点。
v-if与v-for可以同时使用吗:
不建议一起使用。v-for比v-if优先级更高。所以使用的话,每次v-for都会执行v-if,造成不必要的计算,影响性能。
$route与$router的区别:
route是路由信息对象,里面主要包含路由的一些基本信息,包括name,path,params等;
computed和watch的区别:
computed主要是存储一些需要数据处理的值,其实和data比较像,可以理解为在data 的基础上做一些额外的数据处理操作,并且返回一个新的变量。
keep-alive的作用:
keep-alive是vue的内置组件。当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。。主要作用是防止重复渲染DOM,减少加载时间及性能消耗,提供用户体验性。
flex布局
一、容器的属性
#前端面经#