自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 【Java基础】抽象类与接口的区别与使用场合

抽象类与接口的区别最重要的区别是,接口的方法不可以有实现,并且是绝对的抽象方法。抽象类可以有实例方法用来实现默认行为。 接口中的变量申明默认是final, 而抽象类中变量申明可以是非final。 接口中的成员默认是public修饰,而抽象类中成员可以是private, protected等等。 接口通过关键字implements被其他类实现,而抽象类则是通过extends关键字被其他类扩...

2020-04-23 19:44:05 253

转载 mysql哪些情况不走索引

在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。现假设有t_stu表,age,sname上建立了索引索引列参与计算如果where条件中age列中使用了计算,则不会使用该索引 SELECT `sname` FROM `t_stu` WHERE `ag...

2019-09-22 22:06:40 1551 1

原创 KMP算法

定义 Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。算法流程假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字...

2019-09-22 21:11:17 263

转载 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数

#include<iostream>#include<string>#include<vector>using namespace std;int func(string word1, string word2){ int n1 = word1.size(); int n2 = word2.size(); int **dp=new int*...

2019-09-12 11:20:33 2862

原创 不借助辅助空间的二叉树前序、中序、后序遍历(Morris遍历)

二叉树线索化二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息n个节点的二叉树中含有n+1个空指针域。利用二叉树中的空指针域 来存放在某种遍历次序下的前...

2019-09-11 22:25:10 302

原创 MySQL的四种事务隔离级别

一、事务的基本要素(ACID)  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。  2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A...

2019-09-11 21:03:51 111

原创 C++中public、protected、private的总结

private,public,protected成员的访问权限public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。protected: 只能被类成员函数、子类函数及友元访问,对外是隐藏的,不能被其他任何访问,本身的类对象也不行,子类对象。类的继承后方法属性变化使用priva...

2019-09-11 21:02:06 141

原创 HTTP1.0与HTTP1.1的区别

HTTP1.0需要使用keep-alive参数来告知服务器要建立一个长连接,而HTTP1.1默认支持长连接; HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401; HTTP1.0是没有host域的,HTTP1.1才支持这个参数; HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求...

2019-09-11 20:59:47 146

原创 socket编程

TCP过程客户端:创建socket 绑定ip、端口号到socket字 连接服务器,connect() 收发数据,send()、recv() 关闭连接服务器端:创建socket字 设置socket属性 绑定ip与端口号 开启监听,listen() 接受发送端的连接accept() 收发数据send()、recv() 关闭网络连接 关闭监听对应关系:客户端的c...

2019-09-10 17:15:42 220

转载 计算机网络中端到端与点到点的区别

数据传输的可靠性是通过数据链路层和网络层的点对点和传输层的端对端保证的。端到端与点到点是针对网络中传输的两端设备间的关系而言的。端到端通信端到端通信是针对传输层来说的,它是一个网络连接,指的是在数据传输之前,在发送端与接收端之间(忽略中间有多少设备)为数据的传输建立一条链路,链路建立以后,发送端就可以发送数据,知道数据发送完毕,接收端确认接收成功。 也就是说在数据传输之前,先为数据的传输开...

2019-09-10 17:12:14 3232 1

原创 http与https

HTTP和HTTPS基本概念  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。  HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。...

2019-09-10 17:10:01 220

原创 ping

一、ICMP协议ICMP(Internet Control Message Protocol)因特网控制报文协议,工作在网络层。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议与ARP协议不同,ICMP靠IP协议来完成...

2019-09-10 16:50:00 188

原创 DNS域名解析协议

1)主机解析域名的顺序 找缓存、找本机的hosts文件、找DNS服务器2)DNS协议运行在UDP协议之上,使用端口号533)根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)过程:浏览器先检查自身缓存中有没有被解析过这个域名对应的i...

2019-09-10 16:49:44 255

原创 ARP地址解析协议

ARP协议工作原理:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。 当本网络的所有主机收到该A...

2019-09-10 16:45:15 221

原创 哪些函数不能是虚函数

构造函数,构造函数初始化对象,派生类必须知道基类函数干了什么,才能进行构造;当有虚函数时,每一个类有一个虚表,每一个对象有一个虚表指针,虚表指针在构造函数中初始化; 内联函数,内联函数表示在编译阶段进行函数体的替换操作,而虚函数意味着在运行期间进行类型确定,所以内联函数不能是虚函数; 静态函数,静态函数不属于对象属于类,静态成员函数没有this指针,因此静态函数设置为虚函数没有任何意义。 友...

2019-09-04 15:38:14 1584

原创 C++空类

空类的大小C++空类的大小不为0,不同编译器设置不一样,vs设置为1原因:C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址; 带有虚函数的C++类大小不为1,因为每一个对象会有一个vptr指向虚函数表,具体大小根据指针大小确定(32位的操作系统,指针大小为4个字节); C++中要求对于类的每个实例都必须有独一无二的地址,那么编译器自动为空类分...

2019-09-04 15:19:04 259

原创 C++函数返回引用

函数可以返回引用,但是不能返回局部变量的引用,因为函数调用完毕局部变量会被释放class Test{public: Test(int x = 1) { num= x; cout << "构造函数" << endl; } Test(const Test & a) { num = a.num; cout << "拷贝构造函数" &lt...

2019-09-04 15:10:35 1330

原创 C++ union共用体

C与C++中的union:一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型。C++ union结构式一种特殊的类。它能够包含访问权限、成员变量、成员函数(可以包含构造函数和析构函数)。它不能包含虚函数和静态数据变量。它也不能被用作其他类的基类,它本身也不能有从某个基类派生而来。Union中得默认访问权限是public。union类型是共享内存的,以成员最大长度的整数倍作为自己的大...

2019-09-03 16:44:42 323

原创 C/C++ 关于大小端模式

大端模式: 数据的高字节存在低地址 数据的低字节存在高地址小端模式: 数据的高字节存在高地址 数据的低字节存在低地址可以用来union测试CPU是大端模式还是小端模式#include<iostream>using namespace std;union Test{ int num; char ch;};int main(){ Test a;...

2019-09-03 16:33:13 266

原创 new和delete的实现原理,delete是如何知道释放内存的大小的?

new简单类型直接调用operator new分配内存;而对于复杂结构,先调用operator new分配内存,然后在分配的内存上调用构造函数;对于简单类型,new[]计算好大小后调用operator new;对于复杂数据结构,new[]先调用operator new[]分配内存,然后在p的前四个字节写入数组大小n,然后调用n次构造函数,针对复杂类型,new[]会额外存储数组大小:new表达式调...

2019-09-02 21:47:18 1790

原创 野指针

野指针指向内存被释放的内存或者没有访问权限的内存的指针成因“野指针”的成因主要有3种:指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如 char *p = NULL; char *str = new char(100); 指针p...

2019-09-02 21:43:49 191

原创 C++内存管理

内存管理对于C++的内存结构,主要有两种说法,一个是{栈区,堆区,全局区(静态区), 常量区,代码区};另一种说法为{栈区,堆区,全局区(静态区), 自由存储区} 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。  堆,就是那些由new分配的内存块,...

2019-09-02 21:39:22 96

原创 C++ 移动构造函数和拷贝构造函数

我们用对象a初始化对象b,后对象a我们就不在使用了,但是对象a的空间还在呀(在析构之前),既然拷贝构造函数,实际上就是把a对象的内容复制一份到b中,那么为什么我们不能直接使用a的空间呢?这样就避免了新的空间的分配,大大降低了构造的成本。这就是移动构造函数设计的初衷; 拷贝构造函数中,对于指针,我们一定要采用深层复制,而移动构造函数中,对于指针,我们采用浅层复制。浅层复制之所以危险,是因为两...

2019-09-02 15:20:11 9440 7

原创 C++实现只能动态或者静态创建对象

C++中建立类的对象有两种方式:(1)静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。(2)动态建立,例如 A* p = new A(); 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并...

2019-09-01 19:18:58 285

原创 C++拷贝构造函数

调用拷贝构造函数的三种情况:1)用一个类对象初始化另一个类对象2)函数的形参是类对象3)函数的返回值是类对象拷贝构造函数的参数必须是引用原因:例如 A a; A b(a);用对象a初始化b,需要调用拷贝构造函数,向拷贝构造函数传递实参a时,若参数不是引用,则又需要调用拷贝构造函数,因此导致无限递归调用拷贝构造函数,栈溢出。class A{ publi...

2019-09-01 12:13:03 149

原创 C++ 三个线程顺序打印ABC

#include<iostream>#include<vector>#include<thread>#include<condition_variable>using namespace std;mutex mu;std::condition_variable cond_var;int num=0;void func(char ch...

2019-08-30 16:08:41 3251

转载 C++ 多态

一般继承(无虚函数覆盖)下面,再让我们来看看继承时的虚函数表是什么样的。假设有如下所示的一个继承关系:请注意,在这个继承关系中,子类没有重载任何父类的函数。那么,在派生类的实例中,其虚函数表如下所示:对于实例:Derive d;的虚函数表如下:我们可以看到下面几点:1)虚函数按照其声明顺序放于表中。2)父类的虚函数在子类的虚函数前面一般继承(有虚函数覆盖)...

2019-08-26 23:10:02 90

原创 master公式

master公式:T [n] = aT[N/b] + c* n^k解法:①当a>b^k时,时间复杂度为O(n^(logb a))②当a=b^k时,时间复杂度为O((n^k)*logn)③当a<b^k时,时间复杂度为O(n^k)

2019-08-24 21:34:52 233

原创 C++ 虚析构函数

基类析构函数不是虚析构函数class Base{public: Base(){cout<<"base constructor"<<endl;} ~Base(){cout<<"base destructor"<<endl;}};class Derived:public Base{public: Derived(){cout&l...

2019-08-21 22:20:51 165

转载 linux的锁机制

互斥锁: mutex,用于保证在任何时刻,都只能有一个线程访问该对象。 当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒读写锁: rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程 同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获 取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意: 写锁...

2019-08-21 09:43:21 161

转载 系统调用和库函数的区别

前言从用户的角度来看,系统调用和库函数似乎没有什么区别,它们都是以C函数的形式出现,并且两者都为应用程序提供服务。但从实现者角度来看,它们之间是有根本的区别。那么,它们之间到底有哪些不同呢?在说明之前,先简单了解以下系统调用和库函数。系统调用系统调用指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。它通过软中断向内核态发出一个明确的请求。系统调用实现了用户态进程和硬件设备...

2019-08-19 16:56:17 150

转载 new和malloc的区别

new与malloc1,new分配内存按照数据类型进行分配,malloc分配内存按照指定的大小分配。2,new返回的时指定对象的指针,而malloc返回的时void*,因此,malloc的返回值一般都需要进行类型转换。3,new不仅分配一段内存,而且还会调用构造函数,而malloc不会。4,new分配的内存需要用delete销毁,malloc要用free来销毁;delete销毁的时候回调用...

2019-08-19 16:42:49 161

转载 C++ string类的常用函数

string的特性描述:int capacity()const;//返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const;//返回string对象中可存放的最大字符串的长度int size()const;//返回当前字符串的大小int length()const;//返回当前字符串的长度...

2019-08-18 11:36:20 2791

原创 C++仿函数

所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。  因此,这里需要明确两点:  1 仿函数不是函数,它是个类;  2 仿函数重载了()运算符,使得你可以像调用函数那样调用类。仿函数可以作为排序准则,比如用于自定义map、set的排序规则#include<iostream>#include<string>#include&lt...

2019-08-17 19:21:07 285

转载 MySQL索引原理和实现

“索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。”但是索引是怎么实现的呢?因为索引并不是关系模型的组成部分,因此不同的DBMS有不同的实现,我们针对MySQL数据库的实现进行说明。本文内容涉及M...

2019-08-17 10:33:46 168

原创 使用函数判断字符串中是否包含有某字串

C++风格C++的string类提供了字符串中查找另一个字符串的函数find其形式为:string::size_type string::find(string &);功能为在string对象中,查找string类型的子字符串是否存在将返回值给string::size_type型变量时,如果存在,返回起始位置,不存在则返回 string::npos。将返回值给i...

2019-08-13 11:20:26 4244

转载 IP、子网掩码、网络号和主机号的关系

IPV4的IP地址格式通常表示为xxx.xxx.xxx.xxx,其中xxx为十进制数,取值范围是[0,255],若用16进制表示则为xx.xx.xx.xx,其中xx的取值范围是[0,FF]。IP地址使用二进制位表示时,它共占4x8=32个二进制位,前n个二进制为表示网络ID,即网络号,后32-n个二进制位表示每个子网段的主机IP地址,其中n是根据各个子网内主机的数量的最大值来决定,即2^(32-...

2019-08-12 17:46:48 5522

原创 C++的multimap

key相同时,value的默认放置顺序C++11默认对multimap中key相同的value值,是按照输入顺序进行存储的#include<iostream>#include<string>#include<map>using namespace std;int main(){ multimap<string,int> m...

2019-08-07 21:14:42 505

原创 【dp】——随机的机器人

题目来自牛客网:【随机的机器人】有一条无限长的纸带,分割成一系列的格子,最开始所有格子初始是白色。现在在一个格子上放上一个萌萌的机器人(放上的这个格子也会被染红),机 器人一旦走到某个格子上,就会把这个格子涂成红色。现在给出一个整数n,机器人现在会在纸带上走n步。每一步,机器人都会向左或者向右走一个格子,两种情况概率相等。机器人做出的所有随机选择都是独立的。现在需要计算出最后纸带上红色格子的...

2019-08-02 22:08:19 330

原创 [dp算法]逃离农场

【逃离农场】牛牛在农场饲养了n只奶牛,依次编号为0到n-1, 牛牛的好朋友羊羊帮牛牛照看着农场.有一天羊羊看到农场中逃走了k只奶牛,但是他只会告诉牛牛逃走的k 只奶牛的编号之和能被n整除。你现在需要帮牛牛计算有多少种不同的逃走的奶牛群。因为结果可能很大,输出结果对1,000,000,007取模。例如n = 7 k = 4: 7只奶牛依次编号为0到6, 逃走了4只编号和为7的有:{0, ...

2019-08-02 16:41:11 259

空空如也

空空如也

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

TA关注的人

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