
Java
文章平均质量分 84
懒惰的gler
这个作者很懒,什么都没留下…
展开
-
ThreadLocal理解
ThreadLocal,通常叫做线程本地变量或线程本地存储,是用于维持线程封闭性的一种规范方法,这个类能使线程中的某个值与保存值的对象关联起来。ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回由当前执行线程在调用时设置的新值。ThreadLocal对象通常用于防止对可变的单实例变量或全局变量进行共享。例如,在单线程应用程序中可能会维持一个全局的数据库连接,并在程序启动时初始化这个连接对象,从而避免在调用每个方法时都要传递一个原创 2021-02-09 17:34:45 · 455 阅读 · 1 评论 -
ServiceLoader原理
简单介绍ServiceLoader是jdk6里面引进的一个特性。它用来实现SPI,一种服务发现机制。SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中。Java SPI机制的思想:我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块、jdbc模块等方案。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的原创 2021-02-08 12:14:52 · 9331 阅读 · 5 评论 -
JDBC原理
JDBC,即Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC制定了统一访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。JDBC操作数据库的步骤1.加载数据库驱动;2.建立数据库连接;3.创建数据库操作对象;4.定义操作的SQL语句并执行;5.获取并操作结果集;6.关闭资源:关闭顺序是结果集–>数据库操作对象–>连接。JDBC API类图在Java1.6之前我们加载注册数据原创 2021-02-07 19:55:56 · 698 阅读 · 0 评论 -
Spring同一个类中方法调用注解失效
在项目开发中进行事务管理的时候,遇到给类的方法加了@Transactional,同一个类进行调用不生效的问题。原因分析通常在使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加才会生效。这是由于这些注解基于Spring AOP代理实现的,所以不支持内部调用的。举个简单例子:@RestControllerpublic class TestController { @Autowired private Tes原创 2021-02-07 19:39:26 · 2795 阅读 · 0 评论 -
Java静态内部类单例模式读取Properties配置文件
Properties props = AIPropertiesUtil.getInstance().getAiProps();package com.cmb.lp.rsaidata.util.busi;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public clas原创 2021-02-06 11:03:05 · 1430 阅读 · 0 评论 -
Java的Class.getClassLoader().getResourceAsStream()与Class.getResourceAsStream()理解
两者都可以实现从classPath路径读取指定资源的输入流。为什么是classPath而不是src,这是因为web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classes目录就是classPath目录。该目录放的一般是web项目运行时的class文件、资源文件(xml,properties等)。Class.getClassLoader().getResourceAsStream()Class是当前类的Class对象,Class.getClassLoader(原创 2021-02-06 10:30:28 · 14203 阅读 · 4 评论 -
Java线程模型
内容摘抄总结自《深入理解Java虚拟机(第二版)》和菜鸟教程:线程的五种状态线程的实现线程是比进程更轻量级的调度执行单元,线程的引入可以把一个进程的资源分配和调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。Java语言提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行start()且还未结束的java.lang.Thread类的实例代表一个线程。Thread类的所有方法均声明为Native,意味着这些方法没有使用或无法使用平原创 2021-02-05 13:28:59 · 693 阅读 · 1 评论 -
基于价值累积平或物件数量累积平的一种分配算法思路
背景之前做项目的时候遇到一个需求:假设有不同金额(价值)的物件,需要以下面两种方式分配到人。优先金额平,其次数量平分配到人优先数量平,其次金额平分配到人针对上述需求,在基于大量数据金额随机分布的特征情况下,采用贪心思想的思路进行了实现。前置条件1.具有大量数据,金额随机分布2.需要分配的物件列表TmT_mTm3.要分配的人列表PnP_nPn实现思路1.优先金额平,其次数量平2.优先数量平,其次金额平...原创 2021-02-01 22:27:58 · 305 阅读 · 0 评论 -
基于 Spring + Mybatis 实现简单的 ElasticSearch 查询客户端
背景在实际的 Java 项目开发中,比如 Spting Boot 应用,我们可能需要操作来自 ElasticSearch(后文简称 ES) 的数据,比如查询聚合等。同时,我们想要能够自定义DSL语句,满足复杂的查询需求。在目前的 ES Java 客户端 API 中 RestHighLevelClient 可以很好的实现,但是代码较为繁琐,而且不能满足动态DSL\color{red}{动态DSL}...原创 2020-03-06 16:54:53 · 5839 阅读 · 8 评论 -
Java解析ES查询结果的聚合JSONObject
Java解析ES查询结果的聚合JSONObject最近在开发过程中需要用Java将从ES(ElasticSearch)查询中的聚合结果进行解析,考虑到聚合结果的JSONObject虽然会根据DSL的不同有所区别,但还是具有一定的特殊规则,因此写了一个较为公用的解析方法。一、 需要解析的DSL查询结果在这里遇到的实际业务场景是对一些客户信息进行查询,然后按照CUST_ID进行分桶,分桶后又对每...原创 2019-03-08 17:47:06 · 8491 阅读 · 0 评论 -
类型信息之instanceof、isInstance与isAssignableFrom
Java中RTTI部分判断对象是不是某个特定类型的实例的方式包括instanceof、isInstance与isAssignableFrom。原创 2016-12-04 17:13:56 · 480 阅读 · 1 评论 -
类型信息之Class对象
Java中每个类都有一个Class对象,编译时便会产生(.class文件)。为了生成这个对象,JVM调用”类加载器”完成。每个类第一次使用时(创建类的静态成员的引用,构造器也是静态方法)动态加载到JVM。Class对象在需要时才被加载,而static初始化在类加载时进行。Class对象引用的获取方式:Class.forName()、getClass()、.class.原创 2016-12-04 16:21:55 · 2144 阅读 · 0 评论