- 博客(189)
- 收藏
- 关注
原创 C++随笔1
lib文件中包含了动态链接库中函数的符号信息,用于编译时解析动态链接库中函数的地址。在_fastcall调用约定下,函数的第一个和第二个参数通过寄存器传递,而后续的参数通过栈传递。1.隐式链接:在使用动态链接库时,编译器通过.lib文件进行静态链接,将库中的函数和变量加入到最终生成的可执行文件中。这样,在运行时,可执行文件无需明确地加载和链接.dll文件,而是直接调用静态链接库中的函数和变量。so,生成.dll文件时,生成的.lib文件提供了静态链接的导入库,用于隐式链接和显式链接时的编译和链接操作。
2023-07-18 00:14:28 390 1
原创 Mysql高级篇1
由于磁盘的读取是按块操作的,内存也是按页面操作的,因此B-树的结点大小一般设置为和磁盘块大小一致,这样一个B-树结点,就可以通过一次磁盘IO把一个磁盘块的数据全部存储下来,所以当使用B-树存储索引时,磁盘IO的操作次数最少,MySQL的读写效率,主要集中在磁盘IO上。索引的缺点:索引并非越多越好,过多的索引会导致CPU使用率居高不下,由于数据的改变,会造成索引文件的改动,过多的磁盘I/O,会浪费CPU资源。InnoDB的索引树,叶子点包含了完整的数据记录,InnDB的数据文件本身要按照主键索引聚集,所引。
2023-03-29 20:12:02 480
原创 Mysql提升篇
select <字段列表> from A right join B on A.关联字段 = B.关联字段。select <字段列表> from A left join B on A.关联字段 = B.关联字段。select <字段列表> from A left join B on A.关联字段 = B.关联字段。select <字段列表> from A left join B on A.关联字段 = B.关联字段。where 字段字段 is NULL。
2023-03-27 18:50:00 1096
原创 C++ --- 倒排索引
1)如果倒排列表已经存在,就在倒排列表中,找这个文件对应的倒排项,匹配上了,次数+1,记录单词的location,没有匹配上,添加这个单词对应的倒排项;设计第二个类倒排列表:同一个单词位于不同的倒排项,将这些倒排项存入链表中,组成倒排列表。当搜索一个目录下的文件时,打开一个文件,将每一个读取到的单词,映射到倒排列表中,2)如果没有单词对应的倒排列表,那就创建倒排列表,并添加这个单词对应的倒排项。查询一个句子时,对句子进行单词划分,将每个单词对应的倒排列表,求交集。怎样读取目录下所有文件的单词?
2023-03-27 14:48:30 504
原创 MySQL基础篇
推荐使用可变长度的数据列,因为innodb数据表的存储格式不分固定长度和可变长度,使用char不一定比使用varchar好,但varchar是按实际的长度存储的,比较节省空间,所以对磁盘IO和数据存储总量比较好。set类型,可以从定义的值列表中选择1个或多个值的组合。set值在内部用整数表示,分别是1,2,4,8都是2的n次方值,这些整数值对应的二进制位都是只有1位是1,其余是0。求平均值 avg(x),求最大值 max(x),求最小值 min(x) 求总和 sum(x) 求个数 count(x)
2023-03-23 18:02:52 849
原创 Redis高级
使用bitmaps类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问和 bitmap里面的id进行比较,如果访问id不在bitmaps里面,进行拦截,不允许访问。在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis 会报错,并告知应前往的redis实例地址和端口。通过哈希函数,把每个key,哈希到插槽中,插槽不在主服务器的范围内,就会切换到相应的主服务器。3.解铃还须系铃人。
2023-03-19 20:31:51 419
原创 Redis提升
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF 采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2023-03-19 15:24:18 375
原创 Redis基础篇
msetnx key-val key-val key-val 只要有一个存在,其他的都不会成功 原子性的。setex key 20 value //设置key-val的时候,就设置过期时间。mset key-val key-val ... 一次设置多个key-val。srandmember key 2 //随机从key取出两个val,但不删除。hset key 字段 val //差一个字段---值。
2023-03-18 17:12:11 1841
原创 剑指Offer --- C++ 栈,队列,排序算法
小根堆:arr[i] < arr[2i+1] && arr[i] < arr[2i+2]大根堆:arr[i] > arr[2i+1] && arr[i] > arr[2i+2]第一个非叶节点下标:(n-1)/2 n表示数组最后一个元素的下标。0 <= i && i <= (n-1)/2 所有的非叶子结点。2.每次将堆顶元素与最后一个叶子结点交换,每次排出一个堆内的最大值。从(n-1)/2号位元素开始到堆顶元素(0),进行下沉操作。求一个结点的双亲结点:(chid-1)/2。
2023-03-17 19:20:27 420 1
原创 剑指Offer C++ --- 数组篇3
如果:dp[i] > 0 ==》 dp[i] = nums[i]+dp[i-1]max 表示最大子数组的和,如果当前子数组的和 > max 则更新max。否则:dp[i] <= 0 ==》 什么也不做。将容器中所有元素对应的二进制位存起来,对每个元素进行 &1后,>>1 存储下一位。找只出现一次的数字时,对存储的每一位进行%3,然后 |= 先从高位开始。状态定义: dp[i]表示以nums[i]结尾的子数组的最大和。状态方程: dp[i]的初值为nums[i]思路:以最低价买入,以最高价卖出。
2023-03-14 17:10:36 451
原创 剑指Offer C++ --- 数组篇2
如果是,则判断其上,下,左,右只要有一个满足,其是word的第一个字符,继续判断下一个。如果不是,则回到矩阵的位置,继续判断下一个是不是word的开始字符。借助栈来判断,每向栈内入一个元素,循环判断栈顶元素是否与出栈序列的元素相等,如果相等则出栈,序列向后迭代一个,继续比较。思路:假设众数val = x,num = 1,遍历后续元素,如果相等则num+=1,如果不相等,则num -=1。从矩阵第一个元素开始判断,它是不是word的第一个字符,如果不是,继续判断下一个。如果栈为空,则出栈序列正确,否则错误。
2023-03-13 21:34:10 232
原创 剑指Offer C++ --- 数组篇
首先可以先确定根结点的位置,那么下一个左子树的结点一定在先序序列根节点的下一个位置,对应到中序遍历应该是在中序遍历开始到根节点的位置-1之间,相应的就可以缩减先序序列的范围,起始位置+1到末尾距离要等于中序遍历开始到根节点的位置-1的距离。唉,真的是没有办法啊,只要是稍微大一点的公司都是先笔试,再面试,笔试过不了,八股背的再多,理解的再怎么透彻也没有发挥空间,只能硬着头皮刷题,我对算法真的很抵触,很苦恼,为了工作不得不做,废话不多说,直接开搞!利用栈1存储 LRV, 按顺序转入栈2后,变为 VRL。
2023-03-12 23:53:25 175
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人