- 博客(148)
- 收藏
- 关注
原创 CPU总线的理解
CPU总线(Central Processing Unit Bus)是计算机硬件中的一个重要组成部分,它是连接CPU和其他硬件组件的通道。前端总线(FSB):这是连接CPU和主内存(RAM)以及其他硬件设备的主要通道。如果总线的速度或宽度不足,即使CPU的处理能力很强,也可能因为数据传输的瓶颈而无法充分发挥其性能。后端总线(BSB):这是连接CPU和高速缓存(如L2或L3缓存)的通道。总线的宽度和速度会直接影响CPU的性能。总线宽度决定了CPU一次可以处理的数据量,而总线速度则决定了数据传输的速度。
2023-08-27 15:50:06
1533
原创 操作系统用户态和核心态和CPU上下文切换
操作系统两种状态:用户态和内核态。操作系统的用户态和内核态是操作系统的两种运行状态,出现这两种状态的原因主要是为了对访问能力进行限制,用户态的权限较低,而内核态的权限较高。
2023-08-03 14:12:43
1238
原创 Redis缓存数据库双写不一致问题
Redis双写不一致,也就是数据在缓存和数据库的一致性问题的讨论在业内是讨论得比较热门的,也是比较有争议性的。
2023-04-16 09:09:36
757
原创 Lua脚本
Lua脚本是一个小巧的轻量级的脚本语言,它的设计目的你说为了通过嵌入到应用程序中从而为应用程序提供拓展和定制功能。Lua是由C语言来编写的,几乎所有的操作系统和平台都可以编译和运行Lua脚本语言。在所有脚本引擎中,Lua的速度是最快的。所有它才被作为嵌入式脚本语言。Lua脚本很容易被C、C++代码调用,也可以反过来调用C、C++代码。
2023-04-13 13:41:28
9604
原创 Liunx wget命令
wget命令是Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理等等,使用非常方便。接下来就介绍一下wget的使用方法。
2023-04-13 11:34:06
1090
原创 Redis锁的租约问题
这就是典型的租约机制,用户申请了一个租约时长为lock_timeout的锁,用户可以在租约期间使用完之后正常释放锁,如果说了租约时间,即使用户没有释放锁,Redis也会自动释放锁。
2023-04-13 00:32:46
577
原创 Fail-Fast机制和ConcurrentModificationException并发修改异常
我们可以这样理解Fail-Fast机制,在集合遍历之前,我们先把集合的size,也就是modCount记录下来,在集合遍历之后产生的expectModCount,我们将modCount和expectModCount进行比较,如果不相等,那么就抛出。我们来举个例子:当我们的线程A正在使用iterator去遍历一个ArrayList或者是HashMap的时候,另一个线程B在线程A遍历的时候对该List或者Map进行add、delete、clear,这个时候线程A就很可能会抛出。
2023-04-04 17:31:12
604
原创 说一说ArrayLisst,并基于ArrayList说一下其创建和扩容问题
然后是我们的List,List是Collection的子接口,是一个有序、可重复的集合,List在Java中有两种实现方式,一种是LinkedList,而另一种就是我们的ArrayList,ArrayList是基于索引结构的实现。我们可以先来说一说数组,Array数组,是一种基于索引的数据结构,使用索引来搜索和获取数据是很快的,Array检索和获取数据的时间复杂度是O(1),但是要删除数据的开销却很大,因为删除数据之后需要对数组的数据进行重新排列,删数据之后,后面的元素需要移动到前面。
2023-04-04 17:03:23
724
原创 总结Integer与int的比较
规律一:如果Integer中被赋值的数字不在Integer.cache() 的缓存范围内的话,那么无论是new Integer (),还是Integer.valueOf(),还是 integer = xx;那么相比的时候,都是false。规律二:如果Integer中被赋值的数字在Integer.cache() 的缓存范围内的话,那么 Integer.value()、integer = xx, 都相当于常量,内存位置是一样的,而new Integer()的位置与常量的位置不同。
2023-04-04 11:25:21
164
原创 Java Stack编程小技巧(持续更新)
在编程中我们一直会思考,我们如何将我们的代码写得更加好一些,而不至于一直写那些原生的代码,这样会看起来比较繁琐。其次,这里也总结了一些常用的编程技巧。
2023-03-21 09:50:54
135
原创 MySQL中的Join连接查询
我们在进行表连接查询的时候一般都会使用JOIN xxx ON xxx的语法,ON语句的执行是在JOIN语句之前的,也就是说两张表数据行之间进行匹配的时候,会先判断数据行是否符合ON语句后面的条件,再决定是否JOIN,对参与 Join 操作的基表或视图进行过滤,之后再对两表进行 Join 操作,输出结果集。对于三表或多表 Join,则都是可以拆分为两表 Join 的方式进行处理,最先参与 Join 操作的两个表的 Join 的结果集,以表的形式参与后续的 Join 操作。我们来举个例子来简单理解笛卡尔积。
2023-03-04 02:02:55
2529
原创 分布式ID生成系统
在大多数复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识。而对分布式系统后台数据库的分库分表后需要有一个唯一的ID来表示一条数据或者是消息。那么我们分布式系统ID一般都有哪些需求呢?
2023-02-28 15:14:51
306
原创 Hystrix资源隔离
Hystrix有一项比较核心的功能,就是所谓的资源隔离,资源隔离要解决的核心问题,就是将多个依赖服务的调用分别隔离到各自的资源池中,避免某一个依赖服务的调用因为依赖服务的接口调用的延迟或者失败,导致所有的线程资源全部耗费在这个服务的接口调用上,一旦某个服务的线程资源全部耗尽,就可能导致雪崩效应。信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。
2023-02-21 21:22:51
1268
原创 浅谈使用CDN加速的OSS
使用CDN加速的OSS的好处支持海量存储。OSS的存储空间弹性无限扩展,您无需考虑存储架构升级。用户访问网站资源,全部通过CDN,降低源站压力。从距离客户端最近的CDN节点获取资源,减少网络传输距离,保证静态资源传输速度。
2023-02-18 13:45:17
1696
1
原创 用户管理——认证功能JWT和Session
基于session和基于JWT的方式的主要区别就是用户的状态保存的位置,session是保存在服务端的,而JWT是保存在客户端的
2023-02-17 17:14:15
1194
原创 二十三种设计模式——单例模式
所谓的单例模式,指的是采用一定的手段来保证整个系统中对于某一个类只能存在一个实例对象,并且该类只提供了一个获取其实例对象的方法。
2023-02-16 17:33:01
94
原创 Kafka 消息队列
什么是Kafka?Kafka是一个基于分布式的、具有高吞吐量的发布、订阅模式的消息队列,主要应用于大数据领域,它可以承担大数据的存储、分析和计算。
2023-02-14 15:50:38
3136
原创 Redis 缓存穿透、缓存击穿和缓存雪崩
缓存穿透、缓存击穿和缓存雪崩这三个概念和知识点我们一定要掌握,而且我们也必须掌握其解决方案,因为我们工作中经常会遇到缓存穿透和缓存雪崩的情况。
2023-02-13 15:35:42
1228
原创 布隆过滤器的使用
Redis经常会被问道缓存击穿问题,比较优秀的解决办法是使用布隆过滤器,也有使用空对象解决的,但是最好的办法肯定是布隆过滤器,我们可以通过布隆过滤器来判断元素是否存在,避免缓存和数据库都不存在的数据进行查询访问;也就是说 Guava 的布隆过滤器会根据Funnel 类的定义,计算一个对象的哈希值,放入过滤器。Google 的 Guava 库提供了使用布隆过滤器的 API 类(BloomFilter.class),它是线程安全的。布隆过滤器是用来防止缓存穿透的,我们需要知道如何使用布隆过滤器。
2023-02-13 14:31:48
1058
原创 Java中的类加载机制
首先类的加载是由类加载器完成的,类加载器包括:根加载器(Bootstrap)、拓展加载器(Extension)、系统加载器(System)和用户自定义类加载器。从JDK1.2开始,类加载的过程就采用了双亲委派机制(PDM),双亲委派机制更好了保证了Java平台的安全性,所谓的双亲委派机制是指,JVM自带的Bootstrap是根加载器,其他加载器有且仅有一个父加载器。类的加载首先请求父类加载器进行加载,当父类加载器无能为力时才由其之类加载器进行加载。下面说一下几个类加载器的作用。
2023-02-08 18:17:51
2164
原创 MySQL 5.5版本的两个执行引擎
但是innodb执行引擎中,叶子节点数据区挂载的是真正的行记录,我们可以理解为我们user表中一行一行的记录。如果我们建立非主键索引,首先一样会在我们的idb文件中开辟一个空间去存放非主键索引的数据结构,但是与主键索引不同的是,我们在InnoDB执行引擎中,建立非主键索引的时候,在我们B+Tree数据结构中叶子节点的数据区,挂载的不是行记录,而是当前建立索引的值name和主键的值id,然后拿到这个主键值id,再去我们主键的索引树中去找行记录,过程与主机索引过程一样。因为InnoDB引擎中,主键是聚簇索引。
2023-01-17 17:59:45
921
原创 MySQL索引命中与失效
1、MySQL中索引失效的情况:1、组合索引中不遵循最左匹配原则,带头大哥不在,导致索引失效,全表扫描。2、在索引列上做了函数操作,导致索引失效,全表扫描。3、模糊查询前缀是以%开头的,导致索引失效,全表扫描。4、使用is not null 会导致索引失效。5、使用or时,如果条件查询中其中一个不带索引,导致索引失效,全表扫描。6、使用不等于(!= 或者)的时候,会导致索引失效。7、使用范围查询(>、=、
2023-01-14 21:51:17
3681
1
原创 MySQL最左匹配原则
一般我们组合索引字段数量不建议超过5个,而我们需要理解组合索引的最左匹配原则,我们就可以避免重复创建索引。比如我们建立了(x,y,z)索引,我们就不需要建立(x)索引,(x,y)索引,因为我们建立(x,y,z)索引就相当于建立了(x)索引,(x,y)组合索引,(x,y,z)组合索引。也就是我们不能使用空中楼阁,我们把我们的 age 当成1楼,birthday 当成2楼,sex当成3楼,1楼都不在,我们怎么上2、3楼,这就是最左匹配原则,第一个根本就没有匹配到,后面的就根本不用看了。
2023-01-14 14:15:07
934
原创 聚簇索引和非聚簇索引
而在InnoDB中,聚簇索引的B+树的叶子节点是一个数据页,默认大小为16K,这些叶子节点,也就是数据页的数据其实是一个有序链表,会按照主键递增的顺序来存储。在InnoBD中通过主键来聚簇数据,也就是说聚簇索引的的B+树上的叶子节点所存储的key总是主键值,如果没有定义主键,InnoDB会选择一个唯一的非空索引来代替,如果也没有这样的索引,InnoDB会隐式地定义一个主键来聚簇数据,这个隐式的主键被称为 rowID。讲完聚簇索引,接下来我们来聊一下非聚簇索引,也就是我们平常进程提起和使用的常规索引。
2023-01-13 14:50:03
1745
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人