自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

EchoYa!的博客

喜欢技术分享和知识总结,求大佬指点

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

原创 Oracle: 更改Oracle字符集从UTF-8变成16GBK

【代码】Oracle: 更改Oracle字符集从UTF-8变成16GBK。

2024-05-31 15:41:54 469

原创 解释 RESTful API,以及如何使用它构建 web 应用程序?

然后,您可以使用编程语言(如 JavaScript、Python、Java等)和框架(如 Express.js、Flask、Spring等)来实现这些端点,并处理来自客户端的请求。它使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE)来进行操作,并且遵循一组约定和规范,使得不同系统之间可以轻松地进行通信和交互。总的来说,使用 RESTful API 可以使得不同系统之间的通信更加简单和高效,同时也提供了一种灵活和可扩展的方式来构建 web 应用程序。

2024-05-23 11:15:05 124

原创 Oracle数据库迁移-怎样将原服务器数据迁移到另一个服务器?

传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;我们就会在我们安装Oracle配置之前的DUMPDIR的目录下得到一个 data20220523.dmp 和data20220523.log 这两个文件就是我们导出的Oracle数据泵。IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.

2024-05-23 09:51:47 1274 2

原创 Spring Boot是如何启动Tomcat的?

2. Spring Boot会根据项目中的配置文件(如application.properties或application.yml)配置Tomcat的相关参数,如端口号、上下文路径等。3. Spring Boot会自动扫描项目中的Servlet、Filter、Listener等组件,并注册到Tomcat的Servlet容器中。6. 整个过程由Spring Boot自动完成,开发者无需手动配置Tomcat,简化了项目的部署和启动流程。1. Spring Boot会在应用启动时自动加载Tomcat的相关依赖。

2024-05-21 10:06:15 476

原创 tomcat启动过程是什么?

5. 当有客户端请求到达时,Tomcat会根据配置文件找到对应的Web应用,并将请求交给对应的Servlet处理。2. Tomcat会初始化各个组件,如连接器(Connector)、容器(Container)等。1. Tomcat服务器启动时会加载配置文件,如server.xml和web.xml。6. Servlet会生成响应并返回给客户端,完成一次请求处理过程。4. Tomcat会启动监听端口,等待客户端连接。3. Tomcat会创建线程池来处理客户端请求。

2024-05-21 09:13:12 272

原创 为什么使用消息队列? - 消息队列有什么优点和缺点? - Kafka、ActiveMQ、RabbitMQ、RocketMQ的简单介绍

它支持广泛的语言和平台,并具备很好的可扩展性和可靠性。RocketMQ:RocketMQ是阿里巴巴开源的分布式消息队列系统,具有高吞吐量、低延迟和高可用性的特点。Kafka:Kafka是一个高吞吐量的分布式消息队列系统,主要用于构建实时流数据管道和可靠的数据集成。异步通信:使用消息队列可以实现异步通信,发送者将消息放入队列后即可继续处理其他任务,而不需要等待接收者的响应。延迟:由于消息队列的异步特性,消息的传递可能会引入一定的延迟。需要额外的组件和配置来搭建和管理消息队列,这可能增加开发和运维的工作量。

2024-05-16 15:50:52 390

原创 为什么要使用 kafka?为什么要使用消息队列?

消息队列则可以帮助系统实现解耦和异步通信,提高系统的可靠性和性能,同时支持削峰填谷和流量控制等功能。消息队列可以设置限流策略,如限制每个消费者的消费速率、设置最大队列长度、拒绝过多的请求等,以确保系统在承受范围内处理流量,避免系统过载。3. Broker:Kafka 集群中的每个服务器节点都是一个 Broker,负责存储消息和处理消息的读写请求。通过消息队列的削峰填谷和流量控制功能,系统可以更好地应对突发流量和高负载情况,保证系统的稳定性和可靠性。削峰填谷和流量控制是通过消息队列来实现的。

2024-05-15 13:58:25 568

原创 springboot 的装配原理及 starter 怎么二次开发?

对于Spring Boot Starter的二次开发,可以通过创建一个自定义的Starter来扩展Spring Boot的功能。首先需要创建一个新的Maven或Gradle项目,然后在项目中定义需要的配置和Bean,最后打包成一个可用的Starter。通过在项目中引入自定义的Starter依赖,就可以在Spring Boot应用程序中使用自定义的功能和配置。通过按照这些步骤提供必要的配置和Bean,您可以开发一个自定义的Spring Boot Starter来扩展您的Spring Boot应用程序的功能。

2024-05-14 10:30:20 341

原创 HTTP和HTTPS的区别?

在日常使用中,HTTP通常用于传输一些不敏感的数据,例如浏览网页、下载文件等。而HTTPS通常用于传输一些敏感的数据,例如在线支付、登录账户等。许多网站已经将其网页升级为HTTPS,以提高用户数据的安全性和隐私保护。HTTP是一种不加密的协议,数据在传输过程中是以明文形式发送的,容易被窃取和篡改。而HTTPS通过使用SSL/TLS加密技术来保护数据的安全性,确保数据在传输过程中不被窃取或篡改。HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在网络上传输数据的两种协议。

2024-05-14 10:19:38 253 1

原创 IT行业的未来发展趋势将是多元化、创新化和智能化的。

随着技术的快速发展和创新,IT行业已经成为推动全球经济和社会发展的关键力量。在当前全球数字化转型的浪潮下,云计算、大数据、人工智能、物联网、5G通信和区块链等技术正在深刻地改变我们的生活和工作方式。物联网连接了物理世界和数字世界,5G通信提供了更快的网络速度和更低的延迟,区块链技术则改变了数据交换和信任建立的方式,为跨境支付、供应链管理、数字身份验证等领域带来了新的可能性。随着技术的不断进步和应用,IT行业将继续为全球经济和社会发展注入新的动力,推动产业升级和人类社会的进步。

2024-05-13 16:03:16 211 1

原创 什么是RabbitMQ?为什么使用RabbitMQ?RabbitMQ的原理 以及使用场景有哪些?

它实现了高级消息队列协议(AMQP),提供了可靠的消息传递机制。- **可靠性**: RabbitMQ提供了可靠的消息传递机制,保证消息的顺序和一次性传递。- **异步任务处理**: 将耗时的任务放入消息队列,异步处理,提高系统的性能和响应速度。- **解耦系统**: 不同的服务之间通过消息队列实现解耦,减少依赖和提高系统的灵活性。- **解耦应用**: 通过消息队列,不同的应用程序和服务可以实现解耦,降低耦合度。- **异步通信**: RabbitMQ支持异步通信,提高系统的响应性能和并发能力。

2024-05-13 11:31:28 929

原创 InnoDB的MVCC机制是什么?

通过MVCC机制,InnoDB可以实现高并发的事务处理,保证数据的一致性和事务的隔离性。InnoDB的MVCC(Multi-Version Concurrency Control)是一种用于实现事务隔离级别的机制,允许多个事务同时读取同一数据行,同时保持数据的一致性和事务的隔离性。当事务对数据行进行修改时,会在Undo日志中记录该修改前的数据,以便在事务回滚或其他事务需要读取旧版本数据时进行恢复。- 在MVCC中,事务只能看到在其启动时已经提交的数据,而看不到其他事务未提交的数据。

2024-05-13 11:26:01 172

原创 多线程编程的优化策略以及常见的线程安全漏洞及解决方法

通过实施这些优化策略和解决常见的线程安全漏洞,可以提高多线程程序的性能和稳定性。- 解决方法:使用volatile关键字确保可见性,或使用同步机制保证内存操作的顺序性。- 解决方法:避免线程持有多个锁,按照固定的顺序获取锁,或使用超时机制避免死锁。- 当多个线程相互等待对方持有的资源时,可能发生死锁,导致线程无法继续执行。- 使用线程池来有效管理线程,避免频繁创建和销毁线程的开销。- 减少阻塞操作的使用,以避免导致线程争用和降低整体吞吐量。- 考虑使用异步和非阻塞的I/O操作来提高响应性和扩展性。

2024-05-13 09:24:32 411

原创 spring、spring mvc、spring boot 的常用注解以及的作用

**@RestController**: 结合@Controller和@ResponseBody,标记类为REST控制器。- **@Configuration**: 声明一个类作为配置类,替代Spring的XML配置。- **@Qualifier**: 与@Autowired一起使用,指定注入Bean的名称。- **@SpringBootTest**: 用于Spring Boot测试。- **@Bean**: 用于将方法返回的对象注册为Spring Bean。

2024-05-11 10:55:19 377 1

原创 InnoDB 存储引擎原理是什么?

通过这些原理,InnoDB存储引擎提供了可靠的事务支持、高效的并发控制和优化的查询性能,适用于大多数在线事务处理(OLTP)系统。希朿这些信息能够帮助您理解InnoDB存储引擎的基本工作原理。- InnoDB存储引擎支持事务,允许用户通过BEGIN、COMMIT和ROLLBACK等命令来控制事务的提交和回滚。- InnoDB存储引擎遵循ACID(原子性、一致性、隔离性、持久性)特性,确保事务的可靠性和一致性。- InnoDB通过MVCC来实现事务的隔离性,允许读取已提交的数据版本,同时保持数据的一致性。

2024-05-11 10:27:20 323

原创 日常如何做java系统监控,有哪些监控范围

如果您有任何其他问题,请随时告诉我。- **监控工具**:使用监控工具如Prometheus、Grafana、Zabbix等进行系统资源和应用程序性能监控。- **系统资源监控**:包括CPU利用率、内存使用、磁盘空间、网络流量等。- **性能优化**:根据监控数据进行性能优化,提高系统稳定性和性能。- **数据库监控**:监控数据库连接数、查询性能、索引使用情况等。- **服务监控**:监控服务状态、服务调用次数、服务响应时间等。- **缓存监控**:监控缓存命中率、缓存大小、缓存失效率等。

2024-05-11 10:23:47 441

原创 web 应用安全:sql 注入、csrf、XSS, ddos 攻击?

如果您有任何其他问题或需要更多信息,请随时告诉我。- 使用CSRF令牌:为每个用户会话生成唯一的CSRF令牌,并将其包含在每个请求中,以验证请求的合法性。- 使用参数化查询或预编译语句:确保所有用户输入的数据都被视为数据参数,而不是SQL语句的一部分。- 使用CSP(内容安全策略):通过CSP头部来限制页面中可以加载的资源和执行的脚本,增加安全性。- 输入验证和过滤:对用户输入的数据进行验证和过滤,以防止恶意SQL语句的注入。- 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不包含恶意脚本。

2024-05-11 09:48:32 116 1

原创 幂等设计、脱敏设计,加解密,对称加密和非对称加密算法,国密算 法的几种分类、等保三级、电子签名技术、哈希算法

6. **等保三级**:等保三级是中国信息安全等级保护制度中的一级,要求对国家重要信息基础设施、重要数据和关键信息系统进行安全保护。4. **对称加密和非对称加密算法**:对称加密使用相同密钥进行加密和解密,而非对称加密使用公私钥对。5. **国密算法的几种分类**:国密算法是中国政府推行的密码算法标准,包括SM1、SM2、SM3和SM4等,分别用于对称加密、非对称加密、哈希算法和数据加密算法。8. **哈希算法**:哈希算法用于为输入数据生成固定大小、唯一的哈希值。

2024-05-11 09:42:20 238

原创 分库分表用什么框架,怎么拆分的,经常遇到的问题,如何解决表锁和行锁,什么情况下会发生

这些框架提供了自动化的分库分表方案,可以根据配置规则将数据按照一定的规则分布到不同的数据库实例和表中。- 表锁和行锁是数据库中常见的锁机制,用于控制并发访问。- 为了解决表锁和行锁的问题,可以采取一些措施,如优化SQL语句、合理设计索引、减少事务的持有时间等。通过合理选择分库分表框架、制定拆分策略和解决常见问题,可以有效提高系统的性能和扩展性。- 在分库分表过程中,经常会遇到一些常见问题,如跨库查询、事务处理、数据一致性等。分库分表是一种常用的数据库架构设计方法,用于解决数据量过大导致单库性能瓶颈的问题。

2024-05-11 09:30:37 333

原创 安全授权认证框架:spring security ,outh2,shiro,jwt

OAuth2是一种开放标准的授权框架,用于授权第三方应用程序访问用户数据。JWT通常用于在客户端和服务器之间传递身份验证和授权信息,可以在无状态的环境中实现身份验证。- Spring Security是一个功能强大且灵活的身份验证和访问控制框架,用于保护基于Spring的应用程序。- Apache Shiro是一个强大且易于使用的Java安全框架,用于身份验证、授权、加密和会话管理等。这些安全授权认证框架都提供了不同的功能和特性,可根据具体需求选择合适的框架来保护应用程序的安全性。

2024-05-11 09:28:39 422 2

原创 Sql 优化与索引的优化.B+树和 B 树原理是什么?

SQL优化是通过调整SQL查询语句的结构和执行计划,以提高查询性能和减少资源消耗。通过合理设计SQL查询语句、优化索引结构和选择合适的索引类型,可以提高数据库查询性能和减少资源消耗。SQL优化和索引优化是数据库性能优化的重要方面,而B+树和B树是常用的索引结构。- B+树是B树的变种,也用于实现数据库索引。- 叶子节点之间通过指针连接,形成一个有序链表,便于范围查询。- B+树的叶子节点形成了一个有序序列,可以减少磁盘IO次数。- 所有数据都存储在叶子节点中,非叶子节点只存储索引信息。

2024-05-11 09:27:12 346

原创 redis 集群的原理,redis 节点有一个挂了,怎么办?

1. **故障转移(Failover)**:Redis集群通常会配备监控工具(如Redis Sentinel)来监视节点的健康状态。当主节点出现故障时,监控工具会自动触发故障转移,将一个从节点晋升为新的主节点,以确保集群的正常运行。4. **监控和预防**:为了避免节点挂掉带来的影响,建议定期监控Redis集群的健康状态,及时发现问题并采取措施。3. **修复故障节点**:一旦故障节点恢复正常,可以重新将其加入到集群中,让其作为一个从节点,重新同步数据并恢复正常工作。

2024-05-11 09:25:58 616 2

原创 redis 缓存系统如何高可用? redis 穿透、击穿、雪崩的解决方案?

1. **缓存穿透**: 缓存穿透发生在重复请求一个不存在的键时,导致对数据库造成不必要的负载。为了防止缓存穿透,您可以实现一种称为“Cache-Aside”的技术,其中应用程序首先检查缓存,如果找不到键,则从数据库获取数据并将其存储在缓存中。3. **缓存雪崩**: 缓存雪崩发生在大量键同时过期时,导致对数据库的请求突然激增。2. **缓存击穿**: 缓存击穿发生在一个热门键过期或被驱逐出缓存时,导致对数据库的请求激增。3. **集群**: Redis集群是Redis的分布式实现,提供自动分片和复制。

2024-05-11 09:25:15 369 1

原创 jvm 的锁优化、java 的锁、synchronize 和 lock 接口区别是什么?

如果您有任何问题,请随时提出。- synchronized关键字在底层通过监视器锁(Monitor)实现,每个Java对象都有一个关联的Monitor对象,当线程进入synchronized代码块时,会尝试获取对象的Monitor锁。- synchronized关键字的优点是使用简单,不需要手动释放锁,JVM会自动管理锁的获取和释放。- Lock接口提供了更多的功能,如可重入锁、公平锁、读写锁等,可以更好地满足不同场景的需求。- Lock接口的优点是提供了更多的功能和灵活性,适用于复杂的多线程场景。

2024-05-11 09:23:38 249 1

原创 进程和线程的区别,如何实现线程通信?

2. 线程(Thread)是进程中的一个执行单元,一个进程可以包含多个线程,线程共享进程的内存空间和资源,每个线程有自己的堆栈,但共享进程的数据段、代码段和其他资源。2. 信号量(Semaphore):信号量是一种用来控制多个线程对共享资源访问的同步机制,通过信号量可以控制同时访问共享资源的线程数量。4. 条件变量(Condition):条件变量是一种用来在多个线程之间传递信号的机制,通过条件变量可以实现线程的等待和唤醒操作。这些是一些常见的线程通信方法,可以帮助多个线程之间进行有效的协作和通信。

2024-05-11 09:22:43 269 1

原创 线程实践有哪些,如何实现线程安全?

然而,多线程编程也会带来一些问题,其中一个主要问题是线程安全性。2. 使用线程安全的数据结构:Java提供了一些线程安全的数据结构,如ConcurrentHashMap,CopyOnWriteArrayList等,可以避免多线程访问时的竞争条件。3. 使用volatile关键字:在多线程编程中,volatile关键字可以确保变量的可见性,避免线程之间的数据不一致。这些是一些常见的多线程实践方法,可以帮助实现线程安全。4. 使用线程池:通过使用线程池可以有效地管理线程,避免线程过多导致资源浪费的问题。

2024-05-11 09:21:12 389 1

原创 设计模式:java 的 23 种设计模式,架构的设计模式 8 种

Java中有23种常见的设计模式,可以分为三大类:创建型模式、结构型模式和行为型模式。以上是Java的23种设计模式和架构设计中常见的8种设计模式,它们可以帮助开发人员更好地设计和实现软件系统,提高系统的可维护性、可扩展性和可重用性。- 模板方法模式(Template Method)- 解释器模式(Interpreter)- 原型模式(Prototype)- 组合模式(Composite)- 享元模式(Flyweight)- 观察者模式(Observer)- 建造者模式(Builder)

2024-05-09 20:53:22 440 1

原创 高并发、高可用的实践,对 CAP/BASE 的理解

另外,BASE理论是对CAP理论的一种补充,它强调基本可用性(Basically Available)、软状态(Soft state)、最终一致性(Eventual Consistency)。在高并发、高可用的实践中,BASE理论提供了一种在分布式系统中实现高可用性和弱一致性的思路,通过逐步达到最终一致性来保证系统的稳定性和可用性。例如,在高并发场景下,可能会选择牺牲一定的一致性来换取更好的可用性,或者通过合理的分区容忍性设计来提高系统的稳定性。高并发、高可用是现代分布式系统设计中非常重要的考虑因素。

2024-05-09 20:52:22 316

原创 一致性协议:RAFT 协议、distro 协议

总的来说,Raft和Paxos协议都提供了在分布式系统中实现共识的机制,确保尽管出现故障和网络分区,所有节点都就系统状态达成一致。每种协议都有其优势和劣势,选择取决于所设计系统的具体要求和约束。一致性协议在分布式系统中起着至关重要的作用,确保所有节点就一个值或决策达成一致。两种常用的一致性协议是Raft协议和Paxos协议。- 它涉及三种角色:提议者、接受者和学习者,其中提议者提出值,接受者接受提议,学习者学习已决定的值。- 它将节点分为领导者、跟随者和候选者,其中领导者负责管理日志在集群中的复制。

2024-05-09 20:51:33 301

原创 微服务架构的优势,有哪些挑战或技术难点?

5. 高可用性和容错性:微服务架构通过服务之间的解耦和隔离,提高了系统的可用性和容错性,一个服务的故障不会影响整个系统。3. 技术多样性:微服务架构允许使用不同的技术栈和编程语言来实现不同的服务,提高了开发团队的灵活性和创造力。2. 独立部署和更新:每个微服务都是独立部署和更新的,可以独立开发、测试和部署,降低了对整个系统的影响。5. 监控和调试:微服务架构中的服务数量庞大,需要建立完善的监控系统和日志系统,便于故障排查和性能优化。

2024-05-09 20:50:25 412

原创 微服务治理、异地多活多中心方案有些那些?

异地多活多中心方案是指在分布式系统中,将服务部署在不同地理位置的多个数据中心,并实现跨地域、跨中心的高可用性和容灾能力。通过异地多活多中心方案,可以提高系统的负载均衡能力、容错能力和灾备能力,确保系统在面对地域性故障或灾难时能够保持稳定运行。在异地多活多中心方案中,需要考虑数据同步、服务调用、负载均衡、故障切换等方面的设计和实现。常见的技术方案包括跨地域部署、数据复制、全局负载均衡、灾备切换等。微服务治理包括服务注册与发现、负载均衡、容错处理、流量控制、监控报警等方面,旨在提高系统的可靠性、可用性和性能。

2024-05-09 20:45:59 276

原创 JMM 内存模型的结构、JVM 新生代和老年代的内存空间优化对象内存分配过程,堆内存占用过高的可能原因和解决方案G1 和 CMS 的垃圾回收算法、算法原理、内存空间结构及使用场景

为了优化内存空间的利用,可以通过调整新生代和老年代的大小比例、调整Eden区和Survivor区的比例、调整垃圾回收算法等方式来提高内存空间的利用效率和性能。JVM的内存结构主要包括新生代(Young Generation)、老年代(Old Generation)和永久代(PermGen)(在JDK8及以后版本被元空间(Metaspace)所取代)。JMM定义了线程之间如何交互,以及如何与主内存和工作内存交互。2. 工作内存(Working Memory):每个线程独有的内存区域,包含线程独享的变量副本。

2024-05-09 20:39:00 428

原创 数据库的隔离级别、分布式事务的处理

在2PC协议中,一个协调节点协调多个参与节点的提交或回滚。3. 可重复读(Repeatable Read):该隔离级别确保事务在执行过程中看到的数据保持一致。虽然2PC协议确保了分布式环境中的事务一致性,但也可能引入阻塞和增加的延迟等问题。1. 读未提交(Read Uncommitted):最低的隔离级别,事务可以看到其他事务尚未提交的更改。2. 读已提交(Read Committed):在此隔离级别下,事务只能看到已提交的数据。2. 提交阶段:如果所有节点在准备阶段同意,协调器要求所有节点提交事务。

2024-05-09 20:38:19 286

原创 支付系统的高可用设计,容错设计方案

通过结合以上设计方案,支付系统可以提供高可用性、容错性和稳定性,确保用户在进行支付操作时能够获得良好的体验,并避免因系统故障而导致的损失。6. 容错设计:采用容错设计方案,如重试机制、降级处理、限流等,以应对网络故障、服务不可用等异常情况,确保系统的稳定性和可用性。1. 多节点部署:采用集群部署方式,将支付系统部署在多个节点上,通过负载均衡器分发请求,实现系统的高可用性和容错能力。4. 实时监控:建立监控系统,实时监测支付系统的运行状态和性能指标,及时发现问题并进行处理,确保系统的稳定运行。

2024-05-09 20:34:49 368

原创 高并发、高可用场景的架构设计

以上是在高并发、高可用场景下常见的架构设计策略,通过合理的架构设计和技术选型,可以有效应对大流量和高并发的挑战,提供稳定可靠的服务。1. 分布式架构:将系统拆分成多个独立的服务,每个服务负责特定的功能,通过消息队列或RPC进行通信,实现水平扩展和高并发处理能力。7. 监控和预警:建立监控系统,实时监测系统的性能指标和健康状态,及时发现并解决问题,确保系统稳定运行。5. 异步处理:将耗时操作异步化,通过消息队列或任务调度系统实现异步处理,提高系统的吞吐量和并发能力。

2024-05-09 20:33:16 306

原创 redis 集群某个节点不可用,如何保障后续数据读写不受影响Redis 的集群部署方式有哪些,高可用底层原理是什么?

1. 使用Redis Sentinel:Redis Sentinel是Redis提供的一种高可用解决方案,可以监控Redis集群中的节点状态,当某个节点不可用时自动进行故障转移,确保数据读写的连续性。3. 数据分片:通过Redis Cluster模式,将数据分片存储在多个节点上,当某个节点不可用时,其他节点仍然可以提供服务,确保数据的读写不受影响。2. 数据复制:在Redis集群中,可以配置主从复制机制,将数据备份到其他可用节点,当某个节点不可用时,可以从备份节点读取数据,保证数据的可用性。

2024-05-09 20:31:35 270

原创 使用过哪些乐观锁和悲观锁,Java 锁使用过哪些,分布式锁如何实现,有哪些实现方式,底层原理是什么;并发场景下如果锁住其中一个 key,如何控制 key 不可读?

在并发场景下,如果要锁定特定的键以防止其被读取,您可以实现一个自定义的锁定机制。一种实现方法是使用一个自定义的锁管理器来跟踪已锁定的键,并阻止对其进行访问。当一个键被锁定时,任何尝试读取或修改该键的操作都将被阻塞,直到锁被释放。对于分布式锁,可以使用Redis分布式锁、ZooKeeper锁,或者使用像MySQL或PostgreSQL这样的数据库与唯一索引一起实现。我在项目中使用过乐观锁和悲观锁。另一种方法是使用读写锁,在需要更新键时将其写锁定,阻止任何并发读取,直到写操作完成。

2024-05-09 20:29:16 343

原创 redis 系统不可用了,怎么办? 如何设计一个高可用的缓存系统, 项目中的三级缓存?

内存缓存用于快速读取和写入数据,磁盘缓存用于持久化数据,数据库缓存用于备份数据和提供数据一致性。1. 使用主从复制:通过设置Redis的主从复制机制,可以实现数据的备份和故障转移,提高系统的可用性。4. 事务处理:在更新数据时,使用事务处理机制,保证多个操作的原子性,避免数据不一致的情况发生。1. 缓存更新策略:在数据更新时,需要及时更新缓存数据,保持缓存数据和数据库数据的一致性。2. 缓存失效策略:设置缓存的失效时间,定期刷新缓存数据,避免数据过期导致的一致性问题。

2024-05-09 20:27:17 257

原创 HashMap 的底层原理、HashMap 为什么不是线程安全的,ConcurrentHashMap 是如何实现线程安全的。

例如,当两个线程同时向HashMap中插入键值对时,可能会导致链表(或红黑树)的结构被破坏,或者出现链表的环形引用等问题。ConcurrentHashMap内部将数据分成多个Segment,每个Segment都是一个独立的HashMap,不同Segment之间相互独立,因此在多线程环境下,不同的线程可以同时对不同的Segment进行操作而不会发生冲突。HashMap内部维护一个数组,数组中的每个元素都是一个链表(或红黑树),每个链表(或红黑树)存储具有相同hash值的键值对。

2024-05-09 20:25:53 420

原创 微服务有哪些常用组件,微服务和分布式的区别,与 RPC 框架的区别?

常用的微服务组件包括服务注册与发现、负载均衡、熔断器、API 网关、消息队列等。

2024-05-09 20:24:22 169

空空如也

空空如也

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

TA关注的人

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