自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 harmdb

https://github.com/TPC-Council/HammerDB/releases/download/v2.23/HammerDB-2.23-Win-x86-64-Setup.exe

2023-06-11 11:45:09 213

原创 定时任务详解

定时任务

2022-10-13 10:14:52 10749 1

原创 juc并发包之CopyOnWriteArrayList

一. 线程不安全的ArrayList1、为什么说ArrayList是线程不安全的:add()操作抛出数组越界异常;add()操作会丢失元素;set()操作去修改元素,get()操作去获取元素时,可以读到新值也可能读到旧值,无法保证一致性。源码分析:public boolean add(E e) { //确定添加元素之后,集合的大小是否足够,若不够则会进行扩容 ensureCapacityInternal(size + 1); // Increments modCount!!

2022-04-14 22:07:46 567

原创 redis详解

什么是 RedisRedis的全称是:Remote Dictionary.Server,本质上是一个Key-Value 类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB。Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限制是 1GB,

2022-04-06 15:38:19 1218

原创 Rocketmq详解

什么是RocketmqRocketMQ是一款分布式、队列模型的消息中间件,具有以下特点1、’能够保证严格的消息顺序2、提供丰富的消息拉取模式3、高效的订阅者水平扩展能力4、实时的消息订阅机制5、亿级消息堆积能力二、核心概念Producer: 消息生成者,负责消息产生,由业务系统负责产生。Consumer:消息消费者,负责消费消费,由后台业务系统负责异步消费。Push Consumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦接收到消息,Co

2022-04-04 15:40:29 7011

原创 jvm实例,tomcat容器,spring容器,在内存中的关系和tomcat的类加载机制

jvm实例,tomcat容器,spring容器,在内存中的关系问题:1.一个java项目对应一个jvm 吗?2.tomcat里面加载多个java项目 ,是不是用了一个jvm?3.java项目中的spring容器,部署到tomcat容器,启动tomcat以后的jvm实例 ,在内存中是怎么一个包含关系?1、集群环境可能是多个jvm2、一个java进程就是一个jvm,main方法启动的,而同一个tomcat的多个web应用都在一个jvm里3、jvm包含tomcat运行环境,tomcat加载了应用上

2022-04-03 15:17:31 998

原创 spring事务详解

spring中几种事务的实现方式1.编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。(已经不用了)2.基于 TransactionProxyFactoryBean的声明式事务管理3.基于 @Transactional 的声明式事务管理4.基于Aspectj AOP配置事务,实际上是cjlib动态代理<aop:aspectj-autoproxy pr

2022-04-02 16:43:07 2151

原创 分布式事务详解

分布式事务分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。对于分布式事务而言几乎满足不了 ACID,其实对于单机事务而言大部分情况下也没有满足 ACID,不然怎么会有四种隔离级别呢?所以更别说分布在不同数据库或者不同应用上的分布式事务了。还是把acid再贴一遍严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。一致性(Consistency),可以理解

2022-04-02 14:41:14 3967

原创 MySQL中TIMESTAMP和DATETIME的区别和char,varchar,text,blob的区别

一、关于TIMESTAMP和DATETIME的比较一个完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分为两部分:date部分和time部分,其中,date部分对应格式中的“YYYY-MM-DD”,time部分对应格式中的“HH:MM:SS[.fraction]”。对于date字段来说,它只支持date部分,如果插入了time部分的内容,它会丢弃掉该部分的内容,并提示一个warning。如下所示:mysql> create table test(id int

2022-04-01 22:16:07 498

原创 Dubbo框架+zookeeper详解

Dubbo :是一个RPC框架,SOA框架:Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式作为SOA:具有服务治理功能,提供服务的注册和发现,用zookeeper实现注册中心,启动时候服务端会把所有接口注册到注册中心,并且订阅configurat

2022-03-31 16:21:32 17776

原创 Java线程池如何合理设置核心线程数

问题 :线程池数量设置为多少比较合理呢?线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能,先判断是 CPU 密集型任务还是 IO 密集型任务:CPU 密集型任务和IO 密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算。IO 密集型任务:比如像 MySQL 数据库、文件的读写、网络通信等任务,这类任务不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间。在知道如何判断任务

2022-03-30 11:51:55 895

原创 ReentrantReadWriteLock详解

之前长时间的面试暴露了一些知识面不够深入,其中一块是ReentrantReadWriteLock读写锁方面,一直没有时间来深入学习,这次补上,关于ReentrantLock的内容可以看一下我前面的文章Java锁详解,里面第二部分详细的介绍了ReentrantLock,废话不多说,直接开始从前面一文Java锁详解中,分析了以非阻塞同步算法为基础实现的可重入独占锁ReentrantLock。所谓** “独占” 即同一时间只能有一个线程持有锁。而 “重入” **是指该线程如果持有锁,可以在同步代码块内再次请求占

2022-03-24 21:31:35 838

原创 mybaties是如何创建代理的

问题:mapper层和我们平时说的dao层指的是同一个内容,都是数据库操作的封装,但是在没有集成mybatis时,dao层的接口都是需要我们手动去写其实现类,可在springboot集成中我们却发现:我们并没有手动去实现Mapper接口,但工程却能实实在在的查询数据库,获取我们需要的数据,那么问题来了,mybatis是何时、何地、如何生成mapper代理实例的呢?Mybatis的自动配置类:MybatisAutoConfiguration,至于如何加载此类,可参考:spring-boot-2.0.3启动

2022-03-15 21:25:18 2333

原创 动态规划详解

面试过程动态规划题没做出来,痛定思痛,决心弄明白这个过去一直没有解决的问题原链接:https://www.cnblogs.com/zhangfuxiao/p/11369230.html自己总结后的题目:1、跳台阶题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。实现代码:本质是斐波那契函数,不多讲class Solution {public: int jumpFloorII(int number) {

2022-02-27 21:55:29 334

原创 CPU过载、内存溢出分析

CPU过载、内存溢出问题一般出现在线上项目中,因为开发环境用户量和数据量都很小,即使你的代码有问题也不会爆发出来。线上出现这样的问题是比较严重的,需要认真对待,妥善解决。问题原因造成这样问题有两个大类型的原因:一,性能问题,高并发高访问情况下线程太多,内存不够用;这个时候体现了多线程的一个危害,cpu过载而且可能内存溢出二,代码问题,如代码中有死循环、一次查询数据量太大、存在太多对象引用内存无法回收(如集合里有大对象没有回收),数据库死锁等。使用top, free, uptime等命令查看CPU、

2022-02-25 14:26:30 3421

转载 linux load average负载详细解释

转载至linux load average负载详细解释CPU利用率和load averageCPU利用率,就是对于CPU的使用状况,这是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正

2022-02-24 14:46:30 5094

原创 动态代理详解

一直没弄明白动态代理实现原理,这次弄清楚一、动态代理的区别动态代理分为JDK的动态代理和cglib动态代理。JDK的动态代理只能针对实现了接口的类生成代理。而cglib的动态代理是针对类实现代理,这两种代理我们可以灵活使用。我们通过汽车跑的例子来解读这两种动态代理。JDK动态代理...

2022-02-16 17:11:20 754

原创 序列化的那点东西

一直没太明白序列化的细节,这次弄懂它1、什么是序列化们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,jre本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现serializable接口,这样,javac编译时就会进行特殊处理,编译的

2022-02-10 11:11:03 77

原创 MongoDB 特殊索引

mongodb的索引有很多种,其中,有一些索引和mysql相似,如单字段索引 (Single Field Index),db.person.createIndex( {age: 1} )上述语句针对age创建了单字段索引,其能加速对age字段的各种查询请求,是最常见的索引形式,MongoDB默认创建的id索引也是这种类型。{age: 1} 代表升序索引,也可以通过{age: -1}来指定降序索引,对于单字段索引,升序/降序效果是一样的又如:复合索引 (Compound Index)db.pe

2021-07-28 16:48:51 151

原创 hessian序列化原理分析

参考官方文档的描述,下面做一些简要描述,http://hessian.caucho.com/doc/hessian-serialization.html。1、它必须自我描述序列化类型,即不需要外部模式或接口定义2、它必须是独立于语言的,包括支持脚本语言3、它必须是可以通过单一方式进行读写4、它必须尽可能紧凑5、它必须简单,这样才能有效地测试和实现6、必须尽可能地快7、它必须支持Unicode字符串8、它必须支持8位二进制数据,而不需要转义或使用附件9、它必须支持加密、压缩、签名和事务上下文

2021-05-18 22:09:21 1014 5

原创 IO流的分类及用法原理

IO流的操作在工作中由于都是工具类来完成,导致一直对其理解不够深,想写篇文章来学习下,分类如下:一、IO流的概念Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源抽象表述为"流"。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。流有输入和输出,输入时是流从数据源流向程序。输出时是流从程序传向数据源,而数据源可以是

2021-05-18 21:46:33 626

原创 mysql索引优化2

之前写过一篇索引的总结,但是发现有些东西还是没有涉及到又或是不够详细,这次再继续写索引type使用explan 解释sql语句时,会有一列type,这个type标志了该索引的级别,EXPLAIN执行计划中type字段分为以下几种:ALL ,INDEX ,RANGE ,REF ,EQ_REF CONST, SYSTEM NULL,性能从最差到最好上面各类扫描方式由快到慢:system > const > eq_ref > ref >

2021-04-08 21:26:36 244

原创 lambada用法

public class LambadaTest {public static void main(String[] args) {Student s1 = new Student(“张三”,12);Student s2 = new Student(“张2”,13);Student s3 = new Student(“张四”,13);Student s4 = new Student(“张5”,15);List list = new ArrayList<>();List list2

2021-04-07 17:16:49 482

原创 @SneakyThrows注解

@SneakyThrows注解的用途得从java的异常设计体系说起这是异常的类图。Throwable是Error和Exception的父类,用来定义所有可以作为异常被抛出来的类。UML图如下:说明1.Error和Exception区分:Error是编译时错误和系统错误,系统错误在除特殊情况下,都不需要你来关心,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。Exception又分为RunTimeEx

2021-04-07 15:50:55 106742 2

原创 Mybatis中的常用标签

MyBatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。trim标签有四个属性:prefix,prefixOverrides,suffix,suffixOverrides下面使用几个例子来说明trim标签的使用。有这样的一个例子:<select id="findActiveBlogLike" resultType=

2021-03-30 15:30:30 1678

原创 MyBatis传入的参数

在讲mybatis入参问题时,先把架构讲下系统架构关键组件SqlSession:selectOne、selectList、selectMap、select、insert、update、delete、commit、rollback、flushStatements、close、clearCache、getConfiguration、getMapper、getConnectionExecutor:update, query, flushStatements, commit, rollback,getT

2021-01-12 16:48:29 777

原创 Spring security配置详解

一直对项目里的安全配置比较陌生,这次总结一下项目里的那些关于security配置1、 核心组件这一节主要介绍一些在 Spring Security 中常见且核心的 Java 类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。1.1 SecurityContextHolderSecurityContextHolder 用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限… 这些都被保存在 Security

2020-12-21 22:08:59 7116 6

原创 netty 线程模型

Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等。本文就netty线程模型展开分析讨论下首先先看IO模型:BIO:同步阻塞IO模型;NIO:基于IO多路复用技术的“非阻塞同步”IO模型。简单来说,内核将可读可写事件通知应用,由应用主动发起读写操作;AIO:非阻塞异步IO模型。简单来说,内核将读完成事件通知应用,读操作由内核完成,应用只需操作数据即可;应用做异步写操作时立即返回,内核会进

2020-12-17 13:54:18 339

原创 内核态线程,进程和CPU

用户态和内核态的概念—>内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序—>用户态: 只能受限的访问内存, 且不允许访问外围设备. 线程占用CPU的能力被剥夺, CPU资源可以被其他程序获取为什么需要用户态和内核态?—>由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 :用户态 和 内核态进程的堆栈每个进程都有自己的

2020-12-15 15:16:38 1662

原创 线程启动的那些方式以及源码分析

Runnble先说说Runnable接口:package cic.threadpractice;public class RunnbaleTest implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) {

2020-10-28 17:20:08 252

原创 Unsafe对象 之LockSupport方法原理剖析

LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础,它们底层其实都是依赖Unsafe实现为什么使用LockSupport类如果只是LockSupport在使用起来比Object的wait/notify简单,那还真没必要专门讲解下LockSupport。最主要的是灵活性。上边的例子代码中,主线程调用了Thread.sleep(1000)方法来等待线程A计算完成进入wait状态。如果去掉Thread.sleep()调用,代码如下:public class TestObjW

2020-10-28 15:36:11 435 3

原创 线程和进程/阻塞和挂起以及那些sleep,wait()和notify()方法详解

线程与进程的阻塞线程阻塞线程在运行的过程中因为某些原因而发生阻塞,阻塞状态的线程的特点是:该线程放弃CPU的使用,暂停运行,只有等到导致阻塞的原因消除之后才回复运行,或者是被其他的线程中断,该线程也会退出阻塞状态,同时抛出InterruptedException。进程阻塞正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种状态称为阻塞状态。进程的挂起挂起进程在操作系统中可以定义为暂

2020-09-29 18:58:53 7807

原创 spring mvc拦截器,spring拦截器以及AOP切面的区别和源码

SpringMVC 拦截器执行时机对于springmvc,有两种方式配置拦截器。一是实现HandlerInterceptor接口,如public class MyInterceptor1 implements HandlerInterceptor { //该方法在action执行前执行,可以实现对数据的预处理, // 比如:编码、安全控制等。如果方法返回true,则继续执行action。 @Override public boolean preHandle(HttpSe

2020-09-28 16:22:34 2501

原创 动态代理详解

jdk动态代理实例:动态代理有两个对象,目标对象和代理对象。使用JDK动态代理,目标对象必须实现一个接口。public class JdkDynamicProxyTest { interface IPerson { void say() ; } static class Person implements IPerson { @Override public void say() { System.out

2020-09-28 15:51:58 145

原创 rabbitMq详解

先上一段代码:package cic.controller;import com.rabbitmq.client.*;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import

2020-09-23 10:29:58 1109

原创 设计模式之结构型模式

结构型模式是用来设计程序的结构的。结构型模式就像搭积木,将不同的类结合在一起形成契合的结构。包括以下几种:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式适配器模式适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。

2020-09-17 17:29:28 269

原创 设计模式之 创造类模式

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。工厂方法模式工厂方法模式分为三种:普通工厂模式举例如下:(我们举一个发送邮件和短信的例子)//首先,创建二者的共同接口:1 public interface Sender {2 public void Send();3 }1 public class MailSender implements Sender {2 @Override3 public void Send() {4

2020-09-10 11:19:40 272 4

原创 23种设计模式归总

什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的

2020-09-09 21:01:13 98

原创 Elasticsearch的那些Query类

QueryBuilders是Spring关于Elasticsearch api的封装和变形,我们先了解下QueryBuilders的那些query API: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */public class Es_QueryBuilders_DSL { /** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *

2020-09-09 18:07:40 723

原创 职责链模式和tomccat的Filter过滤器

责任链模式一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现。以请假流程为例,一般公司普通员工的请假流程简化如下:普通员工请假简化流程图普通员工发起一个请假申请,当请假天数小于3天时只需要得到主管批准即可;当请假天数大于3天时,主管批准后还需要提交给经理审批,经理审批通过,若请假天数大于7天还需要进一步提交给总经理审批。使用 if-else 来实现这个请假流程的简化代码如下:pu

2020-09-07 09:04:20 142

空空如也

空空如也

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

TA关注的人

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