最新文章
共 99 篇20251 篇
20212 篇
Junit5 快速上手指南
Junit5 快速上手指南:JUnit 5 = Platform + Jupiter + Vintage 的模块划分,重点演示参数化测试(@ParameterizedTest + @CsvSource)相比 JUnit4 大幅减少重复用例,并介绍 junit-pioneer、junit-json-params、Easy Random 三个实用扩展插件及其 Maven 配置。
#java#testing#junit5#unit-test2 分钟阅读如何做好一次技术分享
分享自己在团队中做技术分享的套路,涵盖明确目标、圈定范围、制定大纲、编写内容、幻灯片准备等全流程方法论,以及介绍性、实践型、原理分析型三类分享的侧重点。
#tech-sharing#presentation#writing#methodology7 分钟阅读
20202 篇
透过 Cucumber 学习 BDD
用 Cucumber 学习 BDD(行为驱动开发):以投票系统为例,演示如何用 Gherkin 的 Feature/Scenario/Given/When/Then 将模糊需求实例化为可执行的 .feature 文档,再用 RunCucumberTest 衔接 Java 步骤代码完成自动化测试。
#testing#bdd#cucumber#unit-test#methodology4 分钟阅读H2 数据库的使用指南
用纯 Java 实现的内存数据库 H2 在单元测试中替代真实数据库:pom 依赖引入、用 classpath 下的 .sql 建表脚本与 CSV 初始化数据、以及通过 JDBC URL 参数(MODE=mysql、DB_CLOSE_DELAY、INIT=RUNSCRIPT)配置内存库并连接验证的完整示例。
#java#database#h2#unit-test#testing2 分钟阅读
20193 篇
读书笔记 ——《ThinkPad 之道》
《ThinkPad 之道》读书笔记:ThinkPad 其实诞生于 IBM 日本大和实验室,从最初 10.4 寸的小巧机身、TrackPoint 小红点的经典设计,到 NASA 将其带上太空、大和实验室为应对学生摧残式使用而设计的防水键盘与磁盘避震,再到联想收购后仍由大和负责品控——回顾这款日本工匠精神打磨出来的经典产品。
#book-notes#tech-history#thinkpad4 分钟阅读单元测试里的 Dummy / Stub / Spy / Mock / Fake
从 Uncle Bob 的《The Little Mocker》到 Martin Fowler 的《Mocks Aren't Stubs》,梳理单元测试中 Dummy、Stub、Spy、Mock、Fake 五类测试对象的递进关系,以及经典模式与 mock 模式在设计哲学上的差异。
#unit-test#testing#methodology4 分钟阅读应对复杂软件的思考
结合 SAAS 行业的项目实践,思考如何应对复杂多变的业务需求:从分离 Logic / Control / Data 改善"面条代码",到引入六边形架构与整洁架构的依赖倒置,再到用 DDD 战略设计划分界限上下文、用四色建模识别领域模型,最终让代码与业务模型对应起来。
#architecture#ddd#design8 分钟阅读
20183 篇
Kotlin分享小记
团队内部 Kotlin 分享整理:从 Java Bean 与 Kotlin data class 的对比出发,介绍 Kotlin 的类型推断、字符串模板、表达式与 when、可空类型与作用域函数(let/run/apply 等)、DSL 风格构建、协程(suspend/launch/async)以及在 Maven 中混用 Java 与 Kotlin 的接入方式。
#kotlin#java#concurrency7 分钟阅读从Excel的读写来看Kotlin的扩展方法
以重构 Apache POI 操作 Excel 的代码为例,展示 Kotlin 扩展方法的威力:通过 operator 关键字重载 Sheet/Row/Workbook 的 get/set 操作符,让调用方可以用 sheet[row, column] = value 的方式直观地构建 Excel,并用 object + apply/use 简化资源管理。
#kotlin#java2 分钟阅读面向"轨道"编程
借鉴 Scott Wlaschin 的 Railway Oriented Programming 思路,用 Kotlin 的 Result Monad 把业务函数的成功/失败两条路径抽象成两条"轨道":通过 flatMap/flatMapError 链式组合业务函数,将异常处理与控制流从业务代码中分离,让 Logic 与 Control 解耦。
#kotlin#design#architecture3 分钟阅读
201713 篇
Orika的使用姿势
介绍 Java Bean 拷贝框架 Orika 的使用方式:从默认按字段名拷贝,到通过 classMap 配置字段映射、利用 BidirectionalConverter 处理枚举/JSON 等自定义类型转换,避免工程中大量重复的 setter/getter 代码。
#java#orika#mapping2 分钟阅读基于RabbitMQ的延迟队列
介绍如何利用 RabbitMQ 的 rabbitmq-delayed-message-exchange 插件实现延迟队列:从插件安装、用 Spring AMQP 的 CustomExchange 定义 x-delayed-message 类型交换机,到通过 MessageProperties.setDelay() 发送延迟消息并被 @RabbitListener 消费,并对比 Redis 与 RocketMQ 延迟队列方案的利弊。
#rabbitmq#queue#messaging#middleware2 分钟阅读读书笔记 ——《人间失格》
太宰治《人间失格》读书笔记:叶藏从讨好所有人的好孩子一步步坠入众叛亲离、吸毒入院的泥潭,与作者自身经历高度重合。书中"恶的反义词是善,罪的反义词是法律"的讨论令人印象深刻,并对比《德米安》思考原生家庭关怀缺失对人一生走向的影响。
#book-notes#life#osamu-dazai1 分钟阅读读书笔记 ——《沉睡的人鱼之家》
东野圭吾《沉睡的人鱼之家》读书笔记:女儿瑞穗溺水脑死亡后,父母用医疗科技维系她的躯壳,与另一个等不到心脏捐献的小女孩形成鲜明反差。借此思考如何定义死亡,以及父母把孩子当私产、把抚育当恩典对原生家庭的影响。
#book-notes#life#keigo-higashino2 分钟阅读《日常决策》读书笔记
周末读完积压已久的《日常决策》并整理笔记:两种任务类型(收获性 / 避免损失)、用日历 + 任务清单搭建自己的管理系统、以及应对工作中打断的几个套路。
#time-management#productivity#decision-making#book-notes8 分钟阅读Tomcat是如何启动的
从 server.xml 配置出发解析 Tomcat 的整体设计:Server/Service/Connector/Container(Engine/Host/Context/Wrapper)/Executor/Listener 等核心接口的职责,并追踪 catalina.sh 启动脚本到 Bootstrap 通过反射调用 Catalina、再借助 Digester 解析 server.xml 构建出整个 Tomcat 服务器的启动过程。
#tomcat#source-code#architecture#java4 分钟阅读读书笔记 ——《我们台湾这些年》
《我们台湾这些年》读书笔记:从一个台湾人的视角回顾几十年来宝岛的政治与社会变迁——蒋经国的经济与开放、陈水扁从正派律师到令人失望的悲剧人物、随国民党退台老兵"少小离家老大回"的悲凉,以及早期娱乐综艺、学校制度与兵役制度的众生相。
#book-notes#life#history4 分钟阅读探寻Spring事务的实现原理
从 Spring Boot 的自动配置入手,逐步拆解 Spring 事务的实现原理:@EnableTransactionManagement 如何通过 ProxyTransactionManagementConfiguration 注册切面与 TransactionInterceptor,以及 invokeWithinTransaction 中事务的创建、提交与回滚流程。
#spring#transaction#source-code3 分钟阅读Spring Boot —— With Transaction
在 Spring Boot 中接入 MySQL 并使用 @Transactional 管理事务的实战:从 Maven 依赖、application.properties 配置,到 Spring 事务的 4 个隔离级别与 7 个传播行为的详解,并通过 UserService 示例观察事务行为。
#spring-boot#transaction#java2 分钟阅读利用Btrace脚本获取应用的运行时信息
介绍动态追踪工具 Btrace:通过 Java 动态织入技术在不重启线上应用的前提下截获方法调用、入参与耗时。涵盖 Btrace 安装、@OnMethod/@OnTimer/@OnExit 等注解的配置与 @Self、@Duration、@Return 等参数注解的使用。
#java#btrace#jvm#monitoring3 分钟阅读Guava 中的一致性哈希
介绍 Google Guava 的 Hashing 类中 consistentHash() 静态方法提供的一致性哈希实现:传入分片键和机器数量即可返回数据应落入的桶号,并解析其内部基于 LCG(线性同余)伪随机数算法的跳跃桶实现原理。
#java#consistent-hashing#hashing#distributed-systems1 分钟阅读Spring Boot With Http2
在 Spring Boot 中以 Undertow 为 Web 容器启用 HTTP/2 的实战:使用 keytool 生成自签名 PKCS12 证书、引入 Jetty alpn_boot 让 JVM 支持 ALPN 协议协商、通过 UndertowBuilderCustomizer 开启 HTTP/2 并配置 HTTPS。
#spring-boot#http#undertow#java2 分钟阅读Netflix Zuul vs OpenResty
对 Spring Cloud Zuul(Java 网关)和基于 Nginx 的 OpenResty 进行反向代理性能压测对比:使用 wrk 在不同线程/连接数下多轮测试同一 REST 接口,观察 JVM 预热后 Zuul 与 OpenResty 的吞吐量表现。
#zuul#gateway#microservice#java1 分钟阅读
201632 篇
利用MongoDB进行地理坐标查询
介绍如何利用 MongoDB 原生的二维地理坐标查询能力支撑 LBS 应用:为 location 集合的 position 字段建立 2d 索引,使用 $near/$maxDistance 按距离排序查询附近坐标点,以及 $geoWithin 配合 $center/$box 完成圆形和矩形区域内的坐标筛选。
#mongodb#middleware1 分钟阅读一致性哈希
介绍 1997 年 MIT 提出的一致性哈希算法:通过 2^32 的环形 Hash 空间让数据按顺时针落到最近的服务器节点上,解决分布式环境下的数据分布、节点故障与扩容问题,并使用虚拟节点平衡各服务器的数据堆积。
#consistent-hashing#distributed-systems#hashing#architecture2 分钟阅读Running Hystrix Dashboard With RabbitMQ
在无 Web 容器的项目中通过 Spring Cloud Stream + RabbitMQ 将 Hystrix 的 metrics 数据汇聚到 Hystrix Dashboard 展示:客户端接入 hystrix-stream 与 stream-rabbit,服务端用 turbine-stream 聚合并通过 wrk 压测观察监控变化。
#hystrix#rabbitmq#monitoring#microservice2 分钟阅读使用Hystrix保护服务
介绍 Netflix Hystrix 如何通过命令模式在分布式环境中防止服务雪崩:用 HystrixCommand 封装业务逻辑、在 getFallback() 中提供服务降级、借助 RxJava 的 Observable 处理异常响应,以及 CommandKey/GroupKey/ThreadPoolKey 的命名与线程池隔离。
#hystrix#resilience#microservice#java2 分钟阅读Spring boot start with Undertow
在 Spring Boot 中用 Undertow 替换默认的 Tomcat 作为 Web 容器:通过 starter 引入 undertow、在配置类中启用 HTTP/2、调整 io-threads/worker-threads/buffer 等参数,并用 wrk 与 jconsole 对比 Undertow 与 Tomcat 的压测和资源占用表现。
#spring-boot#undertow#java#http1 分钟阅读并发策略 —— CAS
拆解 CAS(Compare and Swap)无锁并发思路:V/E/N 三个参数的语义、自旋重试的伪代码,以及 jdk atomic 包下 Unsafe.compareAndSwapInt 与 AtomicInteger.incrementAndGet 是如何借助 CAS 实现无锁自增的。
#java#concurrency#cas#juc1 分钟阅读不一样的 List 02 —— LinkedList 解析
从源码层面拆解 LinkedList:内部双向链表的 Node 结构、add/linkLast 的尾插、addAll 的批量插入、node() 二分查找定位,以及 unlink 节点摘除,并对比 ArrayList 在增删与查询上的取舍。
#java#collections#source-code2 分钟阅读不一样的 List 01 —— ArrayList 解析
从源码层面拆解 ArrayList:三种构造方法的内存分配差异、add 时的扩容机制(1.5 倍增长与 Arrays.copyOf)、remove 的数组拷贝删除、O(1) 的随机查询,以及初始化估算容量、减少修改的最佳使用姿势。
#java#collections#source-code4 分钟阅读认识 logback
系统介绍 Java 日志框架 logback 的核心组件:appender(输出位置)、Encoder(二进制流转换)、layout(格式模板)与 filter(过滤规则),以及如何在 Spring Boot 中通过 logback-spring.xml 配合 springProperty/springProfile 实现配置注入与环境切换。
#java#logging#logback#spring-boot3 分钟阅读利用Actuator构建Spring Boot的监控
使用 Spring Boot Actuator 构建依赖服务的健康监测体系:以 MongoDB 为例继承 AbstractHealthIndicator 实现 doHealthCheck(),通过 /health 端点和 JMX(jconsole)查看应用及依赖服务的健康状态,服务异常时返回 503 并暴露错误详情。
#spring-boot#monitoring#java1 分钟阅读写在毕业一年的时候
毕业一年时的回望与复盘:从草草收场的第一份工作、三周密集求职的低谷,到进入初创的北软在外包烂代码与冷清业务中煎熬并见证公司活过资本寒冬。两年间在工作、商业、管理与阅读上的成长,以及愿自己不丢失对生活热情的朴素期望。
#life#career#reflection3 分钟阅读使用Spring Cloud构建统一配置中心
基于 Spring Cloud Config 构建分布式系统的统一配置中心:Server 端通过 @EnableConfigServer 配合 git/svn 环境 repository 对外发布配置,Client 端通过 spring.cloud.config.* 拉取对应 application/profile/label 的配置,并对比 disconf 的优劣。
#spring#spring-boot#config#microservice2 分钟阅读RabbitMQ with Spring Boot
在 Spring Boot 中通过 spring-amqp / spring-rabbit 整合 RabbitMQ:使用 amqp starter 配置连接、定义 Queue/DirectExchange/Binding,通过 RabbitTemplate 发送消息并用 SimpleMessageListenerContainer 持续监听队列。
#spring-boot#rabbitmq#messaging#java1 分钟阅读RabbitMQ的四种交换机
详解 RabbitMQ 的四种交换机类型:扇形交换机(Fanout,广播)、直连交换机(Direct,基于 routing_key 路由)、主题交换机(Topic,使用 * 和 # 通配符的模式匹配)、首部交换机(Headers,基于 Hash 头信息匹配 x-match=all/any),以及各自的适用场景。
#rabbitmq#messaging#middleware3 分钟阅读Running Dubbo On Spring Boot
将阿里分布式服务框架 Dubbo 与 Spring Boot 整合构建微服务:使用 dependencyManagement 引入 spring-boot-starter、用 @ImportResource 加载 Dubbo 的 XML 配置、以 SpringApplicationBuilder.web(false) + CountDownLatch 启动非 web 项目,并用 spring-boot-maven-plugin 简化打包部署。
#spring-boot#dubbo#rpc#microservice3 分钟阅读Netty中的字节操作
解析 Netty 高性能背后的字节操作设计:ByteBuf 的 readerIndex/writerIndex/capacity 三大属性、Heap Buffer / Direct Buffer / Composite Buffer 三种模式(包括 Zero-Copy 实现),以及通过 ByteBufAllocator 与 Unpooled 分配池化内存的方式。
#netty#java#middleware2 分钟阅读CentOS上安装RabbitMQ
在 CentOS 上从源码安装 RabbitMQ 的步骤:先安装 OpenSSL 依赖并编译 Erlang/OTP(RabbitMQ 用 Erlang 编写),再安装 xmlto、解压 rabbitmq-server 源码包并 make && make install,最后执行 rabbitmq-server 启动服务。
#rabbitmq#middleware1 分钟阅读Spring Boot —— 配置切换指南
梳理 Spring Boot 的配置加载优先级机制(从命令行参数、系统属性、环境变量到 jar 内外 application.properties 共 9 级),并演示如何通过 --spring.config.location 指定外部配置文件、用 @Value 注入和 CommandLineRunner 实现不同环境(开发/测试/生产)间的配置切换。
#spring-boot#config#java2 分钟阅读Spring Boot -- Start Up
Spring Boot 入门实战:通过 spring-boot-starter-parent 与 spring-boot-starter-web 在 Maven 中引入 Spring Boot,编写 @Controller + @EnableAutoConfiguration 启动类直接运行 main() 启动一个嵌入式 Tomcat 的 Web 项目,并演示 application.properties 配置与访问效果。
#spring-boot#java2 分钟阅读Spring Boot —— 启动彩蛋
介绍 Spring Boot 启动时控制台 banner 的自定义彩蛋:在 resource 目录下放置 banner.txt 替换默认 Spring 图标,借助字符画生成网站制作图案,并使用 ${AnsiColor.XXX} 控制颜色、${application.version} / ${spring-boot.version} 等占位符展示项目信息。
#spring-boot#java1 分钟阅读利用Metrics+InfluxDB+Grafana构建监控平台
在 Metrics 基础上结合 InfluxDB(时序数据库)和 Grafana(可视化面板)搭建一套完整的业务监控平台:通过 yum 在 CentOS 7 上安装两个服务,使用 metrics-influxdb 的 InfluxdbReporter 把度量数据写入 InfluxDB,再用 Grafana 配置数据源与图表,最后用 wrk 压测观察实时监控画面。
#monitoring#metrics#middleware#java1 分钟阅读Metrics —— JVM上的实时监控类库
系统介绍 Dropwizard Metrics 这个 JVM 实时监控类库:以 MetricRegistry 为中心容器,详解 Meters(TPS 速率)、Histograms(直方图)、Counters(计数器)、Timers(计时器)、Gauges(自定义度量)五种度量类型的使用,并通过 Reporter 将数据输出到 Console/JMX/Slf4j。
#metrics#monitoring#java#jvm3 分钟阅读Http keep-alive 分析
分析 HTTP keep-alive 长连接机制:早期 HTTP 每个请求都要重新建立 TCP 连接,HTTP/1.0 引入 keep-alive 头、HTTP/1.1 默认持久化连接以复用 Socket;同时指出长连接会占用系统 fd 资源,Server 端必须控制闲置 timeout,频繁场景用长连接、低频场景用短连接更合适。
#http#network1 分钟阅读Netty构建Http服务器
使用 Netty 实现一个自定义的 HTTP 服务器:介绍 HTTP 请求/响应协议结构,编写 SimpleChannelInboundHandler 处理 HttpRequest 与 LastHttpContent 并返回 Hello World,通过 HttpServerCodec 编解码、ServerBootstrap + NioEventLoopGroup 启动监听 8888 端口,并用 httpie 进行验证。
#netty#http#java#middleware1 分钟阅读利用Netty构建自定义协议的通信
使用 Netty 实现一个名为 luck 的自定义应用层协议(Header + Content):定义 LuckHeader/LuckMessage 数据结构,通过继承 ByteToMessageDecoder 与 MessageToByteEncoder 实现编解码器,再配合 ServerBootstrap 和客户端完成自定义协议的双端通信验证。
#netty#java#middleware1 分钟阅读使用Netty创建Telnet服务
用 Netty 实现一个 Telnet 服务端:通过 ServerBootstrap 配置 boss/worker 两个 NioEventLoopGroup,在 ChannelInitializer 中加入 DelimiterBasedFrameDecoder 与 StringDecoder/Encoder,再用 SimpleChannelInboundHandler 处理连接握手与请求响应,最后用系统 telnet 命令完成验证。
#netty#java#middleware1 分钟阅读全局唯一ID设计
对比分布式系统中三种全局唯一 ID 生成方案的优劣:数据库自增(简单但难扩展)、UUID(全局唯一但占空间且无序)、Twitter Snowflake(41bit 毫秒时间戳 + 区域 + 机器号 + 序列号拼成 64bit long,趋势递增)。附带 Java 与 Python 版本的自定义 Snowflake 实现,并提醒注意 NTP 时间回拨与跨毫秒序列随机化等细节。
#id-generation#distributed-systems#architecture#java2 分钟阅读从Java文件到字节码文件
结合 OpenJDK 中 javac 的源码,拆解 Java 源码到字节码文件的四个编译步骤:词法解析(关键字到 Token)、语法解析(Token 到抽象语法树)、语义解析(补全与常量折叠),以及最终的字节码生成。
#java#compiler#javac#bytecode6 分钟阅读Redis 持久化
系统介绍 Redis 的两种持久化方案:RDB(通过 SAVE/BGSAVE 生成压缩的二进制快照,可配置 save 触发条件)与 AOF(追加写命令、appendfsync 控制 always/everysec/no 同步策略、支持 BGREWRITEAOF 重写),并对比两者在数据安全性、文件大小与恢复速度上的取舍。
#redis#persistence#middleware4 分钟阅读Java线程池解析
从类图出发拆解 Java 线程池:Executors 提供的四种内置线程池、ThreadPoolExecutor 的七个核心参数(核心线程数、最大线程数、任务队列、饱和策略等),以及 execute() 分三步调度线程执行任务的内幕。
#java#concurrency#juc#thread-pool3 分钟阅读Java的几个同步辅助类
梳理 Java 并发包中几个常用的同步辅助类:CountDownLatch 的一次性倒计数等待、CyclicBarrier 的循环屏障,以及 Semaphore 的资源许可控制,并用统计磁盘、赛跑起跑、连接池等例子说清各自的使用场景。
#java#concurrency#juc2 分钟阅读Speedment -- 利用lambda编写SQL
介绍利用 Java8 lambda 表达式操作数据库的 ORM 框架 Speedment,从 Maven 配置、GUI 代码生成,到持久化、查询、并行流与 JSON 序列化的实践。
#java#lambda#orm2 分钟阅读
201518 篇
函数的记忆
探讨函数缓存与记忆化(Memoization)的原理:为什么只有纯函数适用,并通过 Java8 自定义 Memoizer 来实现闭包级别的结果缓存。
#java#function#caching1 分钟阅读Jvm --- 常用工具
介绍 JDK 自带的几个常用 JVM 诊断工具:jps、jstat、jinfo、jmap 和 jstack 的作用与常用参数,帮助快速排查 Java 进程与运行时状态。
#java#jvm#tooling2 分钟阅读MongoDB Java Driver操作指南
介绍 MongoDB 3.0 Java Driver 的使用方式,涵盖建立连接、集合操作、文档增删改查、条件过滤、排序投影以及 Bulk 批量操作。
#mongodb#java#nosql4 分钟阅读MongoDB CRUD 操作手册
系统整理 MongoDB 的增删改查操作,涵盖单条与批量插入、条件查询、字段投影以及 update、remove 等常用命令的使用方法。
#mongodb#nosql#database2 分钟阅读git 行动指南
面向团队协作的 Git 实践指南:涵盖基本配置、本地提交、分支管理(master/dev 与 feature/release/fixbug 临时分支)、合并策略、远程交互以及 rebase 整理提交顺序的操作。
#git#vcs#tooling4 分钟阅读简易的设计模式——中介者模式
讲解中介者模式的定义与 Mediator、ConcreteMediator、Colleague 等角色,通过 Java 代码演示如何用中介对象封装同事类之间的交互,降低多对象间的耦合。
#java#design-pattern1 分钟阅读简易的设计模式——原型模式
讲解原型模式的定义与核心 clone 方法,通过 Java 代码演示基于内存二进制拷贝创建对象的方式,并分析其性能优势与适用场景。
#java#design-pattern1 分钟阅读简易的设计模式——适配器模式
讲解适配器模式的定义与 Target、Adaptee、Adapter 三种角色,通过 Java 代码演示如何将已有接口转换成客户端期望的接口,让原本不兼容的类协同工作。
#java#design-pattern1 分钟阅读简易的设计模式——建造者模式
讲解建造者模式的定义与 Product、Builder、ConcreteBuilder、Director 四个角色,通过 Java 代码演示如何将复杂对象的构建与表示分离,按顺序组装出不同产品。
#java#design-pattern1 分钟阅读简易的设计模式——模板方法模式
讲解模板方法模式的定义与抽象模板类、具体模板类两种角色,通过 Java 代码演示父类定义算法框架、子类实现具体步骤的设计思路。
#java#design-pattern1 分钟阅读简易的设计模式——代理模式
讲解代理模式的定义与 Subject、RealSubject、Proxy 三种角色,通过 Java 代码演示如何用代理类控制对真实对象的访问并在调用前后插入额外逻辑。
#java#design-pattern1 分钟阅读简易的设计模式——访问者模式
讲解访问者模式的定义与 Visitor、Element、ObjectStructure 等角色,通过 Java 代码演示如何在不改变数据结构的前提下为元素定义新的操作。
#java#design-pattern1 分钟阅读简易的设计模式——备忘录模式
介绍备忘录模式的定义与 Originator、Memento、Caretaker 三个角色,通过 Java 代码演示如何在不破坏封装的前提下保存和恢复对象内部状态。
#java#design-pattern1 分钟阅读简易的设计模式——门面模式
讲解门面模式(外观模式)的定义、Facade 与 subsystem 两种角色,并用 Java 代码演示如何通过统一门面对象屏蔽子系统细节,降低外部依赖。
#java#design-pattern1 分钟阅读简易的设计模式——观察者模式
介绍观察者模式(发布订阅模式)的定义和 Subject、Observer 等四种角色,用 Java 代码演示被观察者如何动态增删观察者并在状态变化时触发通知。
#java#design-pattern1 分钟阅读简易的设计模式——桥梁模式
讲解桥梁模式的定义与四个角色(抽象化、修正抽象化、实现化、具体实现化),通过 Java 代码示例演示如何将抽象与实现解耦,使两者能够独立演进。
#java#design-pattern1 分钟阅读static与并发
探讨 Java 中被 static 修饰的方法在多线程并发场景下是否存在数据安全问题,通过示例代码验证静态方法因局部变量而天然线程安全的原理。
#java#concurrency#jvm1 分钟阅读Java下几种加密方式的实现
用 Java 实现 AES 对称加密、SHA 摘要算法与 RSA 非对称加密,借助 BouncyCastle 与 commons-codec 给出加解密代码示例,并解决 JDK 默认密钥强度限制(Illegal key size)问题。
#java#encryption#security1 分钟阅读
201415 篇
我只是想开个饭店—— JavaIO模型的演变
用一个开饭店的故事形象地讲解 Java IO 模型的演变:从一对一服务的 BIO 模型,到基于线程池的伪异步 IO,再到非阻塞的 NIO,对比各自的优劣。
#java#io#nio3 分钟阅读Please Call Me NIO
介绍 Java NIO 的核心 API,包括 Path 与 Files 类的文件操作、文件的读写方法,以及通过将来式和回调式实现异步 IO 的使用方式。
#java#nio#io4 分钟阅读学习scala03 控制结构
介绍 Scala 的 if、while 与 for 控制结构,包括 to/until 区间遍历以及基于 for 循环的过滤器的用法。
#scala#jvm#basics1 分钟阅读学习Scala02 基本类型
梳理 Scala 的九大基本类型、val 与 var 的区别,以及通过元组实现多变量赋值的方式,体会 Scala 中一切皆对象的设计。
#scala#jvm#basics1 分钟阅读学习Scala01 环境安装
介绍 Scala 的环境搭建过程,包括在 Windows 与类 Unix 系统下配置环境变量,以及在 Eclipse 中安装 Scala 插件。
#scala#setup2 分钟阅读Hello Mybatis 04 使用spring-mybatis
介绍 mybatis-spring 的整合配置,通过 SqlSessionTemplate 和 MapperScannerConfigurer 将 SqlSession 的管理交给 Spring,简化数据库操作。
#java#mybatis#orm2 分钟阅读漫扯_从polling到Websocket
用轻松的故事化方式梳理 Web 实时通信的演进:从轮询、Comet(长轮询与 forever iframe)到全双工的 WebSocket,对比各自的原理、优劣与潜在问题。
#http#websocket#network5 分钟阅读简易的设计模式——单例模式
讲解单例模式的定义与实现方式,通过国王与人民的 Java 示例演示如何保证一个类只有一个实例并向整个系统提供该实例,并总结其优缺点与应用场景。
#java#design-pattern1 分钟阅读Hello Mybatis 03 数据关联
讲解 Mybatis 中 resultMap 的用法,并通过 association 和 collection 标签实现一对一、一对多的数据关联查询。
#java#mybatis#orm2 分钟阅读Hello Mybatis 02 mybatis generator
介绍 mybatis generator 代码生成工具的配置与使用,通过 generatorConfig.xml 自动生成 vo 类、Dao 接口和 Mapper.xml,省去手写模板代码。
#java#mybatis#orm1 分钟阅读Hello Mybatis 01 第一个CRUD
从零开始搭建 Mybatis 环境,通过 User 表的增删改查示例,介绍 SqlSessionFactory、SqlSession 与 Mapper 的基本用法。
#java#mybatis#orm3 分钟阅读Git 远程仓库搭建
介绍如何从零搭建一个 Git 远程仓库服务器:创建 git 用户、配置 authorized_keys 公钥认证、初始化裸仓库,并通过 push/clone 验证小型团队协作的可用性。
#git#devops#vcs2 分钟阅读先学框架=不注重基础?
从自身学习 Web 开发的经历出发,思考是否应该先学框架再回头看 servlet、jdbc 等基础,反思基础与框架学习的先后顺序与相互促进关系。
#java#thinking#reflection3 分钟阅读命令行也可以被录制
介绍 Linux 下使用 script 和 scriptplay 两条命令来录制、回放终端操作的方法,并扩展到借助 mkfifo 在两个终端间做命令行实时直播。
#linux#shell#tooling1 分钟阅读java线程与并发(二)
梳理 Java 线程的生命周期与常用操作,包括取得与设置线程名称、join、sleep、优先级等,并介绍 synchronized 关键字与同步代码块、同步方法的基本用法。
#java#concurrency#thread2 分钟阅读
20139 篇
杂感_ 编程第二年
编程第二年的个人杂感:从热爱编程到读书写博,再到对自信与谦虚的体会,以及面向工作在 Scala、设计模式与算法上的学习规划,写给两年 coding 生活的一份纪念。
#reflection#thinking#career4 分钟阅读java线程与并发(一)
从操作系统的进程与线程说起,介绍 Java 实现多线程的两种方式:继承 Thread 类与实现 Runnable 接口,并通过示例说明二者在资源共享上的区别。
#java#concurrency#thread2 分钟阅读HTTP学习笔记(五)
聚焦 Web 服务器的工作原理,梳理服务器在接收连接、解析报文、定位资源、构建响应各阶段的行为,并讨论字符编码(ASCII、GB2312、Unicode、UTF-8)与乱码问题的由来。
#http#network4 分钟阅读http学习笔记(四)——HTTP报文
深入拆解 HTTP 报文的组成:请求报文与响应报文的起始行、首部、主体结构,介绍常见请求方法、状态码分类以及典型响应首部字段的含义。
#http#network4 分钟阅读http学习笔记(三)
梳理 HTTP 与 TCP 的关系,分析 TCP 慢启动、Nagle 算法等对 HTTP 性能的影响,并对比串行连接、并行连接、持久连接与管道连接几种连接管理方式的优劣。
#http#network4 分钟阅读http学习笔记(一)
HTTP 学习笔记开篇,介绍 HTTP 协议的基本概念、无状态特性,以及 Web 服务器的作用,并通过 telnet 实例直观感受一次 HTTP 事务的请求与响应报文。
#http#network4 分钟阅读http学习笔记(二)—— 嘿!伙计,你在哪?(URL)
介绍 URL(统一资源定位符)的由来与意义,详细拆解 scheme、host、port、path、params、query、frag 等语法组成,并说明绝对路径与相对路径的补全规则。
#http#network5 分钟阅读本地DNS安装
在 CentOS 下使用 bind 搭建本地 DNS 服务的完整流程:安装 bind、配置 named.conf 与 zone 文件、处理权限问题,并通过 nslookup 验证域名解析。
#linux#dns#bind1 分钟阅读centOS搭建本地yum
介绍如何在 CentOS 中通过挂载光盘镜像并修改 CentOS-Media.repo 来搭建本地 yum 源,从而摆脱对外网的依赖,方便地安装软件包。
#linux#centos#yum1 分钟阅读