
Java
文章平均质量分 68
fox_初始化
这个作者很懒,什么都没留下…
展开
-
Java+selenium+chrome+linux/windows实现数据获取
对在进行业务数据获取或者自动化测试时,通常会使用模拟chrome方式启动页面,然后获取页面的数据。在本地可以使用windows的chromedriver.exe进行打开chrome页面、点击等操作。在linux 下通常使用无界面无弹窗的方式进行操作的实现方案。原创 2024-09-09 16:25:09 · 1310 阅读 · 0 评论 -
Redis分布式锁
redis分布式锁原创 2022-11-21 18:49:00 · 530 阅读 · 0 评论 -
Kafka消费者不消费数据
kafka消费者停止消费原创 2022-09-08 15:02:39 · 8546 阅读 · 0 评论 -
SpringBoot 项目瘦身 分离lib
SpringBoot 项目瘦身 分离lib原创 2021-12-14 13:37:42 · 1396 阅读 · 6 评论 -
并发安全笔记6——线程通信
线程之间可以通过写作方式完成一个任务,这就需要线程之间互相通信。当多个线程操作同一共享资源的时候,需要彼此通信告知状态避免资源争夺。线程通信方式有共享内存:volatile 通过volatile让线程之间对共享资源的修改可见 消息传递:wait/notify/join 线程之间可以通过消息来进行彼此通信 管道流:管道输入/输出流的形式主要了解消息传递,也就是wait/notify/joinwait/notify是一对都不陌生的线程通信方法,存在于Object类中public clas原创 2021-09-16 17:56:53 · 228 阅读 · 0 评论 -
并发安全笔记5——Lock
Lock是J.U.C中提供解决线程同步问题的实现方式Lock是一个接口public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock();原创 2021-09-15 16:59:15 · 179 阅读 · 0 评论 -
并发安全笔记4——JMM
JMMJMM是Java内存模型JMM本质上是围绕 原子性、有序性、可见性展开的。JVMJVM是Java虚拟机模型.JVM的重点是运行数据区,所有写出来的程序都会加载到这里,然后运行。因为JVM的缘故使得Java可以实现跨平台运行,一次编译处处运行。那么如何保证跨平台也可以实现线程安全的呢?就是靠JMM了。所以JMM是一种内存模型的规范,屏蔽了操作系统和各种硬件之间的差异。JMM是保证了Java在任何平台下对内存的访问都能保证效果一致的机制和规范。Java内存模型规定了:所有的变量原创 2021-09-14 17:22:14 · 144 阅读 · 0 评论 -
并发安全笔记3——volatile
当我声明两个线程,线程1完成:a = 1;x = b;线程2完成:b = 1;y = a;按正常来说可能发生的结果是:x=0 y=1/x=1 y=1/x=1y=0。从程序上不可能出现x=0 y=0。/** * @author:hubinbin * @date:2021/9/7 */public class VolatileDemo { private static int a, b; private static int x, y; public static...原创 2021-09-08 19:50:45 · 607 阅读 · 0 评论 -
并发安全笔记2——CAS
CASCAS:Compare And Swap 比较并交换synchronized关键字时互斥锁,属于悲观锁,多线程下会有:a.线程竞争锁会有加锁、释放锁导致比较多的上下文切换;b.当锁被占用的时候,其他线程都是挂起对应的,还有一种锁叫乐观锁。多线程访问时并不会加锁,只有修改时才会根据版本号对比,有冲突就自旋重试,保证安全性。Unsafe类中有compareAndSwapObject方法,它通过直接调用本地方法,直接操作内存数据//Object var1 修改对象//long var原创 2021-09-06 16:37:21 · 143 阅读 · 0 评论 -
并发安全笔记1——synchronized
原子性:Synchronized、AtomicXXX、Lock 可见性:Synchronized、volatile 有序性:Synchronized、volatileSynchronized同步锁:排他锁、互斥锁同一时刻只允许一个线程执行。public synchronized void methodA(){ } public void methodB(){ synchronized (this){原创 2021-09-02 17:26:49 · 134 阅读 · 0 评论 -
并发复习笔记
1. tpstps:每秒请求数,就是说服务器在一秒的时间内处理了多少事务数2. qpsqps:每秒请求数,就是说服务器在一秒的时间内处理了多少请求如何支撑高并发硬件资源:CPU、核心数、并行任务数量内存磁盘网卡..软件:CPU->线程:线程是cpu的最小执行单元IO->数据库交互->刷到磁盘,内存/缓存/异步刷盘策略单节点遇到瓶颈,多个计算机组成一个分布计算机多线程技术什么是线程线程是操作系统能调度的最小单元,也是cpu.原创 2021-08-31 16:22:37 · 144 阅读 · 0 评论 -
SPI初试
创建SPI接口创建接口实现类测试类resources下创建META-INF/services,包下创建SPI接口同名文件原创 2021-06-24 14:35:56 · 156 阅读 · 0 评论 -
SpringBoot异步任务阻塞引发JVM调优
一. 背景:新功能上线后异步任务忽然阻塞了,造成所有的任务都在执行中很久都没有结果。而且整个服务接口都很慢。二. 排查过程: 发现报错任务队列已经满了,不能再接受任务 检查后发现,除异步任务外很多定时任务都加了@Async注解,所以给该异步任务新写一个任务池ExecutorTaskPool。 修改后上线,发现会快一点,没有报错,但是依然阻塞。效果不理想。 对比新老版本,发现上线了一个新功能,该功能增加了一个定时任务为每30秒钟执行一次,并且每次都是以线...原创 2021-06-24 14:31:36 · 712 阅读 · 0 评论 -
ES term精确查询问题
背景:同事突然线上除了bug,在测试环境正常上了生产查询不出来数据。因为业务是日志相关,数据入es都是直接放到索引下而不是构建mapping,所以字段A的类型是text,fields是keyword。查询方式使用terms查询。分析:通过_analyze可以看出该此被分词解析成全小写 通过建立一个定义好类型是keyword的字段A查询后发现被分词解析成与值完全一致因此猜测,测试环境的数据应该都是全小写的,所以测试环境正常,生产环境查不到所以将字段后加上....原创 2021-04-07 15:04:29 · 2237 阅读 · 0 评论 -
flyway框架使用异常
1. 背景:使用flyway框架,初始化sql数据2. 异常:3. 解决方案:执行SELECT * from flyway_schema_history可以发现1.0.2错误,所以删除这条数据让框架重新执行这个sql,就正常了原创 2020-06-28 17:27:02 · 313 阅读 · 0 评论 -
linux下启动命令失效
问题. 新的服务起部署了tomcat,打算启动项目,发现命令失效解决方案:启动tamcat;命令:./startup.sh出现如下提示,需要对此目录进行权限设置:-bash: ./startup.sh: Permission denied终端命令:chmod u+x *.sh再次启动./startup.sh出现Tomcat started.启动成功...原创 2020-06-11 13:56:57 · 434 阅读 · 0 评论 -
Spring Cloud +Nacos 热更新
1. 环境:JDK8 SpringCloud 2.2.0 RELEASE Nacos1.1.42. 问题:nacos上的配置文件可以读取到,但是发现不能热更新3. 尝试办法1:在用到配置项的类上都加上注解@RefreshScope 结果 :没有成功 尝试办法2:将@value 注解替换成@NacosValue 结果 :没有成功 尝试办法3:将@value 注解替换成@NacosValue ...原创 2020-06-11 13:54:59 · 4537 阅读 · 0 评论 -
SpringBoot项目idea启动webApplication启动类报错
可以看出没有选择module,找到Environment 查看use classpath of module果然没有选择模块,所以要选上WebApplication类所在模块红色X消实项目正常启动原创 2020-03-13 17:03:00 · 917 阅读 · 0 评论 -
linux下解决tomcat中文乱码问题
转自:https://blog.youkuaiyun.com/m0_37392489/article/details/77683876在tomcat下的conf目录文件夹下server.xml文件中添加useBodyEncodingForURI="true"能很好的解决此类问题的发生。<Connector port="8080"useBodyEncodingForURI="true"red...转载 2019-11-28 16:48:58 · 1371 阅读 · 2 评论 -
Java集合框架整理
1.ArrayList: 1.原理:动态数组 2.初始容量:10 3.扩容:当由于增加数据导致容量不足时,容量会添加上一次容量大小的一半(0.5) 新的容量=“(原始容量x3)/2 + 1 4.线程不安全 5.拥有Iterator 迭代器进行遍历2.CopyOnWriteArrayList 1.原理:动态数组 2.使用lock锁 线程安全 3.add操作时先将...原创 2019-03-12 20:41:14 · 152 阅读 · 0 评论 -
基础算法---合并数组
public class MergeArray { public static void main(String []args){ int[] array1={1,2,3,0,0,0}; int[] array2={0,2,5,6}; int [] array3=mergeArray2(array1,array2,3,3); ...原创 2019-03-18 11:56:35 · 350 阅读 · 0 评论 -
反转Int
public class ReverseInteger { public static void main(String [] agrs){ System.out.println(getRes(-123)); } /** * * @param tergetInt 需反转的整数 * @return * 1.terg...原创 2019-03-18 11:57:46 · 379 阅读 · 0 评论 -
反转String
public class ReverseString { public static void main(String []args){ System.out.print(method("hello 你是")); } public static String method(String str){ int i=0; int ...原创 2019-03-18 11:58:20 · 252 阅读 · 0 评论 -
快排
public class Sort { public static void quickSort(int [] a,int left,int right){ if(left>right) { return; } int i=left; int j=right; ...原创 2019-03-18 12:07:27 · 380 阅读 · 0 评论 -
1到100
public class SumN { public static void main(String []args){ System.out.print(sum(100)); } // static int sum=0; public static int sum(int n){ if(n==1) { retu...原创 2019-03-18 12:07:55 · 172 阅读 · 0 评论 -
2sum
import java.util.HashMap;import java.util.Map;public class TowSum { public static void main(String []args){ int[] nums={2,2,2,12}; int [] res=getIndexs(nums,4); for(in...原创 2019-03-18 12:08:20 · 211 阅读 · 0 评论 -
SpringData+JPA
按照SpringData命名规范1.查询方法:find| read| get开头 + By关键字: 涉及查询条件时,条件属性用关键字连接,要注意的是条件属性首字母大写And,Or,Between,LessThan,GreaterThan,After ,Before,IsNull,IsNotNUll,NotNullLike, NotLike,StartingWith,EndWit...原创 2019-04-30 17:50:34 · 529 阅读 · 0 评论 -
Spring JPA实战反馈
一.定义实体类1.对应的属性名字一定要小写,不然userName会被映射成user_name2.不需要生成新的表配置上添加:#spring.jpa.hibernate.ddl-auto=update3.要注意JPARepository的一系列子类在继承的时候 如:CrudRepository<User, Integer> User:是映射表的实体类,Integer...原创 2019-04-30 17:52:41 · 181 阅读 · 0 评论 -
代理模式
一.静态代理。静态代理常用的如:三层架构。缺点是不符合开闭原则。二.动态代理1.JDK动态代理 (实现InvocationHandler接口,实现invoke方法,被代理的类需要集成一个接口)Proxy是一个工具类,实际上的作用就是动态生成字节码并编译执行新生成的类。这里传入的clzz.getInterfaces() 就是为了获取到接口并且为新生成的类提供生成方法...原创 2019-08-13 18:42:40 · 131 阅读 · 0 评论 -
单例模式
一.单例模式的优缺点:单例模式优点:1.值在内存中只有一个实例,减少内存开销。2.可以避免对资源的多重占用。3.设置全局访问点,严格控制访问。单例模式的缺点:1.没有接口,不易于扩展2.如果要扩展只能修改单例对象,违反开闭原则二.单例模式的实现:1.饿汉式单例特点:将实例在静态代码块中实现,类加载时就创建。缺点:浪费内存空间。2.懒汉式单例...原创 2019-08-07 10:55:49 · 153 阅读 · 0 评论 -
comparison method violates its general contract
遇到了一个很有意思的问题报错 comparison method violates its general contract这是什么原因?因为我判空时,只分别判了o1==null和o2==null。违反了timesort的对称性原则,导致,如果o1和o2都为null的时候,会出现两种返回结果即:o1<o2=1,o1<o2=-1。所以就报了违反对比规则的异常。所以我在判null...原创 2019-08-12 14:47:59 · 253 阅读 · 0 评论 -
原型模式
原型模式的作用,简化new一个对象的繁琐复杂的过程。BeanUtils.copy()JSON.parseObject()都是原型模式。返回结果false,可以看出t1t2的地址不同,只是将里面的属性值复制给了t2,但真的是这样么?发现,当改变t2的classmate的时候,t1也随之改变了。这里引出一个概念,浅克隆与深克隆。浅克隆与深克隆的区别在于非基本对象的赋值...原创 2019-08-12 18:06:39 · 111 阅读 · 0 评论 -
线程学习总结
1.Thread 1.实现了Runnable接口,是类 2.是多线程的实现方式2.Runnable 1.接口,只有一个run方法 2.是多线程的实现方式3.Thread与Runnable的区别 1.Thread是类,Runnable是接口 2.Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象...原创 2019-03-14 14:14:57 · 208 阅读 · 0 评论