自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 数据库视图

什么是视图视图(view):从一个或几个基本表中根据用户需要而做成一个虚表。1、视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2、视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户视图与查询的区别视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:它们的区别在于:1、存储上的区别:视图存储为数据库设计的一部分,而查询则不是。2、更新限制的要求

2016-03-30 21:42:12 1211

转载 static_cast,dynamic_cast,reinterpret_cast和const_cast

C-style cast举例 int i; double d; i = (int) d;上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生改变)。这就是典型的c-style类型转换。下面一个简单程序:#include <iostream>using namespace std;int main(){

2016-03-24 17:22:58 368

转载 回溯法与分支限界法

回溯法1、概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有

2016-03-24 15:20:04 2029

原创 给定一个仅包含'A'-'Z'的字符串,表示成'kX'形式输出

问题描述:给定一个仅包含’A’-’Z’的字符串,用下面的方法进行编码: (1)每个包含k个相同字符的子串要表示成”kX”,其中X是由唯一字符组成的子串。(2)如果某个子串的长度为1,则1忽略不写。 输入:第1行输入一个整数N(1<=N<=100) ,代表要处理的字符串的个数。接下来的N行就分别输入一个只包含’A’-’Z’的字符串,每个字符串的长度小于10000. 输出:对于每个字符串,在单独的

2016-03-23 20:19:16 4227

原创 super()函数

引入目的引入这个函数的目的就是帮助程序员找出相应的父类,然后方便调用相关属性。Python的继承以及调用父类成员python子类调用父类成员有2种方法,分别是普通方法和super方法。1、普通方法#! /usr/bin/env python#coding=utf-8class Base(object): def __init__(self): print "Base ini

2016-03-18 17:12:39 2752

原创 Python生成器:yield的使用

生成器概述通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种

2016-03-18 11:11:47 1804

原创 python迭代器:iter()和__iter__()

概述迭代器更大的功劳是提供了一个统一的访问集合的接口。迭代器为类序列对象提供了一个类序列的接口。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。迭代器用起来很灵巧,你可以迭代不是序列但表现出序列行为的对象,例如字典的键、一个文件的行,等等。从根本上说,迭代器就是有一个

2016-03-18 10:05:31 12656 2

原创 TCP与UDP的区别及其报头结构

TCP与UDP区别总结1、TCP面向连接(如打电话要先拨号建立连接),TCP建立连接要进行3次握手,而断开连接要进行4次;UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有

2016-03-17 22:05:20 3751

转载 逻辑地址、线性地址、物理地址和虚拟地址

逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址(偏移地址!!!)部分。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cp

2016-03-17 21:13:53 567

转载 虚拟内存

引入背景操作系统中一种重要的存储管理技术就是虚拟内存技术。操作系统中允许进程同时运行,也就是并行。每个进程都有其相对独立的数据块(进程运行的过程中将对其进行读写操作)。理想的情况下,这些数据块都应该存放在内存中,这样才能实现高效的读写操作。但事实上,内存的容量有限,每个进程只能把一部分数据放在内存中,为了解决这个矛盾,提出了虚拟内存技术。 基本原理虚拟内存技术的基本原理是:对进程而言,内存空间是无限

2016-03-17 20:16:35 496

转载 windows 内存管理方式及其优缺点

windows 内存管理方式主要分为:页式管理,段式管理,段页式管理。页式管理基本原理是将各进程的虚拟空间划分为若干个长度相等的页;页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表;并用相应的硬件地址变换机构来解决离散地址变换问题。页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理。优点是没有外碎片,每个内碎片不超过页的大小。缺点是程序全部装入

2016-03-17 19:37:57 1457

原创 数据库完整性

关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。完整性包括:1、域完整性:域完整性是保证数据库字段取值的合理性。包括限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则),在当今的关系DBMS中,一般都有域完整性约束检查功能。也就是指列的值域的完整性,如数据类型、格式、值域范围、是否允许空值等等。2、实体

2016-03-17 17:51:42 770

原创 Cache在存储体系中的作用

在多级存储体系中,“Cache-主存”结构的作用是解决主存与CPU速度不匹配的问题。cache即高速缓存,由于CPU运行速度比硬盘和内存快得多,所以CPU在存储数据时会等待,cache位于主存和CPU之间,作用是解决主存和CPU速率匹配问题。主板上的控制系统统计主存中哪些数据被CPU频繁访问,然后将这些数据放入cache中,CPU读取时优先在cache中查找,提高了整体速率。

2016-03-16 23:12:55 4202

原创 中缀表达式转后缀表达式的方法

平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2"叫做中缀表达式。因为所有的运算符号都在两数字的中间。将该中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”,如何做到呢?规则如下:1.遇到操作数:直接输出(添加到后缀表达式中) 2.栈为空时,遇到运算符,直接入栈 3.遇到左括号:将其入栈 4.遇到右括号:执行出栈操作,并将出栈的元素输出

2016-03-16 18:07:39 472

原创 realloc,malloc,calloc三者的区别

malloc,calloc,realloc,free属于C函数库,而new/delete则是C++函数库;多个-alloc的比较alloc:唯一在栈上申请内存的,无需释放;malloc:在堆上申请内存,最常用;calloc:malloc+初始化为0;realloc:将原本申请的内存区域扩容,参数size大小即为扩容后大小,因此此函数要求size大小必须大于ptr内存大小。realloc,ma

2016-03-16 16:52:56 391

原创 为什么基类的析构函数声明为虚函数?

1、作用:在实现多态时,当用基类的指针操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。!!!!2、实例:#include <iostream>using namespace std;class father{public: father() { mPtr = new int; } ~father()//(1)非虚函数 {

2016-03-12 17:54:22 410

转载 map和set的异同

异同分析MAP的节点是一对数据. SET的节点是一个数据.map使用关键值Key来唯一标识每一个成员, map的value值可以重复。 set存储已排序的无重复的元素。都属于关联容器 ,形式不同:map的形式 map<type1, type2> mymap; set的形式 set<type> myset; set(集合)——包含了经过排序了的数据,这些数据的值(v

2016-03-12 15:33:34 7815 1

原创 虚函数实现机制

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数。当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员。C++的虚函数

2016-03-12 11:47:40 435

转载 动态链接库和静态链接库的原理及区别

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件。动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EX

2016-03-11 23:20:41 4415

转载 STL中sort排序算法原理

1、所有sort算法介绍所有的sort算法的参数都需要输入一个范围,[begin,end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator), 也就是说可以随机访问的迭代器,如:it+n什么的。(partition 和stable_partition 除外)如果需要自己定义比较函数,可以把定义好的仿函数(functor)作为参数传入。每种算法都支持传入比

2016-03-11 22:56:21 3284

原创 从两个有序数组的并集中寻找第k小元素

只需要O(k)的时间复杂度,不需要额外申请空间。#include <iostream>#include<limits.h>#include<vector>using namespace std;int findKthSmall(vector<int> &a, vector<int> &b, int k){ int aindex = 0, bindex = 0; int ale

2016-03-09 19:53:28 1558

原创 python匿名函数lambda函数

1、为什么要用匿名函数?(1)程序一次性使用,所以不需要定义函数名,节省内存中变量定义空间(2)如果想让程序更加简洁时。在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。2、实例以map()函数为例,计算f(x)=x^2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]

2016-03-09 16:18:24 447

转载 Python装饰器

1、什么是装饰器?装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直接看示意图,其中 a 为与装饰器 @a 对应的函数, b 为装饰器修饰的函数,装饰器@a的作用是:简而言之:@a 就是将 b 传递给 a(),并返回新的 b = a(b)!!!举例:#! /usr

2016-03-09 15:48:40 383

转载 Python对象赋值、浅拷贝和深拷贝

1、对象赋值will = ["Will", 28, ["Python", "C#", "JavaScript"]]wilber = will #对象赋值(对象引用)print id(will)print willprint [id(ele) for ele in will]print id(wilber)print wilberprint [id(ele) for ele in w

2016-03-07 17:47:14 500

转载 Socket编程中用send发送结构体

最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下,发现也有不少朋友遇到同样的问题,所以就打算写出自己的解决办法,跟大家分享。Socket中的send函数可以发送字符串,但不能直接发送结构体,因此在发送端先把结构体转成字符串,然后用send发送,在接收端recv字符串,再转换成原先的结构体,这个就是解

2016-03-07 14:41:02 7485 1

转载 C++智能指针简单剖析

1. 智能指针背后的设计思想我们先来看一个简单的例子:void remodel(std::string & str){ std::string * ps = new std::string(str); ... if (weird_thing()) throw exception(); str = *ps; delete ps; re

2016-03-07 11:22:43 368

原创 01随机生成函数

问题描述:有一个01随机生成函数,rand(2),以p的概率生成1,1-p的概率生成0。请用这个生成函数设计一个等概率的01随机生成函数。问题求解:随机2次,可能的结果:00, 01, 10, 11。概率分别为:(1-p)*(1-p), (1-p)*p, p*(1-p), p*p。可以发现01和10的生成概率相等。故让01代表0,10代表1,如果随机出了00或者11,就再随机2次。拓展:该类题的基本

2016-03-03 22:30:57 1225

原创 43. Multiply Strings(大数相乘)

问题描述:Given two numbers represented as strings, return multiplication of the numbers as a string.Note: The numbers can be arbitrarily large and are non-negative.问题求解:Space cost O(n) Time cost O(n) 代码如

2016-03-03 22:18:11 572

原创 统计学知识

一、给定一个分类器p,它有0.5的概率输出1,0.5的概率输出0。Q1:如何生成一个分类器使该分类器输出1的概率为0.25,输出0的概率为0.75? Ans:连续进行两次分类,两次结果均为1则输出1,其余情况(10,01,00)均输出0。Q2:如何生成一个分类器使该分类器输出1的概率为0.3,输出0的概率为0.7? Tip:小明正在做一道选择题,问题只有A、B和C三个选项,通过抛一个硬币来使选择3个

2016-03-02 13:47:12 1119

空空如也

空空如也

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

TA关注的人

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