面试题 总结

247 阅读8分钟
/** 1 MVVM的理解
    model 数据模型 定义数据修改和操作业务的逻辑
    view  视图  UI组件展现数据模型。
    viewModel  监听模型数据改变 控制视图行为  处理用户交互,通过数据双向绑定,将view和model连接起来。 不需要开发者操作自动完成。
*/

/**2 vue简述生命周期
    从创建到销毁的过程
    创建前后
    1 beforeCreate   没有data数据  
    2 created        初始化data数据
    3 beforeMount    dom挂载前
    4 mounted        dom挂载完成 
    5 beforeUpdate   虚拟dom更新之前
    6 updated        组件dom更新
    7 beforeDestroy  实例销毁之前
    8 destroyed      实例所有东西解绑  监听移除 
*/

/**3 v-show  v-if
    v-if 条件渲染 子组件的渲染和销毁  惰性 只有条件true才会渲染
    v-show display block 和 none 切换
    v-show 初始渲染开销  v-if 切换开销  
    频繁切换使用v-show
*/

/**4 组件间通讯
     1 父子组件
     props  $emit 
     ref用在子组件上 指向就是实例组件    $childern  $parent 
     2 隔代组件
     $arrts v-bind 
     3 兄弟组件

     $bus 通用 数据总线
     vueX 通用 状态管理模式 store 
*/

/**5 keep alive 可以是包含的组件保留状态
     生命周期  active  deactive
     使用场景  列表 跳转 里面的详情 每次返回列表 不能重新渲染  
*/

/** 6 如何实现双向数据绑定
     1 监听器
     Object.defineprotety  添加 get 和 set 方法
     2 解析器
     解析view中的模板指令  模板都替换成 数据 绑定数据监听函数 
     3 订阅者
     当数据发生变化 触发解析器中的 更新函数
     4 订阅器  发布订阅
     对解析器和订阅器统一管理
*/

/** 7 对VUEX 的理解
      状态开发管理
      store
      state 状态
      getter 可以获取状态
      mutation 更改状态
      action 异步提交mutation
      module 状态的拆分
*/

/**8 DNS工作原理


*/

/** 9 GET POST 区别
    1 传输方式不同 url传输 和 请求体传输
    2 安全性不同   post安全  url中 历史记录和缓存 很容易泄露
    3 数据类型  get 阿斯科码和字符  post无限制
    4 get无害  post 可能造成 重复提交表单
    5 
*/

/**10 http状态码
   1  2开头成功 200 正确处理 201 请求实现 202 请求接收 不保证完成 204  206范围请求
   2  3重定向  301 
   3  4开头 客户端错误 400请求头  403 服务器拒接  404 不存在
   4  5开头 服务器错误 500 执行错误   501 服务器不支持的  503服务器无法处理   505 不支持请求
*/

/**11 css预处理的比较 
     less  sass stylus
     区别 变量  
*/

/**12 优雅降级  渐进增强
    优雅降级 先完成功能,在去兼容
    渐进增强 先兼容低级
*/

/**13 输入url 显示页面发生了什么
    1 输入URL
    2 浏览器查看 浏览器缓存 系统缓存 路由器缓存  如果有就显示 没有就第三步
    3 域名解析 DNS解析 (可以将域名和IP互相映射)
    4 浏览器拿到IP 向服务器发起TCP 3次握手 
    5 成功之后浏览器向服务器发起请求
    6 返回数据包
    7 客户端收到响应
    8 读取页面内容 解析html源码
    9 生成dom树 渲染页面
*/

/**14 TCP 3次握手
    1 客户端发送连接请求报文 syn位置为1  Sequence Number 序列号设置为x 进入 syn_send状态 
    2 服务器 收到报文  设置Acknowledgment Number 确认号为 x+1 同时自己发送给一个syn=1  Sequence Number 序列号设置为y  进入syn_recv状态
    3 客户端收到后   设置Acknowledgment Number 确认号为 y+1 向服务发送 ack报文段
    完成连接 传输数据 完成后 4次挥手
*/

/**15 xss攻击的了解
    黑客在浏览器插入恶意js脚本 盗取信息 冒充操作
    类型 1 反射型 url中
         2 DOM型  前端js 安全漏洞
         3 存储型 持久性 js代码长期保存 数据库中

    盗取cookie 渗透内网 插入广告

    防止1 一切用户输入加入验证
        2 元素url请求加入 编码
        3 白名单 验证 域名
        4 使用csp 内容安全策略 定于白名单
        5 cookie 设置只读

*/

/**16 csrf攻击 跨站请求伪造
    利于网站权限校验
*/

/**17 浏览器
    谷歌 火狐 苹果 欧朋
    渲染引擎 
    js引擎 v8  
*/

/**18 event-loop  时间循环
    js执行机制  先执行 同步代码 在执行异步代码  异步代码 中先执行 微任务 在执行宏任务
*/

/**19 Promise
    解决 嵌套函数过深 回调地狱  代码难以维护和难以理解
    3个状态 pending  等待    resolve 完成  reject 拒绝
    返回 promise 对象
    缺点 无法取消
*/

/**20  深拷贝和浅拷贝
    在js中包含 
    基本类型 (栈)string number null undefined boolean symbol  
    引用类型 (堆) 数据结果 object  array function 
    指针存放在栈中,指针指向同一个堆内存中的对象

    浅拷贝:创建一个新对象 有 原始对象的属性值的精确拷贝 如果是基础类型 就是 这个值 如果是 引用类型 拷贝的是指针(会影响另一个对象)
    方法
    深拷贝:在堆内存中开辟一个空间存放新的对象。
    方法 1 JSON.string()然后JSON.parse()  无法拷贝原型链 
         2 第三方库
         3 递归
*/
/**21 简历
     1 你是谁
     2 你做了什么
     3 你哪方面比较厉害


    个人信息  姓名 电话 邮箱 微信 博客
    教育经历  学校 专业 入学时间 毕业时间
    工作经历  1 公司名称  2 职位名称  3 在职时间  4 主要工作 (2-3个)
    项目经历  做了什么事情 用了什么技术  解决了什么问题   (如果没有突出 就写 遇到的问题,排查 定位 解决。产出的东西,代码规范,设计的工具。)
    专业技能  掌握的技术栈 了解(会使用,用过,了解其思想,没有深入了解) 
                           熟悉 (大量时间 阅读源码)
                           精通 (深入了解源码,可以指导他人,大量实践经验)
    社区 github 掘金 英语  兴趣爱好 沟通能力
    简历排版  能1页就1页  留白原则(间隔) 标准字体(宋体) 模板 黑白蓝灰


    排序  个人信息 工作经历  项目经历 专业技能  其他
*/


/**22 SSR 服务端渲染    和 客户端渲染的区别
        spa 单页面应用 页面之间切换快,减少服务端压力,缺点是首页加载慢
        sdu 搜索引擎优化 
        ssr 服务端渲染  有更快的响应时间 解决 搜索引擎优化。
*/

/**23 跨域 
    同源策略:(同域:协议,主机,端口号)一种约定,安全功能。
    1 image src 可以跨域
    2 link标签  href
    3 script src 
    这3个跨域

    跨域 问题  1 无法读取cookie localstage  
               2 dom 无法读取
               3 ajax不能发送

    方法  1 JSONP 原理  script src  执行回调函数 获取数据  有点 兼容性好,缺点 只能get
          2 cors 跨域资源共享 w3c标准 原理 通过服务器  设置  header allow 可以跨域
          3 通过修改 document 
          4 使用window.name   
          5 window.postman
*/

/** 24 em  rem px 区别
    px 像素 固定大小单位  1px = 屏幕分辨率最小单位
    em 相对长度单位 1em默认16px font-size = 62.5  1em=10px
    rem 出现解决em问题 用于自适应布局 
*/

/** 25 防抖节流 解决用户频繁操作对内存消耗,服务器压力的方案
       防抖 任务频繁触发 只有任务间隙 小于预设时间 才会触发
       节流 持续触发的时候  一定时间内置调用一次 执行时间处理函数
*/

/**26 性能优化  雅虎35条军规
    1 减少http请求 80%的时间都浪费在 资源的请求上
    2 样式表css  放在head中 减少白屏时间 减少 css表达式
    3 js脚本要放在页面底部 
    4 避免重定向
    5   1合并js和css 2雪碧图 css通过位置获取图片 3服务器使用cdn 减少请求时间 4启用zip压缩
*/

/**27 宏任务 和 微任务 
    JS 是单线程的 一个人在操作
    同步代码先执行
    异步代码后执行

    微任务先执行
    宏任务后执行


*/

/** 28 定时器  不少于4毫秒 到时间后放入主线程 
    主线程结束之后 才能 去轮训 执行定时器 所以 定时器的时间会大于设定时间。
*/

/**29 微任务 典型代表promise

*/
/**30 HHTP缓存 加快资源的获取速度 提升用户的体验,减少服务器的压力
        1 强缓存 不需要想服务器请求就可以获取
            1 放到硬盘中
            2 放到内存中 
            通过 请求头 响应头 设置 (过期时间)
        2 协商缓存

*/
/**31 堆栈 数据类型
        1 堆 通常指 2叉堆  
        2 栈 
*/