前端面试题汇总

基础面试题

1.new 操作符做了那些事


function Fun(name){
    this.name = name
}
Fun.prototype.sayHi = funtion(){
     console.log(this.name)   
}

function mockCreate(fn, ...args){
    let obj = Object.create({}) // 创建一个空对象
    Object.setPrototypeOf(obj, fn.prototype) // 空对象的原型指向函数的原型链
    let result = fn.apply(obj, args)  // 绑定对象到函数的this
    return result instanceof Object ? result : obj // 如果返回的是引用对象则返回对象,否则返回obj
}

2.html 浏览器渲染过程

  1. 处理html解析 并构建dom 树
  2. 处理css 构建cssom
  3. dom cssom 合成渲染树
  4. 根据渲染树,计算节点的布局信息
  5. 调用gpu绘制合成图层,显示在屏幕上

3.defer与async的区别

  1. defer要等到整个页面在内存中正常渲染结束(DOM结构完全生产,以及其他脚本执行完成),才会执行
  2. async 一旦下载完, 渲染引擎就会中断渲染,执行这个脚本以后, 再继续渲染。
  3. 一句话 defer是渲染完再执行,async是下载完就执行
  4. 如果多个defer脚本,会按照页面顺序加载; 而多个async 脚本是不能保证加载顺序的。(async是只要加载完,立即执行)

4.  列出一些服务器的状态码

       301 资源永久转移

       302 资源临时转移; 

       304 Not Modified; 资源未修改, 客户端会访问缓存的资源;

       400 客户端请求的语法错误;

       401 unauthorized, 用户身份未认证

       403 Forbidden, 服务端拒绝此次请求

       404 资源找不到

       500 服务器内部错误

       501 服务器不支持请求的功能

       502 无效的响应

React面试题

1. react 16.8引入fiber,介绍一些

概念:react fiber 是一种基于浏览器单线程的调度算法;  fiber机制下,节点和树分别使用fiberNode,fiberTree的结构;整个过程由current与workInProgress两棵树双缓存完成;

结构: 双链表的形式; 每个节点都是一个fiber,一个fiber包含了child,parent,sibling; 并且sibling返回 到parent这种结构。

问题: v16之前面临的主要性能问题是,组件的reconcilation算法是递归的;无法中断; 会造成页面卡顿; v16之后引入fiber,会把算法拆分成无数个小任务的算法; 并能够随时停止,恢复;通过requestIdelCallback函数计算空闲时间,来决定是否让出js线程的处理权限;

2. react 16 新的生命周期有哪些变化?

1.react16 新的生命周期弃用了componentWillMount, componentWillReceiveProps, componentWillUpdate钩子

2. 新增getDerivedStateFromProps,getSnapshotBeforeUpdate来替代弃用的三个生命周期钩子;

3. 新增了错误处理的钩子函数 componentDidCatch;结合getDerivedStateFromError; 可以搜集错误

class ErrorBoundary extends React.Component{

    constructor(props){
        super(props)
        this.state = {
            hasError: false,
        }
    }

    getDerivedStateFromError(err){
        return { hasError: true};
    }

    componentDidCatch(err,errInfo){
        logErrorToService(err,errInfo)
    }

    render(){
        if(this.state.hasError){
            return <h1>Error</h1>
        }

        return this.props.children;
    }

}

         

   创建阶段:

        constructor() -> getDerivedStateFromProps  -> render -> componentDidMount

   更新阶段:
        getDerivedStateFromProps ->shouldComponentUpdate-> render -> getSnapshotStateBeforeUpdate -> componentDidUpdate

  卸载阶段:

        componentWillUnmount

3. react diff算法介绍一下

1. react 通过一些优化避免O n^3的复杂的; 分别采用了 tree层级比较; conponent层级比较; element层级比较,降低到O n^1;

2. 同层element通过key对比; 分别打上插入,移动,删除 标签; 然后移动元素算法使用的是仅右移的方式;

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023年端面试题汇总包括以下问题: 1. 请解释下什么是响应式设计(Responsive Design)? 响应式设计是一种设计和开发网站的方法,使其能够在不同设备上提供最佳的用户体验。通过使用媒体查询、弹性网格布局以及其他技术手段,网站可以根据设备的屏幕大小和特性自适应地调整布局和样式。 2. 谈谈你理解的盒模型(Box Model)? 盒模型是指在网页布局中,每个元素都被看作是一个矩形的盒子。它由内容区域(content)、内边距(padding)、边框(border)和外边距(margin)组成。这些部分共同决定了元素在页面中的尺寸、位置以及与其他元素之间的间距。 3. 解释一下什么是跨域(Cross-Origin Resource Sharing,CORS)? 跨域指的是在浏览器发送请求时,当页面所在的域与该请求要访问的资源所在的域不一致。出于安全原因,浏览器会限制跨域请求。CORS 是一种机制,允许服务器在响应中设置一些头部信息,告诉浏览器该服务器允许哪些跨域请求。 4. 如何优化网页的加载性能? 有多种方法可以优化网页的加载性能,以下是一些常见的技术: - 使用浏览器缓存,减少对服务器的请求次数。 - 压缩和合并 CSS 和 JavaScript 文件,减小文件大小。 - 使用懒加载和延迟加载来延迟加载非关键资源。 - 优化图片,使用适当的格式和压缩算法。 - 使用 CDN(内容分发网络)来加速资源的加载。 - 减少 HTTP 请求次数,合并和内联文件。 - 优化服务器响应时间,减少网络延迟。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值