Java学习的过程

  • 时间:
  • 浏览:
  • 来源:互联网

作者:沉默王二
链接:https://www.zhihu.com/question/267403723/answer/1520053322
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

01、第一个阶段,环境和工具准备准备一台电脑,要能联网下载、安装 JDK,配置 Java 开发环境下载、配置 Maven下载、安装 IntelliJ IDEA准备一个 GitHub 仓库(或者码云),管理 Java 源代码Java 是一门计算机编程语言,学它的话,连台电脑都没有,学个屁。我有个亲戚家的孩子想学编程,就只看书,家里连台电脑都不配,说什么“先打好理论基础,再实操”,我真的是有点醉。有了电脑,还得联网,自学的过程中肯定会遇到很多问题,遇到问题的时候先问搜索引擎,推荐谷歌和必应;实在没有答案的话,也可以来找我,申请加入技术交流群,问问群里面的大佬们。既然要学 Java,JDK 是必须要先安装的,否则 Java 程序就没法编译和执行。Maven 也是需要提前安装和配置的,因为后面进阶的话,需要一些练手项目,它们通常都需要 Maven 来加载第三方类库。使用集成开发环境 IntelliJ IDEA 来敲 Java 代码吧,比 Eclipse 更流行。千万不要使用记事本编写源代码了,对于小白来说,时间是宝贵的,记事本只适合大牛们用来装逼,不适合小白用来编程(入门),纯浪费时间。有了 IDEA,后面学习源码的话,就会方便很多,包括反编译字节码。如果英语功底不太好的话,建议安装这两款 IDEA 插件:chinese 和 translation。如果注重编码规范的话,建议安装这两款 IDEA 插件:Alibaba 和 SonarLint。为什么还需要 GitHub 仓库或者码云仓库呢?它们可以用来在线云同步源代码,防止版本丢失。学到最后,还可以形成一套自己的工具库,轮子就有了,上班的时候工作效率就会高很多,能直接用的代码再也不用重新写了。02、第二个阶段,Java 基础入门1)基本数据类型8 种基本数据类型(boolean、char、byte、short、int、long、float、double)整形中 byte、short、int、long 的取值范围单精度和双精度为什么不能使用“”比较浮点数基本类型和包装类型的区别自动拆箱与装箱Integer 的缓存机制2)操作符算术运算符逻辑运算符比较运算符3)流程控制语句条件分支(if/else/else if、三元运算符、switch)循环或者遍历(for、while、do-while)break 和 continue4)包创建包导入包包全名5)main 方法详解public 关键字static 关键字void 关键字main 方法字符串数组参数(String[] args)6)数组什么是数组?访问数组遍历数组打印数组可变参数数组排序数组转成 Stream数组转成 List数组搜索 java.util.Arrays数组越界7)注释单行注释多行注释文档注释注释真的不会被执行吗?优秀的程序员真的不写注释吗8)字符串双引号字符串和 new 字符串对象字符串为什么是不可变的?String、StringBuilder 和 StringBuffer 之间的区别字符串拼接的几种方式字符串常量池关于 intern字符串比较( 和 equals)字符串拆分字符串操作小技巧字符串转整形生成 UUID(多谢知友的提醒,链接已更新)字符串可以引用传递吗?字符串长度关于 substring03、第三个阶段,Java 核心技术1)面向对象面向对象和面向过程封装继承多态接口抽象类重写和重载构造方法局部变量、成员变量、静态变量、常量值传递还是引用传递final 关键字this 关键字super 关键字不可变对象equals() 和 hashCode()打印 Java 对象NullPointerException2)常用工具类字符串相关的工具类日期时间相关的工具类枚举随机数正则表达式Apache-commons 工具库Guava 工具库3)集合框架ArrayListLinkedListArrayList 和 LinkedList 之间的区别不可变 ListCopyOnWriteArrayListHashMapLinkedHashMapTreeMapConcurrentHashMapfail-fast4)反射机制什么是反射?反射有什么用?Class 类5)异常处理为什么需要异常处理机制?Error 和 Exceptiontry-catch-finallytry-with-resource自定义异常尽量捕获原始异常不要打印堆栈后再抛出异常不要用异常处理机制代替判断不要过早捕获异常6)注解注解是什么?注解的生命周期注解装饰的目标自定义注解使用注解7)IO 流字符流、字节流输入流、输出流同步、异步阻塞、非阻塞BIO、NIO 和 AIONIO 2.08)序列化什么是序列化和反序列化Java 如何实现序列化和反序列化Serializbale 和 ExternalizableserialVersionUID9)泛型什么是泛型?类型擦除泛型带来的问题泛型中 K T V E 这些特殊字幕的含义通配符上下界限定符 extends 和 super不要在集合中使用 Java 原始类型10)单元测试JunitTestNG11)编码方式ASCIIUnicodeUTF-8GBK、GB2312如何解决乱码问题12)并发编程什么是并发什么是并行什么是线程什么是进程线程的状态线程的优先级创建线程创建线程池什么是线程安全多级缓存和一致性问题CPU 时间片和原子性问题指令重排和有序性问题线程安全和内存模型happens-before可重入锁阻塞锁乐观锁悲观锁分布式锁CASABA偏向锁轻量级锁重量级锁自旋锁什么是死锁如果避免死锁synchronizedvolatileThreadLocalExecutorsCountDownLatchThreadRunnableCallableReentrantLockReentrantReadWriteLockAtomic 相关类13)Java 8 新特性Lambda 表达式Stream流Optional14)源码阅读StringIntegerArrayListLinkedListCopyOnWriteArrayListHashMapTreeMapLinkedHashMapConcurrentHashMapCopyOnWriteArrayList04、第四个阶段,Java 进阶升级1)JVMJava 内存结构堆栈垃圾回收JVM 参数调优Java 对象模型HotSpot类加载机制编译和反编译反编译工具JIT虚拟机性能监控和故障处理工具(jps、jstack、jmap、jstat、jconsole、javap)2)性能优化使用单例使用线程池减少上下文切换减小锁粒度数据压缩Stream 并行流GC 调优JVM 内存分配调优btrace3)设计模式设计模式,牛逼!​mp.weixin.qq.com设计模式的六大原则创建型设计模式(单例、抽象工厂、建造者、工厂、原型)结构型设计模式(适配器、桥接、装饰、组合、外观、享元、代理)行为型设计模式(模板方法、命令、迭代器、观察者、中介者、备忘录、解释器、状态、策略、责任链、访问者)单例的七种写法4)数据结构和算法简单的数据结构(栈、队列、链表、数组、哈希表)树(二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、红黑树、多路树)堆图(拓扑、有向图、无向图)稳定的排序算法(冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序)不稳定的排序算法(选择排序、希尔排序、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序、Clover 排序)时间复杂度空间复杂度贪心算法KMP 算法5)操作系统Linux 常用命令(find、top、tar、move、grep、tail、netstat、curl、wget、ping、ssh)服务器性能指标(qps、CPU 利用率)进程同步分段和分页虚拟内存和主存6)网络安全CSRFXSSSQL 注入加密和解密(对称加密、非对称加密)MD5、SHA1、DES、RSADDOS 攻击HTTP 和 HTTPSSSLTLSTCP 和 UDPCookie、SessionCDNDNS7)数据库MySql索引存储过程分库分表binlog读写分离数据库缓存(Redis、MongoDB)数据库中间件(MyCat)数据库连接池(Durid)8)大数据搜索(Elasticsearch 、Solr)流式计算(Storm、Spark、Flink)Hadoop9)服务器TomcatjettyNginx10)框架SpringMyBatisSpring MVCSpring BootSpring SecuritySpring CloudNettyDubbo11)消息队列RabbitMQKafka12)容器DockerK8s 需要 Java 书单的话,我在 GitHub 上发现了一个宝藏项目,光看了一下目录,就有点吸引我。 你需要的话可以按需自取,地址如下所示:itwanger/JavaBooks​github.com如果你访问 GitHub 比较慢的话,我把它同步到了码云:沉默王二/JavaBooks​gitee.com05、第五个阶段,活着最重要技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。开源的项目我推荐 GitHub 上的 mall 和 vhr,前者是电商系统,后者是微人事,都用的最前言的技术,并且文档很全面,不怕晕头转向。去哪里找JAVA项目练手?​www.zhihu.com自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足,不容易犯困。技术学到手后,找工作的时候一定要好好准备一份简历,不要无头苍蝇一样去海投简历,容易“竹篮打水一场空”。可以参考下面的链接,好好的准备一下简历,毕竟是找工作的敲门砖。入职阿里后,才知道原来简历这么写​mp.weixin.qq.com拿到面试邀请后,在面试的过程中一定要大大方方,尽力把自己学到的知识舒适地表达出来,不要因为是自学就不够自信,给面试官一个好的印象,面试成功的几率就会大很多,加油吧,骚年!

本文链接http://www.dzjqx.cn/news/show-617451.html