- 博客(185)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 linux文件系统,有关链接
依此您可以做一些相关的测试,可以得到以下全部结论:1).删除符号连接f3,对f1,f2无影响;2).删除硬连接f2,对f1,f3也无影响;3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
2023-05-22 13:52:47
551
原创 需要动脑袋的双指针:581. 最短无序连续子数组
考虑更复杂的情况,相当于遍历中每一次都要更新max,然后比较当前的值和max的关系,如果小于max,则说明存在逆序(因为max肯定是在之前被更新的),就更新一下无序的右边界,最后被更新到的就是最终的右边界。这个思路用到的想法就是,前后有两段有序的部分,在有序的部分,你从左往右更新max肯定是在一直更新的,从右往左更新min也是同理,但遇到了无序的部分就不一定,下个元素可能会小于max,也可能会大于min。从右往左更新min的时候,先是15,然后9,遇到10了逆序记录左边界,然后min更新成8,然后4,
2023-05-12 15:16:29
562
原创 Python心经(3)
def fun(a) -> 我这个a可以代表函数,字符串,列表 ,元组啥的 字典的话就得**a了,,不过写a的话字典就能传进去一组kv。记住对于python的函数参数名来说,他可以代表任何的数据类型,只是看你用啥往进传就可以,把函数当做参数传给函数,,直接形参就随便一个变量名就行,只要你想,他就可以代表一个函数,lambda匿名函数,,将匿名函数作为参数传入。有关字符串格式化打印的。
2023-05-09 11:00:00
427
2
原创 Python心经(2)
python的全局变量是所有函数之外定义的变量,他没法在函数内部用,就是不能对全局变量做修改,也不是不能修改,不过需要用global关键字,,全局变量能当给函数内部变量去赋值,用的是他的拷贝,他本身不能变。py的字符串也能像c一样用下标去访问,不同的是,py下标可以是负数访问,py里面其实是序列的概念,正数了就是从左往右去访问,负数就是从右向左访问。还有如果局部变量和全局变量名字一样,那么在函数内部用的是局部变量,局部变量会把全部变量隐藏掉,就跟c/c++一样局部的会把全局的隐藏。
2023-05-03 14:26:37
508
原创 模拟简单的string,循环队列,vector
下面的空间配置器就是模仿C++标准库的alloctor实现的,封装了malloc和free。对这感兴趣的可以去看看SGI STL的两级的配置器,一级的就像我写的这种,二级用到了内存池的实现。STL源码是把内存分配和对象的构建分开来的,同样的对象析构和内存释放分开,这样才能满足类类型的构建,不明白的可以去了解下空间配置器。给出昨晚抽空写的简单的string,queue,示例代码,,适合刚开始学习C++接触到类的人群。vector的调用实现,测试代码自己测一下就行,我这不写了。
2023-04-29 11:45:00
22
原创 PlumGPT【告别梯子,拥抱AI】
我拥有强大的语言理解和生成能力,可以根据输入的文本内容进行自动回复和生成新的文本内容。还可以学习和适应不同的语言环境和语言风格,能够模拟人类的思维和表达方式,还可以通过特殊指令时时生成图片,为用户提供更加自然、流畅的交互体验。相信很多人苦于没有openai账号或者有着种种原因至今还没有使用过chatgot,今天向大家推荐一个网站,在国内也可以任意方便使用,让你的办公效率最大化。整体使用下来的感受就是:非常的方便,不受网络的限制,尽管不是最新的gpt4模型,但是3.5已经可以满足大部分人的日常使用需求了。
2023-04-18 21:48:53
3118
3
原创 拓扑排序应用,207.课程表
主要是需要一个数组,去记录着当前结点以及他指向的结点数组,,是个二维的。还需要一个判断是否被标记了的数组,如果走过了这个结点那么就标记1,如果这个结点相关的走完了,也没有环,说明这个结点是ok的,那么就在标记他是-1,说明这个结点相关的构不成环。当然这俩就算是退出条件了,当然还有如果这个结点后面没有关联的结点,比如(2,2)这种,他就是单独的。如果出队的次数count等于课程总数,则证明可以完成所有课程的学习。出队:已经学习了的课程数加一,其所有后续课程的入度减一;在选修某些课程之前需要一些先修课程。
2023-04-17 14:00:00
102
原创 Python心经(1)
代码测试的话我用vscode+python解释器,配的py虚拟环境,跑的代码,以py3.0为例。这个系列不知道能更多少,看我学的深浅吧。总之先过一下语法,记录一下学习的时候敲的demo。break,continue同样也能用在循环里面,这里就不举例子了。因为工作要用python写一些脚本,所以自己就开始学习了一下。同c/c++一样对于多重判断也是第一个条件满足了,就退出了。
2023-04-16 14:31:20
232
原创 有关C++priority_queue 创建固定大小的最小堆的问题
那天在写东西的时候发现好像priority_queue是没办法直接构建大小的,想想也是,一个容器适配器怎么去给他固定size呢,然后看了一下priority_queue的构造函数确实也是不能这么搞的。那怎么办呢,比如给个固定大小k,让你找到第k个最大的元素。没法直接构建,那就在插入元素循环里面if控制一下就行。
2023-04-12 23:09:37
62
1
原创 有关priority_queue+lambda的坑
我都用到了priority_queue,他默认是top返回最大的元素,我想改成top返回最小的,不过没有写仿函数,而是直接在后面写了lambda,然后出问题了。map和set(底层红黑树)要想在创建时更改排序顺序同priority_queue(底层堆),第三个参数传的是类,用lambda的时候也是类似的,要么就写个仿函数把类名传进去。对于priority_queue第三个参数要传入的是一个类,而对于sort呀这一类的算法函数,带自定义第三个参数的,人家源码传的是一个对象。我后面查了一下,在这记录一下。
2023-04-06 23:14:33
132
原创 Go的日常(1)
go的结构体,像c++一样也可以有自己的成员函数,go的结构体对象或者结构体指针访问成员都是用点.没有->for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。go: var a int =10 “var name type的格式”go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。go语句不用分号隔开,除非一行要写多个语句,用户自己加分号,不过不建议这么做。这是当初参加训练营的时候学go基础的时候记的一点笔记。go中的类型转换是这样的。
2023-04-05 10:59:24
228
原创 Redis基本数据类型及使用(1)
什么是redis这里就不多做介绍了,要清楚他是一个基于内存的数据库这里介绍linux下redis的环境安装和配置,我的系统是ubuntu我们先更新一下软件下面安装redis服务器通过上面命令安装完毕后会自动启动redis,可以通过ps去验证可以发现redis默认工作在6379端口上,这些都能在redis.conf配置文件里面改或者你手动启动redis登录redis的客户端去验证一下,安好没redis-cli输入ping命令,他会返回给你一个pong,说明安装成功下面看看redis的一些基本操作。
2023-04-01 19:15:17
199
原创 面试手撕智能指针
首先智能指针有两个变量,一个是指向的对象的指针,还有一个就是我们上面看到的引用计数管理对象, 当智能指针发生拷贝的时候,标准库的实现是先拷贝智能指针,再拷贝引用计数对象(拷贝引用计数对象的时候,会使use_count加一),这两个操作并不是原子的,隐患就出现在这里。其中有两个变量一个表示shared_ptr的引用数,另外一个表示weak_ptr的引用数,我们知道weak_ptr不会增加只能指针的引用数也就是说不持有对象,他的使用必须通过lock方法获取它指向的shared_ptr才能使用。
2023-03-29 17:06:50
78
2
原创 信号量解决生产者消费者/读写者问题
本篇用信号量来写这两种问题的示例demo,当然我更推荐用锁加条件变量去做。但是说到底信号量本身底层就是锁加条件变量去实现的,封装了这俩玩意在上面的代码中,初始化状态下消费者线程没有任务信号量资源,假设某一个消费者线程先运行,调用 pthread_mutex_lock(&mutex);对互斥锁加锁成功,然后调用 sem_wait(&csem);由于没有资源,因此被阻塞了。其余的消费者线程由于没有抢到互斥锁,因此被阻塞在互斥锁上。
2023-03-15 10:25:19
146
原创 什么叫个非对称加密?中间人攻击?数字签名?
非对称加密也称为公钥密码。就是用公钥来进行加密,撒子意思?在对称加密中,我们只需要一个密钥,通信双方同时持有。而非对称加密需要4个密钥,来完成完整的双方通信。通信双方各自准备一对公钥和私钥。其中公钥是公开的,由信息接受方提供给信息发送方。公钥用来对信息加密。私钥由信息接受方保留,用来解密。我们有熊大 熊二两只熊,熊大有自己的私钥 mmPrivateKey,和公钥mmPublicKey,熊二有自己的私钥 xxPrivateKey,和公钥xxPublicKey。
2023-03-07 19:39:23
423
原创 MySQL实战记录篇2
1、事务的特性:原子性、一致性、隔离性、持久性 (ACID)2、多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读3、事务隔离级别:读未提交、读提交、可重复读、串行化4、不同事务隔离级别的区别:读未提交:一个事务还未提交,它所做的变更就可以被别的事务看到读提交:一个事务提交之后,它所做的变更才可以被别的事务看到可重复读:一个事务执行过程中看到的数据是一致的。未提交的更改对其他事务是不可见的。
2023-03-02 21:45:00
1592
原创 ubuntu20.04安装nginx一系列问题
当初做一个项目的时候给linux装nginx遇到了很多问题,当初边搞边记录,这两天翻看项目笔记的时候找出来了,就把这一部分分享出来给大家看看。
2023-02-27 20:10:33
312
原创 c++11 json解析库nlohmann/json.hpp
Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。json的方便:直观的语法整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便使用 C++ 11 标准编写使用 json 像使用 STL 容器一样STL 和 json 容器之间可以相互转换。
2023-02-24 15:46:07
128
原创 MySQL 实战记录篇1
mysql连接也有长短连接之分,长连接累计很多,将导致 MySQL 服务占用内存太大,有可能会被系统强制杀掉,这样会发生 MySQL 服务异常重启的现象。binlog 文件保存的是全量的日志,也就是保存了所有数据变更的情况,理论上只要记录在 binlog 上的数据,都可以恢复,所以如果不小心整个数据库的数据被删除了,得用 binlog 文件恢复数据。因为 redo log 文件是循环写,是会边写边擦除日志的,只记录未被刷入磁盘的数据的物理日志,已经刷入磁盘的数据都会从 redo log 文件里擦除。
2023-02-18 22:22:18
324
原创 线程池框架
当threadpool析构执行到最后面释放锁的时候,因为用的都是一把锁,此时阻塞在锁的那个线程就拿到锁往下执行,但是会执行到notempty wait的地方,因为此时队列里线程还有他的存在,不空,但是析构函数已经走到最后面了,没人唤醒他,他就一直睡死在里面notempty wait这块了。一共实现了两版,都是支持fixed和cached模式的,半同步半异步的(生产者消费者模型,异步 提交任务,获取任务结果,用future类达到异步)1、自己实现Any类,用来接收任意函数,和传递参数。
2023-02-11 20:05:41
357
原创 有关传值和传地址的问题
最近写项目的过程里,碰到个传地址进入的小问题,虽然解决了,不是什么问题,但是想想自己最初学编程的时候对于指针这块的头大,就想着还是写个小demo记录一下,让刚刚学习编程的人可以明白传值和传地址是个怎么回事?打印地址发现,p和ptr指向的都是a这块内存,但是p和ptr本身地址不同,且p最后修改了指向,p的指向地址改变而ptr不变,都能说明p是ptr的一份拷贝。实参和行参都指向同一个对象,因此对于解引用之后都是指向同一块内存,对于解引用后形参的改变当然能去改变实参的值了。传引用 是真正的以地址的方式传递参数。
2023-02-08 11:33:52
378
1
原创 Nginx内存池源码剖析
整理逻辑就是先malloc把内存分配出来,然后遍历large链表找大块内存的头信息,看看哪个里面是空的被free了,如果找到了就把新分配的内存地址填进去就行,但是遍历了三个还没找到,那就不找了直接退出,利用小块内存分配移动last指针把大小内存头信息分配出来,然后把刚刚分配大块内存填进去就行。nginx处处体现了效率,就看三下,没有就用小块,因为小块的效率高,直接移动指针就行。整个释放流程,先释放外部资源,调用外部资源清楚函数回调,再释放大块,最后小块。对于内存池外部资源的释放。当剩的不够分配了进入。
2023-02-04 22:45:17
523
原创 SGI STL二级空间配置器源码剖析(2)
接着上回,这节开始说allocte内存分配的实现1、判断n是否大于128,如果大于128则直接调用一级空间配置器。如果不大于,则将n上调至8的倍数处,然后再去自由链表中相应的结点下面找,如果该结点下面挂有未使用的内存,则摘下来直接返回这块空间的地址。否则的话我们就要调用refill(size_t n)函数去内存池中申请。2、向内存池申请的时候可以多申请几个,STL默认一次申请nobjs=20个,将多余的挂在自由链表上,这样能够提高效率。
2023-02-03 22:17:34
441
4
原创 SGI STL二级空间配置器源码剖析(1)
之前大概写过SGI STL相关的东西,讲了讲空间配置器的原理,这一系列就剖析一下源码。在C++STL里空间配置器做的事情就是分离了对象内存的开辟,释放,对象构造,析构我们看SGI STL的实现还是找到vector看他push_back实现会发现他的构造析构都是定义的全局的函数模板SGI STL两个allocator的实现还是一级的是malloc和free,和C++STL基本无差,不过二级的用内存池的方式实现就复杂了进到空间配置器源码看看。
2023-02-01 20:02:22
279
原创 Tipsaa
二级是小于128字节,调用。cond.wait 先解锁,在把他放进cond的等待队列里面,notify如果唤醒,就是把cond等待队列里面的唤醒到互斥锁mtx的等待队列里面,假如说是a打印的最后一个等于n的数字,那么a线程正常结束,释放资源,锁就没了,在等待队列里的bc就会从阻塞的while flg判断里出来往下走,打印101,102;顾名思义,就是比较悲观的锁,总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(
2023-01-29 20:01:45
60
原创 什么是倒排表(倒排索引)
文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。,并以词条创建索引.然后记录下包含该词条的所有文档编号.(单个分词映射到对应的若干个文档,所有分词和文档映射关系组合起来的就是倒排列表,辅助理解,不用说出). 未来搜索时,就可以通过对搜索关键字的分词,然后找到索引库中对应的文档,这就是倒排索引的原理.,创建文档索引,形成文档列表.然后对。
2023-01-27 07:00:00
1061
原创 MySQL两种引擎的索引
MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。MyISAM的索引实现:
2023-01-23 21:47:10
1628
原创 一致性哈希
如上图所示,如果我们添加或删除服务器,那么客户端通过哈希所得到的的映射的服务器结点全部会发生变化,就有可能造成大量的请求无法命中,导致缓存数据重新加载。在分布式缓存服务器中,经常需要对服务结点进行添加和删除操作,我们希望的是服务结点的添加和删除操作尽量减少数据到结点之间的映射关系的更新。大量的客户端都要通过同一个服务器去干活,资源分配不均衡。为了解决问题,就引入了。
2023-01-23 10:15:00
56
原创 类模板的友元
写之前给不知道友元的小伙伴说一声:友元不受public/private影响,他只是定义在类外部的普通函数或类,可以访问类中private成员;友元声明只能出现在类定义中 ,在外面去定义实现。C++的泛型编程真的是复杂,最近再看一些代码的时候涉及一些模板相关的地方,有的写法因为自己没咋用过看着就很陌生,这节就聊聊类模板的友元的各个形式写法。有关模板的文章之前写过一个可变参数的,感兴趣的可以看看。这是一个普通类的写法。
2023-01-16 18:19:08
252
原创 Huffman编码实现文件的压缩和解压缩
把文件里的字符转成二进制“abcdefgh”这一串字符每个字符都占8个比特,把a弄成哈夫曼编码例如“11111”,不过这样也是个字符串,每个'1'字符都是8bit,等于没压缩反而大了,关键点就是把这个"1"字符8bit转成二进制里面的1,这样8bit->成了1bit,压缩成功对于文本文件效率还行13%~17%,图片视频音频二进制的文件效率不太高构建哈夫曼树,利用哈夫曼编码我就不对哈夫曼树和哈夫曼编码的结构做解释了,对于最上面俩关于文件操作的结构说明一下为什么KING=256?2的8次方。
2023-01-14 14:11:52
1098
原创 总结各种常见的池子
指的是一些资源,在需要时可以这些预先准备的资源。池化技术的优点主要有两个:提前准备和重复利用。像池化技术一些典型的池子就比如线程池,内存池,对象池,数据库连接池等等,线程的创建销毁,对象的创建销毁,内存的分配释放,数据库连接释放等等,做池子里面伴随着的就是生产者消费者模型。所以这些都是要搞清楚的。
2023-01-13 15:25:56
332
原创 拿捏几道经典的字符串模拟问题
遍历整个字符串paragraph,用一个word去记录每次遇到的字母,只要是正常的字母我们就添加到word上面,如果遇到了空格或者标点了就说明我们这个单词记录完毕了,在单词列表里用find去查询此时记录的word,如果没找到说明可以把它记在map里面,然后每次做完这个判断就把word置为“”,用来进行下一个单词的组装。我发现这种字符串的问题其实写起来很麻烦,可能思路不难多少都能想到一些,主要就是代码的处理,细节问题。太考验代码编写的能力了。找到开头连续的0,找到结尾连续的0,再找中间连续的最大0。
2023-01-10 11:57:54
450
8
(与手机日历功能类似)C++实现当前整月日历的显示,翻页查询上月,下月,上年,下年的日历
2022-06-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人