概述 在主从复制中,一般有一个主数据库(Master)和一个或多个从数据库(Slave),主数据库负责接收和处理写操作,从数据库复制主数据库的日志文件,将写操作在自身的数据库重演,从而实现数据的同步 复制类型 STATEMENT:把主数据库执行的sql复制到从数据库,是默认类型 ROW:直接把数据行复制过去 MIXED:默认复制sql语句,如果发现无法精确复制,就会复制行数据 工作过程 主库数据更新,写入二进制日志文件 从库监听到主库的二进制日志文件发生改变,开启I/O线程向主库请求二进制日志记录; 主库为每个I/O线程开启dump线程,向从库发送二进制日志记录 从库的I/O线程将...

  l3iKMwY9XZmO   27天前   27   0   0 MySQL

查询条件有or 假设在customer_name字段设置了普通索引,执行以下sql: type:ref,possible_keys:idx_customer_name,key:idx_customer_name idx_customer_name索引生效 explainselectid,customer_name,company_namefromt_user_infowherecustomer_name='test_name' type:ref,possible_keys:idx_customer_name,key:idx_customer_name idx_customer_name索引生...

  l3iKMwY9XZmO   2024年03月31日   18   0   0 Java

核心注解 1.@SpringBootApplication 主要用于开启自动配置,它也是一个组合注解,主要组合了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 2.@EnableAutoConfiguration 该注解组合了@Import注解,@Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法把spring-boot-autoconfigure.jar/META-INF/s...

  l3iKMwY9XZmO   2024年03月27日   36   0   0 Java

Spring为开发Java应用程序提供了全面的基础架构支持,它将Java对象交由容器统一管理,从而实现控制反转(IOC)和依赖注入(DI),并提供了一些常用模块如SpringAOP、SpringJDBC、SpringMVC等等 SpringBoot继承了Spring的核心思想,并进一步简化应用开发 Spring和SpringBoot的区别主要有以下: 1.简化依赖 使用Spring开发,为了使用某个第三方组件,有时候需要引入好几个Maven依赖,SpringBoot把第三方组件需要的依赖整合成一个starter方便引入 使用Spring创建Web应用所需的最小依赖项 2.自动装配 Spring...

  l3iKMwY9XZmO   2024年03月25日   13   0   0 Java

HashMap HashMap继承自AbstractMap,实现了Map接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为null。因为key不允许重复,因此只能有一个键为null。HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不相同。HashMap是线程不安全的。 1.哈希表 哈希表基于数组实现,当前元素的关键字通过某个哈希函数得到一个哈希值,这个哈希值映射到数组中的某个位置。哈希函数的好坏直接决定该哈希表的性能 当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,这就是所谓的哈希冲突,也叫哈希碰撞 解决方法如下: 开...

  l3iKMwY9XZmO   2024年02月29日   14   0   0 Java

为什么使用消息队列? 以用户下单购买商品的行为举例,在使用微服务架构时,我们需要调用多个服务,传统的调用方式是同步调用,这会存在一定的性能问题 使用消息队列可以实现异步的通信方式,相比于同步的通信方式,异步的方式可以让上游快速成功,极大提高系统的吞吐量 消息队列的使用场景有如下: 异步处理:以上述用户下单购买商品为例,将多个不关联的任务放进消息队列,提高系统性能 应用解耦:以上述用户下单购买商品为例,订单系统通知库存系统减库存,传统的做法是订单系统调用库存系统的接口,订单系统和库存系统高耦合,当库存系统出现故障时,订单就会失败。使用消息队列,用户下单后,订单系统完成持久化,将消息写入消息...

  l3iKMwY9XZmO   2024年02月27日   41   0   0 Java

概述 所谓接口幂等性就是:在特定场景下,同一条件的多次接口调用,保证操作只执行一次,如果接口没有保证幂等性,在以下场景就会产生问题 前端重复提交:用户进行注册、创建个人信息等操作,由于网络抖动导致页面没有及时响应,用户认为没有成功而多次点击提交按钮,发生重复提交表单请求 接口超时重试:提供外部系统调用的接口,因为网络抖动等原因执行成功但没能及时响应,外部系统发起重试,导致重复调用 消息重复消费:使用消息中间件时,消费者手动ack确认消息被正常消费时,消费者突然断开连接,已经执行的消息会重新放回队列,被其他消费者重新消费 如何实现接口幂等性? 1.防重Token令牌 具体流程如下: 客户...

  l3iKMwY9XZmO   2024年02月19日   61   0   0 Java

概述 随着互联网的发展,软件系统由原来的单体应用转变为分布式应用。分布式系统把一个单体应用拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作。这种分布式系统下不同服务之间通过远程协作完成的事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务 举个例子,使用传统本地事务完成转账逻辑,任一步骤出问题都会回滚 begintransaction; //1.本地数据库操作:张三减少金额 //2.本地数据库操作:李四增加金额 committransation; 但在分布式系统下,就变成这样 begintransaction; //1.本地...

  l3iKMwY9XZmO   2024年02月19日   68   0   0 架构设计

什么是死锁? 死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果没有外力干涉,这些进程将永远无法继续执行 死锁通常发生在多个进程试图同时访问同一资源而无法获取的情况下,例如,进程A需要访问资源C,进程B需要访问资源D,如果进程A获取了资源C的锁,进程B也获取资源D的锁,而进程A需要获取资源D的锁才能继续执行,进程B也需要获取资源C的锁才能继续执行,那么进程A和进程B就会陷入相互等待的状态,导致系统无法继续正常工作 产生死锁的原因 1.竞争不可抢占资源引起死锁 系统中拥有的不可抢占资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局...

  l3iKMwY9XZmO   2024年01月23日   16   0   0 Java

所谓高并发系统,是指能同时处理大量并发请求,并及时响应,从而保证系统的高性能和高可用 那么我们在设计一个高并发系统时,应该考虑哪些方面呢? 1.搭建集群 如果你只部署一个应用,只部署一台服务器,那抗住的流量请求是非常有限的。并且,单体的应用,有单点的风险,如果它挂了,那服务就不可用了 因此,设计一个高并发系统,我们可以采用分布式部署的方式,部署多台服务器,使用负载均衡的方式把流量分流开,让每个服务器都承担一部分的并发和流量,从而提升整体系统的并发能力 2.微服务拆分 所谓的微服务拆分,其实就是把一个单体的应用,按功能单一性,拆分为多个服务模块。比如一个电商系统,拆分为用户系统、订单系统、商品系...

  l3iKMwY9XZmO   2024年01月15日   10   0   0 架构设计

概述 当我们操作Redis发现耗时较长时,原因可能有两个: 服务间存在网络延迟 Redis服务本身存在问题 如果是第一种情况,那么所有服务都会发生网络延迟,只需要联系运维处理即可,这里主要讨论第二种情况 Redis基准性能测试 基准性能指Redis在一台负载正常的机器上的最大响应延迟和平均响应延迟,我们可以找一台同配置的机器,与原机器比较基准性能,看看Redis是不是真的变慢了 从Redis2.8.7开始,redis-cli命令可以追加–intrinsic-latency选项,用于监测和统计某个时间段内Redis的最大延迟 60指的是测试时长为60s,可以任意指定 redis-cli-h...

  l3iKMwY9XZmO   2024年01月10日   13   0   0 NoSQL

概述 当我们在使用缓存时,如果发生数据变更,那么你需要同时操作缓存和数据库,而它们两个又分属不同的系统,因此无法做到同时操作成功或失败,因此在并发读写下很可能出现缓存与数据库数据不一致的情况 理论上可以通过分布式事务保证同时操作成功或失败,但这会影响系统性能,一般很少使用。虽然没办法做到缓存和数据库强一致,但我们可以让他们的数据尽可能在绝大部分时间内保持一致,并保证最终是一致的 缓存更新设计 一般来说都是采用删除缓存的方式更新缓存,这就涉及到先删除缓存还是先更新数据库的顺序问题了 1.先删除缓存,后更新数据库 先删除缓存,后更新数据库,如果数据库没有更新成功,下次读缓存发现不存在,则从数据库...

  l3iKMwY9XZmO   2024年01月03日   11   0   0 Java

概述 ThreadLocal意为本地线程变量,即该变量只属于当前线程,对其他线程隔离 我们知道,一个普通变量如果被多线程访问会存在存在线程安全问题,这时我们可以使用Synchronize来保证该变量某一时刻只能有一个线程访问,从而解决并发安全问题 但如果这个变量并不需要被共享,那么就可以使用ThreadLocal为每个线程提供一个完全独立的变量副本,每个线程只操作自身拥有的副本,彼此互不干扰 简而言之,Synchronized用于线程间的数据共享,同步机制采用采用时间换空间的方式,而ThreadLocal则用于线程间的数据隔离,采用空间换时间的方式 ThreadLocal使用 publicc...

  l3iKMwY9XZmO   2023年12月12日   12   0   0 Java

一条SQL查询语句结构如下: SELECT DISTINCT<select_list> FROM<left_table><join_type>JOIN<right_table>ON<join_condition> WHERE<where_condition> GROUPBY<group_by_list> HAVING<having_condition> ORDERBY<order_by_condition> LIMIT<limit_number> 但真正的执行步骤如下,执行...

  l3iKMwY9XZmO   2023年11月21日   23   0   0 MySQL

概述 Java中的引用类似C语言中的指针,指向一个对象,比如: //person就是指向Person实例“张三”的引用 Personperson=newPerson("张三"); 在JDK1.2以前,Java里的引用是很传统的定义:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该reference数据是代表某块内存、某个对象的引用 这种定义当然没有什么不对,但现在看来显得太狭隘了,比如我们希望描述一类对象:当内存空间足够时,能保留在内存中,如果内存空间在进行了垃圾收集后仍然紧张,则可以抛弃这些对象,很多系统的缓存功能都符合这样的应用场景 JDK1.2对引用的...

  l3iKMwY9XZmO   2023年11月17日   13   0   0 Java

Sleuth简介 随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败 这时需要一个能够监控微服务整个调用链的工具,跟踪一个用户请求的全过程(包括数据采集、数据传输、数据存储、数据分析、数据可视化),捕获这些跟踪数据,构建微服务整个调用链的视图,SpringCloudSleuth就是这样一个工具 服务追踪系统的实现主要包括三个部分: 埋点数据收集:负责...

  l3iKMwY9XZmO   2023年11月02日   36   0   0 Java

日志概念 1.日志文件 日志文件是用于记录系统操作事件的文件集合 1.1调试日志 1.2系统日志 系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹 日志门面 当我们的系统变的更加复杂的时候,我们的日志就容易发生混乱。随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。所以我们需要借鉴JDBC的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日...

  l3iKMwY9XZmO   2023年11月01日   31   0   0 Java

概述 JWT,JavaWebToken,通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输,在数据传输过程中还可以完成数据加密、签名等相关处理 JWT的作用如下: 授权:一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源 信息交换:JSONWebToken是在各方之间安全地传输信息的好方法,因为可以对JWT进行签名,此外,由于签名是使用标头和有效负载计算的,因此还可以验证内容是否篡改 传统的Session认证 1.认证方式 http协议本身是一种无状态协议,这就意味着如果用户向我们的应用提供了用户名和密码进行认证,...

  l3iKMwY9XZmO   2023年11月01日   70   0   0 Java

构造Socket 在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的Socket,构造方法有以下几种重载形式: Socket() Socket(InetAddressaddress,intport)throwsUnknownHostException,IOException Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)throwsIOException Socket(Stringhost,intport)throwsUnknownHostException,IOException Soc...

  l3iKMwY9XZmO   2023年11月01日   53   0   0 Java

构造ServerSocket ServerSocket的构造方法有以下几种重载形式 ServerSocket()throwsIOException ServerSocket(intport)throwsIOException ServerSocket(intport,intbacklog)throwsIOException ServerSocket(intport,intbacklog,InetAddressbindAddr)throwsIOException 参数port指定服务器要绑定的端口(即服务器要监听的端口),参数backlog指定客户连接请求队列的长度,参数bindAddr指定服...

  l3iKMwY9XZmO   2023年11月01日   42   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~