zoukankan      html  css  js  c++  java
  • OPPO 2020.08.29 前端笔试

    题目:

    十道选择,几道填空,三道大题

    1. proxy代理;
    2. generator中的yield*;
    3. Number.isNaN()判断;
    4. 正则表达式获取三四级域名(这个我没做出来);
    5. 服务器通过设置什么响应头来设置Cookie,又通过设置什么使cookie不能被js脚本获取;
    6. await,setTimeout的代码选择答案;
    7. js数组API乱炖的代码选择答案;
    8. 临时重定向的响应码(302);什么响应码可以使客户端使用本地缓存(304);
    9. 简答题:URL->浏览器的简单描述;
    10. 代码题:
      1. 输入两个数组,去重后获取最接近平均值的最小值。举例:[1,2,3,4,6],[2,3,4,5],平均值是3.5,result是3;
      2. 不超过5位的数转中文。举例:12345转为一万两千三百四十五。

    解:

    1. proxy代理

    ES6中的代理模式-----Proxy
    Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。
    简单来说:Proxy对象就是可以让你去对JavaScript中的一切合法对象的基本操作进行自定义.然后用你自定义的操作去覆盖其对象的基本操作.也就是当一个对象去执行一个基本操作时,其执行的过程和结果是你自定义的,而不是对象的.
    对于代理模式Proxy的作用主要体现在三个方面:
    1、 拦截和监视外部对对象的访问
    2、 降低函数或类的复杂度
    2、 在复杂操作前对操作进行校验或对所需资源进行管理

    2. generator

    Generator 是 ES6 中新增的语法,和 Promise ⼀样,都可以⽤来异步编程

    // 使⽤ * 表示这是⼀个 Generator 函数
    // 内部可以通过 yield 暂停代码
    // 通过调⽤ next 恢复执⾏
    function* test() {
    	let a = 1 + 2;
    	yield 2;
    	yield 3;
    }
    let b = test();
    console.log(b.next()); // > { value: 2, done: false }
    console.log(b.next()); // > { value: 3, done: false }
    console.log(b.next()); // > { value: undefined, done: true }
    

    从以上代码可以发现,加上 * 的函数执⾏后拥有了 next 函数,也就是说函数执⾏后返回了⼀个对象。每次调⽤ next 函数可以继续执⾏被暂停的代码

    3. Number.isNaN()

    Number.isNaN() 方法确定传递的值是否为 NaN,并且检查其类型是否为 Number。 在 JavaScript 中,NaN 最特殊的地方就是,我们不能使用相等运算符(==) 和 ===)来判断一个值是否是 NaN,因为 NaN == NaNNaN === NaN 都会返回 false。因此,必须要有一个判断值是否是 NaN 的方法。

    和全局函数 isNaN()相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true

    Number.isNaN(NaN);        // true
    Number.isNaN(Number.NaN); // true
    Number.isNaN(0 / 0)       // true
    
    // 下面这几个如果使用全局的 isNaN() 时,会返回 true。
    Number.isNaN("NaN");      // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
    Number.isNaN(undefined);  // false
    Number.isNaN({});         // false
    Number.isNaN("blabla");   // false
    
    // 下面的都返回 false
    Number.isNaN(true);
    Number.isNaN(null);
    Number.isNaN(37);
    Number.isNaN("37");
    Number.isNaN("37.37");
    Number.isNaN("");
    Number.isNaN(" ");
    
    Number.isNaN = Number.isNaN || function(value) {
        return typeof value === "number" && isNaN(value);
    }
    

    4. 正则表达式

    正则表达式

    5. 响应头设置cookie

    ajax请求时是不会自动带上cookie的,要是想让它带上的会,必须要设置withCredentials为true
    有两种方法可以确保 Cookie 被安全发送,并且不会被意外的参与者或脚本访问:Secure 属性和HttpOnly 属性

    • 标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端,因此可以预防 {{Glossary(“ MitM”,“ man-in-the -middle“)}} 攻击者的攻击。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障, 例如,可以访问客户端硬盘的人可以读取它。 从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用Cookie的 Secure 标记
    • JavaScript {{domxref(“ Document.cookie”)}} API 无法访问带有 HttpOnly 属性的cookie;此类 Cookie 仅作用于服务器。例如,例如,持久化服务器端会话的 Cookie 不需要对 JavaScript 可用,而应具有 HttpOnly 属性。此预防措施有助于缓解跨站点脚本(XSS))攻击。
  • 相关阅读:
    《不懂说话你怎么带团队》读书笔记
    Java内存模型与指令重排
    线程的基本操作
    Spring MVC核心技术
    Spring MVC注解式开发
    Spring MVC执行流程
    大厂技术博客汇总
    内嵌tomcat启动速度慢
    Java 对IP请求进行限流.
    Java过滤XSS脚本, 可通过Appscan扫描
  • 原文地址:https://www.cnblogs.com/xym4869/p/13583429.html
Copyright © 2011-2022 走看看