
Java基础
文章平均质量分 81
加权不平权
IT课堂里的小学生
展开
-
项目中ThreadLocal使用实践踩坑
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、实践场景:二、分析1. InheritableThreadLocal变量拷贝2、利用引用传递总结一、实践场景:项目中有个功能点是需要从第三方系统中定阅链路up/down消息,进行业务处理后最终持久化,由于性能要求,采用批量方式进行消息处理,简单来说就是针对一批消息,复用线程池并发处理,同时处理完后最终入库也是使用批量的方式入库,两处批量用来提升性能。原理示意图如下:在并发线程将消息处理完,数据入库后,总是概率性发现会缺原创 2021-11-05 20:20:18 · 212 阅读 · 0 评论 -
处理链模式应用实践
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档责任链模式应用实践前言一、可中断的责任链实现前言业务开发过程中,存在一个场景,需要针对一条上报的原始链路up消息进行处理,处理流程包括消息合法性较难、两端节点的处理、两端端口的处理、异厂商的处理主要处理流程,且这些流程处理存在先后关系,任何一处处理失败,该条链路up消息处理可提前中止。上述的业务流程与责任链所能解决的场景调度稳合。一、可中断的责任链实现测试用例:public class TestMain { publ原创 2021-09-08 16:39:54 · 179 阅读 · 0 评论 -
LRU简单实践
LRU简单实践LRU简单实践LRU简单实践package com.zte.sdn.oscp.xls.read;import lombok.Data;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * @Author 10184538 * @Date 2021/7/29 10:44 **/public class LRU { private int capacity = 5;原创 2021-08-19 20:18:08 · 133 阅读 · 0 评论 -
Java通过-jni调用c语言
Java通过-jni调用c语言一、编写JAVA程序二、编译h头文件编写C方法实现生成对象文件生成动态链接库执行一、编写JAVA程序public class TestNative { public native void SayHello(); public static void main(String[] args){ }}针对所以引用的C语言方法,增加关键字nativepublic native void SayHello();二、编译h头文件javac TestNative原创 2021-05-27 20:46:01 · 247 阅读 · 0 评论 -
JDK与Cglib动态代理区别与原理
JDK与Cglib动态代理区别与原理前言一、嵌套方法二、原理分析前言如题的区别,大多数同学第一回答基本都是JDK的动态代理需要被代理类实现接口,而Cglib动态代理无须这个要求,由于继承所以无法代码初final修饰的类。一、嵌套方法public interface UserService { String name(); String forName();}public class UserServiceImpl implements UserService { @Ov原创 2021-05-15 14:17:32 · 415 阅读 · 0 评论 -
手写系列-Lock
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?前言实现自定义锁需要考虑的事情:1、锁的是线程,争用,首先有一个变量,用于表示锁与未锁的状态,还需要标识出是哪个线程获得了锁,其它线程等待的队列2、线程阻塞,使用LockSupport3、原子性操作状态一、pandas是什么?package com.zte.sunquan.demo.lock;import java.util.Queue;import java.util.concur原创 2021-01-14 19:53:47 · 145 阅读 · 0 评论 -
用lombok进行Bean序列化时bug
lombok中aBcd型字段序列化时踩坑问题描述在进行模型的定义过程中,发现导出yaml时,出现了两个字段造成客户端使用该模型序列化出现问题Jackson序列化选择题选项分别将下列示例Bean中的cFlag赋值true,userName赋值abc,根据以下1-5的Bean选择A:{“user-name”:“abc”,“cflag”:true}B:{“user-name”:“abc”,“c-flag”:true}C:{“user-name”:“abc”,“cflag”:true,“c-f原创 2020-10-27 22:33:55 · 1147 阅读 · 0 评论 -
ThreadLocal子父线程实践分析
项目场景:项目中有个功能点是需要从第三方系统中读取链路数据,并进行处理后进行数据库的持久化。读取原始链路数据,是通过rest接口进行,为了提升性能,采集了并发获取,并发入库。问题描述:在并发入库的过程中,发现有时数据可以全部入库,有时却只有部分数据正常入库,在这里我们需要注意一下,在功能逻辑里,使用了可继承的本地线程变量进行数据的存储。具体业务代码不提供,通过编写用例复现了该问题,具体代码如下:package com.zte.sunquan.demo.thread.local;import jav原创 2020-09-24 10:42:02 · 206 阅读 · 0 评论 -
DailyZipRollingFileAppender配置指导
DailyZipRollingFileAppender配置指导VS RollingFileAppender依赖配置注意点VS RollingFileAppender与RollingFileAppender相关,DailyZipRollingFileAppender提供按时间进行压缩日志的功能,可以进一步降低日志的存储空间占用。同时按日志的修改时间排序可以进行日志的清理,保证日志的空间占用可控。...原创 2020-03-18 23:44:19 · 505 阅读 · 0 评论 -
巧用CompletableFuture返回值解决性能瓶颈
巧用CompletableFuture返回值实现并发需求背景CompletableFuture\需求背景对一组字符串数据进行处理,处理逻辑简单封装一个对象,包装该字符串,最终汇总返回。下面实现只使用CompleteableFuture,其它方式如paraStream不考虑。CompletableFuture<Void>实现考虑到性能,对于字符串的处理可以进行并发。实现如下: ...原创 2020-01-17 17:45:13 · 8142 阅读 · 0 评论 -
神来之笔-线程变量实践
神来之笔-线程变量实践ThreadLocal作用ThreadLocal实例子线程共享父线程的变量InheritableThreadLocal原理InheritableThreadLocal缺陷TransmittableThreadLocal实现TransmittableThreadLocal原理ThreadLocal作用ThreadLocal是用于存储线程在任务执行过程便于获取参数和设置参数的...原创 2020-01-04 15:47:54 · 191 阅读 · 0 评论 -
JAVA对象一致性比较(属性值)
JAVA对象属性比较实现HashCode方法序列化方法反射比较HashCode方法该方法也是最为正规的方法,重写对象的hashCode与equals方法,可以实现对象间相等性比较的判断。序列化方法该方法是将A和B对象分为JSON序列化成字符串,利用字符串的来进行对象相等性比较。简单贴一下代码:public static boolean seniorCompare(Object srcOb...原创 2020-01-01 14:16:35 · 901 阅读 · 0 评论 -
使用Multimap一次并发异常后的思考
Multimap引发血案一对多MapMultimap实现诡异的丢数据尝试一尝试二尝试三分析与结论建议一对多Map我们知道传统的map,支持一对一的映射,如果要使用一对多,则可以定义成Map<Object,List<Object>>方式。一般写法如下: public static <K, V> void addMapList(K key, V val...原创 2019-12-29 15:28:14 · 536 阅读 · 0 评论 -
JSR 269实践
实现一个自定义的注解toBeTested,标记在方法中,注解的作用在被标注方法的方法体前增加一行固定的打印,打印内容有toBeTested中内容指定。} }//修改AST后,会自动增加的一行打印 System . out . println("Method test invoke by sunquan.");} }即源代码自动增加了一行System.out.println(“Method test invoke by sunquan.”);原创 2019-12-07 16:24:12 · 5170 阅读 · 0 评论 -
CompletableFuture在性能优化中的使用
CompletableFuture在性能优化中的使用实践:打印一个集合内的所有内容ParallelStreamCompletableFutrue对比注意事项ParallelStream自定义线程池实践:打印一个集合内的所有内容数据准备: private static final int COUNT = 100000; private Vector<String> d...原创 2019-10-23 08:40:10 · 4458 阅读 · 0 评论 -
项目功能验收阶段的小问题
在进行项目管理过程中,每个迭代或每个阶段的任务功能验收是一个必不可少的环节。特别是项目团队成员较多,任务功能分散的情况中。本文就个人工作中情况,技术上介绍下功能点验收流程遇到的小问题。本司有一套对feature、story进行管理工具。迭代结束时亦是基于上面的feature、story由QA进行验收。功能验收标准,主要有以下几条:输出 具体要求 是否必要 单元测...原创 2018-12-01 10:34:14 · 1855 阅读 · 0 评论 -
JAVA中的SPI实践学习
JAVA中的SPI实践学习介绍Animal接口Animal接口实现调用测试模块更进一步**具体实现逻辑依赖为三步**介绍SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了...原创 2019-09-22 11:00:15 · 529 阅读 · 0 评论 -
SPI实现原理介绍
SPI实现原理介绍SericeLoaderLoad方法查找实现类创建实例SericeLoader从JAVA中的SPI实践学习中了解到查找实现的一个重要方法为:ServiceLoader shouts = ServiceLoader.load(Handler.class);其类结构为:public final class ServiceLoader<S> imple...原创 2019-09-22 11:30:37 · 568 阅读 · 0 评论 -
使用MBean和Jolokia实现数据监控
使用MBean和Jolokia实现数据监控静态MBean的定义MBean注册使用代码查询MBean属性与执行方法如何避免每个静态MBean都要单独定义接口静态MBean的定义通过MBean的定义可以在系统运行时,查看系统内部的数据或执行系统内部的功能,真正的使用过程中静态MBean的使用是最多的。定义的MBean必须实现以类名+MBean的接口如下所示定义了一个MBean结构Shard...原创 2019-09-29 17:06:14 · 810 阅读 · 0 评论 -
Bat批处理文件技巧记录
背景:在利用maven开发项目时,会编译使用mvn clean install进行项目的编译构建,虽然说IDE提供了terminal可以进行操作,但每次执行敲那么多且相同命令,肯定不是程序干的事。所以简单的利用bat来自动化这个过程,高手绕行。一:@echo off echo 正在E:\.m2\repository\org\opendaylight\l2switch,请稍等......原创 2017-06-24 09:47:45 · 432 阅读 · 0 评论 -
Jetty扫盲之实践(一)
Jetty作为项目使用的轻量级web容器,使用广泛。目前的微服务化也是以该技术为基础。熟悉如Spring-boot技术的同学不要嘲笑,本文只是技术学习而已。 基本实现作为web服务,可以通过web.xml的进行配置,主要对servlet进行配置(本文不通过配置文件而是通过代码直接加载Servlet)<?xml version="1.0" encoding="ISO-88...原创 2018-10-20 15:10:57 · 724 阅读 · 0 评论 -
Lombok实践
最近在做JavaBean相关的功能开发,在写到第三个JavaBean的Set/Get方法时,已然开始烦躁,通过搜索,发现了lombok这个工具,看来自己还是太OUT了,下面简单介绍这款工具的使用。为使IDE在编码时不至于报错,请安装lombok这个插件如果无法上网,可以去https://github.com/mplushnikov/lombok-intellij-plugin/rele...原创 2018-10-22 22:26:58 · 388 阅读 · 0 评论 -
DropWizard入门实践
Dropwizard是一个操作友好、开发RESTful服务的Java高性能框架,Dropwizard有自己独立的风格,可以辅助以Jetty Jackson Jersey和Metrics提供强大的基于JVM后端服务,Dropwizard将稳定 成熟带给了Java生态系统,大道至简,轻量库包让你聚焦业务,Dropwizard有out-of-the-box支持复杂的配置 应用度量记录、日志等,让你的队伍...原创 2018-09-10 08:51:18 · 1812 阅读 · 0 评论 -
Guava LoadingCache使用记录
LoadingCache可替换Map作为系统的缓存,相比于Map提供了数据自动回收功能,当然还有诸如数据删除监听、数据更新等功能,具体使用方式见代码与注释:package com.zte.sunquan.demo.test;import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;i原创 2017-11-22 09:30:59 · 1412 阅读 · 0 评论 -
Beetl 模板引擎实践
<%var cn=syntaxhelper.captial(attr);var isList=null;var listStr="List";if(has(list))isList=list;if(has(listClass))listStr=listClass;%><%if(isList!=null&&isList){%> //template attribute原创 2017-09-02 16:52:05 · 3172 阅读 · 0 评论 -
java.util.BitSet的使用
BitSet顾名思义即Bit的一个集合,每个Bit只能取1或0(True或False),是存储海量数据一个途径。而实际上BitSet内部核心是一个long的数组.由于一个long在java中占用8个字节,即64位.long[] resultresult[0] 则可以保存00000000 00000000 00000000 00000000 00000000 00000000原创 2017-07-07 19:28:51 · 860 阅读 · 0 评论 -
ANTLR4-实践
最近在研究Yang模型转换,自然而然就看到了ANTLR4与Xtend的相关技术。简单学习下基本用法,以此作为记录。对于ANTLR4是一款优秀的开源语法解析器。不仅如此,可以为开发者自己定义的语法提供识别解析计算的功能。从一个简单的小例子开始:如定义一个语法:数字 操作A操作B操作C操作D 数据具象一点10 +* 2计算结果是 (10+2)*2=24开发原创 2017-07-07 19:15:38 · 6818 阅读 · 4 评论 -
利用掩码进行IF判断小技巧
在开发过程中经常需要用到if语法进行逻辑的判断,当特定的业务逻辑过多时,针对if的分支则会特别的多,且if的都需要对应的分支匹配判断语句,即使使用switch也十分烦琐。在某些场景中,则可以使用类似掩码计算来实现IF的判断。比如有一个货物,需要对其运送的地点,分别进行判断,一般的作法,是使用List地点集合,然后遍历匹配,使用if对不同的地点,进行不同的处理。当然:原创 2017-07-03 15:54:00 · 561 阅读 · 0 评论 -
Java性能分析工具&&JProfiler
程序性能分析的起点其实与Java无关,它是一组操作系统自带的基本监控工具。Unix系统中:vmstata、iostat、prstat、top等Window系统中:typeperf等typeperf -si 1 "\System\Processor Queue Length 显示CPU队列当前长度系统本身的监控,有很多方法和工具,不多说。===原创 2017-07-01 16:58:01 · 967 阅读 · 0 评论 -
XML文件解析示例
从所周知,XML文件解析有SAX和DOM其中DOM需要一次性将xml文件读入内存,构建DOM树SAX无须在一开始将xml文件读入内存,采用事件驱动,文件读入的过程,即解析的过程。除了优秀的Dom4j解析,本文介绍下apche里的解析器。XPath使用路径表达式识别XML文档里的节点http://www.cnblogs.com/skyb原创 2017-07-01 14:34:54 · 500 阅读 · 0 评论 -
百家姓排序1
package com.zte.sunquan.demo.name;import java.util.Arrays;/** * Created by 10184538 on 2017/5/15. */public class NameSort { public static String[] sort(String... args) { String[]原创 2017-05-17 22:12:19 · 1223 阅读 · 0 评论 -
PowerMock实践
PowerMock UTF-8 1.6.3 org.powermock powermock-module-junit4 ${powermock.version} org.powermock原创 2017-12-11 19:03:47 · 317 阅读 · 0 评论 -
Maven编译技巧
1开发过程中快速验证功能是否正确,需要略过测试用例的执行,使用:mvn -DskipTests clean install或mvn -Dmaven.test.skip=true clean install区别:-DskipTests不执行测试用例-Dmaven.test.skip=true不执行测试用例,也不编译测试用例类2指名多线程编译mvn c原创 2017-05-15 19:31:56 · 3589 阅读 · 0 评论 -
JMX中MBean实现
对于MBean,存在于动态MBean和静态MBean。静态:顾名思义,即对象设置好后,聚焦到JAVA的类对象上,则不能进行增加类的属性和方法。动态:顾名思义,即在程序运行过程中,可以对MBean进行动态的增加属性和方法。但大多数场景中,使用静态已经足够满足我们的需求。示例代码:package com.zte.sunquan.demo.jms;import com.google.common.c...原创 2017-11-27 20:13:02 · 821 阅读 · 0 评论 -
jung实践-拓扑图形绘制
最近在研究涉及到网络中的算路问题,自然会涉及到图相关的知识。经验表明好的数据结构往往比算法本身更为重要。JUNG (Java Universal Network/Graph Framework) 是一个通用的可扩展的,用来创建图表的类库。一个用Java来建模、分析和做可视化图表的框架。官网:http://jung.sourceforge.net/site/jung-samples/source...原创 2018-08-07 22:00:27 · 1515 阅读 · 0 评论 -
一款好用的国内模型引擎Beetl
本文介绍一款国内同学编写的一款6倍于Freemarker的超高性能的java模板引擎-Beetl直接上代码示例:使用该模板总共三步,获取模板配置----绑定参数-----生成,具体测试代码参考:public class BeetlTest { @Test public void test1() throws IOException { String...原创 2018-08-04 14:12:50 · 1308 阅读 · 0 评论 -
Future之allAsList与successfulAsList
Guava中Futurestransform:对于ListenableFuture的返回值进行转换。allAsList:对多个ListenableFuture的合并,返回一个当所有Future成功时返回多个Future返回值组成的List对象。注:当其中一个Future失败或者取消的时候,将会进入失败或者取消。successfulAsList:和allAsList相似,唯一差别是对于失败或取消的F...原创 2018-03-30 10:45:36 · 6496 阅读 · 0 评论 -
Java获取本地IP地址
package com.zte.sunquan.model;import java.net.Inet4Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.net.UnknownHostException;impo...原创 2018-03-19 19:24:21 · 415 阅读 · 0 评论 -
BluePrint自定义扩展
ODL服务加载经历了blueprint-config-subsytem-blueprint这个过程但最新提供了blueprint增加了自定义的扩展,如rpc-implementation。所以特地对于blueprint的扩展功能学习并记录。标准的blueprint主要提供了四种定义:bean、service、reference、referecne-listODL扩展blueprin原创 2017-11-25 16:06:11 · 1043 阅读 · 0 评论 -
动态分配线程数目-保证系统负载
package com.zte.sunquan.demo.executor;import com.google.common.util.concurrent.AtomicDouble;import com.google.common.util.concurrent.ThreadFactoryBuilder;import com.sun.management.OperatingSystemM原创 2017-12-05 09:47:05 · 1009 阅读 · 0 评论