java
GodSure0914
这个作者很懒,什么都没留下…
展开
-
redis缓存击穿/穿透/雪崩面试回答
当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。我们当时使用的是redisson实现的布隆过滤器。原创 2023-10-24 06:00:00 · 501 阅读 · 1 评论 -
java-List复制的浅拷贝与深拷贝
java List的深拷贝与浅拷贝原创 2023-05-08 18:33:51 · 434 阅读 · 1 评论 -
策略模式(进阶版)
策略模式普拉斯原创 2023-04-11 15:51:01 · 133 阅读 · 0 评论 -
RestTemplate多个认证信息Authorization问题
日常踩坑原创 2022-06-20 09:59:15 · 1014 阅读 · 0 评论 -
RestTemplate的@LoadBalance注解
先简单记一记 后续补充原创 2022-06-10 15:36:57 · 1742 阅读 · 0 评论 -
Java-RSA加解密工具类(包含分段加解密)
import kafka.log.Log;import lombok.extern.slf4j.Slf4j;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;import java.security.*;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import j原创 2022-05-04 09:02:34 · 1669 阅读 · 1 评论 -
java-ApplicationContextAware接口的作用
Aware接口的Bean在被初始之后,可以取得一些相对应的资源。Aware接口本身并不具备什么功能,一般是用于子类继承后,Spring上下文初始化bean的时候会对这个bean传入需要的资源。例如ApplicationContextAware接口,可以在Spring初始化实例 Bean的时候,可以通过这个接口将当前的Spring上下文传入。当一个类实现了这个接口(ApplicationContextAware)以后,这个类就能够方便得到ApplicationContext中的全部bean。换句话说,就原创 2022-03-25 09:00:36 · 1235 阅读 · 0 评论 -
java-单例模式双重检测和枚举实现
双重检测实现package com.designmodel.single;import java.util.concurrent.atomic.AtomicLong;/*** @description: 单例模式-双重检测* @fileName: DoubleLoad.java* @author: Sure* @createAt: 2022/3/21 16:46* @updateBy: Sure* @remark: */public class DoubleLoad { //原创 2022-03-24 11:10:47 · 232 阅读 · 0 评论 -
RestTemplate 添加请求池及相关设置
目前(4.2.6.RELEASE)的 RestTemplate 主要有四种 ClientHttpRequestFactory 的实现,它们分别是:基于 JDK HttpURLConnection 的 SimpleClientHttpRequestFactory基于 Apache HttpComponents Client 的 HttpComponentsClientHttpRequestFactory基于 OkHttp 2(OkHttp 最新版本为 3,有较大改动,包名有变动,不和老版本兼容)的 Ok原创 2022-03-21 11:33:15 · 826 阅读 · 0 评论 -
java-通过反射实现比较两个对象不同的字段
import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.BeanUtils;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import org.springframework.util.Obj原创 2022-02-14 07:30:00 · 837 阅读 · 0 评论 -
java-接口和抽象类
1. 抽象类和接口的语法特性抽象类不允许被实例化,只能被继承。它可以包含属性和方法。方法既可以包含代码实现,也可以不包含代码实现。不包含代码实现的方法叫作抽象方法。子类继承抽象类,必须实现抽象类中的所有抽象方法。接口不能包含属性,只能声明方法,方法不能包含代码实现。类实现接口的时候,必须实现接口中声明的所有方法。2. 抽象类和接口存在的意义抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决原创 2022-01-07 09:47:56 · 315 阅读 · 0 评论 -
java-封装、继承、抽象、多态
关于封装特性封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如 Java 中的 private、protected、public 关键字。封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。关于抽象特性封装主要讲如何隐藏信息、保护数据,那抽象就是讲如何隐藏方法的具体实现,让使用者只需要关心方法提供了哪些功能,不需要知道这些功能是如.原创 2022-01-07 09:24:52 · 150 阅读 · 0 评论 -
java-字符串转二维码图片返回base64
package com.msun.middle.aggregate.patient.server.comm.util;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.WriterException;import com.google.zxing.common.Bi原创 2021-12-24 23:19:13 · 531 阅读 · 0 评论 -
java-自定义方法注解实现AOP面向切面编程
首先定义注解类import java.lang.annotation.*;/*** @description: 保存或者修改字典权限判断注解* @fileName: CommDictValidateAspect.java* @author: Sure* @createAt: 2021/12/13/013 16:14* @updateBy: Sure* @remark: */@Target({ElementType.METHOD})@Retention(RetentionPolicy.R原创 2021-12-14 11:17:09 · 2626 阅读 · 0 评论 -
java BigDecimal List求和
BigDecimal totalPrice=list.stream().map(DictRegisterClassVsChargeVO::getPriceFirst).reduce(BigDecimal.ZERO, BigDecimal::add);原创 2021-11-26 16:12:05 · 1579 阅读 · 0 评论 -
Java-判断两个list忽略顺序是否相等的最简单粗暴的方法
使用Apache Commons工具类List list1 = Arrays.asList(1, 2, 3);List list2 = Arrays.asList(3, 1, 2);System.out.println(CollectionUtils.isEqualCollection(list1, list2)); //true原创 2021-11-11 18:11:30 · 1241 阅读 · 1 评论 -
java-雪花算法生成唯一id
package com.sure.test.study;/*** @description: 雪花算法demo* @fileName: SnowflakeIdWorker.java* @author: Sure* @createAt: 2021/7/22/022 15:02* @updateBy: Sure* @remark: */public class SnowflakeIdWorker { /** 开始时间截 (这个用自己业务系统上线的时间) */ private f原创 2021-11-08 14:55:12 · 250 阅读 · 0 评论 -
java-cxf调用webservice
需要引入cxf依赖<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.2.7</version> </dependency>public stati原创 2021-11-05 14:34:44 · 557 阅读 · 2 评论 -
java-map遍历
//遍历mapfor (Map.Entry<String, Object> entry : holidayMap.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }原创 2021-10-29 11:23:15 · 79 阅读 · 0 评论 -
java策略模式解决支付问题,消除if、else,代码可运行
策略模式解决支付问题1.业务场景二.解决方案三级目录1.业务场景支付方式有支付宝支付、微信支付、网银支付等等,如果在代码中通过不断的写if-elseif去实现的话,虽然看起来更直观,但实际上不利于后续的扩展和维护,后期如果由于业务需要使用混合支付的话,就需要改动if-elseif的逻辑,违反了开闭原则,代码如下:String payTypeCode = "WX";if ("WX".equals(payTypeCode)){ System.out.println("微信支付");}else原创 2021-10-25 09:32:33 · 804 阅读 · 3 评论 -
idea小功能将java冗余代码抽成方法解决代码行数超限
业务场景:公司代码规范规定单个方法代码行数不超过80行,代码中写了一堆set方法增加了行数解决办法:1.在类里面写方法对参数进行赋值,实现类调用 类名.方法名()方法2:idea自带将代码抽成方法小功能:...原创 2021-09-05 16:18:44 · 4579 阅读 · 4 评论 -
Java集合转换报错: No property named “xxx“ exists in source parameter(s). Did you mean “empty“?
MapStruct原创 2021-09-01 08:32:22 · 11690 阅读 · 7 评论 -
Java-stream实现实体类集合根据某个字段去重
//过滤出有效的卡信息(根据患者id去重)List effectList = patientServerVOList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(PatientServerVO::getPatId))),ArrayList::new));原创 2021-08-25 17:08:01 · 1462 阅读 · 0 评论 -
JSON.parseObject新玩法-类转换实现Map<字段名,字段值>的形式
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-07-27 14:30:17 · 2832 阅读 · 0 评论 -
Java并发09-stop方法和suspend方法
stop方法会终止所有未结束的方法,包括run方法。当线程被终止时,立刻释放被它锁住的所有对象的锁这会导致对象处于不一致的状态(转账转了一半被终止)suspend方法不会破坏对象,但是对于持有锁的线程,调用suspend方法并不会释放锁,如果调用suspend方法的线程试图获得同一个锁,那么程序死锁。被挂起的线程等待被恢复,将其挂起的线程等待获得锁如果想安全地挂起(暂停)一个线程,需要引入一个变量suspendRequested,并在run方法的安全地方测试它,安全指的是同步块之外。当该线程发现原创 2021-07-15 08:36:57 · 506 阅读 · 0 评论 -
Java并发08-锁的测试与超时、读写锁
锁的测试与超时、读写锁1.锁的测试与超时2.读写锁1.锁的测试与超时线程在调用lock方法获得另一个线程所持有的锁时,会发生阻塞。应该更加谨慎地申请锁,tryLock方法视图申请一个锁,在成功获得锁之后返回true;否则立刻返回false,并且线程不会进入阻塞状态if(lock.tryLock()){…}else{}可以调用tryLock时,使用超时参数tryLock(1000,TimeUnit.MILLISECONDS)TimeUnit是一个枚举类型,可以取的值lock 方法在原创 2021-06-24 09:37:53 · 518 阅读 · 0 评论 -
Java并发07-ThreadLocal
在线程之间共享变量是存在风险的,有时可能要避免共享变量,使用ThreadLocal辅助类为各个线程提供各自的实例。例如有一个静态变量public static final SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);如果两个线程同时调用sdf.format(…)那么可能会很混乱,因为sdf使用的内部数据结构可能会被并发的访问所破坏。当然可以使用线程同步,但是开销很大;或者也可以在需要时构造一个局部SImpleDateFormat原创 2021-06-23 14:23:57 · 216 阅读 · 0 评论 -
Java教你简单几步创建自定义注解实现参数校验,自己写注解丰衣足食~~~
业务场景:org.hibernate.validator包下的@Range(min = 0,max = 1,message = “”)注解的校验范围是:0 =< param =< max而我们需要的范围不包括0,也就是大于0,因为这个类不参与业务逻辑所以拿出来单独用if else判断比较冗余,所以打算自己写个注解来满足业务要求,废话少说,下面开始实现。1.创建一个注解类(作用于字段)ps:我把需要导的包也一块放出来了,没有这些包的去maven仓库下载相应的依赖import javax原创 2021-06-18 08:29:43 · 2044 阅读 · 2 评论 -
Java并发06-volatile关键字
volatile关键字作用是为成员变量的同步访问提供了一种免锁机制,如果声明一个成员变量是volatile的,那么会通知编译器和虚拟机这个成员变量是可能其他线程并发更新的会保证从线程的共享内存加载到线程工作内存是最新的,不会从线程工作缓存中读值主要是为了安全地读取这个值volatile变量不具有原子性jvm运行时刻内存的分配:其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变原创 2021-06-08 09:42:59 · 101 阅读 · 2 评论 -
有了这套Java聊天室源码,妈妈再也不用担心我学不会Netty了~
声明:代码非本人所写,好久之前的库存了,仅用于学习~聊天室分两种方式实现:一种是纯Nio另一种是Netty实现,建议先学习Nio再看Netty部分,毕竟Netty就是基于Nio的。运行方法:先运行server,然后运行客户端,可以复制多个客户端测试哦~...原创 2021-06-04 08:37:03 · 149 阅读 · 0 评论 -
Java并发05-线程同步(万字详解建议收藏)
线程同步1.使用场景1.使用场景1.使用场景1.使用场景多个线程访问同一个资源,多个线程可能会产生不一致。为了解决此问题,需要线程同步。调用某个方法时,该资源是被一个线程独占,不能被其他线程访问。不能出现一个线程在访问一个资源的时候被另一个线程打断MyThread m = new MyThread();Thread t1 = new Thread(m);Thread t2 = new Thread(m);t1.start();t2.start();这是两个线程,如果run方法中调用了一个原创 2021-06-02 08:33:05 · 212 阅读 · 2 评论 -
Java两个类或者集合之间相互转换最简单实用的两种方法,拒绝挨个set让你的代码变简洁~~~
方法一:当两个类字段完全一样的情况下可以使用org.springframework.beans包下的BeanUtils.copyProperties方法。//初始化需要接受参数的类 ConfigQueryDTO dto = new ConfigQueryDTO(); //第一个参数为原始类,第二个是我们刚才声明的需要转换的类 //这种方法只能转换两个类里面相同参数类别和名称的字段 BeanUtils.copyProperties(queryDTO, dto);通过源码我们可以看到这种方法是支持原创 2021-05-28 09:29:12 · 4638 阅读 · 1 评论 -
Java并发04-守护线程及未捕获异常处理器~
1.守护线程可以通过调用将线程转换为守护线程守护线程的唯一用途是为其他线程提供服务。比如计时线程,它定时发送信号给其他线程当只剩下守护线程时,JVM就退出了。守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断2.未捕获异常处理器线程的run方法不能抛出任何异常。但是不被检测的异常会导致线程终止不需要任何的catch子句来处理可以被传播的异常;在线程死亡之前,异常可以被传递给一个用于未捕获异常的处理器处理器实现了Thread.UncaughtE原创 2021-05-25 09:36:53 · 318 阅读 · 0 评论 -
Java并发03-线程的优先级Priority
优先级越高,获得Cpu执行的时间片就会越多Thread.MAX_PRIORITYThread.MIN_PRIORITYThread.NORM_PRIORITY示例:public class test { public static void main(String[]args){ Thread t1 = new Thread(new Thread1()); Thread t2 = new Thread(new Thread2()); t1.setPriority(Thread.NO.原创 2021-05-21 09:02:06 · 175 阅读 · 0 评论 -
比Navicat还强大的数据库连接工具DBeaver7.1.0企业版xx版分享
今天看到一个大哥在用工具操作数据库,发现他用的工具比我的Navicat15(之前用的12后来下了个15的破解版发现没多大区别)要高大上很多,作为一个后端程序员,在B格上绝对不能输,“哥,软件名给俺说一下呗~~”DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。由于 DBeaver 基于 Java 开发,可以运行在各种操作系统上,包括:Windows、Linux、macOS 等。DBeaver 采用原创 2021-05-18 09:35:15 · 2013 阅读 · 7 评论 -
java并发02-线程的状态五千字详解,走过路过不要错过!!!
线程就是内存中的一个对象,线程并不是调用start方法之后就立刻开始执行而是表示准备好了(Cpu可能正在执行其他线程),应该进行排队。当Cpu有时间片了,就分配给这个线程开始执行,如果到时间了,那么停止运行,重新排队。重复这个过程,直至运行完毕。如果运行中出现状况,那么会停止运行,进入阻塞状态,直至解除才能进入就绪状态,准备排队。如果没有解除那么就会中止。简言之就是 创建(new Thread) 就绪(start()) 执行(run()) ( 阻塞 解除阻塞 ) 就绪执行反复循环...原创 2021-05-14 10:48:04 · 122 阅读 · 2 评论 -
java并发01-线程的基本概念(八千字详解)
线程的基本概念原创 2021-05-13 09:31:24 · 150 阅读 · 0 评论 -
震惊,Tesla后台代码竟然是用java写的(类及网络请求学习)!!!
package com.sure.tesila;import lombok.Data;import java.util.Date;import java.util.HashMap;@Datapublic class TeSiLa { /** * 车辆型号 */ private String model; /** * 车速 */ private double speed; /** * 前方是否有车或障碍物原创 2021-05-10 11:23:54 · 908 阅读 · 0 评论 -
PostgreSQL学习02-调优必备之查看sql的执行计划(简单查看)
PostgreSQL学习01-常见SQL写法实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表、怎样使用索引的,因此,我们能感知到的就只有sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题。但是当数据规模增大,如千万、亿的时候,我们运行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度。所以,查询优化和索引也就显得很重要了。示例代码:Seq Scan on pg_proc(c原创 2021-04-29 08:39:03 · 1052 阅读 · 0 评论 -
给大家推荐一个非常非常非常好用的java轻量级框架-Nutz永远滴神
前段时间离职来到了现在的新公司,奔向了光明的未来,唯一让我留恋的就是原本使用的框架—Nutz了,这个框架相对于现在的mybatis(过段时间可能会“mybatis真香”)来说实在实在是太省事太方便了,比如按某个字段查询数据库信息,如果是mybatis的话需要写类似于下面这种标签并且映射mapper接口才能实现:但是,在Nutz里面,下面一句话就能返回我们想要的结果:List people = dao.query(Person.class, Cnd.where(“name”, “like”, “P%”)原创 2021-04-27 08:47:03 · 2164 阅读 · 8 评论