Java
文章平均质量分 94
程序源日志
练习两年半的架构师、拥有PMP证书、高项证书、深圳一线开发工程师、拥有三项软件专利
展开
-
最新Java面试题大全1000+面试题附答案详解,最全面详细,看完稳了
Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。、头条等大厂面试大全,其中概括的知识点有:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、39、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?9、解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。原创 2023-04-01 10:19:40 · 1018 阅读 · 2 评论 -
最新Redis面试题,学会直接进大厂,offer拿到手软
Redis的数据都基于缓存的,所以很快,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis也可以实现数据写入磁盘中,保证了数据的安全不丢 失,而且Redis的操作是原子性的。37、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?34、一个 Redis 实例最多能存放多少的 keys?Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求。原创 2023-04-01 10:15:56 · 306 阅读 · 1 评论 -
什么是Docker容器?一文带你了解,看完直接学会
Docker容器的运行逻辑如下图所示,Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷。原创 2023-04-01 10:17:00 · 1683 阅读 · 1 评论 -
Java并发编程--一文带你从基础进阶高级
Synchronized:是非公平锁(不能保证线程获得锁的顺序,即线程不会依次排队去获取资源,而是争抢,但是结果一定是正确的),是可重入锁(已获得一个锁,可以再获得锁且不会造成死锁,比如synchronized内部可以再写个synchronized函数)都会不一致(上面例子结果如果一样是因为只有3个线程,for循环即出错,因为number–这个函数本身不是线程安全的),所以就引入了锁的概念,synchronized,lock保证了输出顺序、计算结果的一致性。更多学习资料小编已打包好,可以找我领取哦!原创 2023-04-01 10:13:20 · 122 阅读 · 0 评论 -
如何讲解 Java8 的函数式编程,大厂面试必考。
出现的时间已经不算短了,免费维护期马上也要到期了,官方已经开始推荐使用 Java11。Java8 是革命性的一个版本,一直以来,Java 最受诟病的地方就是代码写起来很啰嗦,仅仅写一个 HelloWorld 都需要些很多的样板代码。在 Java8 推出之后,啰嗦的代码有了很大的改观,Java 也可以写出简单优美的代码。最明显的改观就是 Java 开始支持。原创 2023-04-01 10:13:37 · 206 阅读 · 0 评论 -
Java锁原理与应用,一文带你搞懂其中原理
如果A使用锁的时间远远小于B被阻塞和挂起的执行时间,那么我们将B挂起阻塞就相当的不合算,于是出现自旋,自旋指的是锁已经被其他线程占用时,当前线程不会被挂起,而是在不停的试图获取锁(可以理解为不停的循环),每循环一次表示一次自旋过程。非公平锁的性能要高于公平锁,因为线程有几率不阻塞直接获得锁。基本概念:常见于AQS,公平锁就是在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,直到按照FIFO的规则从队列中取到自己。原创 2023-04-01 10:10:19 · 279 阅读 · 0 评论 -
一文带你吃透负载均衡,从此走上架构师之路
对负载均衡的理解零零散散,不成体系。对OSI模型有些许了解有耐心。本文涉及大量的知识点,且只能用文字才能讲清楚,所以文字比较多。读完此篇文章,从宏观的角度理解了负载均衡的原理以及实现机制。加深对分布式架构的了解本文首先从概念开始,讲解什么是负载均衡,以及负载均衡在分布式系统中所承担的角色以及提供的功能。讲解负载均衡的分类。分别从软硬件角度地域范围角度以及OSI 模型角度进行分类讲解负载均衡的实现方案。从负载均衡的策略角度来分析目前业界的负载均衡算法以及其优缺点。原创 2023-04-01 10:07:46 · 186 阅读 · 0 评论 -
6 个 Java 开发工具,轻松分析定位 JVM 问题
这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题。JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。比如,在我的机器上运行 ls 命令,可以看到 JDK 8 提供了非常多的工具或程序:接下来,我会与你介绍些常用的监控工具。你也可以先通过下面这张图了解下各种工具的基本作用:为了测试这些工具,我们先来写一段代码:启动 10 个死循环的线程,每个线程分配一个 10MB 左右的字符串,然后休眠 10 秒。可以想象到,这个程序会对 GC 造成压力:修改 pom原创 2023-02-03 16:19:20 · 183 阅读 · 0 评论 -
阿里内传322页Java并发编程核心讲义学习笔记,学会可以进阿里
掌握过程并不容易。我相信为了解决这个问题,你也听别人总结过并发编程的第一原则,那就是不要写并发程序。这个原则在前几年曾经是行得通的,那个时候多核服务器还是一种奢侈品,系统的并发量也很低,借助数据库和类似 Tomcat 这种中间件,我们基本上不用写并发程序。或者说,并发问题基本上都被中间件和数据库解决了。这主要是硬件的驱动以及国内互联网行业的飞速发展决定的,现在 64 核的服务器已经飞入寻常百姓家,大型互联网厂商的系统并发量轻松过百万,传统的中间件和数据库已经不能为我们遮风挡雨,反而成了瓶颈所在。原创 2023-02-03 16:18:07 · 102 阅读 · 0 评论 -
Spring Boot + Redis 解决重复提交问题,一文带你搞懂,最详细教程
在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据。2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token。3、悲观锁或者乐原创 2022-12-08 09:45:53 · 876 阅读 · 0 评论 -
JVM虚拟机,调优的几种场景(建议收藏)面试架构师必备知识
cpu占用过高要分情况讨论,是不是业务上在搞活动,突然有大批的流量进来,而且活动结束后cpu占用率就下降了,如果是这种情况其实可以不用太关心,因为请求越多,需要处理的线程数越多,这是正常的现象。话说回来,如果你的服务器配置本身就差,cpu也只有一个核心,这种情况,稍微多一点流量就真的能够把你的cpu资源耗尽,这时应该考虑先把配置提升吧。第二种情况,cpu占用率长期过高,这种情况下可能是你的程序有那种循环次数超级多的代码,甚至是出现死循环了。排查步骤如下:(1)用top命令查看cpu占用情况这样就可以定位出c原创 2022-12-07 09:38:10 · 113 阅读 · 0 评论 -
面试官:MySQL 数据库查询慢,除了索引问题还可能是什么原因?面试架构师必备知识
遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?有哪些操作,可以提升mysql的查询能力呢?今天这篇文章,我们就来聊聊会导致数据库查询变慢的场景有哪些,并给出原因和解决方案。我们先来看下,一条查询语句下来,会经历哪些流程。比如我们有一张数据库表我们平常写的应用代码(go或C++之类的),这时候就叫客户端了。客户端底层会带着账号密码,尝试向mysql建立一条TCP长链接。mysql的连接管理模块会对这条连接进行管理。建立连接后,客户端执行一条查询sql语句。比如原创 2022-12-07 09:36:25 · 511 阅读 · 0 评论 -
Redis缓存篇:高频问题横扫核心知识点,面试高级工程师必备知识体系
很多人只知道是 K/V NoSQl 内存数据库,单线程……这都是没有全面理解 Redis 导致无法继续深问下去。这个问题是基础摸底,我们可以从 Redis 不同数据类型底层的数据结构实现、完全基于内存、IO 多路复用网络模型、线程模型、渐进式 rehash……我们可以先说到底有多快,根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数),有兴趣的可以参考官方的基准程序测试《How fast is Redis?》,地址:/docs/reference/optimization/bench原创 2022-12-07 09:34:04 · 372 阅读 · 0 评论 -
高并发、高性能、高可用三高系统设计经验,架构设级别设计方法
软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。具体的指标定义,如:高并发方面要求QPS 大于 10万;高性能方面要求请求延迟小于 100 ms;高可用方面要高于 99.99%。高并发我们使用 QPS(Queries Per Second,每秒查询率)来衡量系统承载能力。架构策略有哪些?正所谓双拳难敌四手,高并发撑场面的首选方案就是集群化部署,一台服务器承载的QPS有限,多台服务器叠加效果就不一样了。如何将流量转发到服务器集群,这里面就要用到负载均衡,比如:LVS 和 Nginx。常用的负原创 2022-12-07 09:32:00 · 325 阅读 · 0 评论 -
微服务架构10个最重要的设计模式,带你了解,完全熟悉
自从软件开发的早期(1960年代)以来,解决大型软件系统中的复杂性一直是一项艰巨的任务。多年来,软件工程师和架构师为解决软件系统的复杂性进行了许多尝试:David Parnas的模块化和信息隐藏(1972),Edsger W. Dijkstra的关注分离(1974),面向服务的体系结构(1998)。他们所有人都使用了久经考验的成熟技术来解决大型系统的复杂性:分而治之。自2010年代以来,这些技术不足以解决Web规模应用程序或现代大型企业应用程序的复杂性。结果,架构师和工程师开发了一种新方法来解决现代软件系统原创 2022-12-07 09:30:38 · 435 阅读 · 0 评论 -
SpringBoot框架官方支持任务调度框架,官方轻量级框架,一文全解
编程喵 实战项目里需要做一个定时发布文章的功能,一开始我想用 Spring Task,于是研究了一番,发现 Spring Task 用起来确实简单,但对于复杂业务却也无能为力。于是我就把注意力放到了 Quartz 上面,这是一款老而弥坚的开源任务调度框架。记得我在 14 年开发大宗期货交易平台的时候就用到了它,每天凌晨定时需要统计一波交易数据,生成日报报表,当时配合 Cron 表达式用的。可惜后来平台稳定了,新的政策出来了,直接把大宗期货交易灭了。于是我发财的机会也随着破灭了。想想都觉得可惜,哈哈哈。时光荏原创 2022-12-07 09:28:03 · 236 阅读 · 0 评论 -
Kafka组件顺序消费线程模型的实践与优化,一文全解
本文将会对 Kafka 消费者拉取消息流程进行深度分析之后,对 Kafka 消费者顺序消费线程模型进行一次实践与优化。在讲实现 Kafka 顺序消费线程模型之前,我们需要先深入分析 Kafka 消费者的消息拉取机制,只有当你对 Kafka 消费者拉取消息的整个流程有深入的了解之后,你才能够很好地理解本次线程模型改造的方案。我先给大家模拟一下消息拉取的实际现象,这里 max.poll.records = 500。可以发现,在消息没有堆积时,消费者拉取时,如果某个分区没有的消息不足 500 条,会从其他分区凑够原创 2022-12-07 09:25:00 · 296 阅读 · 0 评论 -
Spring Boot 框架是如何监控 SQL 运行情况?
今天想和大家聊一聊 Druid 中的监控功能。Druid 数据库连接池相信很多小伙伴都用过,个人感觉 Druid 是阿里比较成功的开源项目了,不像 Fastjson 那么多槽点,Druid 各方面一直都比较出色,功能齐全,使用也方便,基本的用法就不说了,今天我们来看看 Druid 中的监控功能。首先我们来创建一个 Spring Boot 工程,引入 MyBatis 等,如下:选一下 MyBatis 和 MySQL 驱动,做一个简单的测试案例。先来连接一下数据库:创建一个 User 实体类,做一个简单的查询原创 2022-12-07 09:21:49 · 95 阅读 · 0 评论 -
什么是缓存架构,什么是后端分布式多级缓存架构,全文解析带你了解其中门道
今天我们就来谈谈缓存。对于缓存,我的理解是让数据更接近于用户,目的是让用户的访问速度更快。 所以距离越接近用户的缓存,越快越有效!缓存的工作原理是先从缓存中获取数据,如果有数据则直接返回给用户,如果没有数据则从慢速设备上读取实际数据并且将数据放入缓存。按照层级关系,我们来划分一下缓存,同时也是我们今天的大纲:浏览器是我们网上冲浪的重要工具,为了能够让我们顺畅的冲浪,它也会帮助我们缓存一些东西,主要存放一些实时性不太敏感的数据,比如商品详情页框架、商家评分、评价、广告词等。对于实时性要求高的数据则不能使用浏览原创 2022-12-06 10:07:32 · 502 阅读 · 0 评论 -
SpringBoot框架的统一参数校验、统一异常、统一响应,如何设计封装,优雅的使用
本篇主要要介绍的就是层的处理,一个完整的后端请求由4部分组成:本篇将解决以下3个问题:常见的请求就分为跟2种1、:之前解释过, = + 。加上这个注解,springboot就会吧这个类当成进行处理,然后把所有返回的参数放到中2、:请求的前缀,也就是所有该下的请求都需要加上的前缀3、:标志这是一个请求,并且需要通过地址才可以访问到4、:同理,表示是个请求5、:至于参数部分,只需要写上,前端过来的请求便会通过映射赋值到对应的对象中,例如请求这么写,就会自动被映射到对应的属性当中二、统一状态码1. 返回格原创 2022-12-06 10:05:45 · 690 阅读 · 0 评论 -
数据库如何设计,一头雾水,一文带你学习如何设计数据库
实体关系(Entity-Relationship, E-R)概念E-R 模型是一种描述数据库的抽象方法。实体关系建模的方法更多依赖于直觉而非机器, 但会导致相同的设计。E-R 模型实体 (Entity)实体是具有公共性质的可区别的现实世界对象集合。举例:学生教师课程选课一般而言, 一个实体被映射到一张关系表中, 代表一组对象的集合; 表中的每一行被称为一个实体发生(Entity Occurrence)或实体实例(Entity Instance), 代表一个特定对象。在 E-R 图中, 用矩形框表示:属性 (原创 2022-12-06 10:04:12 · 5122 阅读 · 0 评论 -
算法学习七种排序算法以及实现,代码实现教程
通过待排序的序列从前往后依次比较相邻的元素,若发现逆序则两两交换,直到下一趟排序下来没有进行交换,说明排序完成冒泡排序每一趟会确定一个最大值(默认从小到大)原创 2022-12-06 10:02:45 · 123 阅读 · 0 评论 -
什么是JVM?JVM的机制与JVM自动内存管理机制,如何进行优化
1. 什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行原创 2022-12-06 10:01:14 · 754 阅读 · 0 评论 -
高并发系统是怎么工作,流程与机制与建设经验总结,一文带你吃透
早期从事运单系统的开发和维护工作,从最早的日均百万单,到日均千万单,业务的快速发展再加上外卖业务的特点是,业务量集中在午高峰和晚高峰两个高峰期,所以高峰期并发请求量也是水涨船高,每天都要面对高并发的挑战。拿运单系统来举例,日常午高峰核心查询服务的 QPS 在 20 万以上,Redis 集群的 QPS 更是在百万级,数据库 QPS 也在 10 万级以上,TPS 在 2 万以上。在这么大的流量下,主要的工作也是以围绕如何建设系统的稳定性和提升容量展开,下面主要从基础设施、数据库、架构、应用、规范这几方面谈谈如何原创 2022-12-06 09:57:47 · 269 阅读 · 0 评论 -
一文进阶什么是负载均衡,通俗易懂的全文解析
写本文的目的:阅读这篇文章需要的条件:收获:主要内容:好了,准备好了么,让我们开始这次愉快之旅。首先 撇开对线上的影响,如果线上突发来了流量,后端服务扛不住,我们会怎么做呢?无非两种方式:上面两种方式,我们称之为纵向扩展和横向扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如 CPU 处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。横向扩展,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器原创 2022-12-05 09:56:38 · 499 阅读 · 0 评论 -
Kafka组件的消费者流程解析,图文详解
消费者:消费组:⼀个拥有四个分区的主题,包含⼀个消费者的消费组此时,消费组中的消费者消费主题中的所有分区。并且没有重复的可能。如果在消费组中添加⼀个消费者2,则每个消费者分别从两个分区接收消息如果消费组有四个消费者,则每个消费者可以分配到⼀个分区如果向消费组中添加更多的消费者,超过主题分区数量,则有⼀部分消费者就会闲置,不会接收任何消息向消费组添加消费者是横向扩展消费能⼒的主要⽅式。必要时,需要为主题创建⼤量分区,在负载增⻓时可以加⼊更多的消费者。但是不要让消费者的数量超过主题分区的数量。除了通过增加消费原创 2022-12-05 09:54:57 · 2312 阅读 · 0 评论 -
从JDK8到JDK18,Java垃圾回收的详细解答
2014 年3 月 JDK 8 发布,自那以来 JDK 又连续发布了许多版本,直到今日的 JDK 18 是 Java 的第十个版本。借此机会,我们来回顾一下 HotSpot JVM 的垃圾回收器的发展全过程。HotSpot JVM 中负责管理应用程序堆的组件叫做“垃圾回收器”(Garbage Collector,即GC)。GC 负责管理应用程序堆对象的整个生命周期,从应用程序分配内存到内存被回收,都由 GC 负责。从高层来看,JVM 垃圾回收算法的最基本功能如下:好的垃圾回收算法还有更多的需求,但这三条是最原创 2022-12-05 09:51:33 · 467 阅读 · 0 评论 -
面试官:高并发场景下,你们是怎么保证数据的一致性的?图文详解
面试的时候,总会遇到这么一个场景。面试官:你们的服务的QPS是多少?我:我们的服务高峰期访问量还挺大的,大约是3万吧。面试官:这么大的访问量,你们的服务器能撑住吗?有加缓存吗?我:有的,我们使用了Redis做缓存,接口优先查询缓存,缓存不存在,才访问数据库。这样可以减少数据库访问压力,加快查询效率。面试官:一份数据存储在两个地方,更新数据的时候,你们是怎么保证数据的一致性的?看到了吧,好的面试官一般不直接问你数据一致性的解决方案,而是循循善诱,结合具体的使用场景,再问你解决方法。如果你没做过这方面,没有线上原创 2022-12-05 09:49:32 · 559 阅读 · 0 评论 -
Java编程最常见的208道面试题,一文解析
相比与这些问题,我的这 208 道面试题具备以下优点:本篇是这 208 道题中,第一部分“Java 基础”模块的题和答案。1. JDK 和 JRE 有什么区别?具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。2. == 和 equals 的区别是什么?== 解读对于基本类型和引用类型 == 的作用效果原创 2022-12-05 09:43:19 · 473 阅读 · 0 评论 -
Java集合容器面试题(2023最新版)
集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。实现:集合接口的具体实现,是重用性很高的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的原创 2022-12-05 09:39:25 · 365 阅读 · 0 评论 -
开源消息引擎系统 Kafka 3新特性,一文带你了解
Kafka 是一款开源的消息引擎系统。一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个 ZooKeeper 集群,如上图所示。其中 ZooKeeper 是 Kafka 用来负责集群元数据的管理、控制器的选举等操作的。Producer 将消息发送到 Broker,Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并消费消息。1.1、Kafka 核心组件1.producer:消息生产者,就是向 broker原创 2022-12-05 09:36:12 · 910 阅读 · 0 评论 -
数据结构与算法,MySQL数据库面试专题及答案
时间复杂度空间复杂度NP 问题P:能在多项式时间复杂度内解决的问题NP:能在多项式时间复杂度内验证答案正确与否的问题NP-hard:比 NP 问题更难的问题(NP 问题的解法可以规约到 NP-hard 问题的解法)NP 完全问题:是一个 NP-hard 问题,也是一个 NP 问题数组因为数组的这两个特性,所以数组支持随机快速读写。数组可以根据第一个数据的内存地址和数据类型,推导出任意下标的内存地址。根据下标访问数据,时间复杂度为 O(1)。在数组中删除数据(不是数组末尾的数据)到导致数据迁移,时间复杂度为原创 2022-12-04 16:46:01 · 298 阅读 · 0 评论 -
一文详解Redis键过期策略,最全文档
除了string独有设置过期时间的方法,其他类型都需依靠expire方法设置时间,若:设置key的过期时间。超时后,将会自动删除该key。在Redis的术语中一个key的相关超时是volatile的。生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite)。这意味着,如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变。 如使用 INCR 递增k原创 2022-12-04 16:44:24 · 426 阅读 · 0 评论 -
Spring Boot 框架整合 MyBatis 连接数据库,详细说明
在我们日常的开发过程中,肯定不可避免的会使用到数据库以及 SQL 语句。比如,刚开始学习 Java 的时候可能会遇到 JDBC,它是连接 Java 和数据库的桥梁,我们可以使用 JDBC 来建立与数据库之间的连接并且执行相应的 SQL 语句。虽然 JDBC 的执行效率很高,但是其开发效率比较低。正是如此,市面上出现了一大批 ORM(对象关系映射)框架,例如 Hibernate,iBATIS 以及本文将要介绍的 MyBatis。MyBatis 简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、原创 2022-12-04 16:43:01 · 2729 阅读 · 0 评论 -
RabbitMQ,RocketMQ,Kafka 事务性消息顺序性和消息重复发送的处理策略
我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用,同时网络环境也是不稳定的,造成了我们多个机器之间的数据同步问题,这就是典型的分布式事务问题。在分布式事务中事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。分布式事务就是要保证不同节点之间的数据一致性。1、2PC(二阶段提交)方案 - 强一致性2、3PC(三阶段提交)方案3、TCC (Try-Confirm-Can原创 2022-12-04 16:41:26 · 496 阅读 · 0 评论 -
在Docker中运行Dubbo应用,详细教程,一学就会
Dubbo概述Dubbo是阿里开源的一个分布式服务框架,在国内粉丝很多。官网上的介绍是:DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo的文档很完整,网络上资源也很多,这里就不再重复了。本文做这样一个尝试,将一个Dubbo应用容器化,部署到阿里云的容器服务上。极简Dubbo应用结构在Dubbo世界里,服务调用方和服原创 2022-12-04 16:39:59 · 1326 阅读 · 0 评论 -
RocketMQ 的长轮询如何实现,一文带你了解
消费方式就是指消费者如何从MQ中获取到消息,分为两种方式,push(推方式)和pull(拉方式)。1、push(推方式)push,顾名思义,就是推的意思。就是当MQ收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费,这种模式就叫push,也就是MQ将消息推给到消费者的意思。push模式push这种模式的好处就是响应快,消息的实时性比较高,一旦消息MQ收到消息,那么就能立马将消息推送给消费者,消费者也就能立马收到消息进行消费。但是这种push的模式,有个缺点就是一旦消息量比较大时,对消费者性能要求比原创 2022-12-04 16:36:57 · 348 阅读 · 0 评论 -
【Spring框架】经典的 9 种设计模式,面试工程师必学知识
BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。bean容器的启动阶段:读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中,保存在它的一个ConcurrentHashMa原创 2022-12-04 16:35:15 · 222 阅读 · 0 评论 -
【微服务】拆分策略的详细说明,带图了解
1、需对业务充分了解,这是服务拆分,通信设计,资源整合的必要前提。2、适应微服务架构设计原则:小版本,高速迭代。3、快速的环境提供能力:依赖于云计算、容器技术,快速交付环境。4、服务合理拆分:需符合团队结构或能逆向影响,能对组织架构进行微调并划分职责。(康威定律和逆康威定律)5、基本的监控能力:包括基础的技术监控和业务监控。6、快速的应用部署能力:需要部署管道提供快速的部署能力。7、DevOps 自动化运维能力:需要具有良好的持续集成和持续交付能力,还需要对问题、故障的快速响应能力,开发、测试和运维能协同工原创 2022-12-03 21:12:20 · 2151 阅读 · 0 评论 -
【Java语言】对象的创建过程详细说明
类加载的执行过程注意以下几种情况不会执行类初始化:内存的分配方式内存的分配方式有以下两种:选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由采用的垃圾收集器是否带有空间压缩整理的能力决定。因此,当使用Serial、ParNew等带压缩整理过程的收集器时,系统采用的分配算法是指针碰撞,即简单又高效。而当使用CMS这种基于清除(Sweep)算法的收集器时,理论上就只能采用较为复杂高效的空闲列表来分配内存。指针碰撞方式存在的问题:对象创建在虚拟机中是非常频繁的行为,仅仅修改一个指针所指向的位置原创 2022-12-03 21:10:18 · 361 阅读 · 0 评论