![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 50
一只小小狗
大家好我是练习时长2年半的程序员
展开
-
Redis分布式锁待续
为了保证数据的最终一致性,使用Redis分布式锁当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。原创 2022-07-23 18:58:57 · 789 阅读 · 0 评论 -
Redis数据结构
如有错误欢迎指正原创 2022-07-23 18:39:28 · 404 阅读 · 0 评论 -
Redis持久化机制RDB、AOF
默认开启的是RDB如果配置同时开启了RDB和AOF,数据恢复Redis会优先选择AOF恢复。原创 2022-07-23 17:43:07 · 193 阅读 · 0 评论 -
Redis 集群hash分片算法(槽位定位算法)
这个分片使用的是分桶思想,给每个节点固定的槽位,将范围内的数据分给固定的节点。原创 2022-07-23 16:05:09 · 966 阅读 · 0 评论 -
Redis 主从、哨兵、集群架构有缺点比较
在主从的基础上增加哨兵节点去监控主节点状态,如果主节点异常会进行主从切换,全程自动化。将数据存到不同的节点中,并不会每个节点都重复存储。如果主节点发生宕机,会选举从节点当做主节点。可以水平扩容,到不超过1000个节点。...原创 2022-07-23 15:50:10 · 1213 阅读 · 0 评论 -
Redis 删除Key命令会导致阻塞么?
都会导致Redis阻塞发生。原创 2022-07-22 18:29:35 · 664 阅读 · 0 评论 -
Redis中 LRU和LFU的淘汰策略区别
大部分默认都用LRU淘汰策略,当存在大量热点缓存数据使用LFU会更好。淘汰最近一段时间访问次数最少的数据。淘汰很久没有访问的数据。原创 2022-07-22 17:52:38 · 326 阅读 · 0 评论 -
Redis Key没设置过期时间,为什么被主动删除了
Redis已使用超过了内存限定,maxmemory,触发主动清理策略。原创 2022-07-22 17:49:07 · 1383 阅读 · 0 评论 -
Redis的过期策略以及内存淘汰机制,Key过期了为什么没释放内存
redis采用的是定期删除+惰性删除策略。原创 2022-07-22 17:33:09 · 285 阅读 · 0 评论 -
(Zset)Redis底层是如何用跳表进行存储的
Redis的ZSet集合和java中Set集合非常相似,都是唯一不重复的元素,不同的是Zset中有一个叫做权重的score,会进行有序的排序。Redis使用跳表来存储Zset集合。原创 2022-07-22 16:42:11 · 255 阅读 · 0 评论 -
Redis单线程为什么还能这么快
如有错误欢迎指正原创 2022-07-20 18:10:49 · 191 阅读 · 0 评论 -
Redis到底是单线程还是多线程
也就是单线程指的是键值对读写是单线程的,而持久化和集群同步数据,都是额外线程执行的。采用了多线程,而键值对读写还是单线程的,Redis依然并发安全。Redis6.0版本之前的单线程是指其。Redis6.0引入的多线程是指。...原创 2022-07-20 17:58:34 · 242 阅读 · 0 评论 -
Java中如何去计算一个对象的内存占用?一个对象有哪些部分组成
以HotSpot为例对象的组成部分主要是三个部分:对象头、实例数据、对齐填充其中对象头又分为三个部分:MarkWord、指向类的指针、数组长度(如果对象是数组的话,如果不是则没有此部分)在32位虚拟机中,占4个字节在64位虚拟机中,占8个字节Mark Work存储的是对象自身运行时的数据,比如:锁标志位;是否偏向锁;GC分代年龄;对象的hashCode;获取到该锁的线程的线程ID;偏向时间戳(Epoch)等等。对应JVM位数,如果是64位的那么占用8个字节,如果32位占用4个字节,在开启压缩的情况下可原创 2022-07-14 17:40:35 · 572 阅读 · 0 评论 -
什么是内存泄漏?与内存溢出的关系?
内存泄漏是指无用的对象继续占用内存,没有在恰当时机释放占用内存。不使用的内存,却没有被释放(不能被释放),这个叫做内存泄漏。如果存在严重的内存泄漏问题,必然会引起内存溢出。内存泄漏一般是资源管理问题和程序bug,是代码本身。内存溢出则可能是由于内存泄漏和内存空间不足,并不是能释放内存。如有错误欢迎指正...原创 2022-07-09 20:15:28 · 167 阅读 · 0 评论 -
G1垃圾回收器
主要解决 垃圾回收时工作线程暂停不可预测的问题。也就是STOP THE WORLDG1不使用分代模型,而是分区。对于堆中的大对象,默认直接会被分配到老年代,但是如果它是一个短期存在的大对象,就会对垃圾收集器造成负面影响。为了解决这个问题,G1划分了一个Humongous区,它用来专门存放大对象。如果一个H区装不下一个大对象,那么G1会寻找连续的H区来存储。为了能找到连续的H区,有时候不得不启动Full GC。 G1的大多数行为都把H区作为老年代的一部分来看待。如有错误欢迎指正...原创 2022-07-09 20:00:03 · 409 阅读 · 0 评论 -
聊聊CMS垃圾收集器?CMS基于标记-清除算法?CMS的缺点?
Concurrent mark sweep(CMS)是一种基于标记清除算法实现的,处理老年代垃圾回收的算法。标记清除导致内存空间碎片化无法处理浮动垃圾,并发清除时产生的垃圾如有错误欢迎指正原创 2022-07-08 18:05:18 · 314 阅读 · 0 评论 -
类加载为什么使用双亲委派机制?
双亲委派机制如有错误欢迎指正原创 2022-07-08 16:07:56 · 188 阅读 · 0 评论 -
0-1背包问题
标准的01背包装满最大价值是多少?i 表示列长,也就是出现的不同物品j 表示行长,但是此时的行,为装了不同重量的可能性,也就是说0没装也是有可能的,所以(j = 最大重量 + 1)而对应的dp[i][j] 里存放的是 价值。1.3 一维数组实现如有错误欢迎指正...原创 2022-07-07 16:50:20 · 98 阅读 · 0 评论 -
一条 update 语句的生命经历
一条 SQL 语句在的执行,总的来说可以分为:Server 层和存储引擎层(InnoDB)负责跟客户端建立连接、账号密码验证、获取权限、维持和管理连接。在通过验证以后,分析器会对该语句分析,判断是否语法有错误等。选择索引,生成执行计划。根据优化器生成的执行计划,调用存储引擎 API 执行 SQL。读取数据页面进入 InnoDB 引擎层后,首先会判断该 SQL 涉及到的数据页是否存在于 BP(buffer pool)中;如果不存在则通过 B+Tree 读取到磁盘的数据页,然后加载到 BP:通过二分法查找原创 2022-07-06 19:49:41 · 105 阅读 · 0 评论 -
InnoDB ACID模型
主要与事务的 COMMIT 和 ROLLBACK有关(undo log 实现)(修改操作:记录修改后的记录会隐式的指向原来的数据行,当需要回滚操作的时候,会通过版本链的形式退回到原来的记录行)InnoDB 故障恢复(故障恢复比如:redo log日志的宕机恢复,bin log日志的主从数据一致性恢复)InnoDB 双写缓存(写入磁盘文件之前,会加入双写缓存中,双写缓存保证了存入物理磁盘的一致性,当发生错误的时候,会选择是否丢弃该缓冲页或者回复表空间文件)隔离级别InnoDB 锁机制Mysql内原创 2022-07-06 10:24:53 · 115 阅读 · 0 评论 -
说一说MVCC多版本并发控制器?
MVCC是一种多版本并发控制器,一般使用于对数据库并发访问。MVCC是不使用锁来控制事务,并且可以解决脏读、不可重复度、幻读。(无法解决更新丢失问题。)Innodb每行数据都有向上指向的一个版本数据存放在undo log中,形成一个版本链。如果进行更新记录,则会将最新的数据写入undo log中,并且隐藏指针指向上一个版本。此时查询就会查询到最后一个undo log版本。MVCC好处:读不加锁、读写不冲突,增加了并发,保证了事务。如有错误欢迎指正...原创 2022-07-05 22:06:47 · 282 阅读 · 0 评论 -
MySQL InnoDB架构原理
InnoDB主要分为:在内存中结构 和 在磁盘上结构内存结构主要为: Buffer Pool (change Buffer 、adaptive hash index) log buffer磁盘结构分为:表空间和重做日志表空间:InnoDB数据字典、双写缓存区、修改缓存、Undo日志。重做日志:存储的就是Log buffer刷到磁盘的数据。(.idb、.frm、undo.log、(双写缓冲区(doublewrite buffer),故障恢复机制(crash recovery))、锁机制、Redo.lo原创 2022-07-05 16:02:31 · 406 阅读 · 0 评论 -
MySQL数据库主从同步,一致性解决方案
介于异步复制和同步复制之间,主库在执行完客户端提交的事务后不会立即返回给客户端,而是至少要等到一个从库接收并写到redo log中,才会返回给客户端,相对于异步复制,半同步复制提高了数据的安全性如有错误欢迎指正...原创 2022-06-27 18:11:08 · 1673 阅读 · 0 评论 -
MySQL主从同步之 异步复制 半同步复制 全同步复制
为了解决主从同步不一致的问题主库执行完提交事务后,立刻异步执行将结果返给给客户端,并不关心从库是否收到并处理。如果出现从库并未收到处理的情况,还是会有主从数据不一致的问题。期MySQL(5.5以前)仅仅支持异步复制。并且早期支持 myisam引擎。主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log 中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟。半同步复制的出现,就是为了保证在任何时刻主备数据一致的问题。相原创 2022-06-27 17:20:48 · 2138 阅读 · 0 评论 -
MySQL 主从复制原理以及流程
保证主服务器(Master)和从(备Slave)的数据一致性,想Master进行数据修改后,(在一定规则下)Slave会将Master中数据同步过来。当Master节点宕机时,可以指定一台Slave充当Master,(当对Master进行数据操作时进行宕机,可能会导致Slave机数据不一致)可以进行读写分离,比如Master主要用作写入操作,而读取操作交给Slave,由于查询的需求更大,使用多个备用服务器进行读取。针对不同的业务场景进行数据库的索引创建和根据业务选择MySQL存储引擎, 不同的slave可以原创 2022-06-27 14:02:21 · 511 阅读 · 0 评论 -
二分查找——三种问题模板
二分查找的基本思想是将 n 个元素分成大致相等的两部分,取 a[n/2]a[n/2] 与 x 做比较:如果 x=a[n/2]x=a[n/2] , 则找到 x , 算法中止如果 xa[n/2] , 则只需要在数组 a 的右半部分继续搜索 x总共有 n 个元素,渐渐跟下去就是 n, n/2 , n/4 ,… k接下来操作元素的剩余个数),其中 k 就是循环的次数O(n)=O(logn)当出现以下条件时,......原创 2022-06-19 17:56:24 · 362 阅读 · 0 评论 -
mysql-索引对数据库性能影响-(大量无脑增加索引)
如有错误欢迎指正原创 2022-06-18 20:33:45 · 757 阅读 · 0 评论 -
MyISAM与InnoDB 的区别
如有错误欢迎指正原创 2022-06-18 20:26:26 · 2400 阅读 · 0 评论 -
分库分表拆分后解决唯一性主键问题
简单、性能好、无序,无法存在业务含义,但是会有MAC地址泄露风险。简单实现、单调递增,具有一定的业务刻度性、强依赖db、有暴露业务信息的风险。可以很好的做唯一性,但是增加了系统复杂度和稳定性。雪花算法是Twitter公司发明的一种算法,主要目的是解决在分布式环境下,ID怎样生成的问题1,分布式ID生成规则硬性要求:全局唯一:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。趋势递增:MySQL中InnoDB引擎使用的是聚集索引。多数RDBMS使用Btree的数据结构来存储索引数据,在主键的选择上尽量选原创 2022-06-17 19:43:32 · 488 阅读 · 0 评论 -
Mysql索引失效
这个和非聚餐索引联合索引的索引存储结构有关。比如手机号是字符串,但是你写成了number int等,做了隐式的转换select * from user_info where mobile = xxx;当需要查询的范围已经很大了,全表扫描会更高效。全表扫描可以顺序读取磁盘,一次读一大块。索引很可能只能随机读取磁盘,一次读一条。如有错误欢迎指正...原创 2022-06-17 19:20:30 · 120 阅读 · 0 评论 -
(桶排序、计数排序、基数排序)线性排序:如何根据年龄给100万用户数据排序?
(桶排序、计数排序、基数排序)线性排序:如何根据年龄给100万用户数据排序?桶排序(Bucket sort)使用场景案例 亿计数据唯一性多字段去重(Java具体操作)计数排序(Counting sort)基数排序(Radix sort)如何根据年龄给100万用户数据排序?桶排序(Bucket sort)将数据分到不同多个桶中,进行排序。桶本身就有大小之分。如果根据 hashcode值进行分桶,会较为均匀的分布在每一个桶中,这时的时间复杂度为O(n),但是当所有值都进入了一个桶中,分桶的意义就会消失原创 2022-05-19 17:20:38 · 283 阅读 · 0 评论 -
如何用快排思想在O(n)内查找第K大元素?快排更好用?(归并排序、快速排序,常用大量数据的排序)
如何用快排思想在O(n)内查找第K大元素?(归并排序、快速排序)归并排序快速排序为什么多使用是快排归并排序package sorts;public class MergeSort { // 归并排序算法, a是数组,n表示数组大小 public static void mergeSort(int[] a, int n) { mergeSortInternally(a, 0, n-1); } // 递归调用函数 private static void merge原创 2022-05-13 13:46:10 · 119 阅读 · 0 评论 -
为什么插入排序比冒泡排序更受欢迎?(小规模数据量排序算法:冒泡、插入、选择)
为什么插入排序比冒泡排序更受欢迎?(而选择排序又不做考虑)排序算法的执行效率 考虑方向(排序)稳定性冒泡排序常见8种排序算法排序算法时间复杂度基于比较冒泡排序、插入排序、选择排序O(n^2)是快速排序、归并排序O(nlogn)是桶排序、计数排序、基数排序O(n)否排序算法的执行效率 考虑方向最坏时间复杂度、最好时间复杂度、平均时间复杂度两个相同最坏时间复杂度的,可能最好时间复杂度不一致,导致性能有所偏差。时间复杂度的系数、常数 、低阶在原创 2022-05-12 17:04:03 · 485 阅读 · 0 评论 -
深入理解数组
深入理解数组如何实现随机访问?低效的“插入”和“删除”,如何高效?插入操作删除操作相比我们常用的Java ArrayList 我们在java中可以使用数组的场景如何实现随机访问?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址:a[i]_address = base_address +原创 2022-04-28 17:57:19 · 166 阅读 · 0 评论 -
五种IO模型
topic什么是内核空间阻塞BIO(blocking I/O)非阻塞NIO(noblocking I/O)异步AIO(asynchronous I/O)信号驱动IO(signal blocking I/O)IO多路转接(I/O multiplexing)什么是内核空间我们的应用程序是不能直接访问硬盘的,我们程序没有权限直接访问,但是操作系统(Windows、Linux…)会给我们一部分权限较高的内存空间,他叫内核空间,和我们的实际硬盘空间是有区别的阻塞BIO(blocking I/O)在内核原创 2022-04-27 11:23:50 · 115 阅读 · 0 评论 -
异步同步阻塞非阻塞概念理解、JAVA中的三种(B、N、A)IO
五种IO模型、JAVA中的三种(B、N、A)IO1. 概念介绍1.1 什么是IO1.2 同步与异步,阻塞与非阻塞的区别1.2.1 同步1.2.2 异步1.2.3 阻塞1.2.4 非阻塞1.3 阻塞和非阻塞对CPU的影响1.4 形象比喻1. 概念介绍1.1 什么是IOJava中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的原创 2022-04-27 10:59:35 · 194 阅读 · 0 评论 -
值传递和引用传递,Java只存在值传递
值传递和引用传递值传递:引用传递:值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。值的引用一直都没有改变,指向的堆内存位置也没有改变,所以不存在引用的传递。如有错误欢迎指正...原创 2022-04-25 17:31:52 · 656 阅读 · 0 评论 -
接口和抽象类的区别,深入理解,场景
接口和抽象类的区别基础的三点深入理解场景![请添加图片描述](https://img-blog.csdnimg.cn/8e9d6ae346644190a0f22d598f0e01d8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-q5bCP5bCP54uX,size_20,color_FFFFFF,t_70,g_se,x_16)基础的三点在类的层面,接口是多实现,而抽象类是单继原创 2022-04-25 13:31:48 · 218 阅读 · 0 评论