12月30日面试题完善

  1. 李茂志

    • 什么是闭包
      当一个函数内返回另一个函数时,返回的那个函数叫做闭包函数
    • 什么是函数柯里化
      局部套用,利用了闭包的原理,保存了程序的执行结果
    • 什么是函数防抖
      短时间内快速触发同一个事件,执行之前先干掉上一次,保证只执行最后一次(电梯门)
    • 什么是函数节流
      单位时间内,只允许触发一次(地铁闸机口)
  2. 李飞

    • 什么是原型链
      对象调用属性或方法时,先在自身查找,找到了就是使用,找不到就一次向上层原型查找,任意一层找到,就停止并使用,直到顶层,还找不到,就抛出undefined
    • 什么是Event Loop
      Event Loop:事件循环机制
      宏任务:一般用来执行同步程序,和部分异步程序
      所有的同步程序都是宏任务:计时器,dom事件,ajax
      微任务:一般用来执行异步程序抛出的其他功能
      只有部分异步程序是微任务
      微任务一定会在当前宏任务结束后,再开始执行
    • 简单介绍Promise的使用
      promise是为了优化回调地狱的问题,解决异步程序的
      • 作为实例使用:被new执行,创建一个promise实例
        p.then(成功,失败)
        p.catch(所有失败)
        (链式调用)then和catch的回调函数的返回值
        (链式调用的优点)可读性好,方便调错,节省内存
      • 作为对象使用,使用promise的类方法
        promise类的方法:all一个失败为catch,全部成功才执行then
        any()一个成功执行then,全部失败才执行catch
        race(赛跑)只要有一个结束就结束
        allSettled所有的promise都结束,不管成功失败都会触发then,参数为每个实例的状态和数据
        promise.resolve()成功状态的promise
        promise.reject()失败状态的promise
    • 什么是数据劫持,如何实现数据劫持
      拦截数据的访问和修改,在数据被其他程序访问和修改时,执行附带的其他自定义功能
      如何实现:自定义实现:自定义数据的访问方法和修改方法
      get和set关键字
  3. 邹雨楉

    • ES6新增了哪些特性
      声明关键字:let、const、箭头函数、展开运算符、解构赋值、字符的操作方法、反引号、数据类型:symbol、数据结构:set,map、遍历语句for-of
    • 常见的模块化规范有哪些
      ECMAScript前端模块化
      CommonJS后端模块化
    • 如何实现ES6的模块化
      暴露关键字:export{变量名或函数名}可以多次使用
      export default 对象名:只能使用一次
      引入模块关键字:import “文件路径+文件名”
      import{暴露时的名字} from “文件路径+文件名”
      使用了export default暴露时使用:import 任意名字 from “文件路径+文件名”
    • 什么是单例模式,特点是什么
      单个实例,整个应用使用过程中只出现一个实例,就算被多次调用也只有一个实例存在
      特点:节省性能
  4. 杜亚晨

    • 有哪些本地存储技术,及其特点
      localStorage 永久
      sessionStorage 会话级
      cookie 默认会话级,可修改4K 50条
    • 什么是Ajax
      ajax前后端交互的桥梁,可以在前后端中进行数据传输
      优势:可以异步加载新数据,破坏了前进后退功能,破坏了搜索引引擎优化,提高了首屏加载速度
      使用:四步走:创造载体、设置请求、状态监听、发送数据
    • 什么是跨域
      在浏览器中,使用XMLHttpRequest,发起请求时,发起请求方和被请求方没有遵守同源策略并且被请求方没有设置“访问控制允许源”信息,就会被同源策略阻止的情况,就叫跨域
      解决跨域:服务器代理、JSONP、CORS
    • json有什么特点
      • 必须是字符,不能是双引号字符
      • 必须遵守花括号对象或中括号对象形式
      • 如果是花括号对象形式,键必须使用双括号包裹
      • 数据结尾不能出现没有意义的逗号
      • 不允许出现函数,undefined,NaN
  5. 吴志明

    • 什么是服务器代理
      不使用浏览器,使用服务器发起请求
      客户端A,请求服务端B
      搭建临时服务端a,服务端a访问服务端B,客户端a在请求临时服务端A中的数据,即可实现

    • Object.defineProperty和Proxy的区别是什么
      defineProperty只能劫持现有数据,不能劫持之后添加的数据,proxy可以

    • 如何实现闭包

      • 将一个函数作为一个返回值使用叫做闭包
    • Object类身上有哪些常见方法
      Object.defineProperty
      Object.defineProperties

      Object.create创建
      Object.assign合并
      Object.is判断
      Object.setPrototypeOf
      Object.getPrototypeOf

  6. new的原理

    • 创建新对象
    • 改变this指向到这个新函数
    • 将新对象的原型链(proto)指向原函数的原型对象(prototype)
    • 执行原函数内的功能
    • 检测原函数是否主动返回对象,如果没有,返回这个新对象
  7. array类的方法

    • array.from:创建新数组,实现伪转真
    • array.of:弥补new创建数组的缺陷
    • array.isArray:判断数组和对象,返回布尔值
  8. 箭头函数的特点

    • 自身没有this绑定,自动指向外层this
    • 不能被new执行
    • 伤害了代码的可读性
  9. let的声明变量

    • 不会被绑定到window
    • 不允许重复声明
    • 存在块级作用域,一个花括号就是一个作用域
    • 存在暂时性死区
    • 不存在提升
  10. 如何解决跨域问题

    • 服务器代理
    • JSONP:使用网页自带的请求方式,script标签默认会将引入的文本内容作为js代码解析
    • CORS策略:纯后端操作

一、12月30日提问

  1. 尤志轩

    • 什么是原型链(ok)
      对象调用属性或方法时,先在自身查找,找到了就使用,找不到就依次向上层原型查找,任意一层找到,就停止并使用,直到顶层,还找不到,就抛出undefined
    • ES5新增的数组的常见方法(不会)
      pop 末尾删除
      push 末尾添加
      shift 首位删除
      unshift 首位添加
      join 使用连接符
      reverse 翻转数组
      concat 合并数组
      indexOf 数据查索引
      lastindexOf 索引查数据
      slice 截取(开始,结束)
      splice 删除并插入(开始,个数,插入数据)
      sort 排序
      foeach 遍历数据(参数:回调函数)
      map 遍历数组并修改
      filter 遍历数组并筛选数据(参数:回调函数)
      some 遍历数组并验证(遇true即停)
      every 遍历数组并验证(遇false即停)
      reduce
    • 什么是函数防抖和节流
      函数防抖:类似于电梯门,执行下一次之前必须干掉上一次,只执行最后一次
      函数节流:类似于地铁闸机,一定时间内只执行一次
    • Object.defineProperty和Proxy的区别
      defineProperty只能劫持现有数据,不能劫持之后添加的数据
  2. 柳梦蝶

    • 什么是Ajax
      Ajax是前后端交互的桥梁,可以在前后端中相互传输数据,Ajax不是一个技术,他是多个技术的结合
      优势:可以异步加载数据,但是破坏了前进后退功能,破坏了搜索引擎的优化,提高了首屏加载速度,可以提高了用户体验

    • this的常见指向情况
      没有明确隶属对象的函数,被直接执行时,指向window,严格模式指向undefined
      有明确隶属对象的函数,被直接执行时,指向当前对象
      隐式丢失:将有明确的隶属对象的函数赋值给变量或作为参数传入另一个函数,通过新变量或参数执行,此时this会重新指回window
      强制绑定:通过函数(call,apply,bind)强行修改this指向,this指向了指定的内容
      new绑定:通过关键字new执行函数时,this指向new出来的新对象

    • 函数的方法及其区别
      call:第一个参数:要改变的this指向,之后的参数可以传多个,自动执行
      apply:第一个参数:要改变的this指向,第二个参数:一个数组,会自动解析,自动执行
      bind:第一个参数:要改变的this指向,之后的参数可以传多个,按需执行
      区别:
      相同点:call、apply、bind都是改变this指向的,第一个参数都是要改变的this指向,他们都不会改变原数据
      不同点:call和apply都会自动执行并且返回原数值,而bind是按照需要手动执行,返回值是改变this指向后的新函数,call和bind第一个参数之后可以传入多个参数,会传入原函数,被形参接收,而apply只可以传两个参数,第二个是一个数组,他可以自动解析,将解析的数据传入原函数之后被形参接收。

    • 本地存储技术有哪些,特点
      localstorage:5K,永久级
      sessionstorgae:5K,会话级,关闭及结束
      cookie:4K,50条,会话级,可以设置时间

  3. 李婷婷

    • 数组的map和filter有什么区别
      map:遍历数组并修改
      filter:遍历数组并筛选数据(参数:回调函数)
    • 如何实现Ajax请求(不会)
      四步走:
      创造载体 const xhr = new XMLHttpRequset()
      设置请求 xhr.open(“get”, url);
      状态监听 xhr.onreadystatechange = function(){···}
      发送数据 xhr.send()
    • 什么是同源策略
      协议、域名、端口都相同的称为同源策略
    • ES6的模块化规范
      ECMAScript官方
      暴露关键字:export{变量名或函数名}可以多次使用
      export default 对象名:只能使用一次
      引入模块关键字:import “文件路径+文件名”
      import{暴露时的名字} from “文件路径+文件名”
  4. 谷静杰

    • 什么是闭包函数
      当一个函数内返回另一个函数时,返回的函数那个叫做闭包函数

    • 如何实现对象的深拷贝
      深拷贝:地址就是值,值就是地址,不会会改变原数据
      浅拷贝:拷贝的是地址,会改变原数据

    • 如何区分数组和对象和null
      Array.isArray()判断对象还是数组

    • 如何翻转字符
      将字符转成数组,使用reverse
      使用for循环,挨个重新赋值

  5. 马文彪

    • Promise类有哪些方法
      all:一个失败执行catch
      any :一个成功执行then
      race:赛跑
      allSettled 所有的promise都结束,都会触发then
      promise.resolve()成功状态的promise
      promise.reject() 失败状态的promise

    • 如何实现class继承
      改变this指向
      原型对象prototype继承
      原型链继承__proto__继承
      混合继承:改变this指向+原型指向
      ES6新增的class继承:语法层面上的继承,不需要主动处理this或原型指向

    • json的语法要求
      必须是字符,不能是双引号字符
      必须遵守花括号对象或中括号对象形式
      如果是花括号对象形式,键名必须使用双引号包裹
      不允许出现函数和undefined、NaN
      数据结尾不能出现没有意义的逗号

    • 如何获取3天之后的日期对象
      let d2 = new date();
      d2.setDate(d2.getDate()+3);

  6. 张向阳

    • js的数据类型有哪些
      string、number、bouldean、function、undefined、null、Symbol

    • 对象的分类
      宿主对象、内置对象、本地对象

    • 非字符型数据转字符的结果分别是什么
      一般情况套双引号(数值、布尔、undefined、null)
      花括号对象默认转为为[object Object]
      数组将中括号里的内容换成引号

    • 什么是深浅拷贝,如何实现深拷贝
      深拷贝:地址就是值。值就是地址,拷贝的是值,不会改变原数据
      浅拷贝:地址就是地址。值就是值,拷贝的是地址,会改变原数据
      浅拷贝:直接进行赋值修改
      深拷贝:for-in遍历数组、json、展开依次进行拷贝

  7. 字符的方法
    charAt 索引查字符
    indexOf 字符查索引
    slice 截取片段,大于0,从左到右,小于0,从右到左
    substring 截取个数,参2在参1之前,自动调换,小于0,按照0处理
    concat 字符拼接
    replace 查找并替换
    charCodeAt 转unicode编码
    toUpperCase 转大写
    toLowerCase 换小写
    search 根据规则查索引
    match 根据规则查索引

2023/1/3

  1. 吴彦栋
    • 什么是递归(不会)
      在函数内部执行自身,并返回执行结果
    • 什么是闭包,闭包的原理
      在一个函数内部返回另外一个函数,返回的这个函数叫做闭包函数
    • 什么函数柯里化
      局部套用,利用了闭包的原理,保存了程序的执行结果
  2. 李子舰
    • prototype和__proto__分别是什么,有什么区别(不全)
      prototype是原型对象,__proto__是原型链
      区别:当前对象的__proto__必然会指向创建自身的构造函数的prototype
      除了箭头函数之外所有的函数都有原型对象,用来被new自身函数创造出来的对象的__proto__指向
    • 什么是作用域链
      子可以调用父,父不能调用子,兄弟之间不能相互调用,作用域嵌套向上查找,找不到,严格模式下访问设置都报错,非严格模式下,访问会报错,设置自动生成全局
    • 数组的方法有哪些(ok)
      push、pop、shift、unshift、indexof、lastindexof、reverse、map、some、every、foreach、reduce、join、concat、slice、splice、sort、filter
  3. 程帅
    • 非数值数据转数值分别会得到什么(不会)
      true为1,false为0
      null为0
      空数组为0
      有且只有一个能严格(转成数值型数据)的数据的数组,转为当前值
      数组的其他形式,花括号对象,函数,undefined,都是NaN
    • 非布尔数据转布尔分别会得到什么(ok)
      字符:非空字符为true,空字符为false
      数值:非0为true,0为false
      对象,数组,函数都为true
      undefined和null和NaN都是false
    • let和var的区别是什么(ok)
      • 不会被绑定到window
      • 不允许重复声明
      • 存在块级作用域,一个花括号就是一个作用域
      • 存在暂时性死区
      • 不存在提升
  4. 马文昌
    • 什么是数据劫持,如何实现(不全)
      拦截数据的访问和修改,在数据被其他程序访问和修改时,执行附带的其他自定义功能
      如何实现:自定义实现:自定义数据的访问方法和修改方法
      get和set关键字
    • 如何实现ES6模块化(ok)
      暴露关键字:export{变量名或函数名}可以多次使用
      export default 对象名:只能使用一次
      引入模块关键字:import “文件路径+文件名”
      import{暴露时的名字} from “文件路径+文件名”
    • 使用版本管理时,如何本地仓库的版本比远程仓库版本落后,如何将本地上传到远程(不全)
  5. 位江波
    • 面向对象编程的三大特点(不会)
      封装、继承、多态
    • 箭头函数有什么特点
      • 自身没有this绑定,自动指向外层this
      • 不能被new执行
      • 伤害了代码的可读性
    • 字符串有哪些常用方法(不会)
      charAt 索引查字符
      indexOf 字符查索引
      slice 截取片段,大于0,从左到右,小于0,从右到左
      substring 截取个数,参2在参1之前,自动调换,小于0,按照0处理
      concat 字符拼接
      replace 查找并替换
      charCodeAt 转unicode编码
      toUpperCase 转大写
      toLowerCase 换小写
      search 根据规则查索引
      match 根据规则查索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值