自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

-

  • 博客(135)
  • 收藏
  • 关注

原创 公平锁和非公平锁,为什么要“非公平”?

首先,我们来看下什么是公平锁和非公平锁,公平锁指的是按照线程请求的顺序,来分配锁;而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队。但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而是仅仅“在合适的时机”插队。那么什么时候是合适的时机呢?假设当前线程在请求获取锁的时候,恰巧前一个持有锁的线程释放了这把锁,那么当前申请锁的线程就可以不顾已经等待的线程而选择立刻插队。但是如果当前线程请求的时候,前一个线程并没有在那一时刻释放锁,那么当前线程还是一样会进入等待队列。

2024-03-25 22:56:55 746

原创 锁的7大分类

首先会了解锁的整体概念,了解锁究竟有哪些分类的标准。在后面的文章中会对重要的锁进行详细的介绍。

2024-03-25 22:26:50 688

原创 线程池实现“线程复用”的原理

学习线程复用的原理,以及对线程池的 execute 这个非常重要的方法进行源码解析。

2024-03-21 22:17:53 1168

原创 为什么使用多线程可能会带来性能问题

多线程会带来的线程安全问题,但对于多线程而言,它不仅可能会带来线程安全问题,还有可能会带来性能问题,也许你会奇怪,我们使用多线程的最大目的不就是为了提高性能吗?让多个线程同时工作,加快程序运行速度,为什么反而会带来性能问题呢?这是因为单线程程序是独立工作的,不需要与其他线程进行交互,但多线程之间则需要调度以及合作,调度与合作就会带来性能开销从而产生性能问题。首先,我们来了解究竟什么是性能问题?其实性能问题有许多的表现形式,比如服务器的响应慢、吞吐量低、内存占用过多就属于性能问题。

2024-03-21 21:15:52 455

原创 那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题,在这里总结了四中场景。

2024-03-21 21:14:47 443

原创 一共有哪 3 类线程安全问题

然后假设等线程 2 对 i 进行 +1 操作后,又切换到线程 1,让线程 1 完成未完成的操作,即将 i+1 的结果 2 保存下来,然后又切换到线程 2 完成 i=2 的保存操作,虽然两个线程都执行了对 i 进行 +1 的操作,但结果却最终保存了 i=2 的结果,而不是我们期望的 i=3,这样就发生了线程安全问题,导致了数据结果错误,这也是最典型的线程安全问题,i+1的操作不是原子性的操作。第二种活跃性问题是活锁,活锁与死锁非常相似,也是程序一直等不到结果,但对比于死锁,活锁是活的,什么意思呢?

2024-03-20 21:49:07 858

原创 生产者消费者模式

而此时,如果生产者生产了一个数据,便会唤醒两个消费者线程,而两个线程中只有一个线程可以拿到锁,并执行 queue.remove 操作,另外一个线程因为没有拿到锁而卡在被唤醒的地方,而第一个线程执行完操作后会在 finally 中通过 unlock 解锁,而此时第二个线程便可以拿到被第一个线程释放的锁,继续执行操作,也会去调用 queue.remove 操作,然而这个时候队列已经为空了,所以会抛出。生产者负责生产数据,消费者负责处理数据,通过合理的协作,可以实现高效的数据处理。如何才能让大家更好地配合呢?

2024-03-20 20:57:29 1129

原创 wait/notify/notifyAll 方法的使用注意事项

我们来看第二个问题,为什么 wait/notify/notifyAll 方法被定义在 Object 类中?而 sleep 方法定义在 Thread 类中?因为 Java 中每个对象都有一把称之为 monitor 监视器的锁,由于每个对象都可以上锁,这就要求在对象头中有一个用来保存锁信息的位置。这个锁是对象级别的,而非线程级别的,wait/notify/notifyAll 也都是锁级别的操作,它们的锁属于对象,所以把它们定义在 Object 类中是最合适,因为 Object 类是所有对象的父类。

2024-03-17 12:18:44 917

原创 线程是如何在 6 种状态之间转换的

因为唤醒 Waiting 线程的线程如果调用 notify() 或 notifyAll(),要求必须首先持有该 monitor 锁,所以处于 Waiting 状态的线程被唤醒时拿不到该锁,就会进入 Blocked 状态,直到执行了 notify()/notifyAll() 的唤醒它的线程执行完毕并释放 monitor 锁,才可能轮到它去抢夺这把锁,如果它能抢到,就会从 Blocked 状态回到 Runnable 状态。下面我们逐个介绍线程的 6 种状态,如图所示,首先来看下左上角的 New 状态。

2024-03-17 11:30:30 948

原创 使用了并发工具类库,线程安全就高枕无忧了吗?

今天想和大家聊聊使用并发工具类库相关的话题。在代码审核讨论的时候,我们有时会听到有关线程安全和并发工具的一些片面的观点和结论,比如“把 HashMap 改为 ConcurrentHashMap,就可以解决并发问题了呀”“要不我们试试无锁的 CopyOnWriteArrayList 吧,性能更好”。事实上,这些说法都不太准确。的确,为了方便开发者进行多线程编程,现代编程语言会提供各种并发工具类。

2024-03-10 21:33:01 738

原创 浅谈ForkJoinPool:入门、使用、原理

本文将从一个简单的例子出发,与大家解释为啥要有 ForkJoinPool 的存在。

2024-03-10 19:56:23 1049

原创 Java实现异步回调

设想一个情景,A是处理业务的一个步骤,A需要解决一个问题,这时候A可以问B,让B来告诉A答案,这期间,A可以继续做自己的事情,而不用因为B做的事而阻塞。于是,我们想到给B设置一个线程,让B去处理耗时的操作,然后处理完之后把结果告诉A。所以这个问题的要点就在于B处理完之后如何把结果告诉A。

2024-02-03 20:19:42 1236

原创 如何在 Mac 上重置网络设置

如果您经常使用 VPN,则您的系统上的网络设置可能会被弄乱。 Internet 设置可能非常敏感,因为即使是最轻微的更改或调整也可能导致与 Internet 的连接中断。

2024-02-03 20:12:32 2922

原创 M1 Mac docker手动编译rocketmq

Mac M1 docker手动编译RocketMQ

2023-03-26 12:43:28 829 9

原创 分布式锁有哪些应用场景和实现

这一课时分享了分布式锁的应用场景和几种实现,包括分布式锁的概念,使用数据库方式、缓存和 ZooKeeper 实现分布式锁等。

2023-03-15 23:23:41 521

转载 状态机在马蜂窝机票订单交易系统中的应用与优化实践

状态机在马蜂窝机票订单交易系统中的应用与优化实践。

2023-03-12 00:08:34 402

原创 深入浅出 ZooKeeper

深入浅出 ZooKeeper

2023-03-05 23:17:05 199

原创 Dubbo 中 Zookeeper 注册中心原理分析

Dubbo中Zookeeper注册中心原理分析

2023-03-05 22:53:37 372 3

原创 “消息驱动、事件驱动、流 ”的消息模型

事件驱动 EDA 作为 Gartner 预测的十大技术趋势之一, EventBridge 作为下一代消息中间件,也是目前的重点方向之一。

2023-02-17 17:14:51 687

原创 AMQP 0-9-1 模型解释

官方文档链接:https://www.rabbitmq.com/tutorials/amqp-concepts.html。

2023-01-29 21:35:32 600

原创 Java中「与运算,或运算,异或运算,取反运算。」

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。即 :参加运算的两个对象只要有一个为1,其值为1。即:两位同时为“1”,结果才为“1”,否则为0。

2023-01-29 10:37:21 2468

原创 事务隔离:为什么你改了我还看不见?

事务隔离:为什么你改了我还看不见?

2023-01-09 15:57:43 333

原创 Transactional注解使用不当引起的线上问题

@Transactional没用好,事故跑不了!

2023-01-05 10:54:18 385

原创 登录业务的演变

单机服务机的登录业务和分布式集群下的登录业务

2022-10-06 16:19:10 542 1

原创 TCP的三次握手与四次挥手

TCP的三次握手和四次挥手的分析

2022-09-29 15:10:35 772 1

原创 面试中如何回答缓存穿透、击穿、雪崩等问题

上一篇,我们一起学习了Redis缓存数据库的原理(比如线程模型、数据持久化、以及数据复制)。这一篇,我们从应用案例入手,来了解经常遇到的缓存设计中存在的问题,比如缓存雪崩、缓存并发、缓存穿透等。

2022-09-22 22:52:17 622

原创 应对面试你要掌握Redis哪些原理

Redis核心问题:线程模型、数据不丢失(数据持久化)、以及高可用(数据复制)

2022-09-22 14:17:59 163

原创 什么是死锁、定位和修复

介绍什么是死锁、死锁产生的条件、死锁的定位和死锁的预防及修复

2022-09-19 14:16:05 405

原创 进程间通信都有哪些方法

在上一讲中,我们提到过进程间通信三种方式,凡是面试官问“什么情况下”的时候,面试官实际想听的是你经过理解,整理得到的认知。回答应该是概括的、简要的。而不是真的去列举每一种 case。另外,面试官考察进程间通信,有一个非常重要的意义——进程间通信是架构复杂系统的基石。复杂系统往往是分成各种子系统、子模块、微服务等等,按照 `Unix` 的设计哲学,系统的每个部分应该是稳定、独立、简单有效,而且强大的。系统本身各个模块就像人的器官,可以协同工作。而这个协同的枢纽,就是我们今天的主题——进程间通信

2022-09-07 18:16:40 278

原创 HTTP(四)HTTP请求Get和Post的区别

HTTP请求Get和Post的区别

2022-09-06 23:06:42 172

原创 HTTP(二)HTTP消息结构

HTTP请求报文和HTTP响应报文

2022-09-06 22:05:11 934

原创 HTTP(三)HTTP常见的状态码

HTTP常见的状态码

2022-09-06 19:56:33 658

原创 HTTP(一)HTTP响应的过程

你是不是很好奇,当你在浏览器中输入网址后,到底发生了什么事情?你想要的内容是如何展现出来的?

2022-09-06 16:06:34 1102

原创 重学计算机网络(一)计算机网络基础

王道考研计算机网络的基础知识部分。概念、组成、功能、分类、网络的体系结构等。

2022-09-01 23:00:52 174

原创 主存和内存的区别

主存和内存的区别、磁盘的B+树的设计。

2022-09-01 22:56:59 7110

原创 JUC笔记(三)多线程的核心

在前面,我们了解了多线程的底层运作机制,我们终于知道,原来多线程环境下存在着如此之多的问题。在JDK5之前,我们只能选择关键字来实现锁,而JDK5之后,由于关键字得到了升级(具体功能就是上一章所描述的),所以并发框架包便出现了,相比传统的关键字,我们对于锁的实现,有了更多的选择。那么,从这章开始,就让我们来感受一下,JUC为我们带来了什么。LockSupport的用法及原理 - 简书 (jianshu.com)在JDK 5之后,并发包中新增了接口(以及相关实现类)用来实现锁功能,接口提供了与关键字类似的同步

2022-09-01 22:29:32 134

原创 重学操作系统(二)进程管理

程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,,实质上是撤销进程实体中的PCB。注意:PCB是进程存在的唯一标志!进程是程序一次的执行过程。进程是一个程序及其数据在处理机(CPU)上顺序执行时所发生的活动。进程时具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。所有的定义,就是都强调进程的动态性。

2022-08-22 20:58:19 312

原创 重学操作系统(一)操作系统概述

操作系统(Operating System , OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地的组织调度计算机软件的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,他是计算机系统中最基本的系统软件。其实在之前的章节,有涉及到系统调用。操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

2022-08-21 16:57:51 511

原创 MySQL场景分析:查询仅洗过西服和运动鞋的手机号

需求:需要查询仅洗过西服和运动鞋的手机号。

2022-08-17 13:43:33 157

原创 消息队列的架构设计面试题

幂等」是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。也就是说,请求多次执行和一次执行的结果或者影响是一样的。

2022-07-31 15:31:23 302

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除