大家好,我是winty!
今天给大家介绍群里的时光大佬的面经,感谢时光大佬分享,恭喜时光大佬!
从毕业到现在已经在北京3年了,当年一起来北京的同学,如今都有了要离开的打算。我也在萌生了想要去成都的想法。然而从投递简历开始,就感受到了今年确实不是很景气。很多大厂不是裁员就是锁HC,面试邀约都显得非常宝贵。
{ sandbox : { experimentalStyleIsolation: true } }
,二是vue组件样式使用scoped,三是顶层样式增加私有类名 面试官反馈说,iframe还是微应用对于用户来说是无感的,配置表区分iframe还是微应用即可,不必多占一层路由function versionSort(versions) {
return versions.sort((a, b) => {
const aArr = a.split(".");
const bArr = b.split(".");
while (aArr.length || bArr.length) {
const A = aArr.shift() || 0;
const B = bArr.shift() || 0;
if (A - B !== 0) {
return A - B;
}
}
});
}
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers2. 原型链
https://juejin.cn/post/69344983614750720143. 工作中遇到的具有挑战的事情 从零开始搭建完善的工具库,如何组织代码?如何保持资源的动态引入?如何来做单元测试?4. 单页面通信,多页面通信 这个我一下蒙了。但是感觉应该是路由通信、借助cookie、localStorage通信,以及iframe的通过addEventListener和postMessage通信 5. 微前端样式隔离 同上 6. 网络安全展开说 几种安全问题:XXS CSRF、点击嵌套劫持、CDN劫持等 防范主要围绕同源策略,cookie的sameSite 、http-only,referer的验证,CSP等方式来避免https://zhuanlan.zhihu.com/p/83865185
import { *** } from 'vue'
替换为 import { *** } from '@vue/composition-api'
function promsieTask(taskList, maxNum) {
return new Promise((resolve, rejuct) => {
let runCount = 0;
let complated = 0;
const taskNum = taskList.length;
const resArr = [];
let current = 0
function handler() {
if(runCount>=maxNum) return
const a = taskNum - complated;
const b = maxNum - runCount
const arr = taskList.splice(0, a>b?b:a);
arr.forEach((task, index) => {
const d = current+index
task
.then(
(res) => {
console.log(current,index,res)
resArr[current] = res;
},
(reason) => {
resArr[current] = reason;
}
)
.finally(() => {
complated++;
runCount--;
if (complated === taskNum) {
resolve(resArr);
}
handler();
});
});
current += taskList.length
}
handler();
});
}
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
const head = new ListNode()
let current = head
while(l1&&l2){
if(l1.val<l2.val){
current.next = l1
l1 = l1.next
}else{
current.next = l2
l2 =l2.next
}
current = current.next
}
if(l1){
current.next = l1
}
if(l2){
current.next = l2
}
return head.next
};
{ sandbox : { experimentalStyleIsolation: true } }
,二是vue组件样式使用scoped,三是顶层样式增加私有类名https://qiankun.umijs.org/zh/guide2. 了解市面上其他的微前端方案么 1、是类似乾坤、飞冰这种基于singleSpa的方案 2、是类似美团那种,相同技术架构的,自研原生实现 3. 为什么使用Monorepo组织代码仓库 我们这个库,设计上就是要能够支持vue2、vue3两个版本,以及不同业务需要的 采用Monorepo组织代码仓库,方便管理维护不同的功能包、既做到了独立发布,又能在项目中统一维护 4. webpack知道有哪些插件lodaer么?5. webpack你知道哪些优化
https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/
https://zhuanlan.zhihu.com/p/1025610342. 讲一下loader和plugin webpack的loader主要用来处理特定的文件,进行转换 plugin通过wepack提供的构建钩子可以实现loader无法实现的功能,比如deveServer、代码分割等 3. extenral 通过extenrals
选项,可以将依赖从输出的bundle中移除,并保持资源引入 4. 讲一下微前端 微前端并不是为了取代iframe,他们都有所适用的场景。对于部分相互独立并没有什么复杂数据交互的项目来说iframe就很合适,而且天生具备很好的隔离。而对于具有数据交互,尤其是在一个大项目中拆解出不同的业务功能模块来说,微前端的模式更合适。5. vue2和vue3的响应式 vue2的响应式是基于Object.definePropert
数据劫持与数组常用方法的改写来实现的。对于复杂数据类型,需要层层递归劫持,性能较差 vue3是通过原生api proxy
代理实现的,不需要递归,也不需要改写方法,性能更好,支持更好。但是由于代理只是对目标对象,在传递响应式对象时,操作不当容易丢失响应性。6. 讲一下es6 这个就是老生常谈了,大家仁者见仁智者见智 7. promise、promise.all ,promise与async await的区别,async await如并发 promise 8. 计算岛屿周长
// 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。
// 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
// 岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
// 示例1:输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
// 输出:16
// 解释:它的周长是上面图片中的 16 个黄色的边
// 示例2:输入:grid = [[1]]
// 输出:4
function search(grid) {
let res = 0
grid.forEach((line, i) => {
line.forEach((item, j) => {
if (item === 1) {
dp(i, j)
}
})
});
function dp(i, j) {
if (i == 0 || grid[i - 1][j] == 0) {
res++
}
if (i + 1 == grid.length || grid[i + 1][j] == 0) {
res++
}
if (j == 0 || grid[i][j - 1] == 0) {
res++
}
if (j + 1 == grid[0][1].length || grid[i][j + 1] == 0) {
res++
}
}
return res
}
const grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
console.log(search(grid))
这一面就是简单沟通了一下现在的工作情况。电话面试大概10分钟就结束了
https://zhuanlan.zhihu.com/p/39371113411. ts 用过那些函数,interface和type的区别 interface 可以拓展 extends interface能够声明合并 type不可以extends、implement但是可以类型交叉 type可以声明类型别名、联合类型、元组 interface不可以 12. 扁平化嵌套数组有几种方式
美团二面感觉面的不是很好二面之后就没有后续了