JAVA
Q z1997
这个作者很懒,什么都没留下…
展开
-
Java判断Class 是否是基本类型
Java判断Class 是否是基本类型。原创 2022-10-27 21:26:33 · 1675 阅读 · 0 评论 -
数据库单字段存储多个标签(位移操作)
在上周的开发中看到了这样的一个问题一个员工有多个资质如资质1=监理,2=安全员,4=项目经理,8=技术员,16=特种作业人员,32=劳务人员李白1=监理4=项目经理一般我们的解决方式有以下两种方案1没有使用的原因是因为这个资质可能会频繁的增加修改就要频繁的改表结构了数据量一大改表结构就不是一个好的操作方法2这里没有使用的原因就是这个本事就关联表过多了要不就要2次请求数据库。............原创 2022-07-31 20:43:59 · 1311 阅读 · 0 评论 -
类的加载概述
我们编写的“.java”扩展名的源代码文件中存储着要执行的程序逻辑,这些文件需要经过java编译器编译成“.class”文件,".class"文件中存放着编译后虚拟机指令的二进制信息。当需要用到某个类时,虚拟机将会加载它,并在内存中创建对应的class对象,这个过程称之为类的加载。一个类的生命周期从类被加载、连接和初始化开始,只有在虚拟机内存中,我们的java程序才可以使用它。整个过程如下图所示: 当Java程序中需要使用到某个类时,虚拟机会保证这个类已经被加载、连接和初始化。而连接又包含验证、原创 2022-06-05 17:34:56 · 171 阅读 · 0 评论 -
简单实现数据库链接池
简单实现的数据库连接池原创 2022-06-04 22:37:32 · 98 阅读 · 0 评论 -
final 原理
理解了 volatile 原理,再对比 final 的实现就比较简单了字节码发现 final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障,保证在其它线程读到它的值时不会出现为 0 的情况不用使用final (低于short)使用final(低于short)加 final 使用常量池(高于short)不加 final 使用常量池(高于short)...原创 2022-06-04 22:34:58 · 159 阅读 · 0 评论 -
使用Servlet和Filter打印所有请求和响应日志
在之前请求日志和响应日志一般都是自定义注解 + Spring 的AOP实现, 但是这样有的时候新写的接口会忘记加日志注解了 后来使用Filter 来进行请求日志的打印 响应日志 使用Spring的 @ControllerAdvice 注解 实现, 但是领导说了 为了使日志功能更加简单使用的技术因越少越好, 后来研究了一下先使用使用Servlet和Filter打印所有请求和响应日志. 使用JDK自带的SPI 来实现自定义的日志输出.GitHub地址主要代码:package com.qz1997.qz原创 2022-05-11 17:16:23 · 1474 阅读 · 2 评论 -
Java漏洞桶简单实现
Java漏洞桶代码:import lombok.Getter;/** * 漏桶算法: * * @author zhangqi * @date 2022/5/9 16:18 */@Getterpublic class Funnel { /** * 漏斗容量 */ private int capacity; /** * 漏水速度 */ private double leakingRate; /**原创 2022-05-09 17:12:50 · 1015 阅读 · 2 评论 -
Java令牌桶简单实现
令牌桶简单实现代码import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;/** * 令牌桶简单实现 * * @author zhangqi * @date 2022/5/9 15:47 */public class TokenLimiter { /** * 令牌 */原创 2022-05-09 16:16:57 · 2892 阅读 · 2 评论 -
Java的四种引用
强引用(Strong Reference)强引用就是我们经常使用的引用,其写法如下: Object o=new Object(); // 强引用当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下: o=null; // 帮助垃圾收集器回收此对象复制代码显式地设置o为null,或超出对象的生命周期范围,则gc认为该对象不存在引用,原创 2022-05-09 15:18:14 · 99 阅读 · 0 评论 -
JAVA与JavaScript递增ID压缩与解压
上周代码分享中的一个代码,因业务需要要将一组数据库自增的id, 思路就是将id排序,取最小的为基数, 取剩下所有数与基数的差值 新建一个数组将差值的下标改为1 其他默认为0 将这个数组 拆分4个一组 转换为16进制 .压缩效果如下:压缩后 = 10zd3e9fffffffffffffffffffffffcID个数 = 104解压后 = [10,11,13,16,17,18,19,20,22,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,4原创 2022-05-05 09:40:19 · 548 阅读 · 0 评论 -
java多返回值javafx.util.Pair
源码:/* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javafx.util;import java.io.Serializable;import javafx.beans.NamedArg; /** * <原创 2022-04-23 22:29:06 · 1934 阅读 · 0 评论 -
Spring Boot 内置工具类
最近发现同事写了不少重复的工具类,发现其中很多功能,Spring 自带的都有。于是整理了本文,希望能够帮助到大家!断言断言是一个逻辑判断,用于检查不应该发生的情况Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行// 参数 message 参数用于定制异常信息。void no原创 2022-03-03 11:34:29 · 69 阅读 · 0 评论 -
Java SPI
SPI本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块原创 2022-03-02 09:48:50 · 70 阅读 · 0 评论 -
Java的深浅拷贝
Java的深浅拷贝Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a; B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部 数据。Java中的对象拷贝主要分为:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。先介绍一点铺垫知识:Java中的数据类型分为原创 2022-01-02 14:19:01 · 163 阅读 · 0 评论 -
Java泛型
使用泛型的优点 Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。详细的说:类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。消除强制类型转换。泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。潜在的原创 2021-12-26 11:08:33 · 182 阅读 · 0 评论 -
查看Java进程信息与GC情况
# 查询Java 进程jps -ljps -lvm# 查看Java GC 情况jstat -gcutil pid 5000 参数说明如下: S0: 新生代中Survivor space 0区已使用空间的百分比 S1: 新生代中Survivor space 1区已使用空间的百分比 E: 新生代已使用空间的百分比 O: 老年代已使用空间的百分比 P: 永久带已使用空间的百分比 YGC: 从应用程序启动到当前,发生Yang GC 的次数 Y原创 2021-12-21 15:48:06 · 975 阅读 · 0 评论 -
比较两个字符串的相似度
/** * 编辑距离的算法 * <br/> * 算法原理: * 该算法的解决是基于动态规划的思想,具体如下: * 设 s 的长度为 n,t 的长度为 m。如果 n = 0,则返回 m 并退出;如果 m=0,则返回 n 并退出。否则构建一个数组 d[0..m, 0..n]。 * 将第0行初始化为 0..n,第0列初始化为0..m。 * 依次检查 s 的每个字母(i=1..n)。 * 依次检查 t 的每个字母(j=1..原创 2021-12-21 12:15:29 · 728 阅读 · 0 评论 -
Google Java
原创 2021-10-06 16:03:18 · 88 阅读 · 0 评论 -
Java服务性能测试与监控
Java服务性能测试与性能调优前言JVM 和 Tomcat参数对系统的承载能力有一定的影响, 但是主要影响性能的还是我们写的代码与数据库的SQL, 所以代码优化和SQL优化才是我们优化的重点性能测试工具使用 Apache-JMeter-5.0新建线程组新建Http请求添加请求头/cookie配置编辑HTTP请求添加查看结果配置线程组 下图配置相对与 100 * 100 = 10000配置完成运行与结果清除查看结果原创 2021-08-22 17:11:38 · 787 阅读 · 0 评论 -
Java注解 ElementType
java中元注解(用来标识注解的注解)有四个: @Retention @Target @Document @Inherited; @Retention:注解的保留位置 @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, @R原创 2021-08-12 10:47:48 · 167 阅读 · 0 评论 -
缓存带锁更新方案(细颗粒锁)
缓存带锁更新方案(细颗粒锁)强一致性,更新数据库之后主动淘汰缓存,读请求更新缓存避免缓存雪前,更新缓存的过程需要进行同步控制,同一时间只允许一个请求访问数据库,为了保证数据的一致性还要加上缓存失效时间;这里就是演示一下思路package cacheupdate;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.lo原创 2021-05-01 14:34:18 · 276 阅读 · 0 评论 -
Java动态代理Cglib
Cglib经测试,jdk创建对象的速度远大于cglib,这是由于cglib创建对象时需要操作字节码。cglib执行速度略大于jdk,所以比较适合单例模式。另外由于CGLIB的大部分类是直接对Java字节码进行操作,这样生成的类会在Java的永久堆中。如果动态代理操作过多,容易造成永久堆满,触发OutOfMemory异常。spring默认使用jdk动态代理,如果类没有接口,则使用cglib。代码:服务package proxy.cglib;/** * @Description: <br原创 2021-05-01 13:58:20 · 154 阅读 · 2 评论 -
动态代理(JDK Proxy)
代理模式代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式. 为了对外开放协议,B往往实现了一个接口,A也会去实现接口. 但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法. A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情. Spring AOP就是使用了动态代理完成了代码的动态“织入”.使用代理好处还不止这些,一个工程如果依赖另一个工程给的接口,但是另一个工程的接口不稳定,经常变更协议,就可以使用一个代理,接口变原创 2021-05-01 12:20:05 · 218 阅读 · 1 评论 -
反射
定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。当然,也不是所有的都适合反射,之前就遇到一个案例,通过反射得到的结果与预期不符。阅读源码发现,经过层层调用后在最终返回结果原创 2021-04-17 19:31:37 · 128 阅读 · 0 评论