Java
江枫鱼眠
不浮躁,不随风逐流,不忘初心
展开
-
JVM常用配置参数操作与GC回收机制解释
JVM笔记jvm 配置参数-verbose:gc -XX:+PrintGCDetails 打印GC回收的信息-XX:ParallelGCThreads=4 (PreNew垃圾回收)垃圾回收的线程数(推荐为CPU的核数作为值,过多线程会导致上下文切换)-XX:MaxGCPauseMills GC回收停顿时间毫秒数(数值太小会发生频繁GC)-XX:GCTimeRation...原创 2020-05-05 22:48:31 · 498 阅读 · 0 评论 -
synchronized与ReentrantLock区别
在这里插入代码片##### 功能区别在未优化前synchronized是属于重量级锁,系统切换用户态与核心态来实现阻塞与唤醒Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,需要lock()和unlock()方法配合try/finally语句块来完成JAVA使用s...原创 2019-11-21 11:38:55 · 199 阅读 · 0 评论 -
JAVA自定义AOP编程
JAVA 自定义AOP编程package com.king.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Comp...原创 2019-01-21 16:28:05 · 323 阅读 · 0 评论 -
JAVA序列化对象
JAVA序列化对象对敏感字段加密1. 情境:服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,比如密码字符串等,希望对该密码字段在序列化时, 进行加密,而客户端如果拥有解密的密钥,只有在客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的数据安全。2. 解决:在序列化过程中,虚拟机会试图调用对象类里的 writeObject 和 readObject ...原创 2019-01-21 16:27:41 · 109 阅读 · 0 评论 -
线程生产者与消费者
线程生产者与消费者package com.king.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * Created by Administrat...原创 2019-01-21 16:26:39 · 126 阅读 · 0 评论 -
Thread运行
5种Thread线程运行状态新建(New):创建后尚未启动的线程处于这种状态。运行(Runable):得到cpu分配的执行时间无限期等待(Waiting):处于这种状态的线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒Object.wait()Thread.join()LockSupport.park()限期等待(Timed Waiting):处于这种...原创 2019-01-21 16:25:42 · 330 阅读 · 0 评论 -
synchronized
JAVA使用synchronized实现互斥同步线程安全以及原理synchronized经过编译后会在同步代码块前后形成monitorenter和monitorexit,任何对象都有一个 Monitor 与之相关联,当且一个 Monitor 被持有之后,他将处于锁定状态。线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 Monitor 所有权,即尝试获取对象的锁,如...原创 2019-01-21 16:24:36 · 121 阅读 · 0 评论 -
CountDownLatch与CyclicBarrier
CountDownLatch与CyclicBarrier使用以及区别区别:CountDownLatch : 一个线程(或者多个),等待另外N个线程完成某个事情之后才能执行。CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。CountDownLatchpackage com.king.test;import java.util.concu...原创 2019-01-21 16:24:00 · 90 阅读 · 0 评论 -
CAS与ABA问题
CAS与操作时存在ABA问题CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做ABA问题原因:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功...原创 2019-01-21 16:29:35 · 121 阅读 · 0 评论 -
Request多次调用InpuStream
Request中getReader()和getInputStream()只能调用一次,构建可重复读取inputStream的request添加RepeatedlyReadRequestWrapper 类并继承 HttpServletRequestWrapper 包装类package net.dotclouds.requestconfig;import org.apache.common...原创 2019-01-22 17:38:45 · 630 阅读 · 0 评论 -
Spring Session实现tomcat集群session共享配置
Spring Session实现tomcat集群session共享配置添加maven依赖<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId&原创 2019-01-24 17:32:37 · 497 阅读 · 0 评论 -
Spring IOC解析
Spring IOC解析问题:Spring怎么加载配置文件,怎么注册bean,怎么获取bean1.XmlBeanFactorynew Resource(ClassPathResource 实现类获取bean配置文件和当前类加载器)传给XmlBeanFactory构造方法 ClassPathResource resource = new ClassPathResource("beans....原创 2019-01-24 17:36:11 · 124 阅读 · 0 评论 -
SpringBoot整合Rocketmq
SpringBoot整合RocketMq在pom.xml配置文件添加<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <原创 2019-01-24 17:32:59 · 368 阅读 · 0 评论 -
Redis分布式锁实现
分布式锁实现使用Redis的SETNX命令实现分布式锁。方案:Redis SETNX 语法 SETNX key value 当设置成功时会返回1表示该key没有资源占用反之返回为0表示该资源被占为每个锁设置一个生命时间,防止独占锁而没有释放导致阻塞(比如异常),在程序的finally块内释放锁资源,在释放锁资源后将链接Redis的对象返回给链接池或者关闭,否则会导致等待阻塞超时抛异常...原创 2019-01-24 17:35:06 · 123 阅读 · 0 评论 -
maven生成指定环境jar包
<build> <resources> <resource> <directory>src/main/resources</directory> <!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 --> <excludes>原创 2019-01-23 15:26:46 · 871 阅读 · 0 评论 -
linux开发常用命令
根据关键字查询日志信息grep -n “关键字” zxsf360-task.logvim zxsf360-task.log +行数netstat -tnlp 查询监听的端口top -H -p端口 查询该端口的top情况实时查看项目日志tail -f 日志文件名远程连接登录ssh IP postscp user@ip dir 远程拷贝文件授权...原创 2019-01-23 15:23:44 · 108 阅读 · 0 评论 -
linux安装jdk环境
安装jdk根据系统版本下载jdk并解压到自定义目录下在/etc/profile文件添加JAVA_HOME=/data/soft/jdk1.8 注:/data/soft/jdk1.8为jdk解压目录PATH=JAVAHOME/bin:JAVA_HOME/bin:JAVAHOME/bin:PATHCLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME...原创 2019-01-22 17:49:41 · 137 阅读 · 0 评论 -
springcloud以git作为配置中心
SpringCloud配置中心配置中心服务端pom.xml&lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spri原创 2019-01-28 11:14:21 · 340 阅读 · 0 评论 -
配置多数据源
SpringBoot+Mybatis配置多数据源配置文件## master 数据源配置master.datasource.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&amp;characterEncoding=utf8master.datasource.username=rootmaster.datasource.passw...原创 2019-01-28 11:15:50 · 226 阅读 · 0 评论 -
Map根据Value排序
Map根据Value排序 public static Map<String, Double> sortMapByValue(Map<String, Double> oriMap) { if (oriMap == null || oriMap.isEmpty()) { return null; } Ma...原创 2019-01-21 16:14:29 · 140 阅读 · 0 评论 -
Map底层原理解析
Map采用了数组加链表的方式存储(横向数组,纵向链表),当有同一hash值得数据会被房到同意数组后面形成链表HashMap(默认16长度)putint hash = hash(key); 获取hash值int i = indexFor(hash, table.length); tab[hash&(n-1)]返回Map table索引位置(为了解决均匀散列索引)循环遍历...原创 2019-01-21 16:13:58 · 1256 阅读 · 0 评论 -
ip频繁调用接口过滤设置黑名单
针对某个IP频繁恶意调用API接口,将ip设置成黑名单代码如下(可以在拦截中添加)package net.dotclouds.rule;import net.dotclouds.common.Constants;import net.dotclouds.conf.ChatConf;import net.dotclouds.config.RedisClient;import net...原创 2019-01-28 11:11:56 · 6768 阅读 · 0 评论