本文主要分为三个部分:

  • 如何学习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资源。

如何学习JavaEE,项目又该如何做?的更多相关文章

  1. 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!

    (一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...

  2. 华为章宇:如何学习开源项目及Ceph的浅析

    转自http://www.csdn.net/article/2014-04-10/2819247-how-to-learn-opensouce-project-&-ceph 摘要:开源技术的学 ...

  3. 我的Android之旅——学习、项目、心态

    本文作者: 伯乐在线 - 唐韧 .未经许可,禁止转载!欢迎分享原创到伯乐头条. 来源:唐韧 学习Android也一年多了,项目做了五六个,有大有小,有难有易.一直以来都没有好好总结过,今天周六休息,就 ...

  4. Spring Boot 项目学习 (一) 项目搭建

    0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...

  5. 2.IntelliJ IDEA 2017创建JavaEE项目

    转自:https://blog.csdn.net/qq_31628285/article/details/75139909?utm_source=blogxgwz0 IntelliJ IDEA 201 ...

  6. 【架构】从instagram学习最小化IT是怎么做的

    Keep it very simple (极简主义) Don't re-invent the wheel (不重复发明轮子) Go with proven and solid technologies ...

  7. 转: 学习开源项目的若干建议(infoq)

    转: http://www.infoq.com/cn/news/2014/04/learn-open-source 学习开源项目的若干建议 作者 崔康 发布于 2014年4月11日 | 注意:GTLC ...

  8. 学习《Python核心编程》做一下知识点提要,方便复习(一)

    学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿p ...

  9. Muduo学习笔记(一) 什么都不做的EventLoop

    Muduo学习笔记(一) 什么都不做的EventLoop EventLoop EventLoop的基本接口包括构造.析构.loop(). One Loop Per Thread 一个线程只有一个Eve ...

随机推荐

  1. Accepted Technical Research Papers and Journal First Papers 【ICSE2016】

    ICSE2016 Accepted Paper Accepted Technical Research Papers and Journal First Papers Co-chairs: Wille ...

  2. 使用Markdown语法画流程图

    Markdown流程图   鉴于本人使用的是马克飞象,所以一下以马克飞象为例: 语法   流程图的画法和代码块类似,流程图也是写在两个```之间的.格式用flow表示,例如: st=>start ...

  3. MVC批量上传文件

    初始图片: 选中图片后 ---------------------------------------------------------------------------------- 前端代码 ...

  4. Asp.net Core 2.1 Kestrel 现在支持 多协议处理(Tcp)

    地址:https://github.com/davidfowl/MultiProtocolAspNetCore.git 在一个Kestrel服务上可以同时处理Tcp,Http,Https等多种协议. ...

  5. c# 调用短信平台接口,给手机发送短信

    项目上要做个发手机短信的功能.网上找找了,用的微米的短信接口. 注册后,获得UID和UID key,C#代码中需要这个 调用代码很简单 ", con = "[微米]您的验证码是:6 ...

  6. C#跨线程操作UI

    WPF启动调度器 : Dispatcher.Invoke(new Action(() => { //你的代码 }));

  7. 如何用c#本地代码实现与Webbrowser中的JavaScript交互

    关键词:.Net,Webbrowser,JavaScript,communication 参考: 链接:msdn实例-简单的相互调用 代码: [PermissionSet(SecurityAction ...

  8. LD算法的C++实现(基于编辑距离的文本比较算法)

    算法看这里: http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html 用数组实现: #include <iostream> ...

  9. Day 42 协程. IO 并发

    一.什么是协程? 是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程切换效率更快了. ...

  10. python寻找list中最大值、最小值并返回其所在位置

    c = [-10,-5,0,5,3,10,15,-20,25]   print c.index(min(c))  # 返回最小值 print c.index(max(c)) # 返回最大值