0
点赞
收藏
分享

微信扫一扫

蚂蚁前端一面

晴儿成长记 2022-04-21 阅读 106

蚂蚁前端一面:

Js和ts的区别

  1. TS的元组和数组有啥区别

  2. TS的联合类型晓得不,给你一个联合类型怎么转换为一个tuple元组,写一个函数实现。

UnionToTuple
//实现
type UnionToTuple<Union> = {}

type tuple = UnionToTuple<'a' | 'b'>;
  1. Qiankun框架的样式隔离怎么做的,除了shadowdom还有什么能实现。

除了shadowdom可以通过添加选择器范围来解决样式冲突。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eeOxa0Ej-1650544434891)(C:/Users/wang_He/AppData/Local/Temp/ksohtml/wps7C1C.tmp.jpg)]

也就是子应用在子应用类下的某个盒子,相当于 div span指代div下的span,和这种方式一样

  1. Js沙箱隔离有没有了解的,讲一下。

  2. npm的tag策略

这就要说npm的version和tag的区分了,你可以理解为tag是version的一个标签,npm仓库版本的默认标签为latest。
比如当你在项目里直接 npm i xxx 的时候,就是安装最新的latest标签的版本,一般还有beta,next等tag,beta一般是用来测试,next则一般是用来做破坏性更新的大版本更新,npm i安装包的时候包名后面除了可以跟版本号,也可以跟标签tag,比如@next或者@beta

image-20220329104854598

下面讲几个常用的命令。

发布普通版本

npm publish 

发布测试包

npm publish --tag=beta

发布next包

npm publish --tag=next
  1. 从npm库中拉取一个包,包的版本号为pkg@1.0.1,pkg@1.1.0,在npm i的时候拉的是哪一个包。

拉取的是相对新版本的包即标签为latest的包,即pkg@1.1.0。

通过npm view pkg version来查看安装的是哪个版本的包。

image-20220329095018600

通过npm view pkg versions来查看安装的这个包的所有版本号。

image-20220329095103161

  1. Vuex说下怎么用,目前都有哪些通信手段。

  2. 手写一个节流函数。

  3. 前端手写业务场景题:高频触发的事件,怎么只执行第一次和最后一次的事件(从防抖角度来写)

  4. 算法题:这个面试老问!不含有重复字符的最长子串

input: abcabcbb output: 3

input: bbbbb output: 1

iwwkee output : wke 3

// UnionToTuple

type UnionToTuple = {

}

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

function solution(str: string): number {

let set = new Set()

let length = 0

let maxLength = 0

for (let i = 0; i < str.length; i++) {

if(!set.has(str[i])) { //不存在

set.add(str[i])

length ++

} else { //存在

maxLength = Math.max(maxLength, length)

length = 0

}

}

return maxLength

}

举报

相关推荐

0 条评论