CSS 说一下盒子模型 所有html元素都可以看作是一个盒子模型,它的本质是一个盒子,由内容区+内填充+边框+外边距组成。标准盒子模型的宽高=内容区的宽高,IE盒子模型的宽高=内容区+内填充+边框的宽高。由box-sizing改变属性。
实现元素居中的几种方式 1.子元素的top和left设置为50%,用translate进行回调,把子元素的中心点移动到父元素的中心点(盒子可以不定宽高) 2.子元素的top和left设置为50%,以子元素的一半宽高对margin-top和margin-left进行负值赋值(盒子必须定宽高) 3.子元素的所有方向设置为0,margin设置为auto(盒子必须定宽高) 4.flex布局 flex-direction:设置主轴方向 justify-content:设置主轴
es6新特性 1.let和const 2.箭头函数 3.解构赋值 4.模板字符串 5.展开运算符
promise的理解
React setState的执行机制 react执行机制、diff算法、说一下生命周期、虚拟dom是什么、组件内super()的作用、提高性能的方法、
首屏加载速度慢怎么办?
- 原因:
- 网络延迟 2.资源文件体积过大 3.重复发送资源请求
- 解决方法
- 减小入口文件体积(路由懒加载) 2.静态资源使用前端缓存(localStorage、SessionStorage) 3.UI框架按需加载 4.图片压缩、代码压缩 5.使用服务端渲染
对路由的理解(如何跳转、重定向)
- 路由跳转方法:
- 使用react-router-dom中的link标签 2.使用react-router-redux中的push进行跳转(replace替换、go前进或后退页面)
- 重定向: 通过redirect标签
路由中link标签和a标签有什么区别?
- link跳转只更新相应的内容,而不是重新刷新整个页面
- a标签是从一个页面跳转到另一个页面,重新刷新了整个页面
合成事件和原生事件的区别?
- 合成事件使用小驼峰命名法,原生事件使用全小写命名法
为什么props不能改变? props作为组件对外通信的一个接口,为了保证组件没有相应的副作用,所以props是只读的,不能被修改。
什么是有状态组件和无状态组件? 类组件是有状态组件:有自己的私有数据和生命周期 函数式组件是无状态组件:没有自己的私有数据和生命周期,只能通过useState和useEffect来操作
什么是受控组件和非受控组件?
怎么理解react的严格模式?
为什么setState在生命周期事件/合成事件是异步的? 因为生命周期事件和合成事件的调用顺序是在更新之前的,导致在生命周期事件和合成事件中不能立马拿到更新后的值,所以就形成了异步。
合成事件和原生事件有什么不同?
1.原生事件是绑定到真实dom身上的,使用全小写命名。
2.合成事件不是绑定到相对应组件的dom身上,而是在document监听所有的合成事件,使用小驼峰进行命名。
3.先执行原生事件,再执行合成事件
redux
- 是什么 redux是集中管理应用状态的容器
- 三个原则 1.单一数据源:整个应用的数据都来源于store 2.单一数据流:store的数据只能通过action来改变 3.使用纯函数进行更改
- 实现流程 1.用户触发一个action 2.store调用reducer,并且传入两个参数:当前的state和收到的action 3.reducer会返回新的state 4.view就会根据state的变化触发重新渲染
- 实现原理 1.provider:从最外部封装整个应用,全局透传store 2.connect:用connect注入数据和功能给子组件,监听store的变化使子组件可以响应state变化。
__proto__和prototype的关系 实例的__proto__指向实例的构造函数的原型
如何创建一个new? 1.先创建一个新的空对象 2.让新对象的__proto__指向构造函数的prototype 3.给新对象绑定this 4.返回这个新对象
splice和slice的区别? slice:参数(开始位置,元素个数),返回选择的元素数组,不会改变原数组 splice:参数(开始位置,元素个数,添加或者替换的元素),返回修改之后的数组,会改变原数组
push会改变原数组吗? 会,concat不会
深浅拷贝? 浅拷贝:数组slice、对象object.assign 深拷贝: 1.先JSON.stringify,再JSON.parse回来
如何判断引用数据类型是否为空? 1.先转换成字符串,再判断字符串是否为{} 2.Object.keys判断数组长度是否为0
flex布局常用属性? flex-direction:设置主轴的方向 justify-content:主轴对齐方式 align-items:交叉轴对齐方式 align-self:子元素交叉轴对齐方式
如何提取对象的key和value? Object.keys(obj):返回一个由key组成的数组 Object.value(obj):返回一个由value组成的数组
rem、em、px的区别? px:是固定的像素 em:是相对于父元素来设置font-size大小 rem:是相对于根元素来设置font-size大小
冒泡排序和选择排序? 冒泡排序:第一个元素和第二个元素进行对比,小的在前大的在后,第二个元素和第三个元素进行对比,小的在前大的在后,以此类推,直到排序完成,生成一组由小到大排序的数据。 选择排序:从一堆数据中选出最小的那个与第一个交换,在剩下的数据中选出最小的元素与第二位交换,以此类推,直到完成排序,生成一组由小到大排序的数据。
直接赋值和拷贝地址的区别? 基本数据类型直接赋值不考虑深浅拷贝 引用数据类型直接赋值是浅拷贝(拷贝地址)
使用git每次只提交几条记录而不是提交整条分支怎么处理?
怎么代理服务器 用nginx服务器代理