语言
圆脸娃
输赢不重要,超神才是王道
展开
-
java annotation校验器
前言java annotation校验器,使用简单,可扩展,可以显著提升开发效率,参考网上例子写了个小例子,比较简单,明白即可我的理解Annotation信息可以被编译进class文件,也可以保留在Java 虚拟机中,从而在运行时可以获取,这里充分展示了反射的魅力实例注解类@Retention(RetentionPolicy.RUNTIME)@Target({ El原创 2016-08-04 15:50:18 · 468 阅读 · 0 评论 -
数据拆分小工具
有时候,我们会有将列表进行拆分处理的需求,比如一个100容量的列表,拆成20个单个容量是5的小列表进行处理,下边是一个实现:public class DataUtil{ /** * 此方法用来对数据按照一定块大小进行切分,适合需要将数据先进行切分再进行依次处理的场景 * 参数: * 1.waitToSplitData:待切分数据 * 2.需...原创 2018-07-30 10:36:37 · 1151 阅读 · 0 评论 -
linux 相关命令杂谈
1.在单词之间跳转,使用Ctrl+左右键。Ctrl+a跳到本行的行首,Ctrl+e则跳到页尾。Ctrl+u删除当前光标前面的文字 ctrl+k-删除当前光标后面的文字Ctrl+w和Alt+d-对于当前的单词进行删除操作,w删除光标前面的单词的字符,d则删除后面的字符Alt+Backsapce-删除当前光标后面的单词,如果删除错误,使用Ctrl+y进行恢复Ctrl+L进行清屏操作2.grep显示...转载 2018-08-03 17:23:40 · 118 阅读 · 0 评论 -
Guava小工具之Supplier
最近在看Guava的源码,Supplier这个小工具比较有意思,今天聊一聊。 Supplier是一个接口,里面只有一个get方法,然后Suppliers类里面有两个内部类实现了这个接口,ExpiringMemoizingSupplier和MemoizingSupplier,它们主要是为了延迟获取在get方法中创建的对象,一个有超时时间,一个没有,其实也可以理解为将需要使用的东西做了一个懒...原创 2018-07-27 18:03:26 · 1713 阅读 · 0 评论 -
Linux脚本git提交代码
习惯于命令行手动提交代码,但每次都要输出同样的命令,索性写个脚本:#!/bin/bashgit statusread -r -p "是否继续提交? [Y/n] " inputcase $input in [yY][eE][sS]|[yY]) echo "继续提交" git add -A git commit -m $1 git push origin $2...原创 2018-08-06 17:59:29 · 1422 阅读 · 0 评论 -
策略模式之策略枚举
在使用策略模式时,我们要创建相应的策略,然后根据不同的场景使用不同的策略,这是可以的,但毕竟那是一堆的策略类,使用起来代码的可读性、扩展性也就一般,这种情况下我们可以使用策略模式的升级版---策略枚举来解决上边的问题枚举类:public enum StrategyEnum { ADD("+") { @Override public int exec...原创 2018-08-18 22:31:58 · 3613 阅读 · 0 评论 -
基于注解的可校验泛型的参数校验工具
基于注解的校验工具很多,但有些不是很符合自己的场景,自己写了一个,亲测可用可以校验入参中的单个参数、列表、带泛型的列表(List<String>),但是嵌套的泛型(List<List<String>>)不能校验:注解类:package com.mhc.gw.sti.api.jd.util;import java.lang.annotation....原创 2018-08-28 11:21:37 · 2057 阅读 · 0 评论 -
Java之Type
先推荐两篇文章(分为上下两篇),讲的比较好https://www.jianshu.com/p/7649f86614d3https://www.jianshu.com/p/e8eeff12c306下边是写的例子,保留下ParameterizedType:public class ParameterizedTypeTest<E, R> { private Ma...原创 2018-08-31 12:16:25 · 230 阅读 · 0 评论 -
java之异步回调
异步回调我的理解:1.使用了委托模式,调用方(ServiceA)持有被调用方(ServiceB)的引用,然后调用被调用方(ServiceB)的方法,被调用方方法(ServiceB)完成后,调用调用方(ServiceA)的回调函数做一些事情2.异步回调多是一些耗时的操作,在新线程中去调用被调用方(ServiceB)方法3.异步回调可以大大提高IO效率,这是当前开发的主流,比如Netty、...原创 2018-09-02 20:19:35 · 3577 阅读 · 0 评论 -
还记得java getResource和getResourceAsStream吗
首先说一个概念,classpath,指的是编译后的class文件、xml、properties等配置文件所在的目录。比如,如果是maven项目,classpath为“项目名/target/classes”,如果是普通项目,可能是”项目名/bin”,或者”项目名/build/classes”等等java读取文件时,有getResource和getResourceAsStream可以用,具体怎么用...原创 2018-09-13 11:37:13 · 798 阅读 · 0 评论 -
基于ThreadLocal的Rpc调用计时工具
最近写了一个基于ThreadLocal的计时小工具,先看看代码:public class TimeRecordUtil { private static final ThreadLocal<Long> START_TIME = new ThreadLocal<>(); /** * (第一步调用)开始调用 */ public...原创 2018-07-30 10:31:10 · 657 阅读 · 1 评论 -
Guava小工具之Interners
大家都知道,String是final的,每次对它的操作都会产生新的String,这很大程度上是安全性的考虑,但是产生大量的String也是会有一些问题的,1.大量的String会对gc产生影响;2.两次 new String(“aa”)操作,产生的String不一样,如果用这两个去做synchronized(String)操作就达不到想要的效果,因为synchronized必须是对同一个对象...原创 2018-07-28 15:21:10 · 6777 阅读 · 2 评论 -
倒排索引学习笔记
为什么叫倒排索引呢,我的理解:正常的查找应该是这样的倒排索引是这样的:就是说,正常的查找是在文件中查找某个单词;而倒排索引是根据单词查找某个文件倒序索引有几个概念:1.文档:就是我们通常使用的文档,如word,html网页等2.单词:是将文档中的内容进行拆分,找出来逻辑上构成一个完整表述的字符串3.字典:存储所有单词,每一条记录由单词和指向倒排列表的指针原创 2016-08-18 11:36:06 · 1429 阅读 · 0 评论 -
ThreadLocal实现简单剖析
直切主题之前的threadlocal是这样的:每一个threadlocal都有一个threadlocalmap,这个map中的元素以thread为key,待插入的值为value现在的threadlocal是这样的:每一个thread拥有一个threadlocalmap,这个map中的元素以threadlocal引用为key,待插入的值为value对比:1.可以看到,这两种实原创 2016-08-02 17:26:40 · 316 阅读 · 0 评论 -
重构读书笔记
总结一下重构的读书笔记,一个个知识点总结1 注释 1 尽量少写注释,注释是用来弥补你代码表述的不足,注释越多,说明你的代码越不易理解 2 用代码的清晰度来做注释,如果你的代码读起来让人感觉就跟看一行行清晰的注释,那你的可读性就非常高 3 少写注释还有一个原因,就是注释可能一百年不会有人修改,而那个时候你的代码早已面目全非了,那个时候,注释无疑就是毒药2原创 2016-12-29 16:38:12 · 351 阅读 · 0 评论 -
规则引擎之drools
drools是一个规则引擎,可以将开发从业务中解放出来,不用重复写不同的业务、然后测试、上线,只需要将业务规则配置到drl文件,然后每次有新业务需求的时候,只需要改一下配置文件,项目不需要重新上线。drools帮你装载规则,解析规则,应用规则到你的业务。总之,使用drools你可以将业务规则的判定放在引擎里面去做,程序中只保留需要的业务数据。 比如抽奖,其实抽奖每次规则都是差不多...原创 2017-05-12 16:06:37 · 731 阅读 · 0 评论 -
InheritableThreadLocal-- 特殊的ThreadLocal
ThreadLocal允许我们在线程中保存一些变量,但是做不到父子线程数据的共享public class InheritThreadLocal { public static ThreadLocal threadLocal = new ThreadLocal();// public static ThreadLocal threadLocal = new Inherita原创 2017-06-20 19:56:35 · 1751 阅读 · 0 评论 -
logback.xml---日志配置
INFO ${LOG_PATH}/log-info.log ${LOG_PATH}/complete-log-%d{yyyy-MM-dd_HH}.log.%i 100MB原创 2017-06-23 11:42:41 · 429 阅读 · 0 评论 -
Java类加载机制ClassLoader之ContextClassLoader
1.java的classLoader加载机制大家都比较清楚,就是委托机制,如下这种机制就是,加载一个类的时候,会一直向上委托,如果BootStrapClassLoader加载不到,然后再依次往下加载,如果最后SystemClassLoader也加载不到,则会抛出classNotFoundException。2.现在我们来说说其他的,说之前先说说两个概念,这个是转述别人的(http:原创 2017-09-22 18:19:26 · 3643 阅读 · 0 评论 -
unix编程艺术读书笔记
1.设计中,应该将代码的复杂度转移到数据结构中,以求达到程序的逻辑质朴而健壮,如c语言中的指针所实现的功能,在其他语言中就需要更加复杂的代码实现才能完成2.程序要具有透明性(看一眼就大概知道做的什么事情)和显见性(程序自带监视和显示内部状态的功能)3.先求运行、再求正确、最后求快(过早优化是万恶之源)4.宁愿抛弃、重建代码,也不要老是修补那些蹩脚的代码,让代码可维护,从而来吸引未来的维原创 2017-10-12 17:20:20 · 255 阅读 · 0 评论 -
ThreadPoolExecutor使用实例
使用场景:需要同时创建多个线程去访问某一接口,并将返回数据进行组装1. 创建ThreadPoolExecutor,切记创建在类的方法之外,这样就不会调用一次方法,创建一个ThreadPoolExecutorprivate final static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 30, 2000, TimeUnit....原创 2018-05-31 16:25:01 · 7687 阅读 · 1 评论 -
jdbc流stream读取超大数据
这几天在做分库分表,涉及到数据迁移,然后设计的方案是使用mybatis将数据分批读取出来,每批大概40--50万条数据,然后将查询来的数据再insert进去,发现这个效率很低,程序有卡顿,而且客户端很容易OOM。找了一下原因就是jdbc默认的读取数据的时候,会将要查询的数据一次性读到内存中,再通过resultSet循环读取出来,这样子40--50万条数据很容易就撑爆内存,然后调研了下发现,其实...原创 2019-04-03 16:44:40 · 6795 阅读 · 3 评论