美文网首页
2019-12-06

2019-12-06

作者: 小螃蟹_5f4c | 来源:发表于2019-12-09 15:39 被阅读0次

    页面布局
    题目1:高度已知,请写出三栏布局,其中左栏和右栏宽度歌为300px 中间自适应
    ① 浮动 左边左浮动 右边有浮动
    ② 绝对定位 定位左边和定位右边 中间left:300 右边left:300
    ③ 中间的flex:1
    ④ display:table-ceil布局
    ⑤ 网格布局
    总结:扩充:
    1、各自优缺点
    2、高度不确定 中间高了两边撑起来 :flex和table-ceil布局能用
    3、兼容性 实际中用哪个

    清除浮动:
    1.在浮动元素的最后添加一个空标签进行clear:both
    2.给父元素触发BFC 比如overflow:hidden
    3.给父元素添加一个伪元素

    .clearfix:after{
      content: '".",
      height:0,
      display: block; 
      visibility: hidden; 
      clear:both
    }
    
     .clearfix {
        *zoom: 1;
    }   /* IE6、7 专有 */
    

    https://www.jianshu.com/p/32b35d3f61a7
    BFC
    规则:
    1、垂直方向的边距会重叠
    2、BFC的区域不会和浮动元素的box重叠(清除浮动)(就是两栏布局的时候左侧浮动右侧高度高于左边 就会占据下面位置 这个时候给右边div一个BFC 即可)
    3、BFC在页面上是独立的容器
    4、BFC计算高度的时候浮动元素也会参与计算
    触发条件
    1、浮动
    2、display:inline-block 等
    3、定位: position:absolute等
    4、overflow:hidden等
    5、flex布局 grid布局
    https://blog.csdn.net/riddle1981/article/details/52126522

    CSS盒模型
    设置:
    box-sizing:content-box 标准(默认)
    box-sizing:border-box IE
    获取:
    dom.style.width 只能获取内联样式
    dom.currentStyle.width 获取解析之后的(IE)
    window.getComputedStyle(dom),width 获取接解析之后的宽度 (webkit)
    dom.getBoundingClientRect().width 返回四个值 (top,left,width,height)

    DOM事件
    事件级别:

    DOM0  element.onclick=function(){}
    DOM2  element.addEventListener("click",function(){},false)  监听最后的参数默认false 表示该事件实在冒泡阶段触发  true则是在捕获阶段触发
    DOM3  element.addEventListener("keyup",function(){},false)
    

    事件模型:
    冒泡和捕获
    事件流:
    捕获->目标阶段->冒泡
    事件捕获流程:
    window->document->html->body->...->目标元素(document.documentElement获取html)
    Event对象:

    event.preventDefault()  阻止默认事件
    event.stopPropagation() 阻止冒泡事件
    event.stopImmediatePropagation() 一个事件绑定多个方法 可在第一个方法中阻止第二个方法的执行
    event.currentTarget 事件委托绑定事件的父元素
    event.target 事件委托的当前被点击的子元素
    

    自定义事件:

    var eve = new Event('custome'); CustomEvent在指定事件名称的时候还可指定Object作为参数
            ele.addEventListener('custome', function(){
                console.log("自定义事件的回调")
            })
            ele.dispatchEvent(eve);
    

    HTTP协议
    http协议的特点:
    无连接:连接一次就会断开
    无状态:两种身份 无法区分身份
    简单快速:
    灵活:
    http报文组成部分:
    请求报文: 请求行、 请求头、 空行、请求体
    响应报文: 状态行、 响应头、 空行、 响应体
    请求行:http方法,请求方法、页面地址、版本
    请求头: key value值告诉服务端需要的内容
    http方法:
    get->获取资源
    post->传输资源
    put->更新资源
    delete->删除资源
    HEAD->获得报文首部
    get和post的区别
    1、get在浏览器回退时是无害的,而post不会再次提交请求(记住)
    2、get产生的url地址可以被隐藏,而post不可以(浏览器收藏功能)
    3、get请求会被浏览器主动缓存,而post不会,除非手动设置(记住 )
    4、get请求只能进行url编码,post支持多种编码方式
    5、get请求参数会被完整保留在浏览器历史记录中 而post参数不会被保留(记住)
    6、get在url中的参数长度是有限制的(2kb),而post没有(记住)
    7、参数的数据类型,get只接受ASCII码 而post没有限制
    8、get比post更不安全 因为参数暴露在url上 不能用来传递敏感信息
    9、get参数通过url传递、post放在请求体中(记住)
    http状态码:
    1:指示信息-表示请求已经接收,继续处理
    2
    :成功,请求已经被成功接收
    3:重定向: 要完成请求必须进行更进一步的操作
    4
    :客户端错误:请求有语法错误或请求无法实现
    5**:服务器错误:服务器未能实现合法的请求
    详细:
    206 客服端发送了一个带有range头的get请求,服务器完成了它
    301:永久重定向
    302:临时重定向
    304:浏览器有缓存
    400:请求有语法错误
    401:请求未授权
    403:访问被禁止(某个网页可能只能被服务器访问)
    404: 请求资源不存在
    500:服务器错误
    503:临时过载,一会会恢复
    持久连接:使用Keep-Alive模式时候,保持客户端和服务器端持续建立连接(http1.1才支持)
    管线化:在持久化连接下,多个请求打包一次发送给服务端 服务端一起打包传回来(http1.1才支持,只有get和head才支持管线化,post有限制 现代浏览器如Chrome和Firefox默认未开启管线化,初次连接是不应该启动,应确保浏览器支持)
    面向对象
    原型链
    创建对象的方法:
    1、字面量、new Object()
    2、自定义构造函数、实例化构造函数
    3、obj = Object.create(obj1) 创建对象obj的原型指向obj1
    (只要是对象, 就是实例 ,使用new 后面的函数就是构造函数)
    所以原型对象上拥有proto属性而不是prototype属性
    instanceof判断实例对象上的proto上的对象和构造函数上的引用对象是否一致 (只要在构造函数原型链上的对象都会返回true)
    new关键字的过程:
    1、创建一个空对,继承自构造函数的prototype
    2、构造函数被执行、传入响应的参数 同时上下文会被指定为新实例
    3、如果构造函数返回了一个“”对象“”如果构造函数没有返回对象 则返回的是步骤一创建的对象
    new运算符的原理:(代码实现)

    function new2(func){ //func为构造函数
        var o = Object.create(func.prototype);
        var k = func.call(o);
        if(typeof k === 'object'){
            return k;
        }else{
            return o;
        }
    }
    function M(){ //M是构造函数
    }
    var obj = new2(M) // obj即为M的实例
    

    面向对象:
    类的声明:
    两种方法 函数式的和ES6的声明(new的时候如果没有传参数 括号可以省略)
    继承:
    1、构造函数继承

    //构造函数实现继承
            function Parent() {
                this.name = "parent"
            }
            Parent.prototype.say = function(){
                console.log(this.name);
            }
            function Child(){
                Parent.call(this);
                this.type = 'child'
            }
    

    缺点:不能继承父类原型上的属性
    2、实例继承:

           function Parent2() {
                this.name = "parent2"
            }
            Parent2.prototype.say = function(){
                console.log(this.name);
            }
            function Child2(){
                this.type = 'child2'
            }
            Child2.prototype = new Parent2();
    

    缺点:子类的所有实例全部继承自同一个对象 如Parent2的name修改了 所有的子类的name都修改了
    3、组合继承

    function Parent3() {
                this.name = "parent3"
            }
            Parent3.prototype.say = function(){
                console.log(this.name);
            }
            function Child3(){
                Parent3.call(this);
                this.type = 'child2'
            }
            Child3.prototype = new Parent3();
    

    缺点:1、这个父类构造函数里面的东西执行了2次 第一次是在call执行的 第二次是在继承的时候执行的
    优化:Child3.prototype = Parent3.prototype;
    优化后的缺点:c3 = new Child3(); c3.constructor === Parent3 (不符合预期,应该是指向Child3)
    再次优化:
    Child3.prototype = Object.create(Parent3.prototype);
    Child3.prototype.constructor = Child3;

    通信
    同源策略以及限制
    限制:
    cookie localstorge和indexDB 无法读取
    DOM无法获得
    ajax无法发送
    前后端通信方式:
    ajax、websoket、cors
    创建ajax:
    XMLHtmlRequest对象的工作流程、兼容性处理、事件的触发条件、 事件的触发顺序
    前后端如何通信
    原生实现ajax
    跨域的几种方式
    JSONP、 CORS、 Hash(url中#号后面的部分。hash改变页面不刷新)、postMessage、webSocket
    原理:
    JSONP...
    hash:

    // A 中
            var B = document.getElementsByTagName('iframe');
            B.src = B.src + '#' + 'data';
    
            //B 中
            window.onhashchange = function(){
                var data = window.location.hash;
            }
    

    postMessage:
    window.postMessage()方法可以安全地实现Window对象之间的跨域通信。例如,在一个页面和它生成的弹出窗口之间,或者是页面和嵌入其中的iframe之间。

    //窗口A给窗口B发消息
            var targetWindow = window.opener; //targetWindow是B窗口的引用
            targetWindow.postMessage('data', "http://B.com");
    
            //B中监听
            window.addEventListener('message', function(event){
                console.log(event.origin); //http://A.com
                console.log(event.source); //Awindow
                console.log(event.data); //data
            })
    

    webSocket:

    let ws = new WebSocket("ws://localhost:8181"); //ws协议 加密的是wxs
                ws.onopen = function() {
                    console.log("client:打开连接");
                    ws.send("client:hello,服务端");
                };
                ws.onmessage = function(e) {
                    console.log("client:接收到服务端的消息 " + e.data);
                    setTimeout(() => {
                        ws.close();
                    }, 5000);
                };
                ws.onclose = function(params) {
                    console.log("client:关闭连接");
                };
    

    https://www.jianshu.com/p/3b5fbc1abc9d
    cors: fetch
    https://www.cnblogs.com/wyy1234/p/9510692.html

    安全
    算法
    排序:快速、选择、希尔
    堆栈、队列、链表
    递归
    波兰式和逆波兰式

    相关文章

      网友评论

          本文标题:2019-12-06

          本文链接:https://www.haomeiwen.com/subject/qewsgctx.html