- 博客(78)
- 问答 (1)
- 收藏
- 关注
原创 同步异步 阻塞非阻塞 理解
同步异步 阻塞非阻塞 理解前言同步 vs 异步同步异步总结阻塞 vs 非阻塞基本概念阻塞非阻塞总结总结NIO为什么是同步非阻塞?其他前言对同步异步 阻塞非阻塞做一下简单的总结同步 vs 异步同步调用方被调用方发起请求处理请求返回结果处理返回结果下一步调用方被调用方调用方一直等到返回结果才执行下一步;调用方依赖被调用方异步调用方被调用方发起请求返回结果下一步等待资源执行请求处理请求调...
2019-09-14 19:53:57 209
原创 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 305
原创 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 755
原创 分布式事务个人理解
场景假设有一笔交易操作涉及两步,第一步:A系统对应账户扣除5块第二步:B系统对应账户增加5块AB也可以简单抽象为两个不同的数据库实现一(不加任何分布式事务)UML图如下:会出现问题的情况如下最大缺点:B失败却无法回滚A的操作;如何解决呢?需要满足的要求:. B失败后可以通知到A.A的事务还没有提交才可以做到回滚操作比较容易想到的...
2019-03-05 23:43:35 225
转载 bashrc bash_profile
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该...
2019-02-24 19:54:44 309
原创 状态模式
https://www.jianshu.com/p/8def04b34b3c这篇写的特别好。状态模式主要是:. 抽象所有的状态出来enum. 每个状态对应一个处理类. 所有的动作抽象出来enum. 状态机:通过当前状态以及动作来定位下一个状态 这里面主要的点就是免去写if else,每个状态负责自己的事件,每个状态到底如何跳转的动态逻辑封装在状态机(依据当前的状态以...
2019-01-03 09:07:52 134
原创 自动job任务分析
现状:. 任务断了以后需要配置lastId重跑,不方便,而且容易遗漏. 只能在一台机器上运行,性能有限。而且有中断风险,且不能主动通过邮件获知。 目标:. 任务执行有DB记录,最好有相应的细节信息. 任务执行情况每天有邮件通知到. 多台机器同时执行. 可以做自动重跑. 任务执行类型区分:主动触发;自动全量重跑;自动继续执行; 流程设计: ...
2018-12-23 14:52:42 250
原创 命令模式
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 140
原创 InnoDB事务理解
1. 标准事务【官方定义】read-uncommitted:会出现脏读,读到未提交的内容read-committed:会出现不可重复读,读到提交了的内容(某行)repeatable read:会出现幻读,范围读取读到新insert的内容(某范围行)Serializable:完美 2. InnoDBread-uncommitted:无甚区别read-committed...
2018-12-12 22:38:35 513
原创 消息初识
发送消息1. 正常流程step1. 业务执行step2. 发送消息优点:实现简单缺点:业务执行成功与否与发送消息成功与否会出现不一致举例:业务执行成功,消息发送/入库失败。目前项目中使用的就是这种方式,会采用兜底的方式来做最终一致。 2. 轻量保证一致 方法一step1:发送消息step2:存储消息step3:返回消息入库结果step4:业务...
2018-12-02 17:30:15 146
原创 分库分表初识
分库: 一般用于拆分不同的业务场景。业务场景之间关联越少越好分表:一般用于拆分同类数据。 难点:跨库/跨表查询操作:1. 排序应用层/中间件 需要做归并排序2. 函数处理 max/min/sum/count应用层/中间件 需要做处理3. 求平均值转化为sum + count4. 非排序分页先按照条件确定每个表的个数,按照比例获取5. 排序后分页...
2018-12-01 22:15:29 138
原创 单机与分布式一致性理解
ACID是数据库支持的基本特性:A:原子性 = 一荣俱荣,一损俱损。支持提交+回滚。单机:方案:通过undo日志(逻辑反操作)实现。分布式:方案:2PC/3PC/Paxos。一方面多个服务相关的数据库之间需要一荣俱荣,一损俱损;另一方面每个服务的分布式数据库内部需要保证每个节点的原子性(当有分表的时候)。 C:一致性 = 从一个正确的状态到下一个正确的状态单机:...
2018-12-01 18:33:42 297
原创 分布式服务调用
分布式服务调用策略:1. LVS中间代理,负载均衡系统做转发优点:代价低,可控性强缺点:流量压力大+必由之路,鸡蛋不在一个篮子里应用:面向C端 2. 名称服务名称服务器:负责收集服务器地址信息,提供这些地址信息给请求发起方各调用方机器:自己根据策略进行负载均衡优点:名称服务不会直接影响功能+减少了中间的带宽消耗缺点:代码升级较复杂 - > 当...
2018-11-25 21:08:31 644
原创 Mysql InnoDB 结构
1. Master Thread(老版本的基本逻辑,之后版本无非在此基础上做了一些细节调优,更加适应时代)脏页刷新、合并插入缓冲、UNDO回收每秒操作流程:重做日志缓冲刷新到磁盘(记录操作)合并插入缓冲刷新100个脏页至磁盘(checkpoint)如果当前没有用户活动,则切换到background loop每十秒操作流程:刷新脏页至磁盘合并插入缓冲重做日志缓...
2018-11-24 14:07:00 114
原创 OOM - 实例一
线上脚本任务出现了OOM,dump文件有27G左右,首先还是从线程去分析jstack -l pid查看线程,发现有同一个任务触发存在多个,排查下来定位是sleep时间过长,导致吞吐量不够,每天的任务会出现24h内都无法处理完成的情况。 经验代码实现要合理,尽量减少全局变量hold住大对象 脚本类型的任务吞吐量,触发时间,触发方式等都需要提前预估好 排查jstack文件时,p...
2018-11-03 07:51:30 408
原创 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 2332
原创 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 687
原创 JVM 调优
1. JVM调优基本原则(三选二)低延迟 高吞吐 大内存 2. 通用准则堆大小设置应为老年代活跃数据大小的3-4倍 新生代大小设置应为老年代活跃数据大小的1-1.5倍 老年代应为活跃数据大小的2-3倍 新生代至少为java堆大小的10%内存占用大小 活跃数据计算:fgc后 CMS垃圾收集开销在3%及以下时,就差不多到极限了 3.年轻代首先年轻代目前所有的算法都...
2018-10-27 22:40:29 233
原创 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 1051
原创 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 1445
转载 常量池 - 运行时常量池
常量池: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 351
转载 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 565
转载 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 123
转载 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 4388
原创 踩了个maven-assembly-plugin 的坑
<exclusions> <exclusion> <groupId>xxx</groupId> <artifactId>aaa</artifactId> </exclusion> <exclusion> &l
2018-07-01 17:30:46 2736
原创 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 337
原创 对象封装与社会
1.对象真实存在的意义就是其内部的状态信息,这些状态信息修改必须通过方法,如此我们称之为封装。这么做的好处在于,具体修改都是可控的。2. 一个简单项目,一般来说状态信息放在了数据库,这些状态信息可以通过程序入口(可以是http请求,可以是RPC,可以是web service)来进行修改。从一定程度上去抽象,这也是对整个业务的一种封装吧。正规路径是,所有的操作都走程序来修改。后门就是直接执行sql来...
2018-06-21 08:46:37 171
转载 SSH与SSH Agent区别
转载:https://www.jianshu.com/p/12de50582e63ssh-agent作用,这篇文章说的蛮清晰的。
2018-04-16 20:17:02 1076
原创 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 1324
原创 解决新安装的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 2042
转载 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 4403 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 1131
原创 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 4306 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 1079 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 412
原创 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 509
原创 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 192
空空如也
tomcat4.1.40源码阅读HttpProcessor疑点求解?
2015-07-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人