nicenote/source/_posts/前端面试准备.md
2018-05-26 17:58:20 +08:00

7.3 KiB
Executable File
Raw Blame History

title date tags categories
前端面试准备 2017-08-27 10:12:07
面试
web前端

整理一些面试题,以备用

技术分类

JS (行为层)

typeof 返回哪些数据类型

  • obj num fun bool undefined

3种强制类型转换两种隐式类型转换

  • parseInt parseFloat number
  • == - ===

数组方法pop() push() unshift() shift()

  • push() 尾部添加 pop() 尾部删除
  • unshift() 头部添加 shift() 头部删除

ajax请求 get 和 post 的区别

  • 一个在 url 后面,一个放在虚拟载体里面
  • 有大小限制
  • 安全问题
  • 应用不同

call 和 apply 的区别

  • object.call(this, obj1,obj2,obj3)
  • object.apply(this, argument)

ajax 请求时,如何解析 json 数据

  • 使用eval parse介于安全性考虑 使用parse 更靠谱
  • eval 可以解析任何字符串parse只解析json格式的字符串

闭包是什么?

  • 闭包就是能够读取其他函数内部变量的函数

添加 删除 替换 插入到某个节点的方法

  • obj.appendChild()
  • obj.innersetBefore()
  • obj.replaceChild()
  • obj.removeChild()

javascript 同源策略

  • 一段脚本只能读取来自同一来源的穿考核文档的属性,同源:指主机名,协议和端口号的组合

编写一个 b 继承 a 的方法

  function A(name) {
      this.name = name;
      this.sayHello = function(){alert(this.name+ "say hello!")}
  }

  function B(name, id) {
      this.temp = A
      this.temp(name)
      delete this.temp
      this.id = id
      this.checkId = function(ID) {alert(this.id == ID)}
  }

如何阻止事件冒泡和默认事件

  function stopBubble(e) {
      if (e && e.stopPropagation) {
          e.stopPropgation ()
      } else {
          window.event.cancelBubble = true
      }
      return false
  }

谈谈this对象的理解

  • this 是 js 的一个关键字, 随着函数使用场合不同this的值会发生变化
  • 但是有一个原则this 指向的就是调用函数的那个对象
  • this 一般情况下: 是指全局对象global 如果作为方法调用,就指向这个对象

简单讲下 node 的使用场景

  • 高并发,聊天,实时消息推送

node 的优点和缺点提出自己的看法

  • 优点: node是基于时间驱动和无阻塞的所以非常适合处理并发请求因此构建在node上的代理服务器相比其他技术实现的服务器表现要好的多与node代理服务器交互的客户端代码也是用js写的用的相同的语言这感觉前后端非常亲切和美妙

  • 缺点: node是一个相对比较新的开源项目所以不太稳定它总是在变而且缺少足够多的第三方库的支持

常用的一款框架

  • vuejs reactjs jQuery angular

CSS (表现层)

清除浮动

  • 使用clear
  • 使用overflow
  • 使用css的*after

居中设置

1· 水平居中
  • flex布局

设置justify-contentcenter

2· 垂直居中
  • 多行文本(内联元素)

a: 插入 table 再设置vertical-align: middle; b: 先设置display table-cell再设置vertical-align: middle;

  • link除了加载css还能用于定义RSS定义rel链接属性import只能引入css
  • 页面加载时link同时加载而@import引用的css会等到页面被加载完之后再加载
  • import 只在 ie5 以上被识别

css 盒子模型

  • contentpaddingmarginborder

css 选择符号

  • id选择器
  • 类选择器
  • 标签选择器
  • 相邻选择器 +
  • 子选择器 >
  • 后代选择器
  • 通配符选择器 *
  • 属性选择器 a[rel = 'external'])
  • 伪类选择器 hover nth-child
  • 优先级

!important > id > class > tag

HTML (结构层)

什么是语义化的HTML

  • 直观的认识标签,有益于 SEO
  • 有利于开源之后阅读代码的人更容易阅读
  • 便于后期维护和理解

自动化编程

前端自动化工具?

  • gulp
  • webpack

其他

描述一下cookiessessionStorage 和localStorage的区别

  • cookie 在浏览器和服务器之间来回传递SS和LS不会
  • SS和LS 的储存空间更大
  • SS和LS 有更多丰富易用的接口
  • SS和LS 是有各自的储存空间
  • LS 储存是永久性的SS 关闭浏览器就没了

如何实现浏览器内多个标签之间的通信

  • 调用LS Cookies 等本地储存方式

IE6 BUG 的解决办法

  • 双边距float引起使用display
  • 3像素问题float引起 使用displayinline-3px
  • 超链接 hover 点击失效, 注意顺序
  • 无法定义1px左右的宽度容器使用overflowhiddenzoom0.08line-height1px

你有哪些性能优化的方法

  • 减少http请求次数cssjshtml压缩图片大小控制和压缩网页cdn托管data缓存图片服务器
  • 前端模板 js + 数据减少由于html导致的带宽浪费减少请求次数
  • 图片预加载,将样式表放在头部,脚本放在底部,加上时间戳
  • 用innerHTML代替dom操作减少dom操作次数优化js性能
  • 当需要设置的样式很多时设置className而不是直接操作dom
  • 避免在页面的主体布局中使用tabletable要在其中的内容完全下载完之后才会完全显示显示div+css布局慢。普通网站有一个普遍的思路就是尽量向前端化减少数据库操作减少磁盘IO
  • 前端化:在不影响功能和体验的情况下,能在浏览器执行的不要在服务器执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取到的结果不要到外部取,本机能取到的不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询
  • 减少数据库操作指减少更新次数缓存结果减少查询次数将数据库执行的操作尽可能的让你的操作完成减少磁盘IO指尽量不适用文件系统作为缓存减少读写文件次数等。
  • 程序优化永远要优化慢的部分

http 状态码有哪些?分别代表啥意思?

  • 100-199 用于指定客户端相应的某些动作
  • 200-299 用于表示请求成功
  • 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息
  • 400-499 用于指出客户端的错误。

400: 语义有误 401当前请求需要用户验证 403: 服务器已经理解请求,但是拒绝执行他 404页面找不到

  • 500-599 用于支持服务器错误。501 服务器不可用

一个页面从输入 url 到页面显示完成,中间发生了什么?

  • 查找浏览器缓存
  • DNS 解析查找该域名对应的IP重定向301发出第二个 get 请求
  • 进行HTTP 协议对话
  • 客户端发送报头
  • 文档开始下载
  • 文档树建立根据标记请求所需指定mime类型的文件
  • 文件显示
  • 浏览器这边做的工作大致分为以下几步:

加载根据请求的url进行域名解析向服务器发起请求接受文件htmljscss图像等 解析对加载到的资源htmljscss进行语法解析建议相应的内部数据结构比如html的dom树js的属性表css的样式表规则等等

总结

  • 怀着一颗空杯心态去看待事物,这样才会有进步,学无止境,我要走的路还很长