- 博客(38)
- 收藏
- 关注
原创 git命令
git pull // 拉取代码git status // 查看git代码的变更情况git restore ./workspace // 撤销对workspace的修改
2021-04-12 09:40:02 132
原创 【STL算法】STL中的常用查找算法
文章目录findfind_ifcountcount_iffind功能: 查找指定元素,找到就返回元素的迭代器,找不到就返回结束迭代器end()函数原型: iterator find (iterator first, iterator last, const T& val);first:开始迭代器last:结束迭代器val:要查找的值vector<int> v;v.push_back(1);v.push_back(5);v.push_back(3);v.push_
2020-10-24 22:48:23 173
原创 【MySQL】视图
文章目录视图的概念视图的作用视图的使用视图的概念视图是什么?视图包含行和列,是一张虚拟的表视图表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询的基础上视图中不存放数据,数据存在视图所引用的原始表中一张原始数据表可以创建不同的视图呈现给不同的用户视图的作用视图能干什么?视图主要用于查询,不建议使用视图对表进行修改视图可以防止未经许可的用户访问敏感数据视图可以降低数据库的复杂程度视图可以将多个物理数据库抽象为一个逻辑数据库视图的使用创建视图:creat
2020-08-13 21:03:44 363
原创 【MySQL】索引和事务
文章目录索引事务索引索引是一种特殊的文件,索引之于数据库相当于目录之于书籍,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现索引的作用:(1)对于插入、删除数据频率高的表,不适用索引(2)对于某列修改频率高的,该列不适用索引(3)通过某列或某几列的条件查询频率高的,可以对这些列创建索引索引使用场景与特点:数据量较大,且经常对这些列进行条件查询。该数据库表的插入操作,及对这些列的修改操作频率较低。索引会占用额外的磁盘空间。
2020-08-13 01:07:12 333
转载 关系型数据库设计:三大范式的通俗理解
关系型数据库设计:三大范式的通俗理解目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。举例说明:在上面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下:可见,调整
2020-08-12 22:21:52 335
原创 【MySQL】表的增删改查
文章目录新增(Create)查询(Retrieve)修改(Update)删除(Delete)新增(Create)先创建一张学生表DROP TABLE IF EXISTS student; -- 若存在先删除CREATE TABLE student ( -- 创建学生表 设置四个字段:编号、学号、姓名、qq邮箱id INT,sn INT comment '学号',name VARCHAR(20) comment '姓名',qq_mail VARCHAR(20) commen
2020-08-12 01:14:58 418
原创 TCP/IP五层模型——传输层协议(TCP/UDP协议)
文章目录UDP协议TCP协议TCP协议的特殊机制传输层协议负责应用程序之间的数据传输。比较知名的应用层协议有:UDP协议、TCP协议如何负责应用程序之间的数据传输,udp协议特性和tcp协议的特性到底从何而来UDP协议UDP协议特性:无连接,不可靠,面向数据报无连接:通信的时候,不需要建立连接,只需要知道对方地址信息,就可以直接发送数据不可靠:通信过程中,不保证数据安全可靠、有序地到达对端面向数据报:限制最大传输大小的一种传输方式udp报文组成:协议头信息(源端口、目的端口、数据报长度、
2020-08-11 00:11:00 1086 1
原创 TCP协议的“三次握手“和“四次挥手“
三次握手、四次挥手:握手为什么三次:两次不安全,四次没必要- tcp双向通信需要确保对方都在线,因此都会向对方发送SYN请求,防止延迟的SYN/发送SYN后退出挥手为什么四次:发送FIN只是说不再发送数据,不代表不再接收数据,被动关闭方依然有可能继续发送,只有等到不再发送数据才会发送FIN握手失败后服务端如何处理的:若服务端回复ACK+ SYN后,迟迟无法得到回复,则服务端会发送RST重置连接报文,然后销毁socketSYN泛洪攻击:恶意主机,不断的发送SYN请求给服务器,但是不进行最后- -次A
2020-08-10 21:12:01 351
原创 TCP/IP五层模型——应用层协议(HTTP、HTTPS)
文章目录应用层知名协议:HTTP协议网址的元素HTTP协议格式首行头部空行正文应用层协议负责应用程序之间的数据沟通应用层自定制协议:自己定义的协议,也叫私有协议二进制序列化/ json序列化/ protobuf序列化序列化:将数据对象按照指定协议进行组织成为进行持久化存储/数据传输的数据格式的过程反序列化:将持久化存储/数据传输的二进制数据按照制定协议进行解析得到数据对象的过程应用层知名协议:HTTP协议HTTP协议也叫做超文本传输协议使用场景:通过网址请求网络中的某个资源网址:统一资
2020-08-10 15:25:36 1107
原创 网络套接字(socket)编程
文章目录socketudp编程tcp编程socketsocket是一套网络编程接口,类似于中间件;上层用户可以通过这些接口简单的完成网络通信传输,而不需要过于关心内部实现过程udp协议:用户数据报协议—无连接、不可靠、面向数据报(无序、有最大长度限制的传输服务)应用场景:实时性>安全性。例如:视频传输tcp协议:传输控制协议—面向连接、可靠传输、面向字节流(有序,双向的字节流传输服务,不限制上层数据传输大小)应用场景:安全性>实时性。例如:文件传输网络通信:客户端和服务端主
2020-08-10 02:04:20 692
原创 计算机网络基础知识
文章目录IP地址PORT端口网络通信协议数据的传输流程网络字节序IP地址概念:在IPv4协议版本中,IP地址是uint32_t 无符号4个字节(32位)的整数;在IPv6协议版本中,IP地址是uint8_t addr[16]作用:在网络中唯一标识每一台主机(才能实现点到点精确通信)在网络中,每条数据中都要包含两条信息:目的IP地址、源IP地址目的IP地址:能够让网络中的路由器为每一条数据根据目的地址选择不同的路径到达对端主机源IP地址:能够让对端主机知道数据是谁发送,以便于回复数据源IP地址&
2020-08-09 22:15:02 394
原创 多线程
线程概念:线程是进程中的一条执行流在linux中,pcb是调度程序运行的描述,一个pcb就可以调度一段程序的运行;线程是进程中的一条执行流,而这个执行流linux下就是通过pcb实现的,因此线程是一个pcb;并且这些pcb共享了进程中的大部分资源,因此相较于传统的pcb更加轻量化,所以称之为轻量级进程在linux操作系统中,其实没有线程的概念,只有轻量级进程的概念,在linux下pcb可以实现程序的调度运行,因此在实现线程的时候,使用了pcb来实现;创建线程会伴随在内核中创建一个pcb来实现程序的调
2020-08-09 20:48:20 740
原创 进程间通信的方式
文章目录进程间通信管道管道的特性匿名管道命名管道共享内存消息队列信号量进程间通信进程间通信(IPC):操作系统为用户提供的几种进程间通信方式为什么操作系统要为用户提供进程间通信方式?因为进程的独立性(每个进程都有自己的独立虚拟地址空间,操作的都是自己的虚拟地址),因此进程之间无法直接通信如何提供进程间通信方式?给多个进程之间提供一个大家都能访问到的传播介质进程间通信的方式:从unix借鉴而来:管道(资源传输)systemV标准的进程间通信方式:共享内存,消息队列,信号量命令
2020-08-09 16:20:28 443
原创 Linux下文件输入输出操作
基础IO:文件输入输出操作C标准库IO接口:fopen、fclose、fwrite、fread、fseek、stdin、stdout、stderrfopen:FILE* fopen(char* filename,char* mode);(文件名称,打开方式)打开方式:r只读 r+读写 w只写 w+读写 a追加写 a+追加读写 b二进制操作追加写:每次写入数据总是写入到文件末尾r+的读写和w+的读写有什么区别:r+读写打开文件时若文件不存在则报错,w+读写打开文件时若不存在则创建,若存在则清空原有
2020-08-09 14:26:07 783
原创 【C++】C++中的类型转换
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast文章目录static_castreinterpret_castconst_castdynamic_caststatic_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换int a = 10;double b = st
2020-08-08 15:46:32 248
原创 【C++】C++实现单例模式
一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。单例模式有两种实现模式:饿汉模式不管将来用不用,程序启动时(main函数之前)就创建一个唯一的实例对象优点:实现简单缺点:若程序中单例较多,可能会导致进程启动慢;且如果有多个单
2020-08-08 15:08:38 350
原创 【C/C++】动态内存管理详解
文章目录C语言中的内存操作关键字malloccallocreallocfreeC++中的内存操作关键字newdelete总结C语言中可以使用malloc、calloc、realloc来开辟堆区内存,使用free来释放堆区内存C++中用new来开辟堆区内存,在堆区开辟的数据需要程序员手动释放,用delete来释放C语言中的内存操作关键字mallocvoid* malloc (size_t size);这个函数可以用来向内存申请一块连续可用的空间,并返回指向这块空间的指针如果开辟成功,则返回一
2020-08-02 18:55:16 382
原创 【C++】智能指针
目录内存泄漏智能指针内存泄漏什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。在下面这段代码中,运行main函数时先执行Func函数,Func函数先new了一个数组,再调用执行Division函数若执行Division函
2020-07-29 23:58:40 986
原创 【C++】C++11的部分特性--右值引用、智能指针、lambda表达式、线程库等
C++11标准对C++核心语言进行了扩充,引入了很多有用的特性,在很大程度上方便了用户的使用。目录初始化列表变量类型推导范围for循环final与override智能指针新增加容器默认成员函数控制右值引用初始化列表C++11扩大了使用大括号初始化的适用范围,使大括号括起来的初始化列表可以初始化所有内置类型和用户自定义类型,而且在使用时,可以加"="也可以不加。// 内置类型的初始化int x1 = { 42 };int x2{ 42 };// 动态数组的初始化int* arr = new
2020-07-29 13:25:52 701
原创 【LeetCode】两个数组的交集
题目描述:给定两个数组,编写一个函数来计算它们的交集。LeetCode示例:LeetCode链接:两个数组的交集题意分析:此题描述具有一定误导性,在示例一中,两数组的交集本应为[2,2],而题目给出的正确答案为[2],所以隐含的意思是:需要对交集中重复的元素去重。我们先分别对两个数组元素进行去重,再求出交集,也能得到正确的结果去完重复元素之后,遍历数组1,在数组2中查找是否存在相同元素,若存在则将这个元素放入交集中。题目代码:class Solution {public: v
2020-07-14 18:36:20 287
原创 【剑指offer】斐波那契数列
题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。LeetCode链接:斐波那契数列力扣要求答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。题意分析:此题可用递归求解,但此题用递归求解
2020-06-29 23:51:25 319
原创 【剑指offer】旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。LeetCode链接:旋转数组的最小数字解题思路:暴力求解,将数组遍历一遍,找出最小数字即可题目给出了数组有序的条件,因此可使用二分查找法来提高效率,每次查找可排除一半的范围代码:...
2020-06-29 19:01:58 266
原创 【剑指offer】用两个栈实现队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。LeetCode链接:用两个栈实现队列解题思路:代码:...
2020-06-28 14:58:26 297
原创 【剑指offer】根据前序遍历序列和中序遍历序列重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字LeetCode:重建二叉树题意分析:前序序列的第一个节点必定为根节点在中序序列中,根节点在中间,左子树在根节点左边,右子树在根节点右边通过左子树序列的长度,可以在前序序列中从第二个元素开始按顺序找出左子树的节点,后面的序列即为右子树的前序遍历序列递归创建即可...
2020-06-28 13:31:09 356
原创 【剑指offer】从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值例如:输入:head = [1,3,2],输出:[2,3,1]LeetCode链接题目分析:此题给的是一个单链表,单链表不支持随机访问,只能从头到尾,而题目又要求倒着打印,如果每打印一个节点都遍历一次的话,时间复杂度就为O(n)。那么,有没有时间复杂度低一点的方式呢?由此题题意可以得知,后边的节点需要先打印,这和栈的特性很相似;因此我们可以定义一个栈,将单链表的每个节点的值依次存入栈中,再依次出栈存入数组中来实现。代码如下:/**
2020-06-28 13:30:07 287
原创 【剑指offer】替换空格
题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。例如:输入:s = “We are happy.”,输出:“We%20are%20happy.”LeetCode链接题目分析:若从前向后拷贝,空格只有1个字符,'20%'是三个字符,会覆盖后面的内容,因此需要从后向前拷贝我们可以定义两个指针,拷贝完后指针向前移动,遇到空格则替换为’20%’直到拷贝到字符串开头或者两个指针相遇才算替换完了所有的空格因此循环退出的控制条件为:原字符串指针下标>=0并且新字符串指针下标>原
2020-06-27 21:22:17 288
原创 【剑指offer】二维数组中的查找
题目描述:在一个 二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。LeetCode链接示例:若不考虑数组已经排好序的特点,可以进行暴力求解,将数组遍历即可;但是,既然题目提供了数组有序这个条件,我们就应使用这个条件;因此,在这里我们不讨论这种暴力求解法。解题思路:选取右上角的数字循环和要查找的数字进行比较:若右上角数字=要查找的数字,则返回true;若右上角的数字<要查找
2020-06-27 16:32:14 324
原创 实现一个简单的shell
shell:命令行解释器,是一段程序,获取标准输入,进行解析,得到用户想要运行的shell命令程序名称,以及运行参数,然后运行这个指定的程序,将参数赋予其中。minishell编写思路:1.获取标准输入,得到用户输入的字符串--------gets从标准输入获取一行数据2.对输入的数据进行解析,得到指令程序名称以及运行参数--------按照空格对字符串进行分割,定义一个字符串指针,指向输入数据的起始位置,如果是空格,指针就往后移动,直到不是空格,然后将非空格走完,直到遇到空格为止,则认为这次的字符串
2020-06-13 15:04:00 552
原创 Linux下进程的相关操作
进程的相关代码操作创建:pid_t fork(void);----通过复制父进程创建子进程----父子进程数据独有,代码共享写时拷贝技术:子进程创建出来后,各个虚拟地址在物理内存中的指向与父进程完全相同,这是为了提高子进程的创建效率(否则要为子进程开辟物理内存,拷贝数据、更新页表,整个过程比较慢,并且有可能子进程根本不会用这些数据),若某一块物理内存中的数据即将发生改变(某个进程要对这块内存进行写操作),则给子进程相应的数据开辟物理内存,将数据拷贝过来代码共享:主要因为代码是只读的,不能改变的。返
2020-05-31 20:12:09 323
原创 进程、环境变量和程序地址空间
目录进程程序的描述信息中都包含哪些信息怎么样来创建和查看进程?linux下进程状态:几个特殊的进程环境变量命令操作:代码操作:程序地址空间虚拟地址空间是什么?为什么要使用虚拟地址空间页表如何映射虚拟地址和物理地址、如何通过虚拟地址找到物理内存进程进程实际上就是一个程序的运行中的描述信息----pcb,通过这个描述信息可以实现对程序的运行调度和管理,linux下这个pcb就是一个task_struct结构体;为什么需要对程序的运行进行调度和管理呢?这就需要了解cpu的运行机制。cpu分时机制:操作系统
2020-05-31 19:58:24 631
原创 Linux常用工具
目录软件包管理工具yum个人编程工具编辑器:vim编译器:gcc/g++调试器:gdb项目的管理工具项目的自动化构建工具:make/Makefile项目的版本管理工具:git软件包管理工具yum如何查看能够安装的软件包yum list 默认是去系统的官方服务器请求当前版本的系统能够安装哪些软件包yum list | grep vim 从yum list中查找包含有vim字段的行yum search vim 与上条命令效果相似如何安装指定软件包安装软件包是给系统安装应用,因此需要
2020-05-28 18:42:14 352
原创 Linux权限
目录linux下权限的认识Linux系统的操作权限:Linux下文件的操作权限文件权限的基本操作umaskchmod粘滞位linux下权限的认识权限是什么–对用户的一种权力限制(出于系统安全考虑)Linux系统的操作权限:管理员用户(root)普通用户Linux下文件的操作权限文件对用户进行分类:所有者(u)/所属组(g)/其它(o)对用户所能进行的操作进行分类:可读(r)/可写(w)/可执行(x)权限的表示方法:打开终端,敲下ls -l查看文件详细信息在上面的图片中,以a.o
2020-05-27 16:12:23 296
原创 Linux常用基础指令
Linux操作系统因为其开源和免费的特性,在企业级服务器市场占据了很大份额,因此我们需要学习在Linux下的编程以适应企业用人需求;而在学习linux时,我们首先需要了解一些常见的指令目录标题标题...
2020-05-26 19:51:18 1099
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人