自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 Spring事务异常rollback-only

出现上面的异常有下面两个原因:

2024-07-15 13:37:45 140

原创 vue入门

1、安装node(node和npm是绑定的,安装了node,npm自然也就有了);2、设置淘宝镜像( npm config set registry https://registry.npm.taobao.org);3、npm重命名:(npm install -g n)只在linux平台有效,相当于把npm简写成n,想npm install可以改成n install;4、安装webpack-cli(npm i -g webpack-cli);5、安装webpack(npm i -g webpack

2021-11-15 16:31:33 851

原创 oracle-如果存在就更新,如果不存在就插入

<insert id="updateItemvalue" parameterType="java.util.List"> MERGE INTO T_INS_IQC_ITEMVALUE t USING( <foreach collection="list" item="item" index="index" separator="union"> SELECT #{item.inspectio

2021-10-28 17:01:40 1294

原创 java指定时间,增加一年、一天、减十天等

代码如下:public static void main(String[] args) { String strTime = "2020-02-29 17:32:05"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = simpleDateFor

2021-10-09 09:16:37 6855

原创 updateFill不生效

mybatis-plus-core版本:3.4.1现象:insertFill正常,但是updateFill一直执行不到原因:因为实体的参数名称没有定义为et注:Constants.ENTITY == “et”下图中是实体定义:修改方法如下,将传入参数定义为et:...

2021-09-27 16:17:35 1885 4

原创 策略模式和模板模式的区别

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-09-17 15:45:33 427

原创 顺丰Java面试

1、jvm中复制算法的原理;2、线程有哪几种状态;3、观察者模式的原理;4、mysql中默认的隔离级别是什么;5、redis常用的数据结构;6、网络七层模型中的网络层的作用;7、秒杀系统,商品库存100件,用户有10000以上,怎么实现;...

2021-06-09 21:30:52 438 2

原创 Spring基础

一、spring的作用帮助程序员进行对象的管理二、Bean和对象的区别Bean一定是对象,对象不一定是Bean,由Spring进行管理的对象叫做Bean,比如在代码里面直接写 User user = new User();这种就叫做对象的创建,这个对象的生死是由程序员自己来控制的三、类加载器自定义类加载器-》应用类加载器-》扩展类加载器-》启动类加载器...

2020-10-20 23:32:22 141

原创 ForkJoin原理

一、CPU密集型和IO密集型任务的区别二、ThreadPoolExecutor线程池的缺陷三、ForkJoin使用及其原理四、ForkJoin源码分析五、并发编程系列总结

2020-10-17 18:12:01 476

原创 Semaphore、CountDownLatch、CyclicBarrier原理

对于AQS的原理和ReentrantLock原理不熟悉的小伙伴可以参考上篇文章(并发编程之AQS原理及其ReentrantLock原理),这篇文章我们再继续深入看下AQS一、Semaphore底层实现(author:Doug Lea) //信号量 共享锁 Semaphore windows = new Semaphore(3); for(int i=0; i<5; i++) { Thread t = new Thread((

2020-10-14 23:45:19 217

原创 并发编程之AQS原理及其ReentrantLock原理

一、加锁的本质:在多线程的情况下可以以串行的方式去访问临界资源二、唤醒机制:wait-notify or park-unpark wait、park的使用三、线程的中断机制1、java中的中断机制是一种协作机制,也就是说通过中断并不能停止一个线程,需要线程自己处理中断,下面我们来一起看下API的使用static int i = 0; public static void main(String[] args) { System.out.println("star

2020-10-12 23:02:32 207

原创 synchronized的底层实现

一、java中我们用锁解决什么问题多线程的情况下,可以序列化地去访问临界资源,java中有两种实现,一种是synchronized,一种是juc包下的reentrantLock。注意:进程和线程的区别:进程是资源分配的最小单位,线程是cpu调度的最小单位二、java中线程的创建有几种方式一种,就是new Thread(),这个在java里面明明也只是一个类,为什么就可以创建一个线程呢?new Thread(new Runnable() { @Override

2020-10-11 13:27:25 314 2

原创 java中join、wait、sleep、yield、park方法的使用

一、join Thread t1 = new Thread() { public void run() { System.out.println(Thread.currentThread().getId() + " :t1running"); } }; Thread t2 = new Thread() { public void run() {

2020-10-10 10:22:39 956 1

原创 volatile的两大性质

一、可见性public class SynctestApplication { //底层使用了lock指令实现锁缓存行 //-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp private volatile boolean flag = true; public void refresh() { flag = false; System.out.println(Thread.

2020-09-19 19:16:34 1008

原创 java中死锁的例子

public class DemoApplication { private static String a = "12"; private static String b = "34"; public static void main(String[] args) { Thread t1 = new Thread(() -> { synchronized (a) { System.out.println("t1线程,进入a同步块, 执行中"); try {

2020-09-17 00:09:28 238

原创 ReentrantLock和Synchronized的区别

ReentrantLockSynchronized灵活,手工释放锁和加锁,可以设置超时时间简单,加锁释放锁都是自动的响应中断排队等候

2020-09-07 23:26:04 155

原创 LinkedList中的for循环和迭代器,哪个遍历效率高

首先先回答下上面的问题,答案是迭代器,那么很多人就想问下为什么,往下看@Test public void get() { List<Integer> ll = new LinkedList<>(); for (int i=0; i<100000; ++i) { ll.add(i); } long start = System.currentTimeMillis();

2020-09-07 23:11:16 1075

原创 ArrayList的插入一定没有LinkedList插入效率高么

@Test public void get() { List<Integer> la = new ArrayList<>(); List<Integer> ll = new LinkedList<>(); long start = System.currentTimeMillis(); for (int i=0; i<100000; ++i) {

2020-09-07 22:06:24 208

原创 BIO NIO

一、BIO1、单线程模式(服务端)while(true) { accept(); ... read();}阻塞在accept(),接受客户端的socket连接;如果有客户端响应,然后就会阻塞在read,等待客户端发送数据;如果客户端有数据发送,然后回到accept(),继续处理下一个客户端缺点:只能阻塞处理客户端的请求,如果第一个客户端一直没有数据发送过来,那么会一只阻塞等待客户端发送数据,当下一个客户端来请求了,也不会响应,这样的话,就会处理客户端请求特别慢2、多线程模式(服务端

2020-09-06 12:29:45 122

原创 spring实例化bean的三种方式

一、构造器spring通过调用构造方法创建bean,是很常见的一种方式。Person类package com.example.demo;public class Person { private String name; public Person() { System.out.println("Spring容器开始通过无参构造器创建Bean实例------------"); } //Spring容器通过setter方法为参数注入值

2020-09-02 23:20:43 190

原创 java中线程池-ThreadPoolExecutor中corePoolSize和maximumPoolSize的理解

import java.io.IOException;public class Mythread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + "执行中..."); try { System.in.read(); } catch (IOException e) {

2020-09-01 19:38:49 2054

原创 JVM中的垃圾回收算法

1、垃圾判断算法引用记数算法:对当前对象的引用进行记数,有引用+1,没有引用-1,当引用记数为0时,回收对象所占的内存;又一个缺陷是,不能回收循环引用的对象可达性分析算法2、内存分配算法指针碰撞(适用于堆内存完整的情况)上面这个图片表示的是当前正在进行内存分配的一整块内存块,其中红色区域表示的是已使用的内存,白色区域表示未使用内存,绿色区域表示正在分配的内存。那到底什么是指针碰撞呢?(1)按照对象的大小,b指针直接偏移到符合对象大小的地址;(2)判断当前的b指针时候超过了c指针的地址

2020-08-23 13:59:56 222

原创 内存池与JVM内存模型

1、现在我们用的比较多的是idea进行编译运行我们的程序,那大家知道当我们点击idea的run按钮时,发生了什么么?调用javac命令,将.java编译生成.class文件;调用java命令,解析运行.class;2、然后让我们再来搞清楚四个概念class文件:保存再硬盘上的.class文件class content:类加载器将.class文件加载在内存,存储字节码文件数据的那块内存区域Class对象:Class clazz = Test.class; //在JVM中,真正获取到的是Ins

2020-08-16 11:09:22 148

原创 java为什么是半编译半解释型语言

1、首先让我们先弄清楚什么是编译型语言,什么是解释型语言?编译型语言:编写好程序以后,首先需要编译器进行编译,统一转化成机器码,然后这个编译完的文件,可以放在操作系统直接执行解释型语言: 程序是边运行边进行机器码转化(转化完后cpu执)引用“李白写代码”(【这就好像我们吃一袋瓜子,解释性语言是剥一颗吃一颗,直到吃完;而编译性语言是先把一袋瓜子全部剥完,剥出肉,然后一口吃进去。你说这两种模式对于最后吃的人来说,哪种会比较快,结果不言而知吧!】这里的一袋瓜子其实就是一段程序,吃瓜子的人就是操作系统。)

2020-08-15 16:37:17 2113

原创 zookeeper的基本概念

1、启动服务端./zkServer.sh start2、启动客户端./zkcli.sh3、zookeeper节点类型持久化节点持久化顺序节点临时节点临时顺序节点容器节点TTL节点TTL顺序节点4、zookeeper常用命令create /path data 创建持久化节点create -e /path data 创建临时节点(生命周期一个会话)create -s /path data 创建持久化顺序节点create -e -s /path data 创建临时顺序节点

2020-06-30 00:26:15 167

原创 Spring Boot实战

一、spring-boot:1、自动配置2、起步依赖(把我们从“需要这些库的哪些版本”这个问题中解放出来了)3、命令行界面(spring-boot cli)4、actuator二、spring-boot不是应用服务器1、spring-boot是内嵌了一个servlet容器,实现的不用部署到传统java应用服务器里就能运行的功能;2、spring-boot也没有实现诸如JPA或JMS之...

2020-03-09 22:46:10 214

原创 redis添加熔断器(Hystrix)

SentinelHystrixresilience4j隔离策略信号量隔离线程池隔离/信号量隔离信号量隔离熔断降级策略基于响应时间、异常比率、异常数基于异常比率基于异常比率、响应时间注:1、线程池隔离和信号量隔离的区别?隔离方式是否支持超时是否支持熔断隔离原理是否是异步调用资源消耗线程池隔离支持超时时间的设置支持,当...

2020-01-03 20:10:23 2088

原创 java 根据反射输出私有属性的值

public class Person { private String name; Person(String c) { this.name = c; }}Person person = new Person("sssss");Class c = Class.forName("com.example.zong_demo.Person");Fie...

2019-02-18 20:08:26 290

原创 lvs的四种工作模式及其优缺点比较

lvs的四种工作模式及其优缺点比较VS/NAT(地址翻译实现虚拟服务器)VS/TUN(用IP隧道技术实现虚拟服务器)VS/DR(用直接路由技术实现虚拟服务器)VS/FULLNATVS/NAT的优缺点VS/TUN的优缺点VS/DR的优缺点使用场景

2017-08-19 10:39:41 6862

原创 一致性哈希底层实现

一致性哈希的原理我就不总结了,一搜一大把!那我们就来分析一段简单的代码吧! 一、下面这段代码是在主函数中调用,产生hash对象,初始化hash函数。并生成真实服务器的节点,最终将真实节点及其对应的虚拟节点插入红黑树中。 /*定义hash函数*/ CHashFun * func = new CMD5HashFun();//图1 /*创建一致性hash对象*/ CConH

2017-08-18 18:07:25 608

原创 redis--memcached

1、redis与的优点 <1>redis支持数据持久化; <2>redis支持不仅仅支持简单的key-value类型,还支持set、zset、list、hash数据结构; <3>redis具有主从备份的功能; 2、memcached比起redis的两种情况下,更优 相对Memcached而言,Redis的面世时间更晚且具备更多功能,因此开发人员通常将其视为默认性首选方案。不过有两

2017-08-15 23:54:24 412

原创 redis--集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能; 1、Redis集群通常是由多个节点组成的,在刚开始的时候,每个节点都是相互独立的,它们都处于自己独立的集群中;连接各个节点的工作由cluster meet命令来完成;节点与节点进行握手,加入到对方所在的集群当中; 2、cluster meet命令的实现 3、槽指派 Redis集群是通

2017-08-15 21:51:05 368

原创 redis--Sentinel

sentinel(哨岗、哨兵)是Redis高可用性解决方案:由一个或者多个sentinel实例组成的sentinel系统可以监视任意多个主服务器以及这些主服务器属下的从服务器;并在监视的主服务器进入下线状态以后,从之前的从服务器中重新选举出一个主服务器,代替之前的主服务器。 一、启动并初始化sentinel 1、初始化服务器; sentinel是一个运行在特殊模式下的redis服务器,所以启动

2017-08-15 17:16:56 432

原创 redis--主从复制

1、旧版复制功能的实现 Redis的复制功能分为同步和命令传播两个操作: 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态; 命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一直的状态; <1>同步 当客户端给从服务器发送slaveof,从服务器向主服务器发送SYNC命令,主服务器执行BGSAVE生成R

2017-08-15 12:58:04 344

原创 redis--RDB持久化--AOF持久化

Redis是一个内存数据库,如果不想办法将内存上的数据库保存起来,那么当进程退出的时候,数据库也就为空了,为了解决这个问题,提出了,RDB持久化功能,AOF持久化功能; 一、RDB持久化 1、RDB是一个经过压缩的二进制文件,通过保存数据库中的键值对来记录数据库状态; 2、RDB文件的创建与载入 有两个Redis命令可以用于生成RDB文件:SAVE、BGSAVE SAVE–会阻塞服务器

2017-08-15 09:33:58 365

原创 redis--数据库

每个redisDb代表一个数据库,一个数组,保存着服务器中的所有数据库,每个数组元素代表一个数据库,数组元素类型中的属性dict字典保存了一个数据库中的所有键值对,这个字典称为键空间; 1、服务器中的数据库struct redisServer{ redisDb *db;//一个数组,保存着服务器中的所有数据库 //... int dbnum;//服务器的数据库数量,默认

2017-08-15 08:44:51 379

原创 redis --内部结构--intset

1、intset是一个整数集合; 2、intset数据结构typedef struct intset { uint32_t encoding;//可以表示三种不同的编码方式,INTSET_ENC_INT16、INTSET_ENC_INT32、INTSET_ENC_INT64 uint32_t length;//contents数组的长度 int8_t contents[];

2017-08-14 21:32:20 313

原创 redis---内部结构--skiplist

1、跳跃表在redis中的适用场景 有序集合键、集群节点中用作内部数据结构; 2、为什么使用跳跃表而不使用平衡树的3个原因 <1>跳跃表支持平均O(logN),最坏O(N)复杂度节点的查询,在进行范围查找的时候,平衡树比skiplist操作要复杂。在平衡树中,我们找到范围内的小值以后,还是要中序遍历找到下一个值,而在skiplist中只要找到小值以后,直接遍历第一层的链表,就可以得出整个范围内

2017-08-14 20:59:57 286

原创 redis--内部结构--quicklist

list的内部实现是双向链表,确实是一个双向链表,而且是一个ziplist的双向链表。quicklist的每一个节点都是一个ziplist。ziplist是一个内存紧凑的列表(各个数据项在内存上都是前后相邻的)。比如,一个包含3个节点的quicklist,如果每个节点的ziplist又包含4个数据项,那么对外表现上,这个list就总共包含12个数据项。 1、quicklist这样设计的优点 双向

2017-08-14 18:28:36 357

原创 redis--内部结构--ziplist

压缩列表是列表键和哈希键的底层实现之一。 压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。 1、压缩列表的构成 2、压缩列表节点的构成 <1>previous_entry_length 以字节为单位,记录了压缩列表中前一个节点的长度。可以是1字节或者5字节;前一个节点小于254Byte就可以用1字节保存,前一个字节大于等于254By

2017-08-14 16:45:36 699

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除