口试官的套路你该怎样奇妙应对
下面笔者场景还原一下项目经验口试的进程,借助 STAR 法例来简朴先容一下本身之前在做赏识器API兼容性搜查器的进程(通过口述将一件工作清晰描写在口试中也长短常重要的,以下均为口述方法,以是没有图)。 口试官:我看到你在简历中提到实现了一个搜查赏识器 API 兼容性的器材,可以先容一下么? 我:(Situation)好的,其时的环境现实上是一次线上的用户的舆情反馈说页面白屏/打不开,通过 JSError 日记的排查我发明最近呈现大量相同 IntersectionObserver is not defined 的日记,同时和我最近一次宣布的模块曝光需求时刻线是差不多相符的,以是很快定位到了是其时行使赏识器 IntersectionObserver API 做 DOM 曝光时没有思量到兼容性的题目。 口试官:那题目办理了么? 我:是的,其时定位到题目后通过增进 polyfill 的方法很快办理了这个题目。**(Task)**其后我借着这个题目我本身也举办了思索,着实跟着操纵体系和赏识器的更新,越来越多的 JS/赏识器的新特征开始被支持。为前端开拓带来便利的同时,也会带来一些不行停止的兼容性题目。兼容代码(polyfill)的忽视很轻易造成不行预估的题目。但假如只依靠开拓职员人工搜查兼容性题目并不是最优雅的办理方案,事实人工的不免会有漏掉。以是我想是不是可以或许开拓一个集成现有的兼容性搜查法则的器材将这个进程自动化。 口试官:不错,具体先容一下详细进程吧。 我:(Action)恩,这个设法降生之后我就去相识了一下常用的前端兼容性搜查网站:Caniuse 和 MDN 这两个是我较量常用的。其后发明这两个网站的搜查数据现实上在 Github 上都对应维护了一份静态的搜查法则(caniuse-db 和 mdn-browser-compat-data),这些数据都是具有特定布局的 JSON 文件,尽量这两者对赏识器支持水平描写的方法不太一样,但已经能满意获得兼容性数据的根基要求。接下来就是对代码的说明搜查,将代码和这些法则举办较量。这个进程必要对代码举办语法逻辑说明,以是我想到了用 Babel 将代码转化成 AST 语法树举办特定遍历。同时我清算通例的 API 的挪用方法我发明不过乎几种,好比:NewExpression(结构表达式) 和 CallExpression(挪用表达式)。当这些信息都把握清晰后我认为这件工作是具备技能可行性的。 口试官:恩,这个实现进程有没有碰着哪些题目?你是怎么办理的? 我:(Action)恩有的,方才提到 Caniuse 和 MDN 维护的静态 JSON 数据,我在实现进程中将这两份数据举办了名目标同一,目标是将两块数据举办互补同时利便后续举办搜查较量。最终究竟上获得了靠近 9w 条数据,假如直接拿来比拟是很影响服从的,以是其时操作 browserlist 可以设置指定方针搜查的赏识器范畴,好比 iOS Safari 9 以上,通过这一层去过滤在该范畴内没有兼容性题目的数据,从而镌汰比拟晋升服从,也为开拓者提供机动的设置手段。第二个题目同样也是搜查的机能优化,是通过 isReferencedIdentifier 去检测标识符是否有被真正引用到。 最后是这个器材与怎样接入宣布流程的管控,因为公司的宣布流程回收的是云构建的方法,以是我在宣布之前先颠末这个器材的校验,而且将搜查的功效买通动静关照和邮件体系,**( Result )**辅佐其他人在宣布前获得项目代码的赏识器 API 兼容性搜查陈诉,停止了这类题目的再次呈现。这次的履历辅佐我加深了对 Babel 和 AST 的领略。 口试官:那你相识 Babel parse AST 的进程么? 我:在理会成 AST 进程中有两个阶段:词法说明和语法说明。
词法说明阶段:字符串情势的代码转换为令牌(tokens)流,令牌相同于AST中的节点;
语法说明阶段:把一个令牌流转化为 AST 的情势,同时把令牌中的信息转化为AST的表述布局。 口试官:你项目中说的 AST 遍历的进程能再具体说说么? 我:Babel 在处理赏罚一个节点时,是以会见者的情势获取节点信息并举办相干操纵。这种方法是通过 Visitor 工具来完成的,Visitor 工具中界说了对付各类节点的会见函数,这样就可以针对差异的节点做出差异的处理赏罚。好比我在项目进程中首要针对 NewExpression 和 CallExpression 举办处理赏罚,通过 path 参数对节点以及节点的父子节点以及举办判定筛选,balabala。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |