自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 系统架构图解

一、Kafka二、Docker三、Kubernetes四、Nginx五、

2021-11-11 23:21:48 3528

原创 如何快速获取Json字符串的深层次属性值?

另外,需要注意JsonElement和JsonObject之间的区别。JsonElement是所有JSON元素(包括对象、数组、原始值等)的抽象基类,而JsonObject表示一个JSON对象。在上面的代码中,我们首先创建一个JSON字符串,并使用ObjectMapper类将其转换为JsonNode对象。在上面的代码中,我们首先创建一个JSON字符串,并使用Gson类将其转换为JsonObject对象。需要注意的是,这里使用了Gson的fromJson方法来将JSON字符串转换为Java对象。

2023-05-03 17:57:08 2359

原创 优秀文章地址

Java 日期相关类

2022-03-14 17:51:31 202

原创 经典排序算法

一、冒泡排序public class 冒泡排序 { public static void bubbleSort(int[] arr){ int len = arr.length; for(int i = len-1; i >= 1; i--){ //只需要进行n-1次排序 for(int j = 0; j < i; j++){ if(arr[j] > arr[j+1]){

2021-12-06 20:05:36 239

原创 Redis的过期键删除策略和内存淘汰策略

一、过期键删除策略定时删除: 在设置键的过期时间的同时,创建一个定时器(timer),过期时间一到就立即执行对键的删除操作优点:对内存是最友好的,保证尽快删除过期键,并释放过期键所占用的内存缺点: 对CPU是最不友好的,在过期键比较多的情况下,删除过期键会占用cpu的较多时间,会对服务器的响应时间和吞吐量造成影响惰性删除: 在获取键的时候对键进行过期检查,如果键过期的话就进行删除优点:对CPU是最友好的,保证对过期键的删除操作只会在非做不可的情况下进行,并且删除目标仅限于当前键缺点:对内

2021-11-29 20:36:33 192

原创 如何保证缓存和数据库的一致性

先删除缓存再更新数据库进行更新操作时,先删除缓存,然后更新数据库,后续的请求再次读取时,会从数据库读取后再将新数据更新到缓存。存在的问题 :从删除缓存数据到数据库更新完成之前的这个时间段内如果有新的读请求过来,就会从数据库中读取旧数据重新写到缓存中,再次造成不一致,并且后续读的都是旧数据。先更新数据库再删除缓存进行更新操作时,先更新MySQL,成功之后,删除缓存,后续读取请求时再将新数据回写缓存。存在的问题:从更新数据库到删除缓存的这段时间内,请求读取的还是缓存的旧数据,不过等数据库更新完成,..

2021-11-29 17:26:26 637

原创 Redis的数据类型和数据结构

数据类型底层存储结构底层存储结构应用场景StringSDS简单动态字符串存储字符串信息ListLinkedlist、Ziplist双向链表、压缩列表消息队列或栈的实现HashHashtable、Ziplist哈希表、压缩列表存储键值对信息SetHashtable、Intset哈希表、整数数组存储非重复元素ZsetZiplist、SkipList压缩列表、跳表热搜榜、基于Timeline的排序Geospatial————...

2021-11-28 20:31:15 1115

原创 Kubernetes架构和资源

一、Kubernetes架构二、Kubernetes资源图片地址:https://www.processon.com/mindmap/618666cd7d9c0828a156e0da2.1 Pod资源2.2 Service资源2.3 Ingress资源2.4 PV和PVC资源

2021-11-06 20:30:03 1676

原创 如何购买阿里云的临时服务器

1.进入阿里云官网的控制台2.选择云服务器ESC3.创建自己的ECS云服务器4.基础配置,由于我这里要搭建Kubernetes集群(一主两从)所以服务器的配置选择2核4G5.网络和安全组的配置(安全组、弹性网卡、IPV6使用默认的就行)6.系统配置7.分组设置就默认就可以了8.确认订单...

2021-10-30 12:38:28 508

原创 Pycharm项目部署以及服务器联网步骤

1.首先Tools->Deployment->Configuration(如图一所示),创建一个远程连接SFTP(设置远程服务器的HOST和Port、username、password等,如图二所示),并设置本地项目在远程服务器上的部署路径(如图四所示),最后设置自动部署(如图五所示),只要Ctrl+s一保存,项目中的更改就会自动上传到服务器!2.将项目中的解释器设置为创建的虚拟环境中的解释器...

2021-10-17 22:35:40 4559

原创 秒杀系统详解

1.2MySQL表格用户信息表用户密码表商品信息表商品库存表订单信息表秒杀信息表(Id;秒杀名称;开始时间;结束时间;秒杀价格;关联商品Id)二、难点解析1.瞬时流量高并发加入限流措施Sentinel,比如对短时间之内来自某一个用户,某一个IP、某个设备的重复请求做丢弃处理;或者某段时间的请求量超过阈值就限制流量的访问2.物品超卖使用Mysql的悲观锁机制select for update防止超卖3.分布式环境下的ID生成UUID雪

2021-10-15 17:11:08 123

原创 计网重点问题

一、DNS1.1 什么是递归查询?主机向本地域名服务器的查询一般都采用递归查询,所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份向其它根域名服务器继续发出查询请求报文,而不是让主机自己进行下一步的查询,因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。1.2 什么是迭代查询?本地域名服务器向根域名服务器的查询通常是采用迭代查询(iterative query).迭代查询的特点是这样的

2021-10-07 19:30:41 602 1

原创 Synchronized的底层实现原理

一、Synchronized 核心组件Wait Set:那些调用 wait 方法被阻塞的线程被放置在这里;Contention List:竞争队列,所有请求锁的线程首先被放在这个竞争队列中;Entry List:Contention List 中那些有资格成为候选资源的线程被移动到 Entry List 中;OnDeck:任意时刻,最多只有一个线程正在竞争锁资源,该线程被成为 OnDeck;Owner:当前已经获取到所资源的线程被称为 Owner;!Owner:当前释放锁的线程二、重量.

2021-09-17 11:35:14 346

原创 Redis为什么这么快

1. 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,查找和操作的时间复杂度都是O(1);2. 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁和释放锁操作,不会因为可能出现的死锁而导致性能消耗;4. 使用多路I/O复用模型,非阻塞IO;多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流

2021-09-16 14:46:31 146

原创 Java线程池详解

一、线程池的好处1、 降低资源消耗2、提高响应速度3、 方便管理线程复用、控制最大线程数、管理线程二、三大方法import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; // Executors工具类、3大方法public class Demo01 { public static void main(String[] args) { ExecutorService th

2021-09-15 13:53:26 156

原创 JVM专题全解

一、GC的三个流程1.什么时候进行垃圾回收2.那些对象可以被回收引用计数法:根可达法:3.如何进行回收

2021-09-10 22:57:35 242

原创 缓存穿透、缓存击穿、缓存雪崩

一、缓存穿透1.什么是缓存穿透缓存穿透的概念很简单,例如用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中(秒杀),于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。(缓存查不到数据——>给持久层数据库造成极大压力)2.缓存穿透的解决方案第一种解决方案: 布隆过滤器,它是一种数据结构,以hash形式存储所有可能查询的参数,在控制层先进行校验,不符

2021-08-10 15:55:06 224

原创 Redis的主从复制和哨兵模式

一、主从复制主从复制是指将一台Redis服务器的数据,复制到其他Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower),默认情况下所有服务器都是主节点。数据的复制是单向的,只能由主节点到从节点,Master以写为主,Slave 以读为主。一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。1. 主从复制的作用1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式2、服务冗余:当主节点出现问题时,可以由从节

2021-08-10 15:03:51 570

原创 Redis的持久化方式

  Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!一、RDB方式Redis会单独创建(fork)一个子进程来进行持久化操作,子进程会先将数据写入到一个临时RDB文件中,持久化过程结束,再用这个临时文件替换旧的RDB文件。整个过程中,主进程是不进行任何IO操作的。这确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性的要求不是非常高,那RDB方式要比AOF方式更加的高效。RDB的

2021-08-10 00:30:10 423

原创 Semaphore、CountdownLatch、CyclicBarrier

一、SemaphoreSemaphore可以用作信号量,控制同时访问共享资源的线程数量上限!public static void main(String[] args) { // 1. 创建 semaphore 对象 Semaphore semaphore = new Semaphore(3); // 2. 10个线程同时运行 for (int i = 0; i < 10; i++) { new Thread(() -> { // 3. 获取许可 tr

2021-08-06 00:23:31 124

原创 偏向锁、轻量级、重量级锁

一、Object结构1. 32位虚拟机2. 64位虚拟机

2021-08-01 19:25:03 445

原创 volatile底层实现原理

SA

2021-08-01 13:37:53 7632 1

原创 多种锁的概念

死锁、活锁、自旋锁、可重入锁、不可重入锁、轻量级锁、重量级锁、乐观锁、悲观锁、公平锁、非公平锁

2021-07-30 23:47:15 185

原创 链式编程、函数式接口、lambda表达式、Stream流式计算

1.链式编程链式编程是将多个操作通过点号"."链接在一起成为一个整体,从而更加的简洁方便。链式编程的原理就是每个操作完成后都会返回一个this对象,也就是返回对象本身!StringBuffer builder = new StringBuffer();builder.append("blake") .append("bob") .append("alice") .append("linese") .append("eve");2.函数式接口

2021-07-28 20:27:02 3968

原创 MySQL事务和数据库三范式

一、事务二、事务并发产生的问题脏读幻读不可重复读二、事务隔离级别

2021-07-20 22:31:04 110

原创 如何解决并发环境下集合的线程安全问题?

一、COW思想二、ArrayList部分1.使用Vector代替ArrayList:Vector是线程安全的List<String> list=new Vector<>();2.使用Collections.synchronizedList()将ArrayList转换为线程安全的List<String> list=Collections.synchronizedList(new ArrayList<>());3.CopyOnWrite:使用时复制

2021-07-20 14:40:06 262 1

原创 HashMap、ConcurrentHashMap源码解析

哈希算法哈希算法(也叫散列算法),任意长度的值通过哈希算法会变得到一个固定的key(地址),之后可以将数据存储在该位置上。简单地说,它通过将关键码值映射到表的一个固定位置上,以加快查询速度!              比如说Hashcode就是一个具体的哈希算法,它首先会计算出一个字符串的ascii码,之后进行取模(节省空间并且不会超出哈希表的下标),算出它存储在哈希表中的下标(如下图所示)。哈希表在JDK1.8之前HashMap的底层结构采用的是哈希表。但是当HashMap存储大量数据的时候哈

2021-07-18 17:28:42 286 1

原创 Synchroniazed和Static Synchroniazed区别

Synchroniazed:Synchroniazed如果加在方法上表明是对当前实例对象加锁,在这种情况下当前实例的所有同步方法(Synchroniazed)无法被同时访问,涉及到的只有一个实例对象!Static Synchroniazed:Static Synchroniazed如果加在方法上表明是对当前实例的Class对象 (全局唯一) 加锁,在这种情况下该类所有实例的静态同步方法(Static Synchroniazed)无法被同时访问,涉及到该类的所有实例对象!pulbic class Test

2021-07-18 16:57:25 153 1

原创 MySQL索引详解

一、索引的本质索引的本质是一种数据结构,也就是组织数据的一种方式!二、创建表首先创建含有四个字段(a,b,c,d)的数据表tb1,并向其中插入一些数据。CREATE TABLE tb1( a INT PRIMARY KEY, b INT, c INT, d INT)ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO tb1 VALUES(1,2,4,5);INSERT INTO tb1 VALUES(2,4,7,6);INSERT INTO

2021-07-16 16:37:28 292 1

空空如也

空空如也

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

TA关注的人

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