新手的java学习建议

前言

新手的java学习建议

  • 进入IT领域,就像进入大海—浩瀚而广阔。然而,它又很容易让人迷茫,不知所措。所以,在IT的海洋中,找好一艘船特别重要,这艘船带你前进、减少迷失。这艘船或许是一个人,或一本书,又或许是一篇文章。
  • 然而在现实的大学生活中,在我们普通院校中,其实更多的可能是忙忙碌碌,或者碌碌无为。或者就是按照课本循规蹈矩,学着一些陈旧,或者自己不喜欢的东西。到最后就是那种啥都会、啥又都不会的人。
  • 笔者为一个即将进入大四的学生,在这个领域的学生生涯也算是感触良多吧,自己算不上优秀但是也不是无所事事的那种人。在大一和大二荒废和浪费了太多时间,每每想到都会后悔上一番。希望后人能够引以为戒!

预备工作

了解IT领域

热门语言

新手的java学习建议

  • 在学习一门语言,或者一门技术,你首先要先了解这门技术,这门语言在世界,在中国的市场份额。以及火热程度。有些语言渐渐暗淡。而有些语言逐渐兴起。
  • 当前比较火热的语言大致有javapythonc、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力荐。

同时,也不要有心理包袱,不要认为自己是双非的大学就进不了大厂,如果学习的早,自身积累够多,够扎实,用心准备那么进大厂也是没问题的。

解决学习障碍

新手的java学习建议
个人感觉在学校的学习过程中主要有两大障碍。一个是个人障碍,另一个是学校障碍。

个人障碍:

  • 不了解就业的压力。总把事情交给’明天’,以后。或者把领域看的很简单,又或者好高骛远,看不上当前所学,又不拓展新知识。
  • 还有 混日子等临近毕业补习找工作。这种就是低薪码农,和容易被淘汰的。IT的每一个技术栈都很深,都需要长期的沉淀才能变强。
  • 考研党会认为:我要考研。我要考研,我不要学这个,我要做研究。你做研究,研究生基本是算法或者底层深入的研究。有些甚至连基本知识、语法都不会,准备用宝贵的两年半去从0开始么。这里就不再吐槽了。如果想要考研的也要为自己的将来打算做铺垫。比如你想将来研究机器学习算法。你可以刷刷题提高编程思维能力,学个爬虫能够抓取一些数据。为自己以后做个铺垫

学校障碍:

这个可能有些学校好一些。但是对于我们学校的教学方案和课程。真的很想吐槽一下。虽然学习是个人的事情,但是在当前教育制度下很多学校也有无法推脱的责任。

  • 课程陈旧、冷门课程:IT发展迅速、技术更迭较快,然而很多学校课程甚至5、6年都不改。就比如我自己我们疯狂学C#,sqlserver,windowsapp(windows应用商店app),.net微软这些玩意。如果认真学习出来真的是没啥用——不迎合市场。对于这些,如果你是忠于技术的感觉还是要有所取舍。如果你要是钻研你自己的技术一直钻研下去那么你肯定会慢慢沉淀,收获很多。但是学科成绩就会降低甚至是挂科。对于其他更深的影响这里就不分析了。
  • 还有些学校疯狂开设相关性不大的课程 比如日语,疯狂开硬件课程。确实占用大量学习时间。如果在遇到一些要求很严格的老师,真的是欲哭无泪。
  • 对于这些障碍,你要认清自己大学期间想要收获的是什么。然后自行决定取舍。如果你是想从事技术就业,个人感觉学业成绩没那么重要、可以多关注技术,多做项目对成长、就业的好处会更大。但是对于操作系统数据结构和算法网络这些课程也是程序员内功区分的很大准则。还是要认真学习的。

浅谈java学习

新手的java学习建议

这里通过个人过程浅谈一些java方向学习的建议

javaSE

新手的java学习建议

万岁入门难。当你敲起hello world跑起来,那其实算不上入门。论上入门应该是把Java的基础都掌握吧。javaSE是java的核心和基础。只有这块学好在后面阅读其他代码、框架才能更加轻松容易。

几点建议:

  1. 对于入门的书籍,其实还是推荐,内容丰富而通俗易懂。跟着书上案例敲demo就很容易入门。如果认为这本很简单,可以买一本,其他的书暂时就不建议买。
  2. 对于入门的视频,其实比较多了,像网易课堂,腾讯课堂,慕课,这些在线教育平台有很多免费课程,适合入门。并且淘宝上也有很多培训机构的课程,也是相当不错。比如黑马,尚学堂,传智播客,各种可以从淘宝买的到。
  3. 对于入门的资料,其实比较多了。基于微文章,博客等的流行,越来越多好文章涌现在stack overflower,csdn博客园掘金,今日头条,简书,微信公众号以及个人博客上,所以要充分利用搜索引擎获取资源。
  4. 对于编译器,入门建议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

新手的java学习建议
前言

  • 在从javaSE刚过度到javaEE的时候,笔者初期感到深入不适,甚至也停止了好久。因为对一些概念没搞清楚并且有一点畏难的思想。因此也耽误了很长时间。因为之前的javase只有java代码。而javaEE有java代码,又有啥javabean,serverlet,jsp,js/css,xml,tomcat,还有session,cookie系列名词。后面还有啥maven,框架啥的。这些没有接触的概念曾经一度阻挡自己学习。
  • 其实当你有这些问题时候,建议你两点:一就是先百度把各个名词先百度一下,先弄清楚这些玩意是干什么的。二就是建议你找个系统的视频课程或者教程跟着学习,他们会带着你一步步更新认知和了解。能够少走很多弯路。
  • 这部分还有一个很重要的就是省略得当,有些技术过时的、陈旧的不需要学或者不需要深学。比如jsp页面语法,strus2,hibernate,jsp整合javabean等等。了解就好。

jsp/servlet

  • 这部分应该是javaEE的基础部分吧。推荐这部分可以在菜鸟教程,或者易百教程,或者较为体系化的结构可以参考。
  • 这部分感觉总要的还是cookie、session、表单处理、文件上传、文件下载、servlet3.0新特性、过滤器、监听器需要掌握。而jsp对应的内容和在jsp嵌入java代码稍微了解吧。因为现在用jsp做模板引擎的不多并且前后端分离已经成为潮流。也就是——jsp有点过时了。
  • 这部分跟着教程了解每一个特性,把每一个组件整合一下就ok,不需要利用这部分的技术做太多的项目。至于websocoket如果做web小游戏或者通讯可以研究。但市场有很多封装好的拆箱即用。

传统框架(掌握)

  • 上一代的传统框架为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 笔者也很乐于帮助
上一篇:iOS音效


下一篇:HoverTree项目已经实现分层