经验分享

您所在的位置:网站首页 52ceg论坛 经验分享

经验分享

2023-12-29 02:29| 来源: 网络整理| 查看: 265

image.png

前段时间分享了一下我是如何学习八股文,然后很多小伙伴就询问了我项目相关的问题,这里就整体讲下面试是怎么考察项目的,然后讲一下我第一次面试时项目踩得一些坑,和吸取教训后我是怎么准备的面试项目,话不多说,下面直接进入正题。

(tip:成功没有捷径,都是靠长时间累积和短期的努力实现的,这里不鼓励0基础包装自己去突击面试,而是明白要往哪些方向去努力)

【关于我】 双非大三,前段时间拿到了字节开发岗实习offer,无交流群、公众号(有B站可以关注下我,hh),单纯分享经验希望能给有需的小伙伴提供一些帮助,欢迎找我 私信交流、简历修改、字节内推( ********************************)

一、前言 1.1 关于项目一些整体情况

很多小伙伴对于面试更熟悉的可能是八股文,往往会不太看重项目。等意识到的时候就发现自己手头没什么项目,临时写时间不够,跟着课程走又经验不够,面试官一问漏洞百出。或者有些有项目经历的同学对自己项目不满意,对于人手一个的商城、微服务又望而止步。再或者就是项目很好,但准备不充分导致项目亮点并没有被面试官发掘。所以在面试前有必要对面试项目有个全面的认知。

项目需要从哪几个方面准备?本文从四个方面讲下如何备战项目。 项目本身准备:完成一个技术栈合适的项目 项目简历描述:不管你项目多厉害多酷炫,你接到面试通知前只能通过文字去描述它(后文详细讲) 项目内容口述:你成功约到了面试,这时候更需要的是你把你项目讲出来(同后文) 项目技术点提问:面试官一定会从技术角度对你的项目进行提问,关键答好了加分,答不上就尴尬 到底怎样准备项目才足够面试或者怎样的项目才适合面试呢? 这个问题没有答案,最好的就是是你能理解这个项目,并且这个项目技术栈足够,以后端为例,一个简单的评级 秒杀商城 > 普通项目 ; 这里面涉及很多高并发,锁,一致性问题,难度高,不建议水平一般的同学 上线项目 > 本地项目;简历放个链接,比写一堆高大上的文字有说服力 分布式/微服务 > 单体项目;本质功能没啥区别,但思想和理念完全不一样,可以问的东西很多 后端相关项目 > 后端不相关项目;理论上不相关的项目写了更没写一样 然后讲几点一个项目注意点 【尽量避开大众项目】: 项目一定要有你的痕迹,自己写的项目就要高原创,复刻他人的项目就要添加自己的元素内容,切记不要用烂大街的项目,你花时间准备常见项目可以,但一定要改内容(具体怎么改参考后文)博客项目,xxx管理系统,RPC等,xxx音乐播放器,客观印象不好(上线实用的除外) 【别太纠结原创】 做项目未必是自己原创度100%的好,可以基于开源改,也可以复刻,不要太纠结自己花时间写一个好项目去准备面试(除非你是大一大二做准备)。大三或者面临找工作的同学可以基于开源项目去准备一个自己能理解,并且自己理解后去尝试改动的项目。 【别太在意秒杀商城】 如果你是开发经验少的小白千万不要随大众做一些秒杀电商的项目,完全是给自己挖坑,面试扎实的基础 + 完善的两个项目 + 对项目的准备 就足够了,你应该考虑的是做一个适合你的项目,然后这个项目你所有技术栈都清楚,这个就够了,而不是B站随随便便点开一个教育机构的电商项目就看几个月,完全没意义(开发大佬除外)。 【保持学者的态度】 学生项目在面试官眼里其实都一样,除了一些特别亮眼的高技术力的作品,面试的重点都是讲你从项目里面收获了什么,你能不能讲你这个项目,所以更多的是你作为学者去和面试官探讨挖掘你写项目的收获以及你个人在写项目的时候的亮点。 【技术栈要广/深】 项目一定往深度或者广度去发展,要不基于旧轮子造个新轮子(就类似实现一个你自己的RPC),要不基于最新的技术栈造一个完整的项目(像分布式、消息队列、搜索引擎、缓存同步、云容器、流水线等)弄个大杂烩。这里就有人问了,上面讲了这么多那我到底该写什么?这里可以看后文2.1综合自己情况去思考主动去找,然后记住上面一些点去选择就行了。

看完注意点,就讲讲面试是如何考察项目的,这个最重要了,对于小白可以提前准备,对有项目的可以更全备的准备。我回想起我第一次面试就很呆qwq。。下面讲讲面试如何考察项目的。

1.2 面试如何考察项目(场景)

了解面试官如何考察项目前,先讲讲如何把你项目的信息传达给面试官。

简历项目介绍: 介绍一定要全面,不然可能筛选都过不了!也不能为了好看而造假(后文会细致介绍) 在线演示网站: 事实胜于雄辩,扔一个网站面试官不一定会看,但至少项目印象会好一点。 项目总结博客: 项目不方便上线,又想简历文字不足以展示你项目,可以试着后面加个博客链接

然后说说面试官考察出题的几个角度

开放性提问: 这种问题是希望面试者能自己把项目优点讲出来,提前准备好应答就能高分拿下 *介绍一下你这个项目? *一定要把握住的问题,是你“推销”你项目亮点的机会,把这个当成答辩去介绍 讲讲你在这个项目中的工作。某某后端人员:我全干!;干了啥说啥,全干那就分点前后台部署全部讲一遍 可以简单说说你项目的技术栈吗?简简单单,自己写的,这里注意要讲为什么用,没有系统是上来就是高并发,高可用的,你选择技术是为了解决什么讲的越详细越好。 讲讲你项目的亮点? 小白会觉得登录都是亮点,而一些厉害的又觉得自己项目平平无奇,其实关键是用文字去修饰,你至少把你项目功能top 3列出来,然后再去文字修饰。 讲讲你项目中遇到的问题? 这种问题构建就是看你有没有思考,一定要要问题,给自己一张白纸思考,至少想出3个来。 如果让你继续完善这个项目你会怎么做。优化其实就是对你遇到的问题的补充,该上线的上线,该增加并发量的加并发量,至少也准备三个 如果让你设置一个 非开放性提问:这里起就是面试官对你技术的一些问题探讨,或者是他引导去发现你项目的亮点 你为什么使用xxx技术呢? 你可以讲讲xxx技术的工作原理吗? 你项目是怎么上线的? 你项目为什么没上线。 讲讲你项目的xxxx(登录/购物车/消息通知..)模块怎么实现的 讲讲你系统xxx(RBAC/支付/聊天室)功能怎么实现的

场景题一般都是跟着项目来的,有时候你会发现面试官不是无故抛出场景题,很多时候都是基于你项目定制的

开放性场景题:**你的程序可能没经过大风大浪,但面试官总能给你刮起他见过的大风大浪** 如果我现在有xxx个用户来访问你的网站,你网站能顶住吗。我觉得啊,10个应该没问题,面试官:好下一个。这里就该讲你用过jmeter测试过或者就实话实说没测试过,然后给个测试思路 如果你网站收集了2亿个日志,你能在小内存情况下找到相同的两份记录吗。啊,不,我不记日志的,出门左转.jpg;hash分组常见大数据处理题 如果网站用户激增你会怎么应对当然是跑路,啊,不是。。|数据库分库分表,服务器扩容,加机器等等 如果记录对不上,你会怎么办查日志 开发场景题目太多了,这里就不一一举例了,说几个我面试遇到的吧 如何设置分布式日志系统 多个获取/修改 版本号请求怎么保证你的缓存一致性 1.3 我第一次面试的错误示范

年初字节三面,前面里面都是八股文,清楚第三面我要准备好项目内容,我的项目是两个增删改查项目但内容都挺丰富的,但面试前我的心态是:我才大三上(他还只是个孩子.jpg)所以觉得应该不会像秒杀项目一样刁难我,并且这两个项目是我独立完成的,有什么问题尽管来(ps,我真的没一点意识去准备这几个问题:讲讲你项目的亮点、讲讲你项目的难点),我的想法是他问我技术栈,问我怎么写的,我问心无愧肯定可以答下来。下面就还原下现场

三面面试官:哦,看你这两个项目都是学校写的吧。 我:对对对,紧张到疯狂点头(第一次见三面面试官) 面试官:那我你给我简单介绍下第一个后面才清楚这里是给我机会让我自己讲亮点 我:讲了下我为什么写这个,花了多久,甚至还多次表达自己能独立完成前后台。我当时仅仅是想让他认可这是我自己写的而已,但其实这无关重要,应该借助这个机会讲你项目的特点,尽可能的多讲特色。但当时现场我就想不到啥亮点,介绍的很普通,就像让你说自己优点,不提前想想短时间还真说不出 面试官:噢,既然如此,你写的时候有没有遇到什么困难。这真的是很常见的问题了,主要考察你写的时候有没有思考,你可以把项目目前的缺陷和你写项目过程中的debug收获讲讲。 我:好像没太多,(讲了几个无关紧要的,我觉得我能力够解决一些小问题,所以没啥说的),然后说这个项目就是基本的增删改查,我写了很多类似的,很熟悉了。我觉得我写这种小项目问题都解决了,说大问题也没啥,现在回过头来,我当时是真没准备,就像让我说我的缺点一样,我有但我改正了,所以说不出几个那种感觉,其实关键是讲困难曾经有啥,然后怎么解决的。最后面试官想要的回答我没说还浪费了这种开放性问答的机会。 面试官:额(⊙o⊙)…那讲讲第二个项目吧,你为什么用xxx技术第二个项目这种问题才是我预期中的问题,就讲得不错。但现在回过头来发现我第一个项目就相当于面试官给我机会让我发挥,我自己浪费了。

然后第一次面试凉了(项目这里扣分了,然后多线程打印abc是不熟悉地写出来的扣分;反思了一下双非面试的机会不多,有机会就尽量100%表现,让面试官没有拒绝你的理由,找到问题就赶紧补)然后我就开始认真准备面试项目了。我后文是分享对我后面怎么准备面试项目的。

二、项目准备

这里讲一些攻略,适合小白和准备优化项目或者准备面试的同学。

2.1 没项目怎么办

** 讲讲怎么选择项目 **

一般准备两个项目;时间不够就重点准备一个项目 按照自己学习进度,最好是 springboot 项目,有能力就微服务或者分布式

这里讲讲获取项目的途径

自己码一个项目 不推荐,除非时间足够,或者学的很前,像我做项目都是每做完一个项目就有新的技术栈就不喜欢之前自己写的项目,所以除非你技术栈已经很全了,不然不建议自己从零开始造。 参加同学组队项目 不推挤,除非核心成员,能一起开发,不然进去你就真的是负责部分工作了,而且成长不大,适合自己没有能力自学写项目的同学 参加实验室老师的项目 推荐,老师项目成长最快了,老师给你布置任务,然后你有学习方向,然后甲方会催你,有时候成长就是在压迫中出来的,哈哈,我就是,反正参与后你会收获很多,及时项目没成功,但你会比不参加的同学进步很多,一个是经验,一个是能力。 开源项目:推荐,但获取渠道需要鉴别 自己找 有能力就多逛github,逛社区,一些新技术或者方便的脚手架你不去找它,它会来找你? 找学长、大佬推荐 抱大腿,选一个开源、然后有视频教程、有丰富文档的适合你技术栈的项目 上* `*有一个***论坛项目,吹爆,技术栈适中,适合小白,教学文档丰富,关键免费` 上慕课 这个慕课是程序员的慕课,不是大学慕课,这里视频质量极高,教学质量很不错,但都是收费的,一个项目少的几百,贵的几千,适合有钱人;没钱的可以去组队购买,或者去神奇的淘宝(有钱尊重版权,没钱尊重自己qwq) 上B站 b站课程质量参差不齐,完整的项目课程都是培训机构的,免费课程适合有时间的去学习,时间紧的还是走付费课程。然后培训机构其实适合自己完全没方向的同学,那种获取信息不通畅,想有大佬包帮的,可以去购买培训机构课程,但有些东西是培训机构带不来的,所以尽量多思考,多逛社区。 加知识星球 知识星球就相当于交流群论坛版,有大佬提供学习路线和一些学习资源,一般一两百一年,但里面所有资源免费,项目质量也很高,都是博主精挑细选的。

如果看到这里还是不清楚自己需要什么项目,那就再看一遍上面第四点,一定要主动去找,不论什么方式,不去找项目看到不会自己找上门,后文项目细节就不讲了,默认都有一个已经运行起来的项目了。

2.2 项目准备

一个刚刚上手的项目需要做什么准备呢?这里就拿大众化的 博客项目 来讲。虽然博客项目烂大街,但好好准备的博客项目效果不一定比秒杀电商差。很多时候晚上的项目都是以代码流程为主,讲课质量也参差不齐,但都没有单独把如何应对面试拿出来讲,下面我就以博客项目为例,讲一下如何全面备战面试。image.png

最基础的你需要了解代码,不是说全部看懂,而是你能根据一个功能快速定位代码在哪,能把代码流程走一遍,这是最基础的。 给你的项目写篇总结博客,把用了什么技术栈、数据库设计、模块设计(登录注册、用户模块、博客模块、点赞) 写一遍,一个你可以更熟悉你的项目,第二也可以放到简历上面如果你博客没上线的话。 基于已有的代码修改一个模块或者增加一个模块,例如把登录注册的账号密码登录改成邮箱验证码登录;或者增加一个信息通知模块(点赞、评论等都会站内通知 + 站外邮箱推送)。这样可以帮助快速熟悉项目(自己写的项目忽视~)。 对你项目里面可以优化的地方记录下来,然后去看高质量文章或者看一些项目实战是怎么解决这些问题的。我推荐关注一下下面几个模块 登录鉴权模块:看看别人系统怎么做RBAC鉴权授权的,然后看看自己系统可以怎么提升。同时看看怎么做分布式怎么记录用户登录状态等问题。 :看看一些大佬的项目是如何用redis + mysql处理这些内容的。然后你会发现[收藏]、" src="https://uploadfiles.nowcoder.com/images/20191018/468200_1571397293409_4A47A0DB6E60853DEDFCFDF08A5CA249" alt="" />、[关注]、[阅读量]实现逻辑都符合这种 [用户 操作 对象] 逻辑。他们业务层公共部分(redis + 锁 + 持久化)甚至可以共用,当然也有简单的方式就可以看看别人怎么实现,面试官问起来,你可以讲你怎么实现的,又可以讲可以怎么优化,同时记得关注一下数量统计多线程问题怎么解决。 消息通知模块:最专业的实现就是MongoDB+消息队列,暴力一点就是Mysql。看看别人系统怎么把各种消息(点赞、评论、通知、私聊)封装成消息对象实现消息已读、大量消息广播、设置消息通知方式、站内通知实时接收。这些都是拓展,你只需要当做好奇去看看别人怎么实现的,会发现里面很多都很好玩,虽然你做不出来,但你能和面试官讲很多你了解的,这里如果你能拿出成熟方案,未必不比秒杀亮眼。 其它模块:** **类似博文热度算法、用户互关好友推荐、公共聊天室、用户日活量统计等都是可以去了解的,保持一颗好奇心,一些日常你app应用上常见的功能可以去思考你能不能做,不能做就查博客了解解决方案。 对于你项目开放的后端API能不能再做几个平台,试着做个小程序或者做个app都可以(和后端无关,时间有多可以考虑) 在开发流程上下功夫,别人都是普普通通的本地项目或者在线项目,那我可以考虑用用flow工作流(feature/master)去使用git管理代码,使用云容器流水线部署。这样也可以成为你项目的亮点。 最后就是在文字上面下功夫了,把你实现的内容用文字简洁专业地写在简历上面(博客的项目介绍百度一大堆可以去参考)。然后自己准备好一个文档提前记录好以下的问题。 简单介绍下你的项目:这里指你用最少的词最大限度的把你项目亮点写下来。 你可以讲讲你的项目吗:这里就说明面试官给足你时间,你可以当成答辩给老师介绍项目一样2..3分钟把你项目的各种设计讲一遍。我当时就是从课设出发讲我为什么写,然后讲我给我项目写了哪几个平台(后端api、后端管理、前端web、前端app),然后从代码层面讲亮点,用了什么技术什么设计模式,再到部署用的什么方式,上线做了什么装备(域名购买、官网搭建、app发布页)等。然后就等他对我技术模块提问了。 你可以讲讲你项目的亮点吗:这里就很开放了,选取三个你认为你项目设计花时间最多的地方讲,可以参考我上面讲的要关注的几个模块,也可以讲你和别人项目有什么不同,这就是亮点。 你可以讲讲你项目找那个遇到的困难吗:这里是讲你项目中的思考,其实就是你当前哪些模块可以改进,讲你遇到了什么问题,然后讲怎么改进的。下面我开始套2.2第4点的模板了。可以说点赞用mysql多人一起点数据出错,所以改用redis;讲通知每次只有登录的时候拉取导致期间有人发消息接收不到,然后讲怎么解决的。或者干脆没解决,讲打算怎么解决。 对你项目用到的技术栈进行简单的学习,熟悉简单的八股文,博客一般都是 springboot + mysql + redis 高级一点的有消息队列,有MongoDB,有ES。你用了什么就要去准备基础八股文,以及为什么用他,他能解决什么问题,像我消息队列RabbitMq就项目里面提了一下,就被刨根问底问了好多,这里你要做的是基于项目去了解他能解决什么问题,同类型产品为什么用他,就可以了。

大概的项目准备方法就在上面了,这个全部都是我自己总结的,不一定适合每一个人或者每一场面试,但如果你项目准备到上面这样充足了,我觉得基础面试应该是没问题的了,再困难点就是场景问题了,具体见下面。

2.3 场景准备

还是基于博客来讲讲场景,这里分两个方面去准备,第一个方面就是项目功能模块,这个还是参考我上面2.2第4点,带着思考去对比同类型产品,看看他们企业级项目成熟的方案做到了哪种地步。第二种就是和项目没有太大关系的场景问题,这里我推荐看这个在线文档。互联网-java-工程师进阶知识完全扫盲,完全可以应对各种场景和常见问题(消息队列、缓存、分布式、系统优化、大数据问题等)。image.png

2.4 我的项目

这里简单讲讲我项目情况,我是从大一暑假开始学的SSM,当时啥也不懂,纯手撸了一个论坛,包括分页、楼中楼、邮件发送、验证码注册、通知消息等,当时花了一个月完全不参考任何项目自己闷头干,就SSM + jsp + mysql几乎把一个论坛该有的都实现了,楼中楼的sql表设计也很合理,这个让我后面开发就更熟悉底层。大二学会springboot后都在零零散散写项目,因为大二能写项目的不多,然后也都不敢去尝试,然后我是一个实验室负责人,就全接了,几乎都是在写项目过程中学习技术,而不是先学技术再去实战,这点让我动手能力很强,但技术都停留在单体架构,大二写过商城小程序、家长期末查分系统(是的,当时就是辅导员找我做这个,提供给家长gank学生用的,)、学生组队系统、人脸识别系统等。然后大三了,就发现自己的技术栈总是慢慢推进,既不像那些做外包的能有成熟的技术栈,又不像一些大佬有一个完整技术栈全的项目,然后就开始看各种项目实战,看别人怎么设置系统的,去吸收容纳他人的技术栈,然后开始了我一个大项目 - 轻云社区。因为时间有限,我也是基于别人开源项目改的,但已经魔改了全部内容,从单体改成多模块、从web改成全平台,然后部署方式也改成了微信云托管,最后效果就是下面这样啦。我面试两个项目就很普通,也不是高并发,也不是秒杀商城,就是按照我上面方式优化的,并且两个都是我自己花长时间写的,对于任何设计层面的问题都可以答上一二,就是很熟,并且准备做的很足,课程上面也答辩过,所以面试官让我介绍项目的时候我可以很轻松的讲很久。然后我也并不满意这个项目,因为我后面技术栈又更新了,所以这个项目也暂时封闭,等我重构完就会开源了我怎么准备的面试,其实就是参考上面项目准备,我面试的时候其实涉及这个项目不多,讲了5分钟项目,讲了亮点和困难,然后就到场景设计了,讲了如果改成分布式怎么改,怎么设置日志收集系统,高并发怎么处理,这些就是需要平时多积累多看文章多思考了image.png

三、总结

关于我项目的分享就到这里了,做项目一定要脚踏实地,没有捷径。经历不够努力来凑,短期能做完项目,但不能构建一些分析问题解决问题的能力,参考我上面的一些建议,应对一些场景多去思考,多去动手实践,才能让自己的能力快速提升。祝大家尽早完成自己的项目啦也祝大家都能拿到心仪的offer码字不易,如果文章对你有帮助,可以点个收藏点赞支持一下,让我有动力继续分享,有问题也欢迎私信我交流~image.png

#面经##学习路径#


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3