自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 笔试编程算法题笔记(二)(附带C++代码)

我们注意到该题的测试用例的范围非常的小,这种情况解法大概率就是暴力搜索/递归了。解法:dfs假如n = 4对于每个位置,我们依次进行枚举,用pos记录当前枚举的位置。递归出口,如果pos已经超过了n,说明这是一个合法位置,我们就让ret++,然后return。接下来就是优化---剪枝部分了。在我们的决策树当中,看看给出的示例,2号队员的诉求是要在1号的前面,那么如果我们先枚举了1号,在pos = 2时,1位置已经枚举1号了,也就是不能再出现了1号了,这里就是一个剪枝。

2024-07-15 16:24:09 930

原创 MySQL--C_C++语言连接访问

首先需要在mysql官网下载C接口库解压指令下载并解压好后但是还有比这更优的做法。这样子手动安装不仅麻烦,还可能存在兼容性的问题。其实在我们使用yum安装mysql时,大概率会自动帮我们把其他的环境都安装下来并配置好如果没有安装好,那么我们也可以单独安装安装好后,查看可以看到头文件就都在默认的搜索目录下了那么我们就可以开始写代码了,注意包含头文件的方式简单使用makefile编译指令记得指明库所在的位置以及指明需要链接哪个库。

2024-07-10 17:27:05 990

原创 MySQL--视图和用户管理

这里的视图跟之前事务里面的read view没有任何关系。视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。创建视图其实就是在select语句前加上就可以了。创建视图其实就是mysql在内存上帮我们创建了一张表,然后将数据插入到这个表中。如果我们修改视图里的数据,会对基表产生影响。反之,如果我们修改了基表,也会对这个视图产生影响。删除视图总结:视图与表一样,必须唯一命名(不能出现同名视图或表名)

2024-07-08 12:56:08 323

原创 MySQL---事务管理

理解和学习事务,不能只站在程序猿的角度来理解事务,而是要站在使用者(用户)的角度来理解事务。比如支付宝转账,A转了B100块前,在程序猿的角度来看,是两条update操作,A -100块,B +100块。但是站在使用者的角度,这就是一条转账逻辑。事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。

2024-07-06 01:03:04 1080

原创 MySQL---索引

MySQL服务器的本质是在内存中的,所有数据库的CURD操作,全部都是在内存中进行的。索引也是如此。影响算法效率的因素有两种:1.组织数据的方式。(数据结构)2.算法本身。索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。

2024-06-25 00:04:21 1112

原创 MySQL--复合查询

之前学过了基本的查询,虽然已经够80%的使用场景了,但是依旧需要了解剩下的20%。

2024-05-28 19:27:38 876

原创 MySQL--内置函数

简单使用:函数也可以嵌套使用:示例:给当前时间加上50天它也会自动帮我们计算相加后正确的日期。除了加天数,还可以加分钟,秒这些。示例:计算新中国成立到现在经过了多少天。

2024-05-27 15:48:40 601

原创 MySql--表的基本查询(CRUD)

基本的表查询就到这里。到现在,我们已经认识到了:不是只有从磁盘上的表结构导入到MySQL而形成的表才叫做表, 中间根据条件筛选出来的,包括最终结果,都可以认为是逻辑上的表。

2024-05-21 22:32:23 839

原创 MySql-表的约束

表的约束:在表中会有各种约束,通过约束,让我们在未来插入数据表中的数据是符合预期的。约束本质就是通过技术手段,倒逼程序员插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!所以约束的最终目的就是:保证数据的完整性和可预期性。

2024-05-19 21:59:56 889

原创 MySQL-数据类型

(图源来自网络)之后将会对常用的类型进行细分。

2024-05-13 13:49:25 571

原创 MySQL--对于库的操作&&对于表的操作

库的查看库的创建(创建一个test1数据库)同样,我们另起一个root会话,并执行然后发现多了一个test1目录删除库(删除test1数据库)删掉之后,对应的目录也就没有了。小小总结:1.创建数据库:create database db_name;-----本质上就是在/var/lib/mysql创建一个目录2.删除数据库:drop database db_name;-------本质上就是删除目录到这里我们也可以发现mysql是在文件系统之上的。

2024-04-24 01:48:09 1230

原创 笔试编程算法题笔记(附带C++代码)

用C++刷题的时候,cin和cout的时间效率是不如scanf和printf的,如果输入输出的数据量非常大时,建议使用scanf和printf,不然有可能算法没问题但是还是超时了。另外,有时候我们使用最大值或者最小值的时候,可以不用INT_MAX或者INT_MIN。有时候会导致数据溢出而报错,最大值可以使用 0x3f3f3f3f,最小值可以使用-0x3f3f3f3f。(4个3f)。

2024-04-21 20:29:04 600

原创 MySQL-数据库基础

首先是登录方式,一般用mysql也是一种网络服务。当然我们在本地登录时可以省去主机ip和端口号。-h表示我们要登录mysql在哪个ip的主机上,-P表示端口号。-u表示以谁的身份去登录。-p表示带密码。在安装mysql时,我们安装了mysql和mysqld。mysql是数据库服务的客户端。mysqld是数据库服务的服务器端。带d表示守护进程。mysql本质是基于CS模式的网络服务。C指的就是mysql,S指的就是mysqld。所以我们可以用来查到mysql服务。

2024-04-20 13:45:56 611

原创 MySql安装(Linux)

在前期建议使用root用户来进行操作,使用su -来切换成root用户,但是如果老是提示认证失败,那么有可能我们的root密码并没有被设置,我们可以先设置root的密码然后就可以切换了。我们使用来查看我这里说明是没有的,如果有的话,我们要先关掉,才能卸载。rpm是linux软件包管理工具,我们可以用来查看是否有mysql的安装包。如果有的话,可以先卸载掉。另外,mariadb是mysql的另一个开源版本。如果有,也可以删掉。

2024-04-19 00:06:01 1057

原创 多路转接-epoll/Reactor(2)

上次说到了poll,它存在效率问题,因此出现了改进的poll----epoll。目前epoll是公认的效率最高的多路转接的方案。

2024-04-06 01:08:44 1012

原创 高级IO/多路转接-select/poll(1)

1.阻塞IO:也是最常见的IO模型,在内核数据准备好之前,系统调用一直会阻塞式的等待。所有的套接字,默认都是阻塞方式。2.非阻塞IO:如果内核数据尚未准备好,那么系统调用会直接返回,返回错误码。非阻塞IO往往需要程序猿通过轮询的方式不断尝试读写文件描述符,对CPU来说是比较大的浪费。3.信号驱动IO:内核数据准备好的时候,使用SIGIO的信号通知应用程序进行IO操作。4.多路转接/复用IO:以阻塞等待的方式,同时等待多个文件描述符的就绪状态。以上的IO都是同步IO。

2024-04-03 20:36:21 1221

原创 网络层/数据链路层/其他协议/ARP/NAT

我们之前详谈过TCP协议,TCP协议主要是提供一种可靠的传输策略,但是并不能直接将报文发送给对方主机,而IP协议的本质就是提供一种将数据跨网络从A主机送到B主机的能力,而用户需要的是一种将数据 可靠的 跨网络从A主机送到B主机的能力。网络是划分了很多很多的子网的,子网之间通过路由器连接。将数据跨网络从C主机发送到D主机,首先得先找到目标主机的子网,然后才能找到目标主机。因此ip地址 = 目标网络 + 目标主机这样设计的方式可以大幅提高查找目标主机时排除其他主机的效率。

2024-03-28 19:42:29 686

原创 简单了解C++线程库

在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。return 0;另外,由于我这里没有传参,所以这是一个空线程,它不会启动的。除非进行移动赋值。

2024-03-27 00:22:34 1314

原创 传输层/UDP/TCP协议

TCP/IP协议用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”,这样一个五元组来标识一个通信(可以用netstat -n来查看)。

2024-03-16 20:07:19 1412

原创 Https协议

数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度 的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐。

2024-03-02 17:21:11 924

原创 数据结构——跳表

跳表(Skip List)是一种可以进行对数级别查找的数据结构,它通过在数据中构建多级索引来提高查询效率。跳表是一种基于链表的随机化数据结构,其本质是由多个链表组成,每个链表中的元素都是原始链表中的元素。我们知道链表的查找时间复杂度是O(N),如果这个链表数据是有序的,还是O(N),我们如何利用有序这一点,来进行优化呢?接下来就是我们的主角跳表登场。跳表在实际应用中有许多用途,例如作为Redis等数据库的有序数据结构实现,以及作为平衡树等数据结构的替代方案。

2024-03-02 00:19:37 1248

原创 数据结构--B树

B树:有序数组平衡多叉树;B+树:有序数组链表平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。实际应用中还是B+树使用的更为广泛。

2024-02-29 18:06:52 1133

原创 计算机网络基础2/http协议

是一个在Linux中使用的命令,它利用netstat工具来显示网络状态信息。-n-l-t-p综合起来,命令会显示系统上所有正在监听TCP端口的数字地址,以及与这些端口相关联的进程ID和进程名。这个命令在诊断网络问题、查看系统开放的端口以及确定哪些进程正在使用这些端口时非常有用。

2024-02-28 14:49:51 898

原创 LRU Cache

广义上的Cache指的是位于速度相差较大的两种 硬件之间 ,用于协调两者数据传输速度差异的结构。狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。我们可以在哈希表中的Val中存链表中结点的指针 ,每次查找或者插入都将这个结点放到链表的头部,如果Cache满了就从链表上尾删。实现LRU Cache的方法和思路很多,但是要保持高效实现O(1)的put和get,那么使用双向链表和。哈希表的搭配是最高效和经典的。最久没有使用过的内容。

2024-02-21 01:04:50 406 1

原创 数据结构—图

图是在数据结构中难度比较大,并且比较抽象一种数据结构。图在地图,社交网络这方面有应用。图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E)。图标的英文:graph。树是一种特殊的图(无环联通)。图不一定是树。树关注结点中存的值。 图关注的是顶点及边的权值。图的一些其他的概念:图可以表示城市之间的关系,也还可以表示社交关系。比如顶点是人的话,那么边就是好友,边权值就是亲密度这些。像微信,qq这样的就是无向图,只要是好友,就可以双方互发和接收消息,那么这个也就是强社交关系。像抖音,微博这些,我们关注别

2024-02-21 00:29:20 1115

原创 数据结构-并查集

在一些应用问题中,需要。。在此过程中。适合于描述这类问题的抽象数据类型称为。一般可以用数组来表示并查集,数据的下标就是每个数据的编号,对应的值如果是负数,那么就代表它自成一个集合,也就是一个根结点。如图,初始值一般都是负数,也就是每个元素都自成一个集合,如果一个元素是根,那么负数的绝对值则代表这个树有多少结点;如果不是负数,那么则说明这个元素不是根,且对应的值存的是父亲结点的下标。实际应用中也可以通过加入哈希表来设置更多的映射关系,这样的话可以将数组的下标作为key值,然后可以存人名这些。

2024-02-10 08:53:41 725 1

原创 网络编程-序列化和反序列化/应用层协议/

今天我们自定义的协议只能处理整形,而现实生活中还有浮点数的计算,或者超大数字的运算,那么此时一份协议肯定就不够用了,这里也可以设计三份协议,然后在报头中添加该计算要使用哪种协议。虽然今后我们在工作中,很少会自己自定义协议,设计序列化和反序列化,大多数都用现成的,但是我们必须要做过一次,心里有底才行。

2024-02-05 00:49:59 1007

原创 linux网络编程套接字编程基础,tcp和udp

这里对两种协议只是一个简单的直观的认识,后续还会有细节。其中需要注意的是这个可靠传输,这其实是一个中性词,不分褒贬。就如同化学里的惰性气体一样,虽然叫做惰性,但是并不是贬义而是它的特性。这里的可靠传输也是如此。可靠传输就是对传入的数据不仅传过去了,还要根据接收方的反馈来检测这个数据是否在传输的过程中出现丢包,乱序等错误,并且在等待反馈的过程中,这个报头的信息就一直维护在传输层。而不可靠传输就是直接把数据丢过去,是死是活都不管了,没有了检测,速度自然也就快很多。

2024-02-02 00:33:15 902

原创 计算机网络基础1

经历过操作系统部分的拷打后,终于来到了计算机网络部分。网络虽然我们每天都在用,但是或许是因为太过于常见,而导致使用起来觉得很理所当然,深究其原理却又摸不着头脑,笔者从今天开始记录在学习计算机网络的过程中,一些重要的知识笔记和代码。尽可能有条理的分享我学到的知识。

2024-01-25 03:57:05 848

原创 Linux线程/同步与互斥/锁/悲观锁/乐观锁/读写锁/简单线程池/生产者消费者模型/单例模式饿汉方式懒汉方式

1.进程是资源分配的基本单位。2.线程是调度的基本单位。3.线程也有自己的一部分数据:线程ID,栈,一组寄存器(线程的上下文),errno,信号屏蔽字,调度优先级。其中最重要的就是线程有独立的栈和上下文。除了数据和代码,线程还共享以下进程资源和环境:文件描述符表,每种信号的处理方式,当前工作目录,用户id和组id。

2023-12-05 01:40:11 958

原创 Linux进程信号

signal()第一个参数就是我们需要修改的几号信号,第一个参数的类型是一个函数指针,我们需要传我们要替换的函数。比如,之前那个死循环的进程,我们想让它收到2号信号后,不终止自己,我们可以对这个进程对于2号信号的动作进行自定义。// exit(1);int main()//进行自定义操作while(1)\n");sleep(1);这样当这个进程再死循环时,我们无法再使用ctrl+c(2号信号)的方式来终止这个进程了。我们可以用ctrl+z的方式来终止这个进程(19号信号)。

2023-11-24 20:44:12 62

原创 进程间通信2(共享内存)

共享内存区是最快的IPC形式。相比管道,进程之间用共享内存进行通信的速度非常快,因为这样通信是没有拷贝的。

2023-11-21 20:21:23 57

原创 进程间通信

3.这个资源一般是由操作系统提供的,如果是由其中一个进程提供的,那么就会破坏进程之间的独立性。1.首先进程间通信的本质就是,必须让不同的进程看到同一份“资源”。进程间通信是有标准的, systeam V和posix。4.我们访问这个空间,本质就是访问操作系统。2.这个 资源 是有特定形式的内存空间。

2023-11-14 12:50:51 58

原创 动态库和静态库

静态库的后缀是a,动态库的后缀是so。

2023-11-09 14:42:35 50

原创 文件的软硬链接

所以软链接其实就是一个快捷方式,它也是一个独立的文件,它有自己的inode属性和数据块,只是数据块里面存的是指向这个文件的路径。而硬链接它是一个文件的别名,它没有自己的inode,所以它不是一个独立的文件,每取一次别名,它inode里面的引用计数就会++,当减少到0时,这个文件才会被删除。

2023-11-07 20:03:23 34

原创 linux磁盘和文件系统

理解文件系统,首先要了解硬件,这里说的是磁盘。磁盘属于外设,跟内存不同,磁盘是永久性储存介质,即便它断电后,数据任然存在。虽然近几年我们的电脑在硬盘上已经固态革新了,因为固态硬盘访问速度快,而且不像磁盘那样容易出现故障,所以现在我们的电脑上几乎都是固态硬盘。那么磁盘也就是机械硬盘会被淘汰吗?答案是并不会,或者说很难会被淘汰。虽然我们现在都是用固态硬盘,但是磁盘相同成本下容量大的这一优点非常适合用来做企业的服务器段的存储设备。

2023-11-06 11:06:34 55

原创 Linux文件fd

文件都是由进程打开的。在Linux下,一切皆为文件。

2023-10-31 14:44:02 52

原创 空间配置器

在大型项目中,我们有没有想过,对于一些动态开辟空间的场景,如果空间大小比较小,但是又频繁申请释放的场景,那么频繁的从堆上拿取又放回是否有优化的地方呢?

2023-10-22 13:39:03 29

原创 进程创建与控制

当我们父进程创建完子进程后,页表中的内容会全部拷贝一份,但是父进程的页表中的物理地址的权限无论是读还是写,当拷贝进子进程的页表中后,都会变成只读权限。一般来说,当我们进行不被允许的权限操作时,操作系统会直接拦截,但是对于子进程要修改时,操作系统会先判断,然后再新分配一块内存空间给子进程进行重新映射,然后权限改为可读可写,这就是写时拷贝。当我们执行fork()后,就会在内核空间帮我们申请内存,来创建子进程。我们知道fork()可以用来创建子进程。

2023-10-20 19:42:11 85

原创 进程地址空间

我们知道一个进程=内核数据结构+代码和数据。以前我们对内核数据结构了解不是很多,但是这个内核数据结构其实就是task_struct+mm_struct+页表组成的。其中task_struct就是我们熟知的PCB结构,但这次我们要说的是它里面还有一个指针,指向了mm_struct,这个就是内存地址空间。以32位机器来说,它的内存最大值为4GB, 操作系统会对每一个进程画“大饼”,说这4GB都可以用,每次进程需要内存的时候,操作系统也会给与之对应的内存大小,但是操作系统也会根据情况而驳回申请内存的请求。

2023-10-20 16:46:53 32

空空如也

空空如也

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

TA关注的人

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