4 平头哥的技术博文

尚未进行身份认证

我要认证

不忘初心,方得始终

等级
TA的排名 3k+

Java 多线程启动为什么调用 start() 方法而不是 run() 方法?

多线程在工作中多多少少会用到,我们知道启动多线程调用的是 start() 方法,而不是 run() 方法,你知道原因吗?在探讨这个问题之前,我们先来了解一些多线程的基础知识~线程的状态Java 中,定义了 6 种线程状态,在 Thread 类可以找到:// 为了节约空间,我删除了注释public enum State { NEW,//初始状态 RUNNABLE,//运行状态 BLOCKED,// 阻塞状态 WAITING,//等待状态

2020-05-12 14:58:22

Java 经典面试题:聊一聊 JUC 下的 LinkedBlockingQueue

本文聊一下 JUC 下的 LinkedBlockingQueue 队列,先说说 LinkedBlockingQueue 队列的特点,然后再从源码的角度聊一聊 LinkedBlockingQueue 的主要实现~LinkedBlockingQueue 有以下特点:LinkedBlockingQueue 是阻塞队列,底层是单链表实现的~元素从队列尾进队,从队列头出队,符合FIFO~可以使用 ...

2020-05-08 13:18:02

Java 经典面试题:聊一聊 JUC 下的 CopyOnWriteArrayList

ArrayList 是我们常用的工具类之一,但是在多线程的情况下,ArrayList 作为共享变量时,并不是线程安全的。主要有以下两个原因:1、 ArrayList 自身的 elementData、size、modCount 在进行操作的时候,都没有加锁;2、这些变量没有被 volatile 修饰,在多线程的情况下,对这些变量操作可能会出现值被覆盖的情况;如果我们想在多线程情况下使用 A...

2020-05-07 15:00:08

朋友圈你维护好了吗?这些坏味道,你又占了几种?

朋友圈我们常用的微信功能之一,但是我们大部分人都没有把它维护好,只是单纯的把它当做私人领域,想发表啥就发表啥,总体来说,好像也没有什么毛病。朋友圈并非是私人领域这么简单,朋友圈是围绕你聚集的一个朋友圈子,少则几十人,多则几千人,它有一定的公域性。你发一句负能量爆棚的话,破坏一堆人的心情,你发一段美好的文字,慰藉一群人的心情。而且朋友圈也并非没有价值,只是我们没有重视而已。我隐约记得某位大佬分享...

2020-05-06 14:43:12

基于 XA 事务协议,用代码实现一个二阶段分布式事务

在上篇《漫谈分布式事务的那些解决方案》文章中,我提到了分布式事务的三种通用解决方案,但是没有具体的代码实现,有少小伙伴留言说原理知道了,但是还是不会写代码,那么这篇文章就简单聊一聊基于 XA 事务协议,用代码来实现二阶段提交。在具体的 Demo 之前,先来补充一点 XA 事务的知识:DTP 模型与 XA 规范。DTP 模型与 XA 规范是由 X/Open 维护,也就是现在的 open grou...

2020-04-29 13:46:08

戴上 CAP 这顶帽子,又能和面试官扯皮了

随着微服务和分布式系统的广泛运用,CAP 定理被大家熟悉起来,也成为了分布式系统的三大指标。这篇文章我们就来聊一聊 CAP 定理。CAP 定理1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:Consistency.Availability.Partition Tolerance.Eric Brewer 说,这三个指标不可能同时做到。然后就取首...

2020-04-29 13:39:27

漫谈分布式事务的那些解决方案

事务我们都不陌生,我们常说的事务一般都是指单机事务,即本地事务。那分布式事务是什么?分布式事务就是由多个本地事务组合而成的事务,一般在分布式场景下才会出现。比如电商平台中,我们在购物的时候,下单支付这个过程看上去是一气呵成的,但是背后可能是多个系统的分工合作。订单系统、支付系统、物流系统等。这些系统部署在不同的服务器上,执行的都是各种的事务,对于电商平台来说,这就是分布式事务。本地事务都好解决...

2020-04-21 09:21:33

送给求职者的一份硬核面试指南,你可以不优秀,但是你必须重视!

今年受这波疫情的影响,大环境不太好,金三银四是指望不上了,能有岗位提供就不错了。很多公司都冻结 HC ,并且裁员、倒闭的公司一大堆。这时候有一份稳定的工作挺好的,最起码不要去跟那些 985/211 的研究生、大厂牛人竞争那少的可怜的岗位。如果公司工资正常发放,甚至还能加薪,那就安心干吧,别瞎折腾了。即使你有很多不满意的地方,那就忍着,过段时间会好起来再说。如果非要走,一定不要裸辞。当然存在被裁...

2020-04-14 09:10:53

RocketMQ 源码分析之路由中心(NameServer)

你可能没有看过 RocketMQ 的架构图,没关系,一起来学习一下,RocketMQ 架构图如下:在 RocketMQ 中,有四个角色:Producer:消息的生产者,每个 MQ 中间件都有。Consumer:消息的消费者,每个 MQ 中间件都有。NameServer:RocketMQ 的路由中心,跟 ZooKeeper 差不多。Broker:消息服务器,RocketMQ 的消息全部...

2020-04-10 09:12:42

探秘 RocketMQ 消息持久化机制

我们知道 RocketMQ 是一款高性能、高可靠的分布式消息中间件,高性能和高可靠是很难兼得的。因为要保证高可靠,那么数据就必须持久化到磁盘上,将数据持久化到磁盘,那么可能就不能保证高性能了。RocketMQ 在兼容这两方面做的不错,先从磁盘说起,现代的磁盘都是高性能的,写速度并不一定比网络的数据传输速度慢。比如 SSD 固态硬盘在 M.2 NVMe协议下,顺序写的速度可以达到 1500 MB/...

2020-04-09 09:12:09

除专业知识外,你还需要具备的几种能力

在职场上,我们首先需要过硬的专业知识,它是我们的生存之本。但是人是惰性的,很多时候并不会主动输入,那么大学所学的那些专业知识,其实不足以对抗漫长的职业生活。想要在职场上走的好,除了专业知识之外,我们还需要具备哪些能力?最近在看吴军老师的《谷歌方法论》,在里面找到了相应的答案。除了专业知识之外,我们还需要具备以下三种意识。明确方向和目标意识在职业发展路径中,我们首先需要明确自己的目标,这就像航...

2020-04-05 09:45:52

聊一聊二维码扫描登录原理

扫二维码登录现在比较常见,比如微信、支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录,不搞个扫码登录都不好意思。作为技术人员,不知道您对这背后的实现逻辑是否敢兴趣,反正我是一直都对这背后实现好奇。最近刚好看到一个关于扫码登录原理的视频,于是就整理出来了这篇文章,希望对您有所帮助。本文共三个主题:什么是二维码。移动端基于 token 的认证机制。二维码扫码登录的原理。1、什...

2020-04-01 08:59:24

JUC 中提供的限流利器-Semaphore(信号量)

在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。Semaphore 跟锁(synchronized、Lock)有点相似,不同的地方是,锁同一时刻只允许一个线程访问某一资源,而 Semaphore 则可以控制同一时刻多个线程访问某一资源。Semaphore(信号量)并不是...

2020-03-31 09:27:57

为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?

统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 select count(*) from tSQL 语句来完成。随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什么它会变慢呢?为什么会变慢?想要得到答案就需要知道 MySQL 是如何统计总数量的,先说一个前提吧,count(*) 的具体实现是由存储引擎实现的,也就是说不同的存储引擎实现的方式不一样。标题:为什么...

2020-03-27 09:49:00

工作的本质是解决问题

不知道你是否会经常产生:感觉在公司技术上得不到提升,想跳槽的想法,但是你会发现一个有趣的规律,换了一家新公司,三五个月之后,你又会有同样的想法,它会进入到一个死循环中。任何一件事情,做过两三遍之后,都可以用粘贴复制来解决。对于一家公司来说,公司的业务是比较固定,它并不是为你量身定做的。当你的成长速度可能会优于公司的成长速度时,你需要静下心来沉淀自己,而不是通过跳槽来解决问题。但是在公司技术严重脱...

2020-03-14 10:30:54

使用消息中间件时,如何保证消息仅仅被消费一次?

消息中间件使用广泛,常用来削峰填谷、系统解耦、异步处理。异步处理可能是使用的最多的场景了,比如现在的技术博客网站,都采用积分制,用户发表一篇文章后,可以获取想要的积分,为了提升系统的性能,给用户加积分的操作可以异步处理,并不需要放在同步流程中。我们可以把用户ID,需要增加的积分封装成一条消息投递到消息系统中,异步处理加积分操作,由于这是发生在不同服务器之间,消息有可能投递失败、处理失败等问题,从...

2020-03-12 09:25:54

缓存穿透了怎么办?

在现在互联网架构中,几乎每个互联网项目都会引入缓存系统,比如 Redis、Memcached。来保护下游数据库和提升系统并发量。不管使用哪种缓存系统都有可能遇到缓存穿透的问题。缓存穿透是指在缓存系统中没有查询到数据,而不得不将请求打到数据库上查询的情况。当然缓存系统是不可避免的,少量的缓存穿透对系统也没有损害,不可避免的原因有以下几点:缓存系统的容量是有限的,不可能存储系统所有的数据,那么...

2020-03-10 09:17:37

MySQL 数据库的提速器-写缓存(Change Buffer)

写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操作缓存在 Change Buffer 中,这样就省去了从磁盘中读入这个数据页。将数据页从磁盘读入内存中涉及随机 IO 访问,这也是数据库里面成本最高的操作之一,而利用写缓存(Change Buffe...

2020-02-27 11:34:17

删库了,我们一定要跑路吗?

在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以 binlog 日志就是我们自救的利器。接下来就来开启程序员自救之路。想要自救成功,binlog 这把利器一定要好,在自己之前,我们一定要确定我们有 binlog 这把利器,以下就是确保有 bi...

2020-02-23 17:46:05

做好一件事的三要素

做一件事很难,要做好一件事就更难了,影响的因素太多了。今天就谈一谈我认为要做好一件事情的三个基本要素,供大家参考。1、心态能否做好一件事,心态有着决定性作用。在做事的时候,必须切实行动,不能抱着试一试的心态,如果是这种心态,那么最终都会以失败而告终。试一试的心态更多的是一种借口,在还没有做之前,我们就给自己找好了退路,因为失败了,我只是试一试而已。所以做事情只有两个选择:做或者不做,并不存...

2020-02-19 20:25:54

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力计划专属勋章
    原力计划专属勋章
    2019年《原力计划【第一季】》专属勋章,现已经开启第二季活动啦,小伙伴们快去参加吧
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。