前端面试题合(不断修改中)

178 阅读7分钟

面试 尽可能的你输出 他的路线走不通就绕自己擅长路线 总之就是忽视自己缺陷,尽可能输出自己学到的理念

Taro 支持使用 React 或 Vue 语法来编写应用 uni - app 主要基于 Vue.js 进行开发 React Native 核心是维护一套代码

if (Taro.getEnv() === 'WEAPP') {特定条件 调用特定代码

h5 API localstroage sessionStorage canvas audio video 标签header nav footer 行内块元素 img input td 一行可以显示多个 默认宽度是内容宽度 高度行高边距都是跟块级一样 xml主要用于存储数据 ,可以被JSON替代

告诉浏览器以H5解析 不加的话会怪异模式向后兼容 有不确定性

cookie 4kb 字符串格式 过期时间前都有效 sessionStorage 5M 支持本页面跳转通讯 不支持关闭窗口 网页SEO三大标签 标题 关键词 描述 meta name= keywords iframe 页面调试困难 出现多个滚动条 不容易打印 代码复杂 不利于SEO link import link会直接加载,import引用的css等页面全部下载完再加载 visibility 从渲染树隐藏 但是仍然占用空间 absolute 相对于最近一级定位不为static的父元素(absolute也算) 盒模型分为 W3c标准模型 IE怪异模型 标准模型中width指的是内容区域 content的宽度 height指的是内容区域 content的高度 怪异模式 加了个margin 通过box-sizing来设置盒子模型的解析模式 content-box 不把border padding算入width box-sizing 相反(怪异模式) 这个IE:border-box如果设置了200W 实际宽度会减去内边距和border 清除浮动 overflow:hidden; 父级after 额外标签 clear both flex justify-content 主轴对齐方式 align-items 侧轴对齐方式 flex-direction 换轴 盒子居中方法 子绝父相 flex布局 transform css3新属性 圆角 旋转 缩放 定位 倾斜 动画 多背景 优先级important 优先级最高,相同优先级 最后的生效 只有定位的盒子能设置 z-index JS三大对象 ecm dom bom bfc 块级格式化上下文 内部垂直方向 同一个BFCmargin重叠 JS八个类型 string number null undefined OBJECT ARRAY FUNCTION es6新增的 symbol bigint 箭头函数 写法不同更简洁 没有自己的THIS this指向上一层并且不会改变 不能作为构造函数使用 没有arguments属性 没有prototype 判断类型 typeof null等于 object instanceof 返回是true flase 判断是否为某种引用类型可以自定义 number(null)0 undefined NAN 会出问题的

原型链 所有函数都有prototype 所有对象除了null都有_proto_。每个原型都有一个constructor属性,指向该关联的构造函数。 如果对象本身没有这个属性,他就会去原型_proto_上去找,如果还没就去上一次,一直找到顶层Object.prototype为止 内存泄漏处理办法 幅值为null利用垃圾回收机制处理 nextTick是在下次DOM更新循环结束之后执行的延时回调,修改完数据好立刻使用nextTick来获取更新后的DOM 混入Mixin 主要作用与多个组件重复逻辑,有缺点不利于阅读可能命名冲突 JS常用数组操作 push()追加 unshift()开头追加 pop()删除最后一条兵返回这一条 shift()删除第一个并返回这一条 splice()删除元素改变数组内容 indexOf()查索引 find()查找第一个满足元素 sort()数组排序 reverse()点到翻转数组中的顺序 forEach()对数组中每个元素执行一次提供的函数 map()创建新数组结果是数组中每个元素的返回值。 filter()创建一个新数组,包含通过筛选的所有元素 reduce() concat()合并两个或者多个数组 slice()截取原数组返回一个新数组 join()将数组通过某字符连接成字符串 toString()返回一个表示数组内容的字符串 split()把字符串转换成数组

闭包 条件是两个function 子方法使用了父方法内的属性, 父方法返回了子方法。 这个时候用一个变量接受了父方法的返回值,就会形成闭包,这个变量有他独一份的返回值。闭包避免了属性污染,但是存储在内存中。 === 能判断类型相等 给一个按钮绑定两个onclick 用事件委托 addEventListener(click,one1) var 存在变量提示 可以重复声明 var const 具有块级作用域 var不存在 const 不允许修改指针指向 而且必须一开始就赋值 可以修改数组和对象内部 call apply bind 区别 webpack是一个模块打包工具,可以管理项目中的模块依赖,并编译出模块所需静态文件。功能分为代码转换,文件优化,代码分割,模块合并,自动刷新,代码校验,自动发布。 构建过程?? loader是函数,对接收到的内容进行转换,返回结果。 plugin就是插件 如果优化构建速度,使用高版本,压缩代码,多线程构建,压缩图片,缩小打包作用域, 热更新原理 bundle chunk module是什么 栈溢出解决办法 ,减少过多自动变量 ,应该改用修改指针方法。 减少函数调用层级,慎用递归。 JS多线程 web Workers多线程 postMessage onmessage Web Workers 是 JavaScript 中模拟多线程的机制,将耗时任务放到后台线程,通过消息传递进行通信。 深拷贝浅拷贝 浅拷贝创建新对象,引用内存中相同堆数据。 深拷贝,创建一个新对象,引用的是独立堆数据。(方法呢?) 深拷贝三种方法 json.parse()第三方库 递归 事件循环 最开始整个脚本是一个宏任务,执行过程中宏任务进入宏任务队列,微任务进入微任务队列, 微任务包括MutationObserver. promise.the()chtch 宏任务 包括 script settimeout setInterval setImmediate I/O UI rendering Promise简单来说就是一个容器,里面保存着某个未来才会结束的时间(通常是一个异步操作结果) 有三种状态 pending(执行中),resolve(成功)、rejected(失败) await必须在async内部 这俩属性属于ES7 await rejected状态 可以用try chtch捕捉

React Native组件的生命周期 基本和react相同 有两个不同 一个是getSnapshotBeforeUpdate 在 DOM 更新前调用,用于获取 DOM 更新前的状态。 一个是抛出错误方法名getDerivedStateFromError

vue生命周期 beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。此时,实例上的数据和方法都还未初始化,一般用于在实例创建前进行一些初始化操作,如设置自定义属性等。 created:在实例创建完成后被调用。此时,数据观测、属性和方法的初始化都已完成,但 DOM 还未创建,el属性还不存在。可在此阶段进行数据获取、事件绑定等操作。beforeMount:在挂载开始之前被调用,此时render函数首次被调用,实例已完成模板编译,但还未将编译后的模板挂载到真实DOM上。mounted:实例被挂载到真实DOM后调用,此时可以通过el属性还不存在。可在此阶段进行数据获取、事件绑定等操作。 beforeMount:在挂载开始之前被调用,此时render函数首次被调用,实例已完成模板编译,但还未将编译后的模板挂载到真实 DOM 上。 mounted:实例被挂载到真实 DOM 后调用,此时可以通过el访问到真实的 DOM 元素,可在这个钩子函数中进行 DOM 操作、第三方插件初始化等。 beforeUpdate:在数据更新之前被调用,此时数据已经发生了变化,但 DOM 还未更新。可在这个钩子函数中获取更新前的数据状态等。 updated:在数据更新且 DOM 更新完成后被调用,可在此处执行依赖于更新后 DOM 状态的操作,但要注意避免在此处进行数据修改,以免陷入无限循环。 beforeUnmount:在实例卸载之前被调用,可在此阶段进行一些清理工作,如清除定时器、解绑全局事件等,以避免内存泄漏。 unmounted:实例被卸载后调用,此时实例的所有指令都已解绑,所有的事件监听器都已被移除,所有的子实例也都被卸载。 errorCaptured:当捕获到后代组件抛出的错误时被调用,可用于进行全局的错误处理,返回false可阻止错误继续向上传播。 Vue3用setup替代以上两个 create ,并且新增onRenderTracked和onRenderTriggered等钩子函数,用于更好地跟踪组件渲染过程中的响应式数据变化,方便开发者进行调试和性能优化。 扩展问题 哪个生命周期干哪个事。。。。常用的即可

vue优化方式 react优化方式 RN优化方式 小程序优化方式 ? 构建工具优化?