自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(663)
  • 收藏
  • 关注

原创 Java 面向对象 03封装篇:划清边界才是封装的内核

反直觉的封装:它不是把属性藏起来加get/set,是信息隐藏与边界隔离。很多人以为封装就是private属性加getter/setter,这是对封装最浅的理解;封装的真正目的,是对外暴露最小化的稳定接口,对内隐藏所有可变的实现细节,隔离变化。

2026-08-15 06:30:00 311

原创 Java 面向对象 之 封装篇:三大价值的三大隐喻

降低认知成本:“地图”(不需要知道每棵树,只需知道路)。隔离变化:“防波堤”(内部风浪不传导到外部)。状态安全:“保险箱”(数据不被篡改)。

2026-08-14 06:15:00 157

原创 Java面向对象 02根源篇:为什么面向对象会成为主流

编程范式的选择由软件规模决定。小型程序采用面向过程开发高效直接,但随着代码量增长至数万行以上,流程复杂度指数级上升,面向对象的封装、继承、多态特性成为管理复杂度的必要工具。面向对象并非因其优雅性而流行,而是当系统庞大到需要清晰边界、稳定抽象和可控依赖时,这种范式成为应对复杂性的必然选择。它通过分层抽象让大规模协作和模块化开发成为可能,是软件规模膨胀倒逼的技术演进结果。

2026-08-12 06:45:00 380

原创 Java 面向对象 01总纲篇:面向对象的底层本质

摘要: 面向对象的本质并非简单的代码封装技巧,而是一种用“实体+行为+交互”模拟真实世界的思维范式。其核心是以实体为中心的系统建模思维,通过对象映射业务实体及关系,而非仅语法层面的类与方法。相较于面向过程的线性逻辑,面向对象更适应复杂系统,因其实体化组织方式更贴合人类认知习惯。编程范式本质是认知方式的代码投射,优劣取决于系统规模与认知成本的适配,而非绝对的技术高低。

2026-08-11 17:45:00 208

原创 Java 面向对象 之 关于边界的思维之旅

‘好的封装,永远是接口最小化、内部黑盒化’。这就像一扇极简的门,背后却是整个世界。在设计类时,我们要克制暴露的冲动,只公开绝对必要的方法。同时,要在内部构建丰富的逻辑来处理复杂性。这样,我们的代码才能像这扇门一样,对外简洁清晰,对内强大丰富。希望大家在今后的设计中,都能划清边界,实现真正的封装。

2026-08-11 10:35:11 197

原创 锤子思维:困住Java学习者的隐形天花板

在Java学习的成长路径上,“锤子思维”是绝大多数人难以突破进阶瓶颈的核心根源。所谓锤子思维,即手里握着语法、API、框架这把“锤子”,便把所有业务问题都视作等待敲打的钉子,只关注“怎么用”,却从不追问“为什么这么设计”。这种思维在入门阶段能快速产出代码,却会在中长期形成难以打破的能力天花板。

2026-08-10 09:12:31 228

原创 一个反直觉的真相:面向对象不是语法,是人类认知世界的投影

它不是把代码拆成类的技巧,而是映射真实世界的思维范式。类和对象只是语法载体,内核是以「实体 + 行为 + 交互」组织代码,让软件贴合人类对现实世界的认知。它并非语法的发明,而是人类认知方式,在代码世界的投射。当系统规模越来越大、业务逻辑越来越复杂时,以实体为中心的组织方式,更符合人类的认知习惯,也更容易拆分、维护与迭代。

2026-08-08 07:02:47 209

原创 Java的本源

Java不是凭空诞生的语言,它是C++的反思、Smalltalk的继承、工程实践的妥协——是James Gosling站在时代十字路口,对"什么是好的软件工程"给出的回答。

2026-08-07 08:48:02 188

原创 超时无处不在的时代底层根源:一切皆分布式

很多人疑惑:为什么超时配置渗透在系统的每一个角落?答案只有一句话:因为当下所有线上系统,本质全是分布式系统。早已不存在真正意义上完全独立、本地闭环的业务服务。哪怕是一个最简单的业务接口,也必然涉及调用数据库、缓存、消息队列、网关、第三方服务。只要有跨机器、跨进程、跨网络的交互,就脱离了单机可控环境,进入了分布式不可控环境。

2026-07-22 08:40:10 151

原创 为什么超时机制无处不在,却又常常被我们忽略?

为什么超时机制无处不在,却又常常被我们忽略?我们做开发、运维、甚至设计架构,都多多少少会发现一个很有意思、却极少深想的现象。我们日常迭代业务、排查故障、维护系统的过程里,超时两个字几乎无处不在。但更奇妙的是:绝大多数开发者,几乎从来不会主动去关注它。

2026-07-20 08:02:18 148

原创 超时机制的全场景落地举例

核心思想:在分布式系统中,失败是常态。超时机制是保障系统稳定性的第一道防线,通过主动切断长时间未响应的请求,将故障的影响范围控制在局部,避免一个点的故障像多米诺骨牌一样波及整个系统。

2026-07-19 16:41:42 329

原创 超时 所有容错策略的基石

超时的深层延伸 - 遍布全技术栈超时和熔断、重试的从属关系超时是所有容错策略的基石:重试触发前提是超时,熔断统计的错误来源包含大量超时。没有超时阈值,熔断、限流、降级全部无法落地。

2026-07-18 07:15:00 160

原创 超时机制的架构设计哲学

超时机制的架构设计哲学核心抉择:阻塞等待的隐性成本 VS 提前失败的显性成本底层取舍逻辑:牺牲少量单次请求可用性,换取整个分布式集群的整体可用性,这是分布式容错最基础的设计思想。

2026-07-17 07:44:37 233

原创 超时到底在做什么

超时到底在做什么给不确定操作加硬性终止边界。超时的内核:用时间标尺,为所有不可控的分布式操作划定生死红线。从系统视角:超时是系统的自我免疫系统,用来隔离局部故障。

2026-07-16 06:42:55 177

原创 为什么必须要有超时

分布式系统存在三大无法根除的缺陷:网络丢包、链路拥堵和节点宕机。这些缺陷导致请求可能永久阻塞,占用线程、连接池等稀缺资源,进而引发连锁故障。超时机制作为关键防御手段,通过强制终止慢请求来防止系统雪崩,是分布式架构的生存基石而非优化项。其本质是用有限错误换取整体可用性,属于分布式环境下的必要设计原则。

2026-07-15 14:55:14 155

原创 算力付费的必然性:从通用幻觉到专业精准的范式升级

你是否注意到,那些曾经免费的豆包、元宝等通用AI工具,其回答正变得越来越不可靠?2026年行业共识已形成,提供无限制高质量的免费服务,在商业逻辑上已行不通。我们应关注:幻觉的纠错成本和私有数据的沉默成本。

2026-06-22 10:22:26 338

原创 别让你的技术收藏夹吃灰了,邀你共建技术人的第二大脑

摘要:技术人常遇到收藏文章却难以有效利用的痛点。为此,我们基于腾讯IMA搭建了「别让收藏吃灰」技术知识库,聚合优质技术文章,支持全文检索和基于真实内容的AI问答,避免AI幻觉。该平台通过开源共建模式,邀请技术人分享收藏的架构实战、故障复盘等干货,共同打造覆盖全场景的技术资源库。现开放加入,可通过腾讯IMA搜索相关名称参与共建。

2026-06-19 08:18:30 200

原创 超时机制的本质

超时机制是分布式系统处理不确定性的核心方案,通过在不可靠环境中为操作设置硬性终止边界,防止局部故障扩散。其核心设计理念是:主动终止潜在的无尽等待,及时释放资源。本质上,所有超时都是时间维度的限流策略——为每个请求分配固定时间配额,超时即强制回收资源。这种机制以时间为调控手段,实现了分布式架构的低成本容错,是平衡系统可靠性和资源效率的最优解。

2026-06-06 15:37:18 182

原创 MySQL长连接16种死法 - 目录大纲

本文系统梳理了MySQL连接断开的16种常见原因,按类型分为四类:1)服务端主动断开(7种):包括空闲超时、连接数超限、数据包过大、手动KILL、线程异常、死锁回收和服务宕机等;2)网络层静默杀死(4种):涉及NAT回收、负载均衡失效、网络闪断和MTU不匹配;3)客户端主动关闭(3种):含连接池回收、应用异常和驱动超时;4)协议安全异常(2种):主要是SSL/TLS异常和非法报文。这些场景覆盖了从服务端、网络到客户端各环节的连接中断风险,为数据库稳定性优化提供系统化参考。

2026-06-04 14:42:52 25

原创 开篇:从“瞎猜乱试“到“精准排查“的终极指南

做后端开发和运维的人,几乎都被MySQL长连接问题折磨过:线上服务突然报错"连接被重置"、"Broken pipe"、"SSL握手失败",日志里没有有用信息,只能重启服务临时救火,下次还会复现。绝大多数人遇到这类问题,都是在网上搜零散的解决方案,挨个试错。这种"碰运气式排查",本质上是你根本没有建立起MySQL长连接异常的完整知识体系。

2026-05-23 07:42:22 227

原创 回到1995年,看MySQL协议解析器“瞎子”式设计

MySQL这个“瞎子”解析器,让MySQL在硬件极端匮乏的年代活了下来。它凭借极致的轻量和速度,迅速在开源社区站稳脚跟,并最终在互联网爆发的时代,成为了全世界应用最广泛的数据库。

2026-05-21 09:12:13 162

原创 jinjava模板引擎简单介绍

python有一个广受欢迎的jinja模板引擎,jinjava则是jinja模板引擎的java实现,让jinja模板语法实现了跨语言使用。

2023-11-13 14:04:51 1897

原创 jinjava学习实战

可以看到,在模板文件test.xml中,使用的模板语法是python的,帅气。效果同python版的jinja2一致,厉害了。

2023-11-13 13:48:55 646

转载 Java-Stream详解

Stream是Java 8新增的接口,Stream可以认为是一个高级版本的 Iterator。

2023-10-26 10:58:27 500

转载 Clickhosue 强大的函数,argMin() 和argMax()函数

argMax():计算 ‘arg’ 最大值 ‘val’ 价值。如果有几个不同的值 ‘arg’ 对于最大值 ‘val’,遇到的第一个值是输出。argMin() 与argMax() 的功能正好是相反的,👇是Clickhouse官方文档对这个函数的解释,看官应该看知道这个函数是用途了吧。当然上图是argMin() 函数的简单案例,这里我想到的几个业务场景的使用案例,仅供参考。

2023-10-16 17:50:05 1784

原创 一文总结Java获取文件后缀名的所有方法

Java是一种应用广泛的编程语言,可以通过多种方式来实现对文件的操作,如文件名后缀、文件扩展名等,下面这篇文章主要给大家介绍了关于Java获取文件后缀名的所有方法,需要的朋友可以参考下。

2023-10-16 17:27:07 10644 1

原创 MySQL查看数据库及表容量大小

1.查看所有数据库容量大小select table_schema as '数据库',sum(table_rows) as '记录数',sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_sch...

2020-04-20 17:32:03 588

原创 log4j输出日志级别控制

log4j输出日志级别控制log4j.logger.XX ==> log4j.rootLoggerlog4j.appender.XX.Threshold决定了最低接收级别也就是说rootLogger首先决定所有log的输出级别,而log4j.logger.XX是对XX路径下的jar包的输出级别的修改,直接覆盖rootLogger但是对于不同的输出口,他们的接收级别是不同的。...

2020-01-03 14:51:48 1666

原创 Hadoop常用端口和定义方法

Hadoop常用端口和定义方法Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问。而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如此,以便查询。这里包含我们使用到的组件:HDFS, YARN, HBase, Hive, ZooKeeper: 组件 节点 ...

2020-01-03 10:35:22 646

转载 mapreduce 作业中 map/reduce 个数的计算

1. 问题描述当在hadoop集群提交mapreduce作业时,map 和 reduce 的个数是如何计算的?2. map个数的计算2.1map个数的计算和分片大小(splitSize)是有关系的,所以我们先看看splitSize的计算公式:long splitSize = Math.max(minSize, Math.min(maxSize, bloc...

2019-12-30 10:09:57 1262

原创 依赖注入框架Google Guice

Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的复杂性,该怎么办呢?有了Google Guice,这个问题便简单了,首先在你的maven项目里引入官方文档里给出的例子又臭又长,我不使用官方的例子,下面我们来写个最简单的HelloWorld我们使用Guice创建了一个注射器Injector,然后从Inject...

2019-10-21 17:58:48 533

原创 JMX的用处及用法

JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览。下图是使用Jconsle通过JMX查看Java程序的运行信息1.png为Java程序开启JMX很简单,只要在运行Java程序的命令后面指定如下命令即可-Djava.rmi.server.hostname=127.0.0.1-Dcom....

2019-10-21 11:34:40 1677

原创 BTrace小试 - 动态日志跟踪

BTrace动态日志跟踪笔记BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目。BTrace是一个很“有趣”的VisualVM插件,本身也是可以独立运行的程序。它的作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态加入原本并不存在的调试代码。这项功能对实际生产中的程序很有意义:经常遇到程序出现问题,但排查错误的一...

2019-08-02 10:39:03 663

原创 mysql插入数据后返回自增ID

mysql插入数据后返回自增ID的方法mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢?方法一:是使用last_insert_idmysql> SELECT LAST_INSERT_ID(); 产生的ID 每次连接后保存在服务器中。这意...

2019-08-01 16:38:03 3288

转载 Spring和SpringMVC父子容器关系初窥

一、背景  最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式。二、概念理解和知识铺垫  在Spring整体框架的核心概念中,容器是核心思想,就是...

2019-07-30 15:56:59 258

转载 java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

java 异常捕捉 ( try catch finally ) 你真的掌握了吗?前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 return 怎么办?相信你在处理异常的时候不...

2019-07-05 11:33:18 1783

转载 junit 单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

今天在写代码的时候想把老系统里面加上单元测试,所以用最近做的springmvc上的一个项目中的junit扒一个下来:junit-4.12.jar 但是很奇怪在原来系统中好好能运行的,放到现在的项目中就老是报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing。疯掉了后来查发现有人说换一个低版本的就行了,引入...

2019-07-05 11:12:23 905

转载 Java SPI机制简介

SPI 简介SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现描述给JDK知道就行啦(通过改一个文本文件即可) 公司内部,目前Dubbo框架就基于SPI机制提...

2019-07-05 11:03:24 303

转载 对TCP重传的进一步认识

一、看图说话1、基于套接字的TCP服务器/客户端程序流程2、TCP三次握手建立连接3、TCP四次交互断开连接4、TCP状态转移图这张图看不懂的话解释在计算机网络第四版P274。解释下MSL:最长分节生存周期,他代表了IP数据报载网络上的最长生命周期。保证该连接上的数据包在网络中全部消失。二、TCP重传1、重传的原因1)发...

2019-06-03 14:44:08 3102

转载 Junit单元测试多线程的问题

今天下午很快完成了一个接口的监控功能,然后屁颠屁颠地用Junit开始单元测试。然后我就开始陷入崩溃的边缘...监控结束后需要将监控结果以邮件的形式发送给运营的小伙伴维护,前面测试还是很顺利,到了开多线程发邮件时就不行了,程序也不报错,也接收不到邮件。然后改代码再测试,再冥思一会儿,再改再测试,还是无果,最后选择度娘一下,结论是:Junit单元测试不支持多线程然后,整个人都不好了.....

2019-05-22 14:54:09 525

空空如也

空空如也

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

TA关注的人

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