java
文章平均质量分 76
李王家的翠花
IT小屌丝
展开
-
SpringCloud组件总结
https://www.processon.com/view/link/64e85fe76b2cbb581a3835bc 访问密码:afGw。原创 2023-08-25 16:00:55 · 255 阅读 · 0 评论 -
MySQL调优系列(八)——事务和锁分类
事务是逻辑上的一组操作,要么都执行,要么都不执行。原创 2023-06-26 18:29:19 · 229 阅读 · 0 评论 -
多线程与高并发(17)——多线程总结(很全)
总结并复习了一下之前写的多线程的知识,见下图。不够清楚可私信或者processOn。原创 2023-07-27 20:08:28 · 323 阅读 · 0 评论 -
JVM系列(9)——调优初体验
吞吐量&&响应时间原创 2023-07-21 16:18:17 · 404 阅读 · 0 评论 -
JVM系列(8)——对象的内存布局
本文总结了JVM中类的加载、内存分配、垃圾回收、对象结构。原创 2023-07-19 20:00:44 · 1013 阅读 · 0 评论 -
JVM系列(7)——java内存模型
先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。原创 2023-07-19 17:13:54 · 993 阅读 · 0 评论 -
SringCloud集成Redis工具类
【代码】SringCloud集成Redis工具类。原创 2023-07-14 17:03:24 · 565 阅读 · 0 评论 -
JVM系列(6)——类加载器详解&&双亲委派
1、双亲委派模型:自下而上寻找,自上而下派任务去解析。2、类加载器是模板方法模式,重写indClass() 方法自定义类加载器,重写loadClass() 打破双亲委派模型。3、双亲委派模型安全、节省资源。原创 2023-07-14 16:12:01 · 772 阅读 · 0 评论 -
JVM系列(5)——类加载过程
加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。原创 2023-07-13 15:06:49 · 1582 阅读 · 1 评论 -
Java IO详解
IO即Input和Output,即输入和输出。这里的输入和输出都是相对于内存来说的。原创 2023-06-06 18:01:13 · 7412 阅读 · 0 评论 -
MySQL调优系列(三)——存储引擎的选择
关系型数据库的数据是存在表里的,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式,每个表格就是一个数据。表是在存储数据的同时,还要组织数据的存储结构,而这些数据的组织结构就是由存储引擎决定的。即存储引擎的作用就是规定了数据存储时的存储结构,业务直接决定了存储引擎的选择。因为不同的业务对数据的要求是不同的,比如查询、增删、外键、事务、索引等。mysql查看支持存储引擎语句:show engines;可以看出mysql默认支持的InnoDB索引,且支持事务、行级锁、外键。原创 2023-05-08 11:36:08 · 603 阅读 · 0 评论 -
多线程与高并发(16)——线程池原理(ThreadPoolExecutor源码)
ThreadPoolExecutor使用了AQS、位操作、CAS操作等。原创 2023-01-06 15:19:43 · 456 阅读 · 0 评论 -
位运算详解
位运算,就是对二进制位进行操作。原创 2023-01-04 17:39:09 · 972 阅读 · 0 评论 -
多线程与高并发(15)——线程池详解(非源码层面)
本篇文章就基于ThreadPoolExecutor 这个类来展开总结线程池。原创 2022-12-27 18:44:01 · 463 阅读 · 0 评论 -
多线程与高并发(14)——Executor框架(线程池基础)
工作单元和执行单元分开,工作单元包括Runnable和Callable,利用Executor来执行任务。通过 Executor来启动线程更易管理,效率更好,助于避免 this 逃逸问题。原创 2022-12-08 17:05:08 · 542 阅读 · 0 评论 -
java(面向对象)的23种设计模式(11)——观察者模式
观察者模式分析。原创 2022-12-01 15:44:16 · 656 阅读 · 0 评论 -
多线程与高并发(13)——Java常见并发容器总结
本文总结常见的并发容器,包含ConcurrentHashMap、CopyOnWriteArrayList 、ConcurrentLinkedQueue、BlockingQueue 、ConcurrentSkipListMap,本文仅做简单的总结,不做详细的源码分析。原创 2022-11-30 17:24:16 · 906 阅读 · 0 评论 -
java实现微信小程序获取手机号(htts接口实现)
1、获取通过认证的appId和secret;2、利用appId和secret获取accessToken;3、前端获取到用户的code;4、通过code和accessToken获取手机号。原创 2022-08-31 14:25:46 · 8957 阅读 · 3 评论 -
java集合(容器)基本知识
1、List有序,可重复;可根据索引获取元素。2、Set无序,不可重复;独一无二;不能根据索引获取元素。3、Queue按特定的排队规则来确定先后顺序,有序的、可重复;4、Map使用键值对(key-value)存储,类似于数学上的函数 y=f(x),"x" 代表 key,"y" 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。...原创 2022-08-15 16:12:32 · 764 阅读 · 0 评论 -
多线程与高并发(12)——经典面试题之写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用
写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用。原创 2022-08-11 17:27:10 · 240 阅读 · 0 评论 -
多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
实现一个容器,提供两个方法,add,size。写两个线程,线程 1 添加 10 个元素到容器中,线程 2 实现监控元素的个数,当个数到 5 个时,线程 2 给出提示并结束。原创 2022-08-09 17:57:05 · 308 阅读 · 0 评论 -
HashMap源码解析(jdk1.8,万字大章,图文并茂)
1、hash冲突是因为hash函数计算后,值相同,占数组里的同一个位置导致的;2、数组+链表+红黑树,几个数:16,0.75,12,8,64,扩容是2倍,HashMap 总是使用 2 的幂作为哈希表的大小。3、HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个。...原创 2022-07-29 16:39:37 · 379 阅读 · 0 评论 -
docker(四)运行java程序
docker运行java程序原创 2022-07-25 14:55:52 · 5393 阅读 · 0 评论 -
多线程与高并发(10)——ThreadLocal解析
每个Thread中都具备一个ThreadLocalMap,而ThreadLocalMap可以存储以ThreadLocal为 key ,Object 对象为 value 的键值对。原创 2022-07-11 16:52:04 · 429 阅读 · 0 评论 -
多线程与高并发(9)——AQS其他同步组件(Semaphore、ReentrantReadWriteLock、Exchanger)
Semaphore、Exchanger、ReentrantReadWriteLock,本文将逐一讲解,同时会总结一下LockSupport用法。原创 2022-07-06 17:47:44 · 171 阅读 · 0 评论 -
多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
通过CountDownLatch 总结AQS共享锁的原理,同时对比下CyclicBarrier和Phaser。原创 2022-07-05 20:29:05 · 260 阅读 · 0 评论 -
多线程与高并发(7)——从ReentrantLock到AQS源码(两万字大章,一篇理解AQS)
本文从ReentrantLock一步步从源码的角度剖析了AQS加锁解锁的过程。原创 2022-06-29 15:48:08 · 305 阅读 · 1 评论 -
java(面向对象)的23种设计模式(10)——模板方法模式
模板方法模式原创 2022-06-22 15:34:00 · 256 阅读 · 0 评论 -
多线程与高并发(6)——CAS详解(包含ABA问题)
一、乐观锁和悲观锁乐观锁和悲观锁都是用于解决并发场景下的数据竞争问题,不局限于某种编程语言或数据库。1、乐观锁:就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁的实现方式:主要有两种,一种是CAS机制,一种是版本号机制。(1)版本号机制:在数据中增加一个version字段用来表示该数据的版本号,每当数据被修改版本号就会加1。当某个线程查询数据的时候,会将该数据的版本号一起读取出来,之后在该线程需要更新该数据的时候,原创 2022-05-20 17:44:27 · 822 阅读 · 0 评论 -
多线程与高并发(5)——volatile关键字详解
本文主要从volatile关键字的两大特性来总结。1、保证线程可见性;2、禁止指令重排序。一、保证线程可见性可见性是什么,我们看之前的一篇文章:多线程与高并发(2)——synchronized用法详解。这里我们直接拿过来看:1、线程可见性当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。从上图可以看到,java内存模型中,是依赖主内存来实现可见性,修改时新值同步到主内存,读取也是从主内存刷新变量值。无论是普通变量还是volatile变量都是如此,但是两者的区别是:volatile的原创 2022-05-16 17:37:41 · 243 阅读 · 0 评论 -
多线程与高并发(4)——对象头和锁升级
本文主要总结对象头以及锁升级的过程。原创 2022-05-16 14:28:38 · 279 阅读 · 0 评论 -
多线程与高并发(3)——synchronized原理
synchronized用法参考上一篇文章,里面也详细讲了原子性、可见性和互斥性。本文主要总结synchronized的原理和锁优化。synchronized的同步块对同一条线程来说是可重入的,不会出现自己把自己锁死的问题。一、java对象头...原创 2022-04-22 17:47:47 · 533 阅读 · 0 评论 -
java(面向对象)的23种设计模式(9)——组合模式
一、定义整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。聚合关系 : 聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。生命周期互不影响,比如电脑和鼠标。组合关系: 组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。比如身体和细胞的关系。原创 2021-12-16 19:53:18 · 893 阅读 · 1 评论 -
多线程与高并发(2)——synchronized用法详解
这篇文章主要总结synchronized的用法,考虑到篇幅和方便自己记忆,synchronized的原理会在下篇文章详细总结。一、定义Synchronized是Java中常用的一个关键字。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码。——原子性(2)保证共享变量的修改能够及时可见。——可见性(3)有效解决重排序问题。——有序性二、基础理论这里只总结几大特性的基础理论,会在后续文章中陆陆续续结合关键字或者实例来讲解下面的特性。1、共享性在多线程编程中,数据共享原创 2021-12-14 18:00:53 · 1196 阅读 · 1 评论 -
java(面向对象)的23种设计模式(8)——外观模式
一、定义外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口。客户在使用系统时不必和子系统打交道了,降低了客户和子系统间的耦合。 ——松散耦合外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是高层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供精简的接口,让高层模块可以更加容易地间接调用这些子系统的功能。尤其是现阶段各种第三方SDK、原创 2021-12-03 17:24:06 · 735 阅读 · 0 评论 -
java(面向对象)的23种设计模式(7)——装饰模式
一、定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。可以将新功能动态地附加于现有对象而不改变现有对象的功能。装饰类和被装饰类可以独立发展,不会相互耦合。二、模式结构抽象构件(Component)角色: 定义一个抽象接口以规范准备接收附加责任的对象。——egg接口具体构件(ConcreteComponent)角色: 实现抽象构件,通过装饰角色为其添加一些职责。——simpleEgg抽象装饰(Decorator)角色: 继承抽象构件,并包含具体构件的实例,可以原创 2021-12-02 14:31:39 · 719 阅读 · 0 评论 -
多线程与高并发(1)——线程的基本知识(实现,常用方法,状态)
一、线程的实现方式线程的实现方式有以下几种:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法3.通过Callable和FutureTask创建线程4.通过线程池创建线程原创 2021-11-24 11:43:27 · 611 阅读 · 0 评论 -
hashmap中根据key和value的值排序
本文总结hashmap分别根据key值和value值排序的方法。一、根据key排序hashmap是无序的。 当所有key的hash的最大值<数组的长度-1时,HashMap可以将存入的元素按照key的hash从小到大排序。这个后期我会从源码的角度详细去分析。public static void main(String[] args) { Map mapKey = new HashMap(); mapKey.put("Bfadfads",99.00);原创 2021-11-23 20:35:15 · 6393 阅读 · 0 评论 -
手动删除eureka上已经注册的服务
问题描述:本地启动一项服务,注册到eureka上,本地服务停止后,eureka没有清除相关服务。截图中的172.20.232.80=29010。解决方案:安装了postman,直接调接口,如图所示:原创 2021-11-23 19:56:53 · 498 阅读 · 0 评论 -
java(面向对象)的23种设计模式(6)——桥接模式
一、定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接模式遵循了里氏替换原则、依赖倒置原则和组合重用原则,最终实现了开闭原则,对修改关闭,对扩展开放。面向对象七大设计原则参考:java(面向对象)的23种设计模式(1)——设计原则和设计模式分类上面这段话是不是很难理解,下面我尽可能的通过图文的方式,使上面的定义能够更简单更通透。...原创 2021-11-23 16:30:46 · 1034 阅读 · 0 评论