新手的java学习建议
前言
- 进入IT领域,就像进入大海—浩瀚而广阔。然而,它又很容易让人迷茫,不知所措。所以,在IT的海洋中,找好一艘船特别重要,这艘船带你前进、减少迷失。这艘船或许是一个人,或一本书,又或许是一篇文章。
- 然而在现实的大学生活中,在我们普通院校中,其实更多的可能是忙忙碌碌,或者碌碌无为。或者就是按照课本循规蹈矩,学着一些陈旧,或者自己不喜欢的东西。到最后就是那种啥都会、啥又都不会的人。
- 笔者为一个即将进入大四的学生,在这个领域的学生生涯也算是感触良多吧,自己算不上优秀但是也不是无所事事的那种人。在大一和大二荒废和浪费了太多时间,每每想到都会后悔上一番。希望后人能够引以为戒!
预备工作
了解IT领域
热门语言
- 在学习一门语言,或者一门技术,你首先要先了解这门技术,这门语言在世界,在中国的市场份额。以及火热程度。有些语言渐渐暗淡。而有些语言逐渐兴起。
- 当前比较火热的语言大致有
java
、python
、c
、c(嵌入式)、javascript
、typescript、c#、R、go、kotlin(安卓)、scala(大数据)、ruby、php、matlab、dart(flutter跨平台移动端)、swift(苹果)、objective -c(苹果)、shell脚本、lua脚本等等。 - 选择一门语言要根据你的方向来。比如你要学习后端。那就java、python、php、c#、或node.js。如果搞安卓那肯定java、kotlin、js(混式开发)。如果大数据那肯定是java、scala最好,其次python也行。如果搞人工智能算法那肯定是python、matlab。数据分析可以考虑R、python、matlab。如果你想搞爬虫,那python肯定最好选择,当然java等其他语言都可以。如果你是竞赛ACMer。那c 肯定是你的拿手菜、也不排除部分鬼才用java哈。
- 笔者从大众角度还是建议要熟悉掌握一门编程语言。对于作为学习的基础语言。建议从
java
或者c 开始。后续可以学习python。go等语言。
热门方向
- 对于方向,虽然笼统的说有web开发、大数据、人工智能、物联网、云计算、运维、测试、网络安全等等。但是对于普同学软件的大学生来说主要的还是·
前端
、后端
、运维
、大数据
、测试这些。 - 对于很多人说的或者当前炒的火热的
人工智能、爬虫
那些。我只能说很大程度那就是一个坑吧。因为大公司除了一些做搜索引擎的百度、谷歌、360他们利用爬虫 算法 存储做搜索引擎。而其他大公司他们都有自己产生的数据、他们更多致力于这些数据的处理,分析。而不是想着怎么爬。还有就是理性看待培训机构的python吹
,python是很方便简单,是能干很多事情。对于鼓吹的爬虫学到后面的拓展方向。要么是扩大量分布式方向拓展。要么就是分析JavaScript各种加密。如果是安卓等app还要反编译看源码查看java代码的逻辑,以前记录的浅谈网络爬虫。而AI方向
众所周知一般非985/211硕士很难找到
。并且AI重要的是数学和算法,跟编程语言关系也不大。python仅仅是一个工具
而已。 - 根据方向市场大部分需求还是
前端、后台、算法(要求很高)
。前端和后台的需求远远超过其他的方向人员。因为所有网站的其他开发功能都要依赖于前端和后台。并且随着html5流行。web能干的事情也越来越多。这也极大的抢占了桌面应用和原生安卓、苹果应用。所以个人建议后端、前端、运维三个方向选择一个。当然。具体选择方向还是要根据兴趣来,你喜欢大数据(工程类要求不是很高,数据挖掘算法要求高),人工智能,爬虫,游戏开发,桌面开发等你都可以做。只不过再选择方向时候要尽早
。不要好高骛远
。根据自己所在院校、自己实际水平。以及计划研究自己想要研究的。
自身定位:
你是想要进大厂
,还是想进小公司
呢?
对于一个普通本科生,很可能真正步入学习的时间不多。并且能够掌握的知识的广度和深度也是有限度的,还要考虑学习环境的影响。要慎重选择学习的侧重点。
- 相进大厂,那么如果裸的只会java后端技术是不够的。在校招阶段进大厂更多知识的要求不是广度,而是深度。比如
操作系统
,网络
,数据结构和算法
,以及jvm
,和java的基础知识需要熟练掌握。而框架和一些高级中间件需要你了解或简单应用。但是大厂就那几个,竞争压力还是比较大的。 - 想进小公司,其实很多小公司的要求特别高,并且很多小公司干的活也多一定程度能够使得技术快速成长,也有不少人先到小公司积累技术然后跳大厂。小公司更多看中你会的技术有哪些,会那些框架,中间件而相对不太注重那些底层。
- 如果你要就业一定要提前几个月准备面试,准备基础,进行复习,github上的javaguide力荐。
同时,也不要有心理包袱,不要认为自己是双非的大学就进不了大厂,如果学习的早,自身积累够多,够扎实,用心准备那么进大厂也是没问题的。
解决学习障碍
个人感觉在学校的学习过程中主要有两大障碍。一个是个人障碍,另一个是学校障碍。
个人障碍:
- 不了解就业的压力。总把事情交给’明天’,以后。或者把领域看的很简单,又或者好高骛远,看不上当前所学,又不拓展新知识。
- 还有 混日子等临近毕业补习找工作。这种就是低薪码农,和容易被淘汰的。IT的每一个技术栈都很深,都需要长期的沉淀才能变强。
- 考研党会认为:我要考研。我要考研,我不要学这个,我要做研究。你做研究,研究生基本是算法或者底层深入的研究。有些甚至连基本知识、语法都不会,准备用宝贵的两年半去从0开始么。这里就不再吐槽了。如果想要考研的也要为自己的将来打算做铺垫。比如你想将来研究机器学习算法。你可以刷刷题提高编程思维能力,学个爬虫能够抓取一些数据。
为自己以后做个铺垫
。
学校障碍:
这个可能有些学校好一些。但是对于我们学校的教学方案和课程。真的很想吐槽一下。虽然学习是个人的事情,但是在当前教育制度下很多学校也有无法推脱的责任。
- 课程陈旧、冷门课程:IT发展迅速、技术更迭较快,然而很多学校课程甚至5、6年都不改。就比如我自己我们疯狂学C#,sqlserver,windowsapp(windows应用商店app),.net微软这些玩意。如果认真学习出来真的是没啥用——
不迎合市场
。对于这些,如果你是忠于技术的感觉还是要有所取舍。如果你要是钻研你自己的技术一直钻研下去那么你肯定会慢慢沉淀,收获很多。但是学科成绩就会降低甚至是挂科。对于其他更深的影响这里就不分析了。 - 还有些学校疯狂开设相关性不大的课程 比如日语,疯狂开硬件课程。确实占用大量学习时间。如果在遇到一些要求很严格的老师,真的是欲哭无泪。
- 对于这些障碍,你要认清自己大学期间想要收获的是什么。然后自行决定取舍。如果你是想从事技术就业,个人感觉学业成绩没那么重要、可以多关注技术,多做项目对成长、就业的好处会更大。但是对于
操作系统
,数据结构和算法
,网络
这些课程也是程序员内功区分的很大准则。还是要认真学习的。
浅谈java学习
这里通过个人过程浅谈一些java方向学习的建议
javaSE
万岁入门难。当你敲起hello world跑起来,那其实算不上入门。论上入门应该是把Java的基础都掌握吧。javaSE是java的核心和基础。只有这块学好在后面阅读其他代码、框架才能更加轻松容易。
几点建议:
- 对于入门的书籍,其实还是推荐
,内容丰富而通俗易懂。跟着书上案例敲demo就很容易入门。如果认为这本很简单,可以买一本
,其他的书暂时就不建议买。 - 对于入门的视频,其实比较多了,像
网易课堂,腾讯课堂,慕课
,这些在线教育平台有很多免费课程,适合入门。并且淘宝上也有很多培训机构的课程,也是相当不错。比如黑马,尚学堂,传智播客
,各种可以从淘宝买的到。 - 对于入门的资料,其实比较多了。基于微文章,博客等的流行,越来越多好文章涌现在stack overflower,
csdn
,博客园
,掘金
,今日头条,简书,微信公众号以及个人博客上,所以要充分利用搜索引擎
获取资源。 - 对于编译器,入门建议eclipse。idea(入手需要时间)也可以。如果用idea最好先找一下idea搭建项目流程和介绍。两者编译器有些不一样。java基础学习建议eclipse。javaweb建议使用idea。不建议使用myeclipse,感觉太臃肿。
javase知识体系
- java基础:
包过安装环境,第一个helloworld,命名规范,数据类型,运算符,控制语句和方法,数组,字符串,面向对象,异常,泛型,以及一些api 例如正则、math、大数等模块。这部分比较简单,跟着书上、视频、博客的demo跟着敲就能够理解。对于一些模块不一定需要立即完全掌握。比如Math类有很多数学计算方法,你掌握一些常用的求平方、根号可以以后用到再慢慢积累。还有正则和大数模块在入门阶段要求也不是很高。 - java 进阶:
对于进阶部分的内容。都是java处理问题的利器
!,并且都很重要。 - io(熟练掌握):在后面javaEE开发中,或者实际项目中。很多涉及到文件传送,需要对IO的api熟练掌握,并且io的拓展也比较多有NIO,BIO等等。
- 集合(熟练掌握):Map和List在开发过程中使用是非常多的。并且在面试中也会常问Hashmap,currentHashMap,ArrayList、LinkList相关内容。并且在写算法题,写项目时候集合也是必不可少的部分。
- 网络编程(了解):了解socket编程,tcp/udp编程。如果喜欢网络编程或者想研究通信方面或者一些网络传输中间件要深入了解网络编程。
- 多线程(先了解熟悉):这部分内容比较深。在入门学习可先了解熟悉,因为等java有一定基础还需要对多线程进行深入学习。因为在大型项目中会涉及到线程安全问题、同步问题。都需要多线程方面的知识。
- 反射(先了解):反射的功能比较强大,对于很多人来说还是太难了。这部分在入门学习建议了解。如果后面有能力可以深入学习。因为当前流行的spring,mybatis很大程度是依赖反射去完成的。
- jdbc(掌握),jdbc在jsp/servlet中关于数据库的操作几乎必不可少,这部分在javaEE会二次学习。
- javaswing(直接跳过):java在桌面编程并没有太大优势,虽然eclipse,idea,webstrom,pycharm等众多编辑器是java开发的。但java开发桌面效率还是偏低。难度偏大。但是很多老师的课程设计会基于javaswing的管理系统。如果你想学也可以研究吧。但是个人觉得还不如多花点时间用web做一个管理系统呢。
javaEE
前言
- 在从javaSE刚过度到javaEE的时候,笔者初期感到深入不适,甚至也停止了好久。因为对一些概念没搞清楚并且有一点畏难的思想。因此也耽误了很长时间。因为之前的javase只有java代码。而javaEE有java代码,又有啥javabean,serverlet,jsp,js/css,xml,tomcat,还有session,cookie系列名词。后面还有啥maven,框架啥的。这些没有接触的概念曾经一度阻挡自己学习。
- 其实当你有这些问题时候,建议你两点:一就是先百度把各个名词先百度一下,先弄清楚这些玩意是干什么的。二就是建议你找个系统的视频课程或者教程跟着学习,他们会带着你一步步更新认知和了解。能够少走很多弯路。
- 这部分还有一个很重要的就是省略得当,有些技术过时的、陈旧的不需要学或者不需要深学。比如jsp页面语法,strus2,hibernate,jsp整合javabean等等。了解就好。
jsp/servlet
传统框架(掌握)
- 上一代的传统框架为ssh(spring,strus2,hibernate)。但是那套体系很陈旧,很少有公司使用了。所以没必要学。现在更多的是springboot mybatis。springboot是整合spring相关内容,使得开发减少配置,更加方便。所以还是要先学ssm,然后再springboot。
- 对于学习顺序,笔者建议先从mybatis,然后spring,然后springmvc。然后整合spring、springmvc、mybatis。然后再学习springboot。
mybatis
学习:除了看视频之余。推荐一位博客园的博主孤傲苍狼写的mybatis教程,感觉写的特别棒。当然,你也可以在其他教程上学习mybatis的教程。对于mybatis半自动化ORM框架(基于jdbc封装)。写sql,封装成一个接口调用。比起jdbc方便很多,极大提高效率。Spring
学习:spring 主要ioc和aop。对于入门阶段要熟练掌握ioc。aop可以先放一放。个人觉得到后面有项目业务需求时候可以再学。Springmvc
: 这部分学习可以精简得当,因为很多教程可能还是用大量model(modelAndview)。以及el表达式渲染数据。这部分如果专注个人开发可以多学一点。对于spring和springmvc。ssm整合
:笔者记得当初在整合ssm项目的时候是废了很大一把劲。刚开始用的myeclipse用它下载部分spring的jar包。然后整合的时候又是各种报错。然后又找各种缺失的jar包。然后又是各种版本错误。找bug。最终好容易整合到跑以来。但是这样项目不易于管理。又项目转移到IDEA.用maven管理jar包。百度很多能跑的整合方案却不多。然后到最后好不容易找到完整的跑起来。所以在学框架的时候最好就是从开学就用maven管理依赖jar包。对于如果有整合难题可以到github找ssm项目copy修改。当然你也可以关注笔者公众号:bigsai 笔者也很乐于帮助新手的java学习建议的更多相关文章
- 新手如何学习java(java学习建议路线图)
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA). ...
- 学习新手给Android新手的一些学习建议
时间紧张,先记一笔,后续优化与完善. Shamoo做Android开辟已有一年了,对Android开辟也有一点点了解.上面就给Android新手说说我对Android浅面的意识和一点建议吧,知道的大牛 ...
- 新手上路---Java学习知识梳理
我随笔 我相信也有那么一些人跟我一样,脱下军装后对未来感到迷茫,不知所措甚至怀疑起自己的能力,自身体会的经历过才能明白其中的辛酸!归咎一切:心态,信心,自信!再穷不过乞讨,不死终将出头.好了,闲言碎语 ...
- Java学习路线图,专为新手定制的Java学习计划建议
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J ...
- 转:Java学习路线图,专为新手定制的Java学习计划建议
转自:http://blog.csdn.net/jinxfei/article/details/5545874 怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业 ...
- 给新手学习Java的建议
有很多的朋友都在问我一个同样的问题:新手应该如何能学好Java.我做了一个简单的总结,分享给大家: 1-信念:无论你是选择JAVA,C,C#,C++....还是其他的语言编程,信念是第一位,只有相信自 ...
- Java学习路线图,Java学习计划建议
怎么学习Java,这是很多新手经常遇到的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J ...
- java学习de路线建议
我想谈一谈我的一些关于网页学习的小感悟吧.之所以是写这个的原因完全是想告诉现在还处在网页学习的初始阶段的同学一些我学习走过的弯路,但我说的也仅是我个人的理解,毕竟我只能是JavaWeb开发的新手,所以 ...
- 新手如何学习Java——Java学习路线图
推荐初学者阅读:新手如何学习Java——Java学习路线图
随机推荐
- Spring Boot2(十一):Mybatis使用总结(自增长、多条件、批量操作、多表查询等等)
一.前言 上次用Mybatis还是2017年做项目的时候,已经很久过去了.中途再没有用过Mybatis.导致现在学习SpringBoot过程中遇到一些Mybatis的问题,以此做出总结(XML极简模式 ...
- Pownerdesigner画用例图_类图_时序图
1. 问题描述 软件过程中,设计阶段有几个常用的工具:Rational Rose.Visio.Pownerdesigner,一般用Rose用例图/类图/时序图,Visio画流程图,Pownerdesi ...
- freemarker实现单元格动态合并-行合并
项目需求:项目中有个需求,需要将一些数据库中的数据根据需求导出,生成一个word,研究了一些技术,其中包括POI.freemaker,对比了一下实现过程及技术难度没最终使用了freemaker; 原始 ...
- who are you?
不多说,直接使用脚本跑 # -*- coding:utf-8 -*- import requests import string url = "http://ctf5.shiyanbar.c ...
- Windows Presentation Foundation (WPF) 项目中不支持xxx的解决
一般Windows Presentation Foundation (WPF) 项目中不支持xxx都是由于没引用相应的程序集导致,比如Windows Presentation Foundation ( ...
- Excel催化剂开源第19波-一些虽简单但不知道时还是很难受的知识点
通常许多的知识都是在知与不知之间,不一定非要很深奥,特别是Excel这样的应用工具层面,明明已经摆在那里,你不知道时,永远地不知道,知道了,简单学习下就已经实现出最终的功能效果. 在程序猿世界里,也是 ...
- Java 常见面试题整理
操作系统 说一下线程和进程,它们的区别 同步和异步的区别 阻塞和非阻塞的区别 操作系统中死锁的四个必要条件 mmap和普通文件读写的区别,mmap的注意点 CPU密集型和IO密集型的区别 Linux ...
- Linux设备驱动程序学习----1.设备驱动程序简介
设备驱动程序简介 更多内容请参考Linux设备驱动程序学习----目录 1. 简介 Linux系统的优点是,系统内部实现细节对所有人都是公开的.Linux内核由大量复杂的代码组成,设备驱动程序可以 ...
- C++判断图像中一点是否在矩形中
需要判断出四条之间组成的矩形的范围,其中矩形的边缘可能是倾斜不平行于x或者y轴. 考虑和很久,参考博客http://blog.csdn.net/dapengbusi/article/details/5 ...
- vue更改了数据但是视图却没有更新
今日总结:让钩子函数背锅的一上午,跪求原谅 需求:页面刷新时,保留当前页面的选中状态 解决思路:在data里设置一下初始值,保证首次进入有默认选中状态,其次再操作时,把选中的状态存sessionSto ...
- 新手如何学习java(java学习建议路线图)