Java
文章平均质量分 70
陈脩
从猪场到西溪,从事多年电商业务开发
展开
-
如何使用CompletableFuture
掌握CompletableFuture可以使我们更加容易写出优雅的并发编程代码原创 2022-11-22 19:45:48 · 1039 阅读 · 1 评论 -
Reflections一个强大的类扫描工具介绍
反射扫描和索引项目的类路径元数据,允许在运行时对类型系统进行反向传递查询原创 2022-09-11 15:54:24 · 2244 阅读 · 0 评论 -
ThreadLocal详解
ThreadLocal常见的问题整理以及源码分析原创 2022-07-06 22:57:41 · 1253 阅读 · 0 评论 -
一文掌握Lambda表达式(下)
本文主要介绍lambda中Optional 与Collectors相关知识点原创 2022-06-30 17:34:08 · 409 阅读 · 0 评论 -
一文掌握Lambda表达式(上)
本文主要对流与操作做了一个总体的介绍,后续将详细介绍流的收集与汇聚原创 2022-06-26 23:30:36 · 840 阅读 · 0 评论 -
Volecity配置文件示例
在 Velocity.jar中RuntimeConstants中定义了velocity.properties中配置的所有key/** * This class defines the keys that are used in the velocity.properties file so that they can be referenced as a constan...原创 2014-12-06 23:39:27 · 359 阅读 · 0 评论 -
BTrace简介与使用说明
大家在开发过程中总会预告各种个样的BUG,不是什么时候都可以去debug,也不是什么时候都可以去在代码中增加需要的日志,这个时候该如何解决呢?这个时候就是BTrace的大展身手的时候时候了,下面通过对于BTrace的介绍,同时会有一些示例代码希望可以给大家带来一定的了解 简介 Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪工具,可以不停.........原创 2018-08-19 19:30:00 · 590 阅读 · 0 评论 -
JMX详解以及使用示例
目录JMX是什么 JMX架构MBean标准MBean 定义接口实现接口注册MBean使用MBean 如何通过Web管理MBean JMX(Java Management Extensions)是一个为应用程序植入管理功能的标准化代理和服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等。JConsole以及JVisualVM 都是通过JMX来实现对JAVA应用程序的监控。 JMX定义了四种类型的MBean,标准MBean,动态MBean,开放MBean和模原创 2015-06-19 13:16:08 · 3329 阅读 · 0 评论 -
CGLIB 之 MethodInterceptor
在学习Spring AOP的时候我们知道Spring AOP的实现方式是通过JDK的动态代理和CGLIB的动态代理实现的,那么什么是CGLIB呢?CGLIB其实就是封装了ASM(Java字节码操控框架)了的功能强大,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。我们常见的就是Enhancer类。它可以动态生成一............原创 2015-01-19 22:16:25 · 2098 阅读 · 0 评论 -
你想知道的关于Semaphore、CyclicBarrier、CountDownLatch都在这里
通过示例代码介绍不不同使用场景,通过源码分析知其所以然原创 2022-06-15 22:09:16 · 119 阅读 · 0 评论 -
序列化反序列化源码分析以及Mybatis中的实际运用
目录序列化反序列化Mybatis中的实际使用 主要知识点: writeObject writeReplace readObject readResolve序列化与反序列化的定义 序列化就是将对象转为字节码的过程,反序列化则是将字节码转换为对象的过程序列化 JAVA序列化 java.i.........原创 2018-04-29 14:06:00 · 970 阅读 · 0 评论 -
Mybatis 基于注解Mapper源码分析
目前Mybatis除了可以通过XML配置SQL外还可以通过注解的形式配置SQL,本文中主要介绍了Mybatis是如何处理注解SQL映射的,通过源码分析处理过程XML配置<configuration> <settings> <setting name="defaultExecutorType" value="SIMPLE"/> <.........原创 2018-04-22 22:38:00 · 129 阅读 · 0 评论 -
基于Groovy的规则脚本引擎实战
在实际的平台化项目中,为了提升平台抽象能力使用更多场景,引入了规则引擎。如一个用户购买了168元商品可以获得10元红包,异或是购买了指定会场商品获取50元优惠券等。在不通互动场景中活动的规则是不同的,如果通过JAVA去实现,每次有新的规则要求,都要发布一次,这样成本就太高了。基于业务场景,我们需要的就是简单的规则脚本,所以不需要引入太重的规则引擎;对比了Q LExpress 和Groovy后,我们选择了Groovy. 主要是因为groovy没有学些成本,可以直接按照Java语法风格去写。 Java 与Gro原创 2022-06-09 00:29:08 · 2153 阅读 · 0 评论 -
JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)
目录对象在内存中是如何布局的如何查看对象在内存中的布局markword数据结构加锁后发生了什么偏向锁什么是偏向锁为什么需要偏向锁为什么从JDK15开始默认关闭偏向锁JDK8 为什么要延迟4S后开启偏向锁锁升级流程对象在内存中是如何布局的在聊到对象加锁这个话题,那就必须先聊聊对象在内存中的布局, 你知道一个对象在内存中是如何布局的吗?一个对象new出来以后,它在内存中主要分为一下四个部分:markword 这部分就是加锁的核心,占8个字节 .原创 2022-05-30 23:37:41 · 2719 阅读 · 0 评论 -
Java 网络编程基础
通过IO场景模型代码DEMO来理解不同类型IO目录常见的IO模型同步阻塞IO同步非阻塞IONIO多路复用AIO 同步阻塞IO也成为BIO(Blocking IO),是指用户线程发起IO,需要等待系统内核IO操作彻底完成才能返回到用户线程继续执行;在IO操作过程中,用户线程处于阻塞状态;这就是为什么成为阻塞IO的原因 下面我们看一下阻塞IO的实现,可以发现阻塞IO开发简单,阻塞时不占用CPU 资源,缺点就是每一个链接都需要启动一个线程处理,在高并发场景下性能太差。同步非阻塞IO原创 2017-05-09 23:43:39 · 435 阅读 · 0 评论 -
Java 之ThreadPoolExecutor
ThreadPoolExecutor 为一些Executor提供了基本实现,这些Executor是由Executors中的工厂方法创建的;如:newCachedThreadPool,newScheduledThreadPool,newFixedThreadPool 。ThreadPoolExecutor是一个灵活的、稳定的线程池,允许各种定制。 ThreadPool...2015-01-13 22:38:24 · 93 阅读 · 0 评论 -
泛型通配符的使用
Java 泛型支持通配符,类型有以下3类:无限定通配符 形式<?>上边界限定通配符 形式< ? extends SuperClass>下边界限定通配符 形式< ? super SubClass>那么该如何 确定该使用何种通配符呢?如果是“读”操作 则需要限定 上边界,如果是写操作则需要限定下边界;而无限定通配符表示只读...2014-10-19 18:46:30 · 136 阅读 · 0 评论 -
Javassist 实现代码增强
/** * Desc:TODO * * @author zhangwei<wei.zw@corp.netease.com> * @since 2016年1月14日 下午9:19:34 * @version v 0.1 */public final class ClassEnhancedGenerator { private Clas...原创 2016-01-14 22:26:57 · 382 阅读 · 0 评论 -
根据权重获取随机值
有一组优惠 A-20优惠, B-30元优惠, C-5元优惠 当用户满足条件时随机返回一个优惠;在活动预算一定的情况下需要保证C类优惠券中奖概率最高,B类优惠券最低;以下是权重的实现; /** * Copyright 2014-2015, , Inc. All Rights Reserved. * * Date: 2016年1月23日...2016-01-23 13:48:32 · 870 阅读 · 0 评论 -
Netty通过心跳保持长链接
Netty自带心跳检测功能,IdleStateHandler,客户端在写空闲时主动发起心跳请求,服务器接受到心跳请求后给出一个心跳响应。当客户端在一定时间范围内不能够给出响应则断开链接。 public class NettyClient { public void connect(String remoteServer, int port) throws Exceptio...2016-03-16 21:22:17 · 731 阅读 · 0 评论 -
ConcurrentHashMap 源码分析
ConcurrentHashMap在Java8中的实现改动较大,网上关于ConcurrentHashMap的文章也很少有基于java8的,将个人的一些理解记录下来以供分享。NodeConcurrentHashMap底层是通过数组+链表(树)来实现的,数组中存储的就是Node。它与HashMap中的定义很相似,但是有一些差别它对value和next属性设置了volatile同步锁,它不允许.........原创 2017-06-09 21:59:24 · 481 阅读 · 0 评论 -
JDK8 ReentrantReadWriteLock源码分析
ReentrantReadWriteLock中的state代表了读锁的数量和写锁的持有与否,整个结构如下:在本文中对AQS部分源码不在讲解,可以参考AbstractQueuedSynchronizer源码分析 首先从读锁开始看起readLock.lock() /** * 获取读锁 * 如果写锁没有被其他线程占有,获取读锁后...原创 2018-03-09 16:24:26 · 206 阅读 · 0 评论 -
子列表只是元列表的一个视图
List 接口提供了subList方法,其作用是返回一个原列表的一个视图。对子列表的修改可以直接反馈到原列表中。 /** *subList 只是原列表的一个视图 * @author zhangwei_david * @version $Id: SubListDemo.java, v 0.1 2014年10月18日 下午8:50:33 zhangwei_davi...2014-10-19 18:21:42 · 108 阅读 · 0 评论 -
实现RPC就是这么简单 之 Netty 实现(二)心跳检测和粘包处理
TCP 粘包和拆包 TCP 是个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上,一个完整的数据包可能会被TCP拆分为多个数据包进行发送,也有可能把多个小的数据包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 粘包问题的解决策略 由...2015-09-09 14:20:52 · 275 阅读 · 0 评论 -
Java 军规 -3 重写equals 方法是必须满足equals 方法的逻辑
equals 方法具有一些自身的特定:1、自反性:x.equals(x)返回true;2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)...原创 2014-08-03 11:39:52 · 128 阅读 · 0 评论 -
Java 军规 2-静态方法不能被重写
在第一条军规中说过,重写方法必需添加@Override 注解,如果在不遵守第一条军规的前提下你是可以及时发下静态方法是不可以被重写的;而如果你没有遵守第一条军规时,你试图重写静态方法,此时在编译器是不可能发现该错误的。 假设有这样一个基类写道public class Base { public static void doSomething() { System.out.pr...原创 2014-08-03 11:17:49 · 143 阅读 · 0 评论 -
Java 军规 -1 重写方法上必须添加注解@override
在常用的java 模式中有模板方法模式。在日常使用Java的场景中重写是必不可少的,可是不好的编码习惯,总是不在重写的方法上添加@override ;这样如果该方法是不可以重写的或者该方法在的重写是错误的,不能及时的发现错。所以好的编码习惯一定要在重写的方法上添加@override注解 如有这样一个积累Basepublic class Base { pub...原创 2014-08-03 11:06:02 · 2971 阅读 · 0 评论 -
Java 本地缓存的实现
在java web 项目中对频繁读取且相对稳定的数据一般都是用了缓存,这样可以极大地减少数据库的压力且提高的响应的速度。 一般都是,通过key 从缓存中读取value 如果value 为空则读取DB,将DB读取的数据再放入缓存这样的一个过程。一个简易的本地缓存实现。 首先数据一般都是有时效性的,不是放入缓存就一直存在,如果超过一定时间没有被使用则应当被清空,使其系...2015-01-23 21:23:00 · 653 阅读 · 0 评论 -
Java 之 enum
关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序的组件使用。这是一种非常有用的功能。创建一个enum时,编译器会生成一个相关的类该类继承自 java.lang.Enum.通过Enum 这个类的源码可以看到有这样几个方法 name(),ordinal()等方法 public abstract class Enum<E exte...2015-01-20 22:00:36 · 82 阅读 · 0 评论 -
Java 之注解
注解(也称之为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们尅在稍后某个时刻非常方便地使用这些数据。 注解在一定程度上是把元数据和源代码文件结合在一起,而不是保存在外部文档中。 元注解:就是注解的注解。如 @Target和@Retention. @Target用来定义你的注解将应用在什么地方类型含义TYPE类,...2015-01-03 11:23:19 · 95 阅读 · 0 评论 -
Eclipse 调优
在安装eclipse 的目录中找到 eclipse.ini 文件,在-vmargs 后添加如下信息:-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose:gc -Xloggc:gc.log 启动Eclipse 会在该目录中生成 gc.log可以看到34.397: [GC [PSYoungGen: 51048K-&...原创 2014-01-21 09:56:14 · 78 阅读 · 0 评论 -
Eclipse PermGen space 解决方法
改eclipse.ini文件,修改如下:-vmargs-Dosgi.requiredJavaVersion=1.5-Xms1024m-Xmx1024m-XX:PermSize=512M -XX:MaxPermSize=512M原创 2014-01-07 17:13:12 · 110 阅读 · 0 评论 -
使用Builder模式代替构造器
package demo.bigDecimal;public class Model { private String name; private String familyName; private String country; private String city; public static class Builder { private String name; priv...原创 2014-01-06 20:59:31 · 337 阅读 · 0 评论 -
Java 文件下载是中文名称丢失解决办法
在项目中使用需需要从sfs文件服务器上下载文件, // 设置字符编码 response.setCharacterEncoding(result.getData().getFileCharset()); // 设置文件类型 response.setContentType("multipart/form-data"); ...原创 2014-08-11 18:07:42 · 1495 阅读 · 1 评论 -
Java 8 Lambda 学习-
----- 1 Eclipse 支持 Java8-------------------------------------------------------------------------------------------------Java 8 正式版今天已经发布了,但最常用的 Java 开发工具 Eclipse 还没有正式发布对 Java 8 的支持。不过目前可以通过更新 ...原创 2014-03-28 16:28:31 · 89 阅读 · 0 评论 -
实现RPC就是这么简单 之 Netty 实现
ServiceServer实现自动发现服务:/** * * @author zhangwei * @version $Id: NettyServiceServer.java, v 0.1 2015年8月19日 下午2:08:37 $ */public class NettyServiceServer implements InitializingBean, Lif...2015-08-20 20:32:39 · 317 阅读 · 0 评论 -
实现RPC就是这么简单
RPC(Remote Procedure Call) 在介绍分布是RPC前首先介绍一个下JAVA中简单的RPC实现 服务器端,通过SocketServer,持续接收客户端的请求,并将客户端的请求分发到指定的处理器出去处理。 阻塞通线模型,是server对每一个请求都开启一条线程去执行请求,此种方式的缺点是服务器端线程的数量和客户端并发访问请求树呈1:1的正...2015-08-14 21:24:29 · 187 阅读 · 0 评论 -
Java 获取中文首字母的方法
获取一个字符串的首字母是中文排序以及按照字母搜索的基础,一下是实现一个字符串转换为每个汉字首字母的字符串 //根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 public String getLetterOfString(String SourceStr){ String Result = ""; ...2014-09-27 08:21:45 · 925 阅读 · 0 评论 -
subList注意事项
subList是在日常中常用的方法,可以有一些细节可能一直不从注意到。 subList返回的是当前list的一个视图,如果起始位置相同则返回一个空列表。返回的子列表仅仅是原有的list的视图,对sublist的修改可以直接影响到原list。但是对原有List进行结构化进行修改后则subList则失效,再对其进行操作时会抛出一个java.util.ConcurrentModifica...2015-06-05 08:02:23 · 321 阅读 · 0 评论 -
Java 之 PropertyDescriptor
PropertyDescriptor 描述了一个JavaBean 属性的一对访问方法即 getter和setter。常用的构造方法是PropertyDescriptor(String propertyName,Class<?> beanClass);propertyName就是属性的名称,beanClass就是这个属性对应属于哪个对象的Class./** *...2015-05-25 20:54:35 · 267 阅读 · 0 评论