朝花夕拾
文章平均质量分 76
早上掉落的花,傍晚的时候捡起。
安正勋
点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。
展开
-
面试官:什么是死锁?如何解决死锁?写一段死锁的代码吧!
## 什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括:- 系统资源不足;- 程序执行的顺序有问题;- 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,那么死锁出现的可能性就很低;否则,就会因争夺有限的资源而陷入死锁。其次,程序执行的顺序与速度不同,也可能产生死锁。产生死锁的四个必要原创 2020-05-06 20:10:31 · 20209 阅读 · 23 评论 -
面试官:请你谈谈 Java 的类加载过程
刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 类的加载过程吗?这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你 Java 功底的问题。如果你答好了,这是你应该的;如果你没答好,那么对不起,面试官心中已经给了你不及格。今天,小编就 Java 类加载过程这个问题,抛砖引玉,说一下自己的理解,如果有不对的地方,欢迎大家在评论去指正。转载 2020-05-05 19:46:09 · 2811 阅读 · 2 评论 -
来来来,我们聊一聊,为什么不建议使用递归操作?
Rt. 可能大家都或多或少的听见过类似的话或者建议:尽量少使用递归操作,甚至干脆就不要使用递归操作。但大家在听到这句话的时候,是否会产生过疑问,为什么不建议使用递归操作呢?现在,我们就一起聊聊这个话题,看看递归到底会产生什么样的问题。首先,大家思考一道算法题:如何实现二叉树的中序遍历?对于树的遍历,无论是前序、中序还是后序遍历,大家可能下意识的就会想到使用递归操作,为什么呢?因为递归...原创 2020-03-14 14:27:04 · 5944 阅读 · 4 评论 -
二叉树的前序、中序、后序、层序以及蛇形遍历的实现方式
文章目录树节点的定义二叉树的前序遍历递归迭代二叉树的中序遍历递归迭代二叉树的后序遍历递归迭代二叉树的层序遍历递归迭代二叉树的蛇形遍历递归迭代总结树节点的定义首先,给出树节点的定义,方便我们理解下面的算法:public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; }}原创 2020-05-16 19:01:53 · 1399 阅读 · 0 评论 -
Spring IOC 容器源码分析:循环依赖的解决方法
Hello everybody,如题,这是一个招聘通知:招聘邮箱:guobinhit@qq.com福利情况:NO1. 带薪假期,国外团建,绩效奖金;NO2. 司龄满足7年发放足金纪念金牌,工龄满7年有无时限自由假;NO3. 每日健身名额,每周两次社团活动,包括羽毛球、篮球、足球和瑜伽。易宝支付是中国支付行业的开创者和领导者,也是互联网金融(ITFIN)和移动互联领军企业。易宝...转载 2020-04-30 16:53:10 · 2376 阅读 · 7 评论 -
带你了解 Kubernetes 的二三事儿
文章目录一、Docker 的管理痛点二、什么是 K8s ?三、云架构 & 云原生云和 K8s 是什么关系常见几类云架构云原生四、K8s 架构原理K8s 架构Master 节点Node 节点五、K8s 核心组件K8s 组件Pod 是什么?Pod 到底用来干什么?Web 服务集群如何实现?Pod 底层网络,数据存储是如何进行的?ReplicaSet 副本控制器Deployment 部署对象MySQL 使用容器化部署,存在什么样的问题?StatefulSet六、K8s 的服务注册与发现Pod 的结构是怎样转载 2020-07-24 08:33:04 · 982 阅读 · 0 评论 -
使用 Redis 统计网站 UV 的方法
文章目录前言思路HyperLogLog使用 Redis 命令操作使用 Java 代码操作HyperLogLog 使用原理及特点使用 Java 代码实现 HyperLogLog小结前言网页 UV(Unique Visitor)就是指网站的独立用户访问量 Unique Visitor。即相同用户的多次访问需要去重。思路一想到 UV 去重,我猜大家都想到了 Set 集合类。使用Set集合是一个不错的办法,Set里面存储用户的id。每一个用户访问页面的时候,我们直接把id存入Set,最终获取Set的si转载 2020-06-16 07:06:32 · 1746 阅读 · 0 评论 -
详述 Redis 选择单线程模型的原因以及 I/O 多路复用
文章目录几种 I/O 模型Blocking I/OI/O 多路复用Reactor 设计模式I/O 多路复用模块封装 select 函数封装 epoll 函数子模块的选择总结最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,转载 2020-07-29 23:00:04 · 1623 阅读 · 0 评论 -
基于 Redis 的分布式锁实现
文章目录关于分布式锁基于数据库实现分布式锁基于数据库表的增删基于数据库排他锁基于数据库锁的优缺点基于 Zookeeper 实现分布式锁基于缓存实现分布式锁基于 Redis 的分布式锁实现SETNX存在死锁的问题一种实现方式获取锁释放锁总结关于分布式锁很久之前有讲过并发编程中的锁「并发编程的锁机制:synchronized和lock」。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需...转载 2020-05-07 19:44:04 · 722 阅读 · 0 评论 -
详述 Kafka 基本原理
1 简介Apache Kafka 是分布式发布-订阅消息系统。它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。2 Kafka 架构它的架构包括以下组件:话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。生产者(Pr转载 2017-07-24 16:28:36 · 2329 阅读 · 0 评论 -
面试题:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
文章目录面试题面试官心理分析面试题剖析为什么使用消息队列?消息队列有什么优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?面试题为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。转载 2020-07-10 22:48:12 · 3895 阅读 · 2 评论 -
Go 语言常见的编程面试题
记录 Go 语言常见的编程面试题。原创 2016-12-06 21:07:55 · 6177 阅读 · 1 评论 -
详述 JDK1.7 中 HashMap 会发生死链的原因
HashMap死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通过图解的方式,带大家彻底理解死循环的原因。转载 2016-12-01 08:55:07 · 8186 阅读 · 0 评论 -
详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因
本文主要分析为什么 TIME_WAIT 状态的持续时间是 2MSL 而不是 1MSL,3MSL 或其它的时长,而不会详细描述为什么需要 TIME_WAIT 状态。转载 2020-12-07 14:47:37 · 1777 阅读 · 0 评论 -
微博关系服务与 Redis 的故事
新浪微博的工程师们曾经在多个公开场合都讲到过,微博平台当前在使用并维护着可能是世界上最大的 Redis 集群,其中最大的一个业务,单个业务使用了超过 10T 的内存,这里说的就是微博关系服务。...转载 2016-11-29 13:32:34 · 3357 阅读 · 0 评论 -
MySQL 索引失效的十大问题小结
最近生产爆出一条慢 SQL,原因是用了`or`和`!=`,导致索引失效。于是,总结了索引失效的十大杂症,希望对大家有帮助,加油。转载 2016-12-02 02:00:46 · 2381 阅读 · 1 评论 -
详述:一条查询 SQL 语句的执行过程
平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询 SQL,返回一个结果集,却不知道这条语句在 MySQL 内部是如何执行的,接下来我们就来简单的拆解一下 MySQL,看看 MySQL 是由哪些“零件”组成的,在这个过程中逐步的揭开 MySQL 的面纱,对 MySQL 有个深入的理解。这样在我们以后遇到 MySQL 的一些异常或者问题的时候,就可以快速定位问题并解决问题。转载 2016-11-16 10:10:13 · 2382 阅读 · 0 评论 -
面试官,请不要再问我三次握手和四次挥手了,好吗?
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就...转载 2020-03-14 09:06:42 · 1374 阅读 · 1 评论 -
分库分表?如何做到永不迁移数据和避免热点?
中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。转载 2020-04-28 10:21:15 · 1064 阅读 · 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 · 2697 阅读 · 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 · 1998 阅读 · 0 评论 -
Kafka:高吞吐量、消息精确一次语义以及保证消息顺序
文章目录前言高吞吐量顺序读写Page Cache零拷贝分区分段+索引批量读写批量压缩消息精确一次语义消息系统语义概述必须被处理的故障Apache Kafka 中的精确一次语义幂等性:每个分区中精确一次且有序事务:跨分区原子写入真实案例:Apache Kafka 中的精确一次流处理保证消息顺序前言Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hado原创 2020-06-14 16:43:32 · 3273 阅读 · 0 评论 -
使用 VisualVM 和 JProfiler 进行性能分析及调优
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,原创 2020-06-19 22:15:40 · 7691 阅读 · 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 · 2780 阅读 · 5 评论 -
带你详细了解,一致性哈希算法的实现原理
一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过 Memcached 缓存数据库的人都知道,Memcached 服务器端本身不提供分布式 Cache 的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:转载 2020-06-25 09:44:20 · 4378 阅读 · 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 · 2643 阅读 · 1 评论 -
详述 Spring 中 Bean 的作用域、事务的隔离级别以及传播行为
详述 Spring 中 Bean 的作用域以及事务传播级别原创 2020-08-26 08:17:19 · 2271 阅读 · 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 · 1559 阅读 · 4 评论 -
深入理解 JVM 垃圾回收机制及其实现原理
对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java 语言的可移植性正是建立在 JVM 的基础上。任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(`.class`)就可以在该平台上运行。这就是原创 2020-05-03 13:38:29 · 401936 阅读 · 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 · 823 阅读 · 1 评论 -
深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
什么是事务?事务(`Transaction`),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如`begin transaction`和`end transaction`语句(或函数调用)来界定。事务由事务开始(`begin transaction`)和事务结束(`end transaction`)之间执行的全部操作组成。原创 2020-05-10 21:31:48 · 134461 阅读 · 22 评论 -
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
文章目录表空间在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。表空间首先,来了解一下 MySQL 的表空间。中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:参考资料:MySQL存储引擎MyISAM和InnoDB底原创 2020-05-22 08:04:11 · 4151 阅读 · 0 评论 -
详述 synchronized 和 volatile 的实现原理以及两者的区别
版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchronized 和 volatile 的区别线程安全在并发编程中,线程安全是我们最需要关心的问题,而导致并发问题的原因,主要是:存在共享数据;并且,存在多条线程共同操作共享数据。因此,为了解决这个问题,我.原创 2020-05-24 19:22:31 · 2767 阅读 · 0 评论 -
使用 Golang 实现简易的令牌桶算法
在网络中传输数据的时候时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。原创 2022-04-24 20:31:49 · 2488 阅读 · 0 评论 -
浅析 Golang 垃圾回收机制
Google 搜索 Golang GC 排名靠前的文章都讲的不错,从设计到实现,从演进到源码,一应俱全。但是庞杂的信息会给人一种恐惧感,让人望而却步。本文尝试使用较为简单易懂的语言和图像,讲解 Golang 的垃圾回收机制。转载 2016-12-21 19:40:42 · 9817 阅读 · 5 评论 -
超详细的 DNS 协议解析
为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的。转载 2017-05-14 20:47:58 · 9919 阅读 · 6 评论 -
测试题:64 匹马,8 个赛道,最少多少次比赛找出最快的 4 匹马?
64 匹马,8 个赛道,最少几场比赛找出最快的4匹马?转载 2017-07-25 21:10:18 · 22067 阅读 · 3 评论 -
如何正确使用 Go 语言中的 Context 对象?
context.Context是Go中定义的一个接口类型,从1.7版本中开始引入。其主要作用是在一次请求经过的所有协程或函数间传递取消信号及共享数据,以达到父协程对子协程的管理和控制的目的。转载 2016-12-20 15:15:59 · 9053 阅读 · 0 评论