# 面试基础题

# Html与Css

# 1.html5有哪些新特性

  • 新增了 canvas,video,audio,nav,section,footer,header等元素。
  • 表单控件,calendar、date、time、email、url、search
  • 存储技术:localStorage,sessionStorage等
  • 新的技术:webworker, websocket, SSE

# 2.web标准以及w3c标准

标签闭合,标签小写,不乱嵌套,使用外链形式的css和js,结构层,表现层,行为层分离。

# 3.xhtml和html有什么区别

  • 一个是功能上的差别
  • 主要是XHTML可兼容各大浏览器、手机以及PDA,并且浏览器也能快速正确地编译网页
  • 另外是书写习惯的差别
    • XHTML 元素必须被正确地嵌套,闭合,区分大小写,文档必须拥有根元素
    • 简单的说,xhtml更加严格。

# 4.Doctype作用,严格模式与混杂模式如何区分?它们有何意义?

Doctype处于文档的最前面,用来告诉浏览器的解析器,文档的类型。 严格模式的js运行和排版是按照浏览器支持的最高标准的。 混杂模式就是兼容性模式,当页面兼容不好的时候,就可以选用这种模式,防止页面布局错落无法站点工作。

# 5.行内元素有哪些,块级元素有哪些,空(void)元素有那些?行内元素和块级元素有什么区别?

块级元素独占一行,行内元素合一并行一行

  • 行内元素:a b span img input select strong
  • 块级元素:div ul li ol dl dt dd h1 h2 h3 p
  • 空元素:br hr link meta

# 6.html的全局属性有哪些

  • class:为元素设置类标识
  • data-**:为元素添加自定义属性
  • draggable:设置元素是否可以拖曳
  • id:元素的id,同一个id文档内是唯一的
  • style:元素样式
  • title:鼠标上移显示信息

# 7.canvas和svg的区别

svg绘制出来的图片有独立dom节点,可以绑定事件,是矢量图,放大图片不会有锯齿。 canvas绘制出来的图片是一个画布,等于就是一张图,放大会产生锯齿。

# 8.css sprite是什么,有什么优缺点

就是将多个小图标拼接在一张图片上,减少对图片的请求,使用 background-size来定位到相关图片上。

  • 优点:
    • 减少HTTP请求数,极大地提高页面加载速度
    • 增加图片信息重复度,提高压缩比,减少图片大小
    • 更换风格方便,只需在一张或几张图片上修改颜色或样式即可实现
  • 缺点:
    • 图片合并麻烦
    • 维护麻烦,修改一个图片可能需要从新布局整个图片,样式

# 9.display: none;与visibility: hidden;的区别

  • 他们的作用都是让元素不可见
  • 区别:
    • display:none会让元素完全从 dom 树中消失,渲染的时候不占据任何空间。
    • visibility:hidden不会让元素从渲染树 dom 中消失,而且还是会占据一定的空间,只是内容不可见而已。

# 10.link与@import的区别

  • link是html 的方式,@import是css的方式
  • link最大限度支持并行下载,@import过多嵌套导致串行下载
  • link可以通过rel="alternate stylesheet"指定候选样式
  • 总体来说:link优于@import

# 11.清除浮动的几种方式

  • clear:both,添加一个空标签div
  • 父级div定义伪类:after和zoom
  • 父级div定义overflow:hidden
  • 父级div也浮动,需要定义宽度
  • 结尾处加br标签clear:both

# 12.为什么要初始化css样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化

# 13.css3有哪些新特性

  • 新增各种css选择器
  • 圆角 border-radius
  • 多列布局
  • 阴影和反射
  • 文字特效text-shadow
  • 线性渐变
  • 旋转transform
  • 动画效果

# 14.介绍一下css盒子模型

  • 有两种, IE盒子模型、W3C盒子模型;
  • 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
  • 区 别: IE(低版本)的content部分把 border 和 padding计算了进去;

# 15.css的优先级算法是怎么样的

  • 优先级为: !important > id > class > tag
  • important 比 内联优先级高

# 16.事件模型是什么

w3c中定义的事件发生的过程的3个阶段: 捕获阶段(capturing)、目标阶段(targetin)、冒泡阶段(bubbling)

# 17.什么是事件代理,事件委托

假如我们有一个 ul 列表,里面有4个li,我们可以在 li 上绑定 click 事件,但是也可以在她们的 父节点 ul上绑定,这种在 父节点上绑定事件来代替子节点事件的方法,就叫做事件委托。

# 18.float

  • 清除浮动
  • BFC
  • 块状化

# 19.内联元素

  • ex与x-height
  • line-height 1.5 150% 1.5em 区别
    • 行距半行距
  • verticle-align
  • sub、pub标签实现

# JS

# 1.如何理解闭包

  • 定义和用法: 一个父函数里面包含了一个子函数,子函数调用了父函数内部的变量,如果子函数在外部被调用,就产生了闭包。 简单的说:闭包就是能够读取其他函数内部变量的函数。
  • 闭包的作用:
    • 读取其他函数内部的变量
    • 变量保存在内存中 注意: 使用过多的闭包会消耗大量内存,造成网页的性能问题,可以在函数执行完成之前把不需要的局部变量删除。

# 2.说说你对作用域链的理解

# 3.js原型,原型链有什么特点

# 4.对this的理解

  • this总是指向函数的直接调用者(而非间接调用者)
  • 如果有new关键字,this指向new出来的那个对象
  • 在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的thi s总是指向全局对象Window

# 5.哪些操作会造成内存泄漏

  • 内存泄漏是指 一些对象我们不在使用它的时候,他任然存在
  • setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏
  • 闭包使用不当

# 6.vue、react、angular

# 7.eval是做什么的

  • 它的功能是把对应的字符串解析成JS代码并运行
  • 应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)
  • 由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')

# 8.null和undefine的区别

  • undefine: 表示不存在这个值,如果变量被声明了没有赋值
  • null: 变量被定义赋值了,但是为空的情况,没有任何属性方法和值 在验证null时,一定要使用 === ,因为 ==无法分别null 和 undefined

# 9.对json的了解

  • 是一种轻量级的数据交换格式

  • 数据格式简单,易于读写

  • JSON字符串转换为JSON对象:

    var obj = eval('('+ str +')');
    var obj = str.parseJSON();
    var obj = JSON.parse(str);
    
    1
    2
    3
  • JSON对象转换为json字符串

    var last=obj.toJSONString();
    var last=JSON.stringify(obj);
    
    1
    2

# 10.同步和异步的区别

  • 同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作
  • 异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容

# 11.谈谈对ES6的理解

新增了 字符串模板/箭头函数/for of(遍历对象中的值)/增加了块级作用域

# 12.什么是面向对象的编程和面向过程的编程,他们的异同和优缺点

  • 面向过程就是对一个问题提出解决思路,然后一步步的列出函数解决,依次调用。
  • 面向对象就是将构成问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是- 为了描叙某个事物在整个解决问题的步骤中的行为。
  • 面向对象是以功能来划分问题,而不是步骤

# 13.面向对象的编程思想

基本思想是使用封装,类,对象的方法进行程序设计。

  • 优点:
    • 容易维护
    • 易扩展
    • 开发工作的重用性、继承性高,降低重复工作量。
    • 缩短了开发周期

# 14.函数式编程

它具有以下特性:闭包和高阶函数、惰性计算、递归、函数是"第一等公民"、只用"表达式"

# 15.箭头函数与普通函数的区别

  • this的指向不通

# 16.类型

  • 数据类型 symbol

  • undefined、void(0)区别

  • NaN

    • NaN === NaN // 输出
    • typeof NaN // 输出
  • 数据格式化

    • parseInt、Number、Math.floor 不同点

# 通信原理

# 1.常见的HTML状态码和他的含义

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

# 2.ajax的优缺点

  • 优点:
    • 通过异步模式,提升了用户体验.
    • 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用.
    • Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
    • Ajax可以实现动态不刷新(局部刷新)
  • 缺点:
    • 安全问题 AJAX暴露了与服务器交互的细节。
    • 对搜索引擎的支持比较弱。
    • 不容易调试。

# 3.怎么解决跨域问题

  • jsonp
  • iframe
  • doamin
  • window.postMessage
  • 服务器上设置代理页面
  • cors

# 网站性能优化

# 1.从浏览器地址栏输入url到显示页面的步骤

  • ①浏览器根据请求的URL,交给DNS域名解析,找到真实的ip,交给域名解析。
  • ②服务器交给后端处理完成后返回的数据,浏览器接收文件HTML,CSS,JS图片等。
  • ③浏览器对加载的资源进行语法解析,建立相应的数据内部结构。
  • ④解析html,创建dom树,自上而下的顺序
  • ⑤解析css,优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
  • ⑥将css与dom合并,构建渲染树
  • ⑦布局重绘重排,页面完成渲染。

# 2.sessionStorge , localStorge , cookie之间的区别

  • 数据存储大小

    cookie:4kb webStorge:5mb

  • 数据存储有效期限

    cookie:根据自己的设置时间 sessionStorage:关闭窗口后失效 localStorage:永久有效除非js删除或者浏览器删除

  • 作用域

    cookie和localStorage是在同源窗口,同一个浏览器共享的,sessionStorage只在同一个标签页共享。

# 3.请指出document load和document ready的区别?

  • ready:页面的文档结构加载完成,不包括图片视频等非文字内容。
  • load:所有页面元素都加载完成
  • ready的速度比load快

# 4.渐进增强和优雅降级

  • 渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
  • 优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容

# 5.base64的原理及优缺点

  • 优点可以加密,减少了http请求
  • 缺点是需要消耗CPU进行编解码

# 6.内存

  • arr = [] 与 arr.length = 0 区别
  • 垃圾回收机制
  • 回收触发时机

# Vue

1.v-for中为什么要绑定key值
  • 为了跟踪每个节点的身份,从而重用和重新排序现有元素
  • 默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染
2.什么是具名插槽、作用域插槽
3.计算属性的getter、setter有什么用
  • setter给计算属性赋值时会调用
4.methods中可以使用箭头函数吗,为什么?
  • 不能,无法获取到vue实例
5.组件传值有哪些方法
最后更新时间: 4/12/2023, 1:33:02 PM