JAVA基础
狂野弘仁
这个作者很懒,什么都没留下…
展开
-
java项目的大小衡量标准
IDEA统计项目代码量转载 2022-11-18 11:43:32 · 1722 阅读 · 1 评论 -
文件预览服务器kkfileview安装部署(linux 版)
文件预览服务器kkfileview安装部署(linux 版)原创 2022-11-18 11:30:03 · 5051 阅读 · 0 评论 -
JedisCluster分布式锁
private volatile String unlockSha1 = “”;private static final Long UNLOCK_SUCCESS_CODE = 1L;private static final String LOCK_SUCCESS_CODE = "ok";private static final String UNLOCK_LUA;private static final String BIZ = "redislock:biz:";private ThreadLo原创 2021-10-26 15:01:17 · 1260 阅读 · 0 评论 -
Redis的四种模式 单机 主从 哨兵 集群
概述Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。它有三个主要特点,使其优越于其它键值数据存储系统:● Redis 将其数据库完全保存在内存中,仅使用磁盘进行持久化。● 与其它键值数据存储相比,Redis 有一组相对丰富的数据类型。● Redis 可以将数据复制到任意数量的从机中。...原创 2021-01-28 17:23:33 · 488 阅读 · 0 评论 -
JVM常用调优配置参数
开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值;-XX:MaxnewSize:表示新生代可被分配的内存的最大上原创 2020-12-30 18:12:18 · 452 阅读 · 1 评论 -
java jdk 8 新功能 stream实现各种list操作
首先定义1个Apple对象:public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) {转载 2020-12-24 11:54:24 · 403 阅读 · 0 评论 -
mysql出现group by xxx错误
Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by需执行以下sqlSET sql_mode=原创 2020-12-15 18:07:22 · 203 阅读 · 0 评论 -
java数据格式校验,邮箱,手机号,身份证,邮政编码,url
/** * 邮箱验证 */ public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; /** * 座机验证 */ public static final String REGEX_TEL = "^\\d{3,4}-?\\d{7,9}$"; .原创 2020-12-10 17:54:58 · 761 阅读 · 0 评论 -
java多线程工具类,多线程实现
public static BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100); // 固定为100的线程队列 public static ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 30, 4, TimeUnit.HOURS, queue); /* * * 实现 Runnable 接口类 */.原创 2020-12-10 17:46:06 · 151 阅读 · 0 评论 -
java 实现深度拷深度转换Bean<->Bean
<!--dozer--> <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.2.0</version> </dependency> /**原创 2020-12-10 17:44:33 · 203 阅读 · 0 评论 -
java读取文件、配置文件
private static final String PATH_PREFIX = System.getProperty("user.dir") + File.separator + "config/json/"; private JsonLoadUtils() { } /** * 根据config/json中的文件名称加载文件 * * @param fileName 文件名称 * @return */ publ...原创 2020-12-10 17:39:38 · 210 阅读 · 0 评论 -
http模拟webservice请求并获取参数示例
org.apache.httpcomponents httpclient 4.5.6 org.apache.cxf cxf-spring-boot-starter-jaxws 3.2.4import net.sf.json.JSONObject;import org.apache.cxf.endpoint.Endpoint;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClien...转载 2020-12-10 10:52:13 · 801 阅读 · 0 评论 -
map 排序按KEY VALUE
/** * java 8 version 按value排序 * * @param map 待排序的map * @param isDesc 是否降序,true:降序,false:升序 * @return 已排序map */ public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> ma原创 2020-08-12 15:32:36 · 163 阅读 · 0 评论 -
JAVA 计算百分比
/** * 计算百分比 默认保留两位 * @param diliverNum 被除数 * @param queryMailNum 除数 * @return */ public static String percentageStr(double diliverNum,double queryMailNum){ return percentageStr(diliverNum,queryMailNum,2); } /**原创 2020-08-12 14:30:46 · 997 阅读 · 0 评论 -
正则提取括号中的内容{} () []
提取{}内容public static Pattern pattern = Pattern.compile("(?<=\{)[^\}]+");public static void main(String[] args) {String content = “${name} ${value} “;Matcher m = pattern.matcher(content);while (m.find()) {System.out.println(” find: " + m.group() );原创 2020-08-07 17:20:43 · 1870 阅读 · 0 评论 -
微信公众号域名验证路径正则表达式
@Controller@RequestMapping("/")@PropertySource(value = “classpath:application_mp_verify.properties”)@ConfigurationProperties(prefix = “mp”)public class WxMpVerifyConfigController {private Map<String, String> verify = new HashMap<>();priva原创 2020-07-13 16:48:59 · 544 阅读 · 0 评论 -
java线程池大小设置
一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池大小设置为2N+1这个说法到底是不是正确的呢?其实这是极不正确的。那为什么呢?首先我们从反面来看,假设这个说法是成立的,那我们在一台服务器上部署多少个服务都无所谓了。因为线程池的大小只能服务器的核数有关,所以这个说法是不正确的。那具体应该怎么设置大小呢?假设这个应用是两者混合型的,其中任务即有 CPU 密集,也有 IO 密集型的,那么我们改怎么原创 2020-07-10 06:39:17 · 510 阅读 · 0 评论 -
索引结构B+树
m阶B树具有如下特征:1.根结点至少有两个子女。2.每个中间节点都至少包含ceil(m / 2)个孩子,最多有m个孩子。3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m。4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。B+树与B树的区别有k个子结点的结点必然有k个关键码(有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点原创 2020-07-07 20:49:05 · 930 阅读 · 0 评论 -
java中对象、成员变量、静态变量、方法的内存分配
java中内存主要包含4块,heap(堆内存)stack(栈内存)data segment(静态变量或是常量存放区)codesegment(方法区).堆内存中存放的是new出的对象,new出的对象只包含成员变量。栈内存中:存放的是局部成员变量。对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。静态、常量区:存放的是静态变量(类变量)或是常量。方法区:存放的是对象的方法。因此即使new出多个对象也是只是存在一个方法。...原创 2020-07-07 15:17:38 · 341 阅读 · 0 评论 -
JVM类装载分为以下 5 个步骤
加载:根据查找路径找到相应的 class 文件然后导入检查:检查加载的 class 文件的正确性准备:给类中的静态变量分配内存空间解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址初始化:对静态变量和静态代码块执行初始化工作...原创 2020-07-07 13:58:27 · 178 阅读 · 0 评论 -
GC Roots
虚拟机栈(栈桢中的本地变量表)中的引用的对象方法区中的类静态属性引用的对象方法区中的常量引用的对象本地方法栈中JNI的引用的对象原创 2020-07-06 20:20:06 · 148 阅读 · 0 评论 -
JAVA线程池的执行过程
线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当调用 execute() 方法添加一个任务时,线程池会做如下判断:如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列;如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务;如果队列满了,而且正在.原创 2020-07-04 21:23:32 · 591 阅读 · 0 评论 -
java.lang.NoClassDefFoundError和ClassNotFoundException的几种解决思路方法
CLASSPATH环境变量配置出错java运行环境的jdk版本比class文件的编译版本低了导致class文件的访问权限或者所在目录的访问权限有问题,导致java无法读这个文件jar包有错误,查看jar是否有漏或者重新导入jar包...原创 2020-07-02 11:24:43 · 343 阅读 · 0 评论 -
反射
反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法58. 什么是 java 序列化?什么情况下需要序列化?简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可原创 2020-07-02 07:39:26 · 129 阅读 · 0 评论 -
ArrayList 扩容原理
List扩容实现步骤分两步:1、扩容把原来的数组复制到另一个内存空间更大的数组中2、添加元素把新元素添加到扩容以后的数组中ArrayList 的构造函数ArrayList的两个构造方法ArrayList()ArrayList(int initialCapacity)/** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; /** *声明空数组 */原创 2020-07-01 23:27:46 · 285 阅读 · 0 评论 -
java对象拷贝
61. 为什么要使用克隆?想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。62. 如何实现对象克隆?有两种方式:1). 实现Cloneable接口并重写Object类中的clone()方法;2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆63. 深拷贝和浅拷贝区别是什么?浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷原创 2020-06-30 23:37:43 · 182 阅读 · 0 评论 -
多线程
35. 并行和并发有什么区别?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。36. 线程和进程的区别?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个原创 2020-06-30 23:34:03 · 137 阅读 · 0 评论 -
数据结构 数组和链表对比
数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。...原创 2020-06-30 07:42:11 · 189 阅读 · 0 评论 -
容器
java 容器都有哪些?常用容器的图录:Collection 和 Collections 有什么区别?java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素..原创 2020-06-30 07:33:56 · 3557 阅读 · 0 评论 -
Java 基础
1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 j原创 2020-06-29 22:27:06 · 101 阅读 · 0 评论