一般人我不告诉他(四)

作者: 张chuner | 来源:发表于2017-02-16 23:06 被阅读122次

    1、HTTP状态码

    100  Continue  继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
    200  OK   正常返回信息
    201  Created  请求成功并且服务器创建了新的资源
    202  Accepted  服务器已接受请求,但尚未处理
    301  Moved Permanently  请求的网页已永久移动到新位置。
    302 Found  临时性重定向。
    303 See Other  临时性重定向,且总是使用 GET 请求新的 URI。
    304  Not Modified  自从上次请求后,请求的网页未修改过。
    400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
    401 Unauthorized  请求未授权。
    403 Forbidden  禁止访问。
    404 Not Found  找不到如何与 URI 相匹配的资源。
    500 Internal Server Error  最常见的服务器端错误。
    503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
    

    2、实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

    Object.prototype.clone = function(){
    
            var o = this.constructor === Array ? [] : {};
    
            for(var e in this){
    
                    o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
    
            }
    
            return o;
    }
    

    3、说说严格模式的限制

    严格模式主要有以下限制:
    (1)变量必须声明后再使用
    (2)函数的参数不能有同名属性,否则报错
    (3)不能使用with语句
    (4)不能对只读属性赋值,否则报错
    (5)不能使用前缀0表示八进制数,否则报错
    (6)不能删除不可删除的属性,否则报错
    (7)不能删除变量delete prop,会报错,只能删除属性delete global[prop]
    (8)eval不会在它的外层作用域引入变量
    (9)eval和arguments不能被重新赋值
    (10)arguments不会自动反映函数参数的变化
    (11)不能使用arguments.callee
    (12)不能使用arguments.caller
    (13)禁止this指向全局对象
    (14)不能使用fn.caller和fn.arguments获取函数调用的堆栈
    (15)增加了保留字(比如protected、static和interface)

    设立"严格模式"的目的,主要有以下几个:
    (1)消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
    (2)消除代码运行的一些不安全之处,保证代码运行的安全;
    (3)提高编译器效率,增加运行速度;
    (4)为未来新版本的Javascript做好铺垫。

    注:经过测试IE6,7,8,9均不支持严格模式。

    4、说说你对AMD和Commonjs的理解

    CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。

    AMD推荐的风格通过返回一个对象做为模块对象,CommonJS的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的。

    5、编写一个方法 求一个字符串的字节长度

    假设:一个英文字符占用一个字节,一个中文字符占用两个字节

     function GetBytes(str){
    
        var len = str.length;
        var bytes = len;
        for(var i=0; i<len; i++){
            if (str.charCodeAt(i) > 255) bytes++;
        }
        return bytes;
    }
    
    alert(GetBytes("你好,as"));
    

    6、git fetch和git pull的区别

    git pull:相当于是从远程获取最新版本并merge到本地

    git fetch:相当于是从远程获取最新版本到本地,不会自动merge

    7、说说你对MVC和MVVM的理解

    MVC

    View 传送指令到 Controller
    
    Controller 完成业务逻辑后,要求 Model 改变状态
    
      Model 将新的数据发送到 View,用户得到反馈
    

    所有通信都是单向的。

    Angular它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。

    组成部分Model、View、ViewModel

    View:UI界面
    
    ViewModel:它是View的抽象,负责View与Model之间信息转换,将View的Command传送到Model;
    
    Model:数据访问层
    

    8、attribute和property的区别是什么?

    attribute是dom元素在文档中作为html标签拥有的属性;
    property就是dom元素在js中作为对象拥有的属性。
    

    所以:

    对于html的标准属性来说,attribute和property是同步的,是会自动更新的,
    但是对于自定义的属性来说,他们是不同步的

    9、说说mongoDB和MySQL的区别

    MySQL是传统的关系型数据库,MongoDB则是非关系型数据库
    
    mongodb以BSON结构(二进制)进行存储,对海量数据存储有着很明显的优势。
    

    对比传统关系型数据库,NoSQL有着非常显著的性能和扩展性优势,与关系型数据库相比,MongoDB的优点有: ①弱一致性(最终一致),更能保证用户的访问速度: ②文档结构的存储方式,能够更便捷的获取数据。

    10、讲讲304缓存的原理

    服务器首先产生ETag,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。

    304是HTTP状态码,服务器用来标识这个文件没修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件
    

    客户端请求一个页面(A)。 服务器返回页面A,并在给A加上一个ETag。 客户端展现该页面,并将页面连同ETag一起缓存。 客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。 服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。

    11、说说网络分层里七层模型是哪七层

    应用层:应用层、表示层、会话层(从上往下)(HTTP、FTP、SMTP、DNS)
     传输层(TCP和UDP)
    网络层(IP)
    物理和数据链路层(以太网)
    

    每一层的作用如下:

    物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
    数据链路层:将比特组装成帧和点到点的传递(帧Frame)
    网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    会话层:建立、管理和终止会话(会话协议数据单元SPDU)
    表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
    

    各种协议

      ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
     TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
     HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
     DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
    

    12、如何删除一个cookie

    1.将时间设为当前时间往前一点。

    var date = new Date();
    date.setDate(date.getDate() - 1);//真正的删除
    setDate()方法用于设置一个月的某一天。
    

    2.expires的设置

    document.cookie = 'user='+ encodeURIComponent('name')  + ';expires = ' + new Date(0)
    

    13、strong,em 和 b,i 标签

    <strong> 标签和 <em> 标签一样,用于强调文本,但它强调的程度更强一些。
    
    em 是 斜体强调标签,更强烈强调,表示内容的强调点。相当于html元素中的 <i>...</i>;
    
    < b > < i >是视觉要素,分别表示无意义的加粗,无意义的斜体。
    
    em 和 strong 是表达要素(phrase elements)。

    相关文章

      网友评论

        本文标题:一般人我不告诉他(四)

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