java
文章平均质量分 50
Kevinten10
Using Java/Scala/Python/Golang at work.
Research Stream and Reactive System.
Follow up Artificial Intelligence & Big Data & Cloud.
展开
-
reactive异步非阻塞
原文链接:干货 | Reactive模式在Trip.com消息推送平台上的实践转载 2021-07-26 14:33:25 · 301 阅读 · 0 评论 -
Reactive模式在IO密集型应用上的实践
原文链接:Reactive模式在Trip.com消息推送平台上的实践转载 2021-07-22 18:25:09 · 292 阅读 · 0 评论 -
Reactor-Core源码解析(三)
Reactor-Core源码解析(三)Fuseable接口源码解析控制变量解析 [?]/** Indicates the QueueSubscription can't support the requested mode. */int NONE = 0;/** Indicates the QueueSubscription can perform sync-fusion. */int SYNC = 1;/** Indicates the QueueSubscription can perfo原创 2021-03-18 12:04:00 · 2123 阅读 · 0 评论 -
Java告警API的设计思路
Alert支持各种快捷灵活方式的告警API,避免过程式的调用告警servicehttps://github.com/kevinten10/vrml/问题背景在项目中,可能许多时候会遇到需要发送一些告警信息的情况,例如打印ERROR日志,发送EMAIL告警。通常方式可能在需要的地方直接Log.error(...)或者写一个发送Email的service,直接调用service.sendEmail(...)这样的方式。但在告警形式、告警位置增多的情况下,需要调用的告警service类快速增加原创 2021-03-14 16:59:11 · 1122 阅读 · 0 评论 -
Java日志串联追踪API的设计思路
基于MDC功能进行日志Tag追踪的APIhttps://github.com/kevinten10/vrml/问题背景在项目中,经常需要通过日志的Tag等方式,将日志进行串联追踪。如果在代码中手动的去打印Tag值,会造成每打印一次Tag都需要一次编码,同时方法还需要持有Tag的值对象。一种解决方案是直接使用MDC,通过线程上下文来传递Tag的值对象,同时避免了在代码中手工的打印Tag。Trace模块对MDC的方式进行了简单的封装,相较于直接使用MDC,语义更加清晰。解决思路封原创 2021-03-14 16:58:34 · 226 阅读 · 0 评论 -
Java网络请求代理API的设计思路
一个具有代理功能的API,用于对远程请求进行包装,从而进行日志记录/数值记录/响应检查/...https://github.com/kevinten10/vrml/问题背景在项目开发中,网络请求部分存在很多问题。请问自己:1.调用接口后,如果未引发任何异常,是否将其视为成功? 2.即使没有抛出异常,您是否考虑了返回状态代码为不成功代码的情况? 2.您是否考虑过计算不成功代码的原因和频率?如果您说“不!”。我认为您需要此API来规范您的行为。这将迫使您首先考虑并提供支持。解决思路原创 2021-03-14 16:57:59 · 279 阅读 · 0 评论 -
Java优雅埋点API的设计思路
用于记录应用程序埋点数据的APIhttps://github.com/kevinten10/vrml埋点API的问题主流程隔离 例如旁支逻辑的NPE或者GSON解析异常等 支持Debug级别支持Debug级别 简洁易用的API实现思路和方案单个异常的隔离 通过闭包进行trycatch,进行异常的隔离 支持不同级别的配置 通过闭包传入配置,实现动态的配置 简洁易用的APIMetrics API单个异常的隔离 √ 支持不同级别的配置 √ 简洁易用的API √ 支持局部原创 2021-03-14 16:57:09 · 1970 阅读 · 3 评论 -
Java日志API的设计思路
一个支持动态配置的日志记录APIhttps://github.com/kevinten10/vrml/blob/master/vrml-log/WIKI.mdgithub.com日志的问题很难从info和warn里找到有效信息配置基于全局,很难进行动态调整Design goals支持动态配置打印不同级别的日志 支持方便的添加日志TAG 支持对不同的日志基于TAG进行分类How to do it?支持多级动态配置 提供易于使用的API以操作TAG 日志对象将TAG保留为原创 2021-03-14 16:55:58 · 561 阅读 · 0 评论 -
Java错误码规范的设计思路
一组错误代码定义规范github:https://github.com/kevinten10/vrmlDesign goals参数错误精确到具体字段,依赖错误精确到具体服务具体接口结合上下文,可以找到唯一确定的语句结合上下文,可以找到唯一确定的语句支持细粒度的错误定位 清晰的类别划分 不同系统间的共性How to do it?支持细粒度的定位 => 语义唯一 清晰的类别划分 => 五大类+子分类 不同系统间的共性 => 通用的API支持 6位码 : ..原创 2021-03-14 16:55:19 · 1747 阅读 · 0 评论 -
AJDK-Wisp协程
李三红在接受采访时表示:“如果没有我们的尝试,Johannes Kepler University(JKU) Linz在HotSpot TM JVM 上的协程实现,或许要在相当长的一段时间被束之高阁。Alibaba JVM的Wisp协程技术,基于JKU 的协程实现,在上面做了大量的创新性工作,包括协程调度算法,JVM锁机制改造等等。正常的Java应用可以在几乎不改任何代码的情况下,“透明”地使用协程技术,获得免费的性能午餐。目前,Wisp协程技术已经被核心电商应用所使用。通过这项技术,阿里巴巴把JVM的性.原创 2020-08-05 08:00:01 · 3152 阅读 · 1 评论 -
AJDK-AOT静态编译
很多云上的新应用不约而同地选择了 Go 语言,很大的原因是 Go 应用对运行时没有依赖,静态编译的程序启动速度快,也不需要通过 JIT 来预热。Java 静态编译技术是一种激进的 AOT 技术,通过单独的编译阶段将 Java 程序编译为本地代码,在运行时无需传统 Java 虚拟机和运行时环境,只需操作系统类库支持即可。静态编译技术实现了 Java 语言与原生 native 程序的“合体”,将原本的 Java 程序编译成为了一个自举的具有 Java 行为的原生 native 程序,由此兼有 Java .原创 2020-08-05 07:59:14 · 1395 阅读 · 0 评论 -
JDK14-G1 NUMA
NUMA-Aware Memory Allocation for G1NUMANUMA就是非统一内存访问架构(英语:non-uniform memory access,简称NUMA),是一种为多处理器的电脑设计的内存架构,内存访问时间取决于内存相对于处理器的位置。在NUMA下,处理器访问它自己的本地内存的速度比非本地内存(内存位于另一个处理器,或者是处理器之间共享的内存)快一些。如下图所示,Node0中的CPU如果访问Node0中的内存,那就是访问本地内存,如果它访问了Node1中的内存,那就是远程访问原创 2020-08-05 07:58:59 · 327 阅读 · 0 评论 -
JDK13-CDS数据共享
引言CDS(class-data sharing)即应用间共享class-data数据信息。JDK13扩展了应用的CDS实现,可以在程序执行的时候动态的打包class信息。被归档的class包含所有加载到应用中的类,一些依赖的库类,CDS的基层(base-layer)。###3 归档Java 13 中对 Java 10 中引入的 应用程序类数据共享进行了进一步的简化、改进和扩展,即:允许在 Java 应用程序执行结束时动态进行类归档,具体能够被归档的类包括:所有已被加载,但不属于默认基层 CDS 的应原创 2020-08-05 07:55:54 · 297 阅读 · 0 评论 -
JDK12-switch匹配
之前Java的模式匹配JavaSwitch仅支持单值匹配,只能在switch匹配语句中匹配单一值JavaSwitch仅支持int类型匹配,只能基于整型进行相等性判断byte/short/char,可以向上转为int类型而不损失精度,所以这三种基本类型可以使用switch进行匹配char 取 unicode 整型码值String/Enum,作为JDK的内置类型,编译器会分别调用 hashCode()/ordinal()方法产生int结果,从而进行匹配计算并比较 hashcode,如果原创 2020-08-05 07:55:06 · 239 阅读 · 0 评论 -
JDK11-ZGC
前言ZGC的成绩是,无论你开了多大的堆内存(128G?2T?),硬是能保证低于10毫秒的JVM停顿。远低于最初的G1 avg:156.806ms。ZGC的目标保守的10ms,也远胜前代的G1 。与标记对象的传统算法相比,ZGC在指针上做标记,在访问指针时加入Load Barrier(读屏障),比如当对象正被GC移动,指针上的颜色就会不对,这个屏障就会先把指针更新为有效地址再返回,也就是,永远只有单个对象读取时有概率被减速,而不存在为了保持应用与GC一致而粗暴整体的Stop The World。下原创 2020-08-05 07:54:36 · 535 阅读 · 0 评论 -
JDK10-var类型推断
var声明的可读性建议1、使用 var 声明时,可以对齐左侧变量的名称,去除冗余的信息,使得代码变的清爽。// with explicit typesNo no = new No();AmountIncrease<BigDecimal> more = new BigDecimalAmountIncrease();HorizontalConnection<LinePosition, LinePosition> jumping = new HorizontalLineP原创 2020-08-05 07:54:04 · 309 阅读 · 0 评论 -
JDK9-JPMS模块化
JPMS:Java Platform Module System现在JAVA应用主流为基于MAVEN进行系统模块的划分,但MAVEN等工具本质仍然是基于整体JAR文件的模块化,最终生成的镜像文件包含了引用的所有JAR包的完整内容,并没有能力对JAR中的内容进行更精细化的操作。模块化之前的问题:Java运行环境的膨胀和臃肿。每次JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当原创 2020-08-05 07:53:28 · 894 阅读 · 0 评论 -
Java-Spring开发技巧
设计模式=> 状态模式context实现state,并通过管理实现类重载方法数据结构=> DTO数据结构应具备多种字段的of创建功能可使用内部类维护值枚举=> 緩存術redis map分段锁=> 使用init标志位标识初始化,而非某字段为空if (!init) { init();}工具类=> check intStringUtils::isNumeric=> hashObjects.hashArrays.hashCo原创 2020-08-05 07:51:19 · 222 阅读 · 0 评论 -
JVM之内存模型分析
Java虚拟机内存区域分析1. 程序计数器PC当前线程所执行的字节码的行号指示器字节码解释器通过改变PC的值来选取下一条程序线程独立,互不影响,在线程私有的内存区域中如果执行Java代码,指向虚拟机字节码指令地址 如果执行native方法,PC为空(undefined)2. 虚拟机栈线程私有,生命周期与线程相同Java方法内存模型: 每个方法在执行的同...原创 2018-09-11 19:50:00 · 208 阅读 · 0 评论 -
深入理解Java总纲
深入理解JVM内存模型,JVM的类加载机制,JVM优化等方面的知识GitHub: https://github.com/kevinten10/T-JDKDirectoryJVM内存模型原创 2018-09-11 20:34:41 · 254 阅读 · 0 评论 -
Effective Java 项目实战
Book:《Effective Java》Program: SSM Framework目录Book:《Effective Java》Program: SSM Framework目录1. “创建和销毁对象”1.1 考虑使用静态工厂方法代替构造器优势缺点命名习惯使用场景1.2 遇到多个构造器参数时考虑用构建器构建器生成不可变对象...原创 2018-09-06 14:45:38 · 176 阅读 · 0 评论 -
JVM之类加载机制
一、类文件结构Java虚拟机不和包括Java在内的所有编程语言绑定,它只和”class文件”这种特定的二进制文件格式所关联class文件中包含了Java虚拟机指令集和符号集以及若干其他辅助信息Java:*.java =&gt; javac =&gt; ↘jruby:.rb =&gt; jrubyc =&gt; → 字节码 .class =...原创 2018-09-12 15:33:36 · 170 阅读 · 0 评论 -
Java并发之基础知识
同一进程的所有线程彼此独立运行共享进程的内存地址空间访问相同的变量并在同一堆上分配对象线程安全性单语句不一定有原子性,可能包含多个操作 例value++ 1. 读取value 2. value+1 3. 写入value线程安全守则不在线程之间共享状态变量将状态变量修改为不可变的变量在访问状态变量时进行同步servlet线程安全性它既不包含任何...原创 2018-09-17 10:17:22 · 204 阅读 · 0 评论 -
JVM与操作系统
在了解jvm的结构之前,我们有必要先来了解一下操作系统的内存基本结构:操作系统中的jvm为什么jvm的内存是分布在操作系统的堆中呢??因为操作系统的栈是操作系统管理的,它随时会被回收,所以如果jvm放在栈中,那java的一个null对象就很难确定会被谁回收了,那gc的存在就一点意义都没有了,而要对栈做到自动释放也是jvm需要考虑的,所以放在堆中就最合适不过了。 操作系统+jvm...原创 2018-09-12 22:16:00 · 5303 阅读 · 4 评论 -
JVM之代码优化
一、早期(编译器)优化1. 前期编译器:javac.java =&gt; .class2. 后端运行期编译器:JIT字节码 =&gt; 机器码3. 静态提前编译器:AOT*.java =&gt; 机器码1. javac编译器1.1 解析与填充符号表词法语法分析: 源代码的字符流 ==&gt; 标记token集合如 int a = b + 2; ⇒ i...原创 2018-09-13 10:55:10 · 1198 阅读 · 0 评论 -
JVM之线程并发
GitHub-理解JVM系列:https://github.com/kevinten10/Effective-Java一、Java内存模型与线程处理器内存模型Java内存模型Java内存模型所有变量都存储在主内存中工作内存中保存了使用变量的主内存副本拷贝(拷贝引用,字段,并非对象的全部)线程对变量的所有操作都在工作内存,不能直接对主内存操作不...原创 2018-09-14 10:08:44 · 229 阅读 · 0 评论 -
volatile非线程安全解析
Java内存模型java使用的是共享变量模型,如下图所示 线程1要读取线程2修改后的值必须要线程2写回到内存,线程1再读取。Jvm又是如何读取主存变量到线程中的呢? 内存间的相互操作lock 将对象变成线程独占的状态unlock 将线程独占状态的对象的锁释放出来read 从主内存读数据load 将从主内存读取的数据写入工作内存use 工作内存使用对象...原创 2018-09-14 10:13:36 · 1009 阅读 · 0 评论 -
Junit单元测试
开发环境:IDEA 插件1:Junit4 插件2:JunitGenerator 自动生成Junit模板关于:单元测试代码不会出现在最终产品当中目录结构(maven)project src main javaresourcestest javaresourcesjunit运行流程static @BeforeClass ,加载初始配置信息@B...原创 2018-09-14 11:00:12 · 269 阅读 · 0 评论 -
Maven项目管理
下载,配置maven环境变量设置:M2_HOME 系统路径设置:Path若使用idea,其内置有maven,可使用maven本身目录结构maven * bin * boot * conf * libmaven项目目录结构TODO...原创 2018-09-14 17:31:50 · 225 阅读 · 0 评论 -
JDK之Object 源码解析
GitHub-JDK源码阅读系列:https://github.com/kevinten10/Effective-Java public class ObjectregisterNatives()private static native void registerNatives();一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI(Java Native...原创 2018-09-11 17:07:54 · 223 阅读 · 0 评论 -
IntelliJ IDEA 编译报错:Error:java: Compilation failed: internal java compiler error
报错内容:Information:Using javac 1.8.0_73 to compile java sourcesInformation:java: javacTask: 源发行版 1.8 需要目标发行版 1.8Information:java: Errors occurred while compiling module 'EZSonar'Information:Module "EZSo...原创 2018-07-11 09:43:04 · 556 阅读 · 0 评论 -
properties load null poniter exception
1、若为resources目录下的文件,需要在首部加“/”–>”/pro.properties”2、若要从根目录开始读,则“system.getproperty(“user.dir”)+src+main+resources+….”。注意分隔符是否一致...原创 2018-07-09 15:41:14 · 160 阅读 · 0 评论 -
Class.forName().newInstance()注意事项
1、构造方法必须写2、构造方法必须为public3、构造方法必须无参数原创 2018-07-09 15:25:54 · 1050 阅读 · 1 评论 -
IDEA之JETBRAINS快捷键
来源:慕课网视频教程 IntelliJ IDEA神器使用技巧项目的跳转ctrl+Alt+[] 文件的跳转ctrl+e 最近的文件ctrl+shift+e 最近编辑的文件浏览修改位置的跳转ctrl+shift+backspace最新浏览位置的修改ctrl+shift+左箭头(win10会改变屏幕方向)使用书签进行跳转标记书签 ctrl+shift+数字或字母跳转书签 ctrl+数字或者字母总览书签 ...原创 2018-06-18 20:02:20 · 3402 阅读 · 0 评论 -
java可视化排序算法程序--基于Swing实现
Java Swing 实现可视化排序器源代码:https://github.com/kevinten10/Java-Swing-Projects简介操作流程主界面绘图界面功能概述八大排序算法进度检测执行结果文件的保存和读取曲线的绘制曲线导数计算 绘制曲线拟合计算 绘制多线程操作1.操作流程选择排序方式 或 导入文件点击按钮排序完成-->点击 绘制曲线三种功能 和 生成文件2.主界面3.绘图界...原创 2018-06-20 19:38:51 · 3464 阅读 · 0 评论 -
WSN无线传感网络--网络覆盖率测试
实现语言:java程序源码:https://github.com/kevinten10/Wireness-Network (1)给定传感器网络规模(即节点数目n)和能级,用matlab绘出网络的覆盖图;(2)给定传感器网络规模(即节点数目n),用matlab拟合出网络覆盖率与能级之间的关系折线图。 步骤描述A. 给定节点数目n = 100,通信半径R=0.1~0.3(R...原创 2018-06-20 19:19:47 · 2645 阅读 · 2 评论 -
解决IDEA的tomcat启动后:仍是旧项目或tomcat访问不了,一种情况的解决
情形一:tomcat启动后仍是旧项目,未加载新的项目情形二:tomcat访问不了相关知识:理解 IntelliJ IDEA 的项目配置和Web部署intellj idea中target目录和out目录有什么区别idea Tomcat 部署 war和war exploded的区别intellij idea在运行web项目时部署的位置(tomcat)原因:1、编译目录仍指向原项目war2、编译输出位置...原创 2018-07-11 09:56:44 · 19363 阅读 · 3 评论 -
url传递参数:中文出现%乱码
url传递参数时会进行编码解码,需要进行必要的编解码操作PS:可在浏览器console中输入decodeURI('%a%fa%ew%')进行解码,发现为中文数据解决:在使用编码的地方 如:name --> decodeURL(name)进行解码操作即可...原创 2018-07-11 15:45:21 · 1644 阅读 · 0 评论 -
java.Object中的native方法
native关键字用法native是与C++联合开发的时候用的!java自己开发不用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的nat...原创 2018-09-04 15:43:37 · 1313 阅读 · 0 评论 -
Java成长计划
Wonderful Java 知识点总结本文是博主对Java的中高级知识点进行了一些总结–Java相关知识来源于以下书籍与视频教程《Java核心技术卷I》《Java核心技术卷II》《Java编程思想》《Head First servlets &amp;amp; jsp》《Head First 设计模式》《深入分析JavaWeb技术内幕》《Effective Java》《深入理解...原创 2018-09-04 10:39:55 · 1396 阅读 · 0 评论