说说真实Java项目的开发流程,以及面试前的项目准备说辞

news2024/11/18 20:01:27

介绍项目是必不可少的Java面试环节,求职者需要借此证明自己真实Java项目的经验,如果再做的好的话,需要借此展开自己的亮点说辞。

    不过之前如果只有学习项目经验,比如是自己跑通一个项目,或者是在培训班里通过一个Spring Boot项目入门Java,那么这些学习项目的开发流程其实和公司里真实Java项目,是有一定差距的。在转行之类需要真实项目的场景里,如果仅仅介绍学习项目里的开发流程和开发细节,那么真可能被认定之前缺乏商业项目经验。

    由于商业项目是用于挣钱的,而且商业项目正是因为要从客户那边收钱,所以其在确定需求,开发,测试,部署和问题排查等方面,和学习项目存在很大的差异。下文就将详细讲述真实java项目的开发流程,并针对性地说明学习项目和商业项目的差异,这样一些零项目经验想入行或转行的Java求职者,一定能从中获得收益。

1 先说说真实项目的敏捷开发流程和常用的项目管理工具。

    学习项目一般是从零跑通一个项目,只要能从前端发请求看到预期的效果,这个项目就算成了,但真实的项目一般会采用敏捷开发模式,哪怕是有些公司的田园敏捷开发模式,一般也是采用“迭代”开发的流程。

    比如一个项目从开始做,到真实完成,假设需要半年,包含大概50个功能点,那么就会把这些功能点,均摊到6个开发周期,每个周期大概是一个月,这样每个月发布一次,把本月需要完成的功能点和本月修改掉的bug一起发布上线。具体的,比如一个月有4周,会在第一周的前半周,和产品方或客户方谈好需求,一般这是项目经理主导做的,谈好以后分配任务给诸多程序员,分配任务时一般用jira来记录,当然如果发现bug了,也会用jira来记录bug。

    开发前,一般会基于git的主分支(master或dev或current)上创建一个新分支,比如202210dev分支,诸多程序员在这个分支上开发,然后约定个开发结束时间,这样到了这个月的第三周结束后,这个开发分支上就包含了本次发布所需要的的代码,然后这个发布版本就会冻结住,冻结的意思是,发布的版本需要稳定,不能随便再向里面提交并合并代码,在此基础上测试人员就开始测试。

    一旦测试人员测出问题,项目经理会做个评估,如果不影响本次发布,就会在下个周期里修改掉,如果影响很大,那么需要走“解封”流程,解开本次已经冻结住的git分支,修改后再冻结住。

    这样到了本次迭代周期的发布日,一般是业务量比较少的时间点,比如周末凌晨,运维人员会把从git上拉下待发布的分支,用maven或各种工具打成jar包,然后通过jenkins工具,或干脆手动复制粘贴,放到linux环境上,再用java -jar命令启动,启动后开发和测试人员发现没问题后,本次发布就算成功,然后再开始下个为期一个月的开发周期,这样一直到本项目全部完成。

    所以求职者如果要证明自己的项目是真实项目,可以从如下若干个角度来准备说辞。

    1 我们项目是用敏捷开发模式,然后大致叙述下开发周期,同时加一句,我们项目组,会每天开会讨论进度,如果有阻塞性的问题,或者技术问题,得赶紧提出来。

    2 我们项目组用到了git和maven来管理代码和依赖包,同时看些git拉分支,合并代码和处理冲突的细节,也可以看下用maven打包以及创建公司私有仓库的做法。

    3 我们项目是用jira来管理任务和bug,真实项目一般都用jira,所以哪怕是零基础的,jira未必要搭建,未必要实践,但需要了解下通过jira创建任务和创建bug的细节。

    4 我接到开发任务后,一定会在开发分支,比如202210dev分支,在此基础上再创建一个我自己用的任务分支,比如202210dev001,其中001是任务号,在此分支上开发功能点。开发好以后,我会用junit写单元测试案例,也会用postman发请求,这个属于程序员自己要做的测试,当测试通过后,再提交到202210dev001分支上。

    5 这里请注意,得说下代码review。我在202210dev001分支上的代码,得合并到202210dev这个发布分支,合并前,项目经理会指定其它开发者review我的代码,如果有功能或代码规范的问题,我会修改掉。测试人员如果发现我做的模块有功能问题后,会给我开个bug,一般也是用jira开,我会修,当然我把修改掉bug后的代码合并到发布分支前,依然需要经过code review这个过程。

    6 我自己做好我的业务模块后,会用junit写测试案例,如果junit不熟悉可以不说,但一定要说用postman发请求测试。在版本发布的时候,我会留守在公司,遇到问题我会排查和解决。

所以零项目经验或通过培训班转行的同学,一定得准备上述说辞,这些点面试官如果不问就算了,如果问,就一定能从多个维度证明自己项目的真实性。

2 在商业项目里,开发者未必是全栈都做,而是只做后端开发,而且后端开发一定要加入很多细节。

    在学习项目和培训班项目里,开发者其实是全包的,从前端react到后端spring boot,再到建数据表,这些工作都要做。但在真实项目中,如果你的职责是后端代码,那么其实是无需关注前端的。

    而且在项目组里,你其实真未必是从零开始做。比如你入职被分配到一个财务系统里,这个系统一定是开发到一定程度了, 所以你其实是无需参与表设计的工作,也无需参与搭建前端后端框架的事。你的事情其实就是用spring boot开发业务,在上文的基础上,你还可以用如下的说辞证明你做的是商业项目,而不是学习项目。

    1 我只负责用后端开发,即用spring boot开发控制器,service和repo层,我这个接口是用@requestmapping来匹配前端请求,前端是html页面,我熟悉react,但我没系统做过。

    2 我开发的api需要用swagger来展示接口,swagger其实不难,大家可以看下。在我开发的api里,要用logback写日志,以便排查线上问题。对应的,我每开发好一个接口后,要用junit来写单元测试案例,这里强烈建议大家学下junit,这不难,而且了解一下其中mock数据的动作。

    3 我们的环境分测试环境和生产环境,其中生产环境就是对外提供服务的,但我们的代码开发好以后,会部署到测试环境,测试环境也是linux。一般学习项目甚至只在windows上开发,但真实项目一般分测试和生产两个环境。

    4 我开发的时候,如果需要其它组提供接口,比如支付系统里要调用对账模块的api,那么我会和其它组的人沟通,对应地,对方组开发好以后,会用swagger来展示接口。这里你可以展示在项目开发中必不可少的沟通技能,相比之下在学习项目,一定没这个流程。

    出于培训效果,培训班项目大多是让学员全栈开发,但事实上,有项目经验的开发者,大多是只从事一个方向的工作,比如java后端。所以如果你是要去找java后端工作,一定得优先证明后端经验,这样哪怕前端说不上也不要紧,但相反,如果两者都会,但后端只能说出学习项目里的一些低层次的技术,那么面试真就可能过不了。

3 在真实项目里,一定会遇到线上问题,你可以说下监控和排查分析线上问题的细节。

    真实项目上线后,对应的服务器大概率会有监控组件,比如zabbix。如果遇到慢SQL查询,或者是系统部署所在的服务器,内存或cpu用量过高,zabbix会根据之前的设置,向程序员通过邮件或消息之类的方式告警,而且,根据之前的设置,当系统日志里,5分钟内exception或error关键字出现频率超过10个,zabbix也可以告警。

    程序员在收到告警信息后,可以通过vi命令,去观察linux上的系统日志,如果再有必要,可以通过执行计划观察慢查询的sql语句,或者通过dump文件观察OOM问题,当然如果是业务问题,比如是参数不对,那么能根据日志上的告警信息,定位到具体的类和代码行,然后解决。

    相比之下,在学习项目里,一般日志只是输出到控制台,而不是文件,当接口做好以后,用postman发请求时,是通过控制台的日志排查问题,如果在面试中只表达出这层意思,那么面试官就能轻易确定你只有学习项目经验。

    对应的,面试中或面试前,Java或其它IT求职者可以怎么准备呢?

    1 准备些输出日志的方式,比如java项目里是用logback,然后看下怎么用logback输出info,warn或debug级别的日志,这些不难,零项目经验的小白也能轻易看懂。

    2 就准备些linux上用vi或tail命令观察日志文件的方式,如果有条件,去看下索引等方面的细节,如果再有条件,去看些解决redis或kafka等中间件问题的细节。

    3 面试时可以说,我们项目上线后是用zabbix监控,监控设置的事情是运维或项目经理做的,但一旦有系统问题,比如慢sql查询,或者日志里大量出现exception,我会收到告警邮件,手机上也能提示。出了问题后,我登到linux,用vi命令观察异常日志,然后解决过业务参数问题,也解决过索引等问题。

    4 然后再准备些细节,比如索引问题的八股文,或者是vi命令打开搜索文件的方式,甚至redis缓存穿透和kafka消息积累问题的细节,找些资料也能看也能说。当然你说你知道zabbix等组件等配置方式,那就更好了。

    其实上述细节要准备的点不多,零项目经验哪怕是用个一周也能看熟相关技术,但是否解决过实际问题,绝对是学习项目和商业项目的重要差别。

4 可以说下项目编译打包部署乃至上线之类的话,因为学习项目一定不包含这些。

    比如Java项目,一般是用jenkins或pipelines,以流水线的方式完成打包部署上线之类的或,相关技能大家可以看下CI/CD,不过对于零基础的求职者来说,要看熟这块所需要的代价比较大,可能真得用2周甚至更长时间,这似乎有些不值当,所以在面试前倒可以用如下的方式来准备。

    1 就熟悉下上文提到的git,maven等工具,以及git的提交,合并,处理冲突等方式。

    2 大致了解下jenkins工具,看看jenkins长什么样,能干什么,然后就说jenkins是项目经理设置的,代码提交到开发分支或master或dev等主分支后,jenkins脚本能自动从git分支上拉代码,然后用maven或gradle等命令把项目打成jar或war包,然后再做必要的代码扫描,比如用sonar,sonar工具会看代码单元测试覆盖率,以及代码是否有方法过长等不规范,sonar这块如果不想讲也不要紧。然后jenkins会把jar或war包复制粘贴到指定的linux路径里,然后再启动,这样就实现了自动化打包部署的事情了。

    3 上线之前,你们组会把你们本次上线要用的配置参数,比如决定某个功能是否要运行的参数告诉运维,会把增加字段和增加索引的sql语句告诉运维或dba,当然这些细节你们已经在测试环境上测过。上线时,运维会在全局配置文件上加入你们新加的内容,再具体些可以说在nacos全局配置上加,会在生产数据库上加加入你们的更改。这里如果你面的是比较低级的岗位 ,不要说那么细,就说上线前会提交本次上线的配置和数据库变更文件。

    4 系统上线后,你作为值班人员,会跑若干个脚本来测试,或者干脆到生产环境的html页面或app上测试,如果没问题最好,如果有问题,赶紧看日志查,如果自己搞不定就找同事或项目经理。不过上线时遇到问题不多,你说没遇到过,你参与过的上线都很顺利,问题也不大。

    相比之下,如果是培训班项目,顶多实践过在linux上打包部署,但培训班项目没有上线这个过程,如果是自学项目,估计都在windows上跑,上述说辞估计都没听说过。所以如果你准备过上述说辞,哪怕有些点你推说细节说不清,那么大概率能证明你的商业项目经验。

5 再说下分布式组件和spring cloud alibaba组件方面,真实项目和学习项目的差异。

    分布式组件,比如redis或kafka,或者spring cloud alibaba系列的nacos或gateway,这块由于能解决高并发分布式层面的问题,所以非常值钱,这也是架构师面试的必问点,但很多培训班项目或自学项目,仅仅是为了使用而用,所以会不切合场景地使用,这反而会暴露求职者“其实没做过真实项目”的底细,这还比如不说。

    这块,零项目经验的求职者不用学太深,了解下api和配置文件即可,因为很多3年以下项目经验的java开发,也就会用个api,这方面应当结合业务需求来说。

    1 比如redis或kaifa,很多培训班会说在低并发下用,这块如果要说,一定要找个业务落脚点,比如某支付系统,并发量要到2000,支付过程中会频繁调用会员名字,所以要用redis,因为支付后要短信通知,所以要用kafka,或者如果要说用过nacos之类的,你就说系统是分布式部署,所以要用。但如果你没准备过业务场景,宁可别说用过组件,或者没必要把相关组件都准备全,准备若个个就行。

    2 你就去看些api,比如redis是用redisTemplate缓存和读取数据,kafka也有相应的读取和发送方法,这些api你记着一些。面试时就结合业务结合api来说。

    这里千万记住,如果你单纯去背redis等组件的八股文,面试时说项目没用过,如果你面的是java初级,那问题也不大,毕竟java初级做熟spring boot等框架就行。如果你能结合业务场景和api说你项目你用过,这是零项目经验求职者能做到的最好程度。

    但有些有经验的面试官,就从应用场景来问,比如你说用过sentinel来限流,面试官就问你是否有限流的需求,你们业务流量多少,从这个角度,一定会问出项目是学习项目。所以分布式或微服务组件这块,虽然值钱,但零项目经验的求职者由于没在项目里开发过,这块别贪,因为过度了反而会露馅。

6 再说下零项目经验求职者java技术层面的上限。

    上文也提到了,零项目经验求职者在分布式组件层面的上限,下面再说说在java技术方面其他层面的上限,即过了这个线,你再学的技术,由于无法证明在项目里用过,所以顶多只能证明你看过了解过,与其把精力大量用在这方面,还不如熟悉下上文提到的证明项目真实性等说辞。

    1 spring boot框架层面,看熟增删改查,logback,swagger等组件可以看,但别看对应的源码。

    2 数据库层面,顶多看些单机版外带redis的技能,比如索引,事务,执行计划,单机版redis,这块可以落实到项目里,但redis集群或mysql集群,你可以说你是用项目经理搭建的,但你自己没搭建过,再进一步,比如数据库底层或数据库或缓存集群,别看。

    3 docker容器部署和k8s,别看。

    4 上文已经提到,分布式组件或微服务组件,量力而行,重要的是要结合业务讲。

    5 linux层面,看到能通过vi或tail命令打开和搜索日志文件这个层面就行,像shell脚本可以别看,比shell更复杂的 ,也别看。

    6 前端,大致了解下vue或react框架或关键步骤即可,不用深入看。

    7 多说一下,spring boot业务,通过若干个增删改查流程,看熟从控制器到service再到repo操作数据库的流程和关键代码即可,看熟悉以后,再多跑业务就属于重复劳动,没意义。

    不过事实上,有些培训班为了突出自己项目技术的优势,会讲docker等值钱技术,还是这句话,零项目经验求职者在找工作时,以说清楚项目经验为主,像docker之类的技术,本身确实值钱,但零项目经验的求职者由于无法结合项目证明自己用过,所以过度学没太大意思。

7 总结

    初级java求职者,其实不是单纯靠技术找到工作,找工作时更要证明自己的项目经验。有些求职者由于不知道真实项目长什么样,所以在准备面试时会无的放矢,甚至会在无意识的过程中暴露自己零项目经验的事实。

    所以本人站在准备java面试的角度,向大家讲述真实项目的各种细节,从中大家能知道阐述项目真实性的方式,这样一定能帮助零项目经验的求职者更好地过面试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos7:Postgresql 14安装

文章目录安装Server配置数据目录创建数据存储目录配置环境变量,数据目录Reload systemd初始化DB启动数据库安装模块包postgresql14-contribpostgresql14-devel安装Server sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64…

(附源码)ssm高校实验室系统 毕业设计 800008

高校实验室管理系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是使用动态网页开发技术JSP,J…

前端js实现canvas压缩图片并上传

一. 上传前压缩图片的好处 可以减少用户的等待时间,提升使用体验,目前手机拍摄的图片文件大小一般在几 M 左右,文件直接上传时会有卡顿现象。可以减少服务端的存储空间。再次回去图片资源是也可以快速的加载。虽然目前阿里云的 oss 有相对应…

NPDP在国内有多少含金量?

产品经理国际资格认证,New Product Development Professional(NPDP),由美国产品开发与管理协会(PDMA)所发起,是国际公认的唯一的新产品开发专业认证。是考察产品经理能力的证书。(npdp产品经理资料文末&…

文本生成图像简述3--杂谈技术难点、研究意义、应用领域和目前的局限性

文本生成图像(text-to-image)指的是使用人工智能技术将文本转换为图像的过程,其可以根据给定文本生成符合描述的真实图像,其是多模态机器学习的任务之一,具有巨大的应用潜力,如视觉推理、图像编辑、视频游戏…

如何解决 Redis 数据倾斜、热点等问题

Redis 作为一门主流技术,应用场景非常多,很多大中小厂面试都列为重点考察内容 前几天有小伙伴学习时,遇到下面几个问题,来咨询 考虑到这些问题比较高频,工作中经常会遇到,这里写篇文章系统讲解下 问题描…

web网页设计期末课程大作业 HTML+CSS+JavaScript 美食餐饮文化主题网站设计 学生DW静态网页设计

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

关于vSphere HA Admission Control的讨论--2

上一期内容中预留的一些小问题首先做出回答&#xff1a; Q1&#xff1a;<若此时vCenter Server所在主机出现故障&#xff0c;vSphere HA是否能够正常完成故障响应&#xff1f;> A1&#xff1a;对于vSphere HA而言&#xff0c;在设计上采用主机通过FDM来管理HA的故障响应。…

天天刷 B 站,了解他们的评论系统是如何设计的吗?

今天给大家分享 B 站的评论系统的 组件化、平台化建设 通过持续演进架构设计&#xff0c;管理不断上升的系统复杂度&#xff0c;从而更好地满足各类用户的需求。 基础功能模块 评论的基础功能模块是相对稳定的。 1. 发布评论&#xff1a;支持无限盖楼回复。 2. 读取评论&…

DNS这个东西,你是真的了解了吗?

都说程序员是面向Google编程&#xff0c;殊不知当你输入 www.google.com 地址的时候&#xff0c;是否有想过&#xff0c;在回车的一瞬间浏览器如何将请求发送&#xff0c;如何到达目的地为你取得正确的数据。 遇到问题我们通常会打开浏览器&#xff0c;输入 www.google.com 回车…

EMQX+Prometheus+Grafana:MQTT 数据可视化监控实践

前言 作为一款全球下载量超千万的大规模分布式物联网 MQTT 服务器&#xff0c;最新发布的 EMQX 5.0 不仅全球首个达成单集群 1 亿 MQTT 连接支持&#xff0c;也是首个将 QUIC 引入 MQTT 的开创性产品。如今&#xff0c;EMQX 在各个行业为高可靠、高性能的物联网实时数据移动、…

阿里云服务器地域和可用区常见问题及官方资料解答

阿里云服务器同一地域分为多个可用区&#xff0c;不同地域的实例之间内网互不相通&#xff1b;选择靠近您客户的地域&#xff0c;可降低网络时延、提高您客户的访问速度。本文介绍阿里云地域和可用区的概念、选择指导、两者的关系以及阿里云支持的地域和可用区列表。 一.地域…

MySQL客户端的进阶操作

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;土豆娃娃文章来源&#xff1a;社区投稿 引言 作为一个MySQL数据库从业者&#xff0c;我们最常用的工具就是my…

极米RS Pro 2值得买吗?极米科技这款4K投影真实体验怎么样?

2022电商的最后一场狂欢购物节“双十二”已到来&#xff0c;许多小伙伴想趁此次机会购置一些礼物给辛苦一年的自己和家人。但礼物怎么选&#xff1f;选什么&#xff1f;又成为了困扰大家的一大问题。要说送礼物&#xff0c;无论是自己还是家人&#xff0c;实用的家电是最不容易…

SRv6----控制平面

学习了SRv6----报文转发流程后&#xff0c;下一步学习SRv6的控制平面及SID是如何在SRv6网内传递学习的。 首先回顾一下回顾一下链路状态路由协议&#xff0c;基于Dijkstra SPF&#xff08;Shortest Path First&#xff0c;最短路径优先&#xff09;算法计算到达指定地址的最短路…

基于倾斜模型、地形DEM高程点的批量自动提取

我们在进行前期的规划分析的时候&#xff0c;总是离不开地形条件等限制性因素。这次分享一个小的操作技巧&#xff0c;利用倾斜模型、DEM数据批量自动提取高程点&#xff0c;用来计算坡度、坡向、填挖方、流域分析等等。 分享一下在图新地球工具软件基于倾斜模型、地形DEM如何…

华为数字化转型之道 实践篇 第六章 数字化重构业务运作模式【进行中】

第六章 数字化重构业务运作模式 数字化转型从企业业务战略出发,通过数字化手段来重构核心业务运作模式,以实现客户交易更简单、内部作业更高效、运营管理更便捷。 6.1 业务运作模式重构是数字化转型的核心 利用数字化技术创新业务运作模式,通过重构业务流程提升企业运作效…

【openGauss/MogDB的uncommitted xmin问题解决】

一、问题现象 在测试openGauss/MogDB的时候&#xff0c;发现主库查询snapshot.tables_snap_timestamp这个表的时候&#xff0c;一select *&#xff0c;数据库就宕机&#xff0c;而备库是正常的。因为是测试环境不存在数据量太多的情况。所以最开始初步怀疑有数据页损坏了。 …

项目中less常用的一些东西

一、less简介 LESSCSS是一种动态样式语言&#xff0c;简称LESS&#xff0c;属于CSS预处理语言的一种&#xff0c;它使用类似CSS的语法&#xff0c;为CSS赋予了动态语言的特性&#xff0c;如变量、继承、运算、函数等&#xff0c;更方便CSS的编写和维护 LESS可以在多种语言、环…

Serverless初探

文中插图来自极客时间 今天听了市场部门分享的serverless, 打算用自己的话总结一下。 一般来说&#xff0c;每一个网络应用背后的原型都是&#xff1a;客户端服务端&#xff0c;通过相互传递消息&#xff08;发起请求&#xff0c;返回响应&#xff09; 从研发体系角度看&…