-常见面试题
- 实现一个任务队列,可以控制并发数、异步任务(promise async/await)
- / 实现一个安全值检测的方法,譬如lodash的get
场景:拿到一个数据data,我们期望的数据是如下 data = { people: { name: 'liyu', age: 18 }, info: { a: 1, b: 2 } } 但是这个数据来源不可靠,可能数据是空数组、空对象、字符串或者其它,这个时候我们调用 => data.people.name 就会出现异常报错 期望:实现一个方法能安全获取值,如果异常或者没有则返回默认值,如get(data, 'people.name', '哈哈')
- 实现 sum(2,3) sum(2)(3) // 5
- 对象转化成数组
例如:let obj = { 88: "四年级", 66: "二年级", 77: "三年级", };
转换成数组[{label:'四年级',value:'88'},{},{}]
- forEach和for有什么区别
- forEarch是for的增强简化版,forEach每次循环会创建不同的循环变量,循环开始会创建一个变量,循环使用的是同一个变量。
- for可以使用break和continue终止循环,forEach不能终止。
- forEach适合集合对象的遍历操作。
- 路由中router和route有什么区别
- router为VueRouter的实例,相当于一个全局的路由器对象,里面有很多属性和子对象,经常用的跳转链接就可以用this.$router.push,和router-link跳转一样。
- route相当于当前正在跳转的路由对象,可以从里面获取name,path,params,query等。
- hish模式和history模式有什么区别
- hash 模式下,仅 hash 符号之前的内容会被包含在请求中。
- history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 www.abc.com/book/id 如果后端缺少对 /book/id 的路由处理,将返回 404 错误。Vue-Router 官网里如此描述:“不过这种模式要玩好,还需要后台配置支持,所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。”
- hash —— 即地址栏 URL 中的 # 符号(此 hash 不是密码学里的散列运算)。比如这个 URL:www.abc.com/#/hello hash 的值为 #/hello。它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。
- history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
- 宏任务和微任务
- 事件循环机制遵循两个原则,(1)先执行同步任务,再执行异步任务(2)先执行微任务,再执行宏任务。
- 立即执行的任务队列,这些都是属于同步任务,比如一个简单的函数;
请求接口发送ajax,发送promise,或时间计时器等等,这些就是异步任务。- 宏观任务主要包含:setTimeout、setInterval、script(整体代码)、I/O、UI 交互事件、setImmediate(Node.js 环境);
微观任务主要包括:Promise、MutaionObserver、process.nextTick(Node.js 环境)。
- CDN图解
- http和https的区别
https是以安全为目标的http通道,在http基础上通过传输加密和身份认证保证了传输过程的安全性。https在http基础下加入SSL层,因此加密的详细内容就需要 SSL。
- 服务端渲染
服务端渲染:凡是是从服务器返回的html页面,均算作是服务端渲染,包括php,jsp,nodejs。 腾讯大佬同构直出方案
- 进程和线程
- 进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。还存在资源开销、包含关系、内存分配、影响关系、执行过程等区别。同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源相互独立。
- 进程之间如何通信
- 一些好的面试知识点帖子
- setIntervel时间不精准解决办法
可以看这个帖子
利用setTimeOut递归调用
- mixi 和父组件谁先打印created()里的东西
先打印混入里的 可以看这个帖子
- 强制缓存和协商缓存
- vue中为什么对象不能动态响应
js限制 defineObject
- map 和 set 数据结构区别
Set是一种新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。Set可以接受具有iterable接口的其他数据结构作为参数,进行初始化。
Map数据结构类似于对象,也是键值对的集合,但是对象的键只能是字符串,而Map的键可以是任意类型的值。
- for in 和 for of
- webpack打包原理 load babel
- 继承的知识点 单例模式
- vue怎样注册全局组件
- vue怎样使用插件
- vue中哪些方法可以动态响应,什么原因
- vue中对象存在不能动态响应的问题吗
- 闭包在项目中的应用
- promise中取消padding的方式
- vuex
- 除了this.$route.query还有什么方式获得页面传参