![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java核心内容
文章平均质量分 87
羡羡ˇ
嗨,你的JAVA从入门到精通了吗?
展开
-
【MySQL】 - 索引原理与使用
前言在学习mysql的过程中, 相信大多数同学在建表查询表的时候, 是不了解mysql是如何通过我们给定的条件来找到这些数据的, 其中索引就是快速查找到数据的一个重要特性, 接着我们来介绍目录为什么会有索引呢?索引是什么?索引的优势与劣势索引的分类组合索引最左前缀原则索引的创建原则索引的数据结构聚簇索引与非聚簇索引为什么会有索引呢?索引是什么? mysql存储数据是按页存储的, 也就是一页一页的存储数据 , 如果这时候有1万条数据(假如分10页.....原创 2022-07-24 09:35:56 · 323 阅读 · 1 评论 -
你了解MySQL的架构与引擎吗?
可能很多同学学习过MySQL数据库, 并能灵活的处理表与表的关系 , 但对于MySQL底层是如何实现处理它们的就不是很了解了, 接着我们来介绍, 先看下图以上就是mysql的整体架构, 接着我们来介绍它们连接层 主要负责与客户端的连接(JDBC等), 授权认证 ,相关的安全方案等服务层 从上图可以看到, 服务层中包括SQL接口, 解析器, 查询优化器, 缓存等, 服务层主要处理SQl接口等, 所有跨引擎的功能也在此层实现 , 如存储过程,函数等 ,服务层会对我们......原创 2022-07-13 20:33:04 · 503 阅读 · 0 评论 -
ThreadLocal线程变量
目录ThreadLocal是什么?ThreadLocal实现原理分析ThreadLocal内存泄漏问题ThreadLocal是什么? ThreadLocal 使得我们可以创建线程私有的变量, 这个变量相对于其他线程来说是不可见的,ThreadLocal为变量在每个线程中都创建了一个副本 , 每个线程可以访问自己私有的线程变量,代码示例如下 :public class ThreadLocalDemo { //创建一个ThreadLocal对象,用来......原创 2022-06-26 09:37:37 · 638 阅读 · 0 评论 -
如何构造一个线程池 ?
前言 在没接触线程池之前, 我们都是在哪用到线程就在哪创建, 这样做看似方便, 但如果在高并发的前提下, 频繁的创建消耗可是一笔不小的开销, 严重则会影响到性能, 所以在此我们提出了线程池的概念 , 让线程执行完任务后并不立即销毁, 而是等待其他任务线程池概述 jdk5 之前, 想使用线程池必须自己去实现, jdk5 之后, java内置了线程池实现Executors (SingleThreadExecutor等)来创建不同类型的线程池 , 但实际开发中我们一般不使用它......原创 2022-06-05 09:01:07 · 842 阅读 · 11 评论 -
java中都有哪些锁?
相信大家在学习java的过程中, 一定听到过很多, 关于java中的锁 , 但这些锁并不完全都是指一把真正的锁, java中的锁有的是指锁的实现, 而有的指的是锁的特性, 下面来介绍目录乐观锁与悲观锁死锁可重入锁读写锁分段锁自旋锁共享锁与独占锁AQS公平锁与非公平锁偏向锁, 轻量级锁与重量级锁java对象头SynchronizedReetrantLock乐观锁与悲观锁乐观锁与悲观锁其实指的是看待并发问题的角度,并不是锁实现......原创 2022-06-03 08:48:31 · 3447 阅读 · 8 评论 -
JUC常用类 - ConcurrentHashMap并发HashMap
在jdk5之后Java 5.0 在 java.utilconcurrent 包中提供了多种并发容器类来改进同步容器的性能 , 下面我们来介绍这些类ConcurrentHashMap 我们说, hashMap是线程不安全的, 如果同时有多个线程对它进行操作就有可能会出现问题 , 所以在此之上出现了ConcurrentHashMap , 它是线程安全的 , 它保证的线程安全介于hashMap和Hashtable之间 . 其内部采用的是锁分段机制 ( jdk8启用了分段锁的方式, 使用CA...原创 2022-05-28 10:58:44 · 593 阅读 · 3 评论 -
并发编程核心问题 - 可见性,有序性, 原子性
目录可见性问题有序性问题volatile 关键字原子性问题i ++是安全的吗?如何保证原子性?CAS(Compare-And-Swap)ABA问题可见性问题 在如今的多核CPU中 , 由于CPU与内存存在速度差异, 所以每个核都有自己的缓存, 缓存是私有的, 这就导致CPU缓存与内存中的数据可能会出现不一致的情况 CPU在自己的缓冲区拿到数据进行写操作之后, 并不会立刻将这个数据更新回内存中, 如果此时来了另一个线程, 它此时应该读入的是上...原创 2022-05-27 13:50:30 · 266 阅读 · 7 评论 -
java - 并发概述
什么是并发 ?在单核CPU下, 线程是串行执行的 ,由于cpu特别快, 给人的感觉像是同时执行的(操作系统中有一个组件叫任务调度器 , 它会将CPU的时间片分给不同的线程, CPU在这些线程中不断切换), 微观上是串行的 , 宏观上看起来是并行的 , 一般我们将线程轮流使用CPU的做法叫做并发在多核CPU下, 线程是可以并行的, 现在的计算机几乎都是多核的, 每个核都会调度线程,如下图并行和并发 大家排队在一个咖啡机上接咖啡,交替执行,是并发;两台咖啡机上面接咖啡,是并...原创 2022-05-26 15:23:47 · 1291 阅读 · 1 评论 -
Java - 对象克隆
目录对象克隆浅克隆深克隆多层克隆对象克隆在讨论对象克隆之前, 可能会有人说 , 不能直接new一个吗?为什么要克隆首先关于这个问题, 直接new一个对象, 这个对象里面包含的成员变量是null的 , 那问题又来了, 我不能去一个个set对象的值吗? 当然可以, 但这样麻烦, 对象克隆采用的是native方法,效率更高那么该怎样去克隆呢? 克隆又分为浅克隆和深克隆首先这样的方式不叫克隆 (这种只能叫做引用复制):Object obj1 = new Object()原创 2022-05-23 13:14:06 · 948 阅读 · 6 评论 -
Java - 动态代理
目录代理模式静态代理动态代理jdk代理Cglib代理代理模式在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象 , 例如买菜你会去菜市场, 而不是去菜地那么为什么要使用代理模式呢 ?1. 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 2. 代理对象可以扩展目标对象的功能; 3. 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; SpringAOP的..原创 2022-05-22 10:02:26 · 187 阅读 · 8 评论 -
JAVA设计模式 - 单例与工厂模式
前言 设计模式是在前人总结下 , 得出的经验, 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解, 接着我们来看设计模式中的两种比较重要的模式 --- 单例模式与工厂模式设计模式类型 目前共有 23 中设计模式 , 根据不同功能可以分为三种类型 : 创建型模式, 结构性模式, 行为型模式 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。提供了单例、原型、工厂方法、抽象工...原创 2022-05-19 15:35:16 · 1715 阅读 · 1 评论 -
面向对象设计原则
在面向对象程序开发的过程中 , 通过前人的各种总结, 产生了许多的设计原则, 遵从这些设计原则 , 可以有效的减少错误, 提升软件的结构水平总共有7大原则, 先简短介绍, 如下图单一职责 对于单一职责原则,可以理解为一个类只负责一个功能领域中的相应职责, 即一个类不要负责太多“杂乱”的工作。在软件系统中,如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时设计或遭受到意想不到的破坏。以...原创 2022-05-18 19:57:23 · 169 阅读 · 2 评论 -
Spring中关于Bean需要了解的几点
目录BeanFactory 和 ApplicationContextSpringBean的生命周期Spring 中的 Bean 是线程安全的吗 ?Bean循环依赖 我们把由Spring创建的对象称为一个Bean , 关于Spring中 Bean存在很多的知识面, 例如生命周期, 循环依赖 , 接着我们来一一论述BeanFactory 和 ApplicationContext先来说BeanFactory , 顾名思义, 从名字上能看出, bean工厂, 是偏底...原创 2022-05-16 14:16:57 · 394 阅读 · 7 评论 -
Servlet的过滤器和Spring拦截器区别
再一个就是使用范围上最后就是触发时机的不同了虽然这两者具有一定程度上的相同功能, 但触发的时机完全不同, 如下图 可以看到 , 过滤器是在在进入 Servlet 之前触发的 , 而 拦截器则是在进入Servlet之后 未进入控制层之前 . 回想SpringMVC , 我们的所有请求都会先到达一个叫做请求分发Servlet (DispatcherServlet), 而后它会通过映射处理器来检查我们也没有配置拦截器 , 如果有拦截器就执行拦截器, 那么拦截器原创 2022-05-12 20:08:26 · 828 阅读 · 3 评论 -
java里的四种引用
前言 各位读者朋友们, 你们好, 这节我们对 java 中的引用再做一个概述, JDK1.2 版之后,Java 对引用的概念进行了扩充, 将引用分为了 4 种类型, 强引用, 软引用, 弱引用, 虚引用接着我们来一一论述目录强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)强引用(Strong Reference) 强引用也是最常见的引用...原创 2022-05-11 19:30:23 · 211 阅读 · 10 评论 -
对象的 finalize() 机制
finalize()方法机制 Java 语言提供了对象终止(finalization)机制来允许开发人员提供对象被销毁之前的自定义处理逻辑。 当GC去回收垃圾时, 总会在即将回收之前调用这个对象的 finalize()方法 , 一个对象finalize()方法只会被调用一次 finalize()方法可以被重写,通常在这个方法中进行一些资源释放和清理的工作,比如关闭文件、套接字和数据库连接等。 我们一般最好不要主动去调用对象的finalize(...原创 2022-05-09 19:05:09 · 573 阅读 · 1 评论 -
【JVM】--- 垃圾回收
垃圾回收目录垃圾回收概述内存溢出和内存泄漏垃圾回收算法标记阶段STW(Stop-the-World)回收阶段标记 - 清除算法复制算法标记 - 压缩算法三种算法的比较垃圾回收概述 垃圾回收是java的招牌能力 ,极大的提高了开发效率, java是自动化的垃圾回收, 其他语言有的则需要程序员手动回收 , 那么什么是垃圾呢? 垃圾是指在运行程序中没有任何引用指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理原创 2022-05-08 17:35:03 · 501 阅读 · 10 评论 -
【JVM】--- 执行引擎
前言 ladies and gentleman , 你们好😊 ,我是羡羡 , 在前面我们介绍了运行时数据区中的各个组成部分 , 这节我们来看 jvm 的另一核心 --- 执行引擎执行引擎 jvm的主要任务是负责装载字节码到其内部 , 字节码并不等价于机器码 , 并不能直接运行在操作系统之上 , 所以想要让一个java程序运行起来 , 执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以 这里需要区分 1.前端编译:从...原创 2022-05-06 15:26:26 · 230 阅读 · 1 评论 -
【JVM】--- 运行时数据区
前言 ladies and gentleman , 你们好😊 ,我是羡羡 , 在上次我们提到了 jvm 概述, 已经它如何进行类加载, 在类加载之后, 数据会到达运行时数据区 , 那么运行时数据区是怎样的呢 ? 接着来一一概述1. 运行时数据区的组成 运行时数据区由5个部分组成 : 分别是: 程序计数器 , 虚拟机栈 , 本地方法栈 , java堆和方法区构成 , 如下图所示 可以注意到 , 图中方法区和堆 用了红色标注 , 其他三个是灰色 , 这是因为...原创 2022-05-04 15:14:57 · 438 阅读 · 10 评论 -
【JVM】--- 类加载
👑1. jvm 的组成👓2. 类加载🎃3. 类加载器🥼4. 双亲委派机制☂️5. 类的主动/被动使用 1. jvm 的组成 jvm组成可分为这四个部分那么一个程序在 jvm 中的运行过程是怎样的呢? java代码首先被编译成字节码文件(Class文件), 通过不同操作系统上的 jvm 来加载解释 , 这个过程首先需要类加载器加载class文件 , 然后进行字节码校验 , 校验结束通过后通过jvm解释器翻译成机器码交给操作系统执行原创 2022-04-26 08:49:12 · 682 阅读 · 1 评论 -
java - 泛型
目录什么是泛型?泛型类,接口派生子类泛型通配符类型擦除什么是泛型? 早期的Object类型可以接收任意的对象类型,但是在实际的使用中, 会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。就是说 , 我们可以将类型向参数一样传递过去//一个泛型类//T可以为任意字符,如A,a,B等都可以public class Dem...原创 2022-04-16 23:13:37 · 569 阅读 · 1 评论 -
Lambda 表达式 与 Stream流
Lambda Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵活的代码。作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升。 我们可以知道, Lambda表达式是为简化语法而存在的ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");...原创 2022-04-13 12:59:41 · 1840 阅读 · 2 评论 -
关于Redis的那些事
Redis💍 我们知道 , redis 是一款优秀的非关系型数据库 , 使用 C 语言编写的,支持网络交互的, 内存中的Key-Value 数据结构存储系统,它可以用作数据库、缓存和消息中间件。 🎩接着我们来看 , 关于Redis需要了解的几个问题目录💍关系型数据库与非关系型数据库💄主从复制🎩哨兵机制💍缓存问题👑缓存穿透👑缓存击穿👑缓存雪崩👑总结关系型数据库与非关系型数据库 关系型数据库 ...原创 2022-04-12 16:00:02 · 217 阅读 · 1 评论