自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入简出mysql

深入简出mysql:前半部分

2017-03-03 10:00:33 595

原创 为什么春运火车票这么难买

又到一年过年时间,传统思维再加上每年也就这个长假了,所以我们都要回家,因为学生没钱只能做火车,但是火车票根本就买不到,身为学生,没有了提前60天开售的弱势保护机制,引入了脑残的团体票机制,你妹的20个小时的火车会去做硬座吗,自然没人会买了,结果卧铺放票时间和其他人一样了,根本就买不到票啊,国家难道不知道这个问题吗,还是官员都有专车,根本不用买票,可悲啊

2016-12-23 14:22:14 899

原创 [置顶]java中的内部类

一.什么是内部类?  答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类二.为什么要使用内部类?  答:1.内部类可以提供更好的封装,将一个类隐藏在另一个类内,不允许同一个包中其他类访问这个内部类    2.内部类的方法可以直接访问外部类的所有数据,包括私有的数据    3.内部类所实现的功能使用外部类同样可以实现,只是有

2016-10-07 10:08:33 252

原创 [置顶]java类中的static成员变量和static方法简单介绍,持续补充

一.静态成员变量    1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用。  2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收二.静态方法    1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员;如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量  2.

2016-10-07 10:08:31 348

原创 javascript获取页面文档内容

JavaScript基础一.用document对象获取页面标题二.用ducument访问以下两个表单第一个,文本框的值"textform"> "textname" type="text" value="请输入文本" />第二个,按钮的值 "submitform"> "submit" name="submitname" value="第一个表单内的

2016-10-07 10:08:24 586

原创 c++基础五个题(三)

一。一个对象访问普通函数和虚函数的时候,哪一个更快?    访问普通函数更快,因为普通成员函数在编译阶段已经被确定,因此在访问时直接调用对应地址的函数,而虚函数在调用时,需要首先在虚函数表中查找虚函数所在的地址,因此比普通函数要慢一些。 二。什么情况之下,需要析构函数是虚函数?    首先存在类继承并且析构函数确实析构了一些资源,这样当父类指针指向子类对象时,析构的时候只会释放父类

2016-10-07 10:08:20 244

原创 c++基础五个题(二)

一。c++中static的作用  1.隐藏:当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,static函数作用就是为了隐藏  2.可以保持变量的持久:存储在静态数据区的变量会在程序刚开始的时候进行唯一一次初始化,共有两种变量存储在静态存储区:全局变量和静态变量,但是静态变量可以控制可见范围(隐藏)  3.将static变量默认初始化为0  4.c+

2016-10-07 10:08:17 194

原创 c++基础五个题(一)

一.深拷贝和浅拷贝?    浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了还是小李死了,都是这个人死了    深拷贝:源对象与拷贝对象独立,其中任何一个对象的改动都不会对另外一个对象造成影响,举个例子:一个人叫张三,但是后来他克隆了一个人叫李四,那么张三和李四

2016-10-07 10:08:14 199

原创 如何定一个只能在堆上或者只能在栈上定义的类

C++中,对象的建立分为两种,一种是静态建立,如A a;另一种是动态建立,如 A *ptr=new A;静态建立:由编译器为对象在栈上分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象,使用这种方法,直接调用类的构造函数动态建立:是通过new运算符将对象建立在堆空间中,这个过程分为两步,第一步是执行operator new()函数,在堆空间中搜

2016-10-07 10:08:10 405

原创 实现单例模式的线程安全的类

单例模式:是设计模式中比较简单的一种,适合于一个类只有一个实例的情况,比如窗口管理,打印缓冲池和文件系统单例模式特点:一.确保一个类只有一个实例被创建2.在不影响单例类的客户端的情况下允许将来有多个实例,经典的模式:懒汉式,饿汉式,登记式3.提供了一个对全局对象的全局访问指针 模式:一.懒汉式:延迟加载,也就是说实例直到第一次用到的时候才会创建(时间来换空间),并在以后

2016-10-07 10:08:07 243

原创 设计一个洗牌的程序?就是将这副牌进行随机交换

#include #include #includeusing namespace std; void Swap(int &a, int &b){// 有可能swap同一变量,不能用异或版本 int t = a; a = b; b = t;}void RandomShuffle(int a[], int n){ //洗牌程序 f

2016-10-07 10:08:05 320

原创 STL中vector,Map,Set的实现原理

vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再

2016-10-07 10:08:02 330

原创 实现一个Memcpy函数:将源指针所指的区域从起始地址开始的n个字节复制到目的指针所指区域

首先肯定要先看看这两部分是不是有内存重叠?为什么?1.因为如果有内存重叠(目的地址起始位置处于源指针所指区域之中),你再从起始位置复制的话,这样目的地址改变的时候将源地址内存里面存的东西给改变了,所以必须从高地址开始复制。这样源地址总是走得比目的地址靠近低地址,也就是目的地址永远赶不上还没有复制内容给他的源地址。所以可以正常复制2.如果没有内存重叠,那么从起始地址开始复制,目的地址也不会对

2016-10-07 10:08:00 3165

原创 四个名词(很常见):虚拟内存,虚拟内存地址(线性地址),物理内存,物理内存地址,逻辑地址

为什么会有虚拟内存和物理内存的区别?     正在运行的一个程序,它所需的内存是有可能大于内存条容量之和的,比如你的内存条是1G,但是你的程序需要2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,再通过调度进入物理内存,所以虚拟内存是进程运行时所有内存空间的总和,他是远大于物理内存的一个虚拟存储空间,是将外

2016-10-07 10:07:55 345

原创 进程的状态

进程是一个动态的实体,所以它是有生命的,从创建到消亡,是一个进程的整个生命周期。一般有三个状态1.就绪态  : 进程已经获得所需的其他资源,正在申请处理器资源,准备开始执行,这种情况下,称进程处于就绪态2.阻塞态(休眠态或者等待态) 进程需要等待所需资源而放弃处理器,或者是进程不拥有处理器而且其他资源也没有满足,从而即使得到处理器也不能运行的状态3.执行态 进程得到了处理器,并不需要等

2016-10-07 10:07:53 273

原创 windows内存管理方式以及优缺点

Windows内存管理方式:页式管理,段式管理,段页式管理 页式管理      将各进程的虚拟空间(逻辑地址)划分为若干个长度相等的页,业内管理把内存空间(物理内存)按照页的大小划分为片或者页面,从而实现了离散分配,然后把页式虚拟地址和内存地址建立一一对应的页表,并用相应的硬件地址变换机构来解决离散地址变化问题,(程序加载时,可将任意一页放入内存中任意一个页框而且这些页框不必连续,从而

2016-10-07 10:07:50 341

原创 浅谈数据结构:哈希表

一.  基本概念    哈希表(hash table )是一种根据关键字直接访问内存存储位置的数据结构,通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数 二.哈希表的构造方法      假设要存储的数据元素个数是n,设置一个长度为m(m > n)的连续存储单元,分别以每个数据元素的关键字Ki(0     从数学的角度

2016-10-07 10:07:47 232

原创 面向对象的三大要素和五大原则

1.三大要素 封装,继承,多态2.五大原则:(1)单一职责原则(SRP:Single Responsibility Principle)一个类,最好只做一件事,只有一个引起它变化的原因      举例:图书馆和宿舍都有桌有椅,为什么学习还是应该去图书馆?因为宿舍有人看球,有人吃饭,和其他事情,相互干扰,违反了单一职责原则。也就是说 一个类如果继承了多个职责,那么这些职责在并发执行时可能

2016-10-07 10:07:42 886

原创 死锁的四个必要条件以及怎样处理

一. 什么是死锁?     如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程二. 死锁产生的原因?1.因竞争资源发生死锁 现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象(1)可剥夺资源和不可剥夺资源:可剥夺资源是

2016-10-07 10:07:40 307

原创 进程与线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:(1)地址空间:进程内的一个执行单元,进程至少一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源(3)线程是处理器调度的基本单位,但进程不是(4)二者皆可并发执行进程和线程都是操作系统的程序运行的基本单元,系统利用该基本单元

2016-10-07 10:07:38 153

原创 比较常见的const与指针的组合情况

1.对于普通的const与基本类型组合,都是表示的是这是一个常量,  const int a;  int const a;    表示的意思是一样的,a是一个常量,不可改变2.对于const与指针组合在一起,可以将const理解为内容,*理解为指针,誰在前面谁不能改变,誰在前面先读谁  const int *a;  等价于int const *a;    const在前面所以内

2016-10-07 10:07:35 231

原创 内存分配的几种方式,以及动态内存传递的注意事项

一.内存的分配方式?静态存储区,栈,堆静态存储区:内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在,比如说全局变量。栈:在栈上创建,在函数执行期间,函数内部局部变量和形参可以在栈上创建,函数执行这些存储单元自动释放。所以我们不能返回在函数内部定义的变量(函数定义的指针可以返回),因为他们在函数执行结束时已经被销毁了,处理器的指令集有关于站内部的分配运算,因此效率很高,但是

2016-10-07 10:07:30 329

原创 为什么要进行内存对齐以及对齐规则

#includeusing namespace std;struct A{ char a; int b; short c;};struct B{ short c; char a; int b;};int main(){ coutsizeof(A)endl; coutsizeof(B)endl

2016-10-07 10:07:28 236

原创 为什么析构函数是虚函数比较好?

原因:基类对象的指针操作派生类对象时,防止析构函数只调用基类的,而不调用派生类的 下面详细说明://基类 class A{ public : A(){ cout"A构造函数"endl; } ~A(){cout"A被销毁了"endl;} void Do(){ cout"A要做点什么"endl;

2016-10-07 10:07:25 209

原创 c代码中调用c++,c++代码中调用c代码

注意这里的c调用c++或者c++调用c的意思是.c文件中调用.cpp文件中的代码,或者相反集成开发环境如vc++6.0或者vs都是通过文件后缀来区别当前要编译的是C代码还是C++代码,然后采用相应的编译,调用协议等使用extern "C"主要是因为C编译器编译函数时不带参数的类型信息,只包含函数的符号名字,例如int foo(int x);编译后_foo的符号,C连接器只要找到了调用函数的

2016-10-07 10:07:20 228

原创 new和malloc的区别

一.malloc函数(memory allocation) 中文名:动态内存分配   原型:extern  void *malloc(unsigned int num_bytes);说明:分配长度为num_bytes字节的内存块,分配成功,则返回指向该内存块的指针。否则指向NULL空指针,使用free()释放1.1void *malloc (int size);说明:向系统申请

2016-10-07 10:07:16 160

原创 新手讲大数大数系列---加法

1.反转2.求和3.反转比较简单,就是要细心#includeusing namespace std;void bigNumAdd(char *a,char *b,char *c){ int len_a=strlen(a),len_b=strlen(b),len_c; int len=(len_a>len_b?len_b:len_a),flag=0;

2016-10-07 10:07:11 189

原创 新手讲算法:五大常用算法--分治法,动态规划,回朔法,分支界限法,贪心算法 之 分治法

算法一:分治算法 一:基本概念    分治法:分而治之,就是把一个问题分成两个或很多个相同或者相似的问题,再把子问题分成更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即为子问题的解的合并,是很多算法的基础,如:快排,归并,傅里叶变换 二:使用情况(1)该问题缩小到一定的规模就可以容易地解决(容易满足)(2)该问题可以分解为若干个规模较小的相同问题,即该问题具

2016-10-07 10:07:09 521

原创 新手讲虚函数:怎么实现多态

class B0 //基类B0声明{public: void display() {cout"B0::display()"endl;} };class B1: public B0 { public: void display() { cout"B1::display()"endl; }};class D1: public B1

2016-10-07 10:07:04 517

原创 新手讲树:证明任意二叉树度为零的节点n0,永远比度为2的节点n2多1个

证明:     设度为1的节点个数为n1,因为二叉树的所有节点的度都小于等于2,         所以n=n0+n1+n2;         又因为二叉树中,除了根节点所有的节点都有一个进入节点的分支,假设B为所有的分支,那么n=B+1;      又因为这些分支都是由度为1和度为2的节点射出,所以B=n1+n2*2;          所以B+1=n0+n1+n2;   

2016-10-07 10:07:00 3086 1

原创 新手讲排序:堆排序 和 认识二叉堆

二叉堆是完全二叉树或者是近似完全二叉树 二叉堆满足的二个特性:1.父节点的键值总是大于或等于(小于或等于)任何一个子节点的键值2.每个节点的左子树和右子树都是一个二叉堆(都是最大堆或者是最小堆)当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆,总是小于或等于任何一个子节点的键值时为最小堆堆的存储:     堆的存储一般是用数组来存储,根据完全二叉树的存储结构,

2016-10-07 10:06:55 269

原创 新手讲栈:编程实现栈的入栈出栈操作

定义一个栈typedef struct student{ int data; struct student *next;}node;typedef struct stackqueue{ node *zhandi,*top;}; 定义入栈:queue *push(queue *HQ,int x){ node *s,*p; s=(no

2016-10-07 10:06:50 2178

原创 新手讲队列:编程实现队列的入队出队操作

首先定义队列:typedef struct student{ int data; struct student *next;}node;typedef struct linkqueue{ node *first,*rear;}queue; 定义插入操作:queue *insert(queue *HQ,int x){ node *s

2016-10-07 10:06:48 1923

原创 新手讲排序:归并排序

归并排序给我的感觉:编程一定要认真,不然就算你能想通也要纠缠你很长时间(1)本质:    1.分解:用二分法,每次将数组分成两个元素数量相同或者差一个(奇数)的子数组,然后递归直到将子数组分成一个一个的元素,实际数组不用分,你直接将它看成已经分好的元素    2.合并:将len=1的数组合并成len=2的数组,合并的时候通过将两个数组的元素按大小插入到临时数组,再将临时数组元素赋予原数

2016-10-07 10:06:45 206

原创 新手讲排序:希尔排序

一.  希尔排序的实质是分组插入排序,又称为缩小增量排序,是不稳定的排序,并且时效分析很难,因为增量选择的关系二.  思想:将数组按照增量分为若干个子序列分别进行直接插入排序,然后缩减该增量,直到增量等于1,此时该数组基本有序,对该数组进行一次直接插入排序,效率比直接插入高三.  例子       假设有十个数 num[10]={  5,7,9,10,23,15,13,67,78,32

2016-10-07 10:06:42 307

原创 新手讲排序:详细讲解快速排序

quick_sort(int A[],int start,int end);int   i=start ,  j=end  ,  pivot;一.  先选择一个基准pivot,3种选择方式                           1.固定位置,开头或结尾或中间           2.随机位置,采用随机数产生start和end之间的数           3.平衡位

2016-10-07 10:06:37 964

原创 最好懂得贪心算法+动态规划之数塔问题

1 #include 2 #include 3 using namespace std; 4 const int N=100; 5 int tower[N][N],f[N][N]={0},n; 6 void upMax(int &a,const int &b){ 7 a=(a>b?a:b); 8 } 9 int main(){10 cin>>n;

2016-10-07 10:06:32 935

原创 最好理解的快速排序 :实例解析输入数组,排序

1 #include 2 using namespace std; 3 void quick_sort(int *num,int l,int r){ 4 int i=l,j=r,mid=num[(l+r)/2]; 5 while(ij){ 6 while(num[i]; 7 while(num[j]>mid) j--; 8 if(ij){ 9 int temp=nu

2016-10-07 10:06:30 342

原创 数据帧,数据包,数据段

OSI参考模型的各层传输的数据和控制信息具有多种格式,常用的信息格式包括帧、数据包、数据报、段、消息、元素和数据单元。信息交换发生在对等OSI层之间,在源端机中每一层把控制信息附加到数据中,而目的机器的每一层则对接收到的信息进行分析,并从数据中移去控制信息,下面是各信息单元的说明:数据帧(Frame):是一种信息单位,它的起始点和目的点都是数据链路层。数据包(Packet):也是一种信息单位,

2016-10-07 10:06:21 430

原创 poj中一些对我来说不错的东西(每天不同的加入,要保持)

1.关于深度搜索与暴力结合的棋盘翻转问题 poj1753;;2965;;2.贪心算法:2109,2586;3.韩信点兵问题:poj1006

2016-10-07 10:06:17 160

空空如也

空空如也

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

TA关注的人

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