随笔分类 - 心情文字
摘要:当资源对象的创建/销毁比较耗时的场景下,可以通过"池化"技术,达到资源的复用,以此来减少系统的开销、增大系统吞吐量,比如数据库连接池、线程池、Redis 连接池等都是使用的该方式。 Apache Commons Pool 提供了通用对象池的实现,用于管理和复用对象,以提高系统的性能和资源利用率。 1
阅读全文
摘要:同学们在准备系技术面试,或者想了解架构底层工作原理时,经常不知道如何进行体系化的学习。 今天给大家推荐一个开源项目:system-design-101,这个项目的宗旨是:将复杂系统通过图片和简单术语进行解释,帮助你准备系统设计面试。 Github 地址: https://github.com/Byt
阅读全文
摘要:SPI 全称为 Service Provider Interface,是一种服务发现机制。 SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。 1
阅读全文
摘要:编写技术文章是程序员分享经验和记录学习成果的重要方式。 为了让写作变得更轻松,有许多实用工具可以帮助提升效率,比如 Markdown 编辑器、画图工具等。 接下来,笔者将介绍四款简单实用的工具,帮助程序员更轻松地编写技术文章。 1 Typora :Markdown 编辑器 Typora 是一款简洁而
阅读全文
摘要:Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。 1 核心流程 生产者使用 LPUSH key element[el
阅读全文
摘要:这篇文章,聊聊一个大家经常使用的编程模式 :Mybatis +「where 1 = 1 」。 笔者人生第一次重大的线上事故 ,就是和使用了类似的编程模式 相关,所以印象极其深刻。 这几天在调试一段业务代码时,又遇到类似的问题,所以笔者觉得非常要必要和大家絮叨絮叨。 1 OOM 事故 笔者曾服务一家电
阅读全文
摘要:10 几年前,互联网产业蓬勃发展,相比传统 IT 企业,互联网应用每天会产生海量的数据。 如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生。 当时最流行的 Java 技术论坛是 javaeye ,有位淘宝的技术人员分享了一篇分库分表的文章 ,这篇文章,我反复看了几十遍,想
阅读全文
摘要:这篇文章,我们聊聊线程安全使用 HashMap 的四种技巧。 1方法内部:每个线程使用单独的 HashMap 如下图,tomcat 接收到到请求后,依次调用控制器 Controller、服务层 Service 、数据库访问层的相关方法。 每次访问服务层方法 serviceMethod 时,都会在方法
阅读全文
摘要:2018 年,做为架构负责人,接到一个架构需求:实现一个简单易用的 RocketMQ SDK 。 因为各个团队 RocketMQ 原生客户端配置起来千奇百怪,有的配置存在风险,各团队负责人都需要一个简洁易用的 RocketMQ SDK 。 我立马调研相关开源的方案,当时 RocketMQ-Sprin
阅读全文
摘要:kkFileView 是一款文件文档在线预览解决方案,采用流行的 Spring Boot 框架构建,易于上手和部署。 该项目基本支持主流办公文档的在线预览,包括但不限于 doc、docx、xls、xlsx、ppt、pptx、pdf、txt、zip、rar,以及图片、视频、音频等格式。 1 Docke
阅读全文
摘要:Redis Stream 是 Redis 5.0 版本中引入的一种新的数据结构,它用于实现简单但功能强大的消息传递模式。 这篇文章,我们聊聊 Redis Stream 基本用法 ,以及如何在 SpringBoot 项目中应用 Redis Stream 。 1 基础知识 Redis Stream 的结
阅读全文
摘要:在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步&解耦 笔者曾经负责某电商公司
阅读全文
摘要:在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 分库分表之所以被广泛使用,因为工程相对简单,但分库分表并不仅仅是分片,还是需要考虑如何扩缩容(全量同步、增量同步、数据校验等)。 因此笔者做了一个教学型分库分表示例项目 ,计划将分库分表的技术体系都实际演示一遍。 https://gith
阅读全文
摘要:两年前,朋友想知道 Boss 直聘上关于自动驾驶的岗位有哪些 ,于是,笔者写了一个简单的爬虫 crawler-boss ,将岗位的信息收集起来。 这篇文章,笔者想分享爬虫 crawler-boss 的设计思路。 1 基本原理 Selenium + chromedriver 对于很多动态渲染的网页而言
阅读全文
摘要:人工智能时代,最需要学习的编程语言是:python 。笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 。 项目是 powerpoint-extractor ,可以将 ppt 文件中的图片提取出来,并输出到固定的目录。 1 安装 python 环境 首先打开终端
阅读全文
摘要:Github : https://github.com/makemyownlife/platform-sms 短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进。 1、支持发送任意时间延时短信; 2、优化三方渠道适配器加载逻辑; 3、支持 Docker 部署。 4
阅读全文
摘要:我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。 1 定时任务 首先,我们非常自然的想到定时任务的方案。 方案流程: 每隔 30 秒查询数据库,取出最近的 N 条未支
阅读全文
摘要:我们经常讲:研发人员有两只眼睛,一只是监控平台,另一只是日志平台。在对性能和高可用讲究的场景里,监控平台的重要性再怎么强调也不过分。 这篇文章,我们聊聊开源实时监控告警系统 HertzBeat 赫兹跳动。 1 产品特色 HertzBeat 有两个非常鲜明的特色:强大的监控模版和无需 Agent 。
阅读全文
摘要:这篇文章,我们聊聊实现定时任务的六种策略。 1 自定义单线程 上图中,我们启动一个线程,该线程无限循环执行,每隔20毫秒执行业务代码。 这种方式非常简单易用,在很多中间件中得到广泛应用。 2 JDK ScheduleExecutorService ScheduledExecutorService 是
阅读全文
摘要:Guava Cache是一款非常优秀的本地缓存框架,提供简洁易用的 API 供开发者使用。 这篇文章,我们聊聊如何使用 Guava Cache 异步刷新技巧带飞系统性能 。 1 基本用法 首先,在 Java 应用中添加 maven 依赖: <dependency> <groupId>com.goog
阅读全文