三面面试官:运行 npm run xxx 的时候发生了啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三面面试官:运行 npm run xxx 的时候发生了啥?相关的知识,希望对你有一定的参考价值。

参考技术A

面试官:npm run xxx的时候,发生了什么?讲的越详细越好。

我(心想,简单啊): 首先,DNS 解析,将域名解析成 IP 地址,然后
TCP 连接,TCP 三次握手...

面试官:停停,我问的不是从URL输入到页面展现到底发生什么?,是npm run xxx的时候,发生了什么。

我(尴尬,条件反射地以为是问的八股文):emmmm,我记得 npm run xxx的时候,首先会去项目的package.json文件里找scripts 里找对应的xxx,然后执行 xxx的命令,例如启动vue项目 npm run serve的时候,实际上就是执行了vue-cli-service serve 这条命令。(好险,幸好这点常识我还是懂的)

package.json文件

面试官:嗯,不错,那 为什么 不直接执行 vue-cli-service serve 而要执行 npm run serve 呢?

我(支支吾吾):emm,因为 npm run serve 比较简短,比较好写。

面试官:你再想想。

我(啊?不对吗,对哦,我想起来了): 因为 直接执行 vue-cli-service serve ,会报错,因为操作系统中没有存在 vue-cli-service 这一条指令

面试官: 哦,对对对,不错不错,哟西哟西!

我(嘿嘿,稳了,这次我要30k): 嘻嘻!

面试官:那既然 vue-cli-service 这条指令不存在操作系统中,为什么执行 npm run serve 的时候,也就是相当于执行了 vue-cli-service serve ,为什么这样它就能成功,而且不报指令不存在的错误呢?

我(啊?要不你还是把我鲨了吧,不想再勉强作回答):不好意思,这个我还没了解过。

面试官:emmm,好吧,没关系,我们做下一道算法题吧:....

....

后面无关此次文章的内容,就省略过了。

面试官:好的,此处面试到此结束,我们会在一周内回复您的面试结果

哔哔哔...(电话挂断)

唉。看来是凉了

为什么执行 npm run serve 的时候,这样它就能成功,而且不报指令不存在的错误呢?

我赶紧问问了大佬朋友这一过程到底是发生了什么

经过一番讨论,终于找到了答案。

不服输的我,赶紧回拨了面试官的电话号码。

我:喂,面试官,您好,我已经找到答案了,可以麻烦您再听一下吗?

面试官:嗯,可以啊,请讲。

我:我们在安装依赖的时候,是通过npm i xxx 来执行的,例如 npm i @vue/cli-service ,npm 在 安装这个依赖的时候,就会 node_modules/.bin/ 目录中创建 好 vue-cli-service 为名的几个可执行文件了。

.bin 目录,这个目录不是任何一个 npm 包。目录下的文件,表示这是一个个软链接,打开文件可以看到文件顶部写着 #!/bin/sh ,表示这是一个脚本。

由此我们可以知道,当使用 npm run serve 执行 vue-cli-service serve 时,虽然没有安装 vue-cli-service 的全局命令,但是 npm 会到 ./node_modules/.bin 中找到 vue-cli-service 文件作为 脚本来执行,则相当于执行了 ./node_modules/.bin/vue-cli-service serve (最后的 serve 作为参数传入)。

面试官:可以啊,真不错,但是我还想继续问问,你说.bin 目录下的文件表示软连接,那这个bin目录下的那些软连接文件是哪里来的呢?它又是怎么知道这条软连接是执行哪里的呢?

我(窃喜,这个我们刚刚也讨论了):我们可以直接在新建的vue项目里面搜索vue-cli-service

可以看到,它存在项目最外层的 package-lock.json 文件中

从 package-lock.json 中可知,当我们npm i 整个新建的vue项目的时候,npm 将 bin/vue-cli-service.js 作为 bin 声明了。

所以在 npm install 时,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录下,而 npm 还会自动把node_modules/.bin加入$PATH,这样就可以直接作为命令运行依赖程序和开发依赖程序,不用全局安装了。

假如我们在安装包时,使用 npm install -g xxx 来安装,那么会将其中的 bin 文件加入到全局,比如 create-react-app 和 vue-cli ,在全局安装后,就可以直接使用如 vue-cli projectName 这样的命令来创建项目了。

面试官:搜噶,也就是说,npm i 的时候,npm 就帮我们把这种软连接配置好了,其实这种软连接相当于一种映射,执行npm run xxx 的时候,就会到 node_modules/bin中找对应的映射文件,然后再找到相应的js文件来执行。

我(疯狂点头):嗯嗯,是的,就是这样

面试官:我有点好奇。刚刚看到在node_modules/bin中 有三个vue-cli-service文件。为什么会有三个文件呢?

我:如果我们在 cmd 里运行的时候,windows 一般是调用了 vue-cli-service.cmd ,这个文件,这是 windows 下的批处理脚本:

所以当我们运行 vue-cli-service serve 这条命令的时候,就相当于运行 node_modules/.bin/vue-cli-service.cmd serve 。

然后这个脚本会使用 node 去运行 vue-cli-service.js 这个 js 文件

由于 node 中可以使用一系列系统相关的 api ,所以在这个 js 中可以做很多事情,例如读取并分析运行这条命令的目录下的文件,根据模板生成文件等。

面试官:原来如此,不错嘛小伙子,短短时间内就掌握清楚了,看来学习能力很强,不错不错,我很看好你,我会催hr尽快回复你的。先这样了,拜拜

我(欣喜若狂,功夫不负有心人啊):好啊,好啊,拜拜

哔哔哔...(电话挂断)

过了三十分钟....

今天是个好日子,心想的事儿都能成,今天是个好日子,打开了家门咱迎春风...(手机铃声响起)。

我:喂,您好。

hr:您好,我是xxx公司的hr,根据你面试的优秀表现,恭喜你获得了我司的offer,经过我最大的努力,我给你争取到了最大的薪资,薪资是月薪3500,您看满意吗?

我:....

哔哔哔....(电话挂断)

tmd,c

https://blog.51cto.com/u_15077533/4531157
https://juejin.cn/post/6971723285138505765

京东三面,8分钟拿下13K offer,这两个核心问题帮了她

在这里插入图片描述

小林工作3年,转行测试工程师,面试十分钟,就拿13Koffer,面试官夸到:“比起那些所谓有测试经验的人而言,你表现的更专业。”

为此,找到这个转行并得到面试官认可的小林分享下经验。

核心第一问

你为什么要转行?

其实面试的时候我是很紧张的,因为我不是专业的测试人员,之前的工作是传统医疗行业,工作性质偏销售。

因为自己对互联网IT很感兴趣,从17年开始会针对性自学测试相关知识、向一些行业前辈请教,不得不说这对我的帮助特别大,以下复盘下我认为面试成功的两个核心问题以及一些相关准备。

“当时面试介绍完基本情况之后,问到我转行转岗做测试工程师的动机。

我的回答是:之前的工作是偏销售,本质就是卖东西,把我的产品/服务卖给需要的人。而是测试就是完善产品,这带我给我更多成就感。

之所以做销售是因为我很喜欢跟人打交道,但是局限性也很大,很容易陷入到某个点,比如解决眼前这个客户的问题,比如这个月的业绩。

而我理解的测试是质检,它不是针对一个点,它要解决的问题是一个面甚至一个体,比如你要更深入的思考。

比如,测试不只是发现软件的各种缺陷。

以最少的用例、时间和人力找出软件中潜在的各种错误与缺陷(软件测试有2080法则),通过修正各种错误和缺陷来提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患以及带来的商业风险。

我已经工作3年了,想做一些更大挑战的事,或者说突破性的事情,算是成长的下一个阶段吧。

核心第二问

你凭什么能胜任?

“面试官很有兴趣的问了下一个问题:你没有相关经验,凭什么能觉得自己能胜任呢?

这是个很核心的问题,还好我有准备,没在怕的。

实不相瞒,我的确没有正儿八经的从事过测试的工作,但为此做了一些准备。

系统性学习,为了更好的学习专业性知识,我参加了体系课程,目的是快速构建框架,血肉的填充是需要时间的,但是框架性的基础是可以快速建立的,比如刚说到的测试用例等等都是测试的底层思维。

实战式运用,测试是一个极度重实操的工作,所以光想不用也没用,在测试实战中会有相应模块的实战,比如性能测试,就会落地去输出整个测试方案,可执行的方案,晒出当时的测试报告。

保持交流学习,那次学习后最大的感触是优秀的人的思维是差别很大的。比如我们小组在出实战方案的时候,讨论到如何更科学的工具列出测试点并执行测试等。

我们当时列了很多:

思维非常活跃,大家都有很多想法,包括也尝试了探索性测试。

导师当时的点评则是:

创意是好的,也是大家都能想到的,但不是本质。这是基础测试都能想到的,我们要做的是看见本质。

评估投入产出比,选择确定好做什么和不做什么。这才是最重要的。

从这个小细节中我发现了测试工作其实入门比较简单,但是要做的精深很难,需要发现和解决相应环节的关键问题。

这场面试背后

我做了哪些准备

“面试官马上问我是否还有其他offer?我就想大概是稳了哈哈。

整个面试进展很顺利,本质原因就是企业招你来是为他提供价值的,把重点放在展示自己的能力上,只要能力匹配结果自然不会差。

不要空口讲白话,最理想的就是展示过去的成果。

你能做什么,做成过什么,有哪些思考等等。因为公司要判断你能否胜任这个工作。

面试以及拿到offer都是一个结果,其实最重要的是在这之前我做了一系列准备。

其中最核心的就是构建自己的测试思维、学习成体系的测试知识、做相应的落地输出等等。

学习内容这个东西差异很大,有人会觉得醍醐灌顶有人则觉得毫无鸟用,建议大家都好好梳理清楚自己的学习需求,找到合适的内容扎扎实实的去学习一定会大有收益

对于不同阶段的测试同学想说,大家的学习诉求、目标都是有差异的,具体而言。

最后:【可能给予你帮助】

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你

关注我的微信公众号【软件测试小dao】免费获取~

送上一句话:

世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。

我的学习交流群:1033482984 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

以上是关于三面面试官:运行 npm run xxx 的时候发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

华为Android三面成功通过,面试官都问了什么?

当你运行npm run命令时,会发生什么

两个月面试6家(美团搜狐)已拿滴滴18k*16薪offer

字节跳动一二面过,有点飘,结果第三面准备不足,挂了…

字节跳动一二面过,有点飘,结果第三面准备不足,挂了…

京东三面,8分钟拿下13K offer,这两个核心问题帮了她