自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 收藏
  • 关注

原创 MySQL数据库锁

2.乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断别人有没有去更新这个数据,可以使用版本号等机制。每次操作数据的时候都认为其他人会影响自己,所以每次操作的时候都先加上锁。这样其他人想操作这个数据就要拿到锁。传统型的数据库里面就用到了这种锁机制,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁。主要是为了防止并发错误,根据锁粒度划分,一般分为:行锁、表锁、库锁。乐观锁适用于多是读操作的应用类型,这样可以提高吞吐量。

2024-12-16 00:09:44 180

原创 定位执行效率慢的sql语句

慢查询日志记录了所有执行时间超过long_query_time的sql语句的日志,long_query_time的值默认是10秒(可以通过修改配置文件设置)。index:索引全扫描,MySQL遍历整个索引查找匹配的行(虽然where中没有使用索引,但是查找的列是索引列,只要全表扫描索引即可,直接使用索引树查找数据)打开这个命令之后执行的所有的sql语句,他都能记录下执行时间,并展示出来。1.explain出来的结果中的type字段代表mysql如何查找表中的数据,查找数据记录的大概范围,最优到最差如下。

2024-12-16 00:09:02 299

原创 分表之后保持主键唯一递增

1.还是使用自增id,但是步长根据分片设置,可以想到的缺点就是如果后续在加水平分表,原有的计算逻辑走不通。

2024-12-16 00:06:11 132

原创 MySQL和Redis的数据一致性

1.可以考虑canalServer去拿mysql集群主节点的binlog,再去更新,这样代码层面、dba层面修改数据都可以同步。两个线程同时想要修改db中的某行记录,然后更新Redis,竞争到行锁修改记录之后,怎么保证Redis缓存的更新顺序。T1时刻,缓存已清空,线程2做查询任务,此时发现没有Redis,就去更新了Redis,读取到的依旧是老数据。删缓存->更db->起线程sleep一定时间,再次删缓存。思路是将更新db、更新Redis的操作原子化。线程1准备清空redis,再更新db。

2024-12-16 00:05:45 145

原创 MySQL事务

不可重复读:一个事务前后两次因为另一个事务做了修改或导致读到的数据不同。幻读:一个事务前后两次因为另一个事务做了新增而读取到了多出来的行。1.在手动事务中,如果开启事务,但是不提交或者回滚,就会造成行锁死锁。读未提交:会出现脏读、不可重复读、幻读。脏读:读到了另一个事物中未提交的修改。读已提交:会出现不可重复读、幻读。

2024-12-16 00:03:39 109

原创 mysql索引

1.如果WHERE子句中使用的索引包含了ORDER BY中的列,因为索引本身会对列进行排序,所以ORDER BY中不需要再次使用索引排序;如果WHERE子句中使用的索引没有包含ORDER BY中的列,则ORDER BY中的列无法使用索引,因为一个查询只能选择一个索引,这时候排序就进行了filesort,非常费时。当连接使用索引的所有部分时, 索引是主键或唯一非 NULL 索引时, 将使用该值。比较值可以是常量或使用此表之前读取的表中的列的表达式。用于联表查询的情况,按联表的主键或唯一键联合查询。

2024-12-02 00:07:10 296

原创 MySQL-外键

1.插入数据的时候外键对应的列数据可以为null。

2024-12-01 23:59:18 112

原创 MySQL标识符

1.第一个字必须是 字母 、下划线 、@和#开头。

2024-12-01 23:58:48 108

原创 MySQL复合索引

当 select * from T where a = 1 and b = 3 的时候, 数据库系统可以直接从索引文件中直接二分法找到 A = 1 的记录,然后再 B = 3 的记录。2.在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。1.首先,需要明确的是:最左前缀原则是发生在复合索引上的,只有复合索引才会有所谓的左和右之分。但如果你 where b = 3 则需要遍历这个索引表的全部。

2024-12-01 23:58:27 280

原创 MySQL关键字

3.删除触发器 DROP TRIGER。3.REVOKE用于回收语句或对象许可。1.DROP可用于删除视图。2.CLOSE用于关闭游标。

2024-12-01 23:54:11 103

原创 ON和WHERE

1.ON作用于生成临时表的时候,而WHERE用于临时表生成之后。

2024-12-01 23:53:41 118

原创 MySQL JOIN

('1004' , '张三' ,'2000-08-06' , '男');('1006' , '王五', '2000-08-06' , '女');('1011' , '李四', '2002-08-06' , '女');('1009' , '李四', '2000-01-01', '男');('1010' , '李四', '2001-01-01', '男');('1008' , '张三', '2002-12-01', '女');('1012' , '张三', '2001-12-01', '女');

2024-12-01 23:53:25 218

原创 MySQL - !=和<>

也就不能用<>来比较是否相等,换句话说,使用<>也会排除掉为NULL的结果。

2024-12-01 23:48:39 125

原创 MySQL NULL

1.SUM()和COUNT()均对NULL不敏感。COUNT遇NULL不累加。SUM加NULL和不变。

2024-12-01 23:47:19 116

原创 MySQL查询

1.在查询的时候,如果要select一个临时表再次用于查询,要给它起别名。SELECT的时候如果遇到重复数据,就需要去重,即使用DISTINCT;最后如果要指定返回的查询数据范围、条数则要用LIMIT/OFFSET函数。分组时如果也存在筛选条件,这里就要用HAVING进行分组筛选;先找到要查询表格或连接要查询的表格,因此FROM才是第一步;接下来如果要对查询后的数据进行排序,会用到ORDER BY;然后如果遇到表格有分组的需要,则需要先GROUP BY;接下来是进行条件筛选,所以是WHERE紧随其后;

2024-12-01 23:46:25 261

原创 数据库-事务

1、事务是数据库的最小操作单位。

2024-12-01 23:34:35 121

原创 数据库-存储过程

1.存储过程有IN OUT INOUT参数,后两者可以作为输出参数。调用存储过程之后,可以用select查询该输出参数的值。2.存储过程没有返回值。

2024-12-01 23:32:57 83

原创 数据库-存储函数

1.存储函数有返回值。其可以返回值或者表对象。但是存储函数没有IN、OUT参数。2.因为函数有返回值,可以返回表对象,所以可以跟在from后面。

2024-12-01 23:32:04 82

原创 DCL DDL DML

2.DDL主要的命令有CREATE、ALTER、DROP等,大多在建立表时使用。3.DML包括SELECT、UPDATE等,对数据库里的数据进行操作。1. 数据控制语言DCL,主要用于对用户权限的授权和回收,

2024-12-01 23:24:33 125

原创 数据库-视图

2.视图是虚拟表,是一个依赖于别的表上的寄生表,其本身不存储数据,对视图的操作最终都会转化为对基本表的操作。所以说视图不能是从其他视图导出的。4.数据库存储的是视图的定义,不存放视图对应的数据——视图不存数据。1.视图可以解决检索数据时一个表中得不到一个实体所有信息的问题。3.若基表的数据发生变化,则变化也会自动反映到视图中。

2024-12-01 23:23:54 123

原创 B树、B+树

B树,也就是多路平衡搜索树,它类似普通的平衡二叉树,不同的是B树允许每个节点有更多的子节点,如下图:B树是专门为外部存储器设计的,如磁盘,它对于读取和写入大块数据有良好的性能,所以一般被用在文件系统及数据库中。

2024-11-28 00:44:30 200 1

原创 面试经验2021-12-8

zookeeper本身的话是一个树状的小文件存储系统,服务注册的时候zookeeper会生成永久节点记录下服务,后面有临时节点记录url地址。提供的是高性能和透明化的RPC远程调用方案,还有SOA服务治理方案。项目比较大,做分布式系统,所有的远程服务调用请求都是同步执行的不好,所以引入rocketMQ。他可以提供统一的命名服务,统一的配置管理,统一集群管理,集群选主,服务动态上下线,分布式锁。并发场景下,一定是要加锁的,但是要使锁的粒度比较小,这样的话,就可以考虑分段式锁了。最大的特点就是松耦合。

2024-11-27 01:24:44 141

原创 2022.1.5 法本-曙光-外包岗面试总结

putAll方法用于合并两个map,假如两个map有重复的key值,那么用参数中的map中的key-value覆盖调用者的key-value。

2024-11-27 01:23:21 176

原创 2022.1.5-空港经济区-面试总结

String、list、set、hash、stream。

2024-11-27 01:21:11 111

原创 20230811-快手一面问题总结

2.统一命名服务:Zookeeper可以用来实现命名服务,例如将集群中的机器名称和IP地址进行映射,或者将服务的唯一标识和实际地址进行映射。4.分布式队列:Zookeeper可以用来实现分布式队列,通过创建一个特殊的节点,各个节点可以加入或离开队列,同时队列中的节点可以按照一定的顺序进行排序。3.分布式锁:Zookeeper可以用来实现分布式锁,通过创建一个特殊的节点,各个节点可以竞争同一个锁,从而保证分布式系统中的一致性。但是要考虑数据的离散性,如果选型不好,离散性过低,可能造成不走索引。

2024-11-27 01:20:40 117

原创 日志处理方案

这时候可以把日志收集交给kafka,具体来说可以写一个aop切面去做日志消息生产者,然后配置一定数量的logstash做日志消息的消费者。此时aop切面影响了整体响应速度,也就是同步速度慢,所以要注意异步发送消息,将此日志发送作为一个任务交给一个并发队列,保证有序并且解耦。各个微服务的日志文件收集到logstash再到elasticsearch,最后kibana做可视化。缺点是每个服务节点都要有logstash,有冗余但是不会影响业务,毕竟是完全解耦的。1.ELK+KAFKA解决分布式架构下的日志收集。

2024-11-27 01:18:24 235

原创 高并发-前端层面

在外网中传输我们的数据,都有带宽限制,基本上一个网站,一个网页,静态资源会占用80%的带宽。2.对一些静态资源做压缩处理,比如js的min.js文件这种。1.用CDN,遵循就近原则让用户去最近的节点拿静态资源。2.使用CDN的缺陷:静态缓存资源刷新问题。1.对静态资源做二次压缩。

2024-11-27 01:16:15 269

原创 高并发-后端层面

可以设计这样一个架构,客户端请求到服务端,假设这些请求要2秒执行完,大量请求下服务端没有足够的CPU资源快速相应请求,就把当前服务端作为一个消息生产者,将消息投递给broker,broker再交给消费者去处理,当然不是每种业务都可以这种处理。其中作为生产者的服务端要尽量减少与broker的通信频率,所以要准备一个缓冲区,批量的将消息投递过去,要注意的问题就是可能会造成消息堆积,所以消费者可以考虑配置集群,批量消费消息。3.数据库层面:定位慢查询,进行sql语句优化、索引优化(索引遵循最左匹配原则);

2024-11-27 01:15:47 165

原创 高并发-运维层面

2.整合SkyWalking分布式追踪系统,实现服务器监控,以应对CPU飙高、内存溢出等问题。3.利用分布式追踪系统排查RPC远程调用过程中某链发生错误问题。4.分布式的告警系统也可以整合公众号将预警信息推给开发者。5.构建ELK+Kafka的分布式日志系统。以前做服务心跳,如果宕机了,脚本重启。1.接口集群化-保证高可用。

2024-11-27 01:14:15 95

原创 高并发-访问层面

1.做ddos高防,防止IP爆破。

2024-11-27 01:13:44 232

原创 CPU飙高怎么排查

找到对应服务的抽样器,如下,比较直观,所以业务中的线程最好有对应的名称,方便排查。CAS不合理设计,没有限制自旋次数;乐观锁的重试过程,没有限制重试次数。云服务器上的Redis没修改默认端口,被注入代码挖矿,建议关闭外网访问。并发量过大,比如服务端是tomcat的,访问量超过最大连接数。被ddos攻击,建议限流,ip黑名单,加验证码等。2.windows下有jvisualvm。1.可以使用阿里巴巴的Arthas插件。1.linux下常用的命令top -c。2.常见的CPU飙高的原因。

2024-11-27 01:13:20 251

原创 https和http的区别

访问一个网站需要网站的域名,在浏览器地址栏我们可以看到一串URL:URL可以分为两部分:通信协议和域名地址。

2024-11-25 01:34:35 215

原创 http协议和tcp协议的区别

1.http是应用层协议,主要解决数据的包装问题,是用来给应用之间识别数据的;tcp协议是传输层协议,解决的问题是数据怎么在网络上传输。2.http协议是工作在tcp协议之上的,它是一种无状态的短链接。

2024-11-25 01:32:48 111

原创 分布式事务

进一步讲,可以把这几步操作中必要的做串行化,其他的可以整成异步的,可以用消息队列,设计好重试机制,收到完成消息往下走,如果收到对面的某个回调请求再去处理这样.收到请求的服务是A,最慢的办法,我们在这个请求的接口中串行的调用其他服务中的接口,有异常,或者设计好请求的返回(理想情况,都有可以拿到的返回),就回滚。如果说协调者集群全部宕机,参与者根据超时时间会判断参与失败,回滚,后续可以通过其他方法补偿对应的业务功能。消息消费者,也就是积分服务,要使用手动ACK机制确认消息已经完成。

2024-11-25 01:30:45 303

原创 分布式锁的实现

解决方式:使用临时顺序节点,尝试创建节点时,认为序号最小的成功,其他阻塞的订阅上一个序号的节点,有点类似公平锁。3.羊群效应——比喻一个服务成功获取、释放节点时,其他需要锁的服务需要被唤醒、竞争这个锁,就像追着头羊的羊群一样。之后最小的节点连接关闭之后(1关闭了),订阅该节点的就会生成2,发现2最小,成功获取锁。1.需要设置守护线程进行续命的原因:保证抢到锁的任务执行期间,其他线程抢不到锁,贴一段代码。5.Redis续命,要再开一个线程做定时,同时设置好续命次数,避免死锁。

2024-11-25 01:22:23 108

原创 分布式配置中心

2.对应的bean对象不会立即刷新,需要刷新则需要加上@RefreshScope,原理是从IOC容器中销毁以前的对象,重新注入一个新的bean对象,也可以更改bean对象的生命周期,改成多例的,即加上@Scope("prototype)1.客户端服务启动之后,先去根据服务名称判断本地是否有配置文件的缓存,如果有就使用,如果没有就去发送Http请求拉取配置文件。1.相对于传统的配置文件,使用配置中心可以可以实现不重启服务,更新配置的功能。1.更新nacos上的配置文件之后,本地缓存立马实现了刷新。

2024-11-14 01:12:55 414

原创 Eureka和Zookeeper的区别

这三个特性在任何系统中不可能同时满足,最多同时满足两个,其中P是必须满足的。P:Partition Tolerance-服务对网络分区故障的容错性。C:Consistency-数据一致性;A:Availability-服务可用性。

2024-11-14 01:11:53 149

原创 springcloud和dubbo的区别

技术方面对比 springcloud功能远超过dubbo,dubbo只实现了服务治理(注册与发现)。springcloud实现了很多功能,有21个子项目。 dubbo可以使用zookeeper作为注册中心,实现服务的注册与发现;springcloud不仅可以使用eureka作为注册中心,也可以使用zookeeper作为注册中心。 dubbo没有集成其他功能,只能通过第三方去整合;而springcloud集成了很多功能,比如网关、负载均衡、熔断器,而且可以和git完美集成。 性能方面 dub

2024-11-14 01:05:42 180

原创 springboot和springcloud的区别

springboot是为了解决spring配置文件混乱、冗余、难以管理的问题,简化开发流程。 springcloud主要是解决,微服务之间的协调和配置问题,以及注册与发现、负载均衡、服务保护(熔断、网关)、通信等问题。 springcloud依赖springboot来搭建微服务,springboot使用的是约定优于配置的设计理念,也就是能不配置就不配置,springcloud很大一部分是基于springboot来实现的。 springboot不需要依赖springcloud就可以进行开发,spring

2024-11-14 01:04:31 217

原创 Config

Config的出现就是为了解决这两个问题,它支持配置文件放在内存中(本地),也支持将配置文件放在远程GIT仓库中。1.能不能集中管理微服务的配置?2.能不能实时更新微服务的配置?

2024-11-14 01:03:53 103

空空如也

空空如也

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

TA关注的人

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