- 博客(13)
- 收藏
- 关注
原创 JAVA面试题整理
值传递是指方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数的值改变不影响实际参数的值。引用传递也成为传地址。方法调用时,实际参数的引用(地址)传递给形式参数,在方法执行中,对形式参数的操作实际是对实际参数的操作,所以形式参数值的改变会引起实际参数值的改变。迭代器是一种设计模式,java迭代器是集合框架的一个接口,给集合提供了一种统一访问元素的方式,从而而不需要了解集合内部数据结构和细节。
2023-11-03 17:19:22
364
原创 HashMap源码笔记
对于一个java程序员,掌握hashmap已经是必备的技能了,今天就带着大家一起来看一下jdk1.8的HashMap的底层源码。1.HashMap的几个常用构造方法(1)public HashMap(int initialCapacity, float loadFactor)loadFactor参数代表负载因子,默认为0.75。HashMap中的数据量/HashMap的总容量(initialCapacity),当loadFactor达到指定值或者0.75时候,HashMap的总容量自动扩展一倍,以此类
2021-11-04 20:43:51
377
原创 死锁的笔记
1、死锁是什么死锁是指两个或者两个以上的线程在执行过程中,互相持有对方所需要的的资源,导致这些线程都一直处于等待状态,如果没有外力的作用,他们将一直阻塞下去,就会进入永久阻塞状态。2、产生死锁的原因但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件:互斥,共享资源只能被一个线程持有。占有且等待,线程1获得了资源X,在等待共享资源Y时,不释放共享资源X。不可抢占,其他线程不可抢占已经获得资源的线程占有的资源。循环等大,线程1等待线程2持有的资源,线程2等待线程1持有的资源。
2021-09-15 21:26:53
162
原创 数据库读写分离笔记
1.如何实现读写分离搞一个主库用来写,挂多个从库,从库用来读,然后主库每次把记录更新到从库。2.读写分离的原理主库每次会写一个binlog日志,然后从库链接到主库以后,从库会有一个IO线程,将binlog日志拷贝到本地,写入到一个中继日志,然后从库中会有一个SQL线程去执行日志里面的内容,在本地执行一遍SQL,这样就保证了自己跟主库数据一致。但是整个过程是串行化的,所以主库同步到从库是存在延迟的。3.mysql读写分离同步数据丢失问题(半同步复制semi-sync复制)主库同步到副库过程中,当主
2021-09-13 20:58:51
158
原创 单库单表到分库分表切换方案和全局ID的生成笔记
单库单表到多库多表切换方案1、停机分库分表 线上停机,此时源库没有数据的变化,将之前写好的导数的工具跑起来,将源库的数据读出来通过分库分表中间件分发到分库分表中去,导入完成之后就ok了,此时就可以修改数据源的配置以及sql之类的改变在上线。2、不停机双写方案 在线上系统里面,把所有增删改相关的操作,除了对老库增删改意外,对分库分表也同步执行增删改操作,同时写两库,系统部署玩以后使用之前的倒数工具,把旧数据读入到分库分表中,同时需要用最后更新时间作为条件,不可以旧数据覆盖新数据,导一轮之后,对新旧数
2021-09-09 22:32:54
628
2
原创 数据库分库分表笔记
1、数据库垂直拆分 把一个大的数据库,根据业务场景将里面的表拆分到多个数据库中,类似于服务拆分,每个服务对应自己的数据库,分为多个服务。2、数据库的水平拆分 将一张很大的表拆分成多个结构相同名字相同,数据量不同的表放入到其他数据库中。 3、表的垂直拆分将一个很多字段的表拆分成成多个表,每个表包含部分字段。4、表的水平拆分...
2021-09-08 22:04:26
124
原创 高并发场景下,双写不一致问题解决办法
一、最基本的保证在进行数据更新的时候,先删除redis里面的缓存数据,然后再去更新我们的数据库,此时如果更新数据了操作失败了,那么我们也可以保证数据库缓存数据的一致性,这是最基本的保证双写不一致问题的办法二、特殊场景...
2021-09-07 21:53:16
379
原创 分布式系统架构组成笔记
1、系统拆分将一个系统拆分为多个子系统,然后每个子系统单独的库。2、缓存必须要用缓存,大并发场景大多数都是读多写少的,可以再缓存写一份,读的时候走缓存就可以减少数据库的压力,对于承载了读请求的场景,使用缓存。3、消息队列MQ必须使用MQ进行削峰,大量的写请求灌入MQ里,排队慢慢玩儿,后边系统消费后慢慢写,控制在mysql承载范围之内。4、分库分表 当QPS在高一点的时候,MQ这边每秒接受10000个请求,而每秒才消费1000个,这时候MQ消费生成严重失衡,大量请求积压在MQ里,那么
2021-09-07 21:46:20
336
1
原创 分布式会话笔记
1、tomcat+redis的方案 在tomcat的配置文件加上在tomcat的配置文件中,配置一下即可。缺点是他过于依赖容器,重藕合tomcat,当我们想换一个服务容器时需要重新写配置文件。2、spring session + redis引入springsession包和redis,给sping session配置基于redis来存储session数据,然后配置了一个spring session的过滤器,这样的话,session相关操作都会交给spring session来管了。接着在代码
2021-09-06 22:31:48
111
原创 分布式锁个人理解
一、redis分布式锁redlock算法,依赖于redis集群,实现原理是客户端向redis里创建一个key算加锁,另一个客户端在进行set的时候如果发现这个key存在那么就返回一个nil,一直重试等待。二、zookeeper分布式锁原理是某个节点尝试创建临时znode,如果创建成功就表示获得了锁,这个时候其他客户端进来就会报错,这个时候客户端创建锁失败,只能注册一个监听器,监听这个锁。释放锁相当于删除这个节点,然后等待的客户端就可以重新创建,获得锁。三、两种锁的比较redis分布式锁,其实需要
2021-09-03 21:05:17
127
原创 zookeeper初识个人理解
zookeeper的作用1、分布式协调 ...
2021-09-02 22:17:22
126
原创 关于双写不一致问题的个人见解
一、保证双写一致性的最简单的办法在做数据操作的时候,我们一般都是先删除redis的缓存,再去更新数据库操作,这样当我们读操作过来时,发现读取不到,就会从数据库里面查询,并把结果放入缓存,这样即使在删除redis成功,更新数据库操作失败的情况下,也可以保证我们数据库与缓存的数据一致性。二、比较复杂的数据不一致问题分析问题场景:数据发生了变更,在删除了redis之后,进行更新操作的同时有读请求进来,此时会出现redis是空的,然后就会查询数据库,此时数据库还没有更新完成,查询到更新前旧的数据放入看缓存,导
2021-09-01 21:55:19
774
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅