自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 优先算法——专题十:哈希表

哈希表就是为了快速查找的,查找效率极快在涉及到查找的算法题中,可以考虑使用哈希思想。

2025-07-19 23:14:51 225

原创 笔试强训——第一周

本题采用哈希,因为哈希查找速度极快。

2025-07-19 23:14:38 1107

原创 优先算法——专题九:链表

一、两数相加。

2025-07-18 18:30:06 424

原创 Linux——库的制作与原理

静态链接的出现,提⾼了程序的模块化⽔平。对于⼀个⼤的项⽬,不同的⼈可以独⽴地测试和开发⾃⼰的模块。通过静态链接,⽣成最终的可执⾏⽂件。我们知道静态链接会将编译产⽣的所有⽬标⽂件,和⽤到的各种库合并成⼀个独⽴的可执⾏⽂件,其中我们会去修正模块间函数的跳转地址,也被叫做编译重定位(也叫做静态重定位)。⽽动态链接实际上将链接的整个过程推迟到了程序加载的时候。⽐如我们去运⾏⼀个程序,操作系统会⾸先将程序的数据代码连同它⽤到的⼀系列动态库先加载到内存,其中每个动态库的加载地址。

2025-07-18 18:28:19 1051

原创 Linux系统-Ext系列文件系统

本质上没有创建新的文件(因为没有新的inode编号),只是增加了文件名到同一个inode的映射关系,采用引用计数来记录到同一个inode映射关系有多少个作用是给文件做备份建立连接:ln解除连接:unlink看例子.表示当前目录,因为当前这个目录有一个名字ext2,所以引用计数为2。

2025-07-01 10:44:49 875

原创 优先算法——专题八:分治归并

注意创建临时vector对象记录归并结果时,创建一个全局或者在开始创建效率相比于每次归并都创建一个临时vector对象效率更高一点。

2025-07-01 10:44:39 625

原创 优先算法——专题七:分治快排

思路:就是快排的三路划分,三个指针控制值得注意的是cur的起始位置为0,保证每个数据都被扫描到在数据结构-排序扩展中,cur定义为left+1,这是因为默认选取最左边的nums[left]为key值作为比较的基准,但是这里每个元素都要被扫描到。可以理解为key值不需要扫描,因为已经知道了它是谁,后面的数据都是要和它比较的数据,需要扫描在本题中,若是nums[left]最开始的值是是 -1,那么也可以将cur定义为left+1。

2025-05-28 13:02:29 845

原创 第三章、数据链路层

看一看两台主机通过互联网进行通信时数据链路层所处的地位专门研究数据链路层的问题时,可以只关心水平方向的数据链路层。

2025-05-28 13:02:03 799

原创 第二章、物理层

简单来说,就是前后码元的波形相互重叠,使得接收端难以准确判断当前码元的值。ADSL借助于用户线两端的ADSL调制解调器(即ATU-C、ATU-R)对数字信号进行调制,使得调制之后的数字信号的频谱适合在原来的用户线上传输,用户线本身没有变化,给用户的感觉就是加上ADSL的用户线好像能够直接把用户计算机产生的数字信号传递给远方的ISP;时分复用中,当给一个用户分配资源后,这个用户有可能并不是一直在发送数据,会产生空闲的时隙,此时就算其他用户一直由用户要发送,也不能利用这些空闲的时隙,因为这个时隙已经被分配了;

2025-05-12 21:34:21 1269

原创 数据结构-排序扩展

三路划分算法解析:,三路划分的核⼼思想有点类似hoare的左右指针和lomuto的前后指针的结合。核⼼思想是把数组中的数据分为三段【⽐key⼩的值】 【跟key相等的值】【⽐key⼤的值】,所以叫做三路划分算法。结合下图,理解⼀下实现思想:1.key默认取left位置的值。2.left指向区间最左边,right指向区间最后边,cur指向left+1位置。3.cur遇到⽐key⼩的值后跟left位置交换,换到左边,left++,cur++。4.

2025-05-12 01:00:00 1495

原创 Linux系统-基础IO

Linux下一切皆是文件(磁盘、网卡、显示器、键盘……等等,这些都是抽象化的过程)成功以写的打开文件不存在的文件会默认先生成这个文件;生成的位置为当前的路径;这是因为cwd记录着当前进程的路径,这个进程打开文件时,也会把文件拼接在这个路径之后:介绍两个函数:fwrite、fread写文件:将msg和cnt格式化写入buffer,再使用fwrite函数将buffer的内容写入myfile文件 作为标准错误流,程序在运行期间遇到错误时,可借助它输出错误信息。将错误信息和正常输出分开

2025-05-08 01:00:00 1646

原创 MySQL索引

这样在铲鲟主键为4的记录时,就不需要在单个page里面线性遍历了,只需要通过目录确定这个主键的位置,再从这个目录对应的起始位置开始遍历,这样就大大提高了效率(目录2[3]表示第二个目录从主键为3的记录开始的);优点:这样的树一定是一颗矮胖的树,也就是说从上向下进行查找时不需要很多次,就能找到范围,因为上层节点没有存放数据而是目录,也就是说这样的page可以存放很多目录,在查找时,正式因为有序,在查找的时候,从头到后都是有效查找,没有任何一个查找是浪费的,而且,如果运气好,是可以提前结束查找过程的。

2025-05-02 01:00:00 907

原创 Linux-进程控制

分配新的内核数据结构即pcb以及mm_struct、vm_area_structfork()创建子进程,给父进程返回子进程pid,给子进程自己返回0;那么3493就是父进程的pid,子进程pid就是3494原理:写时复制是一种延迟拷贝技术,多个进程在最初可以共享同一块内存区域,只有当其中某个进程尝试对这块共享内存进行写入操作时,系统才会为该进程创建一个独立的内存副本,让其在副本上进行写入,而其他进程继续使用原来的内存,以此避免不必要的内存拷贝,提高系统性能。 实现方式:Linux 通过页表机制来实现写

2025-04-26 17:35:32 1106

原创 第一章、概述

计算机网络(简称网络)由若干节点和连接这些节点的链路组成(节点可以是计算机、集线器、交换机或路由器登)互连网(网络的网络):多个网络通过路由器连接在一起与网络相连计算机称为主机,路由器是一种特殊的计算机,但是不能称之为主机网络将许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起,与网络相连的计算机常称为主机1.2.2、互联网基础结构发展的三个阶段。

2025-04-22 01:00:00 747

原创 MySQL复合查询

1、查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J2、按照部门号升序而雇员的工资降序排序3、使用年薪进行降序排序4、5、6、7、8、

2025-04-20 01:00:00 657

原创 MySQL内置函数

1、length显示的是字节数而不是字符数,也就说,在utf8下若是汉字时,一个汉字占3个字节,也就是一个汉字显示length是3;方法:首先将姓名分为两部分,第一部分就是首字母,第二部分就是剩下的,对第一部分进行lcase,再将这两部分进行cancat拼接。2、这些函数的操作最终都不会影响原表,也就是说就算涉及到表中数据的改变,只是呈现的看起来改变了,但是实际上,原表没有被更改;显示exam_result中的内容,格式为 XXX的语文成绩是:XXX,数学成绩是:XXX,英语成绩是:XXX.

2025-04-14 19:03:49 918

原创 Linux-进程概念

当我们要运行某个程序或者代码时,这个程序或者代码会从磁盘载入到内存,而操作系统会在开机时就载入内存进行运行,操作系统对载入的程序或者代码进行管理,通过先描述再组织的方式进行管理形成的PCB(process control block即进程控制块)(PCB也可以叫做内核数据结构对象)和载入的程序或者代码就是进程。这些一个一个PCB数据结构是操作系统管理中描述过程的结果,PCB中包含一个进程的相关属性(如标识符、状态、优先级、程序计数器、内存指针等等);

2025-04-14 01:00:00 1708

原创 C++_智能指针

智能指针类除了满⾜RAII的设计思路,还要⽅便资源的访问,所以智能指针类还会想迭代器类⼀样,重载等运算符,⽅便访问资源。

2025-04-10 15:03:15 657

原创 C++_异常

目录一、异常的概念以及使用1.1、异常的概念1.2、异常的抛出和捕获1.3、栈展开1.4、查找匹配的处理代码1.5、异常的重新抛出1.6、异常安全问题1.71.7、异常规范二、标准库的异常 若是b为0,那么会throw抛异常,先在当前函数域找有无匹配的catch来匹配抛出异常对象的类型,但是这个函数里面的是int,继续在函数链中找,Divide里面也不匹配,编译器直接跳到main函数,匹配,那么打印异常信息;注意,throw之后Divide里面throw后面的都不会执行;当捕获异常时,若是不匹配那么

2025-04-06 20:26:44 780

原创 C++11详解

lambda表达式。

2025-04-06 16:56:39 1114

原创 MySQL基本查询

所以total是第三步出来的,但是where是第二部。查询姓孙的,或者语文成绩大于数学成绩并且英语成绩小于80的。

2025-04-04 15:24:35 634

原创 MySQL表的约束

例子:一个学生表,包含学生的各种属性,其中有一个属性是班级id,若是在这个学生表中查看班级id就会有很多重复的,因为可以出现很多学生在同一个班级的情况;那么定义一个班级表,其中包含主键班级id和班级名;再将学生表中的班级id定义为外键,关联的是班级表的主键id,此时查看起来就会很方便;并且更重要的一点就是有了完整性约束,就是给学生表插入新数据时,插入的所属班级id的值不能是主表班级表中主键id不存在的值。先创建主表:再创建从表:给主表插入数据,表示能收学生的班级号有哪些;

2025-03-31 21:41:59 1068 1

原创 二叉树扩展-二叉树进阶算法题

val = val;T _val;

2025-03-26 11:26:02 709

原创 MySQL数据类型

tinyint范围是-128~127,那么给这个表的num插入数据时,不能插入超过这个范围的数据;这里tinyint后面括号中的内容不是字节数;tinyint可以是无符号的,范围是0~255,

2025-03-25 12:40:00 843

原创 MySQL表的操作

field表示列名,即属性datatype表示列的类型字符集,如果没有指定字符集,则以所在数据库的字符集为准collate校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准engine 存储引擎,如果没有指定存储引擎,则以所在数据库的存储引擎为准comment是对这些属性的说明;查看使用MyISAM存储引擎的表的文件:users.frm:表结构users.MYD:表数据users.MYI:表索引进入/etc/my.cnf,默认使用的引擎是innodb。

2025-03-18 10:32:25 501

原创 MYSQL库的操作

没有写-h 127.0.0.1默认连接本地没有写 -P 3306默认连接3306端口号创建一个名字为db_name的数据库在Linux的目录下可以看到新建的数据库目录d1:同样地在Linux这个目录下也可以创建一个新的目录在mysql里面相当于创建了新的数据库,但是一般不会这样写。创建一个数据库,但是若是这个数据库已经存在就不会创建了。

2025-03-18 01:30:00 1111

原创 哈希扩展-位图、布隆过滤器、海量数据处理

问题:现有40亿无符号整数,需要从中查找一个指定的无符号整数是否存在,你要怎么解决?解法一:遍历这些数据(效率低O(N));解法二:先排序再二分查找(O(N*logN)+O(logN)),看似可行,实则不然:首先先要存放这些整数,一个整数4个字节,总共160亿字节,约为16G的内存,显然不行;解法三:使用位图将数据映射到bit位,这个bit位为1表示存在反之不存在;就算是40亿个不重复的无符号整数,只需要40亿个比特位来映射,也就是4G左右;###测试。

2025-03-03 09:29:11 1041

原创 C++ unordered_set、unordered_map哈希使用及其封装

和unordered_set与set差异相同;本身与map使用差不多;unordered_multimap/unordered_multiset跟multimap/multiset功能完全类似,⽀持Key冗余。二、哈希表实现。

2025-02-28 19:10:10 851

原创 Linux基础环境开发工具使用

用自己定义的变量代替命令,但是使用时要用$(),echo打印测试是不是能替换echo前面加上@不显示执行的命令,但是非命令的会显示;

2025-02-16 15:33:31 826

原创 Linux权限

普通用户权限低受管控,超级用户权限高;超级用户切换到普通用户方式 :su 普通用户名,不需要输入密码普通用户切换到超级用户方式:su root(root可省略)之后回车输入密码或者su -之后回车输入密码;这两种方式区别是第二种切换为超级用户之后路径会回到/root,但是第一种保持为切换前的普通用户的路径不变exit从超级用户退出到普通用户。

2025-01-21 22:11:12 783

原创 Linux基本指令(3)

进行Linux和Linux系统之间进行互传压缩包 :scp dst.tgz 用户名@你的公网IP: 目标机器指定的路径;打包压缩目录:zip -r dir1.zip dir1 那么dir1和其里面的文件变成了一个文件 dir1.zip;unzip -d dir.zip /root 把解包后的文件解包到指定目录 /root。选项一般是-czf,不需要加 -r;常见选项:-n 显示行号、-v 显示不含关键字的行的信息、-i 忽略行中信息的大小写进行匹配。输入指令sz后回车,弹出界面,选择安放压缩包的位置。

2025-01-16 21:37:21 661

原创 Linux基本指令(2)

显示时间,加上选项(选项最开始又加上‘+’)可以设置打印出来的时间的格式:%Y表示年,%m表示月,%d表示天,%F相当于%Y-%m-%d;意思就是先查看出前num1行的内容,再查看这部分内容的后num2行的内容,相当于就是查看中间部分的内容。显示内容时,输入 / 加上字符串可以直接查看到这个字符串所在的文件位置,并且显示出这一页的内容,若是多个出现按n表示next逐页查看。查看文件,开始时只显示当前屏幕能容纳的文件内容,需要按回车查看下面的内容,但是只能向下查看,不能再向上查看了。cal 月份 年份;

2025-01-15 20:26:18 485

原创 Linux基本指令(1)

功能:对于目录,显示这个的目录名以及文件名;对于文件,显示文件名后面可接命令行选项配合使用,接选项时ls与选项以及选项与选项之间要有一个空格;这里先学习了两个选项:-l ,-a,-d1、-l:ls只是显示名称属性,加上-l就是显示这个目录下目录以及文件的详细信息d开头字符的就是表示文件夹(目录),-字符开头的表示的就是普通文件2、-a :显示当前目录下的所有文件,包括隐藏的文件3、-d:只是显示目录,而不显示这个目录下的文件它们可以合起来使用,哪种顺序都可以(-al;-a -l;-la;

2025-01-10 23:11:56 554

原创 C++红黑树封装map和set

set里面的key就是value,而map里面的value是pair<key,value>;在封装map和set时,要使用同一个红黑树的类模板去封装,也就是说,红黑树的类模板只有一份;但是两者的value不同,首先对于map来说,传key和value需要两个模板参数,为了兼容map,要求set也传两个模板参数,那么set的value也传key;此时就能保证共用一个红黑树类模板了;但是由于两者数据的不同,数据比较的逻辑也不同;

2025-01-08 15:15:45 918

原创 数据结构-排序

因为是让end先走的,end是要找小于基准值的位置,这里分析begin和end相遇的几种情况:情况一,end找不到比基准值小的,那么最后相遇的位置就是基准值的位置,跳出循环,自己和自己交换,递归右边的部分;这里取最左边地的数据,那么从后面开始找,找到比基准值小的就把这个值放在坑的位置,那么这个比基准值小的数据的位置又形成了一个坑,从前面开始找找到比基准值大的值就把这个值放在上次的坑处,最后end和begin相遇,相遇得到位置也是一个坑,最后把基准值放在这个坑处;这样也能把大的值放到后面,小的放在前面;

2024-12-04 15:05:16 1327

原创 红黑树的概念以及基本模拟

若uncle存在且为黑色,那么cur一定不是新插入的红色节点,而是cur下面的节点通过变色变上来的红色节点,否则parent的左右子树黑色节点的数量就不同,违反规则;由于每条路径的黑色节点的数量的个数相同,极端情况下最短路径的长度就是全是黑色节点的数量,最长路径长度就是红色黑色相间的路径,那么恰好就是最短路径的二倍;双旋的原因:不同于单旋,当parent是grandfather的左节点但是cur是father的右节点时,单旋不能解决问题,若是单旋,只是交换了左右位置,本质上还是没有完成规则的维护;

2024-11-27 22:07:03 762

原创 C++AVL树

先看图中前两个旋转:e和f的位置最终是固定的,当插入到e时,e的父节点的平衡因子是一种情况,但是插入到f时,e的父节点的平衡因子又是另外一种情况,而这种差异的产生是因为插入的位置不同,也就是当前节点的右子树根节点的平衡因子的不同;为了解决这个问题,需要提前记录当前节点的的右子树节点的平衡因子(单旋会改变这个节点的平衡因子,不记录最后判断有误),旋转完之后,通过判断这个平衡因子的不同来手动给这三个关键节点的平衡因子置值,其他的节点的平衡因子没有变化;之后让5这个节点的父节点指针和10这个节点的父节点链接。

2024-11-17 16:47:28 736

原创 C++map基本概念和接口

##map和set很多地方相似,最大的不同就是map中存放的不仅仅是key,还有value;使用map时,一般都是通过key去寻找value;

2024-11-10 20:44:43 1164

原创 C++-set的基本概念和接口

set是存储数据的容器,它的存储数据的规则按照红黑树的规则;左子树的节点数据都小于根节点的数据,右子树的节点数据都大于根节点的数据大小;class set;T是set底层的关键字类型;set默认支持的是小于的比较,less,可以传greater;set底层存储的数据的内存是从空间适配器中申请的,可以自己实现内存池,那么就传给第三个参数;一般来说,我们不需要传后面的两个参数底层是红黑树,增删查的时间复杂度是O(logN);

2024-11-08 20:17:48 1048

原创 二叉搜索树

这里的性能指的是在树里面找指定值的节点;根据左子树节点值小于根节点,右子树值大于根节点值,每次判断指定的值大于还是小于根节点的值,来实现往左子树走还是右子树走并且向下遍历了;这里介绍的是key带着一个value的情况,key不能被修改,找到key就找到value;value是和key相关的;相比于普通的二分查找,平衡二叉树具有的优势就是不会被限制于下标的固定形式去查找;实现的代码:只需要将节点的成员变量加上一个value;上面的平衡二叉树是Key的搜索场景,找的是key;

2024-11-06 20:32:48 915

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除