字节一二面凉经
时间: 9月
部门: 抖音电商
前端
二面
- vue数据驱动视图原理
- vue如何做深层代理
- defineproperty入参
- JS异常捕获的手段
- 在列表特定位置添加节点怎么做 数组操作文档流会更新吗
- 什么是死锁如何解决
- 数据库常见范式, 解释
- 计算机网络的定义和划分
- DNS是什么 直接访问IP会有DNS解析的过程吗访问IP和域名有关系吗
- css样式输出题(覆盖)-style的书写顺序为主还是class
二面
- 数据劫持依赖收集观察者模式watcher虚拟DOMDiff算法(比较虚拟DOM树的差异, 计算出最小的DOM操作)异步更新队列
- vue2: 递归遍历对象的所有属性,并使用 Object.defineProperty() 对每个属性进行劫持vue3: proxy默认只代理一层, 在Reflect返回的时候,判断是否是一个对象,如果是对象的话,再次用Proxy代理,返回代理对象
- 三个参数(对象, 修改属性名称, 被修改的属性描述符)属性描述符(对象): 包括value, 是否能够被修改配置? get, set
- try...catch,,,,throw new Error().error==window.onerror==: 全局的错误处理函数, 能够捕获到没有被try...catch捕获的错误全局捕获promise错误, window监听unhandledrejection事件
- .children[].insertBefore()querySelector获取的是静态节点, select获取的是动态节点
- 多个进程在执行过程中因为争夺资源导致互相等待的现象资源只能被一个进程占用循环等待(链条)非抢夺, 资源不能被抢走hold and wait资源分配图: 通过==简化资源分配图==来检测是否存在死锁进行资源分配之前,先计算此次分配是否会导致系统进入不安全状态
- 直接访问IP地址、要访问的域名在hosts文件中有映射、要访问的域名在本地DNS缓存中,上述情况都不会发起DNS请求
应用层, 传输层(port), 网络层(ip), 数据链路层(mac), 物理层
一面
// 手撕最长无重复字符子串, 渣写 let input = 'abcabdcaa'; function findMax(input) { let arr = input.split(''); let store = []; let res = 0; for (let i = 0; i < arr.length; i++) { let index = store.findIndex(v => v === arr[i]); if (index < 0) { store.push(arr[i]); res = Math.max(res, store.length); } else { store = store.slice(index + 1); store.push(arr[i]); res = Math.max(res, store.length); } } return res; } console.log(findMax(input));
console.log('script start') async function async1() { await async2() console.log('async1 end') } async function async2() { console.log('async2 end') } async1() setTimeout(function() { console.log('setTimeout') }, 0) new Promise(resolve => { console.log('Promise') resolve() }) .then(function() { console.log('promise1') }) .then(function() { console.log('promise2') }) console.log('script end')