Summary

基本功考察

1.关于Html

1、html语义化标签的理解、结构化的理解;能否写出简洁的html结构;SEO优化。

2、h5中新增的属性,如自定义属性data、类名className等;新增表单元素;拖拽Drag。

3、h5中新增的API、修改的API、废弃的API稍作了解(离线存储、audio、video)。

2.关于CSS

1、CSS选择器(三大特性)。

2、BFC机制。

3、盒模型。

4、CSS模块化开发(封装);SCSS和LESS的使用。

5、屏幕适配以及页面自适应。

6、CSS3中新增的选择器。

7、CSS3中新增的属性,transform、trasition、animation等。

3.关于布局

1、标准文档流(padding + margin + 负margin)+ 浮动float + 定位 left + right + top + bottom。

2、百分比布局:px单位用%num代替,占父级元素的百分比。

3、flex弹性布局:主轴、辅助轴的几个属性。

4、grid栅格布局:使用框架中的类名来替代,本质上还是百分比布局。

4.关于JS基础

1、变量数据类型及检测:基本 + 引用。

2、运算符:算术 + 条件 + 逻辑 + 位 + 短路、隐式转换等。

3、条件、循环、异常处理if、switch(){case xxx:}、try、catch、finally、throw。

4、函数定义、调用方式(apply、call、直接调用);传参:实参给形参赋值。

5、字符串、数组、对象常用API。

6、正则表达式。

5.关于JS高级

1、作用域、作用域链、闭包。

2、原型、原型链、继承。

3、函数上下文、this指向。

4、js的运行机制、事件队列和循环。

5、Ajax原理、axios库。

6、同步、异步编程。

7、jQuery源码学习。

6.关于浏览器

1、浏览器的构成和运行机制。

2、浏览器内核。

3、浏览器交互:BOM和DOM相关webApi、监听事件。

4、浏览器缓存机制。

5、浏览器的渲染原理。

6、浏览器的安全性:跨域和攻击。

7.关于网络协议

1、HTTP协议。

2、cookie、session、token。

8.关于ES6语法

1、字符串、数组、对象扩展的api。

2、变量扩展:let、const解构赋值,块级作用域。

3、函数扩展:箭头函数默认参数、rest参数。

4、展开运算符、模板字符串。

5、set和map数据结构。

6、迭代器和生成器函数next和yield的理解。

7、proxy对象属性代理器:属性的读取(get)和设置(set)相关操作。

8、promise对象、异步编程的解决方案。

9、async + await:异步编程的终极方案promise + generator的语法糖。

10、class语法、构造函数的语法糖。

11、模块化编程export + import的导出和导入。

9.VUE基础

1、基本指令。

2、实例的属性和方法。

3、实例的生命周期。

4、组件基础:创建、注册、添加属性方法、套用等。

5、组件通信传值,父子、兄弟、跨级。

6、插槽slot等。

10.VUE高级

1、vue-router:搭建SPA

路由、组件的配置。
路由间的传值。
路由跳转。
路由的导航守卫。
记住在router.js和组件页面中的使用方式。
2、vuex:状态管理、数据仓库store

实例化仓库的5大属性的使用。
state、getters、mutations、actions、modules。
辅助函数mapState等,仓库中计算属性的映射、方便操作。
记住在store.js和组件中使用方式。
11.VUE深入、源码阅读

1、数据响应式原理。

2、virtual dom。

3、diff 算法。

4、nextTick等等。

-----------------分割线--------------------

工程能力考察

1.项目能力

1、vue-cli脚手架搭建和功能配置vue.config.js。

2、webpack的常用配置。

3、项目构建打包。

4、熟悉各类框架的文档。

5、UI框架:Bootstrap、MUI、Element-ui等。

6、常用的插件整理;整理一个自己插件库,封装自己的方法库、组件库。

7、常用的工具熟练度。

8、PC端和移动端开发注意事项。

9、经验总结:快速确定项目的技术选型。

10、坑点总结:项目遇到坑坑坑!

11、项目中的性能优化记录(都是细节点,多记录)。

12、需求文档的理解,可以结合项目流程图、UML图。

13、问题解决能力:bug定位调试、查找文档、寻求他人。

14、记录习惯养成。

2.模块化、组件化开发能力

1、项目分类;各类文件整理、分类。

2、各类功能封装。

3、组件和功能模块的抽离、解耦、复用。

-----------------分割线--------------------

内功考察

1.面向对象的编程思想

1、类的抽象。

2、对象的封装、继承。

3、为了更好的去管理数据、分类数据,实现高内聚、低耦合。

2.设计模式

设计模式感觉也是将面向对象思想再度抽象成现实中某些特定模式。

3.数据结构和算法

1、学习常用的排序搜索算法、顺序表、链表、栈、队列、树、堆等。

2、考验你的抽象思维和数学功底。

3、将现实需求抽象成计算机代码的思维能力。

-----------------分割线--------------------

附加技能考察

1.学习能力

1、持续学习的态度——博客、笔记记录。

2、技术论坛活跃度高、问答多。

3、GitHub开源项目参与。

2.了解一门后端语言

1、python、node.js、php等。

2、数据库mysql、redis、mongodb;sql的操作语句、mongodb的操作语句、redis的操作语句。

3、node + express搭建本地服务等。

4、python + django + request + scrapy。

3.系统编程

1、Linux命令行操作、系统文件管理。

2、多任务、多线程、多进程、协程、并发、并行、串行、同步、异步等概念的理解。

-----------------分割线--------------------

Vue双向绑定的原理:

利用Object.defineProperty() 劫持各个属性的setter/getter,只要数据有变化,就触发它的监听


    

Promise ?

e.g
function test2(resolve,reject){
    var timeOut = Math.random() * 2;
    console.log('set timeout to:' + timeOut + 'seconds.')
        setTimeout(function(){
            if(timeOut < 1){
                console.log('call resolve()...');
                resolve('200 OK');
            }else{
                console.log('call reject()...');
                reject('timeout in' + timeOut + 'seconds.')
            }
        },timeOut * 1000);
};
test2()  
//输出call reject()...,test2()函数只关心自身的逻辑,并不关心具体的resolve()和reject()将如何处理结果

###  Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了:
![promise.png](https://upload-images.jianshu.io/upload_images/7785764-bb52aedfae912853.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

地址栏url敲回车,会发生什么事情?

域名解析 -->

发起TCP3次握手 -->

建立TCP连接后发起http请求 -->

服务器响应http请求,浏览器得到html代码 -->

浏览器解析html代码,并请求html代码中的资源(如jscss、图片等) -->

浏览器对页面进行渲染呈现给用户

更多:https://www.cnblogs.com/wupeixuan/p/8747918.html


跨域问题如何解决

同源策略:只要协议、域名、端口有任何一个不同,都被当作是不同的域
js跨域是指通过js在不同的域之间进行数据传输或通信
···

  1. 通过jsonp跨域
    jsonp在页面上引入不同域上的js脚本文件实现请求不同域上的数据
    (1) 通过script标签引入一个js文件
    (2) js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入
    注:需要服务器端的页面进行相应的配合
  2. 通过修改document.domain来跨子域
  3. 使用window.name来进行跨域
    window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置
    ···

v-if 和 v-show 的区别?

v-if 在切换时元素及它的数据绑定 / 组件被销毁并重建。如果元素是