《Java 100 天进阶之路》第44.2篇:Java泛型与NIO易混淆概念对比(2026版)

GPT-5.5如何实现CVE复现与CTF夺旗的自动化攻防 大语言模型在网络安全领域的应用正从‘辅助问答’迈向‘自主攻防决策’。其核心原理是将漏洞知识图谱、工具调用架构与推理链路深度融合,通过结构化数据输入(如CVE详情、WAF规则、环境指纹)驱动语义级利用生成,而非依赖文本模式匹配。这种技术路径显著提升了漏洞利用的确定性与可验证性,尤其在零日漏洞分析、CTF题目逆向建模、多层对抗环境下的动态策略调整等高价值场景中展现出工程落地潜力。GPT-5.5在CVE复现与CTF夺旗任务中的高成功率,标志着AI已具备初步的攻击生命周期管理能力。 阅读详情

第44.2篇:Java泛型与NIO易混淆概念对比(2026版)

📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第44.1篇:Java常用工具类与异常处理速查表 |
➡️ 下一篇:第44.3篇:JVM底层与字节码核心考点速查

🗺️ 本文阅读地图(2 分钟速览)

泛型与 NIO 是面试中的“进阶考点”,也是很多开发者的薄弱环节。本文汇总 10 组高频易混淆概念,每组配一句话总结 + 详细对比:

编号对比组一句话区分
1泛型类 vs 泛型方法类级参数 vs 方法级参数
2T vs ?T 是类型参数,? 是通配符(未知类型)
3? extends T vs ? super T上界(读)vs 下界(写)——PECS 原则
4泛型 vs 普通类型泛型是参数化类型,编译期检查
5类型擦除 vs Signature 属性运行时擦除类型,但保留签名信息
6BIO vs NIO vs AIOBIO 阻塞,NIO 同步非阻塞,AIO 异步
7直接缓冲区 vs 堆缓冲区直接缓冲区(Native)适合网络,堆缓冲区适合小数据
8阻塞 vs 非阻塞阻塞等结果,非阻塞先返回再轮询
9GET vs POSTGET 参数在 URL,POST 在 Body
10同步 vs 异步同步等结果,异步回调通知


一、核心知识点概览

本篇文章涵盖 Java 泛型与 NIO 中 10 组最高频的易混淆概念,来源于第36~41篇的全部内容:

篇号涉及对比数量
第36篇BIO vs NIO vs AIO、阻塞 vs 非阻塞、同步 vs 异步3组
第38篇Java 动态语言特性—
第39篇泛型类 vs 泛型方法、T vs ?、? extends T vs ? super T、类型擦除4组
第41篇GET vs POST1组
第23篇(前置)直接缓冲区 vs 堆缓冲区1组

二、逐组对比详解

对比1:泛型类 vs 泛型方法
对比维度泛型类泛型方法
定义位置类名后:class MyClass<T>方法修饰符和返回类型之间:public <T> T method(T t)
作用域整个类仅该方法
类型参数该类中所有方法可用只在该方法内部有效
静态方法❌ 不能使用类的泛型参数✅ 独立声明 <T>

💡 一句话总结:泛型类是整个类的“模板”,泛型方法是单个方法的“模板”。

对比2:T vs ?
对比维度T(类型参数)?(通配符)
类型类型参数未知类型
可声明✅ 可声明变量❌ 不可声明(只用于参数)
可操作可调用方法(如 toString())只能调用 Object 方法
可修改✅ 可添加元素❌ 不可添加(除 null)
适用场景定义泛型类/方法参数声明、API 设计

💡 一句话总结:T 是“我定义一个类型”,? 是“我不关心什么类型”。

对比3:? extends T vs ? super T(PECS 原则)
对比维度? extends T(上界通配符)? super T(下界通配符)
可读性(get)✅ 可读为 T 的子类❌ 只能读为 Object
可写性(add)❌ 不可写(除 null)✅ 可写 T 及其子类
适用场景读取数据(Producer)写入数据(Consumer)
PECS 原则Producer ExtendsConsumer Super

💡 一句话总结:取数据用 ? extends T,存数据用 ? super T——PECS 原则。

对比4:类型擦除 vs Signature 属性
对比维度类型擦除Signature 属性
存在位置运行时(JVM 内部)class 文件元数据
作用将泛型替换为原始类型保留泛型签名信息
编译后List<String> → ListSignature 属性保存 <Ljava/lang/String;>
反射能否获取❌ 不能(运行时已擦除)✅ 可通过 getGenericType() 获取

💡 一句话总结:类型擦除让泛型在运行时“消失”,Signature 属性让框架能“找回”泛型。

对比5:BIO vs NIO vs AIO
对比维度BIONIOAIO
全称Blocking I/ONon-blocking I/OAsynchronous I/O
同步/异步同步同步异步
阻塞/非阻塞阻塞非阻塞非阻塞
线程模型一连接一线程一选择器管理多连接回调驱动
适用场景连接数少连接数多、流量小长连接、高并发
Java 支持JDK 1.0JDK 1.4JDK 7

💡 一句话总结:BIO 一对一阻塞,NIO 多路复用,AIO 回调驱动。

对比6:阻塞 vs 非阻塞
对比维度阻塞 I/O非阻塞 I/O
线程状态等待数据时阻塞立即返回,不阻塞
CPU 使用低(等待时不占用)高(需轮询)
适用场景连接数少连接数多
代表BIONIO
对比7:同步 vs 异步
对比维度同步 I/O异步 I/O
结果获取主动等待/轮询回调通知
编程复杂度简单复杂(回调)
代表BIO、NIOAIO
适用场景常规操作高并发、长连接

💡 一句话总结:同步是自己等结果,异步是别人通知你结果。

对比8:GET vs POST
对比维度GETPOST
参数位置URL 查询字符串请求体
长度限制有(浏览器限制)无
安全性参数暴露相对安全
缓存✅ 可缓存❌ 不可缓存
幂等性✅ 幂等❌ 非幂等

三、避坑要点

错误/误区后果正确做法
泛型用 ? 声明变量编译错误用 T 声明类型参数
? extends T 试图添加元素编译错误只能用 ? super T 添加
认为 NIO 总是比 BIO 快场景错误小连接数 BIO 更简单
GET 请求带密码信息泄露用 POST + HTTPS

四、练习题

  1. 代码题:以下代码有什么问题?

    List<? extends Number> list = new ArrayList<Integer>();
    list.add(10);
    
  2. 简答题:PECS 原则是什么?举例说明。

  3. 场景题:一个聊天服务器需要支持 1 万个并发连接,每个连接消息量不大。该选 BIO、NIO 还是 AIO?为什么?

–

📊 你的学习进度

  • 当前:第44.2篇 · 基础篇外挂:泛型与NIO易混淆概念对比
  • ✅ 已完成:基础篇第1~44篇 + 第4.1篇 + 第20.1~20.2篇 + 第31.1篇 + 第44.2~44.3篇
  • 📖 正在学:第44.2篇
  • ⏳ 待学习:第45~108篇(进阶篇)

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

👉 下一篇文章预告

🚀 下一篇:《第44.3篇:JVM底层与字节码核心考点速查》

内容简介:JVM 内存结构、类加载生命周期、双亲委派模型、GC 算法、JIT 编译器。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!

SpringBoot支持动态更新配置文件参数 本文介绍SpringBoot在不重启服务的前提下动态刷新配置参数的实现方案。文章通过自定义DynamicPropertyUpdater与ConfigFileReloader组件,结合Environment属性源操作,实现单个配置项更新、批量更新以及重新加载整个配置文件,并给出接口测试步骤与效果验证。 阅读详情

相关推荐

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5488

《Java 100 天进阶之路》第44.1篇:Java常用工具类与异常处理速查表(2026版)

基础篇外挂第六弹!本文汇总 10 组工具类与异常处理实用速查:Objects 核心方法(null 安全三板斧:equals、hashCode、toString)、Collections 核心方法(排序/反转/不可变/同步包装)、Arrays 核心方法(排序/二分查找/拷贝/转 List)及其陷阱(Arrays.asList 固定大小、binarySearch 前需排序)、Collections.unmodifiableXxx 是视图陷阱、try-with-resources 标准模板、自定义异常规范、序列化

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 180

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2322

《Java 100 天进阶之路》第44篇:jd-gui反编译class文件:中文乱码破解与反编译实战指南(2026版)

摘要:一文攻克反编译乱码痛点!从乐谱与手稿类比切入,讲透字节码→源码还原本质。提供 Windows/Mac/Linux 多系统 jd-gui 乱码解决方案,对比 jd-gui、CFR、IDEA FernFlower 等主流工具选型,附 CFR 批量反编译实战命令。覆盖反编译原理、工具对比、避坑清单、面试高频题,配套完整 Demo 与课后练习。基础篇收官,为进阶篇集合源码阅读铺路。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 498

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南

本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。

Apple的专栏 432

国产平替NeuroSky?实测金牛座TGAM脑电模块,从Arduino到Python的完整数据采集指南

本文详细介绍了国产金牛座TGAM脑电模块的完整使用流程,包括硬件连接、数据采集和Python分析。通过Arduino和Python的实战案例,展示了如何从脑电波传感器获取并解析专注度、放松度等数据,适用于专注力训练和脑机接口开发。

weixin_30735745的博客 568

Redis 从入门到精通:一份给 Java 工程师的系统学习指南

Redis 从入门到精通 一份给 Java 工程师的系统学习指南

weixin_45823828的博客 248

STM32CubeMX实战:TIM定时器中断配置避坑指南(附100ms精准定时代码)

本文深入解析STM32CubeMX配置TIM定时器中断的常见误区与避坑技巧,重点阐述时钟源、预分频器与自动重装载值的精准计算方法。通过实战案例,提供一份可直接复用的100ms精准定时中断代码模板,并分享调试验证方法,帮助开发者构建稳定可靠的嵌入式系统心跳。

grafana8visual的博客 494

Java怎么开发AI Agent?——从模型调用到业务编排,框架级底座要备齐什么

Java怎么开发AI Agent?调大模型API只是第一行代码,真正的工作量都在模型之外:多步骤的编排、工具的接入协议、模型和资源的调度、权限和审计,还有让Agent读懂业务对象——这几块自己拼,Demo三天、上生产三个月。向量空间JBoltAI框架把这些做成了框架级底座,当前V5.3.0是第24个版本,100%源码按git仓库交付,AI能力长在框架层,不是外挂拼装。

AIGS001的博客 151

从权限对象到业务角色:把 SAP Authorization Object 讲清楚,并用 ABAP 写对一次 AUTHORITY-CHECK

摘要:SAP权限管理的核心在于Authorization Object(授权对象),它通过组合最多10个授权字段来精确控制用户访问权限。关键要点包括:1) 授权对象与ACTVT字段(如01创建/02修改/03显示)的配合使用;2) ABAP中AUTHORITY-CHECK语句的四种常见返回码(0通过/4字段不匹配/12无权限/40无效用户);3) 系统自动执行的S_TCODE事务码检查;4) 自定义授权对象时应遵循"最少且足够"原则,优先复用标准对象。在RAP和OData场景中,权限检查

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 277

静态脱敏系统技术趋势分析

静态脱敏系统技术趋势分析要回答的不是买了哪些新功能,而是哪些能力正在变成出厂默认。本文从确定性脱敏、规则版本化、可逆受控与导出验签四条线,拆解趋势判断的可复算落点,并给出采购方可以直接核对的清单。

xingxiuer的博客 267

NVIDIA Omniverse 技术浅析(三):NVIDIA RTX 技术

NVIDIA RTX 技术是 NVIDIA 推出的革命性图形渲染技术,旨在通过硬件加速和软件优化,实现高质量的实时图形渲染。RTX 技术在 NVIDIA Omniverse 平台中扮演着至关重要的角色,为其提供了强大的渲染能力。

m0_75253143的博客 347

Maven 下载与配置教程(新手友好版)

本文档手把手教你在 Windows 系统上安装和配置 Maven,全程从官方渠道下载,安全可靠。

qq_36085846的博客 253

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

构造函数表达式的值类别是:prvalue

C++ 中构造表达式 T() 的结果为 prvalue,因其本质是“对象的初始化配方”而非已有对象。这一设计使编译器能强制执行复制消除(C++17起),直接在目标位置构造对象,实现零开销优化。即使类型不可拷贝或不可移动,也能合法初始化。同时,prvalue绑定引用时物化为xvalue,延长生命周期。该机制清晰区分初始化、移动与持久对象,是返回值优化和高效资源管理的语言基础。

jimy1的博客 482

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LeetCode100 1.两数之和

暴力枚举法时间复杂度为O(n²),空间O(1),直观但效率低。优雅解法利用HashMap,遍历中先查补数、后存当前值,平均时间复杂度O(n),空间O(n)。虽最坏情况(哈希冲突严重)理论可达O(n²),但Java 8+中链表超过8个元素转为红黑树,最坏退化至O(n log n),实际性能优异。

Shaoxingzong的博客 301

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【共创稿事节】组件复用与@Reusable

组件复用实践:复用ID分池、aboutToReuse回填清单、状态串卡排查、命中率观测与不适合复用的边界。

2401_84996024的博客 126

生产环境 Tomcat 200 线程跑满并报连接池超时:一次虚拟线程阻塞点排查

开启虚拟线程后线程告警消失,HikariCP 连接池超时却更早出现。先用 JFR 事件排除 `synchronized` 阻塞,再按并发预算重算连接池容量。

昨日种种,皆成今我。今日种种,皆成新我。 325

移动端 CPU 调度分析:线程亲和性、大小核迁移与卡顿

移动端卡顿常非代码瓶颈,而是调度问题。线程迁移、缓存失效、优先级反转、队列竞争等会显著增加等待时间,使相同工作耗时上升。需通过调度时间线区分运行与等待成本,分析核心类别、频率变化、锁状态及线程池负载。验证应控制变量,避免误判。修复关键在优化同步、控线程数、调优先级,而非盲目绑核。

m0_59437018的博客 247

DDD(领域驱动设计)篇四:退费 + 支付,三层 vs DDD 各撸一遍

DDD 不是一门新技术,而是一种纪律——业务规则集中放、用业务的语言放、放在划清的边界内。三层架构没有错,它只是没有回答"规则放哪"这个问题;DDD 回答了,代价是多写几个类、多学几个概念。 代码会写了,再读书就不抽象了。推荐顺序: 《实现领域驱动设计》(Vaughn Vernon,"红书")——比原著(蓝书)好读得多,先读前半部分; 蓝书挑着读:只读"统一语言""限界上下文"两章。

Good good study,day day up 71

欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则

德法比推行企业间结构化电子发票(EN 16931)。本文讲金额怎么算才能过校验、怎么用 Python + saxonche 不装 Java 跑 XRechnung/Peppol 官方 Schematron,以及 Leitweg-ID 校验位这类官方规则查不到的坑,并介绍开源工具 eu-einvoice。

weixin_38859100的博客 237

Spring AI 2.0 Tool Calling 到底怎么跑起来的:从 @Tool 到两次模型调用

作者|溪源适合谁|2~5 年 Java / Spring Boot 开发者版本基线|Java 21 / Spring Boot 4.1.2 / Spring AI 2.0.2 / DeepSeek deepseek-chat仓库|https://gitee.com/erbay/spring_ai(包;发布时打article-02tag)

增量星球 295

若依项目新建业务模块

本文介绍了在若依框架中新建业务子模块的完整步骤:通过Maven创建子模块,引入ruoyi-framework依赖;在父工程中锁定子模块版本;在ruoyi-admin中添加依赖并刷新Maven;最后重启项目即可成功加载新模块。图文结合,清晰展示操作流程,确保模块集成顺利。

weixin_50379372的博客 158

LeetCode Hot 100 · 双指针 3 题 Java

LeetCode Hot 100 · 双指针 3 题,覆盖 11 盛最多水的容器、15 三数之和、42 接雨水,主线是排序 / 双指针 / 前缀最值与「短板效应」。

2401_88612756的博客 355

基于 Spring Cloud Alibaba 的微服务架构设计与落地实践

本文介绍基于Spring Cloud Alibaba的微服务架构方案,整合Nacos、Sentinel、Seata、RocketMQ等组件,实现服务注册发现、配置管理、流量防护、分布式事务与消息驱动。通过统一版本管理、四层分层架构与按业务拆分的服务设计,结合Feign实现服务调用,配合动态配置刷新与降级容错,构建高可用、可扩展的微服务系统。

薛之谦 205

《On Java 中文版 基础卷》阅读笔记 实现隐藏 11

《On Java 中文版 基础卷》阅读笔记 实现隐藏 11

道友 168
上一篇: 《Java 100 天进阶之路》第31.1篇:Java常用API与底层原理对比集(2026版)
下一篇: 《Java 100 天进阶之路》第20.3篇:Java面向对象生产环境避坑清单(2026版)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值