面试记录 一
自我介绍
js事件循环机制
vue3与2的不同
node
数据库了解吗
uni-app
移动端适配方案
某个项目亮点 难点
http在哪一层
http 40几 50几 状态码
什么是平衡二叉树
冒泡排序的复杂度是多少
计算机相关
线程与进程的关系
MVC与MVVM
1、自我介绍
2、js事件循环机制
2.1、概念
因为 js 是单线程运行的,在代码执行时,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。【栈:先进后出】
在执行同步代码时,如果遇到异步事件,js 引擎并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。
当异步事件执行完毕后,再将异步事件对应的回调加入到一个任务队列中等待执行。【队列:先进先出】
任务队列可以分为宏任务队列和微任务队列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务队列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。当微任务队列中的任务都执行完成后再去执行宏任务队列中的任务。
2.2、顺序
● 首先执行同步代码,这属于宏任务
● 当执行完所有同步代码后,执行栈为空,查询是否有异步代码需要执行
● 执行任务队列中所有微任务
● 当执行完所有微任务后,如有必要会渲染页面
● 执行任务队列中所有宏任务
2.3、宏任务
DOM渲染后触发的操作
a、script 脚本的执行(同步任务)
b、异步 Ajax 请求
c、定时器:
setTimeout
setInterval
setImmediate
d、DOM事件
2.4、微任务
DOM渲染前触发的操作
promise 的回调
node 中的 process.nextTick
对 Dom 变化监听的 MutationObserver
3、vue3与2的不同
3.1、监测机制的改变
● 3.0 将带来基于代理 Proxy的 observer 实现,提供全语言覆盖的反应性跟踪。
● 消除了 Vue 2 当中基于 Object.defineProperty 的实现所存在的很多限制
检测属性的添加和删除;
检测数组索引和长度的变更;
支持 Map、Set、WeakMap 和 WeakSet。
3.2、模板
● 作用域插槽,2.x 的机制导致作用域插槽变了,父组件会重新渲染,
而 3.0 把作用域插槽改成了函数的方式,这样只会影响子组件的重新渲染,提升了渲染的性能。
● 同时,对于 render 函数的方面,vue3.0 也进行一系列更改来方便习惯直接使用 api 来生成 vdom 。
3.3、对象式的组件声明方式
● vue2.x 中的组件是通过声明的方式传入一系列 option,和 TypeScript 的结合需要通过一些装饰器的方式来做,
虽然能实现功能,但是比较麻烦。
● 3.0 修改了组件的声明方式,这样使得和 TypeScript 的结合变得很容易
1.4、其它方面的更改
● 支持自定义渲染器,从而使得 weex 可以通过自定义渲染器的方式来扩展,而不是直接 fork 源码来改的方式。
● 支持 Fragment(多个根节点)和 Protal(在 dom 其他部分渲染组建内容)组件,针对一些特殊的场景做了处理。
● 基于 tree shaking 【删除无用调试代码 console.log之类】优化,提供了更多的内置功能。
4、node 、数据库了解吗
node + express + 数据库【mgodb】
4.1、node是什么
基于Chrome V8引擎的js运行环境
使用了事件驱动、非阻塞式I/O模型【I/O 输入 输出】,使其轻量又高效
node 的包管理器npm 是全球最大的开源库生态系统
4.2、node模块系统
文件系统、 http 、path 、事件、流、服务器
4.3、express
4.3.1、node衍生的框架
npm i express
4.3.2、内容
ejs模块引擎文件
使用ejs实现数据传递
ejs实现css
复用模板:相同部分抽离复用
body-parser:处理表单
中间件处理css:
ssr 服务端返回html页面,再使用中间件 morgan
4.4、MongoDB数据库
json存储 不限内容格式
js读取方便
a、连接
mongoose.connect(url,{
useNewUrlParser: true, useUnifiedTopology: true,
})
b、存储:
// 定义表数据字段格式
const todoSchema = new mongoose.Schema({
item: String
})
const Todo = mongoose.model('Todo', todoSchema)
const itemOne = Todo({item: 'rgrr'}).save((err)=>{})
c、读取:
// 读取数据库
Todo.find({}, (err, res) =>{})
5、uni-app
https://uniapp.dcloud.net.cn/
6、移动端适配方案
PWA:
比例计算:
6.1、rem
6.2、响应式
6.3、vh & vw 设备屏幕
https://juejin.cn/post/6981800084686143518
6.4、百分比布局
7、某个项目亮点 难点
8、http在哪一层
应用层


9、http 40几 50几 状态码

9.1、4XX
400(错误请求): 服务器不理解请求的语法
401(未授权): 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403(禁止): 服务器拒绝请求
404(未找到): 服务器找不到请求的网页
405(方法禁用): 禁用请求中指定的方法
406(不接受): 无法使用请求的内容特性响应请求的网页
407(需要代理授权): 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
408(请求超时): 服务器等候请求时发生超时
9.2、5XX
500(服务器内部错误):服务器遇到错误,无法完成请求
501(尚未实施):服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
502(错误网关): 服务器作为网关或代理,从上游服务器收到无效响应
503(服务不可用): 服务器目前无法使用(由于超载或停机维护)
504(网关超时): 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505(HTTP 版本不受支持): 服务器不支持请求中所用的 HTTP 协议版本
10、什么是平衡二叉树
10.1、二叉树
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。
当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点
二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。
二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;
10.2、平衡二叉树
11、冒泡排序的复杂度
冒泡排序的时间复杂度:最好情况是“O(n)”,最坏情况是“O(n2)”。
快速排序的的时间复杂度:最好情况是“O(nlogn)”,最坏情况是“O(n2)”。
堆排序的时间复杂度是“O(nlogn)”。
https://www.php.cn/faq/474165.html
12、计算机相关了解多少
13、线程与进程的概念
进程和线程都是 CPU 工作时间片的一个描述,
进程是资源分配的最小单位,
线程是CPU调度的最小单位
13.1、进程
进程描述了 CPU 在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。
一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,
操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,
我们把这样的一个运行环境叫进程。
13.2、线程
线程是进程中的更小单位,描述了执行一段指令所需的时间。
可以这么理解:进程是一个完整的程序,线程是具体的某一个模块或者代码块。
13.3、进程和线程之间关系的特点
a、进程中的任意一线程执行出错,都会导致整个进程的崩溃。
b、线程之间共享进程中的数据。
c、当一个进程关闭之后,操作系统会回收进程所占用的内存
d、进程之间的内容相互隔离,进程隔离就是为了使操作系统中的进程互不干扰,
所以一个进程如果崩溃了,或者挂起了,是不会影响到其他进程的
14、如何实现浏览器内多个标签页之间的通信?
● 使用 localStorage 的方式,我们可以在一个标签页对 localStorage 的变化事件进行监听,
然后当另一个标签页修改数据的时候,我们就可以通过这个监听事件来获取到数据。
这个时候 localStorage 对象就是充当的中介者的角色。
15、MVC与MVVM
posted on 2022-11-16 10:52 二月龙抬头之伏龙翔天 阅读(32) 评论(0) 收藏 举报
浙公网安备 33010602011771号