本文主要分为三个部分:
如何学习java基础
如何学习javaEE
你关心的项目问题
01 java基础学习
建议初学者看视频学习,不推荐看书。入门视频选择非常重要,最好是通俗易懂、深入浅出的教学视频。如果入门视频选的不好,不知所云,容易产生厌倦心理:“从入门到放弃”。关于java书籍,前期的学习个人不推荐直接看书:书本较为枯燥、不直观、容易分心、可能坚持不下来。
02 javaEE入门学习
上面的基础部分的学习主要是为后阶段打好基础。javaEE是java开发学习路上举足轻重的一员,那么javaEE该如何学习呢?框架那么多,该学哪些呢?从哪个框架开始学习呢?从博主以及身边同学的面试来看,javaEE主要需要掌握以下几个部分:servlet、jsp、hibernate、mybatis、springMvc、spring,有余力的同学可以学习spring boot,它是轻量级的spring,互联网公司使用较多,学完spring之后,学习spring boot就很简单了。框架学习顺序,在整理的资料中有写。
servlet和jsp属于基础,高层框架都是建立在servlet和jsp的基础之上,博主和身边同学建议学习。虽然现在项目中很少直接使用jsp和servlet,但是框架都是在这基础之上进行了封装,学习servlet和jsp可以帮助你更好的理解框架,而不是只会配置,调API,不知原理。另外,servlet在面试中问的很多,jsp面试问的少,但是后面做项目的时候你得会写简单的页面啊,否则项目都搭不起来,会产生严重挫败感。
03 你关心的项目问题
怎么找项目呢?
公众号后台对话框回复 编程大礼包 有5T编程资源
自己在里面找一个,我推荐牛客网高级项目
怎么选项目?
首先最好是使用SSM框架的项目,SSH用的不太多,不推荐;
分布式的项目最好是,不是也没关系,大部分网络上的项目都不是分布式的;
最好不要找商城,因为商城已经烂大街 了。
数据库最好mysql,另外面试时数据库表设计也会是常问问题,大家学习的时候注意一下。
怎么做项目?
很多同学问做项目怎么才能避免只是跟着视频敲了一遍代码,好像什么都没学到的感觉?
javaEE的挑战在哪里呢?在没有分布式、高并发场景下,项目显得很“low”(大概率就是写简单的页面,控制器查数据库准备数据、页面从域对象里面取出数据填充、返回给浏览器),但初学者应该如何学习呢?
要回答这一点,首先明白面试官问项目问的是什么?之前头条面试的时候,面试官提到一点:头条为什么这么喜欢问算法呢?“应届生简历上的项目与生产环境相差很大,不太实用,所以我们不太问项目,偏向算法、基础的考察”。面试官其实很清楚你的疑问,但是他们还是会问项目,面试官考察的到底是什么呢?考察的是你解决问题的能力。在面试中,项目中有的业务/问题可能你之前没有想过,但是面试官却给你假设了某个你之前没考虑到的场景。你说我之前没有考虑到这种情况;面试官会说,没有关系的,以前没有想过也没有关系,现场想想怎么解决。也就是面试官考察的是你解决问题的能力。
在大多数面试中,项目部分大多会延升到分布式、高并发场合。因为用户一多、数据量一多,问题就来了,简单的业务在高并发,大数据的场景下瞬间就会产生很多问题。比如,新浪微博的分层评论/点赞如何实现、项目中的数据库如何设计、比如说你的分布式中的某一台机器损坏了,怎么解决服务不可用问题;再比如说淘宝每天订单量很多,数据库如何设计:分库分表策略;比如说文件上传时上传期间断网了,那么你如何实现下次在上次的基础之上继续上传,而不是全部重新上传?比如说,360的开机打败百分之多少用户,这又怎么实现(360用户肯定很多,使用尽量小的代价实现)。上面这些基本都是面试中的问题,说了这么多,我们在跟着视频做项目的时候,究竟应该注意什么?
你之所以会有上面“我仅仅是跟着视频敲完了代码”的感觉(首先初学者有这种感觉是很正常的),因为视频的项目大多不是分布式、没有海量用户、不用考虑容灾问题。怎么弥补这一点呢?在跟着视频做项目的时候,视频中的老师提出一个问题之后,你想想解决思路,如果把场景延时到几亿的用户呢?海量的数据呢?这些问题至关重要,并且你需要把这些问题记录下来。
项目相关面试问题中一定会有:“你在做这个项目过程中遇到哪些问题,你是怎么解决的?”、“项目的亮点在哪里?(和第一个问题一样回答)”。面试不像考试,“亮点”不是说非得独一无二,你可以转到你遇到了哪些问题,你是怎么解决的,或者还没解决的问题可以问问面试官的意见,这样在下次面试中,上一位面试官的解决方案就是你的了。
所以,项目这块就是这样通过面试不断积累的过程,这也是为什么极力建议在实习招聘的时候投递简历,无论你最终可不可以去实习。因为这就是你“升级打怪”积累的过程,前期多投小公司,积累“升级打怪”的经验。后期在面对BAT、TMD等一些大boss的时候你才能不虚,才能顺利通关。上面说的在做项目时把场景延时到分布式、并发场景,这很难,只是建议,不要因噎废食,通过面试积累项目经验,后面你会发现,很多公司针对你项目提的问题都差不多,最后你会发现原来你认为“没有什么东西”的项目其实问题一大堆,这些问题的发现主要靠面试积累。最后强调一次,一定要把项目中遇到或者是你想到的问题记录下来,一定要。另外,有同学可能会说:“我在做项目的时候没有遇到问题,或者没有难点,那怎么办?”
首先,你再看一遍这篇文章;其次,没有问题,我们要学会创造问题。比如说:你知道java会有OOM,并且你知道OOM怎么排查,你完全可以把OOM这个问题的排查过程认为这就是你遇到的问题;再比如说,JDK7以及之前的HashMap在并发情况下会发生死循环,如果你知道这个原理,也知道怎么解决,这也可以成为你的debug的经历;再比如说,linux自启动问题,一个项目部署到linux上,肯定要配置自启动,如果你知道怎么做,这又可以是一个问题。上面这些例子只是希望大家明白:没有问题可以创造问题。当然,项目业务相关的问题或者开始你没有考虑高并发,在考虑之后出现的问题等一些业务相关的问题可能会给面试官留下更好的印象,我只想传达:“你做项目过程中不可能没有任何问题”。项目业务紧密相连的问题,其中一个问的比较多的问题是:如果其中某个业务在处理过程中失败了,你应该怎么处理?
在web项目中一般用户的行为都会交由线程池处理,如果在处理某个业务的过程中发生了异常,导致这个任务没有处理完,这时你要怎么处理?这里这样举例的意思是:大家要随机应变,要学会创造问题。只要你知道问题解决的方案,面试官怎么可能知道你在做项目的时候究竟有没有遇到过这个问题呢?问题来源于想象。
最后,注意积累项目问题,在每一场面试中,面试官会不断提出问题,面试完后,下来找到这些问题的答案或者和同学讨论。这样每次面试下来你的问题库里面又多了几个高质量的问题。一定积累之后,面试会很顺利~。不要担心面试官对你的项目提不出任何问题,如果是这样,这大概率是面试官的能力问题。
总之,项目面试是一个积累过程,前期多投小公司的实习和秋招,为后期“升级打怪”积累经验。项目面试无法一蹴而就,是一个积累的过程
出自:https://mp.weixin.qq.com/s/NTIeugUarpagY1Z_xBq97A
觉得文章不错的欢迎关注我的WX公众号:程序员乔戈里
我是百度后台开发工程师,哈工大计算机本硕,专注分享技术干货/编程资源/求职面试/成长感悟等,关注送3000G编程资源,免费下载CSDN资源。