- 博客(56)
- 收藏
- 关注
原创 使用arthas热加载
工作中经常有这种问题:线上有问题,需要排查,但是相关关键日志没有打印,不好定位问题,这个时候那就修改代码,再发布一次,然后排查问题,这样是可行的,但是不利于快速排查问题 之前一直使用阿里的arthas,偶然发现它具备热加载的功能,很好用,这里记录下(当然,也是从别人那里学习的) 我们要达到的效果是不需要发布,直接修改相关文件,然后热加载,做到线上动态更新相关文件功能 ...
2020-02-25 11:43:56
1912
转载 数据库连接池设置----可能跟你想的不一样
看到一篇关于数据库连接池设置的文章,讲的很透彻,贴出来,共同学习译文:https://blog.youkuaiyun.com/zzzgd_666/article/details/82842839原文:https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing...
2019-07-02 09:24:11
260
原创 jdbc流stream读取超大数据
这几天在做分库分表,涉及到数据迁移,然后设计的方案是使用mybatis将数据分批读取出来,每批大概40--50万条数据,然后将查询来的数据再insert进去,发现这个效率很低,程序有卡顿,而且客户端很容易OOM。找了一下原因就是jdbc默认的读取数据的时候,会将要查询的数据一次性读到内存中,再通过resultSet循环读取出来,这样子40--50万条数据很容易就撑爆内存,然后调研了下发现,其实...
2019-04-03 16:44:40
7071
3
原创 mysql事务隔离级别另类解释
MySQL事务隔离级别老生常谈,老是理解不到位,今天以特定的角度理解一下1.前提:MySQL为了多用户同时操作数据时避免相互干扰所以产生了事物的隔离级别2.有这么几种:read-uncommitted(读未提交) 、read-committed(读已提交)、read-repeated(可重复读)、serializable(串读)我们这么理解:将前三种种拆成两部分,每一部分表示一个事...
2018-11-22 20:32:25
338
1
原创 还记得java getResource和getResourceAsStream吗
首先说一个概念,classpath,指的是编译后的class文件、xml、properties等配置文件所在的目录。比如,如果是maven项目,classpath为“项目名/target/classes”,如果是普通项目,可能是”项目名/bin”,或者”项目名/build/classes”等等java读取文件时,有getResource和getResourceAsStream可以用,具体怎么用...
2018-09-13 11:37:13
821
原创 java之异步回调
异步回调我的理解:1.使用了委托模式,调用方(ServiceA)持有被调用方(ServiceB)的引用,然后调用被调用方(ServiceB)的方法,被调用方方法(ServiceB)完成后,调用调用方(ServiceA)的回调函数做一些事情2.异步回调多是一些耗时的操作,在新线程中去调用被调用方(ServiceB)方法3.异步回调可以大大提高IO效率,这是当前开发的主流,比如Netty、...
2018-09-02 20:19:35
3628
原创 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
261
原创 基于注解的可校验泛型的参数校验工具
基于注解的校验工具很多,但有些不是很符合自己的场景,自己写了一个,亲测可用可以校验入参中的单个参数、列表、带泛型的列表(List<String>),但是嵌套的泛型(List<List<String>>)不能校验:注解类:package com.mhc.gw.sti.api.jd.util;import java.lang.annotation....
2018-08-28 11:21:37
2137
原创 策略模式之策略枚举
在使用策略模式时,我们要创建相应的策略,然后根据不同的场景使用不同的策略,这是可以的,但毕竟那是一堆的策略类,使用起来代码的可读性、扩展性也就一般,这种情况下我们可以使用策略模式的升级版---策略枚举来解决上边的问题枚举类:public enum StrategyEnum { ADD("+") { @Override public int exec...
2018-08-18 22:31:58
3642
原创 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
1452
转载 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
141
原创 数据拆分小工具
有时候,我们会有将列表进行拆分处理的需求,比如一个100容量的列表,拆成20个单个容量是5的小列表进行处理,下边是一个实现:public class DataUtil{ /** * 此方法用来对数据按照一定块大小进行切分,适合需要将数据先进行切分再进行依次处理的场景 * 参数: * 1.waitToSplitData:待切分数据 * 2.需...
2018-07-30 10:36:37
1214
原创 基于ThreadLocal的Rpc调用计时工具
最近写了一个基于ThreadLocal的计时小工具,先看看代码:public class TimeRecordUtil { private static final ThreadLocal<Long> START_TIME = new ThreadLocal<>(); /** * (第一步调用)开始调用 */ public...
2018-07-30 10:31:10
686
1
原创 Guava小工具之Interners
大家都知道,String是final的,每次对它的操作都会产生新的String,这很大程度上是安全性的考虑,但是产生大量的String也是会有一些问题的,1.大量的String会对gc产生影响;2.两次 new String(“aa”)操作,产生的String不一样,如果用这两个去做synchronized(String)操作就达不到想要的效果,因为synchronized必须是对同一个对象...
2018-07-28 15:21:10
7010
2
原创 Guava小工具之Supplier
最近在看Guava的源码,Supplier这个小工具比较有意思,今天聊一聊。 Supplier是一个接口,里面只有一个get方法,然后Suppliers类里面有两个内部类实现了这个接口,ExpiringMemoizingSupplier和MemoizingSupplier,它们主要是为了延迟获取在get方法中创建的对象,一个有超时时间,一个没有,其实也可以理解为将需要使用的东西做了一个懒...
2018-07-27 18:03:26
1799
原创 ThreadPoolExecutor使用实例
使用场景:需要同时创建多个线程去访问某一接口,并将返回数据进行组装1. 创建ThreadPoolExecutor,切记创建在类的方法之外,这样就不会调用一次方法,创建一个ThreadPoolExecutorprivate final static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 30, 2000, TimeUnit....
2018-05-31 16:25:01
7768
1
原创 unix编程艺术读书笔记
1.设计中,应该将代码的复杂度转移到数据结构中,以求达到程序的逻辑质朴而健壮,如c语言中的指针所实现的功能,在其他语言中就需要更加复杂的代码实现才能完成2.程序要具有透明性(看一眼就大概知道做的什么事情)和显见性(程序自带监视和显示内部状态的功能)3.先求运行、再求正确、最后求快(过早优化是万恶之源)4.宁愿抛弃、重建代码,也不要老是修补那些蹩脚的代码,让代码可维护,从而来吸引未来的维
2017-10-12 17:20:20
277
原创 Java类加载机制ClassLoader之ContextClassLoader
1.java的classLoader加载机制大家都比较清楚,就是委托机制,如下这种机制就是,加载一个类的时候,会一直向上委托,如果BootStrapClassLoader加载不到,然后再依次往下加载,如果最后SystemClassLoader也加载不到,则会抛出classNotFoundException。2.现在我们来说说其他的,说之前先说说两个概念,这个是转述别人的(http:
2017-09-22 18:19:26
3691
原创 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
459
原创 InheritableThreadLocal-- 特殊的ThreadLocal
ThreadLocal允许我们在线程中保存一些变量,但是做不到父子线程数据的共享public class InheritThreadLocal { public static ThreadLocal threadLocal = new ThreadLocal();// public static ThreadLocal threadLocal = new Inherita
2017-06-20 19:56:35
1769
原创 规则引擎之drools
drools是一个规则引擎,可以将开发从业务中解放出来,不用重复写不同的业务、然后测试、上线,只需要将业务规则配置到drl文件,然后每次有新业务需求的时候,只需要改一下配置文件,项目不需要重新上线。drools帮你装载规则,解析规则,应用规则到你的业务。总之,使用drools你可以将业务规则的判定放在引擎里面去做,程序中只保留需要的业务数据。 比如抽奖,其实抽奖每次规则都是差不多...
2017-05-12 16:06:37
758
原创 谈谈秒杀场景
一直对秒杀场景很感兴趣,无奈经验确实一般,最近看了两篇文章,现在做个学习笔记,这里贴出文章链接,欢迎大家共同学习58到家沈剑的http://mp.weixin.qq.com/s/5aMN9SqaWa57rYGgtdAF_A 还有一篇http://www.cnblogs.com/billyxp/p/3701124.html 以下图来做说明秒杀的原则其实就是“削峰填谷”
2017-02-24 15:44:33
1715
原创 spring事务传播属性和隔离级别
spring事务传播属性和隔离级别这种东西经常会用到,但是估计好多人和我一样名词记不住,往往在一些面试中就吃了哑巴亏,所以这里大概罗列一下,以备不时之需1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务
2017-02-23 10:23:48
416
原创 前端访问负载均衡怎么弄
一直对浏览器到服务层这部分访问是的负载均衡不是很清楚,今天看了一篇58到家shenjian的文章,觉得不错,这里大概说说自己的感想,文中的图都是借用人家的,特此说明第一阶段(裸奔)请求量很少,通过浏览器访问一个域名,经过DNS解析后,直接就到了 tomcat了
2017-02-22 16:41:05
10705
1
原创 重构读书笔记
总结一下重构的读书笔记,一个个知识点总结1 注释 1 尽量少写注释,注释是用来弥补你代码表述的不足,注释越多,说明你的代码越不易理解 2 用代码的清晰度来做注释,如果你的代码读起来让人感觉就跟看一行行清晰的注释,那你的可读性就非常高 3 少写注释还有一个原因,就是注释可能一百年不会有人修改,而那个时候你的代码早已面目全非了,那个时候,注释无疑就是毒药2
2016-12-29 16:38:12
373
原创 缓存Map高并发下的访问
有一个场景,我们需要对map中的key所对应的value频繁的更新,高并发下,势必要对map加锁,这样锁就会成为访问这个map的瓶颈,有以下办法可以减弱这种锁的影响1.对map进行拆分,如按照key值进行取模,将一个map拆分成多个map,这个其实也是concurrentHashMap的做法,但这种锁的粒度其实还是有点大2.将map转化到array中去,这样的话,一个(key,value)
2016-10-11 11:16:00
2150
原创 java抽象工厂模式
抽象工厂public abstract class AbstractFactory { public abstract Lion createLion(); public abstract LanPang createLanPang();}默认工厂public class DefaultFactory extends AbstractFactory{ @O
2016-10-10 14:11:53
330
原创 java--简单工厂设计模式
产品接口public interface Dota { public void hero();}工厂接口public abstract class DotaFactory { public abstract Dota hero();}具体产品public class LanPang implements Dota { @Override
2016-10-10 13:56:46
366
原创 java命令模式
命令模式可以简化编程命令接口public interface Comand { public void process(String str);}处理命令接口public class Process { public void process(String str,Comand command){ command.process(str);
2016-10-10 13:45:25
370
原创 最安全的单例模式--java使用内部类实现单例模式
实现类public class Singleton { private static class LazyHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} publi
2016-10-10 12:57:55
16311
原创 java设计模式--动态代理
被代理类要实现的接口public interface Subject { public void rent(); public void hello(String str);}实际被代理类public class RealSubject implements Subject { @Override public void rent() {
2016-10-10 12:49:10
245
原创 spring默认标签解析
上篇说到对Document的解析,其中的方法并没有深究,那么spring究竟是如何解析Document默认标签的呢?bean标签的解析 此方法是spring解析默认标签的实现,里面有好几种bean的解析,我们来看最复杂的processBeanDefinition(),这就是对我们日常所用bean的解析。 可以看到,在此方法中,依次对bean进行了解析,并将结果放
2016-09-17 15:38:47
969
原创 spring加载--从xml配置文件到内存
spring最初的形态是存在于xml配置文件中的,使用的时候bean实例又是存在于内存中的,今儿聊聊spring对于xml文件的加载,也就是spring怎么将bean从xml搬到内存中的。1.spring管理使用bean无非就是这几步: 第一步:读取配置文件***.xml。 第二步:根据配置文件找到对应的bean配置,并将其实例化。 第三步:调用实例化后的实例。
2016-09-17 08:26:23
2721
原创 spring bean中子元素lookup-method和replaced-method
spring bean中有两个子元素lookup-method和replaced-method,虽然不常用,但觉得很有用,拿出来聊聊。 1.lookup-method 通常称为获取器注入,spring in action中对它的描述是,一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,而实际要返回的bean是在配置文件里面配置的,可用在设计可插拔的功能上,接触程序
2016-09-11 14:49:34
7230
原创 Innodb事务种类及实现
innodb事务可以分为以下几种:1.扁平事务2.带有保存点的扁平事务3.链事务4.嵌套事务5.分布式事务各自分别介绍:1.扁平事务 这是事务中最简单的一种,也是使用最广泛的一种。在扁平事务中,所有的操作都在同一层次,由begin work开头,由commit work或者rollback work结束,两者之间的操作是原子性的,要么都做,要么都不做。 扁平
2016-09-05 10:11:38
3325
原创 innodb并发控制mvcc(多版本并发控制)
innodb有四种事务隔离机制,read uncommitted、read committed、repeatted read、 serializable,隔离界别依次提高,而且基本靠锁实现这些隔离级别,但众所周知,锁的消耗是很大的。当然,我们也都知道,mysql实现了一种乐观锁的机制,在select 时候加上 for update就可以了,而且我们知道乐观锁其实是不用锁的,是靠数据的版本控制实现的
2016-09-02 14:07:30
1451
原创 oracle snapshot too old异常
继oracle外键不加索引会死锁之后,又看到oracle一个有名的异常,snapshot too old,情景是这样的 假设有一个表,有一亿行数据,现在第一个任务在执行select *操作,第二个任务修改了第5000万行的数据,并进行了commit,那么等到第一个任务执行到第5000万行数据时,就会报snapshot too old异常,为什么会这样呢? 其实一般情况下,数据库都会
2016-09-01 17:36:26
8292
4
原创 docker理论方面的东西
上篇写了docker实践方面的东西,想想还是补充一下理论方面的吧,也好成为一个体系,方便学习。docker可以用运输业的集装箱来形象表示,没有集装箱之前:这种情况下,货物怎么运输,哪种运输工具运送哪种货物,没有一个标准,实际货物运输起来将会非常杂乱,形成如下的类似于全排列的东西看看这个,是不是花眼了,没有统一的标准,就会带来大量的局限性,试想一下,火车要适应运输所有货物的任
2016-08-31 17:25:05
540
原创 使用Dockerfile创建自己的docker镜像
前言docker理论之类的就不说了,网上一大顿,直接说我们最关心的,就是如何构建我们自己的镜像镜像是 Docker 的基础,它是容器运行环境的静态模板,包含了应用以及依赖环境。制作镜像步骤如下:1.准备构建环境:镜像构建环境,就是制作镜像的目录,里面包含了制作镜像所需要的所有资源,包含应用、配置文件、其他资源等。2.编写 Dockerfile 文件:Dockerfile...
2016-08-26 17:24:39
1856
原创 InnoDB行锁、事务还有死锁
InnoDB行锁有3种实现1.record lock,锁住单行记录2.gap lock,我们熟知的间隙锁,会锁住一个范围,但不包含记录本身3.next -key lock,前两种锁的联合使用,不仅锁定范围,也锁定记录本身。 InnoDB默认的事务隔离级别是repeatable read,在该隔离级别下,采用第三种方式来加锁;事务级别在read committed下,采用第一种加锁方
2016-08-21 16:28:38
1574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人