如今,公司对软件工程师(主要是高级工程师)最迫切的需求之一,是以迭代和增量的方式提供高质量的代码审查。 这意味着在每次 PR 审查中,开发人员被要求反复提高即将合并代码的质量。 在这篇文章中,我将尝试指出开发人员在进行重构或审查时应牢记的基本原则。 让我们逐个主题来看这些点: # 1. 命名…
场景假设 A表(1000条数据)left join B表(1000条数据)。 嵌套循环(Nested-Loop Join) 极简概括:顾名思义多层循环叠加,由于MySQL条数数量有限,所用for循环而不用while,在MySQL中就是多层for循环。…
在Java中, Lock 和 synchronized 是用于管理多线程环境中对资源的访问,以保证线程安全的两种机制。本文将介绍一下他们的基本原理以及代码中的实际用法示例。 简单介绍一下Lock 当谈到Java中的 Lock 机制,特别是如 ReentrantLock 这样的具体实现,我们可以从几个不同的层面深入理解其原理和工作方式。 Lock…
消息队列(Message Queue)是一种应用程序之间传递数据和信息的通信方法。消息队列中的推拉模式(Push-Pull Model)是指消息的生产者(Producer)将消息发送到队列,然后消费者(Consumer)可以按照推(Push)或拉(Pull)的方式从队列中获取消息。 简单阐述 RocketMQ 推模式(Push Mode)…
在Java中,锁(Locks)是用来控制多线程对共享资源的访问的机制,确保在同一时间内只有一个线程可以访问特定的资源或执行特定的代码段。锁主要用于实现线程的同步。在Java中,有两种类型的锁被广泛讨论:可重入锁(Reentrant Locks)和非可重入锁(Non-reentrant…
1. 为什么要有内存模型? 要想回答这个问题,需要先弄懂传统计算机硬件内存架构,如下图所示: 1.1. 硬件内存架构 (1)CPU 去过机房的同学都知道,一般在大型服务器上会配置多个CPU,每个CPU还会有多个核,这就意味着多个CPU或者多个核可以同时(并发)工作。如果使用Java 起了一个多线程的任务,很有可能每个 CPU…
在当前的AI时代,API(应用程序编程接口)已经成为连接AI能力与传统程序的利器,帮助开发者快速集成AI功能。随着人工智能技术的飞速发展,各种AI模型和服务应运而生,包括自然语言处理、图像识别、语音合成等。API作为桥梁,使得这些强大的AI功能能够被轻松调用,极大地降低了技术门槛,助力开发者在短时间内实现复杂功能。…
前言 线程池是非常重要的工具,如果要成为一个好的工程师,还是得比较好地掌握这个知识,很多线上问题都是因为没有用好线程池导致的。 总览 下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) 接口方法定义。 ExecutorService…
BlockingQueue 开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现。 首先,最基本的来说, BlockingQueue 是一个 先进先出 的队列(Queue),为什么说是阻塞(Blocking)的呢?是因为 BlockingQueue…