面试问:Kafka 为什么速度那么快?
Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。 即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理…
想让代码更优雅?Mybatis 类型处理器了解一下!
本篇博客主要讲解在MyBatis中如何使用类型处理器。 1. 明确需求 这种硬编码的方式不仅看起来不友好,而且不利于后期维护,如果维护的程序员脾气不好,还会骂你,哈哈。 所以我们的需求就是,拒绝硬编码,使用友好的编码方式来校验enabled字段的值是否有效。 2. 使用MyBa…
为什么线程协作的 wait() 方法需要写在循环里,你有想过吗?
那么问题是为啥这里是 while 而不是 if 呢?这个问题我最开始也想了很久,按理来说已经在 synchronized 块里面了嘛,就不需要了。这个也是我前面一直是这么认为的,直到最近看了一个 Stackoverflow 上的问题才对这个问题有了比较深入的理解。 试想我们要试…
看了同事的代码,我忍不住写了这份代码指南
写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。 WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这…
干掉 "final"
Java 语言的每个关键字都设计的很巧妙,金雕玉琢,只有深度钻研其中,才知其中懊悔,本文带领大家一起深入理解 Java 内存模型之 final。 与锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问。对于 final 域,编译器和处理器要遵守两个重排…
日志规范多重要,这篇文章告诉你!
在开发过程中,写好业务代码的重要性不言而喻,毕竟这是跟程序功能最密切相关的工作,程序出 BUG,一般就是业务代码写得有问题了。 我们可以通过日志记录程序的执行流程、运行状态、关键指标⋯⋯有了这些日志,才能更好地进行调试跟踪。 有BUG得排查问题,而定位问题最高效的方式,就是日志…
聊聊API网关的作用
在这篇文章中将我们一起来探讨当前的API网关的作用。 API网关我的分析中会用到以下三种场景。 Open API。 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供,最好的例子就是淘宝开放平台、腾讯公司的QQ开发平台、微信开放平台。 Open AP…
RabbitMQ和Kafka的比较
作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。 不同的场…
这个 Spring 循环依赖的坑,今天让我遇见了
1. 前言 这两天工作遇到了一个挺有意思的Spring循环依赖的问题,但是这个和以往遇到的循环依赖问题都不太一样,隐藏的相当隐蔽,网络上也很少看到有其他人遇到类似的问题。这里权且称他非典型Spring循环依赖问题。但是我相信我肯定不是第一个踩这个坑的,也一定不是最后一个,可能只…
盘点 Redis 常用的 10 个小技巧
Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到 成为内存数据存储行业的标准,Redis已经走过了很长的一段路。 随之而来的一系列最佳实践,使得大多数人可以正确地使用 Redis。 下面我们将探索正确使用 Redis 的10个技巧。 Ok…
太赞了,IDEA 2020 要本土化,真的是全中文了!
上个月 JetBrains 发布了 IntelliJ 平台 2020 年路线图,现在作为 2020 年规划中的另一部分,JetBrains 又发布了基于 IntelliJ 的 IDE 2020 年的功能路线图。前者主要集中在平台的底层功能上,而后者聚焦于更高级别的功能,这些功能…
Hutool-贼好用的Java工具类库
Hutool是Hu + tool的自造词,前者致敬我的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。 Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”…
一文带你搞懂RPC核心原理
屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法。 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。 编解码、序列化和反序列、请求协议、桩生成(动态代理、反射执行)。 调用服务异常时,要考虑降级、重试等措施。 核心的服务不能强依赖非核心的服务,避免核心服务因为非核…
代码审查常见问题,建议收藏
最近某宝弹窗事件导致其APP被大量用户删除,影响极其恶劣。我在想,如果他们的内部代码审查更加严格一点,少走形式,就能将隐患扼杀在摇篮里了。基于此,我们部门专门成立了由小组长和核心成员组成的代码评审组,将以前的代码评审模式进行了一些优化,加强了管控。我在以往代码评审过程中发现了一…
为什么很多SpringBoot开发者放弃了Tomcat
在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于…
一条简单的更新语句,MySQL是如何加锁的?
那这条语句呢?其实这其中包含太多知识点了。要回答这两个问题,首先需要了解一些知识。 在MySQL默认存储引擎InnoDB中,实现的是基于多版本的并发控制协议——MVCC(Multi-Version Concurrency Control)(注:与MVVC相对的,是基于锁的并发控…
华为云服务器免费用?薅羊毛要趁早!技术人福利来了!
今天给各位老铁来一波福利,华为云开年采购,薅羊毛来了。 而在开年之际,采购可以享受到更多优惠,而且相对于其他云来说华为云价格与服务更具优势. 跟华为云的合作达成以后,我们积极沟通为老铁们争取到了第一个福利,就是百万华为云代金券。 答案是理念。 华为云强调上不碰应用,下不碰数据,…
主导世界的10 大牛逼算法!
尝试解释一下算法是什么,又是哪些算法正在主导我们的世界。 简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E. Leiserson 《算法导论第 3 版》) 可以这样理解,算法是用来…
分布式系统之存储系统
分布式数据库,通过表格来存储结构化数据,方便查找。常用的分布式数据库有MySQLSharding、MicrosoftSQLAzure、GoogleSpanner、AlibabaOceanBase等。 分布式键值系统,通过键值对来存储半结构化数据。常用的分布式键值系统有Redis…
编写Spring MVC控制器的14个技巧
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。 这样就完成了典型的请求-响应周期的往返。 这是创建可…