蚂蚁前端一面
蚂蚁一面:
Js和ts的区别
-
TS的元组和数组有啥区别
-
TS的联合类型晓得不,给你一个联合类型怎么转换为一个tuple元组,写一个函数实现。
UnionToTuple //实现 type UnionToTuple<Union> = {} type tuple = UnionToTuple<'a' | 'b'>;
-
Qiankun框架的样式隔离怎么做的,除了shadowdom还有什么能实现。
除了shadowdom可以通过添加选择器范围来解决样式冲突。
也就是子应用在子应用类下的某个盒子,相当于 div span指代div下的span,和这种方式一样
-
Js沙箱隔离有没有了解的,讲一下。
-
npm的tag策略
这就要说npm的version和tag的区分了,你可以理解为tag是version的一个标签,npm仓库版本的默认标签为latest。 比如当你在项目里直接 npm i xxx 的时候,就是安装最新的latest标签的版本,一般还有beta,next等tag,beta一般是用来测试,next则一般是用来做破坏性更新的大版本更新,npm i安装包的时候包名后面除了可以跟版本号,也可以跟标签tag,比如@next或者@beta
下面讲几个常用的命令。
发布普通版本
npm publish
发布测试包
npm publish --tag=beta
发布next包
npm publish --tag=next
-
从npm库中拉取一个包,包的版本号为pkg@1.0.1,pkg@1.1.0,在npm i的时候拉的是哪一个包。
拉取的是相对新版本的包即标签为latest的包,即pkg@1.1.0。
通过npm view pkg version来查看安装的是哪个版本的包。
通过npm view pkg versions来查看安装的这个包的所有版本号。
-
Vuex说下怎么用,目前都有哪些通信手段。
-
手写一个节流函数。
-
前端手写业务场景题:高频触发的事件,怎么只执行第一次和最后一次的事件(从防抖角度来写)
-
算法题:这个面试老问!不含有重复字符的最长子串
input: abcabcbb output: 3
input: bbbbb output: 1
iwwkee output : wke 3
// UnionToTuple
type UnionToTuple<Union> = {
}
type tuple = UnionToTuple<'a' | 'b'>;
// 节流函数
function solution(callback, delay) { let time return function () { if(time) { return } time = setTimeout(() => { callback() time = null }, delay) } }
//第一次执行,和最后一次执行
function solution(callback, delay) { let time let flag //用于判断是第一次或不是,第一次时flag为false return function () { if(time) { flag = true clearTimeout(time) } if (!flag) { //第一次的时候flag为undefined,之后就为true了 callback() //第一次 } time = setTimeout(() => { callback() //最后一次 }, delay) } }
package.json
”pkg“:"^1.0.0"
npm repo
pkg@1.0.1
pkg@1.1.0
// 不含有重复字符的最长子串
// input: abcabcbb output: 3
// input: bbbbb output: 1
// iwwkee output : wke 3