3 Ziegler Han

尚未进行身份认证

我要认证

造轮子十年,感悟:尽量不要造轮子。

等级
TA的排名 10w+

db数据的读取与保存策略

数据从db中读取出来,并经数据存储到对象上。对于逻辑对象,最好通过构造或者函数调用将参数传递到对象上。逻辑对象只负责保存数据到db,不处理从db读取数据。这样才能保证逻辑对象对于数据的操作时单向的。package org.ziegler.db.loadAndSave;public class QuestDB { private int questSn; private int questStateIndex; public QuestDB(int questSn.

2020-07-25 17:45:49

CountDownLatch实现的源码分析,核心基于AQS(AbstractQueuedSynchronizer)

await()调用流程:1. await countDownLatch.await();2. acquireSharedInterruptibly /** * Causes the current thread to wait until the latch has counted down to * zero, unless the thread is {@linkplain Thread#interrupt interrupted}. *

2020-07-15 23:55:18

感悟:上来就造轮子,不如先思考一下。然后去github上搜索一下,是否已经有现成的轮子。

最近编写一个Log分析工具。分析工具基本完成以后,因为分析工具执行不同的功能。想做成命令行的工作模式。所以,面临命令行参数的解析处理。我也不管三七二十一,直接动手开干,根据自己的想法思路开始造轮子。当时就没有想想是否已经有开源的组件,思想上没有转化。这是对我来说,经历这次开发最大的收获。再次开发新的功能,我要重新调整一下,需要拆分步骤:我要做什么? 我要做的东西功能是否可以拆分。 拆分的功能是否是已经有开源功能块。(先去调研) 动手开发。经过上面的步骤,不仅可以避免重复造轮子,也让自己对于要

2020-07-14 13:22:03

MyBatis之Mapper的动态代理实现原理

为了方便理解MyBatis的Mapper的动态代理实现原理,下面编写简单的动态代理实现方式,模仿MyBatis的Mapper实现一个UserMapper,通过定义Mapper接口UserMapper,然后调用UserMapper userMapper = MapperFactory.getMapper(UserMapper.class);List<Integer> list = userMapper.getList();获取UserMapper的代理对象,代理对象直接返回一个Li.

2020-07-09 17:14:11

G1分配大内存测试

package org.ziegler.gc;/** * VM参数:-XX:+UseG1GC -Xms20M -Xmx20M -Xmn10M -Xlog:gc* -XX:SurvivorRatio=8 * */public class FirstTestGC { public static void main(String[] args) { byte[] a1, a2, a3, a4; a1 = new byte[2 * 1024 * 1024]; .

2020-07-07 20:38:44

JVM(G1)内存不足溢出测试

package org.ziegler.gc;/** * VM参数:-Xms10M -Xmx10M -Xlog:gc* * */public class GCOutOfMemoryTest { public static void main(String[] args) { byte[] a1, a2, a3, a4; a1 = new byte[2 * 1024 * 1024]; a2 = new byte[2 * 1024 * 102.

2020-07-07 20:37:37

UnPooled.copiedBuffer与wrappedBuffer的使用

Unpooled.copiedBuffer函数public final class Unpooled { /** * Creates a new big-endian buffer whose content is a copy of the * specified {@code array}. The new buffer's {@code readerIndex} and * {@code writerIndex} are {@code 0} ...

2020-07-05 10:59:44

AutoCloseable使用与注意,try-with-resources(推荐)

使用try-with-resources(推荐),不要使用try-finally。 实现AutoCloseable接口,并实现close方法。 使用try-with-resources可以捕获close中的异常,通过throwable的getSuppressed 在退出try-with-resources块的时候会自动调用close方法。下面是AutoCloseable的文档说明package org.ziegler.javabase.autoClaseable;public class.

2020-07-03 11:56:47

Java 8 实战 脑图

2020-07-01 16:03:14

Future.get抛出TimeoutException,并不会中断或者取消任务

static ExecutorService executorService = Executors.newCachedThreadPool(); /** * get 出现TimeoutException,并不会中断或者取消运算线程 * @throws InterruptedException */ @Test void testGetTimeoutException() throws InterruptedException { f.

2020-06-29 18:00:51

千万不要再构造函数调用重载函数,非要调用函数请使用final函数

构造流程基类的成员数据初始化 >> 基类构造函数 >> 子类成员数据初始化 >> 子类构造函数产生问题的原因但是下面的结构违背了这种构造顺序,子类的init的方法调用要在子类的构造函数之前执行。public class BaseClass { int id = 0; String name = ""; public BaseClass() { System.out.println("BaseClass cons

2020-06-27 21:53:21

用一年时间读一本英文版书籍

作为一个Coder,一直想提升英文水平,但是看到英文技术文章就心里胆怯。不敢去阅读。去年我下定了决心,准备开始啃一本英文技术书籍。于是购买了《Effective Java》,不仅可以学习英语,提升自己的英文水平。还能提升自己的编程能力。刚开始阅读,没有给自己定什么高要求,一天阅读1页或者2页,甚至半页也可以。但是,有一个要求,必须坚持。开始的是很吃力的,生单词很多,句子可能不理解。有时候1也可能也需要读10分钟或者半个小时。但是这么坚持下来,几个月以后很多以前不认识的单词,开始有印象了。慢慢记住了。

2020-06-19 14:51:50

Objects.requireNonNull使用的多种使用情形和案例

package org.ziegler.javabase.thread;import java.util.ArrayList;import java.util.List;import java.util.Objects;public class RequiredNonNullSample { private Ball ball; private List<Ball> ballBucket = new ArrayList<>(); Requi.

2020-06-18 14:52:49

第3章 Netty的组件和设计

第3章 Netty的组件和设计3.1 Channel、EventLoop和ChannelFuture3.1.1 Channel接口3.1.2 EventLoop接口定义了Netty的核心抽象3.1.3 ChannelFuture接口3.2 ChannelHandler和ChannelPipeline3.2.1 ChannelHandler接口3.2.2 ChannelPipeline接口为ChannelHandler链提供了容器Netty两种发送消息的方式:直接写.

2020-06-05 14:30:41

第11章 CompletableFuture组合式异步编程

第11章 CompletableFuture组合式异步编程概念:分支/合并框架 并行流 混聚(mash-up)区别:并发 并行11.1 Future接口java5引入,设计初衷:对将来某个时刻会发生的结果进行建模。使用Futrue:将操作封装到Callable对象中 提交给ExecutorService ExecutorService.submit返回Future对象11.1.1 Future接口的局限性11.1.2 使用CompletableFuture构建异步

2020-05-28 14:52:34

第10章 用Optional取代null

第10章 用Optional取代null10.1.1 采用防御式检查减少NullPointerException深层次递归的if语句块 过多的退出语句10.1.2 null带来的种种问题10.1.3 其他语言的替代品Groovy 安全导航操作符(Safe Navigation Operator) Haskell 的 Maybe Scala 的 Option[T]10.2 Optional入门DIFFnull Optional.empty()10.3 应用Optional

2020-05-27 17:56:33

第7章 并行数据处理与性能

第7章 并行数据处理与性能7.1 并行流steam.sequential() steam.parallel()最后一次调用会影响整个流水线。上面两个函数只是修改并行标志。配置并行流使用的线程池ForkJoinPoolRuntime.getRuntime().availableProcessors()System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", 12);7.1.4 高效使用

2020-05-22 20:25:37

Color Scheme : Monokai Sublime Text 3

2020-05-21 14:20:52

第6章 用流收集数据

第6章 用流收集数据6.1 收集器简介你只需指出希望的结果 —— “做什么”,而不用操心执行的步骤 —— “如何做”6.1.1 收集器用做高级规约对流调用collect方法将对流中的元素触发一个规约操作。6.1.2 预定义收集器注意:Colletors实用类将流元素规约和汇总为一个值。 元素分组 元素分区6.2 规约和汇总import static java.util.stream.Collectors.*;Collectors.counting stream

2020-05-19 14:49:17

第5章 使用流

第5章 使用流5.1 筛选和切片filter distinct limit skip5.2 映射map flatmap [重要]:让你把一个流中的每个值都换成一个流,然后把所有的流连接起来成为一个流。[P90] peek:This method exists mainly to support debugging, where you want to see the elements as they flow past a certain point in a pipeline5.

2020-05-15 10:06:05

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。