自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 k_近邻算法

def classify0(inX,dataSet,labels,k): ''' 分类器 :param inX: 用于分类的输入向量 :param dataSet: 输入的训练样本集 :param labels: 标签向量,标签向量元素数目和矩阵dataSet的行数相同 :param k: 用于选择最近邻居的数目 :return: 排序首位的label 对未知类别属性的数据集中的每个点依次执行以下操作: 1、计算已知

2021-08-04 20:00:23 117

原创 Spring学习01

Spring简介 Sping是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Contro控制反转)和AOP(Aspect Oriented Programming面向切面编程)为内核。提供了展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还整合了开源世界众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业级开源框架。 优势 方便解耦,简化开发。通过Spring提供的IOC容器,可以

2021-04-12 23:06:38 109 1

原创 Maven

Maven概念 Maven(麦文)是一个项目管理工具。它本质是一个项目对象模型(POM:Project Object Model),是用来运行定义在生命周期阶段(phase)中插件(plugin)目标的逻辑。 可解决的问题 方便管理jar包 方便进行单元测试 方便打包发布 代码可重用,依赖管理,减少磁盘空间 依赖管理 Maven的核心特性是依赖管理,传统的Web项目中,我们需要将项目所依赖的jar包复制到工程中,这就导致了工程变的很大。 Maven工程不直接将jar包导入工程,而是通过在pom.xml文

2021-04-12 22:47:11 110

原创 lambda表达式

为什么要有lambda表达式 #if 0 int main() { int array[] = { 4, 1, 8, 5, 3, 7, 0, 9, 2, 6 }; //默认是排升序!! sort(array, array + sizeof(array) / sizeof(array[0])); //改变规则,排降序 sort(array, array + sizeof(array)...

2019-11-04 18:46:40 189

原创 C++多态

多态 多态就是多种形态,同一行为产生多种的状态。 多态是在不同继承关心的类对象,去调用同一函数,产生了不同行为,多态在继承的继承上的。 多态的两个条件: 1.基类中必须包含虚函数,在派生类中必须对基类的虚函数完成重写。 2.虚函数的调用:必须通过基类的指针或者引用调用虚函数。 表现方式:在程序运行时,基类的指针或引用指向不同类的对象时,调用不同类的虚函数。 只要成员函数和基才能被virtual所修...

2019-10-28 09:08:26 199

原创 AVL树

AVL树 二叉搜索树虽然可以缩短查找的效率,**但如果数据有序或接近有序二叉搜索树退化为单支树,查找元素相当与在顺序表中搜索元素,效率低下。**当向二叉搜索树中插入新节点后,如果能保证每个节点的左右子树高度之差绝对值不超过1(需要对树中的节点进行调整),即可降低树的高度,从而减少平均搜索长度。 空树也是AVL树。 AVL树的性质是: 它的左右子树都是AVL树 左右子树高度之差(简称平衡因子)的绝...

2019-10-26 21:30:21 165

原创 C++智能指针

为什么要有智能指针? 在C++中没有垃圾回收机制,用户需要自己来对已经申请的内存空间进行释放,如果不释放会存在内存泄漏问题。如果代码抛异常,资源没有回收也可能产生死锁。 智能指针的使用 首先介绍一下RAII,它是Resource Acquisition Is Initialization,即资源获取时就初始化,将资源使用方式用类的方式来进行封装。在构造函数中将资源进行初始化,在析构函数中清理资源。...

2019-10-25 20:45:16 125

原创 命令行更新gcc

先获取 root 权限 yum install centos-release-scl-rh centos-release-scl yum check-update yum install devtoolset-4-gcc devtoolset-4-gcc-c++ 安装完毕后, 需要手动开启(如果需要自动开启, 需要加到 bashrc 中) source /opt/rh/devtoolset-4/...

2019-10-12 19:48:43 1365

原创 TCP协议简单理解

tcp全称是“传输控制协议”。人如其名,要对数据的传输进行一个详细的控制。 tcp核心设计: 1.保证可靠性传输 能够及时的发现自己发送数据是成功还是失败 2.尽可能的提高传输效率 1,2进行权衡 TCP协议段格式 从左到右,唐僧问路,16位源端口,16位目的端口,32位序号,32位确认序号,4位首部长度,16位窗口大小,16位检验和,16位紧急指针,选项...

2019-10-12 19:47:39 387 1

原创 c++多继承自我理解

单继承与多继承 单继承:一个子类只一一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或者两个以上直接父类时称这个继承关系为多继承。 菱形继承:菱形继承是多继承的一种特殊情况。两个子类同时继承一个父类,又有一个子类继承这两个子类。 菱形继承的问题:从下面的代码可以看出,菱形继承有数据冗余和二义性的问题。 class Person{ public: string _name;//姓名 }...

2019-10-11 17:40:55 280

原创 c++继承简单的自我理解

什么是继承 继承机制是面向对象程序设计使用代码可以复用的重要手段,它允许程序员保持原有类的特性的基础上进行扩展,增加功能,这样产生的新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂认知的过程。继承是类设计层次的复用。 继承方式 public继承 protect继承 private继承 类成员/继承方式 public继承 protect继承 private继承...

2019-10-11 16:36:24 191

原创 UDP协议简单理解

UDP协议格式 从左到右,唐僧问路,16位源端口,16位目的端口,16位UDP长度,16位UDP检验和。 16位UDP长度,表示整个数据报(UDP首部+UDP的数据)最大长度 如果校验和出错,就会直接丢弃。 UDP的特点 UDP的传输过程类似于寄信 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。 不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发送到对方,UDP协议也...

2019-10-09 20:33:27 365

原创 http协议

认识URL 平时我们俗称的“网址”其实就是说的URL 带层次的文件路径:决定了网络服务器的哪一个资源文件 查询字符串:query_string(键值对) HTTP协议格式 通过使用fiddler抓包工具来认识HTTP协议格式。 请求 首行(使用空格分割) a.方法(GET获取含义/POST发送/PUT/DELETE/HEAD) b.URL c.http版本号.HTTP/1.1(当前最常见的版本...

2019-09-29 21:35:52 133

原创 OSI模型与TCP/IP模型

协议分层 为什么要协议分层 网络协议比较复杂,如果不拆分,就太复杂 分层之后有啥好处? a.拆分成多个层相当于拆分成多个模块,同时降低了整个系统的耦合程度 b.根据实际需要,随时可以替换其中某一层的协议 OIS七层模型 OSI七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了7层,每一层都有相关,相对于的物理设备,比如路由器,交换机。 它最大优点是将服务,接...

2019-09-28 23:00:31 181

原创 生产者消费者模型

生产者消费者模型,它是一个多线程场景中的典型应用,应用广泛,完成某些操作的时候,需要一些数据,这样的数据可能由专门的线程/进程产生,在由专门的线程/进程使用。 生产者消费者模型,它需要一个交易场所(存储数据的地方,可能是一个队列,也可能是一个栈,或者其他数据结构)。生产者负责生产数据,把数据放到交易场所中,消费者负责消费数据,把数据冲交易场所中取出。 生产者与生产者之间是互斥关系。 消费者与消费者...

2019-09-25 16:59:32 129

原创 Linux线程简单理解3

线程不安全 //写多线程一定确保是多核的 #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<unistd.h> #define Thread_num 2 int g_count=0; void* ThreadEntry(void* arg) { (void)ar...

2019-09-21 10:10:27 130

原创 Linux线程的简单理解2

创建线程 pthread_create() 函数第一个参数执行一个虚拟内存单元,该内存单元的地址即为新创建线程的线程ID,属于NPTL线程库的范畴。线程库的后续操作,就是根据该线程的ID来操作线程的。 结束线程 1.让线程入口函数执行结束。(主要使用的结束方式)与进程一样 2.pthread_exit 让本线程结束,pthread_exit 参数是一个void* 表示进程结束的返回值,很少用,一...

2019-09-21 09:24:14 135

原创 Linux线程简单理解

线程:**是操作系统能够进行运算调度的最小单位。**它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 在一个程序里的一个执行路径就叫做线程。线程是一个进程内部的控制序列。一切进程至少有一个执行线程。线程在进程内部运行,本质是进程地址空间内运行。在Linux系统中,在cpu眼里,看到的PCB都有比传统的进程...

2019-09-05 20:51:47 240

原创 动态库和静态库简单介绍

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 把一些.o文件打包成一起生成了一种特殊的二进程程序,自身不能直接执行,但是可以和其他的.c/.cpp文件编译生成了一个新的可执行程序。 应用场景: 发布小程序时,可以使用静态库的方式编译生成一个单独的可执行程序并且不依赖其他库。发布比较方便。 动态库(.so):程序在运行的时候才去链接动态...

2019-09-01 22:29:05 308

原创 简单shell实现

使用进程创建,进程等待和程序替换函数能实现一个低配版的shell 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<unistd.h> ...

2019-08-31 22:36:05 245

原创 Linux进程间通信

进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它)们发生了某种事件(如进程终止时通知父进程)。 进程控制:有些进程需要完全控制另一个进程的执行(Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并且能够及时知道它的状态改变。 进程间通信发展 管道 ...

2019-08-30 21:46:57 182

原创 c++stack

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的容器,并提供一组特定的成员函数来访问其元素,讲特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。 stack的底层容器可以是任何标准...

2019-08-29 22:48:39 544

原创 Linux进程控制

进程创建 在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程称为子进程,而原进程为父进程 #include<unistd.h> pid_t fork(void) 返回值:子进程返回0,父进程返回子进程的pid,出错返回-1 进程调用fork,当控制转移到内核的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程 **将父进程部分数据内容...

2019-08-28 17:43:30 127

原创 Linux进程地址空间

首先来段代码 3#include<iostream> 4 #include<stdlib.h> 5 using namespace std; 6 int g_val=0; 7 int main() 8 { 9 pid_t id=fork();//父进程返回子进程的pid 子进程返回0 10 //两份进程共有一份代码,写实拷贝 11 ...

2019-08-27 20:28:46 148

原创 Linux环境变量

基本概念 环境变量一般是指在操作系统中来指定操作系统运行环境的一些参数,如我们编写c/c++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途,还有在系统当中通常有全局特性。 常见环境变量 PATH:指定命令的搜索路径 HOME:指定用户的主工作目录(即用户登录到Lin...

2019-08-27 20:11:19 132

原创 c++list

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不关联的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。 与其他序列式容器相比(array,vector,de...

2019-08-26 14:42:09 423

原创 c++vector基本实现

#include<iostream> #include<algorithm> #include<assert.h> #include<string> using namespace std; namespace bit{ template<class T> class Vector { public: //Vector的迭代...

2019-08-25 19:48:32 278

原创 c++vector迭代器失效问题

1.vector是表示可变大小数组的序列容器 2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理 ...

2019-08-24 21:34:53 357

原创 linux进程概念

进程 课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(cpu时间,内存)的实体 描述进程—PCB 进程信息被放在一个叫做进程控制块的数据结果中,可以理解为进程属性的集合。 Linux操作系统下的PCB的进程的数据结构是:task_struct,task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。 task_strcut...

2019-08-22 22:06:40 120

原创 c++string的基本实现

class String { public: typedef char* Iterator; friend ostream& operator<<(ostream&_cout,String&s); String(const char* str = "") { //构造string类对象时,如果传递nullptr时,认为非法,加上断言 if (n...

2019-08-17 22:02:54 133

原创 c++浅拷贝与深拷贝

先看下面这份代码 class String { public: String(const char* str="") { //构造string类对象,如果传递nullptr指针,认为程序非法,此处断言下 if (nullptr == str) { assert(false); return; } _str = new char[strlen(str)+1]; ...

2019-08-17 17:38:14 122

原创 c++string类

1.string是表示字符串的字符串类 2.该类的接口与常规容器的接口基本相同。 string类对象的常见构造 void TestString() { string s1;//构造一个string空类对象s1 string s2("hello bit");//用c字符串的形式构造一个string类s2 string s3(10, 'a');//用10个字符‘a’构造string类对象s3 ...

2019-08-15 21:56:03 225

原创 c++STL简介

1.什么是STL STL是c++标准库的重要组成部分,不仅仅是一个可复用的组件库,而且是一个保罗数据结构与算法的软件框架。 2.STL的六大组件 仿函数:greater less 算法:find swap reverse sort merge 迭代器:iterator const_iterator reverse_iterator const_iterator 空间配置器:allocator 容器...

2019-08-15 21:13:28 385

原创 c++模板

1.泛型编程 问题提出:怎么编写一个通用的交换函数呢? 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 2.函数模板 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 template<typename T> void Swap(T& left, T& right) { T te...

2019-08-14 22:44:56 159

原创 c++内存泄漏

1.内存泄漏 内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 2.内存泄漏分类 堆内存泄漏 堆内存指的是程序执行中依据须要分配通过malloc/calloc/realloc/new等从堆中分配的一块内存,用完后必须通过调用相应的free或者delete删掉。...

2019-08-13 21:40:08 131

原创 c++单例模式

1.设计模式 设计模式是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结。(套路) 设计模式的目的:为了代码可重用性,让代码更容易被他人理解,保证代码的可靠性。设计模式使代码编写真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样。 2.单例模式 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所以程序模块共享。 ...

2019-08-13 21:17:09 114

原创 c++内存管理

1.c/c++这程序内存区域划分 栈:又叫堆栈,非静态成员变量/函数参数/返回值等等,栈是向下增长的 内存映射段:它是高效的i/o映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。 堆:用于程序间运行时的动态内存分配,堆是可以向上增长的 数据段:存储全局数据和静态数据 代码段:可执行代码和只读常量 2.c语言中动态内存管理方式 void* malloc (...

2019-08-12 19:43:54 161

原创 c++内部类

1.概念 如果一个类定义在另一个类的内部,这个类就叫内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象取调用内部类。外部类对内部没有任何优越的访问权限。 2.特性 内部类可用定义在外部类的public,protected,private都是可以的 注意内部类可以直接访问外部类中的static,枚举类,不需要外部类的对象/类名。 sizeof(外部类)=外部类,和内部类...

2019-08-10 17:46:16 166

原创 c++友元

1.友元 友元分为友元函数和友元类。 友元提高了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。 2.友元函数 当我们尝试取重载operator<<,然后没法将operator<<重载成成员函数。因为cout的输出流对象和隐藏的this指针在抢占第一个参数的位置。this指针默认的是第一个参数也就是左操作数,但实际使用cout需要的是...

2019-08-10 17:22:22 203

原创 c++static成员

1.概念 声明static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称为静态成员函数。静态成员变量一定要在类外井下初始化!! 2.特性 静态成员为所以类对象所共有,不属于某个实例。 静态成员变量必须在类外面定义,定义时不添加static关键字,类外定义实际是分配内存 静态成员函数没有隐藏的this指针,不能访问任何非静态成员变量 静态...

2019-08-10 16:07:24 129

空空如也

空空如也

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

TA关注的人

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