- 博客(24)
- 资源 (2)
- 收藏
- 关注
原创 Mysql的Redo log和Bin log
由操作系统(当然,MySQL也可以主动flush)将OS cache里的数据,最终fsync到磁盘上;
2023-05-15 21:19:44
586
原创 Mysql慢查询性能优化实战
MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行, 那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页 数进行 SQL 改写。在 MyISAM 引擎 中,每个表的总行数都会在内存和磁盘文件中进行保存,当执行 count(*) 语句的时候,会直接将内存中保存的数值返回,所以执行非常快。count(字段):只包含列名的列,统计表中出现该字段的次数,并且不统计字段为null的情况;
2023-05-15 21:17:06
277
原创 Linux操作系统总结
如果子进程退出,而父进程并没有调用 wait4(),那么子进程的进程描述符仍然保存在系统中,此时这个进程就是僵尸状态。而clone()则带有参数,clone()可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。0号进程是Linux启动的第一个进程,当系统中所有进程启动之后,0号进程退化为idle进程,当一个core上没有任务运行时就会调度运行idle进程,core进入低功耗模式。
2023-05-15 21:15:01
369
原创 acwing-Java模板
单链表826. 单链表import java.util.Scanner;public class Main { static int N = 100010; static int[] e = new int[N]; static int[] ne = new int[N]; static int head = -1; static int idx = 0; public static void main(String[] args) {
2023-05-08 14:41:03
422
1
原创 Redis 持久化策略
AOF 重写是 AOF 持久化的一个机制,用来压缩 AOF 文件,通过 fork 一个子进程,重新写一个新的 AOF 文件,该次重写不是读取旧的 AOF 文件进行复制,而是读取内存中的Redis数据库,重写一份 AOF 文件,有点类似于 RDB 的快照方式。AOF的文件会越来越大,当AOF达到一定程度大小之后再通过AOF文件恢复数据是异常缓慢的,那么对于这种情况Redis在开启AOF持久化机制的时候会存在AOF文件的重写。AOF 日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
2023-05-08 14:25:12
297
原创 Redis 的数据结构解析
使用对象的另一个好处是, 我们可以针对不同的使用场景, 为对象设置多种不同的数 据结构实现, 从而优化对象在不同场景下的使用效率。底层:用来做基数统计的算法,在输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且是很小的(12k)。整数集合的底层实现为数组,这个数组以有序、不重复的方式保存集合元素,在有需要的时候,程序会根据新添加元素的类型,改变整个数组的类型。Set:无序集合(内部使用值为空的哈希表),它通过计算hash的方式来快速去重,它能以 O(1) 的复杂度快速查询数据。
2023-05-08 14:22:31
158
原创 设计模式-单例模式
但是,如果单例占用的内存比较大,或 单例只是在某个特定场景下才会用到,使用饿汉模式就不合适了,这时候就需要用到懒汉模式进行 延迟加载。如果线程 1 先执行了赋值,线程 2 执行到第一个 INSTANCE == null 时发现 INSTANCE 已经不为 null,此时就会返回一个未完全构造的对象(未初始化完毕的单例)。适用于:如果某个单例使用的次数少,并且创建单例消耗的资源较多,那么就需要实现单例的按需 创建,这个时候使用懒汉模式就是一个不错的选择。为何必须加 volatile:禁用指令重排。
2023-05-08 14:21:15
99
原创 秒杀项目实战总结
优惠券秒杀核心数据库表:优惠券voucher表:库存stock和开始时间和结束时间优惠券订单order表:主键id是自定义全局唯一ID,userID,goodID【秒杀表详情】秒杀用户表、商品信息表、秒杀商品表(记录该商品的秒杀始末时间,秒杀价和剩余量)、秒杀订单表(记录了秒杀用户名和秒杀的商品还有订单号)、订单详情表(通过秒杀订单号来查找对应的订单详情,里面记载更详实的业务信息)、【全局唯一ID实现】因为增加ID的安全性和单表数据量有限,所以mysql不使用自增ID,使用全局唯一ID。
2023-05-08 14:03:20
327
原创 Mysql语句执行流程
然后拿到记录,把 level 改为 5,然后调用引擎 API 接口,写入这一行数据,InnoDB 引擎把数据保存在内存中,同时记录 redo log,此时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,随时可以提交。分析器 —> 优化器 —> 权限校验 —> 执行器 —> 引擎 —> redo log(prepare) —> binlog —> redo log(commit)执行器会以行为粒度,调用存储引擎执行SQL,在没有索引的情况下,执行器会循环查询所有行。
2023-05-07 19:19:28
96
原创 Redis过期策略和内存淘汰策略
过期字典的键指向 Redis 数据库中的某个 key(键),过期字典的值是一个 long long 类型的整数,这个整数保存了 key 所指向的 数据库键的过期时间(毫秒精度的 UNIX 时间戳)。不会花费额外的CPU资源来检测Key是否过期,但如果存在较多未使用且过期的Key时,所占用的内存就不会得到释放。在设置 Key 的过期时间的同时,会创建一个定时器 timer,定时器在 Key 过期时间来临时,会立即执行对 Key 的删除操作。从库不会进行过期扫描,从库对过期的处理是被动的。
2023-05-07 19:18:25
82
原创 Bitmap实现签到功能
Bitmap 的底层数据结构用的是 String 类型的 SDS 数据结构来保存位数组,Redis 把每个字节数组的 8 个 bit 位利用起来,每个 bit 位 表示一个元素的二值状态(不是 0 就是 1)。同样的 UserID offset 都是一样的,当一个 userID 在 7 个 Bitmap 对应对应的 offset 位置的 bit = 1 就说明该用户 7 天连续打卡。在记录了一个亿的用户连续 7 天的打卡数据,如何统计出这连续 7 天连续打卡用户总数呢?常见场景:二值状态统计。
2023-05-07 19:16:35
793
原创 Redis实现分布式锁总结
分布式锁,顾名思义,就是分布式项目开发中用到的锁,可以用来控制分布式系统之间同步访问共享资 源。优点:Redis 锁实现简单,理解逻辑简单,性能好,可以支撑高并发的获取、释放锁操作。优点:zookeeper 天生设计定位就是分布式协调,强一致性,锁很健壮。如果获取不到锁,只需要添加一 个监听器就可以了,不用一直轮询,性能消耗较小。缺点:在高请求高并发下,系统疯狂的加锁释放锁,最后 zk 承受不住这么大的压力可能会存在宕机的风 险。
2023-05-07 19:13:56
311
原创 Mysql查询性能优化
MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行, 那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页 数进行 SQL 改写。在 MyISAM 引擎 中,每个表的总行数都会在内存和磁盘文件中进行保存,当执行 count(*) 语句的时候,会直接将内存中保存的数值返回,所以执行非常快。count(字段):只包含列名的列,统计表中出现该字段的次数,并且不统计字段为null的情况;
2023-05-07 19:09:37
119
原创 Java String解析
JVM首先在字符串常量池中查找有没有"aaa"这个字符串对象,如果有,则不在池中再去创建"aaa"这个对象了,直接在堆中创建一个"aaa"字符串对象,然后将堆中的这个"aaa"对象的地址返回赋给引用str1,这样,str1就指向了堆中创建的这个"aaa"字符串对象;如果没有,则首先在字符串常量池池中创建一个"aaa"字符串对象,然后再在堆中创建一个"aaa"字符串对象,然后将堆中这个"aaa"字符串对象的地址返回赋给str1引用,这样,str1指向了堆中创建的这个"aaa"字符串对象。
2023-05-07 19:07:25
193
原创 操作系统IO原理和五种IO模式
原因:每连接每线程的模型,之所以使用多线程,主要原因在于socket.accept()、socket.read()、socket.write()三个主要函数都是同步阻塞的,当一个连接在处理I/O的时候,系统是阻塞的,如果是单线程的话必然就挂死在那里;select/poll 每次操作时都传入全量的文件描述符集合,而 epoll 因为在内核维护了红黑树,可以保存所有待检测的 socket ,所以只需要传入一个待检测的 socket,减少了内核和用户空间大量的数据拷贝和内存分配。
2023-05-07 19:06:04
908
原创 电动汽车负荷预测——蒙特卡洛法python实现过程
运用蒙特卡洛随机抽样,模拟一千台电动汽车的一天内的充电负荷。用到的数据来自于论文《Charging Load Forecasting of Electric Vehicle Based on Monte Carlo and Deep Learning》MonteCarlo电动汽车负荷预测基本思想:1.抽取随机变量:包括有日行驶里程s(满足对数正态分布),充电开始时间ts(满足正态分布)2.计算其余变量:初始soc:不理解论文中所描述,改成soc0 =(1-s/smax)充电时间tc:tc=((1
2021-11-17 10:04:03
6001
2
原创 基于 Matlab/simulink实现锂电池建模与仿真
运用simulink实现2RC模型的锂电池模型导师要求学习锂电池建模,接触一个星期,感概资料、视频不好找,还是看论文来得实在,找了几十篇论文,粗略了解等效模型原理,根据一篇硕士论文,完成模型搭建,论文为《基于二阶EKF的锂离子电池SOC估计的建模与仿真》作者西安科技大学赵佳美,希望大家能去读一读,从中大部分借鉴,也还改了两三处别扭的地方。总之先应付导师,后续如有必要继续学习。如有错误,恳请指出,轻喷。左边给出模拟电流signal builder通过模型几个模块,计算出最终电压。Uocv开路电压减去,
2021-08-03 21:22:02
29111
41
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人