KittyDaddy's blog KittyDaddy's blog
首页
  • 学习笔记

    • 《Java基础》
    • 《常用设计模式》
    • 《MYSQL》
    • 《GO语言》
    • 《Spring源码解读》
  • 微服务解决方案

    • 锁的演化
    • 简单限流方案
    • 海量数据切分
  • 中间件

    • Nginx
    • MQ
    • Redis
    • Keepalived
  • 面试记
  • 杂文
  • 开源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

老猫

万物皆系统
首页
  • 学习笔记

    • 《Java基础》
    • 《常用设计模式》
    • 《MYSQL》
    • 《GO语言》
    • 《Spring源码解读》
  • 微服务解决方案

    • 锁的演化
    • 简单限流方案
    • 海量数据切分
  • 中间件

    • Nginx
    • MQ
    • Redis
    • Keepalived
  • 面试记
  • 杂文
  • 开源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
全部分类
更多 6 杂文 11 架构 6 微服务解决方案 6 定时器 1 《MYSQL》笔记 3 《Java基础》笔记 14 《常用设计模式》笔记 11 《Spring源码解读》 1 面试记 1 《MQ》 2 《Go语言》 7 开源 3 《锁的演化》 6 《海量数据切分》 1 《Redis》 4 《Keepalived》 1 《Nginx》 9

让大龄程序员欲罢不能的事儿

老猫 2024-09-23 更多杂文 上头兴趣爱好

运营明明设置了活动开始时间,为什么到点没生效?聊聊动态定时任务

老猫 2024-07-30 架构微服务解决方案定时器 分布式定时任务

不是,大哥,咱这小门小户的,别搞我CDN流量啊

老猫 2024-07-25 更多杂文 CDN流量

最近遇上事儿了,老猫的小小博客网站【程序员老猫的博客】被人盗刷CDN流量了。开始的时候收到了欠费的短信也没有怎么去重视。虽然说费用没有多少,但是也是一个教训。

阅读全文

半夜被慢查询告警吵醒,limit深度分页的坑

老猫 2024-06-24 《MYSQL》笔记 mysql索引

# 故事

梅雨季,闷热的夜,令人窒息,窗外一道道闪电划破漆黑的夜幕,小猫塞着耳机听着恐怖小说,辗转反侧,终于睡意来了,然而挨千刀的手机早不振晚不振,偏偏这个时候振动了一下,一个激灵,没有按捺住对内容的好奇,点开了短信,卧槽?告警信息,原来是负责的服务出现慢查询了。小猫想起来,今天在下班之前上线了一个版本,由于新增了一个业务字段,所以小猫写了相关的刷数据的接口,在下班之前调用开始刷历史数据。

考虑到表的数据量比较大,一次性把数据全部读取出来然后在内存里面去刷新数据肯定是不现实的,所以小猫采用了分页查询的方式依次根据条件查询出结果,然后进行表数据的重置。没想到的是,数据量太大,分页的深度越来越深,渐渐地,慢查询也就暴露出来了。

阅读全文

如此丝滑的API设计,用起来就是爽

老猫 2024-05-16 《Java基础》笔记 API设计

# 故事

工位上,小猫一边撸着代码,一边吐槽着前人设计的接口。

如下:

“我艹,货架模型明明和商品SKU模型是一对多的关系,接口入参的时候偏偏要以最小粒度的SKU将重复入参进行平铺”。

“一个接口居然做了多件事情,传入参数复杂异常,不是一块业务类型的东西,非得全部揉在一起”。

“如此长的业务流程,接口能快起来么,难怪天天收到接口慢的告警”。

业务告警

“这都啥啊,这名字怎么能这么取呢,这也太随意了吧....”

......

小猫一边写着V2版本的新接口,一边骂着现状接口。

阅读全文

不得不说,在很多业务中,这种模式用得真的很香

老猫 2024-04-24 《常用设计模式》笔记 策略模式

# 故事

“不能在写if else来拓展当前系统了,现在已经有三个支付场景了......”工位上,小猫看着电脑,挠着头。

就在刚刚,小猫接到了一个新需求,需要和客户公司打通资产,形成资产联动。说白了就是需要定制化对接客户公司的支付资产体系。除了这次接到的之外。前面其实已经对接了三家了。由于每家对接规范都不一样,历史对接的时候为了尽快上线,都是直接搞个else的新路由分支,然后去实现支付,退款。

在小猫看来,就是在堆屎山。牵一发而动全身的感觉真的很不好。由于本次的需求留有的时间还是相当充裕的,所以小猫下定决心,打算利用这次的拓展,将原来不合理的地方用上设计模式将其重构掉。

深思熟虑很久,小猫下定决心打算用“策略模式”重构一番。

阅读全文

推荐几个程序员日常绘图工具

老猫 2024-04-17 更多杂文 绘图工具

大家好,我是老猫。今天和大家分享一下程序员日常的绘图思路,以及一些老猫日常使用的绘图工具。

# 为什么要画图?

我们在进行系统设计的时候,为了更加具象地呈现系统的轮廓以及各个组件或者系统之间的关系和边界以及工作流程。我们就会画逻辑架构图,模块图、流程图、时序图等等。

在日常开发中,软件设计图是一种非常好的表达方式,尤其在技术评审的时候,一副好的设计图可能比干巴巴的文字更能说明问题。正所谓“一图胜千言”。

阅读全文

一个小小的逻辑判断符,资损几万块

老猫 2024-04-13 架构微服务解决方案 支付解决方案

# 故事

这是一个真实事件,三年前老猫负责公司的支付资产业务。为了响应上级号召,加强国央企之间的合作,公司新谈了一个支付对接的渠道(当然这个支付渠道其实很冷门的,也是为了对接而对接,具体哪个渠道也不方便透露),由于原始支付系统的第三方支付可拓展性设计得还不错的,所以老猫对接的也是比较快的,熟悉对方的对接文档之后对着编码就好了,差不多花了三天的时间就完成联调了。一切看似很顺利地上线了。

时隔几天,收到了一个快递包裹,是一袋价值53块钱的“原皮腰果”,当时诧异,翻看了各大消费平台,都没有之前的下单记录,后来和媳妇确认了一下,她也没有下单。“难道是某个崇拜哥的小姑娘送的?不能吧”当时心里美滋滋地yy着。

不过之后的一个客诉问题,引起了老猫的重视,老猫排查下来发现一个很重大的问题,钱款的扣除和实际的订单状态对不上。说白了就是订单完结了,但是账户资产并没有完成扣除。我瞬间明白了之前那个“原皮腰果”是怎么回事儿了,当时在生产测试渠道的时候,在公司内部商城提交了订单,但是并没有付款,然而订单却成功了。

再三确认之后,确实存在这一问题。一瞬间整个人心态崩了,头皮发麻,口干舌燥,心脏“突突突”。怎么办?怎么办?生产还不知道涉及多少单子,没办法,兜不住了,先把这件事情往上抛吧(向上级领导汇报)。

具体原因是什么呢?我们来看一下对接第三方支付的大概时序流程。

阅读全文

遵循这些MySQL设计规范,再也没被组长喷过

老猫 2024-04-06 《MYSQL》笔记 mysqlmysql设计规范

# 故事

会议室里,小猫挠着头,心里暗暗叫苦着“哎,这代码都撸完了呀,改起来成本也太大了。”

原来就在刚才,组长找到了小猫,说代码review过程中发现有些数据表模型设计得不合理,要求小猫改掉。小猫大概是设计了一个配置表,为了省事儿,小猫直接把相关的配置设计成了text类型的存储形式。

关于这种业务场景下使用text文本类型存储,组长指出了以下缺点:

  1. 在内存中处理Text字段时,由于需要处理大量数据,可能会导致内存使用过度,影响数据库性能。
  2. Text字段无法创建索引,这会导致数据库在执行查询时无法利用索引来加速搜索。虽然可以通过全文索引来改善搜索性能,但是却会有诸多限制,例如只能用于InnoDB引擎,并且索引只能建立在不超过1000字节的前缀上。
  3. 目前刚设计的时候就用text类型,后期随着数据量的增长以及业务需求的变化,可能就意味着要将text类型继续扩大变成,LongText或MediumText类型,这样的转换既费时又可能需要额外的存储空间。

“组长说的也有道理,但是为什么现在才指出来,当时方案模型评审的时候咋提呢,哎,醉了醉了,现在业务逻辑都按照现有方案开发完了,才提出来.....”

“改?要重写逻辑,不改?万一今后真的出现上面组长说的这些问题,不得被喷死......”

彷徨过后,小猫终于下定了决心,改了吧,长痛不如短痛...反正如果不改的话,受罪的还是自己。于是加班是少不了了......

阅读全文

简直了,被“Java并发锁”问题追问到自闭... 原创

老猫 2024-03-28 《Java基础》笔记 小帅面经Java并发锁

# 故事

地铁上,小帅双目空洞地望着窗外...绝望,发自内心地感到绝望...

距离失业已经过去两个月了,这是小帅接到的第四次面试邀请。“回去等通知吧...”,简简单单的六个字,把小帅的心再次打入了冰窖。

上次“【ThreadLocal问出花】”,小帅其实也有吸取教训得,这次对于多线程的问题还是做了很多准备的...可是没想到这次的结果居然也还是这样。

“Java中的锁了解吧?介绍一下吧”,面试官不紧不慢地问到。

阅读全文

上一页

下一页

全部分类
更多 6 杂文 11 架构 6 微服务解决方案 6 定时器 1 《MYSQL》笔记 3 《Java基础》笔记 14 《常用设计模式》笔记 11 《Spring源码解读》 1 面试记 1 《MQ》 2 《Go语言》 7 开源 3 《锁的演化》 6 《海量数据切分》 1 《Redis》 4 《Keepalived》 1 《Nginx》 9
Theme by Vdoing | Copyright © 2020-2024 Kitty Daddy | License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式