自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis解决分布式定时任务问题

场景分析:多服务器针对于定时任务带来的问题,保证任务只在一个服务器上在执行。解决方案1:只对一个服务器上的应用开启定时任务,通过配置文件参数来设置,不推荐解决方案2:redis@Beanpublic DefaultRedisScript<Boolean> redisScript() { DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>(); redisScri

2021-01-16 11:19:04 797

原创 jdk1.8中HashMap的扩容,从新增第一个元素开始

1.新增第一个元新增第一个元素总结:先进行数组容量初始化,初始大小为16,扩容界限为12,再找出数组对应位置,将新增的值放入。2.继续新增元素,假设一直不产生hash冲突执行完一系列操作,也就完成了数组的扩容,【注:此处还未涉及到hash冲突】不产生hash冲突总结:当新增的元素达到了该扩容的界限,那么会触发扩容操作,先计算扩容后的大小,也就是原数组大小的两倍,然后创建一个新容量大小的数组,再进行原数组遍历依次定位后放入新数组中。非树情况下产生h.

2021-01-14 17:48:53 990 2

原创 @PropertySource和@ImportResource

person.propertiesperson.name=adminperson.address=shanghaiperson.email=123@qq.comperson.user-card=321321person.map.k1=v1person.map.k2=v2@PropertySource将指定加载自定义的yml,properties配置文件@Component@PropertySource(value = {"classpath:person.pro

2021-01-01 21:01:08 270

原创 @ConfigurationProperties和@Value

application.properties配置person.name=adminperson.address=shanghaiperson.email=123person.map.k1=v1person.map.k2=v2先看一下@ConfigurationProperties的使用/** * 支持Validated校验 */@Component@ConfigurationProperties(prefix = "person")@Validatedpubl

2021-01-01 20:57:52 263

原创 在同类中方法互调事务失效

同类中A方法未加@Transactional,B方法加@TransactionalA调用B,B的事务注解并未生效。【必然不生效,老子A方法都没被事务管理起来,当儿子的还想要?】获取拦截器链路,众所周知,事务是通过Aop动态代理实现的,当A方法不加@Transactional注解,代理链路都chian都是空,你还想用事务?A.methodB于是变成了proxyObject.methodB,仅此而已,(看过一些文章说同类中方法互调事务不生效,是因为就相当于this.methodB,话是这么说,但

2020-11-29 17:03:19 957 2

原创 服务器又被莫名的进程占用着高cpu

不出意外的,服务器又被攻击了。莫名其妙的在某个用户下出现了-bash的命令。随后进行手动kill,查看crontab没有定时任务,启动应用,-bash又出现了,cpu占用瞬间飙升,于是猜想是不是启动脚本被改了。于是将本地脚本替换上去,启动,还是出现了。本地脚本肯定是没有被修改的,那只能是脚本中source的环境变量被修改了,于是查看了用户下的.bash_profile,果然有一段陌生的命令。...

2020-08-31 21:09:19 586

原创 Argument for @NotNull parameter ‘quickFixes‘ of com/intellij/ope

Argument for @NotNull parameter ‘quickFixes’ of com/intellij/ope

2020-07-16 21:21:54 6793

原创 vue前后端分离引发的跨域访问解决

das

2020-07-07 19:30:36 649

原创 线程辅助类CountDownLatch,CyclicBarrier,Semaphore

CountDownLatch和CyclicBarrier类似,只不过CountDownLatch是控制线程完成的数量,而CyclicBarrier是控制线程阻塞的数量,换言之,一个做线程减法,一个做线程加法,且CyclicBarrier是可往复使用的,类似批处理的感觉,就是插入十万数据,一次性插入一万,达到一万,插入一次…直到十万数据都插入完成。使用案例public static void main(String[] args) throws InterruptedException {

2020-07-04 09:04:52 143

原创 ThreadLocal相关

ThreadLocal:与其说可以用来减少线程内部参数传递,不如说是提供了维护线程内部上下文的一种方式。其底层实现只是维护了一个Key为当前线程的Entry表。所以它是线程安全的,存储的值可以认为是该线程的局部变量了。void createMap(Thread t, T firstValue) { t.threadLocals = new ThreadLocalMap(this, firstValue); }static class Entry extends WeakRef

2020-07-03 22:59:16 115

原创 深拷贝和浅拷贝的基本概念用法

基本概念浅拷贝:a.对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。b.对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变

2020-06-30 19:42:21 531

原创 Jvm垃圾回收器

UseSerialGC:新生代串行垃圾收集器,Serial OldUseParNewGC【Parallel Scavenge】:新生代并行【相当于UseSerialGC串行的多线程版本】垃圾收集器UseParallelGC:新生代并行垃圾收集器【注意UseParNewGC和Parallel Scavenge本质上是一样,只不过Parallel Scavenge和ParallelOldGC是一对,】UseParallelOldGC:老年代并行垃圾收集器-XX:+UseParallelGC-XX:

2020-06-13 09:13:21 99

原创 记一次服务器高cpu占用资源问题-被攻击

在部署web服务并启动的时候,服务启动缓慢,日志输出慢,莫名的感觉服务器性能出现了问题。于是top了一下,发现了一个之前未曾出现过得进程“ld-linux-x86-64”高度占用着cpu的资源。一开始,只是尝试去kill进程,kill -9 181839进程被杀掉了,cpu理所当然的降下来了。然后,过一会后,又突然出现了,嗯?难道杀不死?于是想到是不是被加入到定时任务,crontab -l一下,果然有个定时任务。进到相关目录下,有一些不知名的脚本查看run脚本,这个上网谷歌了一下,貌似是挖

2020-06-08 20:21:50 644

原创 从synchronized延伸出来的锁升级相关原理知识

public class SyncTest { public static void main(String[] args) { SyncTest syncTest = new SyncTest(); synchronized (syncTest) { } }}编译后的字节码文件public class com.lock.SyncTest { public com.lock.SyncTest(); Code:

2020-06-08 20:20:16 114

原创 从传统的单线程阻塞Socket到NIO多路复用的Selector

传统Socket

2020-06-03 19:49:06 178

原创 Jvm常用参数以及命令

JVM参数基本-version, -help…x参数-Xint【解释执行】-Xcomp【第一次使用就编译成本地代码】-Xmixed【混合模式】xx参数boolean类型参数【±号开启关闭】:PrintGCDetails【打印收集gc细节】,UseSerialGC【是否使用串行垃圾回收器】…设值类型参数MetaspaceSize=1024m-Xms -> 等价于-XX:InitialHeapSize-Xmx -> 等价于-XX:MaxHeapSize举出初始化参数的命令:

2020-06-02 21:42:05 154

原创 静态代理和动态代理的代码实现

代理主要是在不改变原有方法的同时,增加额外的功能。所以,代理并不是替换原有方法。代理分为静态代理和动态代理静态代理的实现:public interface FactoryService { /** * 售卖电脑 */ public void sale();}public class ComputerFactory implements FactoryService { @Override public void sale() {

2020-06-02 19:50:06 354

原创 springboot配置多数据源详细操作

数据源配置

2020-06-01 23:39:06 219

原创 mysql索引类型-笔记

mysql索引从数据结构上划分B-Tree索引B+Tree索引Hash索引…从创建的角度划分单值索引组合索引前缀索引 / 后缀索引:当需要给长字符串加索引时,由于给该列加上索引反而会降低性能,可以给该列的值的前多少位(或者后多少位)加上索引,这个长度需要衡量,使得前缀索引的选择性接近于索引整个列。从存储结构划分聚簇索引 :根据主键创建的索引,叶子节点存储了所有表数据非聚簇索引:非主键索引在查询时使用加了索引的列查询,需要注意最左前缀匹配原则。主要针对于组合索引。例

2020-06-01 21:53:04 125

原创 mysql中B+Tree索引结构

有一张t_test表,id主键CREATE TABLE t_test( `id` INT NOT NULL PRIMARY KEY, `name` VARCHAR(20) NOT NULL, `card` VARCHAR(18) NOT NULL) ENGINE=INNODB记录idnamecard1小明0012小红0023小孔0034小小0045小孔0056小美0067小明007主键创建主键索引以

2020-05-30 21:07:12 184

原创 java线程池中的核心参数

线程池中的核心参数int corePoolSizeint maximumPoolSizelong keepAliveTimeBlockingQueue workQueueRejectedExecutionHandler defaultHandler

2020-05-29 16:55:43 814

原创 mybatis工作原理-笔记

源码解读

2020-05-28 15:03:24 143

原创 linux最大打开文件数限制修改-笔记

实时生效 ulimit -n 30000修改文件永久生效 /etc/security/limits.conf倒数第二行添加 * - nofile 30000

2020-05-27 11:56:57 214

原创 vue初始化项目结构,并引入ant-design

前提:node已经安装好npm install cnpm -g 安装淘宝镜像【npm可能速度不快,所以可以使用cnpm来替代】cnpm install vue 安装vuecnpm install --global vue-cli 安装vue-cli初始化项目结构:vue init webpack vue-project下面的操作可以一直回车默认,如果你代码规范要求比较严格,可以打开ESLint【y】,自己搞的项目选【n】? Project name vue-project? Project

2020-05-25 13:30:40 1275 1

原创 java自定义注解的实现以及运用

注解的原理:

2020-05-25 10:54:01 261

原创 线程池中四种拒绝策略

线程池的拒绝策略默认支持四种拒绝策略AbortPolicy:新来的任务不加入,直接抛出RejectedExecutionException异常。public static class AbortPolicy implements RejectedExecutionHandler { public AbortPolicy() { } //直接抛出RejectedExecutionException异常 public void rejectedExecu

2020-05-20 17:59:31 366

原创 稀疏数组

对于一个棋盘的存档,即可作为二维数组的存储,1为白子,2为黑子,空子为0,。当落子数小于空子数,按原始二维数组存储会浪费存储空间,于是有了稀疏数组的概念。假设有个11*11的棋盘,上面有两个落子1和2转换稀疏数组第一行固定存储行数,列数,落子总数,然后遍历棋盘,将有落子的行,列,值存储 如棋盘上的第二行,第三列1,记为1【行下标】,2【列下标】,1【值】。于是有了如下的稀疏数...

2019-09-11 10:54:32 100

原创 打好基础之序列化和反序列化

序列化主要是让对象信息能在网络上传输,以及可持久化,即将对象转换为可传输,可持久化状态。反序列化则是将在网络传输或被持久化的信息转成对象。package com.gnq.demo;import java.io.Serializable;public class Person implements Serializable { private static fina...

2019-03-28 17:42:53 179

原创 打好基础之try-catch-finally执行顺序

try-catch-finally是用来捕获异常,保证程序的执行。先看一小段代码:public class TryCatchDemo { public static void main(String[] args) { div(4, 0); } public static void div(int a, int b){ try{...

2019-03-28 16:50:01 246 1

原创 Java堆中的分区

Java堆分区1.新生代:新生代中分为Eden,ServicorTo,ServicorFrom区Eden俗称伊甸区,顾名思义,就是新对象首次存在的区域之后,对象会转到servicorTo或者servicorFrom区,这两个区空间大小一致,作用主要是GC复制算法会用到。2.老年代:新生代的对象存活了一定的年龄(一般是15岁),会放到老年代区。举个形象的例子:假如有100人出...

2018-09-17 23:01:34 1962

原创 日常学习之原码,补码,反码以及位移运算符

在计算机中,首位0表示正数,1表示负数。原码:1:0000 0000    0000 0000    0000 0000    0000 0001-1:  1000 0000    0000 0000    0000 0000   0000 0001反码:1:0000 0000    0000 0000    0000 0000    0000 0001  -1:  1111 1111    11...

2018-07-07 08:21:18 892

空空如也

空空如也

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

TA关注的人

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