自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LocalDateTime与时间戳转换

讲道理,不管在什么时区,系统获取当前时间的时间戳都是一样的【因为时间戳指的是自 1970 年1月1日以来的秒数,所以无论在哪个时区,同一时间获取的都是相同时间戳】。例如,时间戳0000000000在UTC时区代表的是1970-01-01 00:00:00。时间戳与时间在线转换:http://shijianchuo.wiicha.com/因此在转时间戳的时候,需要先指定自己是哪个时区的本地时间,再去转时间戳。在东八区时区代表的是1970-01-01 08:00:00。

2024-03-29 11:17:22 1929

原创 grep常用命令

来源:https://blog.csdn.net/qq_41657915/article/details/86175757。

2024-01-12 15:40:04 559

转载 【linux命令】删除文件(模糊匹配前缀)

●虽然“-rf”选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用“-rf”选项。来源:https://blog.csdn.net/Rockandrollman/article/details/121237886。确认无误后,使用 rm -rf a。查看要删除哪些文件,防止误删除。命令,删除a开头的所有文件。首先要进到temp目录下。在删除前先使用ls a。

2023-12-05 10:56:32 777

原创 Logger.error方法之打印错误异常的详细堆栈信息

当使用两个参数error(String message, Throwable t),且第二个参数为Throwable时,才会将完整的异常堆栈打印出来。根据方法重载特性,当只输入一个参数时,此对象会被当做Object进行打印输出,如果是Exception e的话,这里直接就toString()。Logger类下有多个不同的error方法,根据传入参数的个数及类型的不同,自动选择不同的重载方法。根据方法重载特性,当第二个参数为Throwable时,会打印出异常信息,并且包含异常堆栈信息。

2023-07-13 17:15:28 1345

转载 CompletableFuture demo

在工作中,常常会调用多个服务或者方法去获取不同的数据,如果传统做法就是串行一个个获取,然后封装返回。我们可以尝试使用CompletableFuture,将多个操作交给异步线程执行,然后主线程等待最长任务完成,将所有结果一并返回即可。

2023-07-12 20:00:09 240

转载 List 与 数组 相互转换

注意该方法的返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。必须是包装类(String、Integer、Character等),不能是基本数据类型了(string、int、char);java.util.Arrays.ArrayList类具有set(),get(),contains()等方法,直接创建一个新的 list 对象,然后使用Collections.addAll( ) 方法。

2023-07-08 22:26:41 7880

转载 关系型数据库与非关系型数据库的区别

关系型数据库是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,数据按照表的形式存储,然后多组表构成了一个数据库。

2023-05-22 11:47:19 184

原创 mysql面试题

当我们向某个索引对应的B+树插入记录,需要先定位到这条记录应该被插入到哪个叶子节点对应的数据页中,确定之后有两种情况:①该页恰好空间足够,能直接插入数据②该页空间不足,不能直接插入数据我们把该页称为页A对于第一种情况,数据可以直接插入页A而不会产生其他影响;对于第二种情况,页A空间不足,但数据需要插入页A,那就需要进行页分裂;页分裂过程创建一个新页B,将页A中的部分数据转移到页B中,这样就页A能空出多余的空间存储新纪录,再将页B添加到叶子节点的链表中;

2023-05-18 20:17:35 445

原创 mysql中的binlog

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。(需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog。一般来说开启binlog日志大概会有1%的性能损耗。

2023-05-18 17:32:56 1051

转载 myql中的Bufffer pool

实际上我们对数据库执行增删改操作的时候,实际上主要都是针对内存里的Buffer Pool中的数据进行的,也就是你实际上主要是对数据库的内存里的数据结构进行了增删改。同时配合了后续的redo log、刷磁盘等机制和操作。所以Buffer Pool就是数据库的一个内存组件,里面缓存了磁盘上的真实数据,然后我们的Java系统对数据库执行的增删改操作,其实主要就是对这个内存数据结构中的缓存数据执行的。

2023-05-17 22:58:41 175

原创 MySQL 数据库面试题

二进制日志(binary log ),记录对 Mysql 数据库执行的所有 更改操作,包括 表结构的变更 和 表数据的修改 等,像 select 这种查询是不会记录 binlog 日志的。binlog 日志采用 追加写 的方式写文件,一个文件写满后新写一个文件,仅在 事务提交前 进行一次写入。生成的 binlog 日志文件可以用于 备份恢复、主从复制 以及 数据审计 等用途。

2023-05-15 16:30:48 454

原创 mysql中的Redo log

mysql 有多种日志,每种日志都有其特定的用途。redolog 是 mysql 存储引擎为 innodb 时,特有的日志。innodb 是 mysql 最常用的存储引擎,它的事务的持久性就是通过 redolog保证的。我们都知道,事务的四大特性里面有一个是持久性,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么 mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。

2023-05-15 16:12:20 1472

原创 RFM模型

R 最近1次消费时间间隔(Recency)F 消费频率(Frequency)M 消费金额(Monetary):一段时间内消费的总金额(“一段时间”通常根据不同应用场景来定)而用这三个指标进行分析的方法就叫RFM模型或者是RFM分析法。例如对于最近消费时间间隔R来说,我们怎样定义标准呢?是小于3天算高呢?还是小于5天算高呢?还是超过20天算低呢?对于这个问题,对于不同的业务场景来说都是不同的,所以,这个时候,我们就得找上我们的业务、运营来讨论定义标准了。

2023-05-15 14:56:14 1508

原创 redis淘汰策略

volatile-lru,针对设置了过期时间的key,使用lru算法进行淘汰。allkeys-lru,针对所有key使用lru算法进行淘汰。volatile-lfu,针对设置了过期时间的key,使用lfu算法进行淘汰。allkeys-lfu,针对所有key使用lfu算法进行淘汰。volatile-random,从所有设置了过期时间的key中使用随机淘汰的方式进行淘汰。allkeys-random,针对所有的key使用随机淘汰机制进行淘汰。

2023-05-14 21:37:35 892 1

原创 RabbitMQ如何保证顺序消费

来源:https://www.bilibili.com/video/BV1zm4y1r7ct/?假如生产者A发送消息1,生产者B发送消息2,生产者C发送消息3,由于是没办法保证顺序性,所以进入队列的顺序可能变成了3,1,2。消费者拿到消息,应该判断redis中上一条消息有没有被消费,如果没有被消费,返回队列,如果被消费,正常消费。接着拿到消息2,发现消息1已经被消费(redis中判断),正常消费,同时把消息2放入redis;接着拿到消息3,发现消息2已经被消费,正常消费,同时把消息3放入redis。

2023-05-14 20:34:14 2114

原创 RabbitMQ如何避免丢失消息

镜像集群模式通过从主节点拷贝消息的方式使所有节点都能保留一份数据,一旦主节点崩溃,备节点就能完成替换从而继续对外提供服务。这解决了节点宕机带来的困扰,提高了服务稳定性,但是它并不能实现负载均衡,因为每个操作都要在所有节点做一遍,这无疑降低了系统性能。再者当消息大量入队时,集群内部的网络带宽会因此时的同步通讯被大大消耗掉,因此对于可靠性要求高、性能要求不高且消息量并不多的场景比较适用。

2023-05-14 17:26:49 2852

原创 产品思维与工程师思维

产品思维就是考虑产品的方方面面,与工程师思维不同的是,产品思维是从用户、痛点、体验、价值的角度来考虑产品的功能。

2023-05-06 13:26:08 851

转载 redis集群扩容

在电商项目双11期间,通常有更多的并发,对redis的请求压力激增,需要更多的redis对外提供服务,但是过了双11,redis压力骤降,为了节省成本,需要撤出部分redis服务!我们可以通过增加和删除redis集群节点来实现redis集群的动态扩容、缩容,增加redis集群的高可用性。原始集群(见下图)由6个节点组成,6个节点分布在三台机器上(本案例仅在一台机器演示!),采用三主三从的模式。

2023-05-04 13:44:35 975

转载 一致性哈希算法

一致性哈希算法也是使用取模的方法,但是取模算法是对服务器的数量进行取模,而一致性哈希算法是对 2^32 取模,具体步骤如下:1.一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为 Hash 环;2.接着将各个服务器使用 Hash 函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置。

2023-04-28 16:57:38 143

转载 线程池的拒绝策略

当线程池的线程数达到最大线程数时,需要执行拒绝策略。例如,某些视频网站统计视频的播放量就是采用的这种拒绝策略。如果是比较关键的业务,推荐使用此拒绝策略,这样子在系统不能承载更大的并发量的时候,能够及时的通过异常发现。丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃。这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异常,及时反馈程序运行状态。如果任务被拒绝了,则由调用线程(提交任务的线程)直接执行此任务。丢弃队列最前面的任务,然后重新提交被拒绝的任务。

2023-04-28 16:39:14 139

转载 MySQL中的LIKE查询能否用的到索引

因为索引是一种有序的 B+ Tree数据结构,叶子节点都是按照顺序从左向右排的,如果使用 like %x% 和 like %x查询的话,不知道开头是哪个,就会去进行全表扫描,这样就很好理解了。在联合索引中,使用 like x% 查询是可以用到索引的,无论是使用覆盖索引还是查询所有的字段,它都是可以使用到索引的,提高查询效率的。使用 like x% 查询是可以用得到索引的,而使用 like %x% 和 like %x 查询是用不到索引的。那么使用 like %x% 和 like %x 查询为什么用不到索引?

2023-04-28 16:24:35 98

原创 spring事务传播机制

调用methodA方法时,因为当前上下文不存在事务,所以会开启一个新的事务。当执行到methodB时,methodB发现当前上下文有事务,将事务A挂起,用自己的事务。PROPAGATION_REQUIRES_NEW:内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。PROPAGATION_NESTED :嵌套事务,外层事务的回滚可以引起内层事务的回滚。【无事务执行,如果当前存在事务,把当前事务挂起】【 外部事务提交, 嵌套事务提交,外部事务回滚,嵌套事务回滚;

2023-04-28 16:06:28 936

原创 Hytrix原理

资源隔离主要指对线程的隔离。Hystrix提供了两种线程隔离方式:线程池和信号量。

2023-04-25 21:56:20 462

原创 springcloud之Feign、ribbon设置超时时间和重试机制的总结

当ribbon超时后且hystrix没有超时,便会采取重试机制。如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。所以要根据上面配置的参数计算hystrix的超时时间,使得在重试期间不能达到hystrix的超时时间,不然重试机制就会没有意义。当我们没有显式配饰feign的超时时间的是时候,如果配置了ribbon的超时时间,则只有这个配置会生效,feign默认的1s超时无效。

2023-04-25 19:46:44 6738 2

原创 JVM调优

6、为了验证自己的猜想,于是准备登录后台去测试下,结果在测试的过程中发现到处订单的按钮前端居然没有做点击后按钮置灰交互事件,结果按钮可以一直点,因为导出订单数据本来就非常慢,使用的人员可能发现点击后很久后页面都没反应,结果就一直点,结果就大量的请求进入到后台,堆内存产生了大量的订单对象和EXCEL对象,而且方法执行非常慢,导致这一段时间内这些对象都无法被回收,所以最终导致内存溢出。4、通过线程进行分析,先找到了几个正在运行的业务线程,然后逐一跟进业务线程看了下代码,发现有个引起我注意的方法,导出订单信息。

2023-04-11 17:40:34 644

原创 spring事务(注解 @Transactional )失效场景

Spring中对注解解析都是基于代理的,如果目标方法无法被Spring代理到,那么它将无法被Spring进行事务管理。Spring生成代理的方式有两种:基于接口的JDK动态代理,要求目标代理类需要实现一个接口才能被代理基于实现目标类子类的CGLIB代理。

2023-04-10 12:02:00 1414

转载 信贷业务流程

信贷业务从业务流转来看,分为贷前、贷中、贷后。在日常工作当中,信贷业务的拆分更加详细,细致到了功能模块,站在个人的角度,信贷业务流程可以拆分为以下节点产品设计、产品营销、获取用户、账号注册、信息收集、授信审批、额度审批、账户冻结/解冻、借款提现、提现审批、发放贷款、贷款计息、征信上报、贷款还款、贷中监控、提额/降额、展期/缩期、催收/委外、贷款核销、结清销户。

2023-04-07 20:11:50 467

转载 海量数据排序,数据量大于内存大小,如何实现排序

对于输入缓存区,当一个块的9M数据全部使用完,载入该块接下来的9M数据,一直到所有的9个块的所有数据都已经被载入到内存中被处理过。则最小的数位于堆顶,移除堆顶元素并写入缓冲区,然后从移除元素的元素所属数组中的下一位进入最小堆,再次移除堆顶进入缓冲区…外排序采用分块的方法(分而治之),首先将数据分块,对块内数据按选择一种高效的内排序策略进行排序。根据内存1G,数据10G,我们将10G数据切分成10份,通过内存调用磁盘的方式,每1G进行排序,排序结束后,我们会得到10个有序的数据数组。

2023-04-07 11:44:38 1058

原创 中奖代码实现

就是把0到1的区间分块,而分块的依据就是物品占整个的比重,再根据随机数种子来产生0-1中间的某个数,来判断这个数是落在哪个区间上,而对应的就是抽到了那个物品。随机数理论上是概率均等的,产生的每个数理论上也应该概率均等,那么相应的区间所含数的多少就体现了抽奖物品概率的不同。(p.s. 当然数目是数不清楚的,具体抽象话了点)来源:https://developer.aliyun.com/article/44578#comment。不同概率的抽奖原理很简单。这个实例的数据可以说明。

2023-04-06 20:48:52 525

原创 抽奖活动实现思路

以奖品有三类为例,分别为A、B、C,库存分别为a、b、c;

2023-04-06 19:30:24 606

原创 mysql慢查询

我们优化的思路是“收集——分析——优化——预防”了解完如何收集慢日志之后,就要开始分析 SQL 了。优化 SQL 的基础手段是 EXPLAIN,我们要收起来在此基础上,针对 SQL 语句定点优化消除。

2023-04-06 14:28:30 465

原创 什么是linux内核态、用户态?

运行在用户空间时进程使用的是用户空间中的堆栈,而运行在内核空间时,进程使用的是内核空间中的堆栈。在用户状态下,进程运行在用户地址空间中,被执行的代码要受到 CPU 的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中 I/O 许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问。以上三点几乎包括所有的情况,比如当 CPU 空闲时,内核就运行一个空进程,处于进程上下文,但运行在内核空间。

2023-03-30 18:56:24 323

原创 synchronized锁应用场景

虽然是通过对象访问的此方法,但是加锁的代码块是类级别的跨对象的,所以锁的范围是针对类,多个线程访问互斥。普通方法作用范围是对象实例,不可跨对象,所以多个线程不同对象实例访问此方法,互不影响,无法产生互斥。作用范围是对象实例,不可跨对象,所以多个线程不同对象实例访问此方法,互不影响,无法产生互斥。静态方法是通过类访问,是类级别的跨对象的,所以锁的范围是针对类,多个线程访问互斥。

2023-03-30 15:38:38 123

原创 什么是区块链

区块链就是一个工具,它本身没有任何价值,也无所谓好坏,就像一个锄头,单独往那一放,产生不了什么价值。但是你用锄头耕作,种菜,种出来的菜有价值。一些加密数字资产,比如比特币,它是利用了区块链这个工具,产出的一个产品,这个产品在很多人心中有价值。很多人认同比特币,那比特币在他们眼里就有价值。但是我们要搞清楚,比特币是个产品,这个产品是用区块链这个工具生产出来的。这是两回事,不要搞混了。那么区块链究竟是一个什么样的工具呢?从本质上来讲,它就是一个数据库。不过这个数据库有点特殊,它是一个分布式的,去中心化的数据库。

2023-03-29 19:33:33 1816 1

转载 Redis主从一致性保证

Redis之所以牛逼,一方面是因为他快,另一方面是因为高可靠性。所谓的高可靠性就是指,尽量的少丢数据,和服务端尽量少中断。AOF和RDB保证了前者,但是不能保证后者。后者是根据什么保证的呢?Redis 的做法就是增加副本冗余量,将一份数据同时保存在多个实例上。即使有一个实例出现了故障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。这里就会产生主从数据一致性的问题。本文主要是研究了Redis 的主从库同步的基本原理,关于全量复制、基于长连接的命令传播,以及增量复制。

2023-03-29 16:21:18 262

转载 吞吐量和延迟

我们先来看一家工厂的装配流水线。工人在流水线将现成的组件按顺序拼接,组装成自行车。通过实地观测, 我们发现从组件进入生产线,到另一端组装成自行车需要4小时。继续观察,我们还发现,此后每分钟就有1辆自行车完成组装,,每天24小时,一直如此。将这个模型简化, 并忽略维护窗口期后得出结论: 这条流水线每小时可以组装60辆自行车。通过这两种测量方法,就知道了生产线的相关性能信息: 延迟与吞吐量:生产线的延迟: 4小时生产线的吞吐量: 60辆/小时。

2023-03-28 12:04:49 152

转载 MySQL 到底是如何加行级锁、间隙锁、临键锁的

查询的记录存在:在用「唯一索引进行等值查询」时,next-key lock 会退化成「记录锁」查询的记录不存在:在用「唯一索引进行等值查询」时,next-key lock 会退化成「间隙锁」

2023-03-23 13:59:27 866

原创 【推理题】扑克牌

结论:由于乙只知道花色,而他一早就知道甲不知道这张牌,说明这张牌的花色为红桃或者方块,因为这两种花色的牌都没有超出上面A、Q、4、5的范围;你从这16张牌中挑出一张牌来,并把这张牌的点数告诉甲,把这张牌的花色告诉乙。结论: 乙知道花色,他根据甲的话能推断出来是哪张牌,说明这张牌是方块5.结论:乙根据花色范围能确定这张牌,说明这张牌不是A;结论:这张牌点数不唯一。黑桃J、8、4、2、7、3。乙:我知道你不知道这张牌。乙:我知道你不知道这张牌。草花K、Q、5、4、6。甲:我不知道这张牌。甲:我不知道这张牌。

2023-03-22 19:51:09 808

转载 重量级锁的8连问

如果使用一个队列冲突的概率会加大,耗费系统资源。默认情况下,线程进入重量级锁的抢锁阶段,第一步就会尝试通过自旋来抢锁,所以默认相当于AQS中的非公平锁。即使自旋时未抢到锁,按照上面讲的cxq出入队逻辑,也是后进先出,正常情况下后进入等待队列的线程会先抢到锁,这一点也是和AQS中相反的。1)如果是notify,唤醒的是waitset的队首节点,如果这时候EntryList不为空,则放入EntryList,否则放入cxq。因为是cxq后进先出,所以被唤醒的线程比等待队列中的线程先出队,会先抢到锁。

2023-03-22 10:28:56 137

转载 MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

唯一索引等值查询:1.当查询的记录是存在的,next-key lock 会退化成「记录锁」。2.当查询的记录是不存在的,next-key lock 会退化成「间隙锁」。非唯一索引等值查询:1.当查询的记录存在时,除了会加 next-key lock 外,还额外加间隙锁,也就是会加两把锁。2.当查询的记录不存在时,只会加 next-key lock,然后会退化为间隙锁,也就是只会加一把锁。

2023-03-21 17:20:52 5554 3

空空如也

空空如也

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

TA关注的人

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