本身学习 Java 将近两年了,本身水平还很浅,妄不敢说这篇文章是学习 Java 的金言。也是借着老师让我给学弟学妹们分享本身学习 Java 的经验的机会,同时也是对本身学习 Java 的总结和反思,大佬们不喜勿喷。前端
下面我就从五个方面来谈。java
我是从大二下学期开始学习 Java 的,那时咱们尚未上 Java 这门课,因此就自学喽。也正好遇上找到了指导老师,老师就给我一个练手的项目,仿学校的医院管理系统。原程序是 C++ 写的,用的 MFC,Win10 上面跑不了,没法看到实际效果,我就看着文档中系统截图思考功能。在此以前只有一点 PHP Web 方面的经验,搞清作这个系统所需的技术后,我就开始学习相关的知识,Java 基础、Java Swing 界面编程,MySQL 数据库。一个学期边学习边写这个系统,那时候连 MVC 结构都不知道,也不会用任何的框架,就用了一个链接 MySQL 的 jar 包。虽然整个系统很 “精心” 的设计,但系统结构划分和代码仍是一团糟。凭借着百度和琢磨,我仍是写出来系统的大部分功能,固然 BUG 也是有的,这个系统就到此为止了,后来电脑重装系统,数据库文件没备份,系统就只剩个界面了,有时间还想重写一下这个系统,毕竟这是我 Java 梦开始的系统。git
大二暑假,指导老师让我模仿一个学长毕业设计作的实验室管理系统,C# 写的,.NET 平台。有一星半点 Web 基础的我,学习了一个星期的 Java Web(准确的说是 JSP),就开始写这个系统了,当初还找了几我的组了个团队,但后来仍是我一我的来写。前端到后端,界面到数据库设计,都是不小的考验,不用说了,界面作的丑,代码也是又臭又长。那时不懂界面重用,大量重复的代码,没有用任何框架,总共撸了有一万多行吧😭。Java Web 的基础都没打好,后来我看书又从新学习了一遍 Java Web。这个系统好像还躺在个人电脑里,可是再也没打开过了。这个项目真的感受很失败,都想放弃学习 Java Web了,后来老师开导我,我开始学习框架。程序员
大三上学期,我开始学习 SSH 框架,一边看视频,一边本身实际操做,还写了十几篇SSH框架的学习笔记,自认为学的还不错,写个简单的管理系统是没什么问题了,这时搭建框架仍是手动导入相关的 jar 包,还不会用 Maven。在老师的建议下,我申请了学校的创业创新项目,名字起的还很高大上,《跨平台的开放式实验室管理系统》,项目时间为两年,本身做为项目的负责人,仍是以前的那些队员。这学期后段忙着项目申请书和项目开题的事,项目没真正开始写,仍是调查研究阶段,咱们查阅了大量的资料文献,我也有了一个大体的思路,但同时也发现了这个系统的难点所在。咱们要作的这个系统当时写的是面向全校的,人员的权限就是一个大问题,并非简单的增删改查这么简单,系统要可以灵活的分配权限,权限对应的才是功能。还有一个实验预定功能,不知道是咱们想的太复杂的,仍是怎么滴,没有一点头绪,在 GitHub 上也找了一些相关的项目,运行测试后,都没有实际用途,达不到要求。这个项目就这样停滞了,直到大三下学期。面试
做为负责人的我,大三下学期刚开学就不敢有丝毫松懈,全力研究系统中的权限控制,我先是在网上找资料,发现能够框架作(spring security、shiro),但以为学框架太费时间,何况本身用的是 SSH 框架,框架也只是入门,框架太多,本身也驾驭不住。本身当时也了解到利用 RBAC 模型能够作权限控制,数据库是能设计出来,可是界面权限树搞不定呀,留下了 JS 和 Jquery 薄弱的泪水。终于功夫不负有心人,我找到了一个 OA 系统的视频,视频中用的框架也是 SSH,系统中的权限控制也和咱们系统中的相似,心中一阵窃喜,可是视频真的有些老了,09 年的,用的技术就更老了。咱们系统前端页面用的 Bootstrap 框架,为了体现出系统的跨平台性,没用 EasyUI 这类简单易用的框架,项目的技术选型都是我来作的,我当时是以为 EasyUI 写的界面不灵活很差看😔,固然也有懒得再用框架增长负担。当时 JSP 和 Bootstrap 的结合,我都想了很久,唉~,研究了一个月的视频,跟着视频作出了系统权限控制功能,还写了篇博客,发给老师看,老师说这个放到项目中就能够发篇论文了,我开始把权限控制移植到咱们的系统中,这时才以为框架真香,在 GitHub 上找了一个后台管理系统的框架,也是基于 Bootstrap的,里面使用的大量的插件,我研究了一天,修修改改用到咱们的项目中。在权限控制移植到咱们的系统中,我又发现了新的问题,系统中还有分院系管理的限制,不一样的院系确定只能管理本身本院系的事情,还须要在原来 RBAC 模型数据表的基础上添加院系表和相关的字段,这一改,伤筋动骨啊,半个月我都在设计和写代码,终于算是完成了系统的权限控制功能。又忙了一个月,不断的修改论文,以前还觉得代码写出来就懂了,论文的逻辑写的很残缺,在老师的指导下,逻辑才逐渐清晰,这时中文版的论文才算是落地,后面就把论文改为英文的,程序界面也须要改,最终才把论文发表。你可能会问,团队的其余的人?渐渐这个项目作成了个人项目,而不是咱们的项目,系统的设计到具体的编码,前端到后端,从设计师到苦逼码农,这其中的滋味只有我一人知道。这期间我也在想系统的架构,咱们用的仍是 JSP,这就须要写前端不只要会 HTML 和 CSS,还要会 JSP 的标签,展现数据用的是 JSP 的逻辑标签呀。这学期我也学习了微信小程序开发,和一个老师办公室的小伙伴合做了一个微信小程序,两我的一个前端一个后端(我),前端就很少说了,看微信小程序的官方文档,WXML,WXSS,JS,后端我考虑后用的是 PHP,没用框架,由于不会也没学,两我的折腾了一个月仍是搞出来上线了。后来我一想,咱们作微信小程序采用的不就是先后端分离,先后端之间用 JSON 传输数据,合做开发时,我做为后端感受很爽,由于程序功能不复杂,数据库也不难,我想若是咱们这个系统中也作成先后端分离,精力就能够更集中开发本身的那部分,本身精力真的有限,先后端都写,结果都玩不转。本身思考了不少,把 Java Web 又从新看了一篇,进行了一些知识总结,就这样这个系统开发了一半,问题就只剩下实验预定了。算法
如今是大四上学期,我没有接着开发这个系统,而是转向了看书,由于也要准备校招和面试了。以前老是疲于作开发,书读得不多,都是为了完成程序中的功能,书是看不进去的。在看书中,我才看到本身的知识是那么脆弱,不少都是只动个皮毛,根本没有深刻进去,因而我开始恶啃书籍,《深刻理解 Java 虚拟机》,并作了一些笔记。以前老师给的李刚老师的《疯狂 Java 讲义》又拿出来看了看,以前看以为写的很好,由于 Java 相关的东西基本都讲到了,包括一些高级特性。如今看已经知足不了本身的求知欲了,不少东西讲的仍是太浅了,也正是这时我才感受到 Java 真是太深了。因而对于一些类,我开始看源码,看不懂的就看网上的解读,对于概念性的知识有了全新的认识,并写了相应的笔记。spring
个人我的经历,看起来是边学边作,可是对于这种被动的作,被动的学。个人基础打的并不牢固,如今也是恶补,看不少的书。往者不可谏,来者犹可追,如今能作的就是把以前碎片化的知识概括成系统,也是不断的写笔记整理总结。数据库
我学习了不止一门语言,如今是把 Java 做为个人主语言,结合我的的经历,我以为学习 Java 仍是要分阶段学习的。我以为最好的入门方式,就是买一本相对基础但有比较系统的书(不要求深刻,每一个知识点都有例子就能够)结合着视频(推荐培训结构的视频)来看,在学习的过程当中,把书中的每一个例子最好都敲一遍,不要拿着源码运行一遍就完事了,必定要手敲,既能够熟悉语言又能够提升编码速度,熟能生巧。入门后想要提升,就要多思考,对问题进行总结,好比 Java中的抽象类和接口有什么区别,这个阶段能够编一些简单的管理系统,写一个就能够,功能不要求复杂,常常看看 java 的 API 手册,英文好的直接看英文,英文很差的能够中英文对照着看,由于有些地方翻译的真的很差,英文阅读能力绝对值得提升,不是吹,外国人的文档水平真是比咱们好太多。推荐书的话,我推荐《Effect Java》,《Java 编程思想》也是经典书籍,可是真的是有些旧了,书中的思想也不是一年半载能够消化的,往后能够再读,因此这个阶段不太推荐。进阶阶段,能够深刻了解一下的 Java 的高级特性,总有一天你会发现框架都是来源于这些高级特性,也能够阅读一些常见类的源码,如 Object、Math、String、ArrayList、HashMap 等等,这其中或许还要配合着设计模式和算法来看。更深刻的阶段,设计模式、Java 虚拟机、算法与数据结构、Java 多线程编程。框架就很少说了,真的太多了,SSH、SSM、Spring等。如今的大数据时代,也对 Java 程序员提出了更高的要求,Hadoop、HSFD、Spark、HBASE、Zookeeper,分布式架构,Spring Cloud 全家桶、阿里巴巴的 Dubbo 框架。固然疲于学框架,效果确定很差,每一个框架都是有应用场景的,这也是框架为何出现的缘由。学习任何东西,都要先搞清楚哲学上的三个问题,这个是什么?为何要学习它?怎么学习?第三个问题或许是学完后你才能回答,固然能够看看别的答案。学习框架,不只仅是框架的用法,再深刻的话就是框架中的思想,框架中是怎么实现思想的,这就要看框架的源码了,再甚至本身写一个框架。编程
我的经验,我总结为下面四条:小程序
上面四点经验,有刻意总结的味道,但有些确实是本身在坚持的,如写做。和老师的交流中,我常常能够发现本身认识不足的地方,也有灵感闪现的时候,有时候也发现本身认为的懂了居然说不出来。看书真的是种享受,如今才体会到,心太急是读很差的书的,看书能够带着目的性或者是问题,但不要带着浮躁。
由于面对的是没有基础的学弟学妹,大神大佬们能够跳过😄。
Java IDE:
一、Eclipse:大多数人的第一款 Java IDE,优势是开源免费,适合新手,代码提示少,能够多敲代码,对电脑的性能要求也不是很高。缺点是,又少许的 Bug,对使用框架支持也不是很好,须要另外装一些插件,固然不想装,也能够用 MyEclipse,可是不推荐,由于和下面的 IDE 相比,真的被秒爆。而且在查看源码时,还须要手动导入源码,这点很不爽。
二、Intellj IDEA:神同样的 IDE 吧,优势是商业收费,有教育优惠,学生老师均可以用学校的 edu 邮箱免费申请正版的专属激活码,代码提示很全,对框架的支持也很好,自带的反编译功能使查看源码很方便,用起来真的很爽。缺点就是太吃电脑性能了,对 CPU 和内存的要求比较高。
数据库管理工具:
Navicat:支持多种数据库,在大学你所能用到的数据库这个软件都是支持的,如 MySQL、Oracle、SQL Server、SQLite 等数据库。
多个版本的 JDK:
个人电脑上是装了 JDK六、JDK七、JDK八、JDK九、JDK10,不一样的 JDK 固然仍是有区别的,这点你在看源码时就会发现不一样版本JDK的差别和改进了。Java9 引入的相似 Python 的交互式编程环境 JShell,能够用于简单的 Java 代码测试,而不用再建立一个 Java 文件。因此你也能够根据本身须要,安装多个版本的 JDK,使用 Java 语言的新特性。
其余工具:
Typora:Markdown 写做工具,和市面上大多数分左右两栏,一栏编写一栏预览不一样,Typora 是单栏实时预览,我比较喜欢这种方式。
Maven:当你用到框架时,你就会发现 Java 中的 jar 包不少,而 Maven 是项目搭建利器,以配置文件的方式自动下载和引入 jar 包,切换不一样版本的框架很方便。
Git:版本管理工具,结合 GitHub 使用效果很棒!
见学弟学妹,空着手,我这个作学长确定也很差呀,因此我给学弟学妹们准备了 Java 学习大礼包,有书籍也有视频,直接看图吧。
这些资料我都放在了个人微信公众号:”编程心路“ 里,你们能够先关注领取完资料,再取消关注均可以,固然我会在这里分享本身的 Java 总结笔记,感兴趣的也能够来看看。
后台回复 ”Java书籍“、”Java视频“ 便可获取上面所有的学习资料。
后台回复 ”PPT“,也能够获得今天 Java 学习经验分享 PPT 文稿。
也欢迎你和我交流 Java,除了微信公众号 你能够在这些地方找到我:
GitHub:weizhiwen
简书:Wizey
掘金:Wizey
哔哩哔哩:Wizey
学习交流群:558719561
很是感谢你能耐心的看完。