- 博客(513)
- 资源 (19)
- 收藏
- 关注
原创 【数据库】MySQL的卸载
【前言】MySQL的卸载是个很头疼的问题,我们常常会因为卸载不干净导致重新安装无法进行。MySQL的卸载无形中浪费了我们很多宝贵的时间,下面是我卸载的全过程、感觉还是挺实用的。第一步:打开控制面板、找到MySQL,将其卸载。第二步:删除安装目录下的的my.ini文件及所有文件。第三步:Windows +R 运行“regedit”文件,打开注册表编辑器。1、
2016-05-28 22:48:20 1722 6
原创 没有伞的孩子必须努力奔跑!
想想自己也不小了,终将会迈入社会。也许这一刻来的比预想的稍早一些,但这是我们必须经历的!一个人如果没有自己的思想,那么这个人可能永远也不会长大。因为我们不可能永远生活在别人的臂膀下。一个有想法的人不一定能够成功,但我坚信一个有所作为的人必定是有思想的人(对各种事情有自己独特的见解)。当踏出校园的那一刻,我们也曾感到我们在这个社会上是如此渺小的一部分。所有的事情都得自己解决,社会
2015-10-15 15:44:30 3161 38
转载 3分钟理清QPS、TPS、RT、吞吐量以及它们直接的关系
如在手机上打开淘宝,在t1时刻点击商品查询按钮,客户端请求服务器获取商品数据然后客户端展示商品信息结束的时刻t2为止,那么t2-t1的时间间隔就是系统RT。RT的数值大小直接反映了系统的快慢。如淘宝上下单商品的时候,每当用户下单请求被服务器接受到之后,服务需要保存订单、扣减商品库存、确认支付等等这一些列的操作都完成之后并成功返回给客户端的过程,这就构成了一次事务。QPS是一个非常重要的指标,在618电商平台在大促期间,服务器需要处理大量用户请求,我们可以通过服务器的QPS来评估服务器的处理能力。
2024-10-30 15:42:48 25
转载 程序员必须了解的消息队列之王——Kafka
Kafka 是由 Apache 软件基金会开发的一个开源流处理平台。Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。Kafka 是一个分布式的流处理平台。
2024-10-29 16:48:22 45
转载 多个Kafka消费者如何同时消费相同Topic下的相同Partition的数据?
看似一个简单的问题,竟然把这位读者问懵了!今天,我们就一起来说说这个面试题,好了,开始今天的主题。
2024-10-29 15:29:02 11
转载 希音面试:Redis脑裂,如何预防?你能解决吗?(看这篇就够了)
Sentinel 任务二:切换主库- Sentinel 任务三:通知- 4.3:master故障转移的 总体流程- 4.4:哨兵模式的 Sentinel 集群脑裂- 4.5:哨兵模式下的 redis master脑裂?脑裂(Split-Brain)是一个形象的比喻,好比“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”。在分布式系统中,因为网络分区或节点故障导致节点之间的通信断开,进而导致数据一致性问题。
2024-10-29 10:05:05 23
转载 网易一面:Eureka怎么AP?Nacos既CP又AP,怎么实现的?
Eureka 使用 Peer to Peer 模式进行数据复制。Eureka 通过 http header就是 HEADER_REPLICATION 解决循环复制问题。Eureka 通过 lastDirtyTimestamp 解决复制冲突。Eureka 通过心跳机制实现数据修复。Distro 协议是 Nacos 针对临时实例数据开发的⼀致性协议。数据存储在缓存中,并在启动时进行全量数据同步,定期执行数据校验。遵循 Distro 协议的设计理念,每个 Distro 节点均能接收读写请求。
2024-10-29 09:15:08 12
原创 Kafka原理以及分区分配策略剖析
偏移量是一种元数据,它是一个不断递增的整数值,在创建消息时,Kafka会把它添加到消息里。index文件记录的是数据文件的offset和对应的物理位置,正是有了这个index文件,才能对任一数据写入和查看拥有O(1)的复杂度,index文件的粒度可以通过参数log.index.interval.bytes来控制,默认是是每过4096字节记录一条index。这种分配方式明显的一个问题是随着消费者订阅的Topic的数量的增加,不均衡的问题会越来越严重,比如上图中4个分区3个消费者的场景,C0会多分配一个分区。
2024-10-28 15:00:31 884
转载 【面试被虐】游戏中的敏感词过滤是如何实现的?
今天主要将了 trie 树以及 trie 树的一些应用,还要就是如何通过 trie 树来实现敏感词的过滤,至于代码的实现,我这里就不给出了,在实现的时候,为了防止这种”麻 痹"或者“麻¥痹”等,我们也要对特殊字符进行过滤等,有兴趣的可以去实现一波。
2024-10-28 08:54:55 14
原创 Mysql索引结构前缀匹配原理
通过B+树索引的层次结构,查询优化器可以高效地定位到以John开头的叶子节点,从而加速前缀匹配查询。对于10个汉字的字符串,B+树索引的定位过程与较短字符串类似,但需要考虑更长的前缀匹配。查询优化器可以根据字符串的顺序,高效地定位到以特定前缀开头的叶子节点,从而加速前缀匹配查询。
2024-10-25 08:38:40 899
转载 SpringBoot 实现动态切换数据源,这样做才更优雅!
这两个方法,翻看源码我们会发现其实就是在使用ThreadLocal时使用了栈,这样的好处就是能使用多数据源嵌套,这里就不带大家实现了,有兴趣的小伙伴可以看看Mybatis-plus中动态数据源的源码。上述代码已经实现了添加数据源的方法,那么我们来模拟通过从数据库表中添加数据源,然后我们通过调用加载数据源的方法将数据源添加进数据源Map中。通过执行结果,我们通过@DS也进行了数据源的切换,实现了Mybatis-plus动态切换数据源中的通过注解切换数据源的方式。来移除当前线程已设置的数据源。
2024-10-23 09:05:58 91
转载 面试官:单例Bean一定不安全吗?
默认情况下,Spring Boot 中的 Bean 是非线程安全的。这是因为,默认情况下 Bean 的作用域是单例模式,那么此时,所有的请求都会共享同一个 Bean 实例,这意味着这个 Bean 实例,在多线程下可能被同时修改,那么此时它就会出现线程安全问题。Bean 的作用域(Scope)指的是确定在应用程序中创建和管理 Bean 实例的范围。也就是在 Spring 中,可以通过指定不同的作用域来控制 Bean 实例的生命周期和可见性。
2024-10-20 16:51:56 26
转载 Mybatis的一级缓存与二级缓存
一级缓存是SqlSession级别的缓存。在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的SqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个SqlSession中,不同的SqlSession中的缓存是互相不能读取的。一级缓存的工作原理图解:用户发起查询请求,查找某条数据,SqlSession先去缓存中查找,是否有该数据,如果有,读取;如果没有,从数据库中查询,并将查询到的数据放入一级缓存区域,供下次查找使用。但。
2024-10-20 16:37:42 18
转载 MySQL原理-Join原理
若被驱动表连接字段有索引:join算法使用,若开启mrr和BKA,则用的是BKA算法若被驱动表连接字段无索引:join算法使用一般选取小表作为驱动表,小表是真实小:连表操作时的一块内存,可以通过调整MRR优化:回表操作是一个主键回表一次,无批量主键回表操作。MRR用将主键排好序后回表将磁盘随机读转为顺序读,从而提升速度。
2024-10-20 09:20:42 17
转载 每日一学:Redis主从、哨兵、 Cluster集群一锅端!
捡田螺的小男孩今天跟小伙伴们一起学习Redis的主从、哨兵、Redis Cluster集群。Redis主从Redis哨兵Redis Cluster集群。
2024-10-18 08:20:33 33
转载 Kafka零拷贝技术-为什么那么快?
零拷贝技术作为一种优化数据传输的方法,通过减少数据在内存中的拷贝次数和上下文切换的次数,显著提升了数据传输的效率。DMA技术的引入进一步提高了数据传输的速度和系统的并发处理能力。在同样的硬件条件下,传统文件传输和零拷拷贝文件传输的性能差异,你可以看到下面这张测试数据图,使用了零拷贝能够缩短 65% 的时间,大幅度提升了机器传输数据的吞吐量。在这个过程中,数据从硬盘读取到内核缓冲区后,通过mmap映射到用户空间的内存区域,然后直接写入到socket中,避免了数据从内核缓冲区到用户空间缓冲区的拷贝操作。
2024-10-17 17:02:47 34
转载 MySQL 中 聚集索引、非聚集索引、覆盖索引、索引下推 到底是什么
回表查询主要针对于非主键索引的情况下,在主键索引中叶子节点包含了主键和数据行信息。但是非主键索引的叶子节点就不是包含主键和数据行信息了,而是索引和该数据的主键ID,所以要拿到完整的行信息,就需要再拿着主键去主键索引中查询一次获得数据,这个过程就叫做回表查询。了解到这里就可以先来看下聚集索引和非聚集索引了。上面讲述的 聚集索引 和 非聚集索引主要关注点在单索引上的设计不同,而 覆盖索引 和 索引下推,则会关注到 联合索引 或 多个索引 的情况下。
2024-10-17 09:13:40 29
转载 5分钟带你了解RabbitMQ的(普通/镜像)集群原创
让我们深入探讨RabbitMQ的集群配置,了解各种集群模式的利弊。本次讨论的重点是帮助您快速理解RabbitMQ集群的运作方式,以及选择最适合您需求的模式。好的,话不多说。在RabbitMQ中,即使只有一个节点,该节点的服务也会被作为一个集群来处理。这意味着单节点系统也遵循集群架构的规范,确保一致性和可扩展性。而多节点的集群有两种方式:普通集群和镜像集群(也称主从集群)。通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。
2024-10-16 10:48:43 30
原创 Mybaits系列全解
Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件。Mybatis系列全解(四):全网最全!Mybatis系列全解(六):Mybatis最硬核的API你知道几个?Mybatis系列全解(三):Mybatis简单CRUD使用介绍。Mybatis系列全解(二):Mybatis简介与环境搭建。Mybatis系列全解(八):Mybatis的动态SQL。Mybatis系列全解(七):Dao层两种实现方式。Mybatis系列全解(一):手写一套持久层框架。
2024-10-14 15:03:47 267
转载 如何实现Redis和Mysql中数据双写一致性-异步Canal+延迟双删
这种方案下,在数据库更新成功后到删除Redis缓存数据之前的这段时间中,其他线程读取的数据都是旧数据,等Redis删除缓存后会重新从数据库中读取最新数据同步到Redis,这样可以在一定程度上保证数据的最终一致性。直到Redis中缓存的数据过期之后才可以从数据库中获取最新的到Redis中。经过上述的过程就导致了Redis的数据和数据库中的数据不一致了,即就是Redis中存放的依据是老数据。在redis一般写的场景下对数据的更新操作是不推荐使用的,推荐使用删除缓存数据的操作,因为删除操作的效率更高。
2024-09-12 16:41:38 81
转载 Mysql一张表可以存储多少数据
在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。2:一个页为16kb = 16 * 1000 byte。1: 主键索引为ID,ID假设为bigInt, 则需要8byte的字节存储,加上指向子节点的指针6byte(固定)。4:第一层是一个页,第二层为1170个页。因为最后一层是存储数据的,假设每行数据为1kb。也就是第二层,可以存储 1170 * 1170 = 1 368 900节点。
2024-09-11 09:15:57 100
转载 Mybatis的一级缓存与二级缓存
一级缓存是SqlSession级别的缓存。在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的SqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个SqlSession中,不同的SqlSession中的缓存是互相不能读取的。一级缓存的工作原理图解:用户发起查询请求,查找某条数据,SqlSession先去缓存中查找,是否有该数据,如果有,读取;如果没有,从数据库中查询,并将查询到的数据放入一级缓存区域,供下次查找使用。但。
2024-09-04 10:00:13 179
转载 SpringBoot 启动流程
被标注的类等于在Spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个Spring的上下文环境。回顾整体流程,Springboot的启动,主要创建了配置环境(),并基于以上条件,在容器中开始实例化我们需要的Bean,至此,通过SpringBoot启动的程序已经构造完成。注解,其中Registrar类的作用是将启动类所在的包下的所有子包组件扫描注入到spring容器中。文件中找到所有的对应配置类,然后将这些自动配置类加载到spring容器中。
2024-09-04 09:30:32 119
原创 为什么HashMap会产生死循环?
HashMap 死循环发生在 JDK 1.7 版本中,形成死循环的原因是 HashMap 在 JDK 1.7 使用的是头插法,头插法 + 链表 + 多线程并发 + HashMap 扩容,这几个点加在一起就形成了 HashMap 的死循环,解决死锁可以采用线程安全容器 ConcurrentHashMap 替代。
2024-09-01 16:59:47 684
转载 Mysql数据库Buffer Pool缓冲池详解
Innodb 存储引擎设计了一个缓冲池(,来提高数据库的读写性能。Buffer Pool 以页为单位缓冲数据,可以通过参数调整缓冲池的大小,默认是 128 M。Innodb 通过三种链表来管理缓页:Free List (空闲页链表),管理空闲页;Flush List (脏页链表),管理脏页;LRU List,管理脏页+干净页,将最近且经常查询的数据缓存在其中,而不常查询的数据就淘汰出去。;
2024-09-01 16:32:32 647
原创 JVM为什么使用元空间替换了永久代
性能优化:元空间的实现采用了更高效的数据结构和算法,例如使用指针碰撞(Bump the Pointer)的方式分配内存,减少内存碎片化,提高内存分配的效率。永久代内存溢出:在永久代中,存储类的元数据、常量池、静态变量等,当应用程序加载大量类或者使用大量字符串常量时,可能导致永久代内存溢出。总的来说,元空间相对于永久代来说具有更好的内存管理、更高的性能和更灵活的特性,能够更好地满足现代应用程序的需求。虚拟机使用元空间替代了永久代是因为永久代在过去的实现中存在一些问题和限制,而元空间提供了更好的性能和灵活性。
2024-08-31 19:52:26 367
转载 面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
相比于传统读写锁多出来的乐观读是StampedLock比 ReadWriteLock 性能更好的关键原因。StampedLock 的乐观读允许一个写线程获取写锁,所以不会导致所有写线程阻塞,也就是当读多写少的时候,写线程有机会获取写锁,减少了线程饥饿的问题,吞吐量大大提高。不过,需要注意的是StampedLock不可重入,不支持条件变量 Condition,对中断操作支持也不友好(使用不当容易导致 CPU 飙升)。
2024-08-31 10:07:06 63
原创 为什么wait/notify必须与synchronized一起使用?
wait()、notify()和notifyAll()是Java中用于线程间通信的方法,它们必须与synchronized关键字一起使用。接下来笔者将详细解释为什么要这样使用。在Java中,synchronized关键字用于实现线程的互斥访问,即同一时刻只能有一个线程执行被synchronized关键字包裹的代码块或方法。这样可以确保在共享资源上的操作是线程安全的。wait()方法用于使当前线程进入等待状态,直到其他线程调用相同对象的notify()或notifyAll()方法来唤醒它。
2024-08-29 18:25:09 304
转载 嘿,同学,你要的 Java 内存模型 (JMM) 来了-volatile
我们在开发时会经常遇到这样的场景,我们开发完成的代码在我们自己的运行环境上表现良好,但是当我们把它放在其它硬件平台上时,就会出现各种各样的错误,这是因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。为了解决这个问题,Java 内存模型(JMM)的概念就被提出来了,它的出现可以屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果,实现平台的一致性,使得 Java 程序能够。
2024-08-29 17:15:46 66
转载 为什么HashMap会产生死循环?
如果多个线程尝试同时修改HashMap,可能导致不一致的状态,例如:一个线程在调整hash表的大小,另一个线程在执行插入或删除,这可能导致死循环或其他问题。
2024-08-29 11:29:06 46
原创 Spring Boot |如何让你的 bean 在其他 bean 之前完成加载
Spring Boot |如何让你的 bean 在其他 bean 之前完成加载
2024-08-18 16:58:14 91
转载 Redis中pipeline(管道)详解
redis管道pipeline举个例子: 小卖铺免费让你拿50瓶饮料,你是一次拿一瓶拿回家,还是打包一次或者多次拿回家?
2024-08-17 17:48:51 52
转载 Redis6.0使用了多线程还能保证线程安全么?-Redis6.0 多线程精讲
lazyFree 主要包括有:flushDb操作,flushall,berewriteaof,删除大key等操作,采用多线程去单独做这些事情,主线程只负责关系的解除,子线程在后台默默的异步执行这些耗时的操作。的性能瓶颈,那么为什么还要引入多线程呢?但是redis并没有直接上多线程IO去处理这些,而是在多线程之前引入了LazyFree机制。安全的 一句话总结:多线程只用在了IO读写上面,redis命令执行还是单线程执行。有很多同学就有疑问了,既然官方都表示CPU不是。
2024-08-17 17:32:54 42
转载 紧急生产问题:线上kafka百万消息积压如何处理
大家在日常开发中,是否处理过大批量消息积压的问题呢?它一般由于代码bug(比如消费逻辑处理有误)、或者生产者的生产速度大于消费者的消费速度(如大促、抢购等活动期间导致消息数量激增,或者消费者处理速度极慢),就可能导致生产环境出现百万、甚至千万的消息积压。那么,假设发生kafka百万消息堆积,如何解决呢?先排查是不是bug,如果是,要快速修复优化消费者代码逻辑临时紧急扩容,新建临时topic对于线上kafka 消息大量积压的问题,我总结了这几点:我们要做好监控和告警,
2024-07-31 09:17:56 231
转载 JVM垃圾回收-实战篇
在开始实践之前我们有必要先简单了解一下 JVM 参数配置,因为本文之后的实验中提到的 JVM 中的栈,堆大小,使用的垃圾收集器等都需要通过 JVM 参数来设置先来看下如何运行一个 Java 程序首先我们通过将其转成字节码其次我们往往会输入java Test这样的命令来启动 JVM 进程来执行此程序,其实我们在启动 JVM 进程的时候,可以指定相应的 JVM 的参数,如下蓝色部分。
2024-06-27 08:54:45 47
原创 当Synchronized遇到这玩意儿,有个大坑,要注意!
在某技术平台上看到别人提的关于 Synchronized 的一个用法问题,我觉得挺有意思的,这个问题其实也是我三年前面试某公司的时候遇到的一个真题,当时不知道面试官想要考什么,没有回答的特别好,后来研究了一下就记住了。所以看到这个问题的时候觉得特别亲切,准备分享给你一起看看:程序逻辑也很简单,是一个模拟抢票的过程,一共 10 张票,开启两个线程去抢票。票是共享资源,且有两个线程来消费,所以为了保证线程安全,TicketConsumer 的逻辑里面用了 synchronized 关键字。
2024-05-16 16:14:41 464
jce_policy-8.AES加密版本.zip
2021-04-22
百度分布式id 代码uid-generator
2020-04-26
SpringBoot-Demo-master.zip
2019-07-29
Java多线程编程技术
2018-03-26
整合spring和mongodb用到的包和配置文件
2017-04-17
UML建模工具JUDE
2015-11-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人