- 博客(98)
- 资源 (4)
- 收藏
- 关注
原创 根据根节点和子节点构造树形结构
package com.cyc.basic.test.list;import com.alibaba.fastjson.JSON;import lombok.Data;import java.util.Arrays;import java.util.List;import java.util.Objects;import java.util.stream.Collectors;/** * @description: 遍历构造树形结构{根节点, 子节点} * @version 1.0
2022-03-14 14:45:32
5630
原创 详解spring事务失效和回滚失败的场景
详解spring事务失效的12种场景详解spring事务失效的12种场景前言一 事务不生效1.访问权限问题2. 方法用final修饰3.方法内部调用3.1 新加一个Service方法3.2 在该Service类中注入自己3.3 通过AopContent类4.未被spring管理5.多线程调用6.表不支持事务7.未开启事务二 事务不回滚1.错误的传播特性2.自己吞了异常3.手动抛了别的异常4.自定义了回滚异常5.嵌套事务回滚多了三 大事务与编程式事务1 大事务问题2 编程式事务详解spring事务失效的12
2021-09-23 10:41:23
11181
2
原创 Mysql调优总结
@TOC数据类型优化更小的通常更好应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择你认为不会超过范围的最小类型案例:设计两张表,设计不同的数据类型,查看表的容量简单就好简单数据类型的操作通常需要更少的CPU周期,例如,1、整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂,2、使用mysql自建类型而不是字符
2021-09-08 09:54:18
16226
原创 多线程---并发容器的使用
多线程---并发容器的使用1. 容器概览2. 容器的使用1. Map1. HashTable2. HashMap3. SynchronizedHashMap4. ConcurrentHashMap2. Collection1. ArrayList2. Vector3. LinkedList4. ConcurrentLinkedQueue3. 并发容器的使用1. ConcurrentHashMap2. CopyOnWriteArrayList3. ConcurrentLinkedQueue4. LinkedB
2021-08-13 18:26:41
17709
原创 多线程---详解各种锁和AQS原理
多线程-进阶1. synchronized可重入同一个线程不同线程2. volatile保证线程可见性禁止指令重排序查看结果3. 锁优化锁细化锁粗化锁对象4. CAS(无锁优化, 自旋)5. JUC同步锁1. ReentrantLock(可重入锁)同一个线程不同线程tryLocklockInterruptibly()公平锁2. ReadWriteLock(读写锁)3. LangAdder(分段锁)4. CountDownLatch(倒数门栓)5. CyclicBarrier(循环栅栏)应用场景6. Coun
2021-08-08 19:17:53
15175
原创 多线程---多线程基础知识
多线程基础知识2. 线程的基本概念2.1 启动线程的5中方法2.2 线程的状态2.2.1 JAVA的6种线程状态1. NEW2. RUNNABLE (RUNNING+READY)3. WAITING4. TIMED_WAITING5. BLOCKEDTERMINATED2.2 线程的打断2.2.1 interrupt的三个方法2.2.2 interrupt和sleep() wait() join()2.2.3 interrupt 是否能中断正在竞争锁的线程synchronized锁Lock锁如何打断锁竞争的
2021-08-05 16:34:44
10538
原创 JVM---垃圾回收器CMS 和G1解析
CMS 和G1解析CMS 和G1解析基本概念CardTableCSetRSet(G1)CMS清理过程1. 初始标记(CMS-initial-mark)2. 并发标记(CMS-concurrent-mark)3. 重新标记(CMS-remark)4.并发清理(CMS-concurrent-sweep)线程角度理解G1介绍G1特点新老年代比例GC何时触发MixedGCMixedGC的过程初始标记并发标记最终标记筛选回收相关问题标记算法三色标记算法漏标产生漏标打破漏标RSet与赋值的效率CMS 和G1解析基本
2021-07-22 15:39:56
15755
1
原创 synchronized解析
synchronized解析1. 用户态与内核态2. CAS3. UnsafeAtomicInteger解析4. 了解对象的内存布局(hotspot)1. 对象头2. 成员变量(实例数据)3. 对齐数据工具:JOL = Java Object Layout6. synchronized的横切面详解重量级锁java源码层级字节码层级JVM层级(Hotspot)7. 锁升级过程7.1 JDK8 markword实现表:7.2 锁重入7.3 synchronized最底层实现7.4 synchronized vs
2021-07-12 17:11:18
19955
原创 JVM---一个简单的压栈和弹栈操作指令解析
JVM-一个简单的压栈和弹栈操作指令解析i++ 操作package com.cyc.jvm.c4_RuntimeDataAreaAndInstructionSet;public class TestIPulsPlus { public static void main(String[] args) { int i = 8; i = i++;// i = ++i; System.out.println(i); }}//
2021-06-27 15:52:06
11505
原创 JVM---Java内存屏障和JMM
Java内存屏障-JMMJava内存屏障-JMM硬件层数据一致性伪共享乱序问题如何保证特定情况下不乱序volatile的实现细节synchronized实现细节Java内存屏障-JMM硬件层数据一致性协议很多intel 用MESIhttps://www.cnblogs.com/z00377750/p/9180644.html现代CPU的数据一致性实现 = 缓存锁(MESI …) + 总线锁伪共享读取缓存以cache line为基本单位,目前64bytes位于同一缓存行的两个不同数据,被两个
2021-06-26 17:15:50
18734
原创 23种设计模式总结
23种设计模式总结创建型模式Abstract Factory(抽象工厂)应用场景: spring 的beanFactory ,spring容器就是个大型的抽象工厂,不仅可以创建普通的bean实例,也可以创建bean工厂。Builder(建造者)描述: 将一个复杂的对象的构建与它的表示分离Factory Method(工厂方法)面向对象六大原则...
2021-06-16 14:53:09
15734
原创 设计模式之模板方法模式(TemplateMethod)
设计模式之模板方法模式模板方法模式代码实现模式的应用模板方法模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。代码实现package com.cyc.design.template;public class Main {
2021-06-16 13:52:20
18930
原创 设计模式之原型模式(Prototype)
原型模式原型模式浅克隆深克隆字符串需要深克隆吗StringBuilder 克隆原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。浅克隆package com.cyc.design.prototype.v1;/** * 浅克隆 */public class Test {
2021-06-15 16:29:33
11313
原创 设计模式之访问者模式(Visitor)
访问者模式(Visitor)在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变主要将数据结构与数据操作分离。 在结构不变的情况下动态改变对于内部元素的动作需求描述: 有一电脑组装机门店,需要将CPU,内存条,主板等,给与不同的客户不同的折扣。package com.cyc.design.visitor;/** * 电脑对象 */public class Computer { //
2021-06-14 19:03:21
11522
原创 设计模式之迭代器模式(Iterator)
迭代器模式迭代器模式数组演示链表演示相互替换容器遍历自己的遍历方式泛型版迭代JDK的迭代器迭代器模式迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示, 主要用于容器和容器遍历数据结构中的物理结构只有两种:第一种: 连续存储, 数组第二种: 不连续存储, 链表 每个储存位置不但储存当前值, 还储存一个内存地址, 指向下个值的地址数组演示package com.cyc.desig
2021-06-14 17:33:08
12656
1
原创 设计模式之代理模式(Proxy)
设计模式之代理模式代理模式方案一方案二方案三方案四方案五方案六(动态代理)方案七(动态代理)JDK动态代理逻辑图源码分析CGLIB动态代理spring aop基础注解的AOP代理模式需求: 有一辆坦克 , 想要记录坦克的移动时间和移动记录原始代码如下package com.cyc.design.proxy.v01;import java.util.Random;/** * 问题:我想记录坦克的移动时间 */public class Tank implements Movable {
2021-06-13 23:58:53
19166
原创 设计模式之享元模式(Flyweight)
享元模式享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象**意图:**运用共享技术有效地支持大量细粒度的对象。**主要解决:**在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建应用实例:JAVA 中的 Str
2021-06-13 16:21:26
11281
1
原创 设计模式之组合模式(Composite)
组合模式介绍组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。代码演示package com.cyc.design.composite;import java.util.ArrayList;import java.util.List;/** * 组合模式 */abstract class Node {
2021-06-11 14:55:17
11456
1
原创 设计模式之观察者模式(Observer)
观察者模式观察者模式问题代码实现版本一版本二版本三版本四版本五版本六版本七版本八java本身观察者小测试总结观察者模式在观察者模式中,事件源,观察者,事件是一个组合。事件源Source对象,拥有一堆Observer,然后他会发出一堆Event,Observer观察到Event之后会做出具体的反应。问题一个小孩,醒了会哭,需要有人照顾。代码实现版本一面向过程package com.cyc.design.observer.v1;/** * 披着面向对象外衣的面向过程 */pu
2021-06-10 14:52:21
12558
原创 JVM----类加载和初始化
JVM-类加载和初始化类加载-初始化loading 把class文件加载到内存linkingVerification:校验class文件是否符合标准preparation:给静态变量赋默认值,如给static int i = 8赋值为i=0resolution:常量池中的用到的那些符号引用要准换成能访问到的内存地址initializing :这时候才会调用静态代码块给静态变量赋值类加载器loadingjvm中所有的class都是被classloader加载到内存以上几个类
2021-06-08 22:58:16
19211
4
原创 设计模式之责任链模式(ChainOfResponsibility)
设计模式之责任链模式初始化场景描述存入数据库之前,过滤用户输入的文字。public class Servlet_Main { public static void main(String[] args) { Msg msg = new Msg(); msg.setMsg("大家好:),<script>,欢迎访问 ,大家都是996 "); //处理msg, 过滤敏感字,<,> 和996 String r
2021-06-06 18:04:01
16073
3
原创 设计模式之工厂模式(Factory)
设计模式之工厂模式简介工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。任何可以产生对象或者方法的类 ,都可以称之为工厂单例也是工厂,可以把他当做静态工厂为什么有了new 之后,还要有工厂可以灵活控制生产过程权限,修饰,日志。代码准备需求一任意订制交通工具,例如汽车,飞机,扫把新建父类接口public interface Moveabl
2021-06-02 22:45:01
19402
原创 设计模式之策略模式(Strategy)
设计模式之策略模式在jdk1.8之后,为了和之前的接口进行兼容,接口里面必须方法实现,因为要支持lambda表达式。comparator接口,就是用到了策略模式同样,java.lang中的comparable接口,也是策略模式...
2021-06-01 16:54:06
16080
原创 设计模式之单例模式(Singleton)
设计模式之单例模式饿汉式这也是最常用的一种方式,它是线程安全的,它依靠JVM来实现线程安全,因为JVM加载一个class,只会加载一次。package com.mashibing.dp.singleton;/** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化 * Class.forName("") * (话说你不用的,你装载它干啥) */public class Mgr01 {
2021-06-01 11:25:10
19262
2
转载 Spring如何解决循环依赖
烂大街的Spring循环依赖该如何回答?什么是循环依赖?从字面上来理解就是A依赖B的同时B也依赖了A,就像上面这样,或者C依赖与自己本身。体现到代码层次就是这个样子@Componentpublic class A { // A中注入了B @Autowired private B b;}---@Componentpublic class B { // B中注入了A @Autowired private A a;}---// 自己依赖自己@Componentpublic c
2021-05-23 12:11:36
19439
6
原创 替代 if else ---策略模式
替代 if else ---策略模式什么是策略模式?策略模式的优点策略模式的缺点:策略模式实战1.定义策略接口策略接口订单信息类返回结果类2.定义各种策略微信支付实现支付宝实现云闪付实现3.使用策略测试一下:什么是策略模式?比如说对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。策略模式结构图如下:策略模式需要一个策略接口,不同的策略实现不同的实现类,在具体业务环境中仅持有该策略接口,
2021-05-17 18:26:33
24114
7
原创 替代if else 的方法---巧用枚举类和抽象方法
替代if else 的方法—巧用枚举类和抽象方法使用场景:当接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,巨量),不同渠道所需的处理方式不同,下面来写一个简单Demo来展示。场景复现首先构建一个 GeneralChannelRule 基础规则抽象类,定义一个抽象方法process(),不同的渠道都需要实现该抽象方法。package com.cyc.basic.test.rule;public abstract class GeneralChannelRule {
2021-05-17 14:42:11
12369
3
转载 linux相关命令之top命令
linux相关命令之top命令后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个top命令看看Load Average吧。今天这篇文章和大家说说怎么看这个“Load Average”。Load Average很多人说Load Average这一个指标就能说明系统负载高了,这句话是对的。那么具体是哪里压力大了呢?这三个数值是怎么计算出来的呢?可能很多人一下子都说不上来。先来说说定义吧:**在一段
2021-05-06 12:18:00
9334
原创 spring boot参数校验和自定义注解实现参数校验
spring boot参数校验和自定义注解实现参数校验spring boot参数校验和自定义注解实现参数校验环境配置@Valid的使用自定义校验注解spring boot参数校验和自定义注解实现参数校验环境配置首先,添加相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot
2021-04-23 18:23:54
12152
转载 Docker的安装和基本使用以及常用工具安装
Docker1 Docker简介1.1 什么是虚拟化1.2 什么是Docker1.3 容器与虚拟机比较1.4 Docker 组件1.4.1 Docker服务器与客户端1.4.2 Docker镜像与容器1.4.3 Registry(注册中心)2 Docker安装与启动2.1 安装Docker2.2 设置ustc的镜像2.3 Docker的启动与停止3 常用命令3.1 镜像相关命令3.1.1 查看镜像3.1.2 搜索镜像3.1.3 拉取镜像3.1.4 删除镜像3.2 容器相关命令3.2.1 查看容器3.2.2
2021-04-14 16:50:18
12240
原创 spring boot的自动装配原理和注解原理
spring boot的自动装配原理spring boot的自动装配原理自动配置原理解析源码位置启动类解析注解解析源码解析spring.factories 文件自动配置生效条件举例分析默认配置信息总结spring boot的自动装配原理自动配置原理解析源码位置spring boot自动配置的源码位置在spring-boot-autoconfigure里面这里可以看到这里已经有rabbitMq的一些默认配置,那么它是怎么把这些配置加载进去的呢 ,带着这个疑问,我们接着往下看。启动类解析首先从启
2021-04-14 14:27:17
20282
原创 CheckStyle的配置使用以及maven整合CheckStyle
CheckStyle的使用以及开发规范1. 安装idea插件市场搜索checkStyle选择安装重启idea使插件生效2. 配置和使用本地导入: 一般放在父类根目录下中。cos导入:统一维护一份checkStyle文件,及时相应修改后的校验标准。**checkStyle文件已放在文件末尾2.1 配置打开idea设置界面 , 以此点击以下按钮选择本地的checkStyle文件导入成功,点击应用经测试,这里提供的最新版checkStyle文件
2021-04-12 13:47:26
13867
原创 JDK1.8的新特性
JDK1.8的新特性1. 前言2. Lambda表达式2.1 基本语法:2.2 用法示例示例1:多个参数示例2:单个参数实例3:把Lambda赋值给变量示例4:隐式final3. 函数式接口3.1 Function类型接口3.2 Consumer系列3.3 Predicate系列3.4 Supplier系列4. 方法引用4.1 语法:4.2 示例4.2.1 类的静态方法引用4.2.2 类的非静态方法引用4.2.3 指定实例的非静态方法引用4.2.4 构造函数引用5. 接口的默认方法和静态方法5.1 默认方法
2021-04-01 14:05:51
8407
1
转载 Redis性能优化:7个维度和43条使用规范
Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis如何使用 Redis 更节省内存?如何持续发挥 Redis 的高性能?如何保证 Redis 的可靠性?日常运维 Redis 需要注意什么?Redis 安全如何保证?如何预防 Redis 问题?总结后记Redis 的最佳实践。你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题:我的 Redis 内存为什么增长这么快?为什么我的 Redis 操作延迟变大了?如何降低 Redis 故障发生的
2021-04-01 10:23:32
8849
原创 分布式事务-springcloud整合tx-lcn5.0实现分布式事务控制
spring cloud整合tx-lcn5.0实现分布式事务(代码+分析)基础框架搭建目录机构如下代码就不再详细贴上,文章下方有git代码地址,可直接运行代码地址
2021-03-26 18:10:30
25442
原创 MybatisPlus的queryWrapper的and和or的使用
MybatisPlus的queryWrapper的使用and 的使用 QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();queryWrapper.lambda().and( wrapper1 -> wrapper1.eq(SysUser::getAge, 1) .or(wrapper2 -> wrapper2.eq(Sys
2021-03-25 14:35:18
16674
转载 redis的常见问题总结
redis常见问题1、什么是redis?2、Reids的特点StringHashListSetSorted Set4、redis相比memcached有哪些优势?5、Memcache与Redis的区别都有哪些?6、redis适用于的场景?7、redis的缓存失效策略和主键失效机制8、为什么redis需要把所有数据放到内存中?9、Redis是单进程单线程的10、redis的并发竞争问题如何解决?11、redis常见性能问题和解决方案12、redis事物的了解CAS(check-and-set 操作实现乐观锁
2021-03-23 16:35:49
12481
原创 List的去重, Java8 中distinct的使用
List的去重, Java8 中distinct的使用常规List转Map原因:distinct()依赖于equals()最简单解决方法假设类是别人的,不能修改使用wrapper使用“filter() + 自定义函数”取代distinct()常规List转MapJava8使用lambda表达式进行函数式编程可以对集合进行非常方便的操作。一个比较常见的操作是将list转换成map,一般使用Collectors的toMap()方法进行转换。一个比较常见的问题是当list中含有相同元素的时候,如果不指定取哪一
2021-03-08 13:38:43
20283
mybatis-plus自动生成代码(包含swaager注解)
2020-08-21
初级多线程文档和视频(学习资料)
2020-06-25
nginx-1.17.9.zip
2020-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人