一、HTML5新特性

本地存储 webStorage websocket webworkers
新增地理位置等API
对css3的支持
canvas
多媒体标签
新增表单元素类型
结构标签:header nav article aside footer
表单标签:email url range date
媒体标签:video audio
……

二、CSS3新特性

圆角:border-radius
阴影:box-shadow
背景渐变:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Using_CSS_gradients
弹性盒布局:https://www.jianshu.com/p/5856c4ae91f2
过渡
动画
2D/3D转换
新增的属性和选择器
……

三、webstorage和cookie的区别

1、容量:cookie 4k,webStorage 5M。
2、存储时长:localStorage 长期存储,sessionStorage 基于单次会话存储,cookie 必须设定存储时长。
3、和服务器交互:cookie信息会在和服务器做交互时 默认发送到服务端;webStorage 只会存储在本地。

四、实现响应式布局几种方式

布局的几种方式:静态布局、自适应布局、流式布局、响应式布局、弹性布局。

响应式布局原生代码,媒体查询:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media_queries,说明bootstrap等框架的应用。

五、jsonp原理

允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

参考:《彻底弄懂jsonp原理及实现方法》https://www.cnblogs.com/soyxiaobi/p/9616011.html

六、闭包

一个可以访问另一个函数中的变量的函数。当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行就产生了闭包。
参考:
1、闭包 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
2、彻底搞懂JS闭包各种坑 https://www.jianshu.com/p/26c81fde22fb

七、js的垃圾回收机制

基本的垃圾回收算法称为“标记-清除”,定期执行以下“垃圾回收”步骤:

1、垃圾回收器获取根并“标记”(记住)它们。
2、然后它访问并“标记”所有来自它们的引用。
3、然后它访问标记的对象并标记它们的引用。所有被访问的对象都被记住,以便以后不再访问同一个对象两次。
4、以此类推,直到有未访问的引用(可以从根访问)为止。
5、除标记的对象外,所有对象都被删除。

参考:https://segmentfault.com/a/1190000018605776

八、浏览器缓存机制

在 Header 内的字段用于控制缓存机制 老方法 Expires,记录的绝对值 新方法 Cache-Control 多了一堆选项,记录的时间是相对值 获取缓存检测缓存是否过期,如果没过期取缓存,优先从内存,其次硬盘,如果过期,则与服务器协商缓存是否仍然可用,如果不可用则获取,可用取缓存。

参考:https://juejin.im/entry/5ad86c16f265da505a77dca4

九、js 本地对象、内置对象和宿主对象

本地对象包括如下内容:Object、Function、String、Array、Boolean、Number。
内置对象:Math。
宿主对象:BOM/DOM对象。

十、http 请求流程

参考满分回答:https://blog.csdn.net/wolf_love666/article/details/93600904

十一、vue与react区别,优缺点

参考:https://segmentfault.com/a/1190000016344599

十二、vue双向绑定原理

已经了解到vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的,无疑这个方法是本文中最重要、最基础的内容之一,要实现mvvm的双向绑定,就必须要实现以下几点:

  1. 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者。
  2. 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数。
  3. 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图。
  4. mvvm入口函数,整合以上三者。

defineProperty参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

十三、http常见状态码

状态码 含义
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

十四、js继承类的方式

原型链继承、借助构造函数继承、原型式继承、经典继承、寄生式继承等等。

十五、this有哪几种指向

this的4种指向:
1、全局环境:window
2、对象环境:对象
3、构造函数环境:实例对象
4.、事件对象:调用者
总结:谁调用指向谁。
两种改变指向的方式:
1、call/apply 方式
2、定义局部变量的方式:var that = this;

十六、es6有哪些新特性

let,const,箭头函数,展开符,解构赋值,对象语法糖,字符串模板

十七、webpack相关配置属性

入口出口文件:

  1. entry: {
  2. index: __dirname + '/src/main.js', // __dirname表示当前项目的根路径。
  3. goods: __dirname + '/src/goods.js'
  4. },
  5. output: {
  6. path: __dirname + '/dist',
  7. filename: '[name].js'
  8. },

http代理:

  1. devServer: {
  2. contentBase: __dirname + '/dist',
  3. port: 3000,
  4. inline: true,
  5. // 每当我们访问/a地址的时候,就把请求转发给target地址的服务器。
  6. proxy: {
  7. '/a': {
  8. target: 'http://xushanxiang.com:3000',
  9. secure: false,
  10. changeOrigin: true
  11. }
  12. }
  13. }

资源地图:devtool: ‘source-map’

本地web服务配置:

  1. npm i webpack-dev-server@2.9.7 -g
  2. // 安装的webpack-dev-server模块配置信息
  3. devServer: {
  4. contentBase: __dirname + '/dist', // 指定本地web服务器根路径
  5. port: 3000,
  6. inline: true // 当源文件改变后,自动在浏览器页面刷新
  7. }

提取css 文件:

  1. npm i extract-text-webpack-plugin -D
  2. // webpack.config.js
  3. let Ext = require('extract-text-webpack-plugin');
  4. module: {
  5. rules: [
  6. { test: /\.css$/, loader: Ext.extract('css-loader') },
  7. { test: /\.less$/, loader: Ext.extract('css-loader!less-loader') }
  8. ]
  9. },
  10. plugins: [
  11. new Ext('index.css')
  12. ],

webpack配置别名

  1. resolve:{
  2. //配置别名,在项目中可缩减引用路径
  3. alias: {
  4. vue$: 'vue/dist/vue.esm.js',
  5. '@': resolve('src'),
  6. '&': resolve('src/components'),
  7. 'api': resolve('src/api'),
  8. 'assets': resolve('src/assets')
  9. }
  10. }

十八、模块化

  1. nodejs使用的是commonjs规范
  2. 注意: nodejs虽然原生支持es6 但它并不支持 es6import规范
  3. 导入:
  4. let xx = require("xxx")
  5. 导出:
  6. //一个文件内只能使用一次
  7. module.exports = Object | Function | Array | String | Number | Boolean
  8. //一个文件可以使用多次
  9. exports.xxx = Object | Function | Array | String | Number | Boolean
  10. 下列写法不被允许 它会改变exports对象的引用导致程序运行出错
  11. exports = {
  12. xxx : "text"
  13. }
  14. es6import规范
  15. 方式1
  16. 导入:
  17. import XXX from "xxx"
  18. 导出:
  19. export default xxx
  20. 该种方式一个文件内只能使用一次
  21. 方式2
  22. 导入:
  23. import {XXX} from "xxx"
  24. import {XXX as YYY} from "xxx" //将模块XXX给个别名为YYY
  25. 导出:
  26. export let | const | var | function | class | interface XXX = ....
  27. 或者
  28. let(可以是其他声明符) XXX = ....
  29. export {XXX}
  30. 上述导出方式可以在同一个文件内使用多次
  31. 还有AMD规范和CMD规范

十九、什么是观察者模式

也称:发布订阅模式。
当对象间存在一对多关系时,这个对象的状态发生改变,则会自动通知它的依赖对象,进行广播通知。
比如:vue中子组件向父组件传值,子组件使用$emit自定义一个事件名称,父组件接收这个事件即可。还有中央事件总线 emit on。

二十、什么是mvc mvp mvvm

M 为数据层,V 视图层,C 逻辑层。

MVP(Model-View-Presenter)是MVC的改良模式,由IBM的子公司Taligent提出。和MVC的相同之处在于:Controller/Presenter负责业务逻辑,Model管理数据,View负责显示只不过是将 Controller 改名为 Presenter,同时改变了通信方向。

在MVP中,View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。

MVVM = MVP + 新特性(bind等)

二十一、怎么解决浏览器兼容问题

  1. 1、默认paddingmargin不同
  2. 解决:自定义初始化css
  3. 2、在一个div中放一个img,但是img的下方和div之间有3px的间隔。
  4. 这是浏览器的解析问题,不同的浏览器间隔的还不同。
  5. foxfire5pxchrome3px
  6. 解决:/*方式一*/
  7. div {font-size: 0;}
  8. /*方式二*/
  9. img{display: block;}
  10. /*方式三*/
  11. img{vertical-align: top;}
  12. 3、几个img标签放在一起的时候,有些浏览器会有默认的间距
  13. 解决:使用float属性为img布局
  14. 4、解决 ie9 以下浏览器对 html5 新增标签不识别的问题。
  15. 引入html5shiv.js文件
  16. 5、针对IE属性 css hack
  17. 6、-ms- -o- -webkit- -moz-
  18. 7、清除浮动 clearfix
  19. 8、边距重叠
  20. 解决:加一个父元素,父元素使用overflow: hidden;
  21. 9IE9不能使用opacity
  22. opacity: 0.5;
  23. filter: alpha(opacity = 50);
  24. filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

二十二、如何进行性能优化,缩短页面加载时间

1、减少http请求
2、使用cdn加速
3、添加Expires头
4、将样式css放在头部,脚本script放在底部
5、使用外部的JavaScript和CSS
……

二十三、实现原生ajax的步骤

  1. let xhr = new XMLHTTPRequest();
  2. xhr.open('get', 'xxx.php?id=1',true);
  3. xhr.send()
  4. xhr.onreadystatechange = function() {
  5. if(this.readyState == 4 && this.status == 200) {
  6. console.log(this.response)
  7. }
  8. }

比较jQuery ajax、fetch、axios

二十四、Vue

  • 如何创建全局组件和局部组件
  • 如何定义props
  • 如何对props进行类型验证
  • 什么是计算属性
  • 数据监听(watch)
  • 常用指令 v-if v-show 循环迭代
  • 定义过滤器 (局部 全局)
  • 进行组件间通信的方式
  • slot 内容插槽
  • v-for的key作用
  • vue-router
  • vuex
  • ……

二十五、函数的节流和防抖

类型 概念 应用
节流 事件触发后每隔一段时间触发一次(可触发多次) scroll,resize事件一段时间触发多次
防抖 事件触发动作完后,过一段时间触发一次 scroll,resize事件触发完后一段时间触发

节流

  1. // html 部分
  2. <style>
  3. *{padding:0;margin:0;}
  4. .scroll-box{
  5. width : 100%;
  6. height : 500px;
  7. background:blue;
  8. overflow : auto;
  9. }
  10. .scroll-item{
  11. height:1000px;
  12. width:100%;
  13. }
  14. </style>
  15. <body>
  16. <div class="scroll-box">
  17. <div class="scroll-item"></div>
  18. </div>
  19. </body>
  20. // js 部分
  21. let throttle = function (func, delay) {
  22. let timer = null;
  23. return function(){
  24. if (!timer) {
  25. timer = setTimeout(() => {
  26. func.apply(this, arguments);
  27. // 或者直接 func()
  28. timer = null;
  29. }, delay);
  30. }
  31. };
  32. };
  33. // 处理函数
  34. function handle() {
  35. console.log(arguments)
  36. console.log(Math.random());
  37. }
  38. // 测试用例
  39. document.getElementsByClassName('scroll-box')[0].addEventListener("scroll", debounce(handle,3000));

防抖

  1. // html 部分同上
  2. // js 部分
  3. let debounce = function (fn, wait) {
  4. let timeout = null;
  5. return function () {
  6. if (timeout !== null) clearTimeout(timeout);//如果多次触发将上次记录延迟清除掉
  7. timeout = setTimeout(() => {
  8. fn.apply(this, arguments);
  9. // 或者直接 fn()
  10. timeout = null;
  11. }, wait);
  12. };
  13. }
  14. // 处理函数
  1. function handle() {
  2. console.log(arguments)
  3. console.log(Math.random());
  4. }
  5. // 测试用例
  6. document.getElementsByClassName('scroll-box')[0].addEventListener("scroll", debounce(handle, 3000));

您还可参考阅读下面这些文章:

1、《JS 原生面经从初级到高级【近1.5W字】》https://segmentfault.com/a/1190000020759924

2、《前端开发面试知识点大纲》https://www.cnblogs.com/jill1231/p/jill1231_web_qianduankaifa.html

3、《前端面试知识点整理(附答案)》https://www.jianshu.com/p/0b2861bd2068

4、《中高级前端面试知识点汇总》https://www.jianshu.com/p/fd742b49a25c

5、《前端面试知识点》https://www.cnblogs.com/lvonve/p/11936026.html

转自:https://xushanxiang.com/2019/12/web-front-end-interview-knowledge-points.html

web前端面试知识点整理的更多相关文章

  1. Java web 前端面试知识点总结

    经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...

  2. web开发前端面试知识点目录整理

    web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...

  3. web前端面试试题总结---html篇

    HTML Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器 ...

  4. web前端面试总结

    本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的! 前端还是一个 ...

  5. 2016年Web前端面试题目汇总

    转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...

  6. Web前端面试笔试题总结

    最近一段时间要毕业了,忙着找工作,见过不少笔试面试题,自己总结了一些加上网上找的一些整合了一下.答案暂时都东拼西凑出来了,但是还是先不发出来,一方面是答案并不是唯一的并且自己的答案不能保证对,另一方面 ...

  7. 百度web前端面试2015.10.18

    邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对 ...

  8. web前端面试试题总结---其他

    其他问题 原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的? 你遇到过比较难的技术问题是?你是如何解决的? 设计模式 知道什么是singleton, factory, strategy ...

  9. web前端面试试题总结---css篇

    CSS 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(content).填充(padding).边界(m ...

随机推荐

  1. ecosystem.config

    ecosystem.config.js module.exports = { apps : [{ name : 'TOB_NODE', script : 'app.js', // 开发环境变量 env ...

  2. emmet的html和css使用技巧大全

    emmet html使用技巧大全 ! 初始化 >:后代+:兄弟^:向上*:乘法$:数字():分组#:id命名.:类命名 一.id,类命名p#infop.infoa[href=#] 二.后代:di ...

  3. HDU1224-Free DIY Tour(SPFA+路径还原)

    Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project w ...

  4. numpy的基本API(三)——索引

    numpy的基本索引API iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.单个元素的索引 对于一维数组,索引方式与内置的List相同.正索引从0开始,负 ...

  5. ARTS-S golang goroutines and channels(一)

    先用golang实现一个简单的tcp服务端,假定文件名为clock1.go // clock1.go package main import ( "fmt" "io&qu ...

  6. 【重温基础】16.JSON对象介绍

    本文是 重温基础 系列文章的第十六篇. 今日感受:静. 系列目录: [复习资料]ES6/ES7/ES8/ES9资料整理(个人整理) [重温基础]1-14篇 [重温基础]15.JS对象介绍 本章节复习的 ...

  7. 使用笛卡尔积生成sku

    /// <summary> /// 生成SKU价格表 /// </summary> /// <param name="model"></p ...

  8. Vue中slot插槽的使用

  9. get请求被浏览器跨域的同源策略请求机制拦截,但是get请求是否请求到了服务器呢

    浏览器会拦截跨域请求,但是只是拦截返回结果,请求还是会被发送到服务器. 请求因为跨域被拦截后,会改成 OPTIONS 请求送达服务器,这样服务器就可以知道有人在请求.

  10. 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)

    一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该 ...