自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 博客系统

博客系统这篇博客主要是针对最近写的实战项目—博客系统进行一个详细的总结,在开发项目的过程中遇到了很多的问题以及解决的方法,通过这篇博客也是对自己所学知识的一个总结,以下是此项目的具体内容:项目名称:博客系统项目功能:实现一个web服务器,能够提供用户通过浏览器访问服务器,实现博客的展示以及对博客的增删查改的操作。框架设计:实现前端的界面,后台的服务以及数据的管理,其实运用的框架是MVC框架,MVC框架中,M代表业务模型,V代表用户界面,C代表控制器,简单的来说,就是前端界面将后台数据在界面进行展示,

2021-02-18 11:45:18 4114 11

原创 进程控制(创建、终止、等待、替换)

进程控制进程创建pid_t fork(void)—通过复制父进程创建一个子进程(数据独有,代码共享)返回值:对于父进程返回值大于0,是子进程的id,对于子进程返回值等于0,返回值小于0错误写时拷贝技术:子进程复制父进程,一开始两个进程都是同一块物理内存(但是虚拟地址空间以及页表这些信息都是进程独有的)因为进程间要具备独立性,因此当这块物理内存即将发生改变的时候,给子进程重新开辟空间复制数据pid_t vfork(void):—创建子进程,父子进程共用一个虚拟地址空间(使用的数据都是同一份),父进程

2021-08-07 11:37:19 175

原创 Linux中关于权限的概念及指令操作

权限概念以及指令操作权限的认识:对用户操作的权限限制系统操作权限:管理员用户-root-为所欲为,普通用户-权利收到一定的限制的用户,只能进行一些跟自己的相关的不涉及系统级的操作su-用户切换-为了切换用户的所有权限sudo-在不切换用户的情况下,临时为操作提权文件权限的认识:什么样的用户能够对文件进行什么样的操作文件的访问用户分类:u-文件所有者;g-文件所属组;o-其他用户文件的访问操作的分类:r-可读/可浏览; w-可写/可创建删除;x-可执行/可进入rwx rwx rwx—文件的权限

2021-07-28 15:50:35 164

原创 关于进程,这些知识你都会了吗

进程概念首先我们对进程进行介绍,进程顾名思义,就是运行中的程序,但是从操作系统的层面上来说,进程就是pcb,是操作系统对于程序运行的一个动态描述,通过这些描述让程序运行起来,实现操作系统对于程序运行的调度管理PCB描述信息:pcb在Linux下是task_struct结构体,进程标识符,上下文信息,内存指针,程序计数器cpu分时机制:将cpu处理程序运行的过程划分为时间片,每个程序在cpu上运行一段很短的时间,直到时间片用完,切换下一个进程并发:同一时间段。cpu资源不够的情况下,采用cpu分时机制

2021-07-28 15:04:29 152

原创 关于map和set你所必须要了解的关键点

map和set以及multiset与multimapset特点set是按照一定次序存储元素的容器在set中,元素的value也标识它,key和value是一样的,每个value是惟一的,set中的元素不能在容器中修改,但是可以从容器中插入或删除他们在内部,set中的元素总是按照特定的排序准则进行排序set容器通过key访问单个元素的速度通常比unordered_set容器慢,但是他们允许根据顺序对子集进行直接迭代set在底层是用二叉搜索树(红黑树)实现的注意要点与map和multima

2021-07-17 17:16:19 166

原创 关于01背包问题,你搞懂了吗?

01背包问题首先我们来看一下案例,通过案例来对01背包问题进行理解有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大?很多同学拿到这种题感觉无法下手,这是典型的01背包问题,下面通过一个具体的例子进行讲解,采用动态规划的方法解决01背包问题。首先根据动态规划的五部曲进行解题:1.确定dp数组及其下标的含义在这里我们采用的是二维数组进行定义的,dp[i][j]表示将下标为

2021-06-10 18:48:09 720

原创 浅谈单例模式

单例模式含义:一种非常典型的设计模式,一个类在内存中只能实例化一个对象单例模式的实现:一个类在内存中只有一份资源,提供一个统一的接口进行访问单例模式的实现方式饿汉模式所谓的饿汉模式,就是在程序的初始化阶段完成资源的申请加载初始化,对象的实例化,空间换时间的思想,“不管需不需要我全都要”实现代码template<class T>class Singleton{private: static T data;public: T *getInstance() { r

2021-06-05 17:07:15 81

原创 机器人路径(进阶版)

机器人路径问题—>进阶版问题描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?路径问题当我们拿到题目时感觉无从下抓,上一题我们是对没有障碍物的进行搜索,此时我们同样是进行动态规划五部曲,参照上一题机器人路径1.确定dp数组以及下标的含义dp[i][j] :表示从(0 ,0)出发

2021-05-27 20:15:19 1085

原创 机器人路径问题

机器人路径问题首先来看一下问题:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?分析:首先机器人从左上角(0,0)开始向右下角运动,每次机器人只能向右或者向下运动。第一种方法:深度搜索(不可用,时间复杂度过大)如图所示,将机器人向右移动看成是右子树,向下移动看成是左子树,求机器人的路径即求二叉树的叶子节点的个数,用深度

2021-05-27 17:23:31 1543 5

原创 VSCode安装配置

VSCode安装配置教程作用:编写代码的ide下载连接:https://code.visualstudio.com/详细步骤:一.官网下载安装1.点击Download 下载Windows x642.点击下载好的exe文件3.点击下一步,接下来就一直点击下一步,到安装路径的时候可以自定义到自己想要的目录下4.确认安装步骤,点击 安装 开始安装5.点击完成启动vscode二、配置环境1.打开VsCode界面,在点击插件图标下载中文插件2.按照上面的方法在插件里面下载ssh

2021-04-17 12:26:09 235

原创 Mobaxterm详细安装配置教程

Mobaxterm详细安装配置教程1.作用windows上用于使用ssh连接服务器或者开发板的工具点击下载2.详细安装教程:1. 软件的安装官网下载后解压文件,,运行 MobaXterm_Personal_11.1.exe 即可开始安装。第一次打开会自解压,会比较慢,后续就正常了。2. 创建SSH session安装完毕之后界面长这个样。点击菜单栏 「sessions」 –> 「new session」,即可弹出 「session setting」 对话框。点击确定后,输入密

2021-04-17 12:02:00 7473 1

原创 多线程-线程控制

线程概念概念:线程是进程中的一条执行流,是cpu执行调度的基本单位。进程:进程是一个pcb,一个程序动态运行的描述,通过这个描述可以实现操作系统对程序运行的调度管理。在Linux下是task_struct结构体在学习线程这里:线程是进程的一条执行流,一个进程中可以有多个·pcb,Linux下的线程执行流,是通过pcb是实现,且一个进程中可能有多个pcb,并且这些pcb共享同一个进程中大部分资源,相较于传统pcb更加轻量化,因此也被称为轻量级进程线程是cpu调度的基本单位,进程是系统进行资源分配的基本

2021-03-31 10:39:32 375

原创 进程虚拟地址空间

进程虚拟地址空间为什么操作系统不直接让进程访问一个物理地址,而是访问一个虚拟地址程序在编译时,会自动地给指令和数据进行地址编号,但是如果地址不连续,就会程序运行不起来,编译器的地址管理比较麻烦(无法动态的获知物理空间的使用情况,也就无法为数据进行编号)进程直接访问物理地址,如果此时有一个野指针,那么在进行操作野指针的时候可能会改变其他空间的数据,造成不安全的事件发生(无法进行内存访问控制)程序运行空间通常需要一块连续的空间,空间利用率低,通过虚拟地址空间映射到物理内存上进行数据存储,可以实现数据在

2021-03-19 17:51:55 425

原创 大小端字节序

大小端字节序什么是大小端字节序大端字节序:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。小端字节序:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。举个列子:如果对&1进行强转char*,那么返回的首元素是在低地址处取得的,如果低地址取得值和低位的值相等则是小端字节序#include<iostream>using namespace std;//判断大小端字节序//1.指针强转 &1=0x00000001 01在低位 *s取得值是

2021-03-14 16:06:03 322

原创 deque实现栈和队列

栈和队列的模拟实现deque双端队列deque双端队列是一种双开口的 “连续” 空间的数据结构,双开口意思是可以在头尾两端进行插入和删除的操作,且时间复杂度为O(1),与vector相比,头插效率高,不用搬移元素,与list相比,空间利用率高其实双端队列deque并不是连续的空间,他的底层类似于一个动态的二维数组。deque的缺陷虽然双端队列与vector相比,不需要搬运大量的数据,效率比较高,在扩容时也不需要搬运大量的元素,与list相比,空间利用率高,不需要存储额外的字段。但是,que

2021-02-24 16:11:39 1015

原创 友元类与内部类

友元与内部类友元分为友元函数和友元类友元是一种突破了封装的方式,有时候为了方便使用友元类,但是友元破坏了封装性,一般不会多用。友元函数可以直接访问类的私有成员,它是不属于类的内部,它是类外部的普通函数,不属于任何类,但是需要在类内部声明,声明时需要加friend关键字。class Date{ friend ostream& operator<<(ostream& _cout, const Date& d); friend istream& ope

2021-02-20 19:54:28 348

原创 函数重载、引用与指针、内联函数

函数重载函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。函数的返回值不能作为判断函数是否为重载函数,因为如果两个函数参数列表数据类型一模一样,只有返回值类型不一致,那么编译器在传参的时候不知道传递给哪一个函数,因为结果是未知的,所以函数重载不能以返回值类型作为判断条件。注意:通过C语言无法完成函数重载,而C++却可以,是因为C++是通过函数修饰规则来区分重载函

2021-02-19 16:13:39 232

原创 gcc升级高版本

gcc升级在很多情况下我们需要下载什么安装包的时候由于gcc版本过低,导致下载不了,下面我将升级的简单步骤列出:升级 高版本 gcc# 先获取 root 权限yum install centos-release-scl-rh centos-release-sclyum check-updateyum install devtoolset-7-gcc devtoolset-7-gcc-c++source /opt/rh/devtoolset-7/enable (这个可以放到 ~/.bashr

2021-02-14 11:13:52 2611

原创 Linux之信号

Linux之信号信号:信号和信号量不是同一个东西,信号是通知进程发生了某个事件,用来打断进程当前正在进行的操作,去处理这个事件,是一个软件终中断,功能是事件通知。== 信号的分类==信号分为可靠信号和非可靠信号,利用kill -l命令查看信号非可靠信号:1---31号(可能会发生信号丢失)可靠信号:34---64号(不会丢失)信号的生命周期产生—>在进程中注册---->在进程中注销—>处理; 阻塞 信号的产生: 硬件产生:ctrl+c中断 ctrl+z停止 ct

2020-11-28 15:55:10 181

原创 c++之priority_queue实现

priority_queue(优先级队列)优先级队列的定义:优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。实现原理:优先级队列默认的容器一般采用STL中的vector容器。因为vector具有高效的连续存储的效率,它的随机访问的效率比较高,当然也可以采用stack或者dequeue,其它本身是一个堆的结构,默认条件下生成大堆== 注意:优先级队列的实现的底层容器,默认采用vector,也可以采用dequeue,只是vector的随机访问效率较高,切记!!

2020-11-27 18:00:54 1332

原创 进程间通信之管道

管道进程间通信进程间通信是不能直接靠两个进程直接建立连接进行通信,需要依靠操作系统提供一个进程间都可以访问到的区域进行两个进程的共同访问,因为适用的场景不通,所以分为几种进程间的通信方式:消息队列、共享内存、管道、信号量进程间不能进行直接通信的原因:进程具有独立性,每个进程其实就是一个单独pcb,他们有自己独有的虚拟空间地址进程间只能访问自己的虚拟地址空间的虚拟地址,因而需要操作系统提供一个共享区域来实现进程间的相互通信管道:实质上是用于实现进程间通信的一块内核缓冲区,管道属于半双工通信,用于

2020-11-21 19:23:36 282

原创 vector的模拟实现

vector的模拟实现最近学习了vector的使用,下面对vctor进行了模拟实现,如有不足请指出:#include<iostream>#include<assert.h>#include<vector>using namespace std;template<class T>class Vector{public: Vector() :_start(nullptr) ,_finish(nullptr) ,_endOf

2020-11-19 10:53:59 148 2

原创 C++之String类的实现

String类的具体实现源码#include<iostream>#include<string>#include<assert.h>using namespace std;class String{ friend ostream& operator<<(ostream& _cout, const String& s) { for (int i = 0; i < s.size();

2020-11-14 17:58:35 201

原创 C++模板使用

C++模板的使用在c++中我们有时候会遇到需要我们写很多结构类似的代码段,为了减小我们的代码量,聪明的程序员们就想出了一种可以减小代码量的方法,当遇到相同结构的代码段时,我们制造一个模板,通过一个泛型来代替所有类型,所谓模板,就是编译器自动根据所给的类型自动生成想要的类型函数模板函数模板不是一个单纯的函数,它代表的是一个家族,与类型无关,在使用时函数模板会根据参数的类型生成与之对应的函数版本。在上图中,template表示的是泛型模板,class代表的类,也可以用typename替代clas

2020-11-03 16:07:24 245

原创 C++内存管理

C++内存管理 ###1.C++中整个内存分布分为堆区、栈区、内存映射段、代码段、数据段、还有一个内核区。全局数据和静态数据存储在数据段,文字常量区和代码段存储在代码段栈区又叫做堆栈段,是向上增长的,栈中主要存放的是一些临时变量,比如非静态局部变量,返回值,函数参数等。2.malloc、calloc和realloc...

2020-10-24 23:50:37 146

原创 排序算法代码实现

八种排序算法#include<iostream>#include<cstdlib>#include<stdio.h>#include<time.h>#include<vector>#include<list>using namespace std;void Print(int* array, int len){ for (int i = 0; i < len; ++i) { printf("%d "

2020-09-09 20:48:50 132

原创 虚拟机VMware安装Linux的详细步骤说明

虚拟机安装使用教程详细最近安装虚拟机出现了很多问题,弄了好几天,尝试过各种方法,现在将这些步骤一一给大家分享下如果觉得可以的话给个赞哈哈1 准备软件2 安装 VMWare …22.1 开启虚拟化…22.2 安装 VMware…43 安装 Linux…43.1 虚拟出一台机器…43.2 开始装机…63.3 安装 VMTools…143.4 设置 windows 和 Linux 的...

2020-04-04 19:01:22 279

原创 通讯录管理系统

通讯录管理系统首先创建一个主函数框架,实现各个功能int main(){ AddressBook address_book; Init(&address_book); //转移表,利用函数指针来降低时间复杂度 typedef void(*Func)(AddressBook*); Func func_table[] = { NULL, AddPersonInfo, ...

2020-03-15 09:44:57 307

原创 库函数的模拟与实现

关于strstr strcmp memcpy memove的模拟实现strstrstrstr的作用是返回字符子串在元字符中的位置#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h&g...

2020-03-11 10:10:08 166

原创 sizeof与strlen

sizeof 与strlen具体的应用实例实例1:int main(){char arr[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};printf("%d\n",strlen(arr)); //UB (未定义行为) 即错误的代码printf("%d\n",strlen(arr+0)); //UB strlen要求的类型是char* ,是以’\0’为结束标志的,arr不存在’...

2020-03-06 13:46:58 152

原创 C进阶之内存

内存内存是计算机的一个重要组成部分(冯诺依曼体系中的重要组成部分)1.如何理解内存想象一个大走廊,走廊上有很多房间,每个房间大小是1字节,每个房间都有门牌号(从0开始递增)称为“地址”,指针专门用于保存地址的变量。2.内存vs外存内存支持随机访问能力,计算机访问内存上某个地址的数据开销很小,不管地址的编号是大还是小。 外存也支持随机访问的能力,但是支持程度不如内存,开销大很多。内存存储...

2020-02-26 14:05:13 355

原创 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度

在这里插入代码片@TOC给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。要求:不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。我的思路首先看到这个要求后,我能首先想到这运用到查找和删除操作,查找直接是顺序查找,遍历数组中每一元素...

2020-01-12 18:06:40 1504

原创 #初识C语言

什么是C语言语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程 语言。第一个C语言程序#include<stdio.h>int main(){ printf("Hello World!"); return 0;}C语言中的数据类型char...

2019-12-09 23:49:51 175

原创 初识编程

初识编程自我介绍我是计算机科学与技术专业大二学生,一名刚刚进入学校学习编程的退伍军人,虽然刚开始学习编程还很难,但是我相信勤奋可以改变现状,这世界上没有比人更高的山峰,没有比双脚更长的路,我相信编程路上尽管艰难险阻,但是只要认真,没有什么难事.编程目标现在对于编程还只是一个简单地了解,希望通过不断学习达到能够解决编程实际问题的需要,并且在编程上有一定的深入了解,能够达到进入公司所要求的硬件...

2019-12-05 22:48:47 282

空空如也

空空如也

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

TA关注的人

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