netty
未读基础篇1、TCP协议TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议,广泛用于需要数据传输保证的网络通信中。它通过一系列复杂的机制来确保数据从一端发送到另一端的完整性和正确顺序。下面详细讲解TCP的核心概念和机制。
1. TCP特性
面向连接:在数据传输之前,必须建立起连接,通过“三次握手”确认通信双方的状态。传输结束后,连接会通过“四次挥手”关闭。
可靠传输:TCP确保所有数据包按顺序、无误地传送到目的地,使用校验和、序列号、确认应答等机制来达到可靠传输。
流量控制:通过滑动窗口协议,TCP能够动态调整发送端的数据发送速率,防止接收端缓冲区溢出。
拥塞控制:TCP在检测到网络拥塞时,会自动降低传输速度,避免进一步加重拥塞。
2. TCP报文格式TCP报文段(segment)由以下几部分组成:
源端口号(16位):发送方的应用程序端口。
目标端口号(16位):接收方的应用程序端口。
序列号(32位):标识该报文段在整个数据流中的位置,用于确保数据按顺序到达。
确认号(32位):用于确认接收到的数据,表 ...
netty
未读Netty 作为高性能的网络通信框架,广泛应用于高并发的网络应用开发中。因此,在 Netty 相关的面试中,通常会涉及基础知识、工作原理、高性能优化、以及与 Java NIO 的关联性等问题。以下是一些常见的 Netty 面试问题:
1. Netty 基础问题
Netty 是什么?它的核心功能是什么?
了解 Netty 的定位,作为异步事件驱动的网络框架,它的核心功能包括高效的 I/O 处理、线程模型设计、内存管理等。
Netty 与 Java NIO 的区别?为什么选择 Netty 而不是直接使用 NIO?
Netty 封装了复杂的 NIO 操作,提供了更友好的 API,并在高并发场景下提供了更好的性能。还包括内存管理、线程模型优化等。
Netty 的组件模型是什么?讲解一下 Channel、EventLoop、ChannelHandler、Pipeline 等组件的作用。
Netty 的核心组件设计及其功能,比如 Channel 用于数据的传输,EventLoop 负责 I/O 事件的循环处理,ChannelHandler 负责业务逻辑处理,Pip ...
netty
未读Netty 的内存管理是高度可定制化的,提供了多种内存管理组件,开发者可以根据需求替换或调整这些组件,以优化性能或适应特定场景。以下是 Netty 中一些关键的内存管理组件和它们的替换选项:
1. ByteBufAllocator(ByteBuf 分配器)ByteBufAllocator 是 Netty 中的核心组件之一,负责分配 ByteBuf(Netty 自定义的字节缓冲区),可以分配堆内存(heap memory)和直接内存(direct memory)。Netty 提供了两种主要的 ByteBufAllocator:
PooledByteBufAllocator:内存池化分配器,适合需要高并发、高吞吐量的场景,它通过内存池化减少频繁的内存分配和回收。
UnpooledByteBufAllocator:不使用内存池的分配器,每次都从操作系统分配新的内存。适合低负载或者不希望使用内存池的场景。
可替换性:开发者可以根据应用场景和性能要求替换默认的 ByteBufAllocator。例如:
对于内存使用频繁的应用,使用 PooledByteBufAllocator 会显著提高性 ...
自 2020 年来,网易数帆探索可视化低代码编程已两年有余,打造了轻舟低代码平台用于企业应用开发。然而,不少编程技术人员对这一领域还比较陌生。我们开设《低代码技术内幕》专栏,旨在讨论低代码编程领域中的困难、问题,以及高效的解决方案。本文为第一篇,深度剖析低代码编程带来的机遇。
据说早期人类语言只有“听说”系统,后因国家税收之需,又演化出了“读写”系统。而读写相较于听说的方式,有易于复制传播、歧义少、保存持久等优点……类似的,早期用于人机交流的程序语言只有“字符”系统,现在因为某些诉求,市场上涌现出一批“可视化低代码”系统。什么是低代码,它有哪些优势,我为什么要学习、使用它?低代码未来的市场是怎样的? 本文重点描述低代码未来 5~10 年的广阔市场 ,但仍循序渐进,从概述低代码编程的历史发展开始。(所以想要了解市场规模和前景的读者,请直接跳转到低代码的市场和机遇部分)
低代码定义:发展与变迁提高生产效率是人类永恒的主题。正因此,我们认为广义的低代码编程,取其字面意思,应当是指在某个时间段内,完成项目所需的代码量(大幅)低于其他语言(平均值)的编程模式。无独有偶,我们的认知与 ITP ...
GPT 的缺陷过去几个月的时间,我们正处于人工智能的革命中,其中最耀眼的莫过于 GPT-3.5/4 的横空出世,而 GPT-3.5/4 带给我们无限震撼的同时,其天然的缺陷和诸多的限制也让开发者头痛不已,例如其输入端上下文(tokens)大小的限制困扰着很多的开发者和消费者,像 gpt-3.5-turbo 模型它的限制是 4K tokens(~3000字),这意味着使用者最多只能输入 3000 字给 GPT 来理解和推理答案。
有人可能会疑惑,我使用的 ChatGPT 是有对话记忆功能的,既然它可以做到聊天记忆,那么它的输入端 token 有限制也没什么关系,只要我将给 ChatGPT 的文字内容拆分成多次输入,它自然就可以记住我之前的对话,从而做到解除 token 限制。
这个想法是不太正确的,GPT 作为 LLM 模型是没有记忆功能的,所谓的记忆功能只是开发者将对话记录存储在内存或者数据库中,当你发送消息给 gpt 模型时,程序会自动将最近的几次对话记录(基于对话的字数限制在 4096 tokens 内)通过 prompt 组合成最终的问题,并发送给 ChatG ...
背景最近有个新项目可能会用到规则引擎,所以花了些时间对相关技术做调研,在百度、google用“规则引擎”作为关键字进行搜索,可以找到很多关于这方面的资料,绝大部分都会提到 drools、urules、easy-rules等等这么些开源项目,有一些文章也提到他们是采用groovy脚本来实现的。通过对项目需求的评估,初步判定groovy脚本已经可以满足实际的场景。
然而,在这些资料或者方案之中,除了urules,大部分只是关注框架的性能和使用上的简便,很少探讨如何让业务人员可以自行进行规则定义的方案。而urules虽然自带了可视化的规则管理界面,但是界面样式不好自定义,无法跟现有后台管理界面不突兀的融合。
通过不断尝试变换关键字在搜索引擎搜索,最终在stackoverflow找到了一个探讨这个问题的帖子,特此将帖子中提到的方案分享一下,如果你跟我一样在研究同样的问题,也许对你有用。不过在介绍这个方案之前,得先简单了解一下什么是规则引擎
什么是规则引擎?简单的说,规则引擎所负责的事情就是:判定某个数据或者对象是否满足某个条件,然后根据判定结果,执行不同的动作。例如:
12对于刚刚在网站上完成 ...
软件设计
未读领域驱动设计(DDD)前些年很火,因为近两年2B和SAAS越来越受关注。但不少人读过Eric Evans的《领域驱动设计》和Vaughn Vernon的《实现领域驱动设计》都会很懵,太抽象了。。。
本文介绍领域驱动设计的基本概念的同时,用一个虚拟的公司和一个虚拟的项目,介绍领域驱动设计的落地实践。
前言什么是领域,我习惯描述的是财务领域、人力领域、房地产领域、金融领域等,而在领域内,各种业务规则、业务知识盛行,如何有效的把控规则的变化,应对复杂知识,有一个很关键的四字词语,分而治之。分治法在很多场景下体现了其强大的作用力。领域本身很大很复杂,那就拆分,得到更小的领域,也即子域,如同递归调用一般,将一个复杂问题拆分单独求解,而最终将解汇总得到复杂问题解。
怎么拆,拆成怎么样合适,依据什么拆。(有没有感觉很想结构化思维)这些在领域驱动设计中有了一套答案,虽然领域驱动设计不是银弹,但可以说的上是一套极好的系统方法论或称为架构设计的方法论。
领域驱动设计常以战略设计与战术设计来将整个领域展现的淋漓尽致,其作用范围既面向业务也面向技术。从战略角度的整体性(个人更喜欢称其为上帝视角)去规划系统、划 ...
crawler-mouse (https://github.com/daichangya/crawler-mouse)基于Java实现的 爬虫框架
123456789101112131415161718192021222324252627282930313233 +---------------------+ | Data Input | | -------------------- | | Config Files (JSON, | | TXT) & Resources | +--------+-------------+ | v +----------------- ...
微信公众号扫码关注微信公众号,Java码界探秘。
https://blog.jsdiff.com/
java-redis (https://github.com/daichangya/java-redis)基于Java实现的 redis-server
123456789101112131415161718192021 +---------------+ | 客户端 | +-------+-------+ | +----------+----------+ | 网络层 | +----------+----------+ | +-----------------+------------+ | java-redis 服务器 | +--------------- ...
Panda (https://github.com/daichangya/panda)这个项目是一个基于Netty的Java Web服务器,它提供了从简单HTTP服务器到集成Spring Boot等多个版本的演进。以下是对该项目的详细概述:
项目名称与简介:
项目名称:panda
简介:一个基于Netty的Java Web服务器,随着版本的迭代,逐步增加了更多功能,如静态文件下载、controller支持、servlet支持以及最终集成Spring Boot等。
技术栈:
主要技术:Netty, Spring Boot, Spring Web
Netty:一个高性能、异步事件驱动的NIO框架,用于快速开发可维护的高性能协议服务器和客户端。
Spring Boot:简化了基于Spring的应用开发,通过自动配置和启动类让开发者快速搭建Spring应用。
Spring Web:Spring框架的Web模块,提供了全面的Web开发支持。
功能与特性:
支持静态文件下载。
添加了controller和servlet支持,便于开发Web应用。
集成Spring Boot,使得项目可以更 ...
