如何学习JavaEE,项目又该如何做?
本文主要分为三个部分:
如何学习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,项目又该如何做?的更多相关文章
- 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!
(一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...
- 华为章宇:如何学习开源项目及Ceph的浅析
转自http://www.csdn.net/article/2014-04-10/2819247-how-to-learn-opensouce-project-&-ceph 摘要:开源技术的学 ...
- 我的Android之旅——学习、项目、心态
本文作者: 伯乐在线 - 唐韧 .未经许可,禁止转载!欢迎分享原创到伯乐头条. 来源:唐韧 学习Android也一年多了,项目做了五六个,有大有小,有难有易.一直以来都没有好好总结过,今天周六休息,就 ...
- Spring Boot 项目学习 (一) 项目搭建
0 引言 本文主要记录借用Idea 开发环境下,搭建 Spring Boot 项目框架的过程. 1 系列文档目录 Spring Boot 项目学习 (一) 项目搭建 Spring Boot 项目学习 ...
- 2.IntelliJ IDEA 2017创建JavaEE项目
转自:https://blog.csdn.net/qq_31628285/article/details/75139909?utm_source=blogxgwz0 IntelliJ IDEA 201 ...
- 【架构】从instagram学习最小化IT是怎么做的
Keep it very simple (极简主义) Don't re-invent the wheel (不重复发明轮子) Go with proven and solid technologies ...
- 转: 学习开源项目的若干建议(infoq)
转: http://www.infoq.com/cn/news/2014/04/learn-open-source 学习开源项目的若干建议 作者 崔康 发布于 2014年4月11日 | 注意:GTLC ...
- 学习《Python核心编程》做一下知识点提要,方便复习(一)
学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿p ...
- Muduo学习笔记(一) 什么都不做的EventLoop
Muduo学习笔记(一) 什么都不做的EventLoop EventLoop EventLoop的基本接口包括构造.析构.loop(). One Loop Per Thread 一个线程只有一个Eve ...
随机推荐
- Dalsa线扫相机配置-一台工控机同时连接多个GigE相机
如图,我强悍的工控机,有六个网口. 实际用的时候连了多台相机,为了偷懒我就把六个网口的地址分别设为192.168.0.1~192.168.0.6,以为相机的IP只要设在192.168.0这个网段然后随 ...
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)
目录 1.前期预备知识 1.1 新大陆ZigBee模块LED灯电路 1.2 CC2530相关寄存器 1.3 寄存器操作技巧 1.4 CPU空转延时 1.4 操作流程图 2.程序代码 The End 1 ...
- 【CronExpression表达式详解和案例】(转载)
原文地址:https://www.cnblogs.com/pipi-changing/p/5697481.html 找了下Cron的资料,这篇作者写的比较清晰,转载记录一下,方便后面使用的时候在g ...
- 2018-2019-2 网络对抗技术 20165219 Exp6 信息搜集与漏洞扫描
2018-2019-2 网络对抗技术 20165219 Exp6 信息搜集与漏洞扫描 实验内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...
- BZOJ 5334--[Tjoi2018]数学计算(线段树)
5334: [Tjoi2018]数学计算 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 220 Solved: 147[Submit][Status ...
- jzoj5878
tj:這道題可以想到排列組合 對於第一問,我們知道,左轉的次數比右轉次數多4,所以答案是c(n,n/2-2) 對於第二問,我們發現,不能出現下凹的情況,所以不能同時出現2個左拐,且路徑可以分為4段,且 ...
- C++中vector的使用
在c++中,vector是一个十分有用的容器. 作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据. vector在C++标准模板库中 ...
- Topological Sor-207. Course Schedule
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- Python 去除列表中重复的元素
Python 去除列表中重复的元素 来自比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还 ...
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括 进程(Process)等.应用程序/包.服务(Serv ...