![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 75
CodeDoraemon
这个作者很懒,什么都没留下…
展开
-
JMM (Java 内存模型,不是 JVM 内存结构) 和 volatile
在 CPU 层面,实现了数据的一致性访问,编程语言在这个方面也付出了相关的努力。在 C++ 中可以实现数据在并发情况下的并发访问安全,但是这个程序的跨平台能力很差。举例:对于传统的内存模型,比如 C++ 的内存模型,在 linux 下面可以正常的执行程序,保证变量的线程安全,但是换到 windows 中,需要特别的针对 windows 编写代码,否则因为换了使用平台会导致并发访问出错,也就是变量不是线程安全的。在设计 JMM 的时候,也就是设计 Java 程序中访问变量规则的时候。.........原创 2022-08-28 16:06:42 · 456 阅读 · 0 评论 -
剑指 Offer 04 二维数组中的查找
题目链接。原创 2022-08-24 20:16:14 · 272 阅读 · 0 评论 -
ReentrantLock 类 源代码详细解释
所谓的可重入就是一个线程获取到了锁之后,同一个线程还是想要再次的获取到这个锁,那么这个锁可以再次的被获取到,那么这个锁就是可重入锁。否则这个,锁就是不可重入锁。原创 2022-07-29 17:35:59 · 404 阅读 · 0 评论 -
Java ThreadLocal 深入底层源代码; 讲清楚为什么 ThreadLocalMap 的 Entry 的 key 使用弱引用;
在多线程并发编程中,保证变量的线程安全性是十分重要的,在通常的做法是利用加锁来实现线程安全。这样虽然可以保证线程安全。但是程序运行的效率会显著的下降。为了使得程序运行效率的提升并且兼顾变量被访问的线程安全性,ThreadLocal 应用而生。ThreadLocal 的设计思想下面简单的概述:既然多线程访问同一个变量会造成线程安全的问题,那么创建出来一个变量,需要使用这个变量的线程将该变量拷贝一份,并且拷贝的变量是线程私有的,使得变量隔离起来使用,避免了线程之间的交错使用数据造成的线程安全问题。举个例子,原创 2022-06-06 17:48:52 · 264 阅读 · 0 评论 -
Java 反射 参考较为官方的中英文档
什么是 Java 反射具有分析类的能力的程序叫做反射;Java 中具有分析类的能力的程序存在于 java.lang 以及 java.lang.reflect 包下面,这两个包中提供相关的类以及方法来实现反射。反射主要做的事情就是:在程序动态运行的过程当中,动态的检查以及修改类、接口、方法、字段中的内容。对于反射的英文简单解释:1、The java.lang and java.lang.reflect packages provide classes for java reflection.2、Ja原创 2022-05-15 20:01:37 · 495 阅读 · 0 评论 -
try catch finally? 还是 try with resource?
引言在程序开发过程中,存在着这样的应用场景:需要读取文件,读取结束之后需要关闭资源;比如下面的开发场景:读取了 test.txt 文件,读取结束之后,需要关闭资源,不关闭的话,会造成系统资源的浪费;public static void main(String[] args) { //读取文本文件的内容 Scanner scanner = null; try { scanner = new Scanner(new File("/test.txt"));原创 2022-05-11 17:47:51 · 315 阅读 · 0 评论 -
Java ;类加载全过程(也叫类加载机制); 类的生命周期 ;类加载器(选择类加载器是基于双亲委派模型的);
文章目录对于上面的图解 所有的一切基于上图展开 下面每个部分的截图来自上图Java 代码编写以及编译类加载器介绍类加载过程类的生命周期对于上面的图解 所有的一切基于上图展开 下面每个部分的截图来自上图Java 代码编写以及编译类加载器介绍类加载过程类的生命周期...原创 2022-05-02 20:56:31 · 1002 阅读 · 1 评论 -
MySQL 索引 为什么 InnoDB 使用 B+树
什么是索引对于数据库中数据的查询,有:查找一个范围内的数据,或者查找一个具体的数据;怎么查询呢1、遍历数据库中的数据查询,显然查询速度很慢,用户的体验效果是不好的;2、建立数据库的数据的 “目录” ,按照目录直接锁定数据可能存在的范围,提升了查询的效率,这个 “目录” ,就是索引;索引的定义是什么关于索引的定义的 MySQL 文档,国内的很多翻译翻译过来就变味了:A database index is a data structure that improves the speed of op原创 2022-05-01 13:30:49 · 2731 阅读 · 0 评论 -
Java 字符串常量池 基本数据类型的包装类的常量池
为什么存在常量池所谓的常量池技术,可以理解是一种缓存技术,如果在常量池中存定义好的对象,那么程序就不需要反复的创建出来一个对象了,需要使用的时候,拿来即用,开袋即食。因为反复创建出相同的对象不仅在创建的时间上面的开销比较大,也是对于内存空间的一种浪费,所以想到了使用常量池技术。Java 里面的常量池技术,本文重要讨论的是 String 类型的常量池思想,以及基本类型的包装类的常量池思想。常量池中放置的都是引用类型,也就是各种对象,确切的说是在程序开发过程中,可能会大量重复使用的对象,提前在常量池中创建原创 2022-04-29 11:41:49 · 1563 阅读 · 0 评论 -
Spring IOC AOP 原理简述
什么是 IOC 目的是为了解耦合?所谓的 IOC 就是控制反转,控制反转就是开发者自己不创建对象,创建对象统一交给 Spring 框架进行管理;正常的开发者创建对象的时候,是使用 new 关键词进行创建的,如下面所示:class UserService { public static void main(String[] args) { UserDao userDao = new UserDao(); }}class UserDao { }上面这种开原创 2022-04-27 10:32:14 · 580 阅读 · 0 评论 -
都说 Java 万物皆对象 Java 普通对象在堆中长的是什么样子呢?
文章目录查看下面的图示 是一个完整的对象 针对 32 位的普通对象对象头对象的实例数据部分对齐填充查看下面的图示 是一个完整的对象 针对 32 位的普通对象例如数组这种大对象,在对象的结构中需要存在数组的长度的;在 64 位对象中,对象的布局与上面的有一定的出入,需要注意鉴别;对象头里面有两个数据,一个是 Mark Word 一个是类型指针Mark Word:查看上图中的左上角部分即可;具体的含义如图所示;类型指针:Java 虚拟机通过这个指针知道这个对象是哪儿个类的实例;对象的实例数据原创 2022-04-19 21:20:51 · 633 阅读 · 0 评论 -
Java 垃圾回收器与内存分配策略 JVM
什么是垃圾回收?在 Java 开发的过程中,万物皆为对象,产生的对象存在生命周期,也就是对象存在存活的时间;在程序运行过程中,会产生完成自身使命的对象,这个时候对象就成为了程序当中的垃圾,不回收的话会一直占用内存,否则对于程序的性能,内存是有一定影响的;在 C++ 中,开发人员是自己进行垃圾回收的,但是在 Java 中,JVM 里面存在多种垃圾回收器以及多种垃圾回收算法,底层的垃圾回收一般情况下不需要开发人员关心,但是在某些特定的场景下,需要开发人员掌握 JVM 垃圾回收机制,更好的解决一些程序问题;那原创 2022-04-17 12:55:40 · 989 阅读 · 0 评论 -
力扣 20 有效的括号
文章目录1、题目要求2、思路分析3、执行代码4、问题反思4.1、4.2、4.3、5、小结题目链接https://leetcode-cn.com/problems/valid-parentheses/1、题目要求给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出原创 2022-04-15 14:52:17 · 476 阅读 · 0 评论 -
单链表 双向链表 双向队列 (LinkedList 源代码解读)重点是LinkedList 源代码解读
单向链表与双向链表之间进行比较单链表:在链表中的每个结点中,只是维护一个其后面的结点的地址,可以满足一定的增加结点以及删除结点的作用;双向链表,在每个结点中,维护的是上一个结点的地址以及下一个结点的地址;单链表的局限性:有一个需求:查找当前的结点的上一个结点是什么,此时单链表是非常难以实现的,但是此时使用双向链表是十分容易实现的;双向链表的缺点:由于每个结点都多维护了一个指向上一个结点的指针,所以对于系统资源的消耗耗时存在的;Java Deque 接口 双向队列在常规队列中,元素是从后面添加原创 2022-04-15 19:38:06 · 1541 阅读 · 0 评论 -
线程安全集合类 ConcurrentHashMap
Fail - Fast Fail - Safe 机制Fail - FastFail - SafeConcurrentHashMap 的实现原理原创 2022-04-15 10:22:52 · 496 阅读 · 0 评论 -
DCL( Double Check Lock)的实现以及为什么这样实现
前言使用单例模式时,一般有两种选择,一个是懒汉式,一个是饿汉式。但是这两种都是有各自的缺点,无法满足我们的需求,所以DCL(Double Check Lock双端检锁机制)出现了,一种既支持延迟加载、又支持高并发的单例实现方式什么是线程安全?当多个线程同时访问一段代码的时候,代码的执行结果不会因为线程的访问顺序从而产生不正确的结果,这段代码就是线程安全的;要保证线程安全需要保证原子性、可见性、有序性;双重检锁下面的单例模式 - 为什么使用双重检锁?使用双重锁的目的就是为了创建出来的单例是唯一的(唯原创 2022-04-14 10:17:17 · 872 阅读 · 1 评论 -
JUC AQS ReentrantReadWriteLock 读写锁
ReentrantReadWriteLock 读写锁字面意思上来看,这是一个支持重入的读写锁;在一些业务流程中,读的操作是大于写的操作的,因此设计这种读写锁,可以在一定程度上面提高程序运行的性能;下面提供一个数据容器类,分别使用读锁以及写锁进行数据的操作;读数据使用 read() 方法;写锁保护数据的 write() 方法;所谓的互斥与不互斥的理解:互斥:多个线程之间可以同时访问一个数据不互斥:多个线程之间不可以同时访问一个数据// 读 读之间是不互斥的 两个线程之间可以同时访问;// 读原创 2022-04-12 18:30:56 · 970 阅读 · 0 评论 -
JUC Java并发编程 十分详细 java.util.concurrent
文章目录进程和线程进程线程两者之间的对比线程的上下文切换并行和并发并行 parallel并发 concurrent举例说明并行 并发的测试结果同步 异步创建以及运行线程Thread 与 Runnable 之间的关系FutureTask线程运行原理栈与栈帧图解栈与栈帧栈帧小结线程的上下文切换进程和线程进程线程两者之间的对比线程的上下文切换当系统的内存不够的时候,可以关闭一些线程,将内存由其他的线程进行使用,这个时候需要进行线程的切换,存在进程上下文的概念;并行和并发并行 parallel原创 2022-03-28 16:36:37 · 3112 阅读 · 0 评论 -
Java 八股文 持续修改更新...
什么是面向对象,面向对象和面向过程之间的区别是什么?对比面向过程,是两种不同的处理问题的角度面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么面向过程是将某一个事情分为什么样子的流程进行处理面向对象,完成意见事情,需要将现实世界中的物体抽象成为什么对象,各个对象之间是怎么相互配合完成这件事情的;封装,继承,多态,抽象(四个概念分别解释即可)封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项内部细节对外部调用透明,外部调用无需修改或者关原创 2022-03-22 17:28:58 · 827 阅读 · 0 评论 -
JDBC工具类 以及使用JDBC工具类 一般开发不可能直接使用 JDBC 了解即可
文章目录JDBC工具类1 工具类的代码实现相关变量使用ResourceBundle 进行资源的绑定,主要是绑定到 jdbc.properties 文件,方便将这个配置文件里面的相关配置读取出来(1)(2)加载驱动关闭资源2 工具类代码实现所有代码package com.luobin.utils;3 调用工具类的代码实现创建进行数据库交互的相关变量调用静态方法进行连接的建立(3)建立sql 语句,将建立的sql 语句进行预编译,得到预编译环境(4)执行预编译得到处理结果(5)对处理结果进行处理(6)释放资源4原创 2021-12-13 11:09:20 · 2490 阅读 · 1 评论 -
JavaWEB-Servlet
文章目录需要提前准备了哪些技术,接下来的课才能听懂?Typora软件介绍Servlet关于系统架构B/S结构的系统通信原理(没有涉及到Java小程序)关于WEB服务器软件实现一个最基本的web应用(这个web应用中没有java小程序)对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议开发一个带有Servlet(Java小程序)的webapp(重点)关于JavaEE的版本解决Tomcat服务器在DOS命令窗口中的乱码问题(控制台乱码)向浏览器响应一段HTML代码在S原创 2021-12-04 22:07:56 · 745 阅读 · 0 评论 -
Java 中什么是字节码 ?字节码的好处是什么?
原始的思维导图文件https://github.com/YIMEng-0/JavaPlus/tree/main/javaSE%E5%A4%8D%E4%B9%A0%E5%87%86%E5%A4%87/java%E5%9F%BA%E7%A1%80如有帮助 欢迎 star思维导图Java 中什么是字节码 ?字节码的好处是什么?1 什么是编译器以及解释器(Java 中的编译器以及解释器)1、编译 Compile:把整个程序源代码翻译成另外一种代码,然后等待被执行,发生在运行之前,产物是「另一份原创 2021-12-04 11:36:15 · 1246 阅读 · 0 评论 -
Set 集合 Java
1、为什么使用 Set 集合?这种数据结构里面存储的是不重复的元素;实际开发中的应用场景:一般用于去重;比如统计网站新增加的IP数目,存放在数组中是不合适的,因为同一个IP 访问了多次,本质上面还是一个IP进行的访问,数目是没有发生变化的;-统计自己的词汇量,不能说自己看过的就是新的词汇,因为存在重复的情况;2、Java Set 集合的接口设计主要有下面的方法(不是全的)3、实现Set 集合的几种方式3.1、动态数组3.2、使用链表3.3、使用二叉搜索树实现(AVL 树;红黑树)原创 2021-11-22 17:37:00 · 623 阅读 · 0 评论 -
Effective Java
作者Joshua Bloch翻译杨春花Java之父 James Gosling建议大家还是去看原书,最好是英文版。序言:举例:学编程语言就像学习自然语言语言(比如英语)词汇如何描述事物语法语言的结构如何用法表达日常的事物程序设计语言也是如此,你需要理解语言的核心:它是面向算法的,还是面向函数的,或者是面向对象的?你需要知道词汇表:标准类库提供了哪些数据结构、操作和功能?熟悉如何用习惯和高效的方式来构建代码。这本书是关于Java习惯和高效的用原创 2021-11-18 11:34:35 · 1455 阅读 · 0 评论 -
哈希表以及Java里面的哈希表
1、哈希表简单的原理理解通过映射的键值对,将 key 进行传递进去,然后经过了哈希函数的处理,计算得到数组中的下标,使得进行索引的的时间复杂度是 O(1)通过了空间换时间;牺牲了空间,快速了时间2、哈希冲突两个不同的key 但是最终的计算结果是相同的,也就是计算到了相同的数组下标,在元素的插入的时候,发生了冲突,出现了哈希碰撞;3、哈希冲突解决办法:1、开放寻址法,进行空桶的探测,顺序的探测,跳转的探测;2、再哈希方法:另外的哈希算法实现;3、使用链表将桶子里面的值进行串起来;Java 里原创 2021-10-30 15:12:22 · 970 阅读 · 0 评论 -
使用GitHub 和 IDEA 交互实现代码的托管
工具准备:下载 git ,百度直接搜索关键词即可,对应自己的操作系统下载即可;注册GitHub ,创建自己的账号;电脑拥有 IDEA 这个 IDE;不使用 idea 进行的命令行的代码上传使用 idea 进行的代码上传打开了 IDEA 的项目...原创 2021-10-23 10:42:01 · 96 阅读 · 0 评论 -
反射机制 Java
反射机制有什么作用?通过反射机制可以操作字节码文件(可以读取和修改字节码文件)通过反射机制可以操作字节码片段(.class 文件)反射机制相关的类,类包存在的位置?java.lang.Class原创 2021-10-15 12:21:03 · 92 阅读 · 0 评论 -
线程的相关概念
多线程什么是进程?什么是线程?进程是一个应用程序,一个进程是一个应用软件;线程是一个进程中的执行单元,执行场景;一个进程可以启动多个线程;java 程序中来讲,当在 dos 命令窗口中输入:java HelloWorld 回车之后,会先启动 JVM ,JVM 是一个进程;JVM 在启动一个主线程调用 main() 方法,同时启动一个线程进行负责看护,回收垃圾;最起码,现在的 java 程序中有两个线程是并发的,一个是垃圾回收线程,一个是执行 main() 主方法的线程;一个进程就是一个独立原创 2021-10-07 21:55:30 · 587 阅读 · 0 评论 -
IO流详细知识学习
文章目录1、什么是IO流?2、IO流的分类按照流的方式分类1、什么是IO流?就是文件的输入(Input)和输出(output);输出和输出的参照物是内存,进入内存是输入,从内存里面出来是输出;通过IO流可以完成硬盘文件的读写操作;2、IO流的分类按照流的方式分类内存为参照物,进去内存叫做输入或者读;从内存出来叫做输出或者写;...原创 2021-10-03 16:53:30 · 262 阅读 · 0 评论 -
Java 集合 Collection
文章目录1、集合概述1.1 什么是集合,有什么作用?1.2 集合中不能直接存储基本数据类型,另外集合也不能直接存储 Java 对象,集合中存储的是Java对象 的内存地址(集合中存储的是引用)1.3 在Java 中的每一个不同的集合,底层对应的不同的数据结构,向着不同的集合中存储元素,等于将数据放置到不同的数据结构当中1.4 集合在Java中的什么包中?1.5 集合的继承结构图熟记,可以快速开发1.6 Java中的额集合的分类1.7 在集合中的额部分实现类1.8 List Set Sorted 比较1、集原创 2021-09-26 19:59:28 · 478 阅读 · 2 评论 -
数据结构和算法 - 二叉树 - 相关概念
文章目录一、树1、空树2、节点的度3、叶子节点4、层数5、节点的深度6、高度7、树的深度等于树的高度8、有序树9、无序树二、二叉树1、二叉树的特点2、二叉树是有序树吗?3、二叉树的性质4、真二叉树5、满二叉树极其相关的性质6、完全二叉树7、完全二叉树的性质面试题目(计算叶子节点的数目)8、真二叉树,满二叉树,完全二叉树的区别三、二叉搜索树(binary search tree)1、二叉搜索树的相关性质2、二叉搜索树的接口设计一、树一个树只有一个根节点 父节点 兄弟节点 子节点 兄弟节点1、空树没有任原创 2021-09-25 19:58:43 · 420 阅读 · 0 评论 -
随机生成 5 个随机数放到数组里面,不能重复 - java
1、实现思路创建大小为 5 个 int 的数组;调用 random 产生随机数字;当产生的随机数和数组中的元素没有重复的时候,放进去,即可;2、实现源代码实现了两个方法:一个是主程序;一个是简单的判断数组中是否包含需要判断的元素;public class Test { public static void main(String[] args) { int[] array = new int[5]; for (int i = 0; i < ar原创 2021-09-21 14:47:25 · 2537 阅读 · 0 评论 -
双向链表实现 - java
双向链表实现示意图部分重要的方法add(E e)分析使用了调用add(size , element)相当于每次向链表的最后面添加元素 public void add(E e) { // 此处调用了加入的方法,根据位置,进行元素的加入 add(size, e); }add(int index,E element)分析:1、当元素在链表的中间插入元素一共需要连接好四条线,创建节点的时候,使用构造方法连接了两条线Node<E> no原创 2021-09-20 11:34:55 · 227 阅读 · 0 评论 -
单向链表部分功能实现 - java
文章目录1、单向链表整体结构示意图2、单向链表所有功能代码实现add(E e)add(int index, E element)getSize()clear()contains(E element)remove(int index)node(int index)indexOf(E element)Node 结构体get(int index)set(int index,E element)toString()3、上述实现的所有功能的集合1、单向链表整体结构示意图2、单向链表所有功能代码实现add(E原创 2021-09-19 23:37:56 · 120 阅读 · 0 评论 -
LinkedList 链表 Java 实现
1、定义的接口如下:package com.luobin.力扣数据结构练习题目.接口的定义;/** * @author LuoBin * @version 1.0 * @date 2021/9/3 3:51 下午 */// 接口中存在的东西放上去之后,默认就是公共的,不需要加上 publicpublic interface List<E> { int ELEMENT_NOT_FOUND = -1; void clear(); boolean isE原创 2021-09-13 09:52:23 · 161 阅读 · 0 评论 -
动态数组的实现 - java
/** * 对于范型的操作 * 1、在写类的时候,表明这是一个范型()范型类 *//** * 对象数组 * Object[] object = new Object[7]; * object[0] = new Person(10,"Hello"); * 对象数组中保存的元素是对象的引用地址,不是对象本身; * 上面的 object[0] 存储的是对象的地址,不是对象本身; * <p> * 为什么放地址? * 1、节省空间 * 2、假设对象占有多个字节,很难在索引地方塞原创 2021-09-02 23:41:02 · 307 阅读 · 0 评论 -
Java Spring
1、Spring 优点开源的免费框架,容器;轻量级,非入侵式的框架;控制反转(IOC),面向切面编程(AOP);支持事务的处理,对框架整合的支持;总结:Spring 是轻量级的控制反转(IOC)以及面向切面编程(AOP)的框架2、Spring 的七大组成部分在Spring 的官网进行的介绍,现代的Java 开发是基于Spring的Java 开发;Spring Boot:一个快速开发的脚手架基于Spring Boot 可以快速开发单个微服务约定大于配置Spring Clo原创 2021-07-19 22:52:49 · 111 阅读 · 0 评论 -
interface 的父类是 Object吗?答案不是
package com.luobin.app;public interface IA {// Java 中interface的父类是不是 Object// Java 的接口的基类不是 Object// 实际上是一个引用// 在接口里面,接口会隐式的实现 Object 里面的所有方法,并不是继承的关系// Object 方法必须得到object的引用 ,所以在 interface 里面有一个 object 的引用// 任何一个接口都引用到了一个 Object 的一个实例}...原创 2021-07-18 14:18:17 · 1084 阅读 · 0 评论 -
java 需要了解的知识
文章目录一、Java基础1.Java有哪些数据类型?2.final有什么用?3.介绍下static4."=="和equals方法究竟有什么区别?5.java中有没有引用传递?6.String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底变了没有?7.Error 和Exception的区别是什么?8.java程序初始化顺序是怎样的?9.java 中 IO 流分为几种?它们的区别是什么?10.String为什么使用final修饰?11.BI原创 2021-07-13 17:29:27 · 1009 阅读 · 0 评论 -
java 将数据写入到 XML 中的简单示例及相关代码说明
1、Java 到 XML 的数据交互原始代码/** * @author LuoBin * @version 1.0 * @date 2021/6/26 4:29 下午 */import org.jdom.Attribute;import org.jdom.Comment;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.XMLOut原创 2021-07-11 10:16:21 · 1994 阅读 · 0 评论