Go 去找个对象吧

2021-02-23
阅读 3 分钟
1.6k
前言我的读者中应该大部分都是 Java 从业者,不知道写 Java 这些年是否真的有找到对象?没找到也没关系,总不能在一棵树上吊死,我们也可以来 Go 这边看看,说不定会有新发现。开个玩笑,本文会以一个 Javaer 的角度来聊聊 Go 语言中的面向对象。<!--more-->OOP面向对象这一词来源于Object Oriented Programming,...
封面图

一文搞懂参数传递原理

2021-01-12
阅读 6 分钟
3.9k
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。

一个小时学会用 Go 创建命令行工具

2020-12-08
阅读 6 分钟
3.4k
前言最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼”真香“。但现阶段相对来说还是 Python 写的多一些,偶尔还得回炉写点 Java ;自然对 Go 也谈不上多熟悉。于是便利用周末时间自己做个小项目来加深一些使用经验。于是我便想到了之前利用 Java 写的一个博...

不同语言对单例模式的不同实现

2020-10-09
阅读 5 分钟
1.7k
前言前段时间在用 Python 实现业务的时候发现一个坑,准确的来说是对于 Python 门外汉容易踩的坑;大概代码如下: {代码...} 首先定义了一个 Mom 的类,它包含了一个字符串类型的 name 与列表类型的 sons 属性;在使用时首先创建了该类的一个实例 m1 并往 sons 中写入一个列表数据;紧接着又创建了一个实例 m2 ,也往 so...

撸了一个 Feign 增强包

2020-07-30
阅读 4 分钟
2.5k
最近准备将公司的一个核心业务系统用 Java 进行重构,大半年没写 Java ,JDK 都更新到 14 了,考虑到稳定性等问题最终还是选择的 JDK11。

动态代理与RPC

2020-04-28
阅读 3 分钟
2.4k
前言 随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了。 看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开始了漫漫重构之路。 前后对比 在开始之前先简单介绍一下 cim 这个项目,下面是它的架构图: 简单来说就是一个 IM 即...

动态代理的实际应用

2020-03-30
阅读 3 分钟
1.5k
最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。

手写一个词法分析器

2020-03-23
阅读 5 分钟
10.1k
最近大部分时间都在撸 Python,其中也会涉及到将数据库表转换为 Python 中 ORM 框架的 Model,但我们并没有找到一个合适的工具来做这个意义不大的”体力活“,所以每次新建表后大家都是根据自己的表结构手写一遍 Model。

消失的这几个月我都干了什么

2020-01-03
阅读 3 分钟
2.1k
前言 消失两个多月后我胡汉三又回来了,比较遗憾的是这并不是一篇技术文,有兴趣的朋友就当做故事看吧。 所以这其实是一份年终总结 其实这段期间一直有朋友在问我咋不接着更新公众号了?甚至一点消息都没了。 真不是不更,主要有以下几个原因: 我对这个号的定位是【原创技术】博主,大家应该也知道,技术号是一种非常垂...

设计一个全局异常处理器

2019-07-15
阅读 4 分钟
2.3k
前言 最近稍微闲了一点于是把这个半年都没更新的开源项目 cicada 重新捡了起来。 一些新关注的朋友应该还不知道这项目是干啥的?先来看看官方介绍吧(其实就我自己写的😀) cicada: 基于 Netty4 实现的快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。 针对这个轮子以前也写过相关的介绍,感兴趣的可以再翻...

What?一个 Dubbo 服务启动要两个小时!

2019-07-05
阅读 3 分钟
2.7k
前言 前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的,有一天测试在测试环境重新部署一个 dubbo 应用的时候发现应用“启动不起来”。 但过几个小时候之后又能自己慢慢恢复,并...

常见的集合容器应当避免的坑

2019-07-04
阅读 5 分钟
2.4k
前言 前不久帮同事一起 review 一个 job 执行缓慢的问题时发现不少朋友在撸码实现功能时还是有需要细节不够注意,于是便有了这篇文章。 ArrayList 踩坑 {代码...} 首先大家看看这段代码有什么问题嘛? 其实在大部分情况下这都是没啥问题,无非就是循环的往 ArrayList 中写入数据而已。 但在特殊情况下,比如这里的 getDa...

再一次生产 CPU 高负载排查实践

2019-06-18
阅读 3 分钟
3.7k
前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU 100% 排查优化实践》 不过本次问题产生的原因却和上次不太一样,大家可以接着往下看。 <!--more--> 问题分析 收到邮件后我...

分表后需要注意的二三事

2019-06-13
阅读 3 分钟
2k
前言 本篇是上一篇《一次分表踩坑实践的探讨》,所以还没看过的朋友建议先看上文。 还是先来简单回顾下上次提到了哪些内容: 分表策略:哈希、时间归档等。 分表字段的选择。 数据迁移方案。 而本篇文章的背景是在我们上线这段时间遇到的一些问题并尝试解决的方案。 问题产生 之前提到在分表应用上线前我们需要将原有表...

线程池没你想的那么简单(续)

2019-06-06
阅读 5 分钟
2.5k
前言 前段时间写过一篇《线程池没你想的那么简单》,和大家一起撸了一个基本的线程池,具备: 线程池基本调度功能。 线程池自动扩容缩容。 队列缓存线程。 关闭线程池。 这些功能,最后也留下了三个待实现的 features 。 执行带有返回值的线程。 异常处理怎么办? 所有任务执行完怎么通知我? 这次就实现这三个特性来看...

年轻人的第一篇博客

2019-05-24
阅读 5 分钟
1.7k
前言 写这篇文章的前因是有位读者留言提到了相关的话题,其实在之前有一篇《如何成为一位「不那么差」的程序员》时有简要提到但没有细说;这次就借这个机会好好聊聊这个事情的前因后果。 为什么要写博客 为什么要写博客? 我觉得大部分人应该都知道标准答案。 翻了下记录,我从 16 年四月份至今写了三年的博客,产出了 1...

线程池没你想的那么简单

2019-05-20
阅读 8 分钟
2.6k
原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得不佩服 Doug Lea 。

图床失效了?也许你应该试试这个工具

2019-05-09
阅读 2 分钟
1.9k
前言 经过几个小伙伴的提醒,发现个人博客中的许多图片都裂了无法访问;原因就不多说,既然出现问题就得要解决。 原本我的处理方式非常简单粗暴:找到原有的图片重新下载下来上传到新的可用图床再把图片地址替换。 这样搞了一两篇之后我就绝望了。。。 之前为了代码能在公众号里也有好的阅读体验,所以能截图的我绝不贴...

『并发包入坑指北』之向大佬汇报任务

2019-04-29
阅读 5 分钟
1.6k
前言 在面试过程中聊到并发相关的内容时,不少面试官都喜欢问这类问题: 当 N 个线程同时完成某项任务时,如何知道他们都已经执行完毕了。 这也是本次讨论的话题之一,所以本篇为『并发包入坑指北』的第二篇;来聊聊常见的并发工具。 <!--more--> 自己实现 其实这类问题的核心论点都是:如何在一个线程中得知其他...

一次分表踩坑实践的探讨

2019-04-16
阅读 4 分钟
2.1k
前言 之前不少人问我“能否分享一些分库分表相关的实践”,其实不是我不分享,而是真的经验不多?;和大部分人一样都是停留在理论阶段。 不过这次多少有些可以说道了。 先谈谈背景,我们生产数据库随着业务发展量也逐渐起来;好几张单表已经突破亿级数据,并且保持每天 200+W 的数据量增加。 而我们有些业务需要进行关联查...

『并发包入坑指北』之阻塞队列

2019-04-10
阅读 5 分钟
1.8k
较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C(java.util.concurrent)也就是 Java 并发包的使用甚少,更别谈对它的理解了;但这却也是我们进阶的必备关卡。

线程池中你不容错过的一些细节

2019-03-26
阅读 3 分钟
2.1k
背景 上周分享了一篇《一个线程罢工的诡异事件》,最近也在公司内部分享了这个案例。 无独有偶,在内部分享的时候也有小伙伴问了之前分享时所提出的一类问题: 这其实是一类共性问题,我认为主要还是两个原因: 我自己确实也没讲清楚,之前画的那张图还需要再完善,有些误导。 第二还是大家对线程池的理解不够深刻,比如...

一个线程罢工的诡异事件

2019-03-13
阅读 5 分钟
2.3k
背景 事情(事故)是这样的,突然收到报警,线上某个应用里业务逻辑没有执行,导致的结果是数据库里的某些数据没有更新。 虽然是前人写的代码,但作为 Bug maker&killer 只能咬着牙上了。 <!--more--> 因为之前没有接触过出问题这块的逻辑,所以简单理了下如图: 有一个生产线程一直源源不断的往队列写数据。 ...

一致性 Hash 算法的实际应用

2019-03-01
阅读 7 分钟
3.2k
前言 记得一年前分享过一篇《一致性 Hash 算法分析》,当时只是分析了这个算法的实现原理、解决了什么问题等。 但没有实际实现一个这样的算法,毕竟要加深印象还得自己撸一遍,于是本次就当前的一个路由需求来着手实现一次。 背景 看过《为自己搭建一个分布式 IM(即时通讯) 系统》的朋友应该对其中的登录逻辑有所印象。 ...

利用策略模式优化过多 if else 代码

2019-01-30
阅读 2 分钟
5.6k
前言 不出意外,这应该是年前最后一次分享,本次来一点实际开发中会用到的小技巧。 比如平时大家是否都会写类似这样的代码: {代码...} 条件少还好,一旦 else if 过多这里的逻辑将会比较混乱,并很容易出错。 比如这样: 摘自 cim 中的一个客户端命令的判断条件。 刚开始条件较少,也就没管那么多直接写的;现在功能多...

长连接的心跳及重连设计

2019-01-23
阅读 5 分钟
3.4k
前言 说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的。 顾名思义就是证明是否还活着的依据。 什么场景下需要心跳呢? 目前我们接触到的大多是一些基于长连接的应用需要心跳来“保活”。 由于在长连接的场景下,客户端和服务端并不是一直处于通信状态,如果双方长期没有沟通则双方都不清楚对...

为自己搭建一个分布式 IM 系统二【从查找算法聊起】

2019-01-14
阅读 6 分钟
3k
言归正传,上周更新了 cim 第一版;没想到反响热烈,最高时上了 GitHub Trending Java 版块的首位,一天收到了 300+ 的 star。

为自己搭建一个分布式 IM(即时通讯) 系统

2019-01-02
阅读 10 分钟
3.2k
老读者应该还记得我在去年国庆节前分享过一篇《设计一个百万级的消息推送系统》;虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码;这么久了是时候把坑填上了。

2018 年度复盘

2018-12-26
阅读 3 分钟
3.1k
前言 看着今年的进度表已经所剩无几,是时候来复盘一把了。 从 16 年初写博客开始到现在我觉得写年终总结的习惯不错,毕竟每次看着去年的 flag 又可以复制粘贴了。 今年我会从工作、技术、身体等方面回顾,这几块也是今年变化最大的几个点。 工作 先说工作吧,这个变化也贯穿了整年。 从今年年初开始,我从上一个技术团...

一次生产 CPU 100% 排查优化实践

2018-12-17
阅读 4 分钟
5.8k
前言 到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题。 还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不过还好是不同的环境互相没有影响。 定位问题 拿到问题后首先去服务器上看了看,发现运行的只有我们的 Java 应用。于是先用 ps ...