最后
作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料
准备这些技能的目的是,想办法把这个项目当商业项目来介绍,因为大多数毕业生只做过学习项目,没有在公司里干过,你只要证明出你有,哪怕是三个月半年,这就是优势。而在学习项目里,不会接触到敏捷开发和项目管理软件,当你准备好上述第3第4点后,你就能证明你做过商业项目。
2 进入面试环节,首先是自我介绍
您好,我叫xx,目前虽然没有在公司干过,但大三大四的时候,帮老师做过实习项目,加起来有半年时间(强调你做过商业项目,这很有优势),在实习过程中,有做过一个社区超市的维护项目**(别说商城项目,因为一听就是学习项目,但如果是小型维护项目,还比较可信些),这个项目是用敏捷开发方式来管理,在其中用到了Spring Boot框架,用JPA连接数据库,前端用过VUE+jquery框架,用Maven+Git管理代码,用jenkins打包,用junit作单元测试,在其中我不仅写代码,还参与过线上问题排查工作,还解决过因没写hashcode方法而导致的问题。(这里别详细说业务细节,因为面试官不关心,你就说这个项目里你用过什么技术,同时更要强调你有分析解决实际问题的能力)**
说明:在自我介绍环境,首先要展示你的项目经验以及技能,同时证明这个项目是商业项目,所以其他的,比如业务需求等,不用展开。同时,面试前一定要准备,不仅要准备自我介绍的说辞,更要准备你提到的技术,其实这些不难,哪怕是应届毕业生,网上查下也能说出来。
3.1 分析
你在自我介绍阶段,已经概要性说出你掌握的技能,以及项目经验,这里就要结合项目经历,达到如下的目的。
1 进一步证实你的项目是商业项目,而不是学习项目。
2 结合项目说明关键技术,比如JPA和Eureka等用法,否则这些技能只能算学习项目。
3 展示你有分析问题和解决问题的能力。
4 同时说明,你在项目里不仅参与过编码,更参与过测试、业务分析等工作。
5 展示自己的责任心,肯加班,肯学习。
同时切记,你别在这阶段犯如下的错误,因为这些错误非常普遍。
1 再次强调,要通过说项目开发模式和用过的项目管理软件,说明这是商业项目,就在公司里能挣钱的项目,别说成学习项目,很多候选人项目会默认按学习项目来介绍,这虽然聊胜于无,但无法证明相关技术在实际项目里用过,相反,你一旦说成了半年商业项目经验,那么你就有代差优势。
2 要结合项目说技术,但别大谈特谈业务需求,比如说订单管理模块怎么做,因为面试官不关心这个。
3 过于突出项目规模和用到的新技术,忽略基础技能。对于应届生而言,其实能证明有增删改查的经验,那就足够了。证明有分布式等值钱经验,也要先讲好基础技能。我见过不少候选人,大谈特谈项目的规模和复杂度,结果说半天是学习项目而不是商业项目,也见过不少人准备了redis和kafka等分布式技能,但jpa增删改查,以及java集合等技术,说得一塌糊涂,这就属于南辕北辙了。
3.2 具体的介绍项目说辞
这个项目是超市维护项目,我在大三阶段帮实验室老师做的,是个外面公司接的维护项目,我做了3个月,结果拿到了1万块钱。(证实是商业项目,非学习项目)
这个项目采了目前流行的微服务架构方案。我们选择的是以SpringCloud为核心的,基于Rest风格的微服务架构。在这个项目里,我用到了Spring Cloud全家桶做后台,具体采用了Eureka做服务治理,用Ribbon做负载均衡,用Zuul做网关,用JPA连接MySQL数据库,用RabbitMQ(消息队列)来发送短信,做后台时还用到了Java的集合,异常处理等技术,前端用Vue+Nuxt技术。
这个项目采用的是敏捷开发模式,我们每天有站会讨论进度,每两周一个开发周期,在其中讨论哪些要做,并在此基础上排任务,周期结束会release,在开发过程中,我不仅写代码,还参与过商品模块的需求讨论,也做过单元和集成测试。(说明你干过的活,并用项目管理方式进一步证实是商业项目)
在做这个项目的过程中,我在解决技术问题的时候,看过HashMap和ArrayList快速失效的底层源码,也通过建索引调优过数据库性能,也通过看日志解决过线上问题。(抛出亮点,等面试官来问)
这个项目有时候进度会比较紧,我会主动加班开发,并排查线上问题,遇到一些我没接触过的技术,比如Zuul,我会主动查资料,并通过问别人等方式,保证进度保证质量地完成任务。(说明你的责任心,肯加班,肯学习)
3.3 说这个项目前,你该准备的技术要点
1 你提到过的Eureka,Ribbon,Zuul等技术,事先通过跑通程序理解下。同时要准备如下细节,zuul过滤器,ribbon配置文件,eureka注册方式,jpa一对一一对多等,如果可以,再到网上搜些spring cloud面试题,或者系统看基本spring boot和spring cloud的书。
2 就看HashMap的底层源码,尤其结合hashcode和equal方法看,看快速失效的源码,这体现在,集合不能一边迭代一边修改。应届生很少有人会通过代码讲技术,你讲清楚了就是优势,而且这些不难。
3 看下索引,尤其是索引背后的b+树数据结构,了解下索引的用法,以及索引的缺点。
4 由于项目是部署在linux上,所以你看下linux里打开文件,以及在文件里用关键字查信息的命令,后面说分析问题和解决问题时要用到。
5 看下Java核心,尤其是集合,异常处理,多线程等的面试题。
4 后面是面试官提问
面试官一般会根据你在项目介绍时抛出的亮点提问,这时你要结合项目需求说明。
问题1:谈下你们项目里是怎么用到微服务的?
我们是把个业务需求以微服务的方式切割成若干个功能要带你,比如商品微服务,文件上传微服务等,各微服务模块间用restful的方式相互调用。在项目里,是把这些微服务模块注册到Eureka上,同时用zuul做网关来管理。
问题2:说下Spring Cloud里 实现增删改查的流程?
可能未必是这样问,但面试官一定会考核候选人基本的增删改查能力。对此你可以按如下的方面来准备。
1 在控制器里,用@RestController注解标识,用@RequestMapping来映射请求。
2 用@Service注解标识业务层,业务层里用@Autowired的方式引入Repo类。
3 Repo类里,就用JPA提供的基本方法,对于一些复杂的请求,就用@Query加原生SQL的方式来查询。
4 用@Entity和@Table注解标识POJO类。
5 可以的话,讲下用@Transactional做事务,同时可以准备事务隔离级别和事务传播机制这两个值钱要点。
6 前端用ThyMeleaf模板,后端会用ModelAndView向前端传数据。
以上技术点用一个业务流程穿起来,比如对于下订单的业务功能,我们首先会在控制器层里用@RequestMapping映射到该请求,随后会把该请求提交到业务层和Repo层,最终通过Repo层加入到数据库里,对于这个请求,我们会在业务层用@transactional注解来用事务管理。当订单成功插入后,会通过ModelAndView向前端ThyMeleaf模板发送成功信息,并展示到前台。
问题3:你提到了你看过源码?你详细说明下。
总结
蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。
经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/forums/4f45ff00ff254613a03fab5e56a57acb)收录**