学习目标:

  • 深入理解Java核心技术(基础篇)

学习内容:

1.面向对象的五大基本原则

(1)单一职责原则:一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。
(2)开放封闭原则:对象或实体应该对扩展开放,对修改封闭。
(3)里氏替换原则:在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类)
(4)接口隔离原则:不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法。
(5)依赖反转原则:实体必须依靠抽象而不是具体实现。它表示高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象。

2.多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
3. 继承与实现

(1)继承的根本原因是因为要复用,而实现的根本原因是定义一个标准。
(2)多继承会出现菱形继承问题,C++引入虚继承解决。
(3)组合与继承:继承是is-a的关系,组合是has-a的关系。同样可行的情况下建议用组合。

4.在定义一个Boolean类型的JavaBean时,应该使用success而不是isSuccess。
5. equals和hashCode的关系,equals和==的关系。

在没有重写equals方法的情况下,使用equals做比较,判断的是两个对象的引用是否相等。如果想判断两个对象的内容是否相等,则需要重写equals和hashCode方法。
在java中,==比较的是对象的引用,而equals比较的是

6.clone方法

clone方法在不重写的情况下是浅拷贝,想要实现深拷贝需要重写clone方法,还有一种实现深拷贝的方式是序列化技术

7.java是值传递,只不过把对象的引用当作值传递给方法(共享对象传递)
8.基本数据类型直接在栈内存中存储
9.用BigDecimal或者Long来表示金额
10.字符串的不可变性:主要从缓存、安全性、线程安全和性能等方面进行考虑的。
11.String对’+'的重载

拼接过程中是将String转换成StringBuilder后,使用其append方法进行处理的。

12.常用的字符串拼接

有五种,分别是’+'、concat、StringBuilder、StringBuffer和StringUtils.join
如果不是在循环体中进行字符串的拼接用’+'。
如果在并发中使用字符串拼接则要使用StringBuffer代替StringBuilder。
如果是通过一个List进行字符串拼接,则使用StringJoiner(java8中提供的StringJoiner,与Stream流有关)。

13.从字符串中删除空格

java11中的strip()方法要比trim()方法更强大,它可以删除很多不在ASCLL中的空白字符,但是删除的是字符串前导和末尾的空格。
**replaceAll()**与适当的正则表达式一起使用可以删除字符串中的空格。

14.switch的使用

switch只能使用整型,比如byte、short、char和int,其它数据类型都是转成整型之后再使用switch的。

15.类加载

类加载的过程要经历加载、链接、初始化等几个步骤,在链接的步骤中又分为验证、准备和解析。

16.异常处理

自己明确知道如何处理的,就要处理,不知道如何处理的,就要向上抛出,交给调用者处理。
try是必须的,catch和finally至少有一个。
finally是在什么时候执行的
如果try中有return,先执行finally再执行try中的return,如果try和finally中都有return,则finally中的return最后执行。

17.集合

(1)集合的遍历:for、foreach、迭代器Iterator、迭代器Enumeration、Stream流
(2)ArrayList 的扩容是之前的1.5倍,Vector扩容是之前的2倍,vector是线程安全的。
(3)Collections的synchronizedList方法可以把任意一个List转换成一个线程安全的List。
(4)synchronizedList和Vector建议使用synchronizedList。因为可以定义一个线程安全的LinkList。
(5)HashMap最多允许存储一个null键和多个null值,然而TreeMap不允许空键,但可能有多个空值。
(6)HashTable是线程安全的,但是在普通和get方法上都增加了synchronized,因此有了concurrentHashMap,在1.7之前使用分段(segment)锁,1.8之后改为node结点锁,锁粒度更小。
(7)同步容器(Vector和HashTable)中复合方法也不是线程安全的。
(8)HashMap扩容是之前的2倍,扩容时还要进行rehash,初始化容量要设成expectedSize/0.75+1,而且将hash()方法生成的整型值转换成数组下标时使用位运算代替取模增加效率(还能解决负数的问题),HashMap运用扰动降低Hash冲突,,
(9)HashTable 默认的初始大小是11,每次扩充2n+1,

18.在foreach循环中对某些集合中的元素进行remove/add操作,会导致ConcurrentModificationException。
19.Stream流

Stream的创建:(1)通过已有的集合创建流:集合.stream()(2)通过Stream.of()创建流
Stream的中间操作:filter、map、limit、sorted、distinct。
Stream的最终操作:forEach、count、collect。

20.反射

通过以下三种方式可以获取一个class对象
(1)调用对象的getClass()方法获取Class对象
(2)根据类名.class获取Class对象
(3)根据Class中的静态方法Class.forName()获取Class对象
反射破坏了单例模式,序列化也可以破坏单例模式

21.序列化

我们创建的java对象都是存在于JVM的堆内存中(不考虑JIT优化)的。
序列化是将对象装换为可存储或传输的形式的过程,一般是以字节码或XML格式传输对象的。而将字节码或XML编码格式的对象还原为对象的过程称为反序列化。
序列化会通过反射调用无参的构造方法创建一个新的对象进而破坏单例模式。

22.枚举

使用枚举可以实现单例模式,且是线程安全的。

23.I/O

输入流:inputStream(字节流)和Reader(字符流)
输出流:OutputStream(字节流)和Write(字符流)
OutputStreamWrite是Write的子类,是字符流通向字节流的桥梁
InputStreamReader是Reader的子类,是字节流通向字符流的桥梁
阻塞和非阻塞描述的是调用方,同步和异步描述的是被调用方。
Linux的五种I/O模型:阻塞I/O、非阻塞I/O、I/O复用模型、信号驱动式I/O和异步I/O模型。
BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)

24.动态代理

动态代理的几种实现方式:JDK动态代理、CGLib动态代理。
实现动态代理主要涉及哪几个类:Proxy(生成代理的主类)和InvocationHandler(调用处理器)

25.注解

注解分为元注解和自定义注解
日常开发中常用注解:
(1)使用自自定义注解做日志记录
(2)使用自定义注解做前置检查
编程式事物和声明式事物

26.泛型

泛型不支持基本数据类型
如何使用 <? extends T>和<? super T>

27.时间处理

SimpleDateFormat是线程不安全的类,一般不要定义为static变量,也不要当成共享变量使用。
SimpleDateFormat中format将一个Date类型转换为String,parse方法将一个String转换为Date类型。
Java8中的时间处理:LocalTime和LocalDate
日期格式要用y表示年,而不能用Y(涉及跨年时间段的问题)。

28.语法糖

语法糖让程序更加简单,有更高的可读性。

29.BigDecimal

使用BigDecimal(double)创建一个BigDecimal是损失了精度的,要使用BigDecimal(String)创建BigDecimal。
BigDecimal的等值比较使用compareTo()方法,而不是equals()方法。

30.Java工具库

Apache Commons
常用的有BeanUtils、Collections、IO、Long、Logging和OGNL
Commons Long中提供很多好用的工具类:StringUtils、ArrayUtils、DateUtils。
Commons IO中常用的有:IOUtils、FileUtils、FilenameUtils。
Commons BeanUtils中有:BeanUtils和propertyUtils,BeanUtils在进行属性拷贝时本质上是浅拷贝
MapStruct字段映射工具
Guava
常用的有:Optional、Guava Cache
Lombok

31.Java新版本特性

java8:函数式编程,有且只有一个抽象方法的接口被称为函数式接口,函数式接口适用于函数式编程的场景。
java9:模块化技术
java10:本地变量类型推断
java11:增强var
java12:Switch表达式
java13:text block
java14:更有价值的NullPointException、record类型
java15:封闭类
java16:instanceof模式匹配
java17:Switch模式匹配

《Java工程师成神之路》深入理解Java核心技术(基础篇)相关推荐

  1. 《Java工程师成神之路》终于免费开放下载了!

    很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么. 好在,很 ...

  2. GitHub上12k Star的《Java工程师成神之路》中终于开放阅读了!

    很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一分完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么. 好在,很 ...

  3. Java 工程师成神之路 | 2019正式版 1

    Java 工程师成神之路 | 2019正式版 基础篇 01 面向对象→ 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM ...

  4. Java工程师成神之路思维导图

    前面看Hollis的微信公众号更新了Java工程师成神之路的文档,感觉里面的内容清晰.齐全,可以用来审视自己,也能够知道自己在那些方面可以继续前行,想着有时间把它画下来,画下来之后分享出来. 主要内容 ...

  5. java工程师知识架构图图_阿里技术专家教你画架构图、Java 工程师成神之路 | 2019 年 2 月收藏排行...

    五一假期,头条君会推送 2019 年 1-4 月 开发者头条 上收藏最多的文章 点击链接或图片 即可阅读 喜欢请 分享到朋友圈 哦 Java 工程师成神之路(2019 正式版) 结构调整,更适合从入门 ...

  6. Java工程师成神之路 | 2022正式版

    基础篇 面向对象 什么是面向对象 面向对象与面向过程 面向对象的三大基本特征 面向对象的五大基本原则 封装.继承.多态 什么是多态 方法重写与重载 Java的继承与实现 Java的继承与组合 构造函数 ...

  7. Java小白怎么学?2021年最强版Java工程师成神之路

    以下文章来源于爱笑的架构师 最近很多读者在问:Java 怎么学习啊 ?有没有什么学习路线 ?Java " 成神 " 之路怎么走? 当然「成神」是有些夸张了,我相信问这句话的读者或多 ...

  8. 阿里P8资深架构师耗时一年整理Java工程师成神之路

    1.基础篇 01:面向对象 → 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin.Groov ...

  9. Java 工程师成神之路!

    作者 | Hollis 本文经授权转载自公众号Hollis(ID:hollischuang) 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 v1.1 2018-03-12 增加新 ...

最新文章

  1. python求圆柱表面积_python基础知识-字典
  2. python 条件选择语句_Python趣味入门4:选择往往是最重要的-条件语句
  3. 一次win10体验旅程
  4. python处理excel表格实例-python读写Excel表格的实例代码
  5. python文档的数据读取,把读取数据写入到新的表里
  6. 由su和su -的区别谈学习linux运维方法
  7. SAP UI5 sap.m.ListMode - ModesingleSelectMaster
  8. java各种的不好_译文《最常见的10种Java异常问题》
  9. jBPM4工作流开发实战 之 第五部分 其他知识
  10. c6011取消对null指针的引用_C/C++学习笔记——C提高:指针强化
  11. 神奇的国度(HYSBZ-1006)
  12. c语言中的errno
  13. C盘没W ndows64,win10如何深度清理c盘
  14. flutter web实现微信网页授权登录
  15. 不能撑开盒子css,CSS padding在什么情况下不撑开盒子
  16. ZFS case : top CPU 100%sy, when no free memory trigger it.
  17. Java 环境JDK下载、安装以及环境变量配置详细图解
  18. 钢铁是怎样炼成的 第三章
  19. 批量修改图片尺寸的方法
  20. 高效能沟《关键对话》读书笔记PPT模板-优页文档

热门文章

  1. Char.IsDigit()或Char.IsNumber判断字符是否为数字,你真的对吗?
  2. select中的两个属性——selectedIndex、selectedOptions
  3. C++之CreateProcess
  4. 全国各省电信及网通DNS列表
  5. 安装Corona闪退,没有界面,没有进程,重启电脑还是什么也出不来
  6. Windows8和Windows10系统改装Win7系统的问题和解决办法
  7. 用JS解析LRC格式的歌词,实现歌词同步滚动效果
  8. 使用js解析歌词文件(lrc格式歌词)
  9. MT6177 RF_datasheet资料介绍
  10. 用python祝福父亲节_经典走心的父亲节祝福语大全(24句)