专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

前端工程师常见面试题(前端进阶)前端工程化

  Babel的原理是什么?
  参考回答:
  babel的转译过程也分为三个阶段,这三步具体是:
  o解析Parse:将代码解析生成抽象语法树(即AST),即词法分析与语法分析的过程
  o转换Transform:对于AST进行变换一系列的操作,babel接受得到AST并通过babeltraverse对其进行遍历,在此过程中进行添加、更新及移除等操作
  o生成Generate:将变换后的AST再转换为JS代码,使用到的模块是babelgenerator
  如何写一个babel插件?
  参考回答:
  Babel解析成AST,然后插件更改AST,最后由Babel输出代码
  那么Babel的插件模块需要你暴露一个function,function内返回visitormodule。exportfunction(babel){return{visitor:{}}}
  visitor是对各类型的AST节点做处理的地方,那么我们怎么知道Babel生成了的AST有哪些节点呢?
  很简单,你可以把Babel转换的结果打印出来,或者这里有传送门:ASTexplorer
  这里我们看到constresult12中的11是一个BinaryExpression节点,那么在visitor中,我们就处理这个节点varbabelrequire(babelcore);vartrequire(babeltypes);constvisitor{BinaryExpression(path){constnodepath。node;letresult;判断表达式两边,是否都是数字if(t。isNumericLiteral(node。left)t。isNumericLiteral(node。right)){根据不同的操作符作运算switch(node。operator){case:resultnode。left。valuenode。right。value;breakcase:resultnode。left。valuenode。right。value;break;case:resultnode。left。valuenode。right。value;break;case:resultnode。left。valuenode。right。value;break;case:letinode。right。value;while(i){resultresultnode。left。value;resultresultnode。left。value;}break;default:}}如果上面的运算有结果的话if(result!undefined){把表达式节点替换成number字面量path。replaceWith(t。numericLiteral(result));}}};module。exportsfunction(babel){return{visitor};}
  插件写好了,我们运行下插件试试constbabelrequire(babelcore);constresultbabel。transform(constresult12;,{plugins:〔require(。index)〕});console。log(result。code);constresult3;
  与预期一致,那么转换constresult12345;呢?
  结果是:constresult3345;
  这就奇怪了,为什么只计算了12之后,就没有继续往下运算了?
  我们看一下这个表达式的AST树
  你会发现Babel解析成表达式里面再嵌套表达式。
  表达式(表达式(表达式(表达式(12)3)4)5)
  而我们的判断条件并不符合所有的,只符合12
  判断表达式两边,是否都是数字
  if(t。isNumericLiteral(node。left)t。isNumericLiteral(node。right)){}
  那么我们得改一改
  第一次计算12之后,我们会得到这样的表达式
  表达式(表达式(表达式(33)4)5)
  其中33又符合了我们的条件,我们通过向上递归的方式遍历父级节点
  又转换成这样:
  表达式(表达式(64)5)
  表达式(105)
  15hr如果上面的运算有结果的话
  if(result!undefined){
  把表达式节点替换成number字面量
  path。replaceWith(t。numericLiteral(result));
  letparentPathpath。parentPath;
  向上遍历父级节点
  parentPathvisitor。BinaryExpression。call(this,parentPath);
  }
  到这里,我们就得出了结果constresult15;
  那么其他运算呢:
  constresult1001050constresult60;
  constresult(1002)50constresult100;
  constresult(((1002)502)50)2constresult9;你的git工作流是怎样的?
  参考回答:
  GitFlow是由VincentDriessen提出的一个git操作流程标准。包含如下几个关键分支:master主分支develop主开发分支,包含确定即将发布的代码
  feature新功能分支,一般一个新功能对应一个分支,对于功能的拆分需要比较合理,以避免一些后面不必要的代码冲突
  release发布分支,发布时候用的分支,一般测试时候发现的
  bug在这个分支进行修复hotfixhotfix分支,紧急修bug的时候用
  GitFlow的优势有如下几点:
  并行开发:GitFlow可以很方便的实现并行开发:每个新功能都会建立一个新
  的feature分支,从而和已经完成的功能隔离开来,而且只有在新功能完成开发的情况下,其对应的feature分支才会合并到主开发分支上(也就是我们经常说的develop分支)。另外,如果你正在开发某个功能,同时又有一个新的功能需要开发,你只需要提交当前feature的代码,然后创建另外一个feature分支并完成新功能开发。然后再切回之前的feature分支即可继续完成之前功能的开发。
  协作开发:GitFlow还支持多人协同开发,因为每个feature分支上改动的代码
  都只是为了让某个新的feature可以独立运行。同时我们也很容易知道每个人都在干啥。
  发布阶段:当一个新feature开发完成的时候,它会被合并到develop分支,这
  个分支主要用来暂时保存那些还没有发布的内容,所以如果需要再开发新的feature,我们只需要从develop分支创建新分支,即可包含所有已经完成的feature。
  支持紧急修复:GitFlow还包含了hotfix分支。这种类型的分支是从某个已经发
  布的tag上创建出来并做一个紧急的修复,而且这个紧急修复只影响这个已经
  发布的tag,而不会影响到你正在开发的新feature。
  然后就是GitFlow最经典的几张流程图,一定要理解:
  feature分支都是从develop分支创建,完成后再合并到develop分支上,等待发布。
  当需要发布时,我们从develop分支创建一个release分支
  然后这个release分支会发布到测试环境进行测试,如果发现问题就在这个分支直接进行修复。在所有问题修复之前,我们会不停的重复发布测试修复重新发布重新测试这个流程。
  发布结束后,这个release分支会合并到develop和master分支,从而保证不会有代码丢失。
  master分支只跟踪已经发布的代码,合并到master上的commit只能来自release分支和hotfix分支。
  hotfix分支的作用是紧急修复一些Bug。
  它们都是从master分支上的某个tag建立,修复结束后再合并到develop和master分支上。rebase与merge的区别?
  参考回答:
  gitrebase和gitmerge一样都是用于从一个分支获取并且合并到当前分支。
  假设一个场景,就是我们开发的〔featuretodo〕分支要合并到master主分支,那么用rebase或者merge有什么不同呢?
  omarge特点:自动创建一个新的commit如果合并的时候遇到冲突,仅需要修改后重新commit
  o优点:记录了真实的commit情况,包括每个分支的详情
  o缺点:因为每次merge会自动产生一个mergecommit,所以在使用一些git的GUItools,特别是commit比较频繁时,看到分支很杂乱。
  orebase特点:会合并之前的commit历史
  o优点:得到更简洁的项目历史,去掉了mergecommit
  o缺点:如果合并出现代码问题不容易定位,因为rewrite了history
  因此,当需要保留详细的合并信息的时候建议使用gitmerge,特别是需要将分支合并进入master分支时;当发现自己修改某个功能时,频繁进行了gitcommit提交时,发现其实过多的提交信息没有必要时,可以尝试gitrebase。gitreset、gitrevert和gitcheckout有什么区别
  参考回答:
  这个问题同样也需要先了解git仓库的三个组成部分:工作区(WorkingDirectory)、暂存区(Stage)和历史记录区(History)。
  o工作区:在git管理下的正常目录都算是工作区,我们平时的编辑工作都是在工作区完成
  o暂存区:临时区域。里面存放将要提交文件的快照
  o历史记录区:gitcommit后的记录区
  三个区的转换关系以及转换所使用的命令:
  gitreset、gitrevert和gitcheckout的共同点:用来撤销代码仓库中的某些更改。然后是不同点:
  首先,从commit层面来说:
  ogitreset可以将一个分支的末端指向之前的一个commit。然后再下次git执行垃圾回收的时候,会把这个commit之后的commit都扔掉。gitreset还支持三种标记,用来标记reset指令影响的范围:
  1mixed:会影响到暂存区和历史记录区。也是默认选项
  1soft:只影响历史记录区
  1hard:影响工作区、暂存区和历史记录区
  注意:因为gitreset是直接删除commit记录,从而会影响到其他开发人员的分支,所以不要在公共分支(比如develop)做这个操作。
  1gitcheckout可以将HEAD移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要stash或者commit暂存区和工作区的更改。
  ogitrevert和gitreset的目的是一样的,但是做法不同,它会以创建新的commit的方式来撤销commit,这样能保留之前的commit历史,比较安全。另外,同样因为可能会覆盖本地的修改,所以执行这个指令之前,你需要stash或者commit暂存区和工作区的更改。
  然后,从文件层面来说:
  ogitreset只是把文件从历史记录区拿到暂存区,不影响工作区的内容,而且不支持mixed、soft和hard。
  ogitcheckout则是把文件从历史记录拿到工作区,不影响暂存区的内容。
  ogitrevert不支持文件层面的操作。webpack和gulp区别(模块化与流的区别)
  参考回答:
  gulp强调的是前端开发的工作流程,我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并、雪碧图、启动server、版本控制等),然后定义执行顺序,来让gulp执行这些task,从而构建项目的整个前端开发流程。
  webpack是一个前端模块化方案,更侧重模块打包,我们可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源。

始祖鸟对标爱马仕,安踏丁世忠飘了文丨吴大郎出品丨牛刀财经(niudaocaijing)始祖鸟是丁世忠布局全球化的重要棋子。安踏通过买买买实现了国内市场份额第一的目标,而始祖鸟代表的高端化运动品牌,则是丁世忠向全球A股如果股票一直下跌,散户死拿不放,你猜庄家会怎么洗?小故事大道理三个人要坐牢三年,看守给了他们三个人一个请求。美国人喜欢抽烟,他们要三盒。法国人是最浪漫的,他们需要美女作伴。犹太则表示,他想要一个能和外面世界交流的手机。三年之后,美今年广东这些大学报考人数爆了!专科竞争都这么大2022年,广东高考共录取77。34万名考生,本专科层次均超额完成招生计划。从本科批专科批的投档情况来看,大部分省内高校实现一次性满档,即投档没有缺额今年广东本专科批次超多高校一次江门开平这条古村成功入选2022年江门市乡村旅游示范村南都讯记者严亮实习生李振基10月24日,江门市文化广电旅游体育局公布2022年江门市乡村旅游示范村名单,开平市塘口镇仓前村成功入选。开平市塘口镇仓前村历史悠久,毗邻世界文化遗产开平胡彦斌郭采洁孙怡回归,再见爱人2探讨全新婚姻议题10月28日,芒果TV热播综艺再见爱人第二季发布主视觉海报并正式定档,同时也官宣了观察室嘉宾和三对真人秀夫妻。节目将于11月1日首播,延续第一季的旅行设定,三对面临婚姻危机的夫妻苏长高电新2022年前三季度净利润8397。16万元同比下降56。20中证智能财讯长高电新(002452)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入7。98亿元,同比下降27。86归母净利润8397。16万元,同比深圳租房参考价来了4319个小区在列,南山租金最高10月28日,深圳市房地产和城市建设发展研究中心发布关于深圳市2022年度房屋租赁参考价格的通知。涉及4319个小区房南山商品房租赁参考价最高通知提到,该参考价格发布旨在为促进深圳辛巴直播带货让优质农产品直连全国消费者直播电商行业近年来的发展大家有目共睹,其现在还处在方兴未艾的发展阶段,未来发展潜力巨大。作为新兴行业,如果能为社会发展作出贡献,更是一件美事。都说有人的地方才有江湖,在乡村振兴的问收评沪指跌超2退守2900点,行业板块全线飘绿,两市逾80股跌停金融界10月28日消息周五A股三大指数低开,早盘沪指横盘,深成指创业板指震荡下挫,其中创业板指失守2300点,上证50指数续创阶段新低,但科创50指数逆市小幅上涨午后A股继续走弱,ThinkPad30周年即将到来,或将迎来众多创新性产品10月25日,ThinkPad官微发布了第一张30周年预热海报,从ThinkPad30周年新商业领导力以思考进化时代,三个标题签和海报可以推断出,此次30周年是围绕着ThinkPa这几家企业一直被误认为央企,其实不是中国有很多中字头开头的企业,咋一听名字以为是央企,其实不是,这几家企业一直被误认为央企1。中国雄安集团中国雄安集团有限公司成立于2017年7月18日,2017年6月29日,国务院批
宇宙中最极端的黑洞碰撞之一证明了爱因斯坦是对的黑洞的扭曲速度是以往观察到的100亿倍。两个合并的超大质量黑洞的可视化研究巨大黑洞碰撞后果的研究人员可能已经证实了一个世纪前阿尔伯特爱因斯坦预测的引力现象。根据发表在自然杂志上的新支付宝微信终于可以互相转账,你试了吗?近些年来,移动支付的发展如火如荼,各大平台都想从中分一杯羹,经过多年的厮杀,支付宝通过与淘宝绑定,在移动支付领域稳稳地站住了脚跟,微信也通过自身的社交属性,从移动支付领域中获得了巨适合日常使用的AR巨屏NrealAirAR眼镜体验ARVR眼镜作为市场热点,随时随地大屏观影听歌畅玩游戏是最大亮点,但是就和3D电影一样,由于不便携易眩晕的问题一直叫好不叫座。VR市场比较火的爱奇艺头戴式AR,内容丰富,观影体验还滴滴打车下载安装方法,原来这么简单滴滴快车的试用期取决于你需要多长时间才能收到40单。当试用期结束时,评估符合滴滴平台的要求时,它将成为正式的滴滴司机滴滴快车端一怎样下载滴滴打车到手机上,找到千米应用获取到链接后点买手机不要太抠门,双11值得入的3款手机,一步到位不踩坑每年进入10月份后,消费者都会停止购物的动作,就等着双11。如果你今年双11也有购机计划,可以考虑这3款手机。在能力范围内,尽可能提高预算,千元机就不要考虑了。买手机不要太抠门,一人类起源于非洲,为何又要走出非洲?非洲起源论会被推翻吗?你有没有想过这样一个问题,人类从何而来?为什么地球上没有其他动物进化成智慧生物?目前关于人类起源的问题,学术界存在两种主流假说,单地起源假说和多地起源假说,支持单地起源假说的科学家实拍比亚迪汉DM旗舰型插电混动,242纯电续航!在使用纯电驱动的新能源汽车车型中,很多国产的汽车品牌做得也是很不错的,尤其是在智能化的配置上。其中比亚迪公司的车型占据的地位是比较高的,今天就从多方面了解汉DM2022款242KM支付宝可以给微信转钱了,意不意外,惊不惊喜现在发现支付宝居然可以给微信好友转钱了,一系列操作完成之后生成二维码,然后把二维码发给微信好友,然后再让微信好友打开自己支付宝扫码领取,呵呵,怎么看都像是脱裤子放屁捂脸捂脸捂脸捂脸安卓微信又更新可以美化二维码了最近,微信安卓8。0。28正式版中迎来热更新,覆盖了两个新功能。之前这两个功能一直处于内测状态,这下更多安卓用户可以使用了,一起来看看吧。1二维码支持更换新样式在微信里点击我头像二详解WIFI6技术不知不觉中,2022年已经到了四季度。在过去的机圈里,国内手机圈可谓热火朝天。麒麟9000还可战一年,超级火龙888和变态升级版8淦1还有改良版的8淦1plus,2K120HZUF我为什么离开华为?今天周末,突然想写点什么,就跟大家聊聊我为什么离开华为吧。我是2018年下半年加入华为的,到今年上半年离开,正好快4年,在马上要续签第二张合同的时候,我选择了离开。很多身边的家人朋
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网