自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis字符串

文章目录redis字符串redis字符串的实现SDS代码结构动态扩展特点redis字符串的优势redis字符串redis字符串的实现redis的基础语言是c语言,但是其中字符串的实现是自己实现的,目的是为了提高性能,增强相应速度。SDS代码结构struct sdshdr{ // 记录已使用长度 int len; // 记录空闲未使用的长度 int free; // 字符数组 char[] buf;};最后一个字符为空字符,但是这个空字符不会

2021-05-24 20:59:45 129

原创 LinkedList

文章目录LinkedList简介源码分析基础属性构造方法node节点增加获取删除修改LinkedList简介LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的,是线程不安全的,允许元素为null的双向链表。源码分析基础属性public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque&lt

2021-04-23 21:02:05 120

原创 ArrayList

文章目录ArrayList简介优缺点ArrayList 和 LinkedList 的区别ArrayList 和 Vector 的区别源码分析基础属性transient构造方法基础方法clonetrimToSizeadd(E e)add(int index, E element)ArrayList简介ArrayList是常用的是数据存储容器,底层是数组,查询效率很高,线程bu’an’q优缺点**优点: **底层是数组,查询的效率很高顺序插入元素时效率很高,自动扩容缺点:插入和删除元素的

2021-04-22 19:23:02 132

原创 分布式锁,进程锁,线程锁

文章目录分布式锁,进程锁,线程锁概念分布式锁的实现缓解数据库压力常用分布式锁分布式锁,进程锁,线程锁概念线程锁: 主要用来给方法和代码块来加锁,多个线程同时访问被加锁的方法或者代码块时,同一时间只有一个线程在执行,其他线程只能访问该对象中的非加锁代码块进程锁: 为了控制操作系统中多个进程访问一个共享资源,可以使用本地系统的信号量控制分布式锁: 当多个进程不在同一个系统中时,使用分布式锁控制多个进程对资源的访问分布式锁的实现分布式锁的实现总是要依赖第三方来存储锁的元数据信息。数据库乐观锁基

2021-04-21 19:26:19 309

原创 消息队列的高可用

文章目录消息队列的高可用RabbtitMQ 高可用消息队列的高可用RabbtitMQ 高可用RabbitMQ有三种模式:单机模式 、普通集群模式、镜像集群模式普通集群模式(非高可用):优点: 可以多个服务消费消息,提高吞吐量缺点: 可能会在rabbitMQ里面产生大量的数据传输,服务器宕机,没法保证可用性镜像集群模式: 高可用,非分布式队列的元数据和消息都会存在于多个实例中,每次写消息到 queue的时候,都会自动把消息到多个实例的 queue 里进行消息同步。也就 是每个节点上都有这个

2021-04-20 22:12:37 184

原创 SpringCloud面试题

文章目录SpringCloud面试题什么是微服务微服务之间的通信SpringCloud 和 DubboSpringBoot 与 SpringCloud熔断与服务降级微服务的优缺点eureka和zookeeper的区别微服务技术栈SpringCloud面试题什么是微服务微服务架构是一种架构模式,将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协调,为用户提供最终价值。服务之间采用轻量级通信。每个服务都围绕具体业务进行构建,并能够独立部署到生产环境等。单独的模块只

2021-04-19 21:01:26 95

原创 降级与熔断

降级与熔断概念熔断类似于电路上的保险丝,当服务出现宕机或者连接超时的情况,为了防止整个微服务挂掉降级对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。异同相同点:都是为了提高系统的高性能和高可用用户都能体验到某些模块功能暂时无法使用不同点:触发原因不同,熔断一般是下游的

2021-04-17 10:32:35 139

原创 高并发流量应对

文章目录高并发流量应对常用方法限流常用方式计数器滑动窗口漏桶令牌高并发流量应对常用方法缓存降级限流限流常用方式计数器在一段时间内,进行计数,与阀值进行比较,到了时间临界点,将计数器清0。滑动窗口把固定时间片,进行划分,并且随着时间的流逝,进行移动,这样就巧妙的避开了计数器的临界点问题。也就是说这些固定数量的可以移动的格子,将会进行计数判断阀值,因此格子的数量影响着滑动窗口算法的精度。漏桶有一个固定的桶,进水的速率是不确定的,但是出水的速率是恒定的,当水满的时候是会溢出的。(ngi

2021-04-16 21:27:20 78

原创 新生代内存

文章目录新生代内存分代工作流程为什么有survivor为什么有2个survivor新生代内存分代工作流程新生代一般采用复制算法,有 3 个分区:Eden、To Survivor、From Survivor,它们的默认占比是 8:1:1老年代一般采用标记整理算法,提高回收效率。新生代默认的空间占比总空间的 1/3,老生代的默认占比是 2/3。新生代:把 Eden + From Survivor 存活的对象放入 To Survivor 区;清空 Eden 和 From Survivor 分

2021-04-15 21:09:55 254

原创 HTTPS

文章目录HTTPS实现原理传输过程为什么数据传输使用对称加密中间人攻击证书证书校验抓包HTTPS实现原理因为 HTTPS 保证了传输安全,防止传输过程被监听、防止数据被窃取,可以确认网站的真实性。证书验证阶段使用的是非对称加密,内容传输时是对称加密。证书验证:浏览器发起https请求服务端返回https证书客户端验证证书是否合法,不合法提示警告数据传输:证书验证合法后,在本地生成随机数通过公钥加密随机数,传输至服务端服务端通过私钥对随机数进行解密服务端通过客户端传入的随机数构

2021-04-14 22:35:08 120

原创 StringBuilder

文章目录StringBuilder线程安全性原因StringBuilder线程安全性StringBuilder与String不是线程安全的,StringBuffer是线程安全的。原因StringBuilder和StringBuffer的内部实现跟String类一样,都是通过一个char数组存储字符串的,不同的是String类里面的char数组是final修饰的,是不可变的,而StringBuilder和StringBuffer的char数组是可变的。 //存储字符串的具体内容 char[] v

2021-04-13 20:00:27 68

原创 finally

finallyfinally一定会执行吗不会在执行try之前直接return执行try之前程序报错try中执行System.exit(0);执行时机finally块执行在try的return之前finally块执行在catch的return之前finally的返回值Java程序会把try或者catch块中的返回值保留,也就是暂时的确认了返回值,然后再去执行finally代码块中的语句。等到finally代码块执行完毕后,如果finally块中没有返回值的话,就把之前保留的返回值返

2021-04-12 20:58:10 62

原创 redis海量数据访问

文章目录redis海量数据访问解决方案redis海量数据访问解决方案keys user_token* 的方式进行查询,redis直接卡死,但线程下顺序执行所有指令,在数据量大的情况下该指令执行的时间较长,而其他指令必须等到该指令执行完才会执行。SCAN cursor [MATCH pattern] [COUNT count]scan 0 match user_token* count 5 scan 游标 MATCH <返回和给定模式相匹配的元素> count 每次迭代所返回的元素数

2021-04-11 09:06:50 220

原创 BigDecimal的精度

文章目录BigDecimal的精度double的精度问题BigDecimalBigDecimal的精度double的精度问题System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4.015 * 100); System.out.println(123.3 / 100); console:0.0600000000000000050.5800000000000001

2021-04-10 19:17:45 646

原创 数据结构

文章目录数据结构数组链表栈队列哈希表树堆图数据结构数组固定大小的结构,只能容纳相同的数据类型。数组自带索引,可以进行随机访问遍历插入删除搜索更新链表相互链接的线性顺序项目序列组成。只能顺序访问,无法进行随机访问。链表中的元素叫做节点每个节点包括一个密钥和一个指向后继节点next的指针head指向链表的第一个元素链表的最后一个元素叫尾单链表: 只能沿正向遍历链表双链表: 可以在前进和后退方向上遍历项目循环链表: 尾的next是头,头的prior是尾栈push:

2021-04-09 19:38:57 89

转载 Nginx

文章目录Nginx概念使用原因高性能原因处理请求的方式正向代理与反向代理优缺点使用场景目录结构属性模块跨域问题虚拟主机配置location的作用限流正常限制访问频率突发限制访问频率限制并发连接数限流算法漏桶算法令牌算法动静分离原因nginx的动静分离负载均衡轮询权重 weightip_hashfairurl_hash配置高可用限制ip访问限制浏览器访问rewrite全局变量Nginx概念Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx

2021-04-08 22:15:46 126

原创 spring的设计模式

文章目录spring的设计模式策略模式工厂模式单例模式代理模式模板方法观察者模式建造者模式spring的设计模式策略模式策略模式: 一个接口下有多个实现类,每个实现类处理的情况各不相同。注意事项:使用@Component注解对当前类进行标注,将其声明为Spring容器所管理的一个bean;声明一个返回boolean值的方法,通过这个方法来控制当前实例是否为处理目标request的实例;声明一个方法用来判断类型;声明一个方法用于处理业务逻辑;传一个对象进行,而不是简简单单的基本类型的变量,

2021-04-07 21:08:07 85

原创 spring的设计模式

文章目录spring的设计模式策略模式工厂模式单例模式代理模式模板方法观察者模式建造者模式spring的设计模式策略模式策略模式: 一个接口下有多个实现类,每个实现类处理的情况各不相同。注意事项:使用@Component注解对当前类进行标注,将其声明为Spring容器所管理的一个bean;声明一个返回boolean值的方法,通过这个方法来控制当前实例是否为处理目标request的实例;声明一个方法用来判断类型;声明一个方法用于处理业务逻辑;传一个对象进行,而不是简简单单的基本类型的变量,

2021-04-06 19:30:34 93

原创 网络面试题

文章目录网络面试题输入url到页面加载发生了什么浏览器与服务器建立tcp连接后是否会在完成http请求后断开?什么情况情况下断开一个tcp连接可以对应几个http请求一个tcp连接中多个http请求可以一起发送吗浏览器对同一host建立tcp连接的数量有没有限制网络面试题输入url到页面加载发生了什么输入地址浏览器查找域名的 IP 地址 这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存…浏览器向 web 服务器发送一个 HTTP 请求服务器的永久重定向

2021-04-05 08:31:59 121 1

原创 序列化反序列化为何要实现Serializable接口

文章目录序列化反序列化为何要实现Serializable接口概念使用情况为何要指定serialVersionUID的值特性序列化反序列化为何要实现Serializable接口概念序列化:把对象转换成字节序列的过程反序列化:把字节序列恢复为对象的过程使用情况只在本地jvm里面运行程序时,是不需要序列化与反序列化的,当我们需要将内存中的对象持久化到磁盘,数据库中,或者与数据库进行交互时,就需要序列化与反序列化了。结论:在对内存中的对象进行持久化或网络传输时,需要用到序列化或反序列化。服务器与

2021-04-04 10:30:26 192

原创 String

**[toc]Stringpublic class Demo1 { public static void main(String[] args) { String st1 = "abc";//常量池中已经创建abc了 String st2 = "abc"; System.out.println(st1 == st2);//true System.out.println(st1.equals(st2)); //true }}Java中==是比较运算

2021-04-03 09:11:08 59

原创 面向对象原则

文章目录面向对象原则单一职责原则开闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特原则面向对象原则单一职责原则一个类负责一个事件,,降低类的复杂度,提高类的可读性,降低系统维护的成本,当需求变动时,可以将更改代码所带来的波动性降至最低开闭原则系统中的对象,类,模块,函数,方法等,对于拓展应该是开放的,但对于修改应该是关闭的。当需求发生改变时,我们应该尽可能地去拓展原来的代码,而不是修改原来的代码。里氏替换原则子类可以拓展父类的功能,但是不能改变父类原有的功能:子类可以实现父类的抽象方法,

2021-04-02 09:41:59 31

原创 Redis和MongoDB

文章目录Redis和MongoDB简介比较Redis和MongoDB简介Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 将数据存储为一个文档,数据结构由

2021-04-01 22:26:03 409

原创 sql优化

文章目录sql优化概念锁MVCC事务建表查询sql优化概念锁数据库解决并发场景的锁: 共享锁(读锁),排他锁(写锁)乐观锁:适用于数据竞争不激烈的场景,读多写少,通过版本号和时间戳实现悲观锁:每次操作都会锁定数据。适用于并发量大的场景表锁:锁定整张表,开销小,但是有严重的锁竞争行锁:开销大,但是可以支持高并发MVCC在InnoDB中,会在每行数据后添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期或者被删除。在可重复读 (repeat

2021-03-31 21:38:44 53

原创 list遍历和删除

文章目录list遍历和删除Iterator遍历list的方式Iterator 和 ListIterator的区别删除list遍历和删除IteratorList<String> list = new ArrayList<>();Iterator<String> it = list. iterator();while(it. hasNext()){ String obj = it. next(); System. out. println(obj);}

2021-03-30 21:41:41 106

原创 redis的过期删除策略

文章目录redis的过期删除策略常见删除策略定时删除策略惰性删除策略定期删除策略redis的过期删除策略惰性删除策略定时删除策略rdb对过期键的处理生成rdb文件载入rdb文件aof对过期键的处理写入重写复制功能对过期键的处理redis的过期删除策略常见删除策略定时删除: 在设置键的过期时间时创建一个定时器,定时器会在时间到来时执行对键的删除操作惰性删除: 放任过期键不管,每次从键空间中获取键时,会检查该键是否过期,过期则删除,没过期则返回定期删除: 每隔一段时间,对数据库进行检查,删除过期键

2021-03-29 21:36:55 60

原创 Lock

文章目录Locksynchronized与Lock的区别源码分析Locksynchronized与Lock的区别类别synchronizedLock结构Java关键字Java类释放锁等待已经获取锁的线程同步完代码后释放锁、线程发生异常,jvm让线程释放锁在finally中释放锁,否则会造成线程死锁获取锁等待其他线程释放锁可以尝试获取锁,不用一直等待锁状态无法判断可以判断锁类型可重入、不可中断、非公平可重入、可判断、可公平性能少量

2021-03-28 10:28:38 98

原创 线程池

文章目录线程池介绍使用原因作用种类及作用newSingleThreadExecutornewFixedThreadPoolnewCachedThreadPoolnewScheduledThreadPool风险死锁资源不足线程泄露使用原则线程数计算cpu密集型程序I/O密集型程序线程池介绍thread pool,是一种线程使用模式,是java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现。线程池是一种多线程处理形式

2021-03-27 09:57:52 55

原创 volatile

文章目录volatile并发特性使用保证可见性保证原子性防止重排序原理可见性实现有序性实现内存屏障volatile并发特性原子性:一个或者多个操作,要么全部执行,要么全部不执行,不能执行中途被打断可见性:当多个线程访问同一个变量时,一个线程修改了变量的值,那么其他线程可以立刻看到有序性:程序按照代码的先后顺序执行使用保证可见性一个线程修改了共享变量值,需要保证其他线程看到,每一个线程都有一个高速缓存去–线程工作内存保证原子性共享的long和double建议设置volatile类型,这

2021-03-25 22:38:42 45

原创 线程协作

文章目录线程协作线程状态waitnotify/notifyAllsleepyieldjoin线程协作线程状态Java中的线程状态可以分为以下5种,new,runnable,running,blocked,dead;new: 线程创建完毕,还没有调用start方法;runnable: 调用start()方法后,线程进入就绪状态;此时由线程调度程序(thread scheduler)调度;running: 运行状态,就绪线程取得cpu执行权,执行run()方法;blocked: 阻塞状态,线程并

2021-03-24 21:24:41 44

原创 ConcurrentHashMap

文章目录ConcurrentHashMap如何保证线程安全简介get操作volatile总结ConcurrentHashMap如何保证线程安全简介在jdk1.7中,ConcurrentHashMap用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现。1.7的锁是基于segment的,包含多个Entry,1.8的锁就是Hash

2021-03-23 21:36:08 72

原创 MySQL行锁和表锁

文章目录MySQL行锁和表锁表锁行锁注意事项间隙锁总结MySQL行锁和表锁MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。MyISAM在执行select时,会自动给所有涉及的表加读锁,在执行update、delete、insert前,会给所有涉及的表加写锁,无需用户操作。读锁:select math from zje where math>60 lock in share mode;写锁:s

2021-03-22 21:34:19 153

原创 可重复读(Repeatable read)能防住幻读吗?

文章目录可重复读(Repeatable read)能防住幻读吗?事务隔离级别事务的并发问题概念幻读和不可重复读的区别乐观锁与悲观锁悲观锁乐观锁数据版本MVCC当前读Next-Key锁可重复读(Repeatable read)能防住幻读吗?事务隔离级别事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)√√√读已提交(read-committed)×√√可重复读 (repeatable-read)××√串行化 (seria

2021-03-21 19:42:23 2117

原创 索引

文章目录索引索引相关语句创建索引查看索引删除索引key_len的计算适用原则explain分析查询语句select_typetypekeypossible_keysrefrows数值类型代替字符串考虑使用ENUM类型索引索引相关语句创建索引CREATE INDEXCREATE INDEX indexName ON tableName (columnName(length));ALTERALTER TABLE tableName ADD INDEX indexName(columnNa

2021-03-20 09:23:07 127 1

原创 MySQL二三事

文章目录MySQLMyISAM与innodbMyISAMInnoDb适用场景MySQL的索引类型int与char的隐式转换MySQLMyISAM与innodbMyISAM不支持事务,但是每次查询都是原子的;支持表级锁,即每次操作对整个表加锁;存储表的总行数;一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。InnoDb支持ACID的事务,支持事务的四种隔离级别;支

2021-03-19 20:04:21 63

原创 Java锁种类和区别

文章目录Java锁种类和区别公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁Java锁种类和区别公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。公平锁的性能会比非公平锁差很多。对于ReentrantLock(可重入锁)而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在

2021-03-18 21:28:41 83

原创 Java引用类型原理

文章目录Java引用类型原理引用类型Reference强引用(FinalReference)软引用(SoftReference)弱引用(WeakReference )虚引用(PhantomReference )Java引用类型原理引用类型JVM将引用类型分为以下4中:强引用(FinalReference)软引用(SoftReference )弱引用(WeakReference )虚引用(PhantomReference )Referenc

2021-03-17 21:03:39 132

原创 BeanFactory和FactoryBean

文章目录BeanFactory和FactoryBean概念区别BeanFactoryApplicationContextBeanFactory获取bean的方式FactoryBeanBeanFactory和FactoryBean概念BeanFactory是接口,提供了OC容器最基本的形式,给具体的IOC容器的实现提供了规范。FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式。 我

2021-03-16 20:32:01 48

原创 ClassNotFoundException 和 NoClassDefFoundError

文章目录ClassNotFoundException 和 NoClassDefFoundErrorClassNotFoundExceptionNoClassDefFoundError总结ClassNotFoundException 和 NoClassDefFoundErrorClassNotFoundExceptionClassNotFoundException是一个运行时异常。从类继承层次上来看,ClassNotFoundException是从Exception继承的,所以ClassNotFound

2021-03-15 22:01:56 275

原创 Mybatis

文章目录Mybatis面试问题#{}和${}的区别是什么Dao接口的工作原理?能否重载?如何分页?分页原理?动态sqlmybatis与Hibernatemybatis优势MyBatis的接口绑定概念实现方式resultType与resultMapMybatis比IBatis的改进点Mybatis面试问题#{}和${}的区别是什么1)#{}是预编译处理,${}是字符串替换。2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;3)

2021-03-14 08:31:33 77

空空如也

空空如也

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

TA关注的人

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