朝花夕拾
文章平均质量分 74
早上掉落的花,傍晚的时候捡起。
CG国斌
点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。
展开
-
Go 语言常见的编程面试题
记录 Go 语言常见的编程面试题。原创 2016-12-06 21:07:55 · 6140 阅读 · 1 评论 -
详述 JDK1.7 中 HashMap 会发生死链的原因
HashMap死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通过图解的方式,带大家彻底理解死循环的原因。转载 2016-12-01 08:55:07 · 8067 阅读 · 0 评论 -
详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因
本文主要分析为什么 TIME_WAIT 状态的持续时间是 2MSL 而不是 1MSL,3MSL 或其它的时长,而不会详细描述为什么需要 TIME_WAIT 状态。转载 2020-12-07 14:47:37 · 1577 阅读 · 0 评论 -
微博关系服务与 Redis 的故事
新浪微博的工程师们曾经在多个公开场合都讲到过,微博平台当前在使用并维护着可能是世界上最大的 Redis 集群,其中最大的一个业务,单个业务使用了超过 10T 的内存,这里说的就是微博关系服务。...转载 2016-11-29 13:32:34 · 3318 阅读 · 0 评论 -
MySQL 索引失效的十大问题小结
最近生产爆出一条慢 SQL,原因是用了`or`和`!=`,导致索引失效。于是,总结了索引失效的十大杂症,希望对大家有帮助,加油。转载 2016-12-02 02:00:46 · 2341 阅读 · 1 评论 -
详述:一条查询 SQL 语句的执行过程
平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询 SQL,返回一个结果集,却不知道这条语句在 MySQL 内部是如何执行的,接下来我们就来简单的拆解一下 MySQL,看看 MySQL 是由哪些“零件”组成的,在这个过程中逐步的揭开 MySQL 的面纱,对 MySQL 有个深入的理解。这样在我们以后遇到 MySQL 的一些异常或者问题的时候,就可以快速定位问题并解决问题。转载 2016-11-16 10:10:13 · 2342 阅读 · 0 评论 -
面试官,请不要再问我三次握手和四次挥手了,好吗?
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就...转载 2020-03-14 09:06:42 · 1336 阅读 · 1 评论 -
分库分表?如何做到永不迁移数据和避免热点?
中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。转载 2020-04-28 10:21:15 · 997 阅读 · 0 评论 -
详述 ThreadLocal 的实现原理及其使用方法
文章目录实现原理ThreadLocal 的 get 方法ThreadLocal 的 set 方法ThreadLocal 的特性使用方法Threadlocal是一个线程内部的存储类,可以在指定线程内存储数据,并且该数据只有指定线程能够获取到,其官方解释如下:/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thre原创 2020-05-30 18:21:27 · 2631 阅读 · 1 评论 -
详述 Java 并发编程中 CAS 以及 AQS 的实现原理
CAS什么是 CAS?CAS 的应用CAS 的缺点AQS什么是 AQS?AQS 的应用AQS 实现原理浅析CAS什么是 CAS?CAS(Compare And Swap),即比较并交换,是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS 操作包含三个操作数——内存位置V、预期原值A和新值B。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值;否则,处理器不做任何操作。无论哪种情况,它都会在 CAS .原创 2020-06-07 10:08:11 · 1826 阅读 · 0 评论 -
Kafka:高吞吐量、消息精确一次语义以及保证消息顺序
文章目录前言高吞吐量顺序读写Page Cache零拷贝分区分段+索引批量读写批量压缩消息精确一次语义消息系统语义概述必须被处理的故障Apache Kafka 中的精确一次语义幂等性:每个分区中精确一次且有序事务:跨分区原子写入真实案例:Apache Kafka 中的精确一次流处理保证消息顺序前言Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hado原创 2020-06-14 16:43:32 · 3061 阅读 · 0 评论 -
使用 VisualVM 和 JProfiler 进行性能分析及调优
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,原创 2020-06-19 22:15:40 · 7016 阅读 · 1 评论 -
由阿里巴巴 Java 开发规约 HashMap 条目引发的故事
大热的《[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c/)》中有提到:- 【推荐】集合初始化时,指定集合初始值大小。说明:`HashMap`使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(`16`)即可:```java public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); }```转载 2020-06-24 07:24:33 · 2730 阅读 · 5 评论 -
带你详细了解,一致性哈希算法的实现原理
一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过 Memcached 缓存数据库的人都知道,Memcached 服务器端本身不提供分布式 Cache 的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:转载 2020-06-25 09:44:20 · 4324 阅读 · 0 评论 -
详述 Java NIO 以及 Socket 处理粘包和断包方法
NIO 是 New I/O 的简称,是 JDK 1.4 新增的功能,之所以称其为 New I/O,原因在于它相对于之前的 I/O 类库是新增的。由于之前老的 I/O 类库是阻塞 I/O,New I/O 类库的目标就是要让 Java 支持非阻塞 I/O,所以也有很多人喜欢称其为 Non-block I/O,即非阻塞 I/O。NIO 的文件读写设计颠覆了传统 IO 的设计,采用『通道』+『缓存区』使得新式的 I/O 操作直接面向缓存区。NIO 弥补了原来同步阻塞 I/O 的不足,它在标准 Java 代码中提原创 2020-07-04 12:23:42 · 2326 阅读 · 1 评论 -
详述 Spring 中 Bean 的作用域、事务的隔离级别以及传播行为
详述 Spring 中 Bean 的作用域以及事务传播级别原创 2020-08-26 08:17:19 · 1944 阅读 · 0 评论 -
深入理解 Java 线程池的实现原理
文章目录1 线程状态2 线程池2.1 线程池的作用2.2 线程池的实现1 线程状态既然要说线程,我们就先来了解一下线程的几种状态: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;...原创 2021-01-08 19:46:46 · 1377 阅读 · 4 评论 -
深入理解 JVM 垃圾回收机制及其实现原理
对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java 语言的可移植性正是建立在 JVM 的基础上。任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(`.class`)就可以在该平台上运行。这就是原创 2020-05-03 13:38:29 · 399314 阅读 · 167 评论 -
不可不说的 Java “锁”事
文章目录前言1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语前言Java 提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自 JDK 8 和 Ne...转载 2020-05-08 14:36:14 · 781 阅读 · 1 评论 -
深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
什么是事务?事务(`Transaction`),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如`begin transaction`和`end transaction`语句(或函数调用)来界定。事务由事务开始(`begin transaction`)和事务结束(`end transaction`)之间执行的全部操作组成。原创 2020-05-10 21:31:48 · 132973 阅读 · 22 评论 -
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
文章目录表空间在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。表空间首先,来了解一下 MySQL 的表空间。中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:参考资料:MySQL存储引擎MyISAM和InnoDB底原创 2020-05-22 08:04:11 · 3946 阅读 · 0 评论 -
详述 synchronized 和 volatile 的实现原理以及两者的区别
版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchronized 和 volatile 的区别线程安全在并发编程中,线程安全是我们最需要关心的问题,而导致并发问题的原因,主要是:存在共享数据;并且,存在多条线程共同操作共享数据。因此,为了解决这个问题,我.原创 2020-05-24 19:22:31 · 2657 阅读 · 0 评论 -
使用 Golang 实现简易的令牌桶算法
在网络中传输数据的时候时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。原创 2022-04-24 20:31:49 · 2218 阅读 · 0 评论 -
浅析 Golang 垃圾回收机制
Google 搜索 Golang GC 排名靠前的文章都讲的不错,从设计到实现,从演进到源码,一应俱全。但是庞杂的信息会给人一种恐惧感,让人望而却步。本文尝试使用较为简单易懂的语言和图像,讲解 Golang 的垃圾回收机制。转载 2016-12-21 19:40:42 · 9368 阅读 · 5 评论 -
超详细的 DNS 协议解析
为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的。转载 2017-05-14 20:47:58 · 9477 阅读 · 6 评论 -
测试题:64 匹马,8 个赛道,最少多少次比赛找出最快的 4 匹马?
博主说:常识性概念,对 IaaS、PaaS 和 SaaS 还有些迷糊的童鞋,可以通过此文掌握之。正文越来越多的软件,开始采用云服务。云服务只是一个统称,可以分成三大类。IaaS:基础设施服务,Infrastructure-as-a-servicePaaS:平台服务,Platform-as-a-serviceSaaS:软件服务,Software-as-a-service它们有什么区别呢?IB转载 2017-07-25 21:10:18 · 21256 阅读 · 3 评论 -
如何正确使用 Go 语言中的 Context 对象?
context.Context是Go中定义的一个接口类型,从1.7版本中开始引入。其主要作用是在一次请求经过的所有协程或函数间传递取消信号及共享数据,以达到父协程对子协程的管理和控制的目的。转载 2016-12-20 15:15:59 · 8973 阅读 · 0 评论