自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wshten

Exploration of the unknown is the key to our growth.

  • 博客(106)
  • 收藏
  • 关注

原创 携程 2024秋招内推 火热进行中!

我们是IBU公共技术团队,通过技术突破和创新引领携程集团的国际化趋势。在这里有浓厚的技术氛围和定期的技术分享,帮助同学们拓展视野,追求卓越。在这里有最新的技术探索和实施场景,引领技术潮流,赋能国际业务增长,不亦乐乎!共同的理想和愿景让我们大家相遇,IBU公共技术团队期待各位的加入!

2023-09-01 14:59:42 186

原创 秋招 | 携程 | 携程集团2022秋招内推正式启动啦~!

简介携程校园招聘是为携程集团招募和培养未来的技术专家、业务骨干、管理人员的培训生成长项目。进入携程后,公司会为每位培训生量身拟定双轨+四维驱动培养计划, 施行双通道成长模式,可自由选择专家、管理者为职业发展目标。专属内推码‼️ 领取秋招专属内推码: https://docs.qq.com/doc/DTXNTVUxtam1MQ3Fs‼️ 也可使用通用内推码投递哦:AH5k0内推福利???? 简历优先处理,热门岗位优先安排面试~‼️ 部分岗位内推免筛简历 直接笔试‼️ 技术提前批已开启,比正式批

2021-08-05 14:56:25 500 1

转载 reactive异步非阻塞

原文链接:干货 | Reactive模式在Trip.com消息推送平台上的实践

2021-07-26 14:33:25 276

转载 Reactive模式在IO密集型应用上的实践

原文链接:Reactive模式在Trip.com消息推送平台上的实践

2021-07-22 18:25:09 238

原创 netty总纲

Bootstrap1)Bootstrap 和 ServerBootstrap 分别是客户端和服务器端的引导类,一个 Netty 应用程序通常由一个引导类开始,主要是用来配置整个 Netty 程序、设置业务处理类(Handler)、绑定端口、发起连接等。2)客户端创建一个 NioSocketChannel 作为客户端通道,去连接服务器。3)服务端首先创建一个 NioServerSocketChannel 作为服务器端通道,每当接收一个客户端连接就产生一个 NioSocketChannel 应对该客户端。

2021-07-10 23:24:53 151 1

原创 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 1945

原创 Java告警API的设计思路

Alert支持各种快捷灵活方式的告警API,避免过程式的调用告警servicehttps://github.com/kevinten10/vrml/问题背景在项目中,可能许多时候会遇到需要发送一些告警信息的情况,例如打印ERROR日志,发送EMAIL告警。通常方式可能在需要的地方直接Log.error(...)或者写一个发送Email的service,直接调用service.sendEmail(...)这样的方式。但在告警形式、告警位置增多的情况下,需要调用的告警service类快速增加

2021-03-14 16:59:11 986

原创 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 200

原创 Java网络请求代理API的设计思路

一个具有代理功能的API,用于对远程请求进行包装,从而进行日志记录/数值记录/响应检查/...https://github.com/kevinten10/vrml/问题背景在项目开发中,网络请求部分存在很多问题。请问自己:1.调用接口后,如果未引发任何异常,是否将其视为成功? 2.即使没有抛出异常,您是否考虑了返回状态代码为不成功代码的情况? 2.您是否考虑过计算不成功代码的原因和频率?如果您说“不!”。我认为您需要此API来规范您的行为。这将迫使您首先考虑并提供支持。解决思路

2021-03-14 16:57:59 260

原创 Java优雅埋点API的设计思路

用于记录应用程序埋点数据的APIhttps://github.com/kevinten10/vrml埋点API的问题主流程隔离 例如旁支逻辑的NPE或者GSON解析异常等 支持Debug级别支持Debug级别 简洁易用的API实现思路和方案单个异常的隔离 通过闭包进行trycatch,进行异常的隔离 支持不同级别的配置 通过闭包传入配置,实现动态的配置 简洁易用的APIMetrics API单个异常的隔离 √ 支持不同级别的配置 √ 简洁易用的API √ 支持局部

2021-03-14 16:57:09 1796 3

原创 Java日志API的设计思路

一个支持动态配置的日志记录APIhttps://github.com/kevinten10/vrml/blob/master/vrml-log/WIKI.md​github.com日志的问题很难从info和warn里找到有效信息配置基于全局,很难进行动态调整Design goals支持动态配置打印不同级别的日志 支持方便的添加日志TAG 支持对不同的日志基于TAG进行分类How to do it?支持多级动态配置 提供易于使用的API以操作TAG 日志对象将TAG保留为

2021-03-14 16:55:58 538

原创 Java错误码规范的设计思路

一组错误代码定义规范github:https://github.com/kevinten10/vrmlDesign goals参数错误精确到具体字段,依赖错误精确到具体服务具体接口结合上下文,可以找到唯一确定的语句结合上下文,可以找到唯一确定的语句支持细粒度的错误定位 清晰的类别划分 不同系统间的共性How to do it?支持细粒度的定位 => 语义唯一 清晰的类别划分 => 五大类+子分类 不同系统间的共性 => 通用的API支持 6位码 : ..

2021-03-14 16:55:19 1684

原创 【携程】【21春招】内推有机会免笔试哦~!

携程集团2021年春季校招已经启动啦!携程校园招聘是为 携程集团招募和培养未来的技术专家、业务骨干、管理人员的培 训生成长 项目。进入 携程后,公司会为每位培训生量身拟定双轨+四维驱动培养计划, 施行双通道成长模式,可自由选择专家、管理者为职业发展目标。【校招内推人才标准】应届生a) 毕业时间: 2020.9-2021.8留用实习生a) 毕业时间: 2021.9-2022.8内推码:NTM267RQKQ校招官网: campus.ctrip.com工作地点:上海(公司总部)、北京!1400

2021-03-10 10:16:33 194

原创 AJDK-Wisp协程

李三红在接受采访时表示:“如果没有我们的尝试,Johannes Kepler University(JKU) Linz在HotSpot TM JVM 上的协程实现,或许要在相当长的一段时间被束之高阁。Alibaba JVM的Wisp协程技术,基于JKU 的协程实现,在上面做了大量的创新性工作,包括协程调度算法,JVM锁机制改造等等。正常的Java应用可以在几乎不改任何代码的情况下,“透明”地使用协程技术,获得免费的性能午餐。目前,Wisp协程技术已经被核心电商应用所使用。通过这项技术,阿里巴巴把JVM的性.

2020-08-05 08:00:01 2960 1

原创 AJDK-AOT静态编译

很多云上的新应用不约而同地选择了 Go 语言,很大的原因是 Go 应用对运行时没有依赖,静态编译的程序启动速度快,也不需要通过 JIT 来预热。Java 静态编译技术是一种激进的 AOT 技术,通过单独的编译阶段将 Java 程序编译为本地代码,在运行时无需传统 Java 虚拟机和运行时环境,只需操作系统类库支持即可。静态编译技术实现了 Java 语言与原生 native 程序的“合体”,将原本的 Java 程序编译成为了一个自举的具有 Java 行为的原生 native 程序,由此兼有 Java .

2020-08-05 07:59:14 1321

原创 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 283

原创 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 250

原创 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 216

原创 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 498

原创 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 290

原创 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 848

原创 Java-Spring开发技巧

设计模式=> 状态模式context实现state,并通过管理实现类重载方法数据结构=> DTO数据结构应具备多种字段的of创建功能可使用内部类维护值枚举=> 緩存術redis map分段锁=> 使用init标志位标识初始化,而非某字段为空if (!init) { init();}工具类=> check intStringUtils::isNumeric=> hashObjects.hashArrays.hashCo

2020-08-05 07:51:19 203

原创 物联网-大气质量检测系统

Air - Atmospheric monitoring system. A typical iot application solutions. . 涵盖物联网设备及相关服务器. 完整的物联网应用场景的数据通信流程. Air - A Typical Iot Application Solutions IntroductionAir - 大气质量检测系统。由物联网STM3...

2018-12-12 22:22:24 7773 4

原创 Java并发之基础知识

同一进程的所有线程彼此独立运行共享进程的内存地址空间访问相同的变量并在同一堆上分配对象线程安全性单语句不一定有原子性,可能包含多个操作 例value++ 1. 读取value 2. value+1 3. 写入value线程安全守则不在线程之间共享状态变量将状态变量修改为不可变的变量在访问状态变量时进行同步servlet线程安全性它既不包含任何...

2018-09-17 10:17:22 192

原创 疑难问题解析总纲

Java。。。TODO

2018-09-14 17:40:47 229

原创 Maven项目管理

下载,配置maven环境变量设置:M2_HOME 系统路径设置:Path若使用idea,其内置有maven,可使用maven本身目录结构maven * bin * boot * conf * libmaven项目目录结构TODO...

2018-09-14 17:31:50 197

原创 Junit单元测试

开发环境:IDEA 插件1:Junit4 插件2:JunitGenerator 自动生成Junit模板关于:单元测试代码不会出现在最终产品当中目录结构(maven)project src main javaresourcestest javaresourcesjunit运行流程static @BeforeClass ,加载初始配置信息@B...

2018-09-14 11:00:12 255

原创 volatile非线程安全解析

Java内存模型java使用的是共享变量模型,如下图所示 线程1要读取线程2修改后的值必须要线程2写回到内存,线程1再读取。Jvm又是如何读取主存变量到线程中的呢? 内存间的相互操作lock 将对象变成线程独占的状态unlock 将线程独占状态的对象的锁释放出来read 从主内存读数据load 将从主内存读取的数据写入工作内存use 工作内存使用对象...

2018-09-14 10:13:36 990

原创 JVM之线程并发

GitHub-理解JVM系列:https://github.com/kevinten10/Effective-Java一、Java内存模型与线程处理器内存模型Java内存模型Java内存模型所有变量都存储在主内存中工作内存中保存了使用变量的主内存副本拷贝(拷贝引用,字段,并非对象的全部)线程对变量的所有操作都在工作内存,不能直接对主内存操作不...

2018-09-14 10:08:44 205

原创 JVM之代码优化

一、早期(编译器)优化1. 前期编译器:javac.java =&amp;gt; .class2. 后端运行期编译器:JIT字节码 =&amp;gt; 机器码3. 静态提前编译器:AOT*.java =&amp;gt; 机器码1. javac编译器1.1 解析与填充符号表词法语法分析: 源代码的字符流 ==&amp;gt; 标记token集合如 int a = b + 2; ⇒ i...

2018-09-13 10:55:10 1165

原创 JVM与操作系统

在了解jvm的结构之前,我们有必要先来了解一下操作系统的内存基本结构:操作系统中的jvm为什么jvm的内存是分布在操作系统的堆中呢??因为操作系统的栈是操作系统管理的,它随时会被回收,所以如果jvm放在栈中,那java的一个null对象就很难确定会被谁回收了,那gc的存在就一点意义都没有了,而要对栈做到自动释放也是jvm需要考虑的,所以放在堆中就最合适不过了。 操作系统+jvm...

2018-09-12 22:16:00 5268 4

原创 JVM之类加载机制

一、类文件结构Java虚拟机不和包括Java在内的所有编程语言绑定,它只和”class文件”这种特定的二进制文件格式所关联class文件中包含了Java虚拟机指令集和符号集以及若干其他辅助信息Java:*.java =&amp;gt; javac =&amp;gt; ↘jruby:.rb =&amp;gt; jrubyc =&amp;gt; → 字节码 .class =...

2018-09-12 15:33:36 148

原创 深入理解Java总纲

深入理解JVM内存模型,JVM的类加载机制,JVM优化等方面的知识GitHub: https://github.com/kevinten10/T-JDKDirectoryJVM内存模型

2018-09-11 20:34:41 242

原创 JVM之内存模型分析

Java虚拟机内存区域分析1. 程序计数器PC当前线程所执行的字节码的行号指示器字节码解释器通过改变PC的值来选取下一条程序线程独立,互不影响,在线程私有的内存区域中如果执行Java代码,指向虚拟机字节码指令地址 如果执行native方法,PC为空(undefined)2. 虚拟机栈线程私有,生命周期与线程相同Java方法内存模型: 每个方法在执行的同...

2018-09-11 19:50:00 192

原创 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 213

原创 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 158

原创 java.Object中的native方法

native关键字用法native是与C++联合开发的时候用的!java自己开发不用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的nat...

2018-09-04 15:43:37 1291

原创 Java成长计划

Wonderful Java 知识点总结本文是博主对Java的中高级知识点进行了一些总结–Java相关知识来源于以下书籍与视频教程《Java核心技术卷I》《Java核心技术卷II》《Java编程思想》《Head First servlets &amp;amp;amp; jsp》《Head First 设计模式》《深入分析JavaWeb技术内幕》《Effective Java》《深入理解...

2018-09-04 10:39:55 1374

原创 Java Stream流的API方法

https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/index.html map/flatMap我们先来看 map。如果你熟悉 scala 这类函数式语言,对这个方法应该很了解,它的作用就是把 input Stream 的每一个元素,映射成 output Stream 的另外一个元素。 filterf...

2018-08-28 11:30:38 481

原创 swing项目教程-基于swing的时间统计应用

GitHub源码地址:https://github.com/kevinten10/Sort-SwingSort-Swing这是一个使用JavaSwing组件实现的桌面应用,它能够进行八种排序的时间复杂度计算,并将结果绘制图线或持久化到文件,最后对比八种算法的性能。部署运行# Clone Projectgit clone https://github.com/kevinten10...

2018-08-26 16:02:47 629

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除