- 博客(41)
- 收藏
- 关注
原创 @PostConstruct虽好,请勿乱用
1.@PostConstruct 修饰的方法是在bean初始化的时候执行,并且相比其它初始化方法,它们的顺序是@PostConstruct> nitializingBean > init-method2.不要在@PostConstruct 中执行耗时任务,它会影响程序的启动速度,如果实在有这样的需求可以考虑异步执行或者使用定时任务。3.程序中如果有类似future.get获取线程执行结果的代码,尽量使用有超时时间的get方法。
2023-11-21 15:52:19 1333
原创 一个由Dubbo Thread pool is EXHAUSTED引发的问题排查
Dubbo Thread pool is EXHAUSTED
2022-09-12 01:12:07 2894 1
原创 SpringMVC统一封装响应结果接口返回String类型时的异常问题分析
利用ResponseAdvisor对Controller的响应结果做了统一封装,接口返回String类型时,抛出类型转换异常。
2022-06-26 03:00:30 1771 2
原创 Netty指南(8):Netty的TCP粘包和拆包解决方案
一、Netty编解码器与Handler调用机制1.1 基本说明Netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送
2022-05-06 00:44:58 713 1
原创 Netty指南(7):Google protobuf 基本介绍
一、Google protobuf1.1 编码和解码的基本介绍编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码[示意图]codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据1.2 Netty 本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器
2022-05-06 00:32:08 507
原创 Netty指南(6):Netty核心模块组件简介
一、Netty核心模块组件1.1 Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup
2022-05-06 00:28:50 318
原创 Netty指南(5):Netty高性能架构设计之Reactor线程模型
一、Netty高性能架构设计1.1 线程模型基本介绍不同的线程模式,对程序的性能有很大影响,为了搞清 Netty 线程模式,我们来系统的讲解下各个线程模式,最后看看 Netty 线程模型有什么优越性。目前存在的线程模型有:传统阻塞 I/O 服务模型 Reactor 模式根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现单 Reactor 单线程;单 Reactor多线程;主从 Reactor多线程Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型
2022-05-06 00:20:22 391
原创 Netty指南(4):理解NIO与零拷贝原理
1 NIO 与零拷贝1.1 零拷贝基本介绍零拷贝是网络编程的关键,很多性能优化都离不开。在 Java 程序中,常用的零拷贝有 mmap(内存映射)和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?我们分析 mmap 和 sendFile 这两个零拷贝另外我们看下 NIO 中如何使用零拷贝1.2 传统 IO 数据读写Java 传统 IO 和网络编程的一段代码File file = new File("test.txt");RandomAccessFile raf =
2022-05-06 00:00:09 221
原创 Netty指南(3):深入理解Java NIO编程
一、Java NIO编程1.1 Java NIO 基本介绍同步异步阻塞非阻塞可参考IO 与 NIOJava NIO 全称 Java non-blocking IO ,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 NewIO),是同步非阻塞的。NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】NIO 有三大核心部分: Channel(通道)、Buffer(
2022-05-05 23:53:13 384
原创 Netty指南(2):Java BIO模型工作机制
二、Java BIO编程2.1 I/O 模型2.1.1 模型基本说明I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式:BIO、NIO、AIO。Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。【简单示意图】Java NIO:同步非阻塞,服务器实现模式为一个线程处
2022-05-05 23:09:17 167
原创 Netty指南(1):Netty简介
一、Netty介绍与应用场景1.1 Netty 的介绍Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。要透彻理解 Netty,需要先学
2022-05-05 22:50:17 248
原创 Redis的设计与实现(6):Redis如何实现高可用
十、SentinelSentinel(哨兵)是Redis的高可用性(Hign Availability,HA)的解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及属下的所有从服务器。当主服务器下线时,自动将下线的某个主服务器属下的某个从服务器升级为新的主服务器。从而实现故障转移,当原来的主服务器重新上线时,会被降级为从服务器。下面展示了哨兵监视主从的状态:10.1启动并初始化Sentinel启动Sentinel有两种方式:redis-sentine
2022-04-18 01:03:38 630
原创 Redis的设计与实现(5):主从复制策略和优化
九、复制通过SLAVEOF命令或配置文件中设置slaveof选项,让一个服务器去复制另一个服务器,被复制的为主服务器,对其复制的称为从服务器。9.1旧版复制功能Redis在2.8以前使用旧版本复制,在短线重连后的从服务器会遇上低效的情况。Redis的复制功能分为同步和命令传播俩操作:同步用于把从服务器的数据库状态更新至主服务器的数据库状态。命令传播是在主服务器的数据库状态被修改时,导致主从数据库状态不一致时,让主从回到一致的过程。同步从服务器对主服务器的同步(下文以主从代替),需要向主服
2022-04-18 01:00:15 794
原创 Redis的设计与实现(4):什么是Redis的事件驱动程序
六、事件Redis服务器是一个事件驱动程序,主要有两种:文件事件:Redis服务器通过套接字与客户端连接,文件事件就是服务器对套接字操作的抽象。服务器与客户端通信会产生相应文件事件,服务器通过监听这些事件来完成一系列网络通信操作。时间事件:Redis服务器有一些需要在给定时间内执行的操作,而时间事件就是对这类定时操作的抽象。简单来说,文件事件就是套接字操作相关的事件;时间事件就是定时操作相关事件。6.1文件事件Redis基于Reactor模式开发的网络事件处理器,就是文件事件处理器(file
2022-04-18 00:52:24 1150
原创 深入理解MySQL(7):MySQL如何调优
MySQL九、MySQL调优影响MySQL的性能因素:系统各种配置及规则数据超大文本数据Schema设计对系统的性能影响硬件环境对系统性能的影响对于MySQL层优化一般遵从五个原则:减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO返回更少的数据:只返回需要的字段和数据分页处理 减少磁盘io及网络io减少交互次数:批量DML操作,函数存储等减少数据连接次数减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu 内存占用利用更多资源:使用表分区,
2022-04-13 02:03:46 1051
原创 深入理解MySQL(6):MySQL日志简析
MySQL中的日志查询日志(log):记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。慢查询日志(slow query log):设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。默认不启动,可用`set global...
2022-04-13 01:40:53 1383
原创 深入理解MySQL(3):详谈SQL的执行顺序
MySQL五、SQL执行顺序编写的一条sql语句SELECT DISTINCT <select_list> FROM <left_table> <join_type>JOIN<right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list>
2022-04-13 01:08:09 1845
原创 计算机网络-HTTP和TCP/IP协议简介
一、HTTP1.常见名词名称简介LAN Local Area Network 局域网WLAN Wireless Local Area Network 无线局域网WAN Wide Area Network 广域网MAC Media Access Control 网卡地址CSMA Carrier Sense Multiple Access
2022-04-13 00:35:50 9044 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人