java
青青于我心
不为别的,就为自己
展开
-
redis解决分布式定时任务问题
场景分析:多服务器针对于定时任务带来的问题,保证任务只在一个服务器上在执行。解决方案1:只对一个服务器上的应用开启定时任务,通过配置文件参数来设置,不推荐解决方案2:redis@Beanpublic DefaultRedisScript<Boolean> redisScript() { DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>(); redisScri原创 2021-01-16 11:19:04 · 797 阅读 · 0 评论 -
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 阅读 · 0 评论 -
@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 阅读 · 0 评论 -
在同类中方法互调事务失效
同类中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 · 587 阅读 · 0 评论 -
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 阅读 · 0 评论 -
vue前后端分离引发的跨域访问解决
das原创 2020-07-07 19:30:36 · 649 阅读 · 0 评论 -
线程辅助类CountDownLatch,CyclicBarrier,Semaphore
CountDownLatch和CyclicBarrier类似,只不过CountDownLatch是控制线程完成的数量,而CyclicBarrier是控制线程阻塞的数量,换言之,一个做线程减法,一个做线程加法,且CyclicBarrier是可往复使用的,类似批处理的感觉,就是插入十万数据,一次性插入一万,达到一万,插入一次…直到十万数据都插入完成。使用案例public static void main(String[] args) throws InterruptedException {原创 2020-07-04 09:04:52 · 143 阅读 · 0 评论 -
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 阅读 · 0 评论 -
深拷贝和浅拷贝的基本概念用法
基本概念浅拷贝:a.对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。b.对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变原创 2020-06-30 19:42:21 · 531 阅读 · 0 评论 -
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 阅读 · 0 评论 -
从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 阅读 · 0 评论 -
从传统的单线程阻塞Socket到NIO多路复用的Selector
传统Socket原创 2020-06-03 19:49:06 · 178 阅读 · 0 评论 -
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 阅读 · 0 评论 -
静态代理和动态代理的代码实现
代理主要是在不改变原有方法的同时,增加额外的功能。所以,代理并不是替换原有方法。代理分为静态代理和动态代理静态代理的实现:public interface FactoryService { /** * 售卖电脑 */ public void sale();}public class ComputerFactory implements FactoryService { @Override public void sale() {原创 2020-06-02 19:50:06 · 354 阅读 · 0 评论 -
springboot配置多数据源详细操作
数据源配置原创 2020-06-01 23:39:06 · 219 阅读 · 0 评论 -
java线程池中的核心参数
线程池中的核心参数int corePoolSizeint maximumPoolSizelong keepAliveTimeBlockingQueue workQueueRejectedExecutionHandler defaultHandler原创 2020-05-29 16:55:43 · 814 阅读 · 0 评论 -
mybatis工作原理-笔记
源码解读原创 2020-05-28 15:03:24 · 143 阅读 · 0 评论 -
java自定义注解的实现以及运用
注解的原理:原创 2020-05-25 10:54:01 · 261 阅读 · 0 评论 -
线程池中四种拒绝策略
线程池的拒绝策略默认支持四种拒绝策略AbortPolicy:新来的任务不加入,直接抛出RejectedExecutionException异常。public static class AbortPolicy implements RejectedExecutionHandler { public AbortPolicy() { } //直接抛出RejectedExecutionException异常 public void rejectedExecu原创 2020-05-20 17:59:31 · 366 阅读 · 0 评论 -
稀疏数组
对于一个棋盘的存档,即可作为二维数组的存储,1为白子,2为黑子,空子为0,。当落子数小于空子数,按原始二维数组存储会浪费存储空间,于是有了稀疏数组的概念。假设有个11*11的棋盘,上面有两个落子1和2转换稀疏数组第一行固定存储行数,列数,落子总数,然后遍历棋盘,将有落子的行,列,值存储 如棋盘上的第二行,第三列1,记为1【行下标】,2【列下标】,1【值】。于是有了如下的稀疏数...原创 2019-09-11 10:54:32 · 100 阅读 · 0 评论 -
打好基础之序列化和反序列化
序列化主要是让对象信息能在网络上传输,以及可持久化,即将对象转换为可传输,可持久化状态。反序列化则是将在网络传输或被持久化的信息转成对象。package com.gnq.demo;import java.io.Serializable;public class Person implements Serializable { private static fina...原创 2019-03-28 17:42:53 · 179 阅读 · 0 评论 -
打好基础之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 评论