请允许在我们的网站上展示广告
您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。
我已知悉
首页
🌟2024年度总结
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
1
搞定系统设计:如何设计一个限流器?
2
探究分布式哈希算法:哈希取模与一致性哈希
3
程序员小张的职场逆袭:向上反馈的力量
4
《提示词从入门到精通》读后感
5
程序员的成长建议
橙序员
累计撰写
194
篇文章
累计创建
66
个标签
累计收到
4
条评论
栏目
首页
🌟2024年度总结
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
搜索
标签搜索
成长
公众号
事务
流处理
大数据
旅行
mongo db
SUNO
github
IDEA
安全
注解
总结
求职
分布式事务
CAP
分布式系统
loadbalancer
装修
买房
前端
方案设计
AIGC
JVM
资讯
Netty
NIO
BIO
zookeeper
RocketMQ
MySQL
stable diffusion
spring MVC
spring AOP
JDBC
mybatis
logback
docker
consul
spring event
新冠
连接池
redis
运维
nginx
hiper-v
DDD
搞笑
数据库
团建
游戏
Gradle
心情
好物
eureka
spring framework
spring boot
设计模式
apache common
ShardingSphere
KAFKA
leetcode
spring cloud
feign
ES
起点
目 录
CONTENT
以下是
开发技巧
相关的文章
2023-07-23
中间件是如何进行集群管理的?
常用中间件集群管理方式有两种:一种是通过注册中心,如redissentinelrocket MQname serverkafkazookeeperdubbozookeeperspring boot(微服务)eureka,consul,Nacos;另一种是通过分布式节点,如ES节点主、数据、协调节点,节点增加重新路由数据分片,通过ping进行故障检测并选举新节点,Redis主从节点通过路由表分配数据实现主从切换;数据库Mysql主从复制、redis主从复制以及Sentinel+Replication等方式保证集群高可用;redis集群通过互联和二进制协议优化传输,节点下线需超过半数节点检测失效;消息中间件rocketMQ支持多master模式、多master多slave异步复制模式和多master多slave同步复制模式;Kafka通过ISR管理副本和HW机制完成数据同步,zookeeper管理broker和partition节点。
2023-07-23
557
0
0
开发技巧
2023-07-22
Kafka内部构成解析
Kafka通过Zookeeper存储集群的元数据信息,Zookeeper负责维护和协调broker,以及Broker Controller的选举。每个broker在启动时会在ZooKeeper中创建一个节点来注册自己,并监听节点的变化。Controller负责管理分区和主题元数据信息的同步和更新,以及故障转移。Topic在Kafka中用于划分消息的类别,而Partition用于物理存储消息。副本分为领导者副本和追随者副本,追随者副本不对外提供服务,只负责与领导者副本的消息同步。Kafka将Partition进一步细分为多个segment,每个segment包含消息存储文件和索引文件。日志清理策略有delete和compact两种,offset用于定位下一条要读取的消息。整个系统的保证集群每一台broker都缓存最新的元数据信息,保证数据一致性和高可用性。
2023-07-22
425
0
0
开发技巧
2023-07-16
深入理解RocketMQ
RocketMQ是一种消息中间件,与ActiveMQ、RabbitMQ和Kafka相比,它使用Java、Erlang、JavaScript和Scala等开发语言,具有万级到十万级的单机吞吐量。RocketMQ的一大优势是可以支持大量的Topic,即使在同等数量的机器下也能支持大量的Topic。然而,当Topic数量从几十个增加到几百个时,吞吐量会显著下降。Kafka是另一种消息中间件,具有高毫秒级的时效性、高可用性和可靠性,适用于大规模Topic和复杂业务场景。它是分布式的,可以保证消息不会丢失。RocketMQ和Kafka都有各自的优势和劣势,例如RocketMQ功能较为完备,而Kafka在分布式扩展性和可靠性方面表现较好。总体而言,RocketMQ和Kafka都在大数据领域有广泛应用,具有不同的特点和适用场景。
2023-07-16
459
0
0
开发技巧
2023-07-02
ES存储原理和集群介绍
全文检索是指对非结构化数据进行搜索的方法,包括顺序扫描和反向索引两种方式。全文检索的过程包括索引创建和搜索索引两个步骤。在实际应用中,Elasticsearch(ES)和Solr是常用的两种全文检索工具,它们在安装、功能和性能等方面有所区别。ES集群是一个P2P类型的分布式系统,包含多个节点,其中master节点负责管理集群变更,data节点负责存储数据,而协调节点负责查询负载均衡。ES可以将索引划分为多份,并创建副本分片以提高高可用性。集群状态是指集群中的各种状态和元数据信息,包括索引的mappings、settings配置等。元数据对于集群的稳定运行非常重要。
2023-07-02
487
0
0
开发技巧
2023-06-25
Mysql集群的使用场景
本文总结了主从复制的基本原理,包括主库的binlog和从库的relaylog,以及三种日志模式(statement level、row level和mixed)的优缺点。同时还介绍了主从延迟的原因和解决方法,以及读写分离的场景和中间件特征。此外还介绍了分库分表的概念,包括垂直和水平切分的优缺点,以及不同的数据分片和路由类型。总体来说,文章详细介绍了数据库复制、延迟、读写分离和分库分表等方面的内容,对于数据库管理和优化有一定的参考意义。
2023-06-25
650
0
0
开发技巧
2023-06-23
SQL语句如何优化
通过使用慢查询日志功能,可以获取执行时间较长的SQL语句并查看执行计划,然后通过show profile来查看SQL的性能使用情况,进而进行优化。开启慢查询日志需要在配置文件中添加相关参数,并使用mysqldumpslow工具分析慢查询日志。同时,通过explain查看SQL执行计划进行优化,包括合理创建索引、避免全表扫描、优化order by、group by语句以及避免使用count( * )等。此外,在关联表时建立索引、避免使用not in语句等也是优化的关键。通过以上方法,可以提高SQL查询的性能,减少查询时间,提升数据库性能。
2023-06-23
508
0
0
开发技巧
2023-06-23
Mysql锁机制详解:全局、表级和行级
Mysql中的锁可以按照粒度和功能进行区分,包括全局锁、表级锁和行级锁,以及共享锁和排他锁。全局锁用于数据库备份,表级锁和行级锁用于数据操作。innodb引擎支持事务,可以通过不同的参数来实现备份和锁定数据。行级锁包括记录锁、间隙锁和临键锁,用于保证数据的一致性和避免幻读。不同事务的加锁规则和避免死锁的方法也需要注意。通过优化索引、避免不必要的行扫描和快速提交事务等方式可以提高运行速度和减少死锁的发生。详细内容可参考官方文档。
2023-06-23
502
0
0
开发技巧
2023-06-19
索引之争:B+树vs.组合索引vs.覆盖索引,你选择哪个?
索引在数据库中起到了提高数据检索效率和降低IO成本的作用。不同的数据结构实现索引有各自的优缺点,如Hash表适用于等值查询但不支持范围查询,而B+树在等值查询和范围查询方面效果均较好。在MySQL中,不同引擎的索引实现也有所区别,如InnoDB引擎使用B+树构建聚簇索引,而MyISAM引擎的主键索引和辅助索引结构相同。为了避免回表查询,可以创建覆盖索引,提高命中率。建立索引的原则包括频繁出现在where条件、order by、group by语句中的字段以及需要频繁查询的列等。需要注意的是,索引的建立要考虑字段的区分度和长度,避免过多的索引导致更新和插入变慢。综上所述,合理使用不同数据结构和引擎的索引实现,并按照建立索引的原则进行优化,可以有效提升数据库的查询效率。
2023-06-19
475
0
0
开发技巧
2023-06-18
InnoDB内存结构与事务管理
InnoDB是一种常用的数据库引擎,其内存结构包括缓冲池、额外内存池、双写和重做日志。通过配置参数可以设置缓冲池的大小,其中存储了数据页、索引页、undo页等信息以提升数据库性能。另外,插入缓冲、自适应哈希索引等功能也有助于提高插入和查询性能。重做日志缓冲则确保数据写入磁盘时的持久性。检查点机制用于管理缓冲池和重做日志的大小,避免数据丢失。在事务管理方面,InnoDB采用MVCC实现数据一致性,通过undo log和read view来实现多版本并发控制。不同隔离级别下的事务访问不同方式的数据版本,以确保数据的完整性和可靠性。通过对数据的变更记录加上版本记录,可以避免锁的性能影响和死锁问题。总之,InnoDB引擎通过优秀的内存管理和事务控制机制,提供高性能和数据一致性的支持。
2023-06-18
657
0
0
开发技巧
2023-06-04
深入解析MySQL架构:核心要点揭秘
本文介绍了MySQL存储目录的文件结构,包括日志、表空间、数据文件、重做日志和缓冲池。其中,日志文件记录了数据库的操作信息和错误信息;表空间包含系统表空间和用户表空间;重做日志文件用于恢复数据的正确状态;缓冲池用于提高数据库整体性能。此外,还介绍了MySQL的逻辑结构,包括Server层和存储引擎层,以及连接器的作用。在连接数据库时,建议定期断开长连接以释放内存,并合理设置查询缓存以提高性能。
2023-06-04
479
0
0
开发技巧
2023-05-20
Redis高级使用场景:消息队列、发布订阅和事务管理
本文介绍了REDIS在消息模式和队列模式中的应用场景,使用list类型的lpush和rpop实现消息队列时可能存在的问题和解决方法。同时还介绍了REDIS中使用brpop命令、SortedSet发布订阅、Redis Stream等新数据类型的应用。此外,文章还涵盖了Redis事务、命令输入、多个客户端等方面的内容。最后还介绍了REDIS的可编程性,可以使用Lua脚本和Redis函数拓展功能。文章通过详细介绍各种命令和场景,为读者提供了丰富的REDIS应用知识和操作方法。REDIS在消息模式和队列模式中具有广泛的应用,可以满足不同业务场景的需求。
2023-05-20
520
0
0
开发技巧
2023-05-14
Redis持久化与集群演变
REDIS持久化有三种方式:RDB持久化、AOF持久化和混合持久化。RDB持久化是Redis 5.0之前默认的持久化方式,通过配置快照规则来触发持久化操作。其优点是可以最大化Redis性能,但缺点是一旦Redis异常退出会丢失最后一次快照以后更改的数据。AOF持久化是通过将每条更改数据的命令写入AOF文件来实现,可以通过配置规则来决定写入时机,但会降低Redis性能。AOF重写是对AOF文件进行压缩,去除重复操作,减小文件体积。如何选择RDB和AOF取决于业务需求,如果数据不能丢失则需要使用RDB+AOF方式持久化,如果只是缓存服务器则只需要配置RDB混合持久化。Redis 5.0之后默认采用混合持久化方式。
2023-05-14
461
0
0
开发技巧
2023-05-13
REDIS内存模型和使用优化
Redis内存模型使用hash表来管理存放在Redis中的键值对。数据的扩容和缩容是通过多次渐进式的rehash过程完成的。具体步骤如下:首先为ht[1]分配空间,字典同时持有ht[0]和ht[1]两个哈希表,然后通过维持一个索引计数器变量rehashidx来表示rehash工作开始。在rehash进行期间,每次对字典执行操作时,程序会将ht[0]哈希表在rehashidx索引上的所有键值对rehash到ht[1],完成后将rehashidx的值增一。随着字典操作的执行,最终ht[0]的所有键值对都会被rehash至ht[1],此时将rehashidx设为-1,表示rehash操作完成。整个Redis的存储模型包括dictEntry结构存放数据、redisObject对象维护键值对的值和指向具有不同数据结构的数据对象的数据指针。常用的数据类型和编码方式包括整型字符串、小于等于44字节的简单动态字符、大于44字节的简单动态字符串、压缩列表实现的列表对象等。
2023-05-13
669
0
0
开发技巧
2023-05-06
Spring boot如何简化项目搭建
本文介绍了Spring Boot如何通过对容器的定制化升级来简化项目搭建。在Spring Boot应用中,容器启动时会根据应用类型创建不同的应用容器,如Java应用、Web应用和云原生应用。判断应用类型的逻辑在SpringApplication的构建函数中实现。Spring Boot实现了'All in one'的简便,让我们无需重复搭建项目。
2023-05-06
902
1
2
开发技巧
2023-05-05
设计模式怎么记?
本文介绍了创建型、结构型和行为型设计模式在对象构建、功能迭代和业务场景设计中的应用。其中,创建型设计模式包括建造者模式、工厂模式、单例模式和享元模式;结构型设计模式包括装饰器模式、桥接模式、适配器模式、代理模式和组合模式;行为型设计模式包括责任链模式、命令模式、备忘录模式、观察者模式、解释器模式、迭代器模式、中介者模式、访问者模式、策略模式、状态模式和模板模式。每种设计模式都有相应的使用口诀和实际场景应用。总体来说,本文为读者提供了对设计模式在软件开发中的全面了解和应用指导。
2023-05-05
409
0
0
开发技巧
2023-05-05
MVC如何简化请求处理?
本文介绍了在使用servlet开发web项目时web.xml文件的配置以及如何简化配置内容。传统方式下每个servlet需在web.xml中配置,导致文件内容过多。为此,引入了MVC框架的核心组件DispatcherServlet,通过该组件完成所有请求的映射处理。文章列举了spring mvc的配置示例,并详细介绍了DispatcherServlet的操作流程,包括初始化监听器和过滤器、注册请求映射、调用处理方法、渲染视图并返回结果给客户端。最后,文章解析了DispatcherServlet的继承关系和功能,包括HttpServletBean、FrameworkServlet和DispatcherServlet。DispatcherServlet的工作可以分为环境初始化、请求映射注册和请求调用处理三个阶段。
2023-05-05
528
0
2
开发技巧
2023-04-28
AOP如何进行功能增强
该文介绍了动态代理的实现方式,包括使用JDK动态代理和Cglib动态代理的示例代码以及实践。在使用JDK动态代理时,代理的目标是接口,而在使用Cglib动态代理时,代理的目标是对象。此外,还介绍了代理模式的实践,AOP的概念和实现原理。Spring AOP通过动态代理扩展代理对象的功能,通过代理链方式叠加增强器完成对代理对象的拓展。在Spring IOC获取Bean时,通过实现BeanPostProcessor返回对应的代理对象。文章还详细介绍了代理对象的创建流程,包括初始化前置处理和初始化后置处理,通过获取切面和增强器创建代理对象。最后,总结了代理对象创建的两个步骤和增强器获取主要流程,包括获取所有切面、过滤出可用增强器、排序切面等步骤。
2023-04-28
540
0
0
开发技巧
2023-04-22
bean工厂的功能拓展
Spring 中的应用容器 ApplicationContext 在管理 Bean 的过程中提供了更多的功能和灵活性,与传统的 Bean 工厂相比,它实现了资源加载器、环境变量、国际化消息、事件发布器、生命周期等功能接口。通过创建应用容器,我们可以实现环境变量验证、SPEL 属性编辑器、容器级后置处理器、国际化消息、事件发布和监听、生命周期监控等功能。应用容器启动时会调用 refresh 方法,依次进行容器初始化、环境变量验证、Bean 工厂初始化、自定义容器操作等流程。在关闭时,需要发布关闭事件、销毁单例、关闭 Bean 工厂等操作。通过监听容器事件可以实现对容器状态的监听,也可以创建自定义容器并重写相应方法。通过应用容器的功能,我们可以实现更多定制化的操作和管理方式。
2023-04-22
499
0
2
开发技巧
2023-04-16
bean获取&bean工厂职责梳理
本文介绍了如何通过内部类实现流程测试用例,以及Spring配置文件中如何定义嵌套的bean。在调试过程中,发现属性为内部bean时会执行特定处理逻辑,再次调用getBean()方法处理内部bean的依赖对象。内部bean处理代码示例中演示了如何解析BeanDefinitionHolder和BeanDefinition,并获取内部bean的bean定义。通过注册内部bean和保证其依赖对象的初始化,实现了内部bean的处理过程。整体流程清晰,对内部类的处理方式进行了详细讲解,有助于深入理解内部类在Spring框架中的应用。
2023-04-16
482
0
0
开发技巧
2023-04-16
spring如何解决循环依赖
在日常开发中,我们经常会遇到A、B类之间互相依赖的情况。如果需要手动创建这样的对象,就需要按照一定的顺序实例化和赋值,否则会导致循环依赖和内存溢出。为了解决这个问题,可以利用Spring容器的特性,通过配置文件将相互依赖的A、B对象交由Spring容器创建。在Spring中,当创建bean时会将其放入缓存,以便在其他对象创建时获取。通过对bean的初始化过程进行改造,可以实现循环依赖的解决方案。Spring的实现思路与手动创建对象的过程类似,主要是在创建bean时进行缓存处理。通过对bean的单例性和循环依赖进行判断,可以有效解决循环依赖导致的内存溢出问题。
2023-04-16
434
0
2
开发技巧
2023-04-09
spring如何实现依赖注入?
本文主要介绍了在上一篇关于Spring如何实现控制反转的文章中留下的一个拓展问题:如何使用容器创建依赖对象的实例。首先通过手动创建对象的过程和通过Spring容器创建对象的流程进行对比,指出了在Spring配置文件中新增属性集合和属性注入方式等改动点。接着介绍了属性注入和依赖注入两个概念,并说明了它们对代码可读性和维护性的影响。最后,针对新增功能的实现方法进行了详细讨论,并展示了Spring中的属性注入实现原理,以及对应的源码分析。通过对比和解释,帮助读者更好地理解Spring如何实现依赖对象的创建和属性注入过程。
2023-04-09
496
0
0
开发技巧
2023-04-09
spring如何实现控制反转?
摘要:控制反转(Inversion of Control)是一种编程思想,传统的对象创建流程中用户需要使用new关键字来创建对象,而控制反转则是将对象的创建和管理交由框架或容器来完成,实现了对象创建的反转。Spring框架是一个典型的控制反转的实现,通过配置xml文件来定义对象的创建方式,从而提高代码的灵活性和可维护性。为了实现控制反转,需要对配置文件进行解析和对象创建过程进行管理,包括文档加载器、对象定义文档阅读器、对象定义解析器、对象工厂等组件。通过对spring源码的分析,可以了解控制反转的具体实现过程,从而提高代码的可复用性和可测试性。
2023-04-09
706
0
0
开发技巧
2023-04-02
Mybatis如何简化CRUD过程?
本文介绍了Java如何连接数据库的过程,包括加载驱动、创建连接和执行SQL等步骤。对于CRUD操作中的重复操作,需要针对每张表进行处理,将查询结果封装到实体类中,实现数据的持久化。文章还提到了如何避免重复代码和硬编码,面对多样的查询和更新需求应该做到结果集解析一次、多处可用。针对数据库操作的需求实现,提出了解决表对象关系映射、类的持久化、保存结果集和转义数据库信息配置等4个大问题,并给出了实现步骤和对象职责的详细分析。总体而言,本文通过具体案例和步骤展示了如何用最小改动或不改动应对多样需求,提高代码复用性和安全性。
2023-04-02
890
2
1
开发技巧
2023-03-26
记一次logback引发线上的内存报警
最近接手的服务经常出现线上内存溢出问题,导致服务需要频繁重启。经过查看内存使用记录,发现内存占用在上线后1天就达到4G以上,其中大部分内存被char数组占用了61%。这些char数组中存储了大量的日志记录,而由于老服务的日志打印过于频繁,每条日志的大小在6、7K之间。此外,阻塞队列设置得过小,并且没有设置neverBlock导致业务线程阻塞,导致堆文件里充斥着大量日志。通过查看logback的源码可以发现,当存储日志时,logback会先将日志放入阻塞队列中,根据neverBlock的值决定是采用阻塞方式还是非阻塞方式存储。neverBlock为false时,采用非阻塞方式存储,否则采用阻塞方式存储。
2023-03-26
1766
0
0
开发技巧
2023-03-26
java如何连接数据库?
本文主要介绍了如何使用Java连接数据库以及JDK如何规范不同数据库驱动的实现。对于执行SQL操作,需要包括连接数据库、执行SQL、解析结果集等步骤。文章还提到了在java.sql.*中关于SQL相关的接口和工具类的作用。针对查询MySQL数据库的技术方案,包括连接MySQL服务端、执行命令、创建数据库连接、执行SQL及解析返回结果等步骤。文章还介绍了面向对象的实现方式以及数据库驱动、数据库连接、SQL执行器和结果集对象的职责。最后,文章探讨了JDK如何封装数据库驱动、数据库连接、SQL执行器和结果集,以及其他框架如何进一步封装这些对象。文章总结了类加载阶段注册驱动和基于Java socket编程连接数据库的方法。整体来看,本文详细介绍了Java连接数据库的相关知识。
2023-03-26
718
0
0
开发技巧
1
2
3
4
5