面试基础: vue相关的面试题总结
为啥data是一个函数各个组件实例维护各自的数据,父子组件中的data中的响应式数据作用域独立,互不污染
Vue.use实现逻辑123456789101112131415161718export function initUse (Vue: GlobalAPI) { Vue.use = function (plugin: Function | Object) { const installedPlugins = (this._installedPlugins || (this._installedPlugins = [])) if (installedPlugins.indexOf(plugin) > -1) { return this } // additional parameters const args = toArray(arguments, 1) args.unshift(this) if (typeof plugin.install === 'function') ...
面试基础: 说说你做过的项目
现在项目架构是啥
技术栈
脚手架
开发规范
css样式 less
响应式布局 pxToRem
组件库 mand-mobile
异步请求封装,拦截器统一处理请求和响应
路由 hash模式
开发和设计文档
目前架构的优势有哪些
多页面应用,设计器端和渲染端独立分开,应用分离,各自读各自的静态资源
路由页面按需加载,虽然渲染端是单页面应用
本地开发项目的时候通过env环境参数配置
响应式布局,根据屏幕的宽度定义跟字体,同时利用postcss中的pxToRem,实现响应式布局
移动端采用的第三方ui组件 按需引入,体积较小
跨域通过node服务转发,还有一种是在域名不一致的情况下打开H5页面,需要设置document.domain=’.xx.com’
架构有哪些缺陷
设计器端和渲染端SFC/js方法不要互相引用,如果有公共函数,抽离出来
对于常用的类型声明,定义声明全局类型声明,不要在每个文件使用的时候显式导入
class类里继承的属性太多,层层继承
静态资源没有压缩(图片和字体)
数据流管理混乱
渲染端的很多数据没有放到vuex集中管理
action中随便更改sta ...
面试基础:0514
对自己做过的事要有足够的了解和思考,特别是简历上提到的技术关键词,务必做到了然于心,做到熟悉源码的程度
对于常用的api不能仅限于使用层面上,分析源码是必须的
算法目标还是刷到100道,手写代码这块每天逼自己多写多练
心态方面吧,及时调整和沟通,多跟大佬们交流、学习
vue-router跟vuex怎么混入到vue实例中的
vue-directive指令的声明周期
requestAnimationFrame是怎么保证在宏任务里的执行顺序
304跟200的区别(304从缓存系统中返回数据,速度更快,如果没有名字协商缓存,需要从源服务器返回,响应慢)
ts中的高级用法源码是如何实现的,比如Picker
123type Picker<T, K extends keyof T> = { [P in K]: T[P]}
需要刻意练习,加深理解
四场面试做个总结以及需要补充的点
axios封装和分析源码(精简)
内存管理GC,新生代和老生代
异步编程方案,横向比较Promise/async/Generator
常用的loader和p ...
面试积累: 0513
123456789101112131.作用域2.样式优先级3.es5继承es6继承4.http2.0二进制分帧是怎么实现的,跟1.0有什么区别5.css动画6.微任务和宏任务7.plugin和loader区别8.前序遍历/中序遍历/后序遍历以及应用场景9.watcher跟computed属性区别10.keep-alive11.getBridge12.async函数实现原理13.异步方案都有哪些
node层面的,vite
简历吃透,
额外补充的有:
hasOwnProperty和in操作符的区别hasOwnProperty检测一个属性是否存在实例中还是存在原型中,返回值是true的时候存在实例对象中in 无论该属性存在实例中还是原型对象中,只要存在对象中,都会返回true
repaint和reflow重绘:在改变DOM元素的视觉效果时触发,在不涉及任何排版布局的时候触发触发场景: opactity/text-align/color/:hover/background-color回流:在某一个DOM元素位置发生变化时触发,而且会重新计算所有元素的位置和页面中的占有的面积,会影响所有 ...
面试积累: 0512
0512面试积累
新生代跟老生代区别
arr.some()//arr.find()模拟
事件委托(按钮点击之后,事件顺序)
treeShaking原理
ssr原理
前端工程化应用
node cluster集群
hmr原理
@import跟link区别
强缓存跟协商缓存,cache-control中的private跟public区别
jsBridge原理
esModule跟commonjs区别,互相引用的问题
keep-alive原理以及activated和deactivated专属
手写发布订阅模式
EventEmitter(发布订阅模式–简单版)
高阶函数
答案稍微整理下
treeShaking原理es6模块是静态分析的,编译的时候能知道加载了哪些代码,能分析程序流,判断哪些变量未被使用引用等(静态分析程序流,判断哪些模块和变量未被使用或者引用,进而删除未引用的代码)
es6中的import语法阔以完美使用tree-shaking,因为阔以在代码不运行的情况下就能分析出不需要的代码
副作用
esModule跟commonjs区别,互相引用的问题
commonjs模块输出的一 ...
面试积累: 0510
面试官问: 你知道axios是怎么取消请求的嘛?里面的源码是怎么设计的面试官问: 你常用的loader是什么?了解过里面的源码吗
要对自己用过的东西有足够的了解,这样才能在面试者应对自如。比如说项目是用vue-cli3搭建的,那你就要知道vue-cli3是如何搭建脚手架的,大体流程是什么?源码说说看,而我又一次倒在了源码层面,上面俩个面试题,我答的出来怎么用,但是源码是怎么实现的,我却不知道,很沮丧,接下来,给自己的任务就是
熟知axios基本使用,了解其设计思想,挖掘核心
vue-loader/VueLoaderPlugin源码和设计
vue-cli3源码
遇到的面试题主要还是常见的
tcp三次握手和细节
前端性能优化,说出不一样的点
ts在你们项目是如何落地的
前端性能优化,说出亮点
Node Js,项目是如何部署的
如何优化目前的架构
单例模式设计
发布订阅模式应用
vuex源码
二分查找
元素垂直居中
Git rebase 和 Git pull区别
vue-router路由模式
最近好浮躁,上班干活没劲,特别无聊,应该是从年后到现在一直是这种状态,不过,在自己的 ...
jsBridge相关
面试官问 js bridge 通信原理?不懂JS Bridge 原理?有没有安全漏洞?
双向通信交互基本原理WebViewJavaScriptBridge的基本原理简单来说就是,建立一个桥梁,然后注册自己,他人调用。
把 OC 的方法注册到桥梁中,让 JS 去调用把 JS 的方法注册在桥梁中,让 OC 去调用
准备工作
JS初始化
123456789101112131415function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组,并将 call ...
vue进阶10-keep-alive
lru & 浏览器缓存策略浏览器中的缓存是一种在本地保存资源副本,它的大小是有限的,当我们请求数过多时,缓存空间会被用满,此时,继续进行网络请求就需要确定缓存中哪些数据被保留,哪些数据被移除,这就是浏览器缓存淘汰策略,最常见的淘汰策略有 FIFO(先进先出)、LFU(最少使用)、LRU(最近最少使用)。LRU ( Least Recently Used :最近最少使用 )缓存淘汰策略,故名思义,就是根据数据的历史访问记录来进行淘汰数据,其核心思想是 如果数据最近被访问过,那么将来被访问的几率也更高 ,优先淘汰最近没有被访问到的数据。
vue中的keep-alivekeep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。
当组件在 <keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。
vue内置组件,主要用于 ...
axios封装与源码
明明之中,上天都有安排,我要是提前把这篇文章搞完,也不至于面试面得这么狼狈!!
封装使用源码解读参考
Axios 源码解析
面试官:Vue项目中有封装过axios吗?主要是封装哪方面的
面试官:你了解axios的原理吗?有看过它的源码吗
vue3调试: 源码调试
vue2调试在vue2.0版本调试的时候,本人是直接通过console里的提示,即在node_modules\vue\dist\vue.runtime.esm.js直接调试,由于是运行时版本,vue-loader转换之后的东西还得单独去找,像是css module里的scoped属性也是比较不太好定位,vue3.0感觉比2.0调试要方便点
vue3.0调试One Step: 准备好俩个本地仓库一个文件夹下,放俩个文件,文件目录这样既可
learnVue3
vue-next
vue-study
Two Step: 对刚新建的俩个项目初始化vue-next git clone https://github.com/vuejs/vue-next.gitvue-study 是利用vue-cli生成的一个标准项目
Three Step: 分别对俩个项目进行改造vue-next
改造package.json,在script命令列表那dev后面加上–sourcemap 即: dev”: “node scripts/dev.js –sourcemap”,
sourcemap 维护了前后代码 ...