avatar-decorate
lxylxy_ level
获赞
921
粉丝
436
关注
5
看过 TA
8027
武汉理工大学
2025
前端工程师
IP属地:湖北
四面八方offer来!!!
私信
关注
头像
10-23 12:04
已编辑
武汉理工大学 前端工程师
面试70场,感觉我的预感都比较准确,感觉过了的都过了,感觉挂了的都挂了。我的经历来看,遇到下面的情况或者听到下面的话术,基本就稳啦!1.面试官在反问的时候特别详细的介绍部门情况:印象最深刻的几场面试,阿里国际一面,快手三面,美团到家二面,阿里灵犀一面。这几场面试中面试官都特别详细的介绍了产品业务和技术栈,详细到感觉是他在面试而不是我在面试,毫无意外这几场面试很顺利的通过了2.面试官在面试过程中对你的某一点回答表现的很感兴趣:比如美团到家二面反问的时候,我提到了美团的Ketta业务,面试官眼前一亮说:“看来你还是有了解我们的业务动态哈”,当时就觉得稳了3.你能够偶尔调动面试氛围,整体面试流畅,如果偶尔引得面试官笑了(不是扶额苦笑哈),这种氛围的加持也能极大提高面试通过率4.反问面试官个人表现,面试官给出很多正向反馈,比如“各方面都挺全面的”,“基本功比较扎实”,“我觉得挺好的”,甚至有的面试官直接说“我这边给你过了”,这些情况基本就稳了那什么时候感觉是要挂了呢:1.有很多东西不会,特别是一开始问的问题就开始卡壳,面试体验很差,很不流畅2.前面回答的一般,有一部分没说出来,手撕部分也没完成3.面试官一直在重复一个问题,或者对一个问题反复解释,这个时候你可能没回答到他的点上,可能就没达到他的预期但是以上也不一定哈,也有很多绝地翻身的机会,不管遇到啥情况,都不要面到一半就开摆了,面试有时候可能就是一瞬间决定了你能不能过,多去创造这种机会#听到哪句话就代表面试稳了or挂了?##哪些公司面试官让你印象深刻?##我发现了面试通关密码##如何判断面试是否凉了##我的求职思考#
自闭咕:多看知乎的c++笑话,亲测可以有效把面试官逗乐
0 点赞 评论 收藏
分享
        今年5月至9月,我有幸进到字节抖音进行为期4个月的暑期实习,成为一名前端开发实习生。我相信有很多牛u跟我一样,刚进去的时候不知道到底该做些什么,该怎么上手,怎么总结。做的活大部分是dirty work,或者是业务需求,如何沉淀技术亮点?下面我从我自己个人的一些经验出发,总结几点我认为比较重要的,可能对大家有所帮助。1.在landing阶段明确自己实习的目标        如果你是一段日常实习或者是非秋招阶段前的暑期实习,那么大概率是为了一段漂亮的履历丰富自己的简历,那么你实习的目标就是在做需求并精进自己业务能力的同时深入挖掘每一个大需求中的亮点,并做好总结。        如果你是秋招前的暑期实习,那么首先需要明确自己的目标是什么:是为了一段履历,为后续找工作铺路?还是为了争取转正名额,最后留在这里?这些需要你在进入公司后的landing期内做出最初的决定。        一般所有公司对于实习生都会有一段融入时间。以字节为例,我们部门的landing期为两周,第一周会看各种文档,比如团队技术栈、参与产品的业务介绍、产品功能介绍以及各种培训考试;第二周会上手写一个小demo,熟悉组件库、react和基本的技术框架;之后就会慢慢上手接触需求。        业务上:在这两周,要多跟mt或者ld了解团队业务背景,比如大团队细分为哪些方向,不同的方向在做什么业务和产品,在整体链路中属于哪一环,自己参与到的产品当前的进展和本Q目标等等,业务内容是否符合你的期望,产品目标是否体现出了这个产品或者部门的发展前景,这些跟自己未来的发展也有强关联(比如当前已经过于成熟,没什么可做的了,那也许会有裁员风险;比如当前业务处于初期,那么后面入职后可能很累,或者压力很大,不确定性比较强)。        技术上:在这里工作是否有很多技术项可以接触?如果要作为第一段正式工作,我认为一定是要能带给你技术成长的才更适合,如果你看完了他们的文档,通过交流也没有发现有什么技术沉淀,那么建议以此作为跳板去找更优秀的工作。        团队氛围上:团队氛围很大程度上决定了你未来工作的体验。团队成员工作状态怎么样(是否比较有活力,上下班时间),团队工作外的氛围如何(成员间关系、周末活动、团建),团队技术氛围怎么样(平时会不会注重体验做专项优化、会不会有自己的想法推动落地),这些在landing期内通过观察和与同事沟通就能知道的差不多。我在实习期间,深刻的感受到了团队的技术氛围很浓厚,并且大家周末会约着打羽毛球、健身、特种兵徒步,也参与到了团建中,这种团队氛围让我产生了很强的留在这里的欲望。并且我认为周围的人都是很有思想的,他们会真正产生想法并推动落地,让我觉得有很多可以学习的点。        在这段时间明确自己的目标,后续的实习才好安排主要内容。2.在不同的阶段明确主体目标        如果你的目标是转正,那么要跟ld确定好是否有转正hc,是等额还是差额。如果没hc那就把重点放在秋招把。        如果目标是转正,我的经验是前期(8月前)认真实习,做好需求,并保证质量,这个阶段的努力是给ld和mt留下好的印象分。后期(8月后到答辩)匀一部分时间出来给笔试面试和复习,这段时间的目标是为了并行秋招和转正,所有两边都要兼顾好,前期打下了基础并做好了总结,后面写文档、复盘、整理面经都会顺手很多。3.主动跟ld或mt要需求,主动约一对一总结会        我认为避免dirty work的方法之一就是主动要某一块的需求。当你做完第一个小需求的时候,就可以主动跟mt去要大型需求或者其他活了,比如你看中了那一块,希望参与,或者觉得有哪些可以优化的点,都可以跟他们去提出想法。一来是凸显出你的主动性,二来是把选择工作内容的权力尽可能的掌握在自己手里(也许有用)。我是经常跟带我的同学要需求,实习期间一共三个需求,全是大需求,所以后面就有的沉淀。        主动跟老板约一对一总结会。这是你在老板面前表现的机会,老板不一定会知道你最近在做什么的,所以你的情况要主动去跟他同步。大概两周一次或者一个月一次,这样的频率就是每次会议都有内容可以说。        这里有我自己的一些经验(也来自于我老板给我的建议):        ①提前书写总结会的文档。可以从近期工作内容和产出、收获、自己本阶段发现的问题和不足、下一阶段的规划展开。        ②总结文档🈲空话。最好是你列举的每一点都能写上一到两个具体case,如git使用不熟练不规范,出现了xxxx问题,原因是xxxx。有case非常重要!!!        ③文档一定要体现自己的思考。ld可能不了解你做的事情,但从你的总结中看到自己的思考,这点是与你个人的发展潜力挂钩的,综合评判的时候一定有帮助。4.及时总结        我在实习期间,写了四个需求总结,写了两个技术方案,两个团队分享。个人的习惯是在开发完一个需求后,重新复盘自己的开发思路、遇到的问题、新学习到的技术框架或技术栈,还能优化的点之类的。这些总结文档老板是会看的,所以当他看到你平时的总结习惯,特别是里面自己的一些思考的时候,一定会给你加分的。        写总结还有一个好处,你所有的实现细节、思路都在里面,这就是你后面转正文档的主要内容,前期写好,后期写转正答辩文档就轻而易举了。5.需求全是业务需求,如何沉淀技术亮点写上简历?        我想这个问题应该是很多uu遇到的。我自己有几个小建议:        ①多看一下其他同学的内容,把技术难点偷一部分。一个大型需求有几个同学同时开发,那么其他同学那边可能会有能偷的点,比如服务端渲染之类的技术点,抽空去看这部分的代码,去问他实现思路和原理,自己再去拓展了解和延申,这就是简历的一个亮点了。        ②多去思考自己的业务逻辑或者代码有什么可以优化的点,比如复杂的计算能不能开启web worker优化?真正开发中没用上可以自己私下尝试一下,自己没有尝试过可以多去了解一下大致的实现细节,只要能讲明白,那不也可以作为简历的一个亮点吗?毕竟面试官可不知道你做了没有                作为实习生,老板或者mt不会一上来就给你很难的需求的,也不会接触到太多的技术,想要有亮点,一定要多去自己发现和思考。平时做好总结,多多沉淀,不管什么活都认真干好,一定会在老板们心中留下好印象。对你后续的简历书写、秋招都有好处。        最后祝大家实习顺利、秋招顺利。四面八方offer来!!!        欢迎大家点赞  收藏  评论  留言,方便的话送朵花花,哥们想要个领航员挂饰。欢迎评论区交流。以上是自己的个人经验,希望帮到大家#我的求职思考##不给转正的实习,你还去吗##实习##前端##想实习转正,又想准备秋招,我该怎么办#
投递字节跳动等公司10个岗位 我的求职思考 不给转正的实习,你还去吗
0 点赞 评论 收藏
分享
        顺丰二面面经续集。1.monorepo的各个子应用是独立打包的吗?        有在字节实习的uu应该都接触过monorepo。我是进去之后才知道这个东西,但对他的原理也不明白,今天跟大家一块了解一下。        首先什么是monorepo。我个人理解monorepo是一个将不同项目的代码放在同一个代码仓库中组织起来的一种方式。可以想象github中的一个仓库中有很多小项目的代码文件。这些项目虽然有可能是相关的,但通常在逻辑上是独立的,并由不同的团队维护。像我之前实习时的项目仓库使用monorepo,仓库中既有web前端的代码,也有小程序前端的代码。        monorepo有什么好处?1.多个项目之间需要共享代码、组件或者工具库时,monorepo比较简便。使用monorepo就不需要将想要共享的部分发布npm包再去别的项目中安装,而是有一个share目录,专门放置共享的组件或方法等。2.统一依赖版本管理时更好的确保一致性。3.根目录下有一个package.json,每个项目也有自己的package.json,通过在根目录下npm install,它会自动安装所有子项目的依赖。4.在开发的时候,省去了在多个代码仓库之间切换的麻烦。还有很多优点,比如统一的CI/CD,统一的构建流程......        再谈谈不好的点。从我自己的使用角度来说,刚开始最常见的问题就是更新依赖时很容易改变了其他子项目的依赖,在全局npm install或者一些api update的时候,会给所有子项目都更新,但是可能版本更新会给别的项目带来不可预见的问题,这也是为什么需要code review,把这些不是你应该改动的东西要改回去。除此之外,打包构建需要专门优化,否则会出现打包时间过长。        那么回到monorepo的子项目是否是独立打包这个问题。要知道monorepo的每个子项目都是可以独立开发、部署、构建...试想如果只有其中一个子项目fix了一个线上bug,但是整个项目都要重新打包发布那么整个流程岂不是太过冗杂了,所以一定是可以独立打包独立安装才有足够灵活性的。但是能独立打包并不意味着你的项目中的子项目都是独立打包的,具体还要看是否在子项目package.json中配置了打包脚本。2.setState是同步还是异步        拷打完项目就开始拷打原理了。这个问题当时没记住啊,恨自己没多看两篇文章。        首先要知道这个同步和异步跟我们所谓的js同步任务异步任务不一样,是指调用setState后能否马上得到更新后的值,即是否立即调用render 函数渲染视图。        在react18之前,在react 可调度范围内的setState 就是异步的,反之,则为同步。什么是可调度范围?react 合成事件内同步执行的setState 就是可调度范围。什么是react 可调度范围外呢?宏任务:setTimeout ,微任务:.then ,或直接在DOM元素上绑定的事件等都是react 可调度范围外。        在react18中多了批处理功能(当 React 在一个单独的重渲染事件中批量处理多个状态更新以此实现优化性能),这意味着之前没办法批处理的情况都可以批处理了。在每次setstate时会产生一个优先级标志lane,对于相同优先级的多次更新任务,react实际只会复用第一个调度任务,在一次批量更新结束后才会更新实际变量的值。相同优先级的setState是异步执行的,而不同优先级则是同步的。        需要注意的是,由于js的闭包特性,同一份代码在类组件和函数组件中的执行结果是有差异的。        详细源码理解推荐以下链接(彻底搞懂setState到底是同步还是异步1,2,3):        https://blog.csdn.net/y_ang_1/article/details/136941891?spm=1001.2014.3001.5502        https://blog.csdn.net/y_ang_1/article/details/137151783?spm=1001.2014.3001.5502        https://blog.csdn.net/y_ang_1/article/details/137151803?spm=1001.2014.3001.55023.react的任务优先级策略,以及哪些任务优先级比较高?        这么多场面试,这是唯一一个问了这个问题的面试官,不得不说是有水平和经验的。东西太多了,我水平也不够,帖个帖子:https://juejin.cn/post/7207406497508114489        涉及原理的内容确实很难理解和掌握,多看点帖子多看点源码吧。        如果大家觉得对自己有帮助,感谢大家点赞收藏送花评论!希望大家意向多多offer多多!#软件开发##软件开发2024笔面经##前端##顺丰#
查看3道真题和解析 软件开发2024笔面经
0 点赞 评论 收藏
分享
头像
10-27 10:17
已编辑
武汉理工大学 前端工程师
0 点赞 评论 收藏
分享
        我仔细思考了一下灵犀互娱四面为啥挂,想到了一个非常有可能的原因。        四面是技术面,说是技术面但实际上问的全是开放性问题,比如你最近了解哪些国际进展(不限于技术),比如你对AI 的看法等等。按理说这些问题时很好回答的,但是我犯了一个致命的问题,我一直在谈老东家。        问到国际进展的时候,我说我了解到了字节国际电商的业务进展和今年的形式,然后面试官问你觉得国际电商业务转好的原因是什么,我又一直在谈周受资的牛逼和能力之强大。聊到AI的看法时,我也提到实习的时候字节这边也有很多AI结合创新的点子,等等。我提了太多太多的字节,在四面的时候,这是很致命的,给面试官一种你其实根本不想去他们那边,只关注字节的感觉。        这是我踩到最大的雷区。        以下还有几个我认为的雷区:        1.提前准备没做好        在实习的时候面钉钉,当时提前10分钟我才发现没有给我发邮件,想找hr或者面试官的邮箱和联系方式也找不到,最后只能等面试官打电话问我怎么没通过他的钉钉好友,我才知道要下载钉钉。那个时候以及迟到两分钟了,然后现场下钉钉,手机电脑扫码之类的,最后迟到十分钟才进去。虽然疯狂道歉,回答的也还行,但是泡了9天挂了。        2.突发状况影响面试体验        这个点就是,面试官可以有突发状况,但你不能有(扶额苦笑)。秋招面美团到店二面,首先是面试面着面着突然掉线,然后花了一点时间才上来;其次是会议室约的时间不够,写算法写到一半,后面的人来了,只好跟面试官说换个位置。最重要的,以上情况加上手撕没撕出来。。。挂了是我活该。       大家还遇到过什么奇葩原因挂你的,可以评论分享一下,避免再次踩雷!#牛客创作赏金赛##24届软开秋招面试经验大赏##如何判断面试是否凉了#
0 点赞 评论 收藏
分享
       本系列到第七期了,这一期和下一期都来看一下灵犀互娱二面遇到的一些问题。二面过程中的技术问题不多,但是个个都深入原理,而且由于灵犀互娱这边是游戏公司,所以涉及到很多渲染优化的知识点,因此能够学习到很多原理。       涉及到原理的部分我的理解比较有限,大家看的时候辩证的看哈。        今天我们就看一个问题吧。Q:浏览器渲染原理是怎么样的,gpu进程和渲染进程之间如何协调配合,如何通信?       在问这个问题之前,面试官问了一个大家都被问过的问题:url输入到渲染全流程。没错,整个渲染全流程大家基本都知道,但是想要回答后面的问题就需要更加细致的了解中间的一些概念(先来背一遍进程和线程的概念)。       (面试过程肯定不用说下面这么多,但是我觉得借此机会了解整个过程还是很重要的,知道全过程才能用自己的语言描述出来,并且也不怕面试官详细到某个点)       首先来回顾一下浏览器的多进程架构。浏览器的四个主要进程是主进程、第三方插件进程、GPU进程和渲染进程,其中主进程只有一个,负责浏览器界面显示与用户交互,负责各个页面的管理,创建和销毁其他进程等等;第三方插件进程有多个,每种类型的插件对应一个进程,仅当使用该插件时才创建;GPU进程最多一个,与其他进程隔离处理 GPU 任务,用于加速绘制;渲染进程(也就是我们常说的浏览器内核Webkit等)有多个,默认每个 Tab 页面都会产生一个渲染进程,互不影响,他的内部是多线程的,渲染页面、脚本执行之类的就靠他。       其中渲染进程有五个主要线程:1.GUI 渲染线程:负责渲染浏览器界面,解析 HTML,CSS,构建 DOM 树和 RenderObject 树,布局和绘制等。需要注意的是GUI 渲染线程与 JS 引擎线程是互斥的。2.JS 引擎线程:JS 引擎线程负责解析 Javascript 脚本,运行代码。JS 引擎一直等待着任务队列中任务的到来,然后加以处理,一个 Tab 页(renderer 进程)中无论什么时候都只有一个 JS 线程(单线程)在运行 JS 程序。3.事件触发线程:他不受JS引擎线程控制,主要用于控制事件(例如鼠标,键盘等事件),当该事件被触发时候,事件触发线程就会把该事件的处理函数添加进任务队列中,等待JS引擎线程空闲后执行。4.定时器触发线程:也就是setTimeout,setInterval所在的线程。浏览器的定时器并不是由JavaScript引擎计数的,因为JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响计时的准确,因此通过单独的线程来计时并触发定时器,计时完毕后,满足定时器的触发条件,则将定时器的处理函数添加进任务队列中,等待JS引擎线程空闲后执行。5.异步HTTP请求线程:当HttpRequest连接后,浏览器会新开的一个线程,当监控到readyState状态变更时,如果设置了该状态的回调函数,则将该状态的处理函数推进任务队列中,等待JS引擎线程空闲后执行。具体这些线程之间的关系从帖子中找了个图(图1)       然后我们看下渲染原理。浏览器接收到返回的html之后就会开始渲染流程,输入的 HTML 经过一些子阶段,最后输出像素。看看图2,有整个渲染过程。       这个过程涉及到渲染进程中的主线程,合成线程和光栅线程池。       主线程:1.浏览器接收到HTML后,主线程开始解析HTML并转为DOM结构,在这个过程中,如果遇到script标签会挂起渲染线程,让js线程进行解析,因此script标签会阻碍DOM的解析。2.DOM解析完成后会进行CSS解析,计算样式,在计算过程中需要遵守 CSS 的继承和层叠(层叠的规则不记得的回去抄书)两个规则,这个阶段会构建CSSOM树。3.有了DOM树和CSSOM树就要创造渲染树了,因为有了DOM和component style(每个元素对应的样式)之后还不足以绘制页面,需要知道每个元素的位置和几何属性,这个阶段叫做布局(Layout)。4.有了渲染树之后,由于CSS中有复杂的效果,以及各元素之间有z-index等层级关系,因此下一步是分层。对于这些场景为了页面展示的正确性,渲染引擎还会为特定的节点生成专用的图层,并生成一棵对应的图层树。5.有了渲染树,图层树之后,主线程会遍历这些树并确定一个绘制顺序,创建绘制记录。       合成线程:分块,光栅化,合成。上面主线程的步骤走完之后,会将信息提交给合成线程,合成线程中会走光栅化(栅格化)这个步骤。什么叫光栅?大家可以搜一下,就跟栅栏一样,很多很多狭小的缝隙,那么光栅化的过程其实就是把整个页面分割成很多很多小的块去处理。为什么要进行这个处理,就是因为页面很长的时候,用户只能看到视口内容,有些图层可能超过视口很多,一次性渲染整个图层未免有些浪费,因此合成线程会对图层进行分块处理。栅格化之后,每一块会送给光栅线程池中的一个线程。合成线程的最后一个过程就是合成,会创建合成帧通过 IPC 通信(进程通信)提交给浏览器进程。浏览器进程接收到指令后会将内容绘制在内存中并展示在屏幕上。       光栅线程:上面提到光栅线程要去处理每个块,这个阶段会和GPU进程进行通信协调,会光栅化每一个图块并存在GPU内存中。       至此,浏览器渲染的完整原理就完全结束了(里面还有很多细节,这里帖一个参考帖:https://segmentfault.com/a/1190000041840526#item-2-8)。到这里也基本可以回答“gpu进程和渲染进程之间如何协调配合”这个问题了,配合的阶段就在光栅化这一步骤。       最后就是主进程,GPU进程和渲染进程三者如何通信。浏览器进程收到用户请求,首先需要获取页面内容(譬如通过网络下载资源),随后将该任务通过 RendererHost 接口传递给渲染进程,渲染进程的 Renderer 接口收到消息,简单解释后,交给渲染线程,然后开始渲染。渲染线程接收请求,加载网页并渲染网页,这其中可能需要浏览器进程获取资源和需要 GPU 进程来帮助渲染,当然可能会有 JS 线程操作 DOM(这样可能会造成回流并重绘)。最后渲染进程将结果传递给浏览器主进程。浏览器进程接到结果并将结果绘制出来。       上面都提到了整个流程,那么从这个流程的角度去理解一下重绘和重排。当我们通过 js 或者 css 属性更新了元素的几何属性会触发重排,此时浏览器会触发图3中布局及以后的所有步骤;当我们通过 js 或者 css 更新元素的绘制属性而不改变几何外观的时候,浏览器会触发图3中绘制及以后的所有步骤。因此重绘的开销相比重排会小很多。       为什么我们为了避免重排和重绘而去采用 css3 的 transform 等属性呢?因为此时整个主线程的流程会被全部跳过,执行后续的流程,而后续的流程交给了在执行线程、光栅线程和 GPU 进程上执行没有占据主线程的资源,因此效率是最高的。           这个问题到这基本就完整结束了,一个小小的问题,其实考察对于浏览器内核的渲染原理,在被问到之前我自己从来静不下心去看这个只是点,因为实在是低频。但是实习过程中又总是听到其他同时讨论渲染进程的优化问题,直到自己被问到不会了才沉的下气去看这些问题。还是要逼自己多看点东西。       如果大家觉得有用,欢迎大家点赞收藏关注送花!!!该系列往期链接:第一期:https://www.nowcoder.com/feed/main/detail/a79cb52ce00c4f6d874683e65b8eb718?sourceSSR=users第二期:https://www.nowcoder.com/feed/main/detail/04aee48cc23f4b09a04d0dba327f0c5d?sourceSSR=users第三期:https://www.nowcoder.com/feed/main/detail/0195906f12dd4fc0826251e9ceee19ab?sourceSSR=users第四期:https://www.nowcoder.com/feed/main/detail/2c0a525fa04240778e6c43d7d355a7ca?sourceSSR=users第五期:https://www.nowcoder.com/discuss/673869939018588160?sourceSSR=users第六期:https://www.nowcoder.com/feed/main/detail/ebead4b4e5da48439388aab5d4be290d?sourceSSR=users#阿里##灵犀互娱##前端##24届软开秋招面试经验大赏##我的求职思考#
0 点赞 评论 收藏
分享
        这一期把京东二面剩下的问题复盘一下,主要是针对构建项目中的各文件的作用。考察的点很细很细,工程化根本不需要问多复杂的原理,问这些答不上来就能知道你水平如何了,我答得特别烂,但是学习了很多东西。1.package.json文件中的script部分是干嘛的,scrpit中有个dev指令,后面配置了vite,这个vite哪里来的,如何运行起来的?        这个问题想回答好首先要知道package.json文件是干嘛的,里面的scrpit应该大部分同学都知道,但是vite从哪里来可能是大部分人没想过的问题。        关于package.json:在每个前端项目中,都有 package.json 文件,它是项目的配置文件,常见的配置有配置项目启动、打包命令,声明依赖包等。当我们克隆一个新的项目到本地时,需要执行 npm install(yarn install)命令来安装项目所需的依赖文件。当执行该命令时,就会根据 package.json 文件中的配置信息来自动下载所需的模块,也就是配置项目所需的运行和开发环境。package.json 中最重要的两个字段就是 name 和 version,它们都是必须的,如果没有,就无法正常执行 npm install 命令。npm 规定 package.json 文件是由名称和版本号作为唯一标识符的。        scrpits部分就是配置了我们常用的开发、打包等指令的,如我们常见的npm run dev和npm run build为什么能够运行或打包项目就是在这里进行了配置        那么vite是如何被找到的?我当时的第一反应是下面配置的devDependencies中有vite,这当然有关系,但是这只是配置了vite作为开发过程中的依赖,而真正能够让他被使用的包则是在node_modules中。我的理解是,当我们安装或者新建一个项目时,开发所用的devDependencies将vite作为我们开发时的依赖,通过这个配置让我们的程序关联上node——modules中的vite工具,再通过scripts中的指令调用。2.devdependencies和dependencies的区别,如果这两块的东西都写到devdependencies或dependencies里面有什么区别?        通过名字大部分同学都知道devDependencies配置的是开发环境所用的依赖,dependencies配置的是生产环境中的依赖。        他俩的详细作用如下:        dependencies 字段中声明的是项目的生产环境中所必须的依赖包。devDependencies 中声明的是开发阶段需要的依赖包,如 Webpack、Eslint、Babel 等,用于辅助开发。它们不同于 dependencies,因为它们只需安装在开发设备上,而无需在生产环境中运行代码。当打包上线时并不需要这些包,所以可以把这些依赖添加到 devDependencies 中,这些依赖依然会在本地指定 npm install 时被安装和管理,但是不会被安装到生产环境中。        那么如果这两块的东西都写到devdependencies或dependencies里面会影响什么?如果你的项目会被发为npm包被使用,那么devdependencies,dependencies必须分开写;如果并不发布,那么声明在dependencies 和 devDependencies 中的依赖没有大的区别。        如果安装一个npm包,那么这个包的dependencies意思是在运行时还需要依赖什么其他的包才能满足你的运行要求。安装的时候会安装这个包的dependencies,并且是向上递归的(可以看图2网友的解释)。3.编译完的dist和node_modules有啥关系吗,部署的是dist,node_modules会部署吗?        在构建项目的过程中(将源代码转换为 dist 中的可分发文件时),构建工具可能会读取 node_modules 中的包。例如,在使用 Webpack 构建一个包含 React 应用的项目时,Webpack 会从 node_modules 中找到 react 和 react - dom 等相关包,然后根据项目的配置将这些包中的必要代码与项目的源代码一起进行处理,最终生成的优化后的文件存放到 dist 中。        在开发过程中,开发者会在 node_modules 中安装各种开发依赖和生产依赖。当项目准备部署时,构建过程会将这些依赖的相关部分(根据代码的引用情况)正确地整合到 dist 中的文件里,从而确保项目在生产环境中能够正常运行,生产环境中不需要直接访问 node_modules 文件夹。        项目最终在 dist 中的可分发文件可能依赖于 node_modules 中的包所提供的功能。比如一个基于 Vue.js 构建的项目,node_modules 中的 vue 包提供了 Vue 框架的核心功能,构建工具会将这些功能整合到 dist 中的 JavaScript 文件里,使得浏览器在加载 dist 中的文件时能够正常运行 Vue 应用。4.pnpm-lock是什么        pnpm-lock.yaml 是 pnpm 包管理器生成的锁定文件。它类似于 npm 的 package-lock.json 或 yarn 的 yarn.lock 文件,用于记录项目的依赖关系和确保在不同环境中安装相同的包版本。        当你使用 pnpm 安装依赖时,它会自动生成 pnpm-lock.yaml 文件。这个文件包含了项目的依赖关系树,以及每个包的版本信息和依赖项的精确版本范围。这样,当你在不同的环境中重新安装依赖时,pnpm 会根据 pnpm-lock.yaml 文件来确保安装相同的包版本,以保持项目的一致性。该系列往期链接:第一期:https://www.nowcoder.com/feed/main/detail/a79cb52ce00c4f6d874683e65b8eb718?sourceSSR=users第二期:https://www.nowcoder.com/feed/main/detail/04aee48cc23f4b09a04d0dba327f0c5d?sourceSSR=users第三期:https://www.nowcoder.com/feed/main/detail/0195906f12dd4fc0826251e9ceee19ab?sourceSSR=users第四期:https://www.nowcoder.com/feed/main/detail/2c0a525fa04240778e6c43d7d355a7ca?sourceSSR=users第五期:https://www.nowcoder.com/discuss/673869939018588160?sourceSSR=users京东二面面经:https://www.nowcoder.com/feed/main/detail/18cb2c4275544c79af169aa92d2c3fd1?sourceSSR=users#牛客在线求职答疑中心##我的求职思考##京东##软件开发2024笔面经##前端#
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务