前端面试经

Posted yang656

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试经相关的知识,希望对你有一定的参考价值。

 <!--dom事件级别-->
    // dmo0
    element.onclick=function () {};
    //dom 2
    element.addEventListener(click,function () {},false)

    //dom3
    element.addEventListener(keyup,function () { },false)

    // 事件模型
    /*   捕获 --> 自上而下
    *    冒泡--> 自下而上
    * */

    // 事件流
/* 三个阶段
*   捕获--->目标元素 ---> 冒泡
*
* */

// 描述dom 事件捕获的具体流程
    /*
    *       window -----> document ----->html ----> body -----> 普通元素的层级获取
    *       冒泡: ---->反向上面部分
    * 如何获取HTML这个节点 ---->document.getelement
    *
    * */
    // Event 对象常见应用
    /*
    *       event.preventDefault() // 阻止默认事件
    *       event.stopProgation()   // 阻止冒泡
    *       event.stopImmediatePropagation() // 事件响应优先级
    *       event.currentTarget()  // 处理事件委托  多个子级元素,判断被点击的是谁
    *       event.target() // 当前被绑点的元素
    * */
    // 自定义事件   || 模拟事件

    var eve = new Event(sugar);
    ev.addEventListener(sugar,function () { //sugar 事件名称
        console.log(eve)
    })
    ev.dispatchEvent(eve)
/*  捕获阶段
*  var sugar = document.getElementById(‘sugar‘)
        window.addEventListener(‘click‘,function () {
                console.log(‘winodw捕获到了事件‘)
        },true); // true 表示捕获阶段触发
        document.addEventListener(‘click‘,function () {
            console.log(‘document捕获到了事件‘)
        },true);
        document.documentElement.addEventListener(‘click‘,function () {
            console.log(‘HTML捕获到了事件‘)
        },true)
        document.body.addEventListener(‘click‘,function () {
            console.log(‘body捕获到了事件‘)
        },true);
        sugar.addEventListener(‘click‘,function () {
            console.log(‘div捕获到了click事件‘)
        },true)
*
*
*
* */
<!--Http协议类型-->
    /*
    * 1.http 协议的主要特点
    * 2.http 报文的组成部分
    * 3.http方法
    * 4.post 和get 的区别
    * 5.http状态码
    * 6.什么是持久连接
    * 7.什么是管线化
    *
    * */
// 1.http 协议的主要特点
    /*
    * 1.简单快速 // 直接输入url访问文件
    * 2.灵活     // 通过一个http协议完成不同数据类型传输
    * 3.无连接   // 连接一次就会断开  不会保持连接
    * 4.无状态   // 第一次和第二次连接 http协议是无法判断身份
    *            // 服务端可以通过session来判断
    *
    * */
    // 2.http 报文的组成部分
    /*包含两个部分——请求报文    响应报文
    Request   Response
    *       请求报文{
    *           1.请求行  --> http方法 页面地址 http协议以及版本
    *           2.请求头 -->  key value 等  告诉服务端需要请求哪些数据
    *           3.空行   --> 告诉服务端该用请求体来解析
    *           4.请求体
    *       }
    *       响应报文{
    *           1.状态行
    *           2.响应头
    *           3.空行
    *           4.响应体
    *       }
    * */
    // 3.http方法
    /*
    * pst ---> 传输资源
    * get ---> 获取资源
    * put ----> 更新资源
    * delete ---> 删除资源
    * head ---> 获取报文首部
    *
    * */
    // 4.post 和get 的区别
    /*
    * 1.get在浏览器回退时是无害的,而post则会再次请求
    * 2.get 产生的url地址是可以呗收藏的,post则不可以
    * 3.get请求会被浏览器主动缓存,post不会主动缓存
    * 4.get请求只能进行url编码,post支持多种编码格式
    * 5.get请求参数会被完整保存在浏览器历史记录中,post的参数不会被保存
    * 6.get请求在url中传输的参数有长度限制,post没有
    * 7.对参数类型的限制:get只接受ascll字符,post没有限制
    * 8.post比get更安全,get参数直接暴露在url上面
    * 9.get参数通过url,post则是在Request body中
    *
     *  */
    // 5.http状态码
    /*
    * 1xx : 指示信息  表示请求已经接收,继续处理
    * 2xx :成功   表示请求已经被成功接收
    * 200 请求成功  206 客户发送了一个带有Range头的get请求  服务器完成了
    *
    * 3xx :重定向  完成请求必须进行更进一步的操作
    * 304 :读取缓存  也算成功  301(永久) 302(临时) 所请求的页面转移到了新的url
    * 4xx : 客户端错误   请求由于发错误或者无法实现请求
    * 5xx : 服务器错误   服务器不能实现合法的请求
    * */
    // 6.什么是持久连接
    /*  http1.1后版本可以使用
    * http协议采用‘请求-应答’模式,当使用普通模式,每个请求/应答 客户和服务器都要
    * 重新简历一个连接,完成后立即断开 (http协议为无连接的协议)
    *
    * 当使用Keep-Alive模式时(持久连接或者连接重用),Keep-Alive功能使客户端到服务器端的连接
    * 持续有效,比秒了重新连接或者建立
    * */
    // 7.什么是管线化
    /* http1.1后支持


    * 在使用持久连接的情况下
    * 请求-响应 请求- 响应 请求- 响应   是没有中断的
    *
    * 管线化请求下: 直接打包集体传输和返回
    * 请求1 请求2 请求3   响应1 响应2 响应3
    *
    *   服务端得支持管线化
    *
    * */
/*



    * 1.创建对象有几种方法
    * --> 原型
    * --> 构造函数 任何一个函数被new使用 都可以叫构造函数
    * --> 实例
    * --> 原型链
    *
    * instanceof 的原理
    *
    *  new 运算符
    * */
// 创建对象有几种方法
/*    //1
    var sugar = { name:‘sugar‘ }
    var sugar1 = new Object({ name:‘sugar1‘});
    //2
    var Su = function () {
        this.name = ‘Suo‘
    };
    var Suo = new Su();
    //3
    var huahsneg = { name:"sugar" };
    var sugar=Object.create(huahsneg)*/
// 原型对象
/*
*          构造函数  constructor<----->prototype   原型对象 ---->_proto_  原型对象
*                       new       /   _proto_
*                                实例
*

*
* */

    /*
    * 1.渲染机制
    * 2.js运行机制{
    *   队列任务和Event Loop
    * }
    * 3.页面性能
    * 4.错误监控
    *
    * */
// 1.渲染机制
    /*
    * --> 什么是DOCTYPE以及作用
    * ---> 浏览器渲染过程
    * ---> 重排Reflow
    * ---> 重绘 Repaint
    * ---> 布局Layout
    *
    * */
// --> 什么是DOCTYPE以及作用
/*
*   网页采用html5,<!DOCTYPE> 声明位于文档中的最前面的位置,
*   处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。
    这个标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的
    HTML 文档。
* */
// ---> 浏览器渲染过程
/* 参考  https://www.cnblogs.com/slly/p/6640761.html
*
*   解析渲染DOM 自上而下
*
* */
// ---> 重排Reflow
/*
*   一个页面由两部分组成:
    DOM:描述该页面的结构
    render:描述 DOM 节点 (nodes) 在页面上如何呈现
*
*
*   1.解析HTML代码并生成一个 DOM 树。
    2.解析CSS文件,顺序为:浏览器默认样式->自定义样式->页面内的样式。
    3.生成一个渲染树(render tree)。这个渲染树和DOM树的不同之处在于,它是受样式影响的。它不包括那些不可见的节点。
    4.当渲染树生成之后,浏览器就会在屏幕上“画”出所有渲染树中的节点。
*
* 下列情况会发生重排 重绘{
*       页面初始渲染
        添加/删除可见DOM元素
        改变元素位置
        改变元素尺寸(宽、高、内外边距、边框等)
        改变元素内容(文本或图片等)
        改变窗口尺寸
*   }
*
*   如何减少重排
*   1.分离读写操作
*   2.样式集中改变
*   3.可以使用absolute脱离文档流
*   4.使用 display:none ,不使用 visibility,也不要改变 它的 z-index
*   5.能用css3实现的就用css3实现
* */
// ---> 重绘 Repaint


    // 2.js运行机制
    /*  1. js属于单线程 {
            一个时间只能做一个事情
            自上而下执行,
            优先顺序: 同步任务处理完成后 ---> 异步任务
    }
        2. 任务队列 {
            同步任务    console  -->  同步任务
            异步任务    setTimeout  --> 属于异步任务
        }
    *   console.log(1);
        setTimeout(function () {
                console.log(2)
            },0);
         console.log(3)
    *   ///  1  3   2
    *
    *       console.log(‘A‘);
             setTimeout(function () {
                  console.log(‘B‘)
             },0);
             while(true){
            }
    *   // 输出 A   任何异步操作都在同步执行完毕以后再执行
    *
    *
    *    for(var i=0;i<4;i++){
    *    // for循环 遇到setTimeout,没有直接进入异步队列中就+1  等到1秒后再把语句放入异步队列中
            setTimeout(function () {
                console.log(i);
             },1000)
         }
    *
     * */
// 异步任务
    /*
    * 1.setTimeout  setInterval
    * 2.dom 事件
    * 3.Promise
    * */

 

以上是关于前端面试经的主要内容,如果未能解决你的问题,请参考以下文章

一年半经验的前端面经总结

面经系列一线互联网大厂前端面试技巧深入浅出总结

前端面试CSS系列——DIV垂直水平居中

熬夜肝完了,腾讯前端,Java,C++,Go面经汇总(全)

熬夜肝完了,腾讯前端,Java,C++,Go面经汇总(全)

阿里巴巴前端实习面经总结(可内推)