自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黎明就要到来

IT小明的个人技术空间

  • 博客(157)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 AI 全方位实战与赚点小钱手册推荐(亲测有用)

说实话,我没有想到会这么火爆,这本小册子,将至少涵盖30篇正在盈利的副业项目,至少30%是蓝海项目。朋友启舰,写了本AI副业小册子,四个月时间写了55篇副业相关文章,现在已经排名AI在线手册类销量第一。做副业快五年了,正好AI来了,七月份准备写个《AI 全方位实战与赚点小钱手册》,没想到,我在【一本册子】网站刚上线两天就被算法推到了首页。创业就是这样的,并不是所有的领域都是靠努力、厮杀、拼搏的,只要有思路,找到蓝海市场,挣钱真的很容易。说实话,这个册子里的项目,有些都简单到不可思义,但它却是蓝海市场!

2024-05-27 17:31:12 1231

原创 爆火AI美女跳舞制作全流程-SD插件Ebsynth_Utility(附带所有工具包)

Stable Diffusion XL 能够生成几乎任何艺术风格的高质量图像,是用来生成写实图像的最佳开放模型。Stable Diffusion是一个可以和MJ相媲美的AI出图工具,简称SD它是一个开源的、免费的项目,没有公司在经营,如果你想用,是需要安装到自己电脑上的,用自己的电脑来渲染出图,同时需要很多数据模型来训练这个工具,让它更加智能。它的优点很明显,免费!除此之外,如果你懂电脑技术,那SD的可定制化会更高,你可以通过训练自己的数据,更好的控制AI出图的构图和姿势。

2024-05-21 18:06:10 2181

原创 哈哈,武大雷军科技楼

2024-07-10 23:53:44 197

原创 Netty 服务端创建源码分析

服务器处于 listen 状态 时,收到客户端 syn 过程(connect) 时在未完成队列中创建一个新的条目,然后用三次握手的第二个过程,即服务器的 syn 响应客户端,此条目在第三个过程到达前 (客户端对服务器 syn 的 ack) 一直保留在未完成连接队列中,如果三次握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部。从调度层面看,也不存在从 EventLoop 线程 中再启动其他类型的线程用于异步执行另外的任务,这样就避免了多线程并发操作和锁竞争,提升了 IO 线程 的处理和调度性能。

2024-07-06 16:30:00 812

原创 基于 Netty 创建客户端的流程分析

相对于服务端,Netty 客户端 的创建更加复杂,除了要考虑线程模型、异步连接、客户端连接超时等因素外,还需要对连接过程中的各种异常进行考虑。本章将对 Netty 客户端 创建的关键流程和源码进行分析,以期读者能够了解客户端创建的细节。

2024-07-06 09:00:00 1045

原创 TCP 粘包/拆包问题说明Neety解决方案

TCP 是个 “流” 协议,所谓流,就是没有界限的一串数据。TCP 底层 并不了解上层(如 HTTP 协议)业务数据的具体含义,它会根据 TCP 缓冲区 的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题。由于底层的 TCP 无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,可以归纳如下。

2024-07-05 15:00:00 1020

原创 Netty 内存池申请内存流程

该文所涉及的 netty 源码版本为 4.1.16。

2024-07-05 12:00:00 450

原创 PoolChunk 的内部完全二叉树结构

该文所涉及的 netty 源码版本为 4.1.16。

2024-07-04 12:00:00 1310

原创 Netty 的对象池 Recycler 是什么

该文所涉及的 netty 源码版本为 4.1.6。

2024-07-04 08:00:00 773

原创 MpscLinkedQueue 是什么

该文所涉及的 netty 源码版本为 4.1.6。

2024-07-03 14:30:00 791

原创 HashedWheelTimer 实现图示

因为我玩具项目实现业务 ACK 的方案就打算用 HashedWheelTimer,所以本节核心是分析 HashedWheelTimer,另外会提下它与 schedule 的区别,其它定时任务实现原理就请自动 Google 吧。

2024-07-03 10:45:00 954

原创 Netty 的 FastThreadLocal 源码解析

该文中涉及到的 Netty 源码版本为 4.1.6。

2024-07-02 13:30:00 1088

原创 Netty 中的 ByteBuf 为什么会发生内存泄漏

该文所涉及的 netty 源码版本为 4.1.6。

2024-07-02 08:45:00 1592

原创 Netty 的线程模型

例如,通过 Acceptor 类 接收客户端的 TCP 连接,链路建立成功后,通过 Dispatch 轮询事件就绪的 Channel,将事件分发到指定的 Handler 上进行事件处理。Netty 线程模型 的设计,也是基于 Reactor 模型,尽管不同的 NIO 框架 对于 Reactor 模式 的实现存在差异,但本质上还是遵循了 Reactor 的基础线程模型。Rector 多线程模型 与 单线程模型 最大的区别就是有一组 NIO 线程 来处理 I/O 操作,Reactor 多线程模型 的特点如下。

2024-07-01 11:22:49 1099

原创 Channel 组件和Unsafe接口

/ 父Channel// Channel的全局唯一标识// 内部辅助类 Unsafe// Netty 会为每一个 channel 创建一个 pipeline// 本地地址// 远程主机地址// 注册到了哪个 EventLoop 上// 是否已注册/*** channnel 会将 网络IO操作 触发到 ChannelPipeline 对应的事件方法。* Netty 基于事件驱动,我们也可以理解为当 Chnanel 进行 IO操作 时会产生对应的IO 事件,

2024-07-01 11:21:21 432

原创 ChannelPipeline 的功能和作用

ChannelPipeline 通过 ChannelHandler 来实现事件的拦截和处理,由于 ChannelHandler 中的事件种类繁多,不同的 ChannelHandler 可能只需要关心其中的个别事件,所以,自定义的 ChannelHandler 只需要继承 ChannelInboundHandlerAdapter / ChannelOutboundHandlerAdapter,覆盖自己关心的方法即可。

2024-06-30 11:30:00 676

原创 Dubbo注册中心模块简析

注册中心在 Dubbo 中的作用服务治理框架可以大致分为 服务通信 和 服务管理 两部分,服务管理可以分为服务注册、服务订阅以及服务发现,服务提供者 Provider 会往注册中心注册服务,而消费者 Consumer 会从注册中心中订阅自己关注的服务,并在关注的服务发生变更时 得到注册中心的通知。Provider、Consumer 以及 Registry 之间的依赖关系 如下图所示。dubbo-registry 模块 结构分析dubbo 的注册中心有多种实现方案,如:zookeeper、redis、

2024-06-30 07:00:00 762

原创 注册中心的Zookeeper实现

Dubbo 的注册中心虽然提供了多种实现,但生产上的事实标准基本上都是 基于 Zookeeper 实现的。这种注册中心的实现方法也是 Dubbo 最为推荐的。为了易于理解 Zookeeper 在 Dubbo 中的应用,我们先简单看一下 zookeeper。由于 Dubbo 是一个分布式 RPC 开源框架,各服务之间单独部署,往往会出现资源之间数据不一致的问题,比如:某一个服务增加或减少了几台机器,某个服务提供者变更了服务地址,那么服务消费者是很难感知到这种变化的。

2024-06-29 14:45:00 656

原创 Selector、SelectionKey及Channel组件

Selector、SelectionKey 和 Channel 这三个组件构成了 Java nio 包的核心,也是 Reactor 模型在代码层面的体现。Selector 能让单线程同时处理多个客户端 Channel,非常适用于高并发,传输数据量较小的场景。要使用 Selector,首先要将对应的 Channel 及 IO 事件(读、写、连接)注册到 Selector,注册后会产生一个 SelectionKey 对象,用于关联 Selector 和 Channel,及后续的 IO 事件处理。

2024-06-29 07:45:00 477

原创 Linux 网络 IO 模型简介

Linux 的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个 fd (file descriptor,文件描述符)。而对一个 socket 的读写也会有相应的描述符,称为 socket fd (socket 描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。根据 UNIX 网络编程对 I/O 模型 的分类,UNIX 提供了 5 种 I/O 模型,分别如下。

2024-06-28 14:45:00 772

原创 Netty-RPC 调用性能模型分析

作为一个高性能的 NIO 通信框架,Netty 被广泛应用于大数据处理、互联网消息中间件、游戏和金融行业等。大多数应用场景对底层的通信框架都有很高的性能要求,作为综合性能最高的 NIO 框架 之一,Netty 可以完全满足不同领域对高性能通信的需求。本章我们将从架构层对 Netty 的高性能设计和关键代码实现进行剖析,看 Netty 是如何支撑高性能网络通信的。

2024-06-28 08:00:00 934

原创 Netty 的三层架构设计

本博文用于重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能、高可靠性和可扩展的程序。Netty 采用了典型的三层网络架构进行设计和开发,其逻辑架构图如下所示。

2024-06-27 14:00:00 1546

原创 RocketMQ 消息发送存储流程

CommitLog 文件的存储目录为${ROCKET_HOME}/store/commitlog ,MappedFileQueue 对应此文件夹,MappedFile 对应文件夹下的文件。如果是第一次写入或者最新偏移量所属文件已满,创建新的文件。第三步:获取当前可以写入的 CommitLog 文件。第四步:将消息写入到 MappedFile 中。2、校验属性的长度不能大于 32767。1、校验主题的长度不能大于 127。2、检查 broker 的角色。第一步:检查消息存储状态。

2024-06-27 11:00:00 286

原创 RocketMQ 消息发送流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-26 13:00:00 592

原创 从Spring及Mybatis框架源码中学习设计模式(行为型)

设计模式是解决问题的方案,从大神的代码中学习对设计模式的使用,可以有效提升个人编码及设计代码的能力。本系列博文用于总结阅读过的框架源码(Spring 系列、Mybatis)及 JDK 源码中 所使用过的设计模式,并结合个人工作经验,重新理解设计模式。本篇博文主要看一下行为型的几个设计模式,即,策略模式、模板方法模式、迭代器模式、观察者模式 及 责任链模式。

2024-06-26 09:30:00 19

原创 从Spring及Mybatis框架源码中学习设计模式(结构型)

设计模式是解决问题的方案,从大神的代码中学习对设计模式的使用,可以有效提升个人编码及设计代码的能力。本系列博文用于总结阅读过的框架源码(Spring 系列、Mybatis)及 JDK 源码中 所使用过的设计模式,并结合个人工作经验,重新理解设计模式。本篇博文主要看一下结构型的几个设计模式,即,适配器模式、代理模式 及 装饰器模式。

2024-06-25 14:00:00 32

原创 从Spring及Mybatis框架源码中学习设计模式(创建型)

设计模式是解决问题的方案,从大神的代码中学习对设计模式的使用,可以有效提升个人编码及设计代码的能力。本系列博文用于总结阅读过的框架源码(Spring 系列、Mybatis)及 JDK 源码中 所使用过的设计模式,并结合个人工作经验,重新理解设计模式。本篇博文主要看一下创建型的几个设计模式,即,单例模式、各种工厂模式 及 建造者模式。

2024-06-25 09:30:00 144

原创 Java并发编程在各主流框架中的应用

Spring、Netty、Mybatis 等框架的代码中大量运用了 Java 多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。本章通过对 这些框架源码 的分析,结合并发编程的常用技巧,来讲解多线程编程在这些主流框架中的应用。

2024-06-24 10:55:13 628

原创 论一个程序员的自我修养

不允许任何魔法值(意义不明的变量 / 常量)直接出现在代码中。反例:在 long 或者 Long 赋值时,数值后使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。说明:Long a = 2l;写的是数字的 21,还是 Long 型的 2?不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。说明:大而全的常量类,杂乱无章,使用查找功能才能定位到修改的常量,不利于理解和维护。正例:缓存相关常量放在类 CacheConsts 下;

2024-06-24 10:45:58 922

原创 RocketMQ 消息拉取流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-23 14:45:00 158

原创 RocketMQ broker 处理拉取消息请求流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-23 08:30:00 113

原创 RocketMQ 生产者启动流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-22 15:15:00 380

原创 RockerMQ Nameserver 如何与 Broker 进行通信的?

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-22 07:30:00 824

原创 RocketMQ MappedFile 内存映射文件详解

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-21 15:45:00 360

原创 RocketMQ IndexFile 详解

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-21 08:15:00 1180

原创 RocketMQ 消费者启动流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-20 13:30:00 512

原创 RocketMQ ConsumeQueue 详解

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-20 08:00:00 886

原创 RocketMQ 消息消费流程

该文所涉及的 RocketMQ 源码版本为 4.9.3。拉取消息 成功之后 会调用 org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService#submitConsumeRequest 组装 消费消息 请求获取 consumeMessageBatchMaxSize,表示一个 ConsumeRequest 包含的消息 数量,默认为 1入参 msgs 为拉取消息的最大值,默认为 32如果 msgs 小于等于 consume

2024-06-19 14:00:00 551

原创 RocketMQ CommitLog 详解

该文所涉及的 RocketMQ 源码版本为 4.9.3。

2024-06-19 08:00:00 763

原创 Nacos 服务注册

找到类两个流程将注解的属性读取,放入到 nacos 的全局属性配置中bean 注入。

2024-06-18 14:00:00 1789

Dubbo核心原理讲解&源码精读

Dubbo核心原理讲解&源码精读,带你了解Dubbo核心组件,架构,源码精读等等 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 简单的说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有Dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在Dubbo上注册)。

2024-06-25

SSH开发的一个在线服装商店

SSH (Spring+Struts2+Hibernate)开发的一个在线服装商店

2016-06-11

仿安卓美团界面源码

用安卓开发的一个模仿美团界面的源码实例

2016-06-11

CRM淘宝平台之客户关系管理系统

基于淘宝业务模型设计的UML设计

2016-06-11

JavaWeb接入微信公众号

Java后台接入微信平台源码

2016-06-11

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

TA关注的人

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