自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

软件工程探索之旅

跨越'知道'和'做到'之间的鸿沟,探索软件工程的奥秘

  • 博客(265)
  • 收藏
  • 关注

原创 【项目经验】Redis Sentinel从工程中下线并对业务迁移-进行中

某天,接到DBA通知,Redis sentinel 只支持到3.2.X,各组要将工程中的Redis sentinel引用改为Redis cluster... 有的工程引用了两种模式,有的只引入了Redis sentinel ,还和其他组有共同使用的key ,怎么办呢?? ... 结尾有彩蛋

2024-03-13 22:45:33 1218

原创 JVM和JVM内存管理

以上是从内存管理的角度对jvm进行的知识框架梳理,以后在工作中还要多多使用,多多体会。同时,结合已有的工作经验,我更加深刻的认识到,有些时候因为对原理的不了解,研发过程中的一些不经意的"小操作",都可能引起巨大风暴:大量没有被引用的类文件,如果被加载到jvm中,在metaSpaceSize设置的少时,有可能引起OutofMemoryError:Metaspace错误;队列长度设置不当,很有可能导致内存溢出;完善的内存监控系统可以使我们的系统如虎添翼。

2024-03-09 21:48:19 717

原创 数据库事务问题整理-MySQL

对MySQL事务的重新认识,包括事务的概念,事务解决的问题,MySQL innodb存储引擎中为了解决隔离性问题的MVCC机制

2024-02-29 17:07:11 586

原创 分布式一致性软件-zookeeper

在我们进行软件开发过程中,为了实现某个功能可能借助多个软件,如存储数据的数据库软件:MySQL,Redis;消息中间件:rocketMq,kafka等。那么在分布式系统中,如果想实现数据一致性,可以借助哪些软件呢?答:分布式一致性软件。

2024-02-25 20:36:07 1268

原创 Redis-内存管理

Redis是基于内存存储的,非关系型,键值对数据库。因此,对Redis来说,内存空间的管理至关重要。那Redis是如何内存管理的呢?

2024-02-21 13:50:12 540

原创 rocketMq-broker-PullMessageProcessor 的完整生命周期和设计思想

很多文章直接讲了processRequest方法的执行内容,并没有讲清楚PullMessageProcessor的生命周期,以及是如何被通知要进行消息拉取的。在这篇文章中,我们将对其进行梳理,并学习其中的设计思想。

2024-02-20 11:47:34 997

原创 【算法】Java-二叉树的右视图(BFS、DFS两种解法)

这道题的解法有很多,分享这两种解法的原因是在做这道题时,我感受到了自己的一点点质变。方法一,对队列的熟练应用。方法二,深度理解了递归的过程,后面还要继续应用,继续体会。学习算法增加了我看问题的视角,经常感叹“原来可以这样”,“居然还能这样”,“这人想的真好”之类。但我们知道“知道”和“做到”之间,有一条“鸿沟”,用新的“知道”的方法解出题的感觉真是太棒了,我做到了!当然,过程非常不容易,经常有些题目都看不懂,或者别人的思路理解不了。这时候,我们要想想,这道题难度是不是太大了,如果太大,要降低难度;

2024-01-14 19:09:44 1114 3

原创 Java字节码分析快速入门/字节码执行分析(一)

我们知道,计算机直接使用的程序语言语句是机器指令码,又称机器码/代码。但在Java开发过程中,Java源码先被编译成了字节码,然后才解释称机器码运行。这是为什么呢? 字节码是什么呢?

2023-06-28 20:48:31 1340

原创 [Java基础]面向对象

在这篇文章中,我们将学习面向对象的思想,并学习如何使用面向对象思想编程。包括关于对象和类,类之间的关系,引用,对象的创建和使用,构造函数,内存解析等内容。

2023-06-09 17:37:44 783

原创 [Java基础]面向对象-内存解析

这篇文章,将为大家讲解,Java代码执行过程中,内存空间占用的情况,图文并茂,值得一看。

2023-06-09 15:08:05 501 3

原创 【Spring源码阅读】IOC容器的依赖注入

从代码中我们看到一个整体的框架,getBean是依赖注入的入口,下面我们将通过createBean方法了解注入的整个实现过程。在这个过程中,会根据BeanDefinition的要求生成Bean对象,同时对Bean初始化。SpringIOC容器的依赖注入发生在用户第一次向IOC容器获取Bean时。除在BeanDefinition中设置lazy-init属性让容器完成bean的预实例化。所以这篇文章,我们将从getBean()方法入手分析SpringIOC容器依赖注入的过程。

2023-03-10 17:46:44 91

原创 Spring源码阅读-IOC容器初始化过程

BeanDefinition 就是POJO对象在IOC容器中的抽象。通过BeanDefinition 这个数据结构,使IOC容器能够方便的对POJO对象也就是Bean进行管理。将BeanDefinition 注册到hashmap中,也就是一个IOC容器中。Spring IOC容器的初始化过程:Resource定位,BeanDefinition载入,向IOC容器注册BeanDefinition。整个过程由refresh()方法触发,三个过程由不同的模块完成,使用户更加灵活的对这三个过程剪裁和扩展。

2023-03-05 23:13:28 253

原创 【设计模式】策略模式在Java工程中应用

策略模式帮助我们把相似的算法抽象,使用上下文管理抽象类的具体实现,每次新增算法时,只需新增具体实现。使我们的代码轻松解耦,符合开闭原则,极大的缩小了影响范围。是成为一名优秀工程师的必修课!

2023-02-26 23:56:38 1021 2

原创 Spring-依赖控制反转和IOC容器

什么是依赖控制反转和IOC容器?什么是Spring设计的核心?

2023-02-12 23:44:25 186

原创 rocketmq源码打包

以上就是对rocketMq source 源码打包的过程,供大家参考。

2023-02-03 15:02:22 854 1

原创 Zookeeper-应用-分布式锁以及和Redis实现对比

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。前面我们分享过了使用Redis实现分布式锁。这篇文章中,我们聊一下使用ZooKeeper如何实现分布式锁......

2022-06-17 17:56:37 533

原创 ZooKeeper-集群-ZAB协议与数据同步

在前面两篇文章中,我们认识了什么是ZooKeeper,ZooKeeper有哪些功能,ZooKeeper集群,ZooKeeper集群中的选举机制。那么在ZooKeeper集群中,数据是如何在节点间同步的呢?数据同步过程中又会产生哪些问题又是如何解决的呢?......

2022-06-03 00:16:29 440

原创 Redis-作为缓存可能遇到的问题

Redis作为缓存,不是存进去就万事大吉了,还要根据调用场景,缓存的内容,请求方式,QPS,合理设置过期时间等采取预防措施。

2022-05-28 23:35:37 260 1

原创 【设计模式】策略模式与spring结合

       在上一篇《【设计模式】策略模式》中,我们讲解了策略模式的基本概念和用法。策略模式是符合“开闭原则”的典型案例,但在上一篇文章中,我们发现,如果想调用其他的策略,虽然不用修改核心业务代码,但需要修改客户端代码。我们说,将策略的选择放在功能页面,当用户选择时,向后端传入策略,从数据库字典表中获取该策略对应的类的名字,再通过反射,获得对应的策略类。但如果不修改数据库,还有没有别的方法?当然...

2018-09-11 19:32:21 553 1

原创 MySQL-数据库事务

关于MySQL事务实现的原理,请展开讲讲吧

2024-03-31 16:28:21 894 1

原创 分布式集群节点部署奇数个还是偶数个?

请问Redis哨兵模式部署节点的个数是奇数还是偶数?为什么?

2024-03-28 14:26:34 283

原创 Threadlocal的原理和使用

什么是Threadlocal类?Threadlocal类在多线程并发编程中起到什么作用?为什么使用ThreadLocal可能引起内存泄露问题?

2024-03-24 23:04:39 357

原创 简述从浏览器发出请求到数据返回的全过程

你知道我们从浏览器发出一条请求到数据返回都经过了哪些过程吗?你知道异地多活部署情况下是如何路由你的请求的妈?你知道如何拦截网络攻击吗?这篇文章有答案

2024-03-16 12:05:53 725

转载 数据库事务-如何防止幻读

数据库事务,什么是幻读?如何防止幻读?

2024-03-15 22:28:00 32

原创 【Spring】SpringMVC请求原理

什么是SpringMVC,MVC? SpringMVC的执行流程是怎样的?dispatcherServlet在SpringMVC中起到了什么作用?dispatcherServlet 和Servlet的关系又是什么?这篇文章会帮你找到答案

2024-03-15 19:08:05 930

原创 【Java基础】JVM双亲委派模型

jvm的双亲委派模型为了解决什么问题,你真的搞懂了吗?还没懂的话,请看这篇

2024-03-15 12:09:21 562

转载 【概念】微服务架构

微服务(Microservices)是一种,它将一个大型的、复杂的应用程序分解为一组小型的、互相独立的服务。每个微服务都专注于实现某一特定业务功能,并且可以单独部署、扩展和维护,具备自己的数据库或数据存储能力。这些服务通过轻量级通信机制(如RESTful API、消息队列等)进行交互和协作,以完成整个系统的业务逻辑。

2024-02-25 15:09:47 41

转载 Redis-事务处理

Redis本身作为内存数据库,对事务也有处理。redis事务是指一组命令的有序执行,它允许客户端将多个命令打包在一起作为一个逻辑单元来处理。

2024-02-22 15:48:14 32

转载 Redis-常用数据结构详解

从特性、编码方式、操作、应用场景等多个角度解析Redis常用的几种数据结构

2024-02-20 17:24:48 18

原创 rocketMq-Consumer的两种消费模式:push和pull(含源码解读)

在RocketMQ中,虽然从概念上讲Consumer有两种消费模式:Push和Pull,push模式让人感觉由broker将消息主动push到consumer。但在实际实现时,这两种模式都采用了类似长轮询(long polling)的机制,即由Consumer主动向Broker拉取消息。不过,它们的具体行为有所不同,我们主要介绍一下Push模式。

2024-02-04 20:03:15 1161

转载 rocketMq和kafka在技术选型上的区别

RocketMQ和Kafka都是高性能、分布式的消息中间件,它们在消息队列领域具有广泛的应用。那么在技术选型上有哪些关键区别呢?

2024-01-30 17:56:00 83

转载 【转载】高并发异步解耦利器:RocketMQ究竟强在哪里?

rocketMq全面整理,可观全局,值得一读

2024-01-30 16:09:44 68

原创 ThreadPoolExecutor 基础

ThreadPoolExecutor 类是Java并发包(java.util.concurrent)中用于创建和管理线程池的核心类,在本文中,我们将介绍一些关于ThreadPoolExecutor 基础内容。

2024-01-25 11:41:13 744

转载 关于java.util.concurrent包

java.util.concurrent 包下的类和接口是为了支持并发编程而设计。这个包提供了丰富的工具和数据结构,旨在简化多线程环境中的编程,并提高程序在并发执行时的性能、可伸缩性和可靠性。

2024-01-24 18:17:21 28

原创 使用CompletableFuture实现并发计算-结合实例

CompletableFuture是Java 8引入的一个强大的并发工具类,它是Future接口的扩展实现。它提供了更丰富的异步编程模型和功能,允许开发者以非阻塞的方式处理异步计算的结果,并且可以将多个异步任务链式组合起来形成复杂的流程。本文将结合代码应用讲解CompletableFuture的主要功能

2024-01-24 14:06:50 874 3

原创 [Java基础]wait(),sleep(),notify(),notifyAll()

在实际的工作当中,经常会用到wait(),sleep(),notify(),notifyAll()等方法,我在这里系统的整理下。

2023-09-15 15:06:17 175

原创 【算法】Java-使用数组模拟单向链表,双向链表

数组实现链表,一个数组用于存放数据,一个数组存放"指针",这里的指针用数组下标代替。如果是双向链表,要用两个数组存放指针。同时要注意首节点和尾结点的记录方法。在实现双链表时,我曾用两个变量表示首尾节点,对比起来,没有用e[0],e[1]表示简洁,而且非常容易搞混。占用第0位和第1位保存链表头和尾时要注意初始的idx=2,第k个插入的元素的索引下标是k+1。大家可以使用更多方法实现,过程虽然曲折,但一顿操作下来,对链表的操作会非常的熟练。

2023-09-11 18:04:32 312

原创 [Java基础]对象转型

在这篇文章中,我们将继续学习Java基础知识:对象转型。对象转型在Java应用中非常广泛,在这篇文章中,我将系统的为大家梳理一下。1、一个基类引用类型的对象可以指向其子类的对象;2、一个基类的引用不能指向其子类新增的属性和方法;3、可以使用 引用类型 instance of 类名的方式来判断该引用类型所指向的对象属于该类还是该类的子类;4、子类对象可以当基类对象使用叫做向上转型(upcasting),基类对象可以当做子类对象使用称为向下转型(downcasting)

2023-08-17 19:22:31 243

原创 【算法练习】4种反转链表的方法(Java实现)

几种链表反转方法的主要区别在于迭代法和递归法是在原链表上直接反转,无需额外空间;而头插法和栈辅助需要 O(N) 的额外空间。一般迭代法代码最简洁,递归法需要处理终止条件,但思路清晰。

2023-08-17 15:01:30 2715

原创 [Java基础]面向对象-关键字分析:this,static,final,super

在前面的文章中,我们讲过Java关键字是电脑提前定义好的,有特殊意义的标识符。Java关键字对编译器有特殊意义,用来表示一种数据类型,或程序的结构。关键字不能用来做为对象,类,方法,包,参数的名称。在这篇文章中,我们将介绍Java类中常用的关键字的使用:this,static,final,super在这篇文章中,我们主要学习了Java的4个关键字:this,static,final,super。

2023-08-08 16:17:54 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除