自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 问答 (1)
  • 收藏
  • 关注

原创 同步异步 阻塞非阻塞 理解

同步异步 阻塞非阻塞 理解前言同步 vs 异步同步异步总结阻塞 vs 非阻塞基本概念阻塞非阻塞总结总结NIO为什么是同步非阻塞?其他前言对同步异步 阻塞非阻塞做一下简单的总结同步 vs 异步同步调用方被调用方发起请求处理请求返回结果处理返回结果下一步调用方被调用方调用方一直等到返回结果才执行下一步;调用方依赖被调用方异步调用方被调用方发起请求返回结果下一步等待资源执行请求处理请求调...

2019-09-14 19:53:57 183

原创 NIO实现服务端 和 客户端

重点:selector 的regist和 select 方法是用的同一个锁,所以需要注意避免阻塞https://bugs.openjdk.java.net/browse/JDK-6446653以下DEMO基本思路为tomcat实现备注:由于java的nio是采用水平触发,为了避免不断的write事件,需要引入blockingQueue来控制写流程服务端import jav...

2019-07-28 11:33:45 275

原创 OOM -- 调优实例二(docker OOM退出)

背景:docker偶尔会出现直接OOM退出,通过jstat -gccasue xxx发现老年代持续增加,直到整个docker oom排查:dump 下来文件发现真实存活的对象并不多;如果采用jmap -dump:live xxx时触发了FGC后,老年代会急剧减少分析:从现象显然可知:在老年代还没有触发时,整个机器都崩溃了再排查了以下jvm的xmx和xmn发现...

2019-05-13 22:25:08 707

原创 分布式事务个人理解

场景假设有一笔交易操作涉及两步,第一步:A系统对应账户扣除5块第二步:B系统对应账户增加5块AB也可以简单抽象为两个不同的数据库实现一(不加任何分布式事务)UML图如下:会出现问题的情况如下最大缺点:B失败却无法回滚A的操作;如何解决呢?需要满足的要求:. B失败后可以通知到A.A的事务还没有提交才可以做到回滚操作比较容易想到的...

2019-03-05 23:43:35 189

转载 bashrc bash_profile

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该...

2019-02-24 19:54:44 295

原创 状态模式

https://www.jianshu.com/p/8def04b34b3c这篇写的特别好。状态模式主要是:. 抽象所有的状态出来enum. 每个状态对应一个处理类. 所有的动作抽象出来enum. 状态机:通过当前状态以及动作来定位下一个状态 这里面主要的点就是免去写if else,每个状态负责自己的事件,每个状态到底如何跳转的动态逻辑封装在状态机(依据当前的状态以...

2019-01-03 09:07:52 120

原创 自动job任务分析

现状:. 任务断了以后需要配置lastId重跑,不方便,而且容易遗漏. 只能在一台机器上运行,性能有限。而且有中断风险,且不能主动通过邮件获知。 目标:. 任务执行有DB记录,最好有相应的细节信息. 任务执行情况每天有邮件通知到. 多台机器同时执行. 可以做自动重跑. 任务执行类型区分:主动触发;自动全量重跑;自动继续执行; 流程设计: ...

2018-12-23 14:52:42 230

原创 命令模式

A: 调用方B:被调用方假设: A 需要依次调用B的多个方法方式一:A直接new B()A依次调用B的多个方法优缺点:实现简单。紧耦合,而且A需要关心整个调用顺序。将来如果流程逻辑修改了,A需要修改调用流程。 方式二:A直接new B()A调用B的某个方法B的方法依次调用B的多个方法优缺点:实现简单。A与B耦合一个方法,正常的业务流程中经常写...

2018-12-23 01:00:11 123

原创 InnoDB事务理解

1. 标准事务【官方定义】read-uncommitted:会出现脏读,读到未提交的内容read-committed:会出现不可重复读,读到提交了的内容(某行)repeatable read:会出现幻读,范围读取读到新insert的内容(某范围行)Serializable:完美 2. InnoDBread-uncommitted:无甚区别read-committed...

2018-12-12 22:38:35 484

原创 消息初识

发送消息1. 正常流程step1. 业务执行step2. 发送消息优点:实现简单缺点:业务执行成功与否与发送消息成功与否会出现不一致举例:业务执行成功,消息发送/入库失败。目前项目中使用的就是这种方式,会采用兜底的方式来做最终一致。 2. 轻量保证一致 方法一step1:发送消息step2:存储消息step3:返回消息入库结果step4:业务...

2018-12-02 17:30:15 123

原创 分库分表初识

分库: 一般用于拆分不同的业务场景。业务场景之间关联越少越好分表:一般用于拆分同类数据。 难点:跨库/跨表查询操作:1. 排序应用层/中间件 需要做归并排序2. 函数处理 max/min/sum/count应用层/中间件 需要做处理3. 求平均值转化为sum + count4. 非排序分页先按照条件确定每个表的个数,按照比例获取5. 排序后分页...

2018-12-01 22:15:29 118

原创 单机与分布式一致性理解

ACID是数据库支持的基本特性:A:原子性 = 一荣俱荣,一损俱损。支持提交+回滚。单机:方案:通过undo日志(逻辑反操作)实现。分布式:方案:2PC/3PC/Paxos。一方面多个服务相关的数据库之间需要一荣俱荣,一损俱损;另一方面每个服务的分布式数据库内部需要保证每个节点的原子性(当有分表的时候)。 C:一致性 = 从一个正确的状态到下一个正确的状态单机:...

2018-12-01 18:33:42 279

原创 分布式服务调用

分布式服务调用策略:1. LVS中间代理,负载均衡系统做转发优点:代价低,可控性强缺点:流量压力大+必由之路,鸡蛋不在一个篮子里应用:面向C端  2. 名称服务名称服务器:负责收集服务器地址信息,提供这些地址信息给请求发起方各调用方机器:自己根据策略进行负载均衡优点:名称服务不会直接影响功能+减少了中间的带宽消耗缺点:代码升级较复杂 - > 当...

2018-11-25 21:08:31 626

原创 Mysql InnoDB 结构

1. Master Thread(老版本的基本逻辑,之后版本无非在此基础上做了一些细节调优,更加适应时代)脏页刷新、合并插入缓冲、UNDO回收每秒操作流程:重做日志缓冲刷新到磁盘(记录操作)合并插入缓冲刷新100个脏页至磁盘(checkpoint)如果当前没有用户活动,则切换到background loop每十秒操作流程:刷新脏页至磁盘合并插入缓冲重做日志缓...

2018-11-24 14:07:00 99

原创 OOM - 实例一

线上脚本任务出现了OOM,dump文件有27G左右,首先还是从线程去分析jstack -l pid查看线程,发现有同一个任务触发存在多个,排查下来定位是sleep时间过长,导致吞吐量不够,每天的任务会出现24h内都无法处理完成的情况。 经验代码实现要合理,尽量减少全局变量hold住大对象 脚本类型的任务吞吐量,触发时间,触发方式等都需要提前预估好 排查jstack文件时,p...

2018-11-03 07:51:30 382

原创 JVM 线程无法回收排查 -- 实例

问题排查步骤:1. jstack查看jvm线程信息,发现已经有1w+线程存在2. 看命名规范:pool-11238-thread-1大量存在,且处于waiting状态,由此可以猜测代码中存在一种ThreadPoolExecutor调用,coresize设置为1的地方每次调用完没有回收3. 登录服务器,jmap -dump 文件,下载至本地4. 使用jvisualvm工具查看dump...

2018-10-30 23:15:50 2254

原创 JVM invokedynamic 和 lambda

invokedynamic(每个含有该指令的地方都可以称为“动态调用点”)https://blog.csdn.net/raintungli/article/details/54910152这篇文章外加 《深入理解java虚拟机》p258 讲的很清楚了 lambda实现非常类似于  总结:a. invokedynamic与MethodHandle机制作用是一样的,一个采用字节码和Class...

2018-10-29 22:26:23 671

原创 JVM 调优

1. JVM调优基本原则(三选二)低延迟 高吞吐 大内存 2. 通用准则堆大小设置应为老年代活跃数据大小的3-4倍 新生代大小设置应为老年代活跃数据大小的1-1.5倍 老年代应为活跃数据大小的2-3倍 新生代至少为java堆大小的10%内存占用大小 活跃数据计算:fgc后 CMS垃圾收集开销在3%及以下时,就差不多到极限了 3.年轻代首先年轻代目前所有的算法都...

2018-10-27 22:40:29 199

原创 ThreadPoolExecutor 运作机制再次理解 ----- 一次小坑记

private static final ExecutorService executorService = new ThreadPoolExecutor(20, 25, 1000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(1), new ThreadPoolExecutor.CallerRunsPolicy());这里核心线程数20...

2018-10-25 20:39:13 1029

原创 JVM调优--排查经历(CMS的弊端)

背景:脚本任务,多线程执行,执行频次非常高;但是执行效率不高,从JVM入手做调优sh-4.2# jstat -gc 64 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT...

2018-10-14 13:43:30 1402

转载 常量池 - 运行时常量池

常量池:javap -verbose xxxnotice: xxx is a compiled class file以上指令显示的:Constant pool 就是所谓的常量池,该内容的大小固定,在编译期就已经固。存储的内容类似于:#1 = Methodref #2 = Class #3 = Methodref #4 = Fieldref #5 = Methodref...

2018-10-10 08:51:10 325

转载 jvm 基本语句

jps -v查看java 进程https://www.cnblogs.com/yjd_hycf_space/p/7755633.htmlhttps://cloud.tencent.com/developer/article/1041071

2018-10-09 10:42:21 543

转载 linux firewalld 管理

https://blog.csdn.net/yanzi1225627/article/details/51470962添加端口# firewall-cmd --zone=public --add-port=6022/tcp --permanent# firewall-cmd --zone=public --add-port=6022/udp --permanent删除一个端口...

2018-10-07 15:23:11 106

转载 curl方式执行脚本时传参问题

http://blog.51cto.com/xoyabc/1950743通常执行发布机上的脚本时习惯使用以下方式: 1 curl http://example.com/script.sh | bash  若涉及到传入参数时,则可使用 1 2 3 1. curl http://example.com/...

2018-08-01 12:49:06 4354

原创 踩了个maven-assembly-plugin 的坑

<exclusions> <exclusion> <groupId>xxx</groupId> <artifactId>aaa</artifactId> </exclusion> <exclusion> &l

2018-07-01 17:30:46 2717

原创 maven -- dependencyManagement

1. When you have a set of projects that inherits a common parent it's possible to put all information about the dependency in the common POM and have simpler references to the artifacts in the child P...

2018-06-23 17:02:30 311

原创 对象封装与社会

1.对象真实存在的意义就是其内部的状态信息,这些状态信息修改必须通过方法,如此我们称之为封装。这么做的好处在于,具体修改都是可控的。2. 一个简单项目,一般来说状态信息放在了数据库,这些状态信息可以通过程序入口(可以是http请求,可以是RPC,可以是web service)来进行修改。从一定程度上去抽象,这也是对整个业务的一种封装吧。正规路径是,所有的操作都走程序来修改。后门就是直接执行sql来...

2018-06-21 08:46:37 156

转载 spring 多个事务的配置

https://blog.csdn.net/clementad/article/details/47275227

2018-06-19 12:12:46 1103

转载 SSH与SSH Agent区别

转载:https://www.jianshu.com/p/12de50582e63ssh-agent作用,这篇文章说的蛮清晰的。

2018-04-16 20:17:02 1052

原创 Java RMI实现原理

1. 启动Registry服务:registry = LocateRegistry.createRegistry(1099);2. 处理请求:Registry是监听1099端口,通过什么传输内容呢?传输的又是什么内容呢?底层协议肯定是不是TCP/IP?不出意料,也是通过socket编程来listen/accept。而且这里是简单的同步阻塞式listen->sun.rmi.transport....

2018-04-16 00:02:10 1278

原创 旅游准备 思维导图

2018-02-12 20:15:25 4233

原创 InnoDB理解

个人理解InnoDB主要实现了两个功能:速度+正确性思维导图如下:

2018-02-05 22:10:51 178

原创 解决新安装的redhat不能链接wifi的问题

简单介绍步骤:1. 首先使用journalctl -t network查看 netowrkmanager的启动日志我这里是发现没有安装Networkmanager-wifi2. 可以手动去http://rpm.pbone.net/ 下载++++++++另外还顺带解决了redhat 的yum 替换成 CentOS 的yum具体见:https://zhuanla

2018-02-01 11:25:29 1987

转载 redhat 7 配置CentOS 7 yum源(转载,亲测可用)

转自知乎:https://zhuanlan.zhihu.com/p/26125618由于redhat 的更新包只对注册的用户生效,所以需要自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的,所以无需担心软件包是否可安装,下面是安装步骤。1、首先查看redhat 7.0系统本身所安装的那些yum 软件包:[root@pan ~]# rpm

2018-02-01 10:40:36 4346 1

原创 Mysql InnoDB 事务简单理解

1. 事务基本特性: ACIDA 由undo 来实现的I 由锁实现D 由redo实现C 由AID共同保证2. undo 实现了 事务的回滚 以及 MVCC事务的回滚: 记录下事务期间的所有Update/Delete/Insert操作的前后value,当需要rollback时会做一个相反的操作。MVCC:undo恰好记录下了事务期间的快照信息,当Update/Delete

2018-01-31 14:32:06 1101

原创 ForkJoinPool 使用的错误写法

compute分出多个task后:以task1,task2为例错误做法:1)依次执行task1.fork(),task2.fork()2)依次执行task1.join(),task2.join()正确做法:1)直接调用invokeAll(task1,task2)fork():把task置入当前ForkJoinWorkerThread的queue中,等待被消费

2018-01-23 08:56:43 4261 1

原创 ForkJoinPool 源码分析

一个ForkJoinPool 对应多个ForkJoinWorkerThread一个ForkJoinWorkerThread 对应多个ForkJoinTask以一个简单的求和Task为例:public class ForkJoinTest { public static void main(String[] args) { ForkJoinPool fjp = ne

2018-01-22 18:50:34 1051 1

原创 Spring 得到FactoryBean

查看源码: // Now we have the bean instance, which may be a normal bean or a FactoryBean. // If it's a FactoryBean, we use it to create a bean instance, unless the // caller actually wants a referen

2018-01-18 21:48:31 360

原创 for i 与 Iterator效率比较

看Collections.fill方法的实现 public static void fill(List list, T obj) { int size = list.size(); if (size < FILL_THRESHOLD || list instanceof RandomAccess) { for (int i=0;

2018-01-18 20:34:53 484

原创 FutureTask 理解

1. FutureTask主要有三个方法:run/get/cancela. run执行前如果state = NEW那么直接执行执行前如果state !=NEW那么直接结束执行中可能被cancel方法interruptb. getrun执行结束分两种情况:正常结束/Exception正常结束get得到结果/Exception时get会throw Exceptionc.

2018-01-18 15:30:26 173

空空如也

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

TA关注的人

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