记录docker的安装部署和日常使用命令
如何在ECS上动态部署Hexo博客
如何在ECS上部署Hexo博客,实现git提交markdown文档,静态博客自动刷新
Netty的IO模型
要学Netty,得先从IO模型入手,一点点来。从Unix系统的5个IO模型,JDK的3种IO模型,Reactor模式的3种实现,最后到Netty事件模型的3种实现。
补完课,终于到Netty的IO模型这一章,(╥﹏╥),这一章主要从大颗粒度的了解下Netty的IO模型,Netty包含的组件,以及用Netty手写一个简单的RPC协议;
IO复用模型之Reactor
要学Netty,得先从IO模型入手,一点点来。从Unix系统的5个IO模型,JDK的3种IO模型,Reactor模式的3种实现,最后到Netty事件模型的3种实现。
本文主要搞清楚什么是Reactor模式?为什么要有Reactor模式?以及Reactor模式具体的3种实现方式是什么样的?
Java中的NIO模型
一个使用传统阻塞I/O的系统,如果使用一个请求对应一个线程这种模式,一旦有高并发
的大量请求,就会有如下问题:
- 线程不够用, 就算使用了
线程池
复用线程也无济于事; - 阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,
CPU利用率很低
,换句话说,系统的吞吐量低
; - 如果
网络I/O堵塞
或者有网络抖动或者网络故障等,线程的阻塞时间可能很长,整个系统也变的不可靠;
怎么办?NIO
闪亮登场!
Java中的IO模型
学Netty之前,得先了解Unix的5种IO模型,Java的3种IO模型;本文主要介绍Java中的3种IO模型(BIO,NIO,AIO);
- BIO的优化版(线程池实现异步)适用于1000以内的并发场景;
- NIO多路复用适用于高并发网络场景(Netty基于NIO实现);
- AIO暂时用的较少;
Unix中的5种IO模型
学Netty之前,得先了解Uinux中的5种I/O模型,Java的3种I/O模型;
本文主要介绍《UNIX网络编程.卷1#6.2节》一书中提到的Unix中的5种IO模型:
- 阻塞式I/O(blocking I/O)
- 非阻塞式I/O(non-blocking I/O)
- I/O复用(I/O multiplexing)
- 信号驱动式I/O(signal driven I/O)
- 异步I/O(asynchronous I/O)
通常一个 socket 上的输入操作包含2个阶段:
- 等待数据准备好:通常涉及等待数据从网络中到达,当所等待分组到达时,它被复制到内核中的某个缓冲区;
- 从内核向进程复制数据:数据从内核缓冲区复制到应用进程缓冲区。
上述5种IO模型就是在这2个阶段上各有不同的情况。
通过本文,搞清楚什么是同步I/O,异步I/O,阻塞I/O,非阻塞I/O,他们之间有什么区别和联系?
重学设计模式(一)
GOF的设计模式,大话设计模式,Head First设计模式3本书之前都看过,但一聊起来总觉得描述不成体系,归根到底就是没彻底搞明白,书本上的看了只是当时明白,不实践,或是实践了但没回头和书本上的理论对照总结,那终归不是自己的知识;
模式就是方法论/工具 ,一定要牢记在心,工具箱里有各种趁手的武器,设计时才能有比较和选择,站在巨人的肩膀上,可以看的更远;
这次我再重新学一遍,不仅是要知道每个设计模式的分类/定义,更要结合JDK和开源框架中的应用来深入理解。本篇是第一篇,列举所有模式和应用场景,后续会对每个模式写一篇,包含的模式的概念,解决问题,适用场景,实现类图和示例代码;
Spark作业的执行过程
JVM中类的加载过程
在搞清楚JVM运行时数据区里面的堆/栈/GC这些原理之前,得先搞清楚JVM是如何把class文件加载到内存中的,这是一切开始的原点。
本文就主要说明JVM如何把Bytecode
加载到Method Area
的全过程。
如何用金字塔思维来写技术笔记
之前写笔记也有意识的遵循一些规范/套路,比如WWW(What-是什么问题,When-什么情况发生,Why-为什么会这样),但都是些零碎,不成系统的经验之谈;
偶然了解到《金字塔原理》,和当初第一次阅读《高效能认识的七个习惯》一样的感觉,相见恨晚!
金字塔思维里阐述的表达技巧有别于文学创作,更注重的是信息传播的效率
,以最少的语言,最简洁的形式让读者get到作者想表达的内容,写技术笔记真是再适合不过了;
本文主要记录如何运用金字塔思维来写技术笔记
,持续更新写笔记的方法论。
注意一篇文章关注解决1个问题
浅析Java中的锁
现如今程序大多运行在核多线程的硬件环境下,为了保证资源的读写安全,于是出现了各种各样的锁,那么锁是什么?为什么要有锁?有哪些锁?不同锁的实现原理、优缺点、适用场景是什么?有哪些使用案例?
本文主要介绍Java中的锁,涉及到下面几种分类:
- 乐观锁/悲观锁;
- 共享锁/互斥锁;
- 读锁/写锁;
- 轻量级锁/重量级锁;
- 偏向锁/可重入锁;
- 非公平锁/公平锁;
Redis持久化
持久化是Redis HA的一种,主要实现数据备份,与
主从复制
相比强调的是由内存到硬盘
的备份。
本文总结Redis的持久化策略(RDB和AOF),各自的文件格式
、控制参数
、触发机制
、实现方式
、实现原理
、执行流程
、优缺点
。
Hbase背景知识
介绍Hbase出场背景、解决问题、应用场景
Hbase是山寨Google的Bigtable的开源、分布式、列数据库,可以解决海量数据的存储问题,适用于需要随机、实时读/写的场景;
Android平台的串口通信技术
安卓开发中的串口通信技术
Android集成bugly异常监控插件
安卓开发中的异常监控方案-Bugly
记一次Locust分布式压测实践
记录性能测试的相关知识与实践:测试指标,测试工具,性能调优点
如何模拟消息队列来并行处理任务
在某些场景,没有资源独立部署消息队列集群,但是有异步任务又需要快速处理完成,这时候就需要并行计算来解决了,
参考MQ的生产者消费者工作模式,将任务生产者
与消费者
通过队列
的实现解耦;
1个生产者生成一批任务后,阻塞等待多个消费者并行执行完成,然后释放消费者线程和生产者线程;
记一次MySQL死锁问题排查
记一次不可回滚的数据迁移
记录一次系统重构升级时涉及数据迁移的注意事项;