摘要:
多线程在工作中多多少少会用到,我们知道启动 多线程调用的是 start() 方法,而不是 run() 方法,你知道原因吗? 在探讨这个问题之前,我们先来了解一些多线程的基础知识~ 线程的状态 Java 中,定义了 6 种线程状态,在 Thread 类可以找到: 这 6 种状态之间的关联,可以看下面这 阅读全文
摘要:
本文聊一下 JUC 下的 LinkedBlockingQueue 队列,先说说 LinkedBlockingQueue 队列的特点,然后再从源码的角度聊一聊 LinkedBlockingQueue 的主要实现~ LinkedBlockingQueue 有以下特点: LinkedBlockingQue 阅读全文
摘要:
ArrayList 是我们常用的工具类之一,但是在多线程的情况下,ArrayList 作为共享变量时,并不是线程安全的。主要有以下两个原因: 1、 ArrayList 自身的 elementData、size、modCount 在进行操作的时候,都没有加锁; 2、这些变量没有被 volatile 修 阅读全文
摘要:
事务我们都不陌生,我们常说的事务一般都是指单机事务,即本地事务。那分布式事务是什么? 分布式事务就是由多个本地事务组合而成的事务 ,一般在分布式场景下才会出现。 比如电商平台中,我们在购物的时候,下单支付这个过程看上去是一气呵成的,但是背后可能是多个系统的分工合作。订单系统、支付系统、物流系统等。这 阅读全文
摘要:
你可能没有看过 RocketMQ 的架构图,没关系,一起来学习一下,RocketMQ 架构图如下: 在 RocketMQ 中,有四个角色: Producer :消息的生产者,每个 MQ 中间件都有。 Consumer :消息的消费者,每个 MQ 中间件都有。 NameServer :RocketMQ 阅读全文
摘要:
我们知道 RocketMQ 是一款高性能、高可靠的分布式消息中间件,高性能和高可靠是很难兼得的。因为要保证高可靠,那么数据就必须持久化到磁盘上,将数据持久化到磁盘,那么可能就不能保证高性能了。 RocketMQ 在兼容这两方面做的不错,先从磁盘说起, 现代的磁盘都是高性能的,写速度并不一定比网络的数 阅读全文
摘要:
在职场上,我们首先需要过硬的专业知识,它是我们的生存之本。但是人是惰性的,很多时候并不会主动输入,那么大学所学的那些专业知识,其实不足以对抗漫长的职业生活。 想要在职场上走的好,除了专业知识之外,我们还需要具备哪些能力?最近在看吴军老师的《谷歌方法论》,在里面找到了相应的答案。除了专业知识之外,我们 阅读全文
摘要:
扫二维码登录现在比较常见,比如微信、支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录,不搞个扫码登录都不好意思。作为技术人员,不知道您对这背后的实现逻辑是否敢兴趣,反正我是一直都对这背后实现好奇。最近刚好看到一个关于扫码登录原理的视频,于是就整理出来了这篇文章,希望对您有所帮助。 本文共 阅读全文
摘要:
在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。Semaphore 跟锁(synchronized、Lock)有点相似,不同的地方是,锁同一时刻只允许一个线程访问某一资源, 阅读全文
摘要:
统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 SQL 语句来完成。随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什么它会变慢呢? 为什么会变慢?想要得到答案就需要知道 MySQL 是如何统计总数量的,先说一个前提吧, 的具体实现是由存储引擎实现的,也就是说不同 阅读全文