java
Garfield_cat_cat
生活总想埋了你,却不知道你是种子
展开
-
AES加密工具类
第一 种方法:AESUtilimport javax.crypto.*;import java.nio.charset.Charset;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;/** * AES加密工具类 */public class AESUtil { public stat原创 2022-05-16 14:50:06 · 950 阅读 · 0 评论 -
使用Java下载文件时获取原始文件名
URL url = new URL(urlString);// open the connectionURLConnection con = url.openConnection();// get and verify the header fieldString fieldValue = con.getHeaderField("Content-Disposition");if (fieldValue == null || ! fieldValue.contains("filename=原创 2022-05-10 09:52:44 · 3059 阅读 · 0 评论 -
java比较器中的nullsFirst()与nullsLast()
一般的我们对List<Map<XX,XX>>类型排序可以这样写对Score进行排序:List<Map<String, Object>> resultlist = new ArrayList<>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("id", "1"); map1.put(转载 2021-07-27 11:19:21 · 329 阅读 · 0 评论 -
CopyOnWriteArrayList通过迭代 remove 会抛UnsupportedOperationException
使用CopyOnWriteArrayList删除元素 /** * 测试CopyOnWriteArrayList的remove()方法 */ public static void testCopyOnWriteArrayList() { CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList<String>(); copyOnW原创 2021-07-27 10:03:02 · 997 阅读 · 1 评论 -
正则表达式
用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)String expression = "(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)";原创 2021-06-22 10:16:38 · 118 阅读 · 0 评论 -
List转Map 注意点
List<UserRsVO> userList = new ArrayList<>(); UserRsVO userRsVO = new UserRsVO(); userRsVO.setId("aa"); userRsVO.setHeadPic("aaaaaa"); UserRsVO userRsVO1 = new UserRsVO(); userRsVO1.setId("aa"); us原创 2021-05-13 21:20:18 · 141 阅读 · 0 评论 -
打印SQL的xml
xml文件<?xml version="1.0" encoding="UTF-8"?><configuration> <!-- 引用application.properties中的配置 --> <!-- <springProperty scope="context" name="serviceName" source="app.id" defaultValue="handover-nur-ewell"/> -->原创 2021-03-30 11:14:00 · 340 阅读 · 0 评论 -
解决跨域问题
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;import com.garfield.brush.interceptor.UserContextInterceptor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuratio原创 2021-02-02 10:16:03 · 112 阅读 · 0 评论 -
项目中遇到的问题1
spring boot 项目发现 resources 目录下的文件没有编译进去,检查下pom.xml文件检查 的值原创 2021-01-13 10:45:38 · 79 阅读 · 0 评论 -
mybatis 自定义拦截器
拦截器注解mybatis自定义拦截器实现步骤:实现org.apache.ibatis.plugin.Interceptor接口。添加拦截器注解org.apache.ibatis.plugin.Intercepts。配置文件中添加拦截器。在mybatis中可被拦截的类型有四种(按照拦截顺序):Executor: 拦截执行器的方法。ParameterHandler: 拦截参数的处理。ResultHandler:拦截结果集的处理。StatementHandler: 拦截Sql语法.转载 2020-11-30 14:47:12 · 2692 阅读 · 0 评论 -
gradle 打成jar包
本地切换到master,进入项目目录执行的 gradle clean build -x test命令原创 2020-11-16 16:53:01 · 226 阅读 · 0 评论 -
mysql 连接报错
用户名和密码都是正确的,报这个错误有些客户端能登录 ,登录进去后把这里修改下原创 2020-11-13 14:52:57 · 692 阅读 · 0 评论 -
Docker
1.命令docker images 列出本地镜像docker ps -a 查看所有的镜像docker ps 查看运行中的镜像原创 2020-11-03 13:28:25 · 83 阅读 · 0 评论 -
缓存
Redis 的数据结构StringListSetSorted SetHashGeoStreamRedis 实现分布式锁:学习链接原创 2020-10-21 17:00:14 · 105 阅读 · 0 评论 -
rabbitmq单机到集群完整搭建
RabbitMQ 安装和使用一、安装依赖环境1.在 http://www.rabbitmq.com/which-erlang.html 页面查看安装rabbitmq需要安装erlang对应的版本2.在 https://github.com/rabbitmq/erlang-rpm/releases 页面找到需要下载的erlang版本,erlang-*.centos.x86_64.rpm就是centos版本的。3.复制下载地址后,使用wget命令下载wget -P /home/download htt原创 2020-09-09 17:40:31 · 130 阅读 · 0 评论 -
activemq入门安装
演示环境: Centos7、jdk8、activemq5.15.8下载地址: http://activemq.apache.org/activemq-5158-release.html在liunx 系统下:wget https://archive.apache.org/dist/activemq/5.15.8/apache-activemq-5.15.8-bin.tar.gz解压: tar -zxvf apache-activemq-5.15.8-bin.tar.gz -C /var修改目录名称 m原创 2020-09-07 15:36:09 · 75 阅读 · 0 评论 -
Java类加载器
JVM三种预定义类型类加载器当JVM启动的时候,Java开始使用如下三种类型的类加载器:启动(Bootstrap)类加载器:启动类加载器是用本地代码实现的类加载器,它负责将JAVA_HOME/lib下面的核心类库或-Xbootclasspath选项指定的jar包等虚拟机识别的类库加载到内存中。由于启动类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用。具体可由启动类加载器加载到的路径可通过System.getProperty(“sun.boot.class.path”)查看。扩展原创 2020-09-01 14:24:10 · 89 阅读 · 0 评论 -
ForkJoinPool
ForkJoinPool 是Executor接口的实现,它专为可以递归分解成小块的工作而设计。意图梳理:ForkJoin 工作窃取的概念实现思路:并行的请求接口中数据:public class HttpRequestBo extends RecursiveTask<JSONObject> { private ArrayList<String> urlList; private int start; private int end; p原创 2020-08-31 16:09:44 · 156 阅读 · 0 评论 -
NIO
NIO的三个核心组件:Buffer 缓冲区Channel 通道Selector 选择器Buffer缓冲区Buffer 工作原理代码示例:public class BufferDemo { public static void main(String[] args) { // 构建一个byte字节缓冲区,容量是4 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4); // 默认写入原创 2020-08-26 11:24:12 · 104 阅读 · 0 评论 -
BIO
Socket 编程BIO (Blocked IO)BIO 阻塞IO的含 义:服务端代码:public class BIOServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器启动成功"); while (!ser原创 2020-08-25 15:25:53 · 103 阅读 · 0 评论 -
Java网络编程 -- BIO 阻塞式网络编程
阻塞IO的含义阻塞(blocking)IO :阻塞是指结果返回之前,线程会被挂起,函数只有在得到结果之后(或超时)才会返回非阻塞(non-blocking)IO :非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回同步(synchronous)IO :应用阻塞在发送或接受数据的状态,直至数据成功传输(或返回失败),简单来说就是必须一件一件事做,等前一件做完了才能做下一件事异步(asynchronous)IO :应用发送或接受数据后立即返回,实际处理这个调用的程序转载 2020-08-24 15:14:53 · 176 阅读 · 0 评论 -
深入理解Java中的锁(二)
Lock包层次结构Lock 核心的api代码示例:public class GetLockDemo { // 公平锁 // static Lock lock =new ReentrantLock(true); // 非公平锁 static Lock lock = new ReentrantLock(); public static void main(String[] args) throws InterruptedException { // 主线程 拿到锁转载 2020-08-21 10:58:57 · 92 阅读 · 0 评论 -
深入理解Java中的锁(一)
Java中锁的概念自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环。乐观锁 : 假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改悲观锁 :假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁独享锁(写) : 给资源加上写锁,拥有该锁的线程可以修改资源,其他线程不能再加锁(单写)共享锁(读) : 给资源加上读锁后只能读不能改,其他线程也只能加读锁,不能转载 2020-08-21 10:26:47 · 92 阅读 · 0 评论 -
线程安全之原子操作
原子操作原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。首先我们来看一个非原子操作的示例:public class TestAtomic1 { /** * 两个线程都修改变量 count 的值,看最后count的值是否符合预期原创 2020-08-21 10:11:17 · 170 阅读 · 0 评论 -
线程池应用及实现原理剖析
为什么要用线程池线程是不是越多好?线程在Java中是一个对象, 更是操作系统的资源, 线程额创建和销毁都需要时间,如果 创建时间+销毁时间>执行任务时间 就很不合算Java对象占用堆内存,操作系统线程占用系统内存, 根据JVM规范,一个线程默认最大栈大小为1M, 这个栈空间是要从操作系统内存中分配的,线程过多会消耗很多的内存操作系统频繁切换线程上下文会影响性能线程池的推出就是为了控制线程数量线程池原理 - 概念线程池管理器:用于创建并管理线程池, 包括创建线程池, 销毁线程池, 添加新原创 2020-08-20 15:10:31 · 81 阅读 · 0 评论 -
线程封闭
多线程访问共享可变数据时,并不是所有的时候,都要用到共享数据, 所以线程封闭的概念就提了出来。 所谓线程封闭, 就是指数据都封闭在各自的线程之中, 不需要不需要同步。线程封闭的具体的实现主要有ThreadLocal和局部变量ThreadLocalThreadLocal是Java里一种特殊的变量,一个线程级别的变量,每个线程都有一个自己独立的ThreadLocal变量。它的竞争条件被彻底消除, 在并发模式下是绝对安全的。用法:ThreadLocal var = new ThreadLocal();会自原创 2020-08-20 14:55:40 · 167 阅读 · 0 评论 -
线程通信
线程通信的方式要想实现线程之间的协同, 如: 线程先后执行顺序, 获取某个线程的执行结果等, 涉及线程之间的相互通信, 分为下面四类文件共享网络共享变量共享JDK提供的线程协调API 细分为: suspend/resume , wait/notify, park/unpark文件共享变量共享:线程协作 - JDK API典型场景: 生产者 - 消费者模型 (线程阻塞, 线程唤醒)示例: 线程1区买包子 , 没有包子, 则不执行。 线程2生产包子, 通知线程1继续执行API - 被原创 2020-08-20 14:48:47 · 253 阅读 · 0 评论 -
线程中止
不正确的线程终止 - stop()stop: 终止线程, 并且清楚监视器锁的信息, 但是可能导致线程安全问题, JDK不建议使用【调用stop()之后,后面的代码不再执行】正确的线程终止 - interrupt()如果目标线程在调用Object class的wait方法, join方法或sleep方法时被阻塞, 那么interrupt会生效, 该线程的中断状态将被清除,抛出InterruptedException如果目标线程是被I/O或者NIO的Channel所阻塞, 同样I/O操作会被中断或者返回原创 2020-08-20 13:37:02 · 98 阅读 · 0 评论 -
线程的状态
线程的状态有:New: 尚未启动的线程的线程状态Runnable:可运行线程的线程状态, 等待CPU调度Blocked: 线程阻塞, 等待监视器锁定的线程状态Waiting: 等待线程的线程状态, 不带超时的方式: Object.wait(), Thread.join(), LockSupport.park()Time Waiting:具有指定等待时间的等待线程的状态, 带超时的方式: Thread.sleep() , Object.wait(), Thread.join() , LockSup原创 2020-08-20 11:30:54 · 89 阅读 · 0 评论 -
线程和锁总结(第一周)
1.线程的状态:New 、Runnable 、Blocked 、Waiting 、Timed Waiting 、Terminatedpublic class TestThreadState { public static void main(String[] args) throws InterruptedException {// thread1 执行start方法之前的状态:NEW// thread1 执行run 方法的状态:RUNNABLE//原创 2020-08-15 18:13:27 · 127 阅读 · 1 评论 -
java并发-JUC包下的原子类
分类原子类的类结构API根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;对象的属性修改类型: AtomicIntege转载 2020-08-14 11:08:15 · 209 阅读 · 0 评论 -
二叉树
二叉树如下图所示:列出它的前序,中序,后序前序:根–>左–>右41,20,11,29,32,65,50,91,72,99中序: 左–>根–>右11,20,29,32,41,50,65,72,91,99后序: 左–>右–>根11,32,29,20,50,72,99,91,65,41代码实现方法如下:1.定义TreeNode类import lombok.Data;@Datapublic class TreeNode { private in原创 2020-08-03 22:17:25 · 114 阅读 · 0 评论 -
java 2020-06-29T08:48:00.000+0000 转换成正常时间格式的解决办法
在数据库里的时间格式为: DATE 类型2020-05-12 13:30:00接口返回时,格式变成了2020-05-12T13:30:00.000+0000解决方法:新建 DateJsonSerializerimport com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databi原创 2020-07-06 15:34:17 · 4457 阅读 · 2 评论 -
xshell使用root用户登录Ubuntu的配置修改
设置root密码以普通用户登录系统,执行sudo passwd root设置root用户密码设置之后,执行 su root 命令,输入刚设置的密码,即可成功切换到root用户,密码设置成功查看系统ssh 服务(1)查询系统是否开启了ssh服务(2)若没有开启,尝试执行 /etc/init.d/ssh start命令(3)若没有该命令则表明没有安装openssh-serv...原创 2020-05-06 13:38:11 · 992 阅读 · 0 评论 -
dubbo 拦截入参
创建 dubbo 的filter(com.alibaba.dubbo.rpc.Filter)import com.alibaba.dubbo.common.Constants;import com.alibaba.dubbo.common.extension.Activate;import com.alibaba.dubbo.rpc.*;import com.alibaba.dubb...原创 2020-04-28 16:06:53 · 668 阅读 · 0 评论 -
BeanUtils.copyProperties() 所有的空值不复制
第一种情况: 所有为空值的属性都不copy直接上代码吧~public class UpdateUtil { /** * 所有为空值的属性都不copy * * @param source * @param target */ public static void copyNullProperties(Object source, ...原创 2020-04-03 16:33:16 · 7326 阅读 · 0 评论 -
工作总结(Third month)
yml 中 的 “—” 表示集合ports: - name: http containerPort: 7800 protocol: TCP - name: dubbo containerPort: 20880 protocol: TCP2.properties中的集合#Listgarfield.nameList[0]=aaagarfi...原创 2020-04-03 14:50:54 · 458 阅读 · 0 评论 -
返回所有的系统环境变量
public static Map<String, String> getEnv() { Map<String, String> map = new HashMap(); Process p = null; try { p = Runtime.getRuntime().exec("cmd /c set"...原创 2020-03-30 11:14:26 · 190 阅读 · 0 评论 -
工作总结(Second Month)
java.sql.SQLSyntaxErrorException: ORA-01950: 对表空间 ‘SYSTEM’ 无权限解决方法:a. 找个系统管理员的账号,登录上来;b. 执行 Grant dba to knowledge; {knowledge == 要给权限的用户}Oracle 日期的比较 to_date(‘时间’,‘yyyy-mm-dd hh24:mi:ss...原创 2019-12-31 17:19:31 · 133 阅读 · 0 评论 -
maximum number of expressions in a list
Oracle 数据库执行SQL时报错,提示 maximum number of expressions in a list (列表中的最大表达式数为 1000),这个错误的意思是指参数个数超过了1000解决办法:新建工具类:import java.util.ArrayList;import java.util.Collection;import java.util.List;imp...原创 2019-12-12 19:27:00 · 859 阅读 · 0 评论