SunAlwaysOnline
码龄6年
  • 2,018,631
    被访问
  • 291
    原创
  • 607
    排名
  • 59,417
    粉丝
关注
提问 私信

个人简介:开始工作的第3年!

  • 加入CSDN时间: 2016-01-01
博客简介:

阳阳的博客

博客描述:
热爱技术,享受生活
查看详细资料
  • 8
    领奖
    总分 5,000 当月 193
个人成就
  • Java领域优质创作者
  • 博客专家认证
  • 获得1,786次点赞
  • 内容获得645次评论
  • 获得5,219次收藏
  • GitHub 获得228Stars
创作历程
  • 3篇
    2022年
  • 40篇
    2021年
  • 110篇
    2020年
  • 60篇
    2019年
  • 110篇
    2018年
  • 1篇
    2017年
成就勋章
TA的专栏
  • JAVA
    167篇
  • JVM
    26篇
  • 多线程
    35篇
  • Java8特性
    8篇
  • 源码分析
    16篇
  • SpringBoot实践
    29篇
  • LeetCode
    41篇
  • 分布式
    12篇
  • MySQL
    29篇
  • Docker
    13篇
  • K8S
    15篇
  • 设计模式
    8篇
  • Redis
    13篇
  • Zookeeper
    2篇
  • RabbitMQ
    3篇
  • ElasticSearch
    1篇
  • MyBatis
    5篇
  • 数据结构
    18篇
  • Tomcat
    2篇
  • 计算机网络
    7篇
  • Linux
    3篇
  • 前端
    7篇
  • 面试经历
    17篇
  • 生活经历
    6篇
TA的推广
兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

面试常问集锦——分布式系列

到底啥是分布式系统开发经验?https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484872&idx=1&sn=d28383f3397ef6b250afc5c182fcb200&chksm=fba6edcbccd164dd38701a0e06a381249ebb6ad9d0205df2c605b9634688d0dd58f00a2d645a&scene=21#wechat_redirect图解 |
原创
发布博客 2022.05.18 ·
231 阅读 ·
2 点赞 ·
0 评论

java面试高频点深入第四期

第一期内容​​​​​​第二期内容第三期内容mysql:如何解决幻读、锁的分类、主从复制、分库分表;redis:主从复制、热key、大key;框架:MyBatis一二级缓存、只有接口没有实现类怎么实现查询、MyBatis插件原理;分布式部分:接口幂等性、限流算法、降级与熔断;实操部分:排查慢sql;设计模式部分:原型模式、责任链模式、组合与聚合的区别;mq部分:保证消息不丢失、处理重复消息、消息有序性、消息堆积处理、mq宕机怎么保证数据不丢失、消息队列选型;linux.
原创
发布博客 2022.02.17 ·
496 阅读 ·
3 点赞 ·
1 评论

由于疫情 在北京回不去 一个人也要好好吃饭

发布动态 2022.02.02

从Curator实现分布式锁的源码再到羊群效应

本文从源码角度讲解了使用Curator获取分布式锁的流程,接着从等待锁的演化过程角度出发,分析了Zookeeper在分布式锁场景下避免羊群效应的解决方案。
原创
发布博客 2022.01.02 ·
1563 阅读 ·
3 点赞 ·
1 评论

Redis哨兵机制原理浅析

一、前言上一篇文章Redis主从复制原理中简要地说明了主从复制的一个基本原理,包含全量复制、复制积压缓冲区与增量复制等内容,有兴趣的同学可以先看下。利用主从复制,可以实现读写分离、数据备份等功能。但如果主库宕机后,需要运维人员手动地将一个从库提升为新主库,并将其他从库slaveof新主库,以此来实现故障恢复。因此,主从模式的一个缺点,就在于无法实现自动化地故障恢复。Redis后来引入了哨兵机制,哨兵机制大大提升了系统的高可用性。二、什么是哨兵哨兵,就是站岗放哨的,时刻监控周围的一举一动
原创
发布博客 2021.12.30 ·
2202 阅读 ·
5 点赞 ·
6 评论

面试官:能给我画个Zookeeper选举的图吗?

Zookeeper是一个分布式协调框架,提供分布式锁、配置项管理、服务注册与集群管理等功能。为了保证Zookeeper的高可用,一般都会以集群的模式部署。这个时候需要考虑各个节点的数据一致性,那么集群在启动时,需要先选举出一位Leader,再由Leader完成向其他节点的数据同步工作。本文将是Zookeeper系列的第一篇文章,从源码角度讲述Zookeeper的选举算法。
原创
发布博客 2021.12.26 ·
1622 阅读 ·
4 点赞 ·
2 评论

简单谈谈MySQL的两阶段提交

一、简单回顾三种日志在讲解两阶段提交之前,需要对MySQL中的三种日志即binlog、redo log与undo log有一定的了解。在这三种日志中,很多同学会把binlog与redo log混淆,下面使用一张表格来简单对比下两者的区别。...
原创
发布博客 2021.12.21 ·
2558 阅读 ·
14 点赞 ·
5 评论

Redisson可重入与锁续期源码分析

Redisson是一个可以在java项目中使用的Redis客户端,其屏蔽了原子性、可重入、锁续期的诸多细节,内部实现各种各样的锁。例如可重入锁、公平锁、MultiLock与Red Lock与读写锁等,今天主要分析可重入锁与锁续期的源码。
原创
发布博客 2021.12.18 ·
2011 阅读 ·
1 点赞 ·
0 评论

面试官:说说你了解几种限流算法,手写个demo?

在流量突增的场景下,为了保证后端服务在整体上一个稳定性,我们需要对请求进行限流,来避免系统崩溃。不过限流会对少部分用户的请求直接进行拒绝或者延迟处理,影响这些用户的体验。本文会介绍一些常见的限流算法,并在最后附上对分布式限流的一些思考。
原创
发布博客 2021.12.05 ·
9763 阅读 ·
32 点赞 ·
11 评论

从源码中窥探出事务失效的8种原因

核心流程解读我们从一段简单的代码入手,从头到尾分析以下其中的奥秘。如果在一个controller中调用service方法,该方法被@Transaction注解修饰。controller方法: @GetMapping("/save") public String saveStudent() { testService.save(); return "success"; }service方法: @Transactional
原创
发布博客 2021.11.30 ·
817 阅读 ·
4 点赞 ·
0 评论

8种方案,保证缓存和数据库的最终一致性

​我们通常使用缓存机制来提升系统的性能,缓存系统下的读写操作,一般都需要操作数据库与缓存。对于读操作,一般是先查询缓存,查询不到再查询数据库,最后回写进缓存。而对于写操作,究竟是先删除(更新)缓存,再更新数据库,还是先更新数据库,再删除(更新)缓存呢?由于对数据库以及缓存的整体操作,并不是原子性的,再加上读写并发,究竟什么样的方案可以保证数据库与缓存的一致性呢?下面介绍8种方案,配合读写时序图,希望你能从其中了解到保证一致性的设计要点。
原创
发布博客 2021.11.25 ·
4126 阅读 ·
12 点赞 ·
4 评论

探究MySQL的索引结构选型

本文将探究MySQL索引结构的技术选型,分析哈希表、二叉搜索树、AVL树、红黑树、B树与B+树各自的优缺点。解释了MySQL最终选择B+树作为其索引的组织方式的原因,并在最后增加了3道常问的面试题。
原创
发布博客 2021.11.20 ·
3706 阅读 ·
11 点赞 ·
2 评论

从源码角度结合详细图例剖析过滤器与拦截器

过滤器示例:@Componentpublic class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter.init"); } @Override public void doFilter(ServletRequest se
原创
发布博客 2021.11.14 ·
1775 阅读 ·
5 点赞 ·
2 评论

一次因线程池使用不当造成生产事故的排查记录与思考

某日当我点开熟悉的界面,一个又一个请求失败的提示赫然出现在屏幕上,不会是昨晚上线的代码有问题吧?吓得我急忙按F12查看了响应——"exception":"java.lang.OutOfMemoryError","message":"unable to create new native thread"出现了内存溢出的情况,无法创建更多的本地线程。接着查看了实例的监控大盘,发现每个实例的JVM线程数量都处于9000+的规模,且还有上涨的趋势。这是其中一个实例的线程数量监控图:10.
原创
发布博客 2021.11.09 ·
2745 阅读 ·
12 点赞 ·
6 评论

Redis主从复制原理

单机Redis面临的问题单机Redis在发生故障时,由于无法做到故障转移,所以接下来的请求将会直接打到数据库。大量的查询使得数据库连接数达到峰值,且内部锁冲突严重,造成慢查询、连接超时等后果。所以这个时候,我们想着能不能将Redis数据以多副本的形式保存在多台Redis上,当发生故障时,快速地手动去切换连接的Redis?当然,Redis本身也提供了这个功能。主从模式能将Master节点的数据冗余到多台Slave上,配合哨兵模式能够快速感知Master宕机从而进行主从切换实现故障转移。
原创
发布博客 2021.11.04 ·
963 阅读 ·
2 点赞 ·
2 评论

22张图,带你入门分布式一致性算法Raft

Raft节点的角色划分与任期在Raft中,有以下三种角色:Follower 跟随者所有节点的初始状态,内部都会有一个超时时间。对于每一个Follower,其超时时间是随机的。这个超时时间,规定了在倒计时结束后仍然收不到Leader的心跳,Follower就会转变为Candidate。为什么每个Follower的超时时间是随机的,改成一样的可以吗?不可以,相同的超时时间会造成多个Follower同时转变为Candidate,选票被瓜分,导致获取不到半数以上的选票,就需要进行新一轮的选举
原创
发布博客 2021.10.30 ·
1239 阅读 ·
3 点赞 ·
3 评论

通俗易懂的MySQL事务及MVCC原理,我先收藏了!

一、事务简介与四大特性事务指的是一组命令操作,在执行的过程中,要么全部成功,要么全部失败。由引擎层支持事务,MyISAM就不支持事务,而InnoDB是支持事务的。事务具有以下四大特性(ACID):原子性(Atomicity):指事务不可分割,要么全部成功,要么全部失败,不可能存在部分成功或部分失败的情况。如果执行某一条语句失败后,将会触发之前所有执行过的语句的回滚,因此靠的是undo log。 一致性(Consistency):在事务执行前后,数据的完整性没有遭到破坏。一致性是mysql追
原创
发布博客 2021.10.25 ·
8812 阅读 ·
9 点赞 ·
1 评论

9张图,带你了解一致性哈希原理

假设我们现在做一个简单的文件缓存服务,由于文件数过多,我们先使用3台机器用来存储文件。为了由文件名(假设文件名称不重复)能得到存储的机器,考虑先对文件名做hash运算,接着对3取余,得到的余数即为所在机器的编号。这套系统运行了很久,后来文件数量慢慢增多,3台机器存不下了,现在我们考虑扩充到4台。这个时候,我们的算法更新为hash(文件名)%5。那么使用该算法获取abc.txt文件所在的缓存机器时,在其hash值为10的时候,将会映射到0号机器上,而之前是存储在1号机器上的,这个时候就会重
原创
发布博客 2021.10.21 ·
1893 阅读 ·
20 点赞 ·
5 评论

还记不住Spring Bean的生命周期?看这篇你就知道方法了!

一、前言上次我们在手把手教你解决循环依赖,一步一步地来窥探出三级缓存的奥秘中分析了Spring解决循环依赖的方式,在第6节中的doCreateBean(AbstractAutowireCapableBeanFactory类中)其实已经隐约看到了Bean的生命周期的几个阶段。 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] ar
原创
发布博客 2021.10.16 ·
3319 阅读 ·
14 点赞 ·
7 评论

谈谈Redis的持久化——AOF日志与RDB快照

一、前言对于Mysql,数据是持久化在磁盘上的。如果误删数据,可以使用binlog进行恢复;突然宕机时,其本身可以借助redo log进行崩溃恢复。更多关于Mysql日志的内容,可以参考我的另外一篇文章数据库日志——binlog、redo log、undo log扫盲而对于Redis,一般是把数据直接存储在内存中。如果不做任何持久化工作,在出现宕机后,内存中的全部数据就会丢失。显然,业务方是不能容忍这样的情况发生的。好在Redis提供了一系列的持久化机制,分别是AOF日志与RDB快照。二
原创
发布博客 2021.10.11 ·
929 阅读 ·
4 点赞 ·
0 评论
加载更多