老胡聊 Java
你要知道,校招面试官,不会因为你项目里的业务有多复杂而看好你,看好你的理由只有两个。
第一,你的项目是商业项目,即在公司里做的项目,而不是你自己从 github 等处拿下来跑通的学习项目。
第二,你能通过项目,展示 java 做业务的基本能力,即 spring boot 做增删改查的能力。这块,其实未必要证明微服务分布式组件方面的能力,面试官对应届生其实没这方面的要求。
你简历上如果能展示出商业项目,你大概率能有面试机会,反之得靠运气。如果你能在面试中证明商业项目的经历,那么你的面试就成功一大半了,如果再能结合项目说明 spring boot 里的注解组件或流程,那么你过面试的概率更大。这比单纯背八股文和算法不知道要强多少。
而在下文里,就将结合本人最近的面试官经验,在讲述准备 java 项目错误做法的基础上,讲讲如何高效地准备 java 项目,并以此充分展示自己的亮点,下文给出的方法和建议,不仅针对应届生有效,跟能帮助广大 java 程序员在面试中有效地通过项目全面展示技能。
在讲之前,本人先根据自身 java 面试官的经历,讲讲程序员对项目经验的一些常见的误解。
1 混淆商业项目和学习项目。
面试官关心的,只是商业项目经验。有些公司在招聘时,还有 java 方面要 3 年经验等条件,此时如果无法证明足量的商业项目经验,不过面试的可能性很大。
商业项目是指用来挣钱的项目,比如在软件公司里做的,或者跟朋友一起创业做的项目,或者是自己兼职帮人做的项目。与之对应的是学习项目,比如课程设计毕业设计项目,或者自己从 github 上拿下来跑通一个项目,当然培训班给的项目也只能算学习项目。
有些应届生朋友,或者工作几年想转行的朋友,在简历上写了多个学习项目,这样的简历甚至没面试机会。
2 需要通过商业项目展示技术和亮点,而不是业务。
很多求职者在面试中,会大谈特谈项目的业务逻辑,详细介绍流程,这些面试官不关心,因为没指望求职者入职后做同样的项目,而是希望通过项目,确认求职者是怎么用 spring boot 和分布式等技术,以及其他资深技术。
3 一定要运行通一个项目,才能当成是自己的项目。
这种说法存在两个问题,第一,运行通的项目只能算学习项目,面试时不能算,应当尽量把这种项目挖掘成商业项目。第二面试时一定不会要求当场演示项目,而只需要通过项目场景证明自己熟练使用相关技术即可。
4 只说本项目用到的技术,但面试时还可以要把值钱技术嫁接入当前项目。
比如某人有 3 年 java 开发经验,由于在小公司,所以只用到了 spring boot 技术,而下份工作想应聘 java 高级开发,面试时需要准备分布式组件等技术。
此时大多数求职者的做法是,结合项目说 spring boot,外带通过背八股文来证明分布式组件的能力。但这样做无法只能证明自己懂分布式的理论,无法证明组件的相关实践经验,这样的话,面试时分布式组件这块是无法达标的。
正确的做法是,项目需求不变,比如原来做的是仓库管理系统不变,同时学 redis,dubbo 等技术,然后找个项目需求来证明自己用相关技术,甚至还可以以此来证明自己解决过实际问题。这种准备项目经验的做法跨级提升时,比如初级升高级,高级升架构时,尤为重要,很多人其实就因为这点没做好而无法升级。
也就是说,在面试时向面试官有效展示项目经验,这和真实的项目开发是两个方向,如果混为一谈,那么只能以当前技能去参加面试,但面试时更可以通过如下的准备要点,展示出高于当前项目开发能力的水平。下面就对应地讲一下,如何在面试中充分利用项目,全面展示自己的能力。
1 尽量挖掘商业项目。
比如应届生可以把项目写成是实习项目,或者是帮老师干的真实项目。如果是转行,之前没有在软件公司里干过,那么如果之前有和朋友一起创业做过 java 项目,或者自己干过兼职,做过类似外包的 java 项目,那么需要直接在简历里体现出这点,让面试官确认你这是商业项目。
具体好办,就额外说明下,这个项目是帮哪家公司做的,做了多久,同时别写电商这种看上去就是学习的项目。项目名可以写小些,比如是在小公司里做的维护项目,比如超市管理系统,总之体现出这个项目能挣钱即可。
2 面试前,优先准备商业项目的说辞。
我在面试时发现,不少求职者大谈特谈 nacos,redis 等组件在项目里的用法,但项目一问,是从 github 上找的,或者是培训班里做的,那么这个项目就会被认为是学习项目,皮之不存毛将焉附,学习项目上附带的技术,也不能被当成真正在项目里用到的技术。
更何况,比如某个职位需要 2 年 java 开发经验,到后来你的项目被当成学习项目,那么可能 “项目开发年限” 这个硬指标都达不到,后面就无需再面试了。这块要准备?
2.1 项目是在什么公司里做的,目前已经上线了。
2.2 项目组有多少人,几个开发几个测试?你做个哪些模块?数据表用到哪些?
2.3 项目用到敏捷管理模式,用到 git 和 maven 等管理工具、
2.4 项目如何打包部署到 linux 上?除了开发以外,测试是怎么做的?
2.5 当然,同时要准备项目里用到的技术,比如 redis,mysql,spring boot 等。
这里切记,尤其是应届生和中途转行的求职者,一定要优先准备上述说辞,先在面试中把项目证明成商业项目,后面讲技术讲亮点才有基础。而且不是靠说项目业务来证明这是商业项目,再说一遍,面试官对之前项目的业务不关心,一定是得通过上文提到的各种细节来证明是商业项目。
3 再结合项目说技术,优先准备基本面技术。
其实要证明是商业项目这不难,这些话可能 1,2 分钟就能说好,在此基础上再展示自己在项目里用到的技术,原因很简单,只有在项目里用到的技术才能算有实践经验。
这里准备技术时,优先要准备基本面,即用 spring boot 做增删改查的技能,再具体点讲,可以通过项目里的一个业务,比如商品查询,说下 spring boot+jpa 的一个流程。
这里说得极端一点,如果某应届生事实上没有任何商业项目经验,但跑通一个 spring boot 的流程,同时包装出一个商业项目。此时只要商业项目的细节能说清楚,也能结合一个流程讲清楚 spring boot 开发,甚至都不要跑通某个 spring boot 项目,这照样能证明自己的商业项目开发经验。
当然这种做法不提倡,但反过来讲,某人虽然跑通某个 github 上找到的 spring boot 项目,也理解了其中相关技术,但忽视学习项目和商业项目的差别,那么留个面试官的印象只能是做过学习项目,没商业项目的经验,这样过面试的难度甚至会高于前者包装简历的求职者。
4 为每个值钱技术,找个项目业务的落脚点。
在准备好商业方面的相关说辞后,需要用其中的需求点和业务点来说明技术的使用情况,这里的值钱技术包括用索引或缓存进行数据库调优,JVM 方面的 OOM 问题排查,用 dubbo,kafka 等组件解决高并发问题,或者是限流熔断等高并发措施。
这方面怎么准备呢?以 redis 缓存为例,哪怕你项目里没用过 Redis,也可以为 redis 找个业务落脚点,比如查询库存信息太频繁影响性能,所以用 redis 缓存。然后第一层说业务,即用 redis 里的 list 等数据结构缓存库存信息,第二层说用法,你项目里怎么配 redis,用到哪些 api,第三层说解决过的问题,即解决过 redis 缓存穿透等问题,如果可以,再准备些 redis 集群和底层数据结构等说辞。
类似的,面试前可以准备的 java 方面的亮点太多,分布式组件,微服务,云开发等都可以准备。甚至你都可以找个人家分析排查解决的问题,比如是 OOM 问题的经历,然后挂靠在你的业务项目上,把人家的业务迁移到你项目中,这样也能展示你的能力。
当然这里要注意,当你说好相关技术,比如 redis 后,面试官一定会问 Redis 本身的问题,比如底层数据结构等,这方面你就可以通过背 redis 等方面的八股文来准备这方面的细节问题。
5 如果可以,准备些项目部署或运维方面的说辞。
这块包括,如何用 maven 打 spring boot 包,然后部署到 linux 再启动的流程,也包括如何在 linux 上搭建 mysql 和 redis 集群,以及搭建 nginx ,redis 或 dubbo 等分布式组件或集群的经验。
这块是加分项,但这部分的部署和运维方面的技能,甚至去面试架构师都能用到,更何况仅仅去面试 java 高级开发或初级开发。这块看似很难,但本人出的如下的书,包含了搭建各种组件的步骤,当然如果大家要全面去准备 spring boot 方面的技术,本书也能作为参考。
[
广告
Spring Boot+Vue.js + 分布式组件全栈开发训练营(视频
京东
¥56.10
去购买
而且,应届生或转行做 java 的程序员,就用 “用 Maven 打包 spring boot 项目” 和“到 linux 上部署运行 spring boot 项目”的说辞,能很好地证明自己的项目是商业项目,因为学习项目不会做这些。
再说一下,上述准备 java 项目的动作难吗?不难。
1 没有要求运行通 java 项目,仅仅要求掌握 spring boot 开发流程,或相关技术的使用技巧。
2 准备商业项目的细节,这方面想周全就行,未必要费很多时间。
3 归纳总结值钱技术,并为相关值钱技术准备个业务落脚点,这块可能就是针对的点多些,但每个技术或解决过的问题准备起来,可以参考现有资料或人家的解决方法,这块只要准备下和自己做的项目之间有什么关联即可。
4 准备好了,顶多再通过若干场面试检验说辞即可。
但如果按本文说给出的方法准备,能得到哪些收益呢?
1 能证明是商业项目,从而至少能得到面试机会。
2 可能大多数求职者只是结合项目说技术,但你是结合项目说技术、亮点和解决过的问题,虽然你真正的项目开发经验可能未必比人家强,但你在面试中的表现一定优于人家。
3 能结合项目证明分布式组件或微服务组件等值钱技术的项目开发经验,从而能有效地实现职级跨越,比如能高效从初级开发升级到高级开发,高效从高级开发升级到架构。
但说到底,上述准备要点由于是直接面向面试,所以抛弃了很多无效动作,所以操作起来反而比较高效,可能整个准备流程顶多需要 2 个月,甚至更短。
如果大家想要进一步了解 Java 方面写简历和面试方面的技能和操作要点,可以向我发起咨询。
老胡聊 Java
340 次咨询
5.0
60058 次赞同
去咨询
本人的咨询一般会提供哪些服务呢?
1 用资料帮大家巩固 spring boot,甚至是 spring boot 整合分布式组件和微服务的技能,同时提供 Java 面试方面的资料。这些资料在市面上有明码标价,这些资料的钱就超过咨询的费用了。
2 提供简历辅导服务,经本人辅导后的简历,基本上都能大大提升竞争力,从而得到面试机会。
3 以电话交流的方式提供面试辅导服务,包括但不限于教如何介绍商业项目经验,如何在面试中证明 spring boot 能力,如何在项目中证明调优看日志和分布式组件等方面的亮点。尤其地,在辅导过程中本人还会教授 “引导方法”,告诉大家如何在准备的基础上,引导面试官问出你的亮点和技能。
4 甚至还能提供就业辅导和薪资方面的咨询。如果条件合适,还有外企能公司的内推机会。
最后祝广大程序员朋友都能找到心仪的工作,同时在技能和薪资方面实现双丰收,也请大家多多点赞我的文章。
九章算法
不要随便做个 toy-project 上去!凉凉警告!凉凉!警告!
做过几年面试官,遇到过太多人就做个 demo 忽悠我,代码量不足 1000 行,项目水得不行,一问就露陷。很多人做的项目都是从 Github 上或者鱼龙混杂的网课里找的,但从这一步起就错了!做的项目都拉跨,又何谈让面试官有聊下去的欲望呢?
直接祭出 FaceBook 资深架构师的项目(对标 L5/P8)
【注册免费学八节】FaceBook 架构师的 Twitter 项目课,对标 L5/P8 技术水准,价值百万
像国外大厂面试官最爱考的就是设计 Twitter,这种商业性成熟的项目,涉及的技术难点非常多,项目的难度也更能检验面试者水平,而且从 L3~L5 都能问到。
⭐对于初级程序员(SDE1), 可以把 “设计 Twitter” 拆解出单独设计一个关注功能来问
⭐对于高级程序员(SDE2+),面试官通常会要求面试者实现设计登陆、发推、点赞、关注、取关等一系列功能
所以一个高含金量的项目,是能够让面试官光提问就能跟你当场聊到 high 的。
这个 Twitter 项目课,无论是面试还是工作的人,都建议免费试听一下,哪怕只会 coding 的新手,也能通过每次 100~200 行代码的 Git Commit,3 个月的时间搭建出一个对标 L5/P8 级别的工业化标准项目。
而且还会针对常见的面试高频题一一进行解答:
✅ 如何设计 Restful API ?
✅ 缓存与数据库如何协同工作?
✅ 什么是旁路缓存 Cache Aside ?
✅ 什么是穿透缓存 Cache Through?
✅ 推拉模式的优劣分析 Pull&Push 等
再偏题讲一下秋招绕不开的算法面试吧,很多人不知道是可以作弊的——先套模板,再针对性刷题
更重要的是,你完全可以按这种方式准备大厂算法面试!
当然,像是双指针、排序算法、二叉树、宽度优先搜索、深度优先搜索的使用条件、时间复杂度、代码模板,这套模板里都总结好了。
ACM 金牌的算法模板 CheatSheet
领取条件很简单,只需要去试听这位 ACM 大佬的**算法面试公益讲座**,第一节免费课就可以 download 这份算法模板!新人注册即可免费试听~
最后,点个赞再走吧,让优质的内容被更多的人看到
周嘉峰
谢邀。
第一先声明,实习生的话一般公司都不会看你有多牛逼的,当然你越牛逼越好,但是至少基础得有,以下是对实习生的技术基本要求,满足的话请忽略。
1,Java 基础很重要,Java 基础很重要,Java 基础很重要,重要的话说三遍,花时间去牛客上刷 Java 基础题,Java 基础知识体系百度应该一堆,然后在简历上可以写您熟练使用 Java 开发技术。
2,数据结构和算法也很重要,比如问你什么是队列,队列如何实现的,它的特点是什么,算法的话先记住八大排序,记住时间复杂度和空间复杂度,然后亲自去实现一遍。然后简历上可以写熟悉数据结构。
3,找视频去学习 springMVC,spring,mybatis 这几个基本框架的基本用法,然后简历上可以写你了解这几个基本框架了。
以上这些东西完成了,你的简历上也写有相应的技术,那就可以随便面试了。然后面试的时候面试官如果不知道问你什么,你可以主动说面试官不如您问问我 Java 基础 (让他问你你擅长的地方),如果面试官问你你不会的东西,别愣着,百分之八十的人面试都是死在没有合理应对不知道回答的情况上,这个时候你直接说你不太记得了以后还向您多学习,然后转口说不过我了解下这个东西的其他方面,比如说面试官问你你会知道 spring 的 aop 的原理吗?如果你不清楚,可以说不好意思,这个我不太清楚了,不过我了解 IOC 的原理。然后你态度积极一些,基本上技术面是可以过的,HR 面请百度 HR 面试面经。
动力节点 java 培训机构
可以在找工作之前,多做一些项目或者多刷刷 java 相关的题,比如说在网上多找找毕业设计,跟着毕业设计去敲一敲代码。
这一块可以找小动来拿哦~
动力节点 java 培训机构:Java 毕业设计,不用愁,我们有源码和笔记,免费分享给你
Java3y
我推荐一个拥有从零开始的文档的项目,既能用于毕设又可以在面试的时候大放异彩。
该项目业务极容易理解,代码结构还算是比较清晰,最可怕的是几乎每个方法和每个类都带有中文注释。
拥有非常全的文档,作者从零搭建的过程一一都有记录,项目使用了蛮多的可靠和稳定的中间件的,包括并不限于SpringBoot
、SpringDataJPA
、MySQL
、Docker
、docker-[compose](https://www.zhihu.com/search?q=compose&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A2498801418%7D)
、Kafka
、Redis
、Apollo
、prometheus
、Grafana
、GrayLog
、xxl-job
等等。在使用每一个技术栈之前都讲述了为什么要使用,以及它的业务背景。我看过,他所说的场景是完全贴合线上环境的。
跟着README
文档的部署使用姿势就能跑起来,一步一步 debug 挺有意思的,作者还搞了个前端后台管理系统就让整个系统变得更好理解了。并且在GitHub
或者Gitee
提的Issue
几乎都会有回复,也非常乐于合并开发者们的pull request
,会让人参与感贼强。
我相信在校、工作一年左右或常年做内网 CRUD 后台的同学去看看肯定会有所启发,作者会经常在群里回答该项目相关的问题和代码设计思路。
B 站也在开始更新消息推送平台的视频哟!
Java3y 的个人空间_哔哩哔哩_Bilibilispace.bilibili.com/198434865/channel/collectiondetail?sid=435119
目前这个项目GitHub
和Gitee
加起来已经3K stars
了,我相信破万是迟早的事情。
嗯,没错。这个项目叫做austin
,是我写的
消息推送平台 - Austin 就是**奔着真实互联网线上项目**去设计和实现的,将项目克隆下来把中间件换成目前公司在用的,完善下基础建设它就能成为线上项目
austin 项目核心功能:统一的接口发送各种类型消息,对消息生命周期全链路追踪
项目出现意义:只要公司内有发送消息的需求,都应该要有类似austin
的项目,对各类消息进行统一发送处理。这有利于对功能的收拢,以及提高业务需求开发的效率
austin 项目核心流程:austin-api
接收到发送消息请求,直接将请求进MQ
。austin-handler
消费MQ
消息后由各类消息的 Handler 进行发送处理
项目 Gitee 链接:
Java3y/austingitee.com/zhongfucheng/austin
项目 GitHub 链接: