如果纯粹是为了学Java,那么不建议阅读本文,因为本文不是从理论和教科书的角度讲述如何打好java基础,而是会从“快速用java挣钱”这个角度,讲边学、边做项目和边提升的方法。

在讲具体的方法前,有必要和大家讲明如下的道理。

1 工作中用到的java技术。绝不单纯是java核心语法,而包括java核心语法、数据库技能、web框架(目前比较流行的是spring boot框架)和整合大数据组件和分布式组件的技能。其中资深架构需要掌握java核心语法、数据库技能、web框架技能,而架构师还需要精通整合大数据和分布式组件的技能。所以学java绝不是单纯学线程集合等java核心的语法。

2 找到java工作后,学java技能的速度要比单纯自学和在培训班里学java要高太多,原因很简单,用来挣钱的项目里包含的才是真正的技术,自学或培训项目,没法模拟相关环境。所以本文后面给出的java打基础的方法,是先学到能找到工作的程度,再找工作,然后到项目里学。

3 Java相关的书很多,但不是每个技术点都在项目里用到,而且很多项目里需要的技能,其实根本无法从书本上学到。比方说,某初学者在找工作前学了一大堆java技能,或者是数据结构网络通讯操作系统方面的技能,但是在工作后,会发现真正用到的只是其中一部分,比如java核心里的socket编程,不少项目就未必用到。

4 相反,项目中经常要遇到的分析排查问题,和分布式组件调优等的技能,相关的书就比较少,而且,越是值钱的技能,越在书本上看不到,这些技能只是零散地存在网上的诸多文章里。说这些话的含义还是,请大家务必要在工作中学,自学不是不重要,但高级开发之上的技能点,靠自学或培训班积累的经验,未必能和实际项目要求能对上。

在讲好上述铺垫后,下文就可以给出具体的Java固基的步骤了。

1 先用3到5天,在本机安装jdk,IDEA集成开发环境,MySQL数据库和MySQL WorkBench数据库客户端环境。

2 买两本java书,比如Java疯狂讲义和Java编程的逻辑。为什么买书?因为书里的内容毕竟经过出版社审核过,而且代码能跑通,两本书并集足以涵盖java基础点。

但是,在学java核心的时候,可以只学基本语法,面向对象语法,集合,异常处理和JDBC。IO,设计模式,图形化界面,tcp socket编程这块,可以不用看,因为刚开始找工作未必要用这些技能。而JVM和多线程这块,可以先通过跑代码,了解相应的概念。

也就是说,java核心方面的技术点虽然多,但刚开始学的时候,未必要涵盖所有的点,上文提到不用学的点,在初级开发阶段基本用不到,所以学了白学,而且在学java核心技能的时候,一定得边跑代码边学。

3 上文给到的java书里,一定包含用jdbc连接操作数据库的技能,此时可以在mysql上搭建相关表,一方面熟悉sql语法,另一方面了解下java连接和使用数据库的大致步骤。

由于列出了只要学习的技能点,所以上述技能学起来应该不难,而且大概用1个月的时间能学好。后面就需要学spring boot,但是,这方面只需要学到能做增删改查业务的地步。

4 学spring boot的时候可以用我写的书。在我的书里,不仅包含了 spring boot+JPA做增删改查的技能,还进一步给出了可跑通的项目,此外还包含了 spring boot整合分布式组件的基本做法。

学好spring boot应该能以跑通一个项目为标志,请注意这里是跑通现成代码,而不是自己手写出一个全新的项目。

跑通一个spring boot项目后,大致能掌握spring boot做业务的基本技能,这也是干java活的最低标准。达到这个程度后,后面不应该继续学,而是应该去找工作了。

跑通一个spring boot项目后让大家去找工作,不是因为后面java技能不会用学了,而是比这高深的技能一方面通过自学效率不高,另一方面,找到工作后,更能通过项目为导向,更精准地知道后面该学什么。

比如一些资深java开发都知道,学好spring boot相关技能后,可以一方面继续学习junit和logback等实用性组件,另一方面应当去学数据库优化,jvm调优乃至分布式组件应对高并发的技能。但这些技能该学什么?学到什么程度可以去挑战更高阶的职位,只能是在做项目的工作中自己去体会,如果没有在项目中,学到的相关技能,我可以说,大部分都是白学。

java小白如何找工作,虽然很重要,但和主题无关,所以就不再展开说明,如果大家要了解细节,可以看我其它相关文章。

可以这样说,找到第一份java工作,是学习java的一个关键性的里程碑,在这之前,如果光学习找不到工作,学的技能有可能是白学。在后文里,就将讲一下找到第一份工作后,如何有效且高效地继续打好java基础。

当零基础的java开发找到第一份工作后,首先需要尽快掌握用spring boot等框架开发业务的流程,其中不仅包括写代码,还包括测试,调试和排查问题等,可以说,入职3个月这段时间内,基本能打好最初级的java基础,即能成为一个合格的码农,在这个阶段,还应当掌握如下的基础知识。

1 结合项目需求,熟悉java集合的用法,即数据结构如何用在存储业务数据方面。

2 用通过命令登上linux服务器,再通过命令查看日志,如果可以,再积累分析问题和排查问题的能力,在此基础上,更可以开始熟悉mysql,redis等组件在linux上的安装和部署流程。

3 全面积累并掌握单机版spring boot的开发、测试和调试技术,这块要做到给一个需求,能很快用spring boot框架实现,出现问题,只要不是分布式方面的,可以很快通过调试看日志等手段发现并解决问题,适当掌握junit单元测试等的手法。

一般来说,java初级开发应该在半年内熟悉上述技术,最长不应该超过1年。在这个过程中,不仅应当掌握必要的java和spring boot框架等方面的技术,更要习惯在做项目时解决问题的方式。

比如遇到问题该如何通过搜索关键字来排查和解决问题,遇到自己不会的技术,如何快速通过搜索引擎熟悉,更重要的是,在被要求开发一个新的功能模块时,能快速地仿照着现有模块,改写并实现现有功能模块。做到这一点以后,其实后面的提升,只是体力活了。

初级java开发的标准是更用spring boot等框架开发增删改查的功能,用半年到1年时间做到这种程度后,更应当为升级到高级开发打下java方面的基础,这块需要哪些技术?又该怎么做?

1 凡是项目里遇到的问题,你都积极去参加,哪怕你不是熟悉,也得复盘人家的分析和解决过程,这样做个3个月,一定能快速积累经验。

2 多参与系统上线和发布的工作,这方面包含了大量搭建组件环境和排查组件问题的经验,还是这句话,刚开始不懂就先跟着学,这方面绝对也是一回生两回熟。

3 千万留心分布式方面和调优方面的事情,比如了解项目里用到哪些redis,kafka等分布式组件,结合业务看这些组件的语法和配置参数,同时学习下通过分布式组件实现高并发的技能。如果项目里遇到性能调优等方面活(比如数据库调优jvm调优或高并发调优),这种事情多参加,哪怕不归你管你也多参加,要升级到资深开发和架构,就需要打好这方面的基础。

如果做到这种程度,是否能拿高级开发或资深开发到工资我不敢说,但技术上应该是满足了资深开发的要求。这里请注意,从初级开发升级到资深开发,以及以后升级到架构师,该学什么java技术,不能人云亦云,而应当结合自己的实际,在项目开发中自己体会。

比如网上有很多系列的升级教程,这些教程中包含了足够多的技术体系,而每个技术体系里,也恨不得罗列全所有的语法和经验。这就好比服用补药,每个人的体质不同,进补的目的也不同,如果java程序员不管三七二十一,脱离自己的需求盲目地学习网上的教程,虽然不会出错,但学到的技能未必对自己的提升有直接的项目。

所以在打基础的过程中,不应缘木求鱼,定好方向,即我要应聘大厂资深开发岗,需要哪些技术,该如何学,如何准备面试?具体精准下来,无非包括如下的内容。

1 证明自己有调优和分布式组件的技能,按上文给出的做法,能通过项目找到对应的实践机会,然后针对性地看redis和dubbo组件的用法即可。

2 证明自己有数据库调优和jvm调优能力,也是老办法,项目里解决问题的实践+适当看资料。

3 很多面向资深开发的面试官,会问看似很偏的技能,比如violate或dubbo协议等,掌握这些技能的做法是,收集面试题,再找实际项目中的落脚点,这样也能高效地打好相关基础。

4 至于背题,这种不能不算基础,但仅仅属于理论基础,用几天背下就可以了。

一个java初级开发升级到高级或资深开发的时间,快则1年,慢则2年,如果2年内再升不成,那估计是方法有问题。这个过程该打好哪些基础,该怎么做?这些绝非能用短短的文字来描述,上文也仅仅是给出了方法。

再啰嗦下,在java初级开发升级到资深开发的过程中,绝不能仅仅关注项目,因为项目里未必有升级能用到的技能,也绝不能单单去看书去看面试题,更不能过于听信别人给出的技术路线。而应当先全面收集高阶职位大厂的面试题,这个是目标方向,同时尽可能地在当前你做的项目中找落脚点,如果项目里没,然后再找网上的资料看。总之第一确定技术要点,第二看这些要点是如何同项目结合的,第三再适当背题,这样不仅能高效打好java资深开发相关的基础,而且还能高效通过资深开发的相关面试。

写好java资深开发方面打基础的方法后,似乎应当继续写架构师的基础该怎么打。但本文已经洋洋洒洒写了将近4千字,而架构师打基础的方法可能和前文说的不同。为了不喧宾夺主,本文暂且告一段落。如果本文点击量高,本人会再来更新一波,写写架构师的固基之法。

这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。

Java如何打好牢固的基础?的更多相关文章

  1. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  2. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  3. 最大化 AIX 上的 Java 性能,第 1 部分: 基础

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf1.html 最大化 AIX 上的 Java 性能,第 ...

  4. Java做acm所需要的基础知识之排序问题

    Java做acm所需要的基础知识. 以前做acm的题都是用C/C++来写代码的,在学习完Java之后突然感觉Java中的方法比C/C++丰富很多,所以就整理一下平时做题需要用到的Java基础知识. 1 ...

  5. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  6. Java并发程序设计(一) 基础概念

    Java并发程序设计(一) 基础概念 一.必须知道的几个概念 一)同步(Synchronous)和异步(Asynchronous) 同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后 ...

  7. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  8. java学习之路之javaSE基础2

    java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...

  9. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

随机推荐

  1. zabbix之监控Nginx连接数

    #;下载Nginx (编译的时候必须加上此选项 --with-http_stub_status_module) 官网地址:http://nginx.org/en/docs/http/ngx_http_ ...

  2. 类型类 && .class 与 .getClass() 的区别

    一. 什么是类型类 Java 中的每一个类(.java 文件)被编译成 .class 文件的时候,Java虚拟机(JVM)会为这个类生成一个类对象(我们姑且认为就是 .class 文件),这个对象包含 ...

  3. 【Java基础】JAVA中优先队列详解

    总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...

  4. 基于Web的质量和测试度量指标

    直观了解软件质量和测试的完整性 VectorCAST/Analytics可提供便于用户理解的web仪表盘视图来显示软件代码质量和测试完整性指标,让用户能够掌握单个代码库的趋势,或对比多个代码库的度量指 ...

  5. 全面解析 | 钥匙环服务的应用场景&商业价值

    在互联互通的场景驱动下,同一开发者旗下常常拥有多款应用或者多个应用形态,用户在同一设备的不同应用或端口登录时,即便使用同一帐号,仍需要重复输入密码进行验证,操作复杂,直接影响到用户的使用体验,而华为钥 ...

  6. ASP.NET管道模型简析

    我相信在第一次听到这个名词时,有的小伙伴会一脸懵,而且还有很多疑问,其实我在第一次接触这个概念时跟很多小伙伴一样一脸懵. 接下来我将以我自己的理解来讲述什么是管道模型. 什么是管道模型 首先有没有小伙 ...

  7. MySQL如何使用coalesce函数

    coalesce(a,b,c); 参数说明:如果a==null,则选择b:如果b==null,则选择c:如果a!=null,则选择a:如果a b c 都为null ,则返回为null(没意义)

  8. 如何利用火焰图定位 Java 的 CPU 性能问题

     常见 CPU 性能问题 你所负责的服务(下称:服务)是否遇到过以下现象: 休息的时候,手机突然收到大量告警短信,提示服务的 99.9 line 从 20ms 飙升至 10s: 正在敲代码实现业务功能 ...

  9. LuoguP1785 漂亮的绝杀 题解

    Content 因太占排版,请自己去题面查看. Solution 声明:以下和题面相同的变量的意义均和题面相同. 这个题目 \(\texttt{if}\) 操作很多,其他的就是纯模拟. 首先,我们先判 ...

  10. 权限设计的idea

    1.角色增加两个字段,一级部门(如钻井事业部),党组织角色(或者团委在线角色)当然或者是其他的团委在线角色 2.增加一张表,标示在线模块(如党组织在线,团委在线,工会在线,纪检在线), 3.菜单(栏目 ...