自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

擀面皮

面皮搅猪头肉,撩咋咧

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

原创 使用arthas热加载

工作中经常有这种问题:线上有问题,需要排查,但是相关关键日志没有打印,不好定位问题,这个时候那就修改代码,再发布一次,然后排查问题,这样是可行的,但是不利于快速排查问题 之前一直使用阿里的arthas,偶然发现它具备热加载的功能,很好用,这里记录下(当然,也是从别人那里学习的) 我们要达到的效果是不需要发布,直接修改相关文件,然后热加载,做到线上动态更新相关文件功能 ...

2020-02-25 11:43:56 1779

转载 数据库连接池设置----可能跟你想的不一样

看到一篇关于数据库连接池设置的文章,讲的很透彻,贴出来,共同学习译文:https://blog.csdn.net/zzzgd_666/article/details/82842839原文:https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing...

2019-07-02 09:24:11 209

原创 jdbc流stream读取超大数据

这几天在做分库分表,涉及到数据迁移,然后设计的方案是使用mybatis将数据分批读取出来,每批大概40--50万条数据,然后将查询来的数据再insert进去,发现这个效率很低,程序有卡顿,而且客户端很容易OOM。找了一下原因就是jdbc默认的读取数据的时候,会将要查询的数据一次性读到内存中,再通过resultSet循环读取出来,这样子40--50万条数据很容易就撑爆内存,然后调研了下发现,其实...

2019-04-03 16:44:40 6395 3

原创 mysql事务隔离级别另类解释

MySQL事务隔离级别老生常谈,老是理解不到位,今天以特定的角度理解一下1.前提:MySQL为了多用户同时操作数据时避免相互干扰所以产生了事物的隔离级别2.有这么几种:read-uncommitted(读未提交) 、read-committed(读已提交)、read-repeated(可重复读)、serializable(串读)我们这么理解:将前三种种拆成两部分,每一部分表示一个事...

2018-11-22 20:32:25 242 1

原创 还记得java getResource和getResourceAsStream吗

首先说一个概念,classpath,指的是编译后的class文件、xml、properties等配置文件所在的目录。比如,如果是maven项目,classpath为“项目名/target/classes”,如果是普通项目,可能是”项目名/bin”,或者”项目名/build/classes”等等java读取文件时,有getResource和getResourceAsStream可以用,具体怎么用...

2018-09-13 11:37:13 765

原创 java之异步回调

异步回调我的理解:1.使用了委托模式,调用方(ServiceA)持有被调用方(ServiceB)的引用,然后调用被调用方(ServiceB)的方法,被调用方方法(ServiceB)完成后,调用调用方(ServiceA)的回调函数做一些事情2.异步回调多是一些耗时的操作,在新线程中去调用被调用方(ServiceB)方法3.异步回调可以大大提高IO效率,这是当前开发的主流,比如Netty、...

2018-09-02 20:19:35 3529

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

原创 基于注解的可校验泛型的参数校验工具

基于注解的校验工具很多,但有些不是很符合自己的场景,自己写了一个,亲测可用可以校验入参中的单个参数、列表、带泛型的列表(List<String>),但是嵌套的泛型(List<List<String>>)不能校验:注解类:package com.mhc.gw.sti.api.jd.util;import java.lang.annotation....

2018-08-28 11:21:37 1945

原创 策略模式之策略枚举

在使用策略模式时,我们要创建相应的策略,然后根据不同的场景使用不同的策略,这是可以的,但毕竟那是一堆的策略类,使用起来代码的可读性、扩展性也就一般,这种情况下我们可以使用策略模式的升级版---策略枚举来解决上边的问题枚举类:public enum StrategyEnum { ADD("+") { @Override public int exec...

2018-08-18 22:31:58 3590

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

转载 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 111

原创 数据拆分小工具

有时候,我们会有将列表进行拆分处理的需求,比如一个100容量的列表,拆成20个单个容量是5的小列表进行处理,下边是一个实现:public class DataUtil{ /** * 此方法用来对数据按照一定块大小进行切分,适合需要将数据先进行切分再进行依次处理的场景 * 参数: * 1.waitToSplitData:待切分数据 * 2.需...

2018-07-30 10:36:37 1101

原创 基于ThreadLocal的Rpc调用计时工具

最近写了一个基于ThreadLocal的计时小工具,先看看代码:public class TimeRecordUtil { private static final ThreadLocal<Long> START_TIME = new ThreadLocal<>(); /** * (第一步调用)开始调用 */ public...

2018-07-30 10:31:10 615 1

原创 Guava小工具之Interners

   大家都知道,String是final的,每次对它的操作都会产生新的String,这很大程度上是安全性的考虑,但是产生大量的String也是会有一些问题的,1.大量的String会对gc产生影响;2.两次 new String(“aa”)操作,产生的String不一样,如果用这两个去做synchronized(String)操作就达不到想要的效果,因为synchronized必须是对同一个对象...

2018-07-28 15:21:10 6457 2

原创 Guava小工具之Supplier

最近在看Guava的源码,Supplier这个小工具比较有意思,今天聊一聊。 Supplier是一个接口,里面只有一个get方法,然后Suppliers类里面有两个内部类实现了这个接口,ExpiringMemoizingSupplier和MemoizingSupplier,它们主要是为了延迟获取在get方法中创建的对象,一个有超时时间,一个没有,其实也可以理解为将需要使用的东西做了一个懒...

2018-07-27 18:03:26 1669

原创 ThreadPoolExecutor使用实例

使用场景:需要同时创建多个线程去访问某一接口,并将返回数据进行组装1. 创建ThreadPoolExecutor,切记创建在类的方法之外,这样就不会调用一次方法,创建一个ThreadPoolExecutorprivate final static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 30, 2000, TimeUnit....

2018-05-31 16:25:01 7607 1

原创 unix编程艺术读书笔记

1.设计中,应该将代码的复杂度转移到数据结构中,以求达到程序的逻辑质朴而健壮,如c语言中的指针所实现的功能,在其他语言中就需要更加复杂的代码实现才能完成2.程序要具有透明性(看一眼就大概知道做的什么事情)和显见性(程序自带监视和显示内部状态的功能)3.先求运行、再求正确、最后求快(过早优化是万恶之源)4.宁愿抛弃、重建代码,也不要老是修补那些蹩脚的代码,让代码可维护,从而来吸引未来的维

2017-10-12 17:20:20 206

原创 Java类加载机制ClassLoader之ContextClassLoader

1.java的classLoader加载机制大家都比较清楚,就是委托机制,如下这种机制就是,加载一个类的时候,会一直向上委托,如果BootStrapClassLoader加载不到,然后再依次往下加载,如果最后SystemClassLoader也加载不到,则会抛出classNotFoundException。2.现在我们来说说其他的,说之前先说说两个概念,这个是转述别人的(http:

2017-09-22 18:19:26 3586

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

原创 InheritableThreadLocal-- 特殊的ThreadLocal

ThreadLocal允许我们在线程中保存一些变量,但是做不到父子线程数据的共享public class InheritThreadLocal { public static ThreadLocal threadLocal = new ThreadLocal();// public static ThreadLocal threadLocal = new Inherita

2017-06-20 19:56:35 1738

原创 规则引擎之drools

    drools是一个规则引擎,可以将开发从业务中解放出来,不用重复写不同的业务、然后测试、上线,只需要将业务规则配置到drl文件,然后每次有新业务需求的时候,只需要改一下配置文件,项目不需要重新上线。drools帮你装载规则,解析规则,应用规则到你的业务。总之,使用drools你可以将业务规则的判定放在引擎里面去做,程序中只保留需要的业务数据。    比如抽奖,其实抽奖每次规则都是差不多...

2017-05-12 16:06:37 711

原创 谈谈秒杀场景

一直对秒杀场景很感兴趣,无奈经验确实一般,最近看了两篇文章,现在做个学习笔记,这里贴出文章链接,欢迎大家共同学习58到家沈剑的http://mp.weixin.qq.com/s/5aMN9SqaWa57rYGgtdAF_A 还有一篇http://www.cnblogs.com/billyxp/p/3701124.html     以下图来做说明秒杀的原则其实就是“削峰填谷”

2017-02-24 15:44:33 1647

原创 spring事务传播属性和隔离级别

spring事务传播属性和隔离级别这种东西经常会用到,但是估计好多人和我一样名词记不住,往往在一些面试中就吃了哑巴亏,所以这里大概罗列一下,以备不时之需1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务

2017-02-23 10:23:48 385

原创 前端访问负载均衡怎么弄

一直对浏览器到服务层这部分访问是的负载均衡不是很清楚,今天看了一篇58到家shenjian的文章,觉得不错,这里大概说说自己的感想,文中的图都是借用人家的,特此说明第一阶段(裸奔)请求量很少,通过浏览器访问一个域名,经过DNS解析后,直接就到了 tomcat了

2017-02-22 16:41:05 9908 1

原创 重构读书笔记

总结一下重构的读书笔记,一个个知识点总结1   注释   1   尽量少写注释,注释是用来弥补你代码表述的不足,注释越多,说明你的代码越不易理解   2   用代码的清晰度来做注释,如果你的代码读起来让人感觉就跟看一行行清晰的注释,那你的可读性就非常高   3  少写注释还有一个原因,就是注释可能一百年不会有人修改,而那个时候你的代码早已面目全非了,那个时候,注释无疑就是毒药2

2016-12-29 16:38:12 341

原创 缓存Map高并发下的访问

有一个场景,我们需要对map中的key所对应的value频繁的更新,高并发下,势必要对map加锁,这样锁就会成为访问这个map的瓶颈,有以下办法可以减弱这种锁的影响1.对map进行拆分,如按照key值进行取模,将一个map拆分成多个map,这个其实也是concurrentHashMap的做法,但这种锁的粒度其实还是有点大2.将map转化到array中去,这样的话,一个(key,value)

2016-10-11 11:16:00 2068 1

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

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

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

原创 最安全的单例模式--java使用内部类实现单例模式

实现类public class Singleton {    private static class LazyHolder {           private static final Singleton INSTANCE = new Singleton();         }         private Singleton (){}         publi

2016-10-10 12:57:55 16203 1

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

原创 spring默认标签解析

上篇说到对Document的解析,其中的方法并没有深究,那么spring究竟是如何解析Document默认标签的呢?bean标签的解析   此方法是spring解析默认标签的实现,里面有好几种bean的解析,我们来看最复杂的processBeanDefinition(),这就是对我们日常所用bean的解析。   可以看到,在此方法中,依次对bean进行了解析,并将结果放

2016-09-17 15:38:47 935

原创 spring加载--从xml配置文件到内存

spring最初的形态是存在于xml配置文件中的,使用的时候bean实例又是存在于内存中的,今儿聊聊spring对于xml文件的加载,也就是spring怎么将bean从xml搬到内存中的。1.spring管理使用bean无非就是这几步:     第一步:读取配置文件***.xml。     第二步:根据配置文件找到对应的bean配置,并将其实例化。     第三步:调用实例化后的实例。

2016-09-17 08:26:23 2658

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

原创 Innodb事务种类及实现

innodb事务可以分为以下几种:1.扁平事务2.带有保存点的扁平事务3.链事务4.嵌套事务5.分布式事务各自分别介绍:1.扁平事务  这是事务中最简单的一种,也是使用最广泛的一种。在扁平事务中,所有的操作都在同一层次,由begin work开头,由commit work或者rollback work结束,两者之间的操作是原子性的,要么都做,要么都不做。  扁平

2016-09-05 10:11:38 3211 2

原创 innodb并发控制mvcc(多版本并发控制)

innodb有四种事务隔离机制,read uncommitted、read committed、repeatted read、 serializable,隔离界别依次提高,而且基本靠锁实现这些隔离级别,但众所周知,锁的消耗是很大的。当然,我们也都知道,mysql实现了一种乐观锁的机制,在select 时候加上 for update就可以了,而且我们知道乐观锁其实是不用锁的,是靠数据的版本控制实现的

2016-09-02 14:07:30 1370

原创 oracle snapshot too old异常

继oracle外键不加索引会死锁之后,又看到oracle一个有名的异常,snapshot  too old,情景是这样的  假设有一个表,有一亿行数据,现在第一个任务在执行select *操作,第二个任务修改了第5000万行的数据,并进行了commit,那么等到第一个任务执行到第5000万行数据时,就会报snapshot  too old异常,为什么会这样呢?  其实一般情况下,数据库都会

2016-09-01 17:36:26 8078 4

原创 docker理论方面的东西

上篇写了docker实践方面的东西,想想还是补充一下理论方面的吧,也好成为一个体系,方便学习。docker可以用运输业的集装箱来形象表示,没有集装箱之前:这种情况下,货物怎么运输,哪种运输工具运送哪种货物,没有一个标准,实际货物运输起来将会非常杂乱,形成如下的类似于全排列的东西看看这个,是不是花眼了,没有统一的标准,就会带来大量的局限性,试想一下,火车要适应运输所有货物的任

2016-08-31 17:25:05 496

原创 使用Dockerfile创建自己的docker镜像

前言docker理论之类的就不说了,网上一大顿,直接说我们最关心的,就是如何构建我们自己的镜像镜像是 Docker 的基础,它是容器运行环境的静态模板,包含了应用以及依赖环境。制作镜像步骤如下:1.准备构建环境:镜像构建环境,就是制作镜像的目录,里面包含了制作镜像所需要的所有资源,包含应用、配置文件、其他资源等。2.编写 Dockerfile 文件:Dockerfile...

2016-08-26 17:24:39 1791

原创 InnoDB行锁、事务还有死锁

InnoDB行锁有3种实现1.record lock,锁住单行记录2.gap lock,我们熟知的间隙锁,会锁住一个范围,但不包含记录本身3.next -key lock,前两种锁的联合使用,不仅锁定范围,也锁定记录本身。 InnoDB默认的事务隔离级别是repeatable read,在该隔离级别下,采用第三种方式来加锁;事务级别在read committed下,采用第一种加锁方

2016-08-21 16:28:38 1500

空空如也

空空如也

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

TA关注的人

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