![](https://img-blog.csdnimg.cn/da7e24f9f64b4eca9ab8406ee72a183a.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础知识
文章平均质量分 67
初级开发入门
Java程序员廖志伟
我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主等头衔。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、容器编排Kubernetes等。
展开
-
JavaSE:第四章:面向对象上
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。面向对象上:包含面向对象与面向过程,类和对象,属性,方法,封装和隐藏,构造器(构造方法),this的使用,值传递,package、import的使用。...原创 2018-10-05 19:00:51 · 1036 阅读 · 0 评论 -
JavaSE:第八章:java常用类
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。java常用类:包含包装类,字符串相关的类,JDK 8之前时间日期API, Math类,BigInteger 类与BigDecimal类,StringBuffer,String,StringBuffer,StringBuilder区别。...原创 2018-10-07 10:46:36 · 882 阅读 · 0 评论 -
JavaSE:第九章:异常处理
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。异常处理:包含异常概述与异常体系结构,常见异常,try-catch-finally,throws,手动抛出异常:throw,用户自定义异常类。...原创 2018-10-07 11:25:13 · 912 阅读 · 0 评论 -
JavaSE:第五章:数组
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。数组:包含一维数组,二维数组,Arrays的常用算法,Arrays工具类的使用,可变形参,常见异常,理解main方法的语法。...原创 2018-10-06 17:10:41 · 873 阅读 · 0 评论 -
JavaSE:第三章:程序流程控制
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。流程控制:包含顺序结构,分支结构,循环结构,break,continue,return,部分代码了解...原创 2018-10-04 16:33:33 · 1066 阅读 · 0 评论 -
JavaSE:第十三章:一分钟了解反射
首先分享一篇关于反射的博文,因为我发现这篇博文写的很详细,地址是:https://blog.csdn.net/sinat_38259539/article/details/71799078然后开始我的表演:首先学习反射之前,我要提出疑问:反射是个什么东西?它是用来做什么的?平时的应用场景有哪些?为啥要用它?它有什么优缺点?它的工作原理是什么?我怎么使用它?这么多的问题,这是在挑衅啊,既然如此,那么我想起来宫本的那句:想挑战的,一个一个来先解决第一个问题:此为何物百度看了看原创 2020-05-16 18:16:02 · 2377 阅读 · 20 评论 -
JavaSE:第七章:高级类特性
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。高级类特性:包含抽象类,接 口,内部类, 枚 举,注 解,工厂方法的设计模式。...原创 2018-10-07 09:19:06 · 897 阅读 · 0 评论 -
JavaSE:第十三章:java反射机制
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。java反射机制:包含 Java反射机制概述,理解Class类并获取Class类的实例,类的加载与ClassLoader的理解,通过反射创建运行时类的对象,通过反射获取运行时类的完整结构,通过反射调用运行时类的指定属性、指定方法等,反射的应用:动态代理。...原创 2018-10-15 18:38:31 · 824 阅读 · 0 评论 -
JavaSE:第六章:面向对象下
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。面向对象下:包含继承性,方法的重写(override),四种访问权限修饰符,关键字super,子类对象实例化过程, 多态性, Object类的使用, static和final关键字的使用,初始化块。...原创 2018-10-06 18:36:32 · 880 阅读 · 0 评论 -
JavaSE:第十四章:多线程
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。多线程:包含程序、进程、线程的概念,,Java中多线程的创建和使用,实现 Runnable 接口与继承 Thread 类,Thread类的主要方法,线程的调度与设置优先级,线程的生命周期,线程的同步,线程的通信。作者:java_wxid...原创 2018-10-17 16:08:48 · 960 阅读 · 0 评论 -
JavaSE:第十章:java集合
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。java集合包含:Java集合框架,Collection接口API,Iterator迭代器接口, List接口,Set接口, Map接口,Collections工具类,Collection接口API,Iterator迭代器接口。...原创 2018-10-11 11:59:10 · 900 阅读 · 0 评论 -
JavaSE:第一章:java语言概述
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。原创 2018-10-04 13:13:31 · 1962 阅读 · 6 评论 -
JavaSE:第二章:变量与运算符
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。变量与运算符:包含关键字,保留字,标识符,变量,运算符原创 2018-10-04 15:19:06 · 1409 阅读 · 0 评论 -
JavaSE:第十一章:泛型
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。泛型:包含为什么要有泛型?使用泛型,泛型的几个重要应用,在集合中使用泛型,自定义泛型类,自定义泛型接口,自定义泛型方法,泛型在继承上的体现,通配符的使用。作者:java_wxid...原创 2018-10-11 14:41:15 · 794 阅读 · 0 评论 -
JavaSE:第十七章:编程测试题
**练习:求1+2!+3!+...+20!的和** long sum = 0; for (int i = 1; i <= 20; i++) { long temp= 1; for (int j = 1; j <= i; j++) { temp *= j; } sum += temp...原创 2019-01-10 12:01:57 · 942 阅读 · 0 评论 -
JavaSE:第十二章:IO流
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。IO流:包含 java.io.File类的使用, IO原理及流的分类,节点流(或文件流):FileInputStream / FileOutputStream / FileReader / FileWriter, 缓冲流:BufferedInputStream / BufferedOutputStream ,Buffered...原创 2018-10-11 16:15:13 · 953 阅读 · 0 评论 -
JavaSE:第十六章:java8新特性
作者:java_wxid##java8内容1.Lambda表达式 ★2.函数式接口 ★3.方法引用 ★4.构造器引用|数组引用 ★5.StreamAPI ★6.接口中可以定义默认方法和静态方法 ★7.Optional类的引入:为了减少空指针异常【了解】8.新日期API【了解】9.重复注解【了解】10.Nashone引擎的使用:在jvm上运行js【后面课程】##Jav...原创 2018-10-19 08:28:47 · 1173 阅读 · 0 评论 -
JavaSE:第十五章:网络编程
史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。网络编程:包含网络编程概述,通讯要素,IP和端口号,网络通信协议,InetAddress类,TCP网络通信,UDP网络通信,URL编程。作者:java_wxid...原创 2018-10-17 17:41:03 · 973 阅读 · 0 评论 -
【HashMap底层运行原理】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录HashMap底层原理本文的大概内容:HashMap底层原理向HashMap中存放一个元素(k1,v1),先根据k1做hash算法,然后将hash值映射到内存地址,直接获取key所对应的数据。如果这个位置没有.原创 2021-11-28 22:33:08 · 318 阅读 · 12 评论 -
【HashMap我可以讲半小时】
工作中用到最多的是hashmap,它支持key-value这种键值对存储。当往hashmap中添加一个键值对时,会将key-value的对应关系封装成一个Entry,就是键值对对象,它会拿着key做hash算法,把hash的值映射到内存地址,找到内存地址所在的位置,会查看这个位置有没有其他元素。如果没有其他元素,会把这个键值对直接放到一个node类型的数组中,这个数组就是hashmap底层基础的数据存储结构;如果有其他元素,会继续拿着这个key调用equals方法,和这个位置已存在的元素key进行对比,对比原创 2022-02-18 18:14:31 · 2429 阅读 · 18 评论 -
【HashMap底层数据结构】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录HashMap底层数据结构本文的大概内容:HashMap底层数据结构HashMap中数据存储的结构是数组+链表/红黑树数组作为基础的数据存储结构。链表是为了解决hash碰撞问题,可参考【HashMap底层.原创 2021-11-28 22:34:28 · 374 阅读 · 12 评论 -
【HashMap优化使用】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录HashMap优化使用本文的大概内容:HashMap优化使用不能用==判断或者可能有哈希冲突时,尽量减少长度,一旦冲突也会少用点时间。如果hashCode 不冲突,那查找效率很高,但是如果hashCode一旦冲.原创 2021-11-28 23:23:53 · 499 阅读 · 15 评论 -
【HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用】
文章主要详解HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用原创 2022-01-11 09:59:42 · 855 阅读 · 9 评论 -
【各个Java集合对比】
对比各个Java集合的底层原理,特性以及数据结构原创 2022-01-11 10:26:35 · 354 阅读 · 10 评论 -
【HashMap扩容机制】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录HashMap扩容机制本文的大概内容:HashMap扩容机制将(k1,v1)直接放入Node类型的数组中,这个数组初始化容量是16,默认的加载因子是0.75。HashMap有两个参数影响其性能:初始容量和加载.原创 2021-11-28 22:35:35 · 8030 阅读 · 18 评论 -
【Java集合】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录java集合本文的大概内容:java集合Java集合框架的根接口有Collection和Map。Collection根接口包含List和Set二个子接口。List接口:它的特点是:元素有序、且可重复,主要.原创 2021-11-29 11:00:51 · 930 阅读 · 14 评论 -
【HashMap并发修改异常】
我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。博主:java_wxid社区:幕后大佬文章目录HashMap并发修改异常使用HashTable使用工具类使用写时复制(CopyOnWrite)使用ConcurrentHashMap本文的大概内容:HashMap并发修改异常HashMap实际使用过程中会出.原创 2021-11-28 22:42:58 · 2309 阅读 · 12 评论 -
【垃圾回收算法】
然后,在压缩阶段,所有标记的对象将被移动到from区域的一端,这可以使内存空间变得连续。最后,将所有标记的对象移回到from区域中,清除to区域中的所有未被标记的对象。当一个垃圾桶不再引用该垃圾桶时,该垃圾桶的计数器就会减1。由于每个垃圾桶都是独立的,没有考虑到垃圾桶之间的引用关系,可能会出现一些无法回收的垃圾。它的核心思想是,在内存中标记所有仍然在使用的对象和数据结构,并清除那些没有被标记的对象。每个垃圾桶就像是内存中的一个对象,每个垃圾清理员就像是垃圾回收器,定期巡逻依次清理每个垃圾桶内的垃圾。原创 2023-06-13 07:30:00 · 414 阅读 · 0 评论 -
【虚拟机字节码执行引擎】
虚拟机通过将Java代码编译成字节码,再由字节码执行引擎将字节码一条一条地解释执行,最终实现了在不同机器上运行Java程序的统一性。通过这个小故事,我们可以了解到,虚拟机字节码执行引擎是Java虚拟机的重要组成部分,它负责将编译后的Java代码转化为可执行的机器码,从而保证了Java程序的跨平台性和可移植性。在实际的Java虚拟机中,字节码执行引擎会执行更多的优化和额外的安全检查,以保证Java程序的正确性和性能。小明的朋友告诉他,这是因为不同的机器有着不同的硬件和操作系统,导致程序的运行结果会有所不同。原创 2023-06-16 08:45:00 · 110 阅读 · 0 评论 -
类加载机制
类加载器负责将魔法书内的魔法知识加载到内存中,以便后续的魔法转化操作。由于长时间的工作,类加载器的能量逐渐耗尽,导致魔法书无法继续产生魔法能量。森林里住着一群神奇的生物,它们的生活依靠一种叫做“魔法”的能量。魔法森林里有各种各样的魔法植物,比如能够为人们带来好运的“幸运草”,还有能够治愈疾病的“治愈之花”。这个故事用一个简单的类加载机制的比喻,向大家展示了类加载器在虚拟机(如Java虚拟机)中的重要作用。随着魔能石的注入,类加载器恢复了活力,魔法书再次开始为魔法森林里的生物们提供所需的魔法物品。原创 2023-06-08 21:42:25 · 46 阅读 · 0 评论 -
【记忆集与卡表】
存活的对象将会被移动到Survivor空间中,当Survivor空间也满了之后,会触发一次复制算法的Minor GC,将存活的对象移动到另一个Survivor空间中。但是,如果对象的引用没有被及时释放,这块内存就不会被回收,就像集装箱里有一些没用的物品,挤占了其他物品的空间,导致程序崩溃。当某个区域中的对象被修改时,卡表会将对应的内存区域标记为脏(Dirty),在进行老年代回收时,只需要扫描被标记为脏的内存区域即可,这样可以避免对整个老年代进行扫描,提升了垃圾回收的效率。原创 2023-06-17 07:30:00 · 329 阅读 · 0 评论 -
【安全点】
在OopMap的协助下,HotSpot可以快速准确地完成GC Roots枚举,但一个很现实的问题随之而来:可能导致引用关 系变化,或者说导致OopMap内容变化的指令非常多,如果为每一条指令都生成对应的OopMap,那将会需要大量的 额外存储空间,这样垃圾收集伴随而来的空间成本就会变得无法忍受的高昂。 实际上HotSpot也的确没有为每条指令都生成OopMap,只是在“特定的位置”记录了这些信息,这些位置被称为安全 点(Safepoint)。有了安全点的设定,也就决定了用户程序执行时并非在代码指令流的任意.原创 2022-05-30 09:00:00 · 465 阅读 · 7 评论 -
【Java中锁的分类】
读写锁(Read-Write Lock):也称为共享-独占锁(Shared-Exclusive Lock),允许多个线程同时读取共享资源,但只允许一个线程写入共享资源,其他线程必须等待写入线程释放锁才能访问。自旋锁(Spin Lock):当线程在尝试获取锁时,如果发现锁已经被其他线程占用,就不会等待,而是一直尝试获取锁,直到获取到锁才会退出。互斥锁(Mutex Lock):也称为独占锁(Exclusive Lock),只允许一个线程访问共享资源,其他线程必须等待当前线程释放锁才能访问。原创 2023-07-16 21:06:13 · 261 阅读 · 0 评论 -
【Unsafe】
虽然 Unsafe 可以在特定场景下提高 Java 应用的性能,但是由于其不安全性,使用 Unsafe 的风险也非常高。因此,建议开发人员在使用 Unsafe 的时候保持谨慎,并且最好能够掌握一定的底层编程技巧,以确保操作的正确性和安全性。原创 2023-08-09 07:44:24 · 104 阅读 · 0 评论 -
【HashMap】
HashMap底层实现原理、数据结构、初始容量大小为何是2的幂次方,加载因子为何是0.75,解决并发修改异常的几个办法,解决hash冲突的几个办法,jdk1.7和1.8版本hashmap的优缺点,使用Hashmap的优化。.........原创 2022-05-21 16:48:17 · 1038 阅读 · 9 评论 -
【线程的生命周期】
可以看到,线程会依次进入新建状态、就绪状态、运行状态、定时等待状态和终止状态。在示例程序中,我们使用 join() 方法等待线程执行完毕后再打印线程状态,这样可以确保我们看到的状态是最终状态。就绪状态(Runnable):当线程的 start() 方法被调用时,线程进入就绪状态。当操作系统将输入处理线程从就绪队列中调度出来,并分配了CPU时间,线程就可以进入运行状态。在运行状态中,线程会执行它的任务,例如处理用户输入。在小明的例子中,当输入处理线程完成了处理用户输入的任务,它就会进入终止状态。原创 2023-06-16 19:45:00 · 318 阅读 · 0 评论 -
【JVM线上调优】
经过排查,小明发现是JVM的内存使用过高,导致频繁触发垃圾回收,从而影响系统的性能。总的来说,通过对JVM内存使用情况、堆大小、GC策略、线程使用情况和运行时信息进行监控,可以在实际应用程序运行中进行针对性的优化,从而提高Java应用程序的性能和稳定性。最后,小明还对JVM进行了一些高级调优,如使用JVM调优工具进行监控、分析程序的内存使用情况,并进行了一些细节的调整,如调整JVM的GC触发时间等。通过监控内存使用情况,可以了解应用程序的内存状况,并且调整JVM的参数,使之更好地适应应用程序的需求。原创 2023-06-16 12:15:00 · 408 阅读 · 0 评论 -
【Java中四种引用类型】
弱引用(Weak Reference):是一种比软引用更弱的引用类型,它的生命周期只能存活到下一次垃圾收集之前,即只要被垃圾收集器扫描到,就会被回收。Java中的四种引用类型分别是强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。强引用(Strong Reference):是使用最普遍的引用类型,它直接指向对象,并且只要存在强引用,垃圾收集器就不会回收该对象。原创 2023-07-17 07:00:00 · 1073 阅读 · 0 评论 -
【线程池添加工作线程的流程】
在创建时,需要传入一个 Runnable 对象,这个对象就是工作线程需要执行的任务,可以是一个 Runnable 接口的匿名内部类或者 Lambda 表达式。总之,线程池添加工作线程的流程包括:容器和变量的初始化、两个判断、工作线程的创建和添加、状态的设置和任务的启动、线程数的更新以及操作结果的返回。如果线程池已经关闭,那么不再添加新的线程,并直接返回。添加新的工作线程后,需要更新线程池中的线程数。将新添加的工作线程的状态设置为“运行中”,可以使用 Thread 类中的 setState() 方法。原创 2023-07-20 09:30:00 · 314 阅读 · 0 评论 -
【ThreadLocal】
当线程访问 ThreadLocalMap 中的一个 ThreadLocal 对象时,实际上是通过该线程自己的 ThreadLocalMap 对象来查找的,因此不同线程访问 ThreadLocalMap 中同一 ThreadLocal 对象时,取到的值是不同的。每个线程可以通过 ThreadLocal 存储自己的信息,这些信息只在当前线程内部可见,并且在线程池中不同的线程也拥有自己独立的表格(ThreadLocal),互不干扰。这段代码创建了一个ThreadLocal对象,使用了一个静态变量来持有它。原创 2023-06-14 19:45:00 · 597 阅读 · 0 评论