自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (1)
  • 收藏
  • 关注

原创 Objective-C 的属性与合成方法使用详解

Objective-C 中的属性可以结合 Java 和 C# 的属性来理解,Java 的属性需要自己实现 getter/setter 方法,在 C# 中现在可方便些了,写上{set;get;}自动生成相应的存取器。Objective-C 中声明属性及使用时会涉及到 @property, @synthesize 和点号(.) 访问,@property 用来指定属性及某些特性,@synthes

2015-11-21 10:51:52 655

原创 理解数据库范式——通俗易懂

数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那 么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。       本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述。但对于

2015-11-15 16:58:12 1917

原创 Google分布式系统三大论文(三)MapReduce: Simplified Data Processing on Large Clusters

MapReduce:大型集群上的简单数据处理摘要MapReduce是一个编程模型和一个处理和生成大数据集的相关实现。用户指定一个map函数处理一个key-value对来生成一组中间key-value对;指定一个reduce函数合并所有和同一中间key值相联系的中间value值。许多现实世界中的任务以这个模型展现,就像文中展示的那样。以这种函数类型编写的程序在一群日常机器上自动并行化并执

2015-11-12 10:26:26 2148

原创 Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data

修正了alex翻译版的几个欠妥之处Bigtable:一个分布式的结构化数据存储系统摘要Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据。Google的很多项目将数据存储在Bigtable中,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论

2015-11-12 10:23:06 5432 1

原创 Google 分布式系统三大论文(一)The Google File System

The Google File System 中文版摘要我们设计并实现了Google文件系统,一个面向分布式数据密集型应用的、可伸缩的分布式文件系统。虽然运行在廉价的日用硬件设备上,但是它依然了提供容错功能,为大量客户机提供了很高的总体性能。虽然与很多之前的分布式文件系统有很多相同目标,但是,我们的设计已经受应用的负载情况和技术环境影响,现在以及可预见的将来都反映出,我们的设计和早期的

2015-11-12 10:20:04 4876

原创 Android开发之旅:HelloWorld项目的目录结构

HelloWorld项目的目录结构引言前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Android项目的目录结构。本文的主要主题如下:1、HelloWorld项目的目录结构1.1、src文件夹1.2、gen文件夹1.3、An

2015-11-11 15:27:48 365

原创 android 开发环境搭建

Android开发环境的搭建及HelloWorld   鉴于Android官方已经推出adt集成包,其中包括了eclipse、sdk和SDK Manager,从而使得其开发环境的搭建更为方便。下面就来跟大家分享一下我的搭建过程,如有不周望大家多多指教哈!   PS:下图即为adt集成安装包解压后的文件目录。工具/原料

2015-11-11 15:22:40 398

原创 经典递归解决汉诺塔!

算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。            当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。            当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上

2015-11-01 19:38:38 358

原创 当你输入一个网址的时候,实际会发生什么?

原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样

2015-10-31 09:50:16 299

原创 Leetcode 199 Binary Tree Right Side View 二叉树右视图

原题地址https://leetcode.com/problems/binary-tree-right-side-view/题目描述Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from

2015-10-29 10:53:06 396

原创 函数指针与指针函数

指针函数与函数指针的区别 一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针     类型标识符    *函数名(参数表)      int *f(x,y); 首先它是一个函数,只不过这个函数的返回

2015-10-24 09:13:06 257

原创 为什么不能把构造函数设为虚函数,却可以把析构函数设为虚函数

1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。2. 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是

2015-10-24 09:07:49 319

原创 拷贝构造函数 与拷贝复制函数

拷贝构造函数是对象被创建时调用,赋值函数只能被已经存在了的对象调用1、拷贝构造函数的使用1) 一个对象以值传递的方式传入函数体;2) 一个对象以值传递的方式从函数返回;3) 一个对象需要通过另外一个对象进行初始化;深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源

2015-10-12 10:07:03 584

原创 effective c++ 条款2 尽量以const enum inline代替#define

一、 const 和 #define的区别  1、定义:const 是c++修饰符,用来修饰常量;#define是宏定义语句;2、内存消耗:系统有为const 变量分配内存,存放在静态区,程序运行中只有一个拷贝,#define只是给出一个立即数,有多个拷贝,比const消耗的内存大得多;3、安全性:const变量有数据类型,编译时会进行类型检查,更安全,#define没有,在预处理

2015-10-02 22:12:18 302

原创 extern c

作者 JasonDing 2014.11.13 16:58 写了264382字,被190人关注,获得了315个喜欢extern "c"用法解析字数1875阅读434 评论0 喜欢8 引言C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处

2015-09-27 09:59:47 322

原创 查找(三)hash 与map

一,hashtable原理:哈希表又名散列表,其主要目的是用于解决数据的快速定位问题。考虑如下一个场景。一列键值对数据,存储在一个table中,如何通过数据的关键字快速查找相应值呢?不要告诉我一个个拿出来比较key啊,呵呵。大家都知道,在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找。而哈希表就是利用数组这个能够快速定位数

2015-09-26 11:24:49 554

原创 查找(二)二叉查找数BST

templatebool binarSearchTree:: contain( const Comparable & x )const{ return contain( x, root );}templatebool binarSearchTree:: contain(const Comparable & x ,binaryNode* t)const{ if ( t == NU

2015-09-26 10:21:42 354

原创 查找(一)二分查找

在面试的时候二分查找是用的比较多一种查找算法,如何在面试官面前快速准确得的写出代码决定你是否能够被录取。以前一直以为二分查找很简单,所以就没怎么重视,但是真要在面试官面前对着黑板手写出来,还是漏洞百出。今天自己在电脑面前敲出了二分查找的代码,也花了将近半个小时。对于这种基础排序查找算法,还是得好好重视。二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。二分查找的一

2015-09-26 09:35:16 343

原创 求字符串中字符全排列 和 组合

二、字符串的组合(1)若不考虑字符串中有重复字符(即假设字符串中无重复字符)(2)若考虑字符串中有重复字符(即假设字符串中有重复字符)一、字符串的全排列(1)若不考虑字符串中有重复字符(即假设字符串中无重复字符)此时“abc”的全排列为:abc、acb、bac、bca、cab和cba。      我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字

2015-09-25 15:01:02 380

原创 tcp/ip 连接三次握手,断开四次握手

TCP/IP 状态机,如下图所示:     在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。 (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+ACK包表示标志位syn=1,ack=1) (1) 第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

2015-09-17 09:14:11 377

原创 Permutation sequence

n个数的全排列,按照从下到大的顺序排列,问第k个位置的数是多少?这个问题有几种方法,不过只有康托编码的时间复杂度是最低的。是O(n),简直凶残。1.用next_permutation来求,这个也是leetcode上的一道题,就是求其下一个排列,然后对1234…n 运行n次 next_pernutation方法就能得到第k个数了思想就是这样。2.利用康托编码来求。其实就是康托

2015-09-14 10:47:28 324

原创 Next Permutation

这道题给出一个数列,求大于这个数列的最小数列。例如:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1二、 分析喜欢使用C++的童鞋或许会马上想到next_permutation()这个库函数,没错,其实这道题就是实现的它(严格说来只是初步实现),如果可以的话,如果直接输入这一行代码就可通过:?123

2015-09-13 18:29:14 540

原创 leetcode RelateArray

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。不合题意的解法如下:我们先试验简单的办法,可以每次将数组中的元素右移一位,循环K次。abcd1234→4abcd123→34abcd12→234abcd1→1234abcd。伪代码如下:代码清单2-33  RightShift(int* arr, int N, int K

2015-09-11 21:13:37 266

原创 创建二叉树以及 前序、中序、后序遍历二叉树

用递归方法建立二叉树分类:数据结构与算法2012-11-01 20:20 3961人阅读 评论(6)收藏 举报        假设二叉树为:                                        a                              b                 c

2015-09-07 22:24:56 870

原创 构造函数初探

1 note:c++  类成员变量初始化顺序与其在声明中的顺序有关,而与在构造函数初始化列表顺序无关。    C++类构造函数初始化列表构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample {public:    int a;    float

2015-08-08 10:45:57 281

原创 new/delete 与malloc/free的区别与联系

一、基本概念     malloc/free:1、函数原型及说明:      void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。      void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了

2015-08-05 10:08:39 1606

原创 递归调用效率问题,递归与循环比较

1.所谓的递归慢到底是什么原因呢?大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。这势必是影响效率的。 2.用循环效率会比递归效率高吗?递归与循环

2015-08-04 21:58:50 7775 3

原创 数组指针 与指针数组

1、数组指针(指向数组的指针)(1)数组在内存中的表示创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。先来看一段代码:[cpp] view plaincopy"font-size:16px;">void main()  {      in

2015-08-04 16:02:24 346

原创 strcpy 与memcpy

strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需

2015-08-01 21:31:43 404

原创 直接插入排序

直接插入排序基本思想1、基本思想     假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。一趟直接插入排序方法1.简单方法     首先在当前有序区R[1..i-1]中查找R[i]的正确插入位置k(1≤k≤

2015-08-01 16:02:32 291

原创 内存分配

1 主调函数中分配的内存可以在被调函数中使用2 被调函数在栈区分配的内存不可以在主调函数中使用

2015-07-31 15:04:32 233

原创 c++ 封装 继承 多态

C++封装继承多态总结面向对象的三个基本特征面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!封装                                                                     

2015-07-29 21:24:36 362

原创 const

const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10;  //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改,则函数

2015-07-26 11:08:05 262

原创 static 变量

static关键字在C/C++中应用广泛,而且有不同的语义。这篇文章,我主要想探讨一下用static修饰变量的时候,它都有些什么语义,这些变量都有哪些特性。1.源文件中用static定义全局变量这个变量只能在这个文件中可见,其它任何文件中对这个变量都是不可见的。而且你不可以用extern把这个变量导出去。 2. 头文件中用static定义一个全局变量这也是唯一一种能在头文件中定

2015-07-22 10:40:11 360

原创 c++函数初探

一、递归: 直接或间接的在函数体中调用函数自己的现象1 数学中的递推式与函数递归   递推:有首项顺序迭代求每一项      (顺序)   函数递归:由第n项求第n-1项...向前逆序迭代求每一项  (逆序)

2015-07-21 20:54:48 312

原创 指针与数组的区别

1   声明一个数组时,其数组名字也是一个指针,指向数组第一个元素2   数组作为函数参数传递时,自动退化为同类型的指针C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。     数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容

2015-07-21 15:47:16 325

原创 leetcode2.1.8.3sum

如果之前做过求“和为某值的2个数的组合”这种题,应该不会觉得这道题有难度。但这道题需要去掉重复的解,所以在去重方面需要下功夫,因为单是求解就需要O(n2),如果在求解的循环中还嵌套有其他O(n)以上的去重操作,整体的时间就会到O(n3)以上,所以这是个重点。为了避免这个O(n)以上的去重操作,我们在求出解的过程中需要一些技巧去掉不必要的操作。       解题思路如下:首先是求解:因为

2015-07-14 20:02:23 297

原创 c++ nullptr关键字

从1972年C语言刚刚诞生以来,常数0就扮演着整数(int)0和空指针( null pointer )两种角色。为了避免理解上的二义性,C语言通常使用NULL宏来表示空指针,NULL宏通常被定义为(void *)0或0, 而C++仅仅采用0来表示空指针,这样存在一个问题:比如对于重载函数 fun(char *) 和 fun(int) 的调用来说,若直接用NULL作为参数调用fun(NULL),我们

2015-07-02 18:06:45 566

转载 初探浅拷贝与深拷贝

对深拷贝与浅拷贝的再次理解    记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心得吧。    先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj;  A obj1(obj);或者A obj1 = obj; 

2015-07-01 10:34:08 246

转载 完全用Linux工作

作者:王垠完全用Linux工作,抛弃windows我已经半年没有使用 Windows 的方式工作了。Linux 高效的完成了我所有的工作。GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务,打游戏,那么你不需要了解下面这些了。我不是一个狂热的自由软件份子,虽然我很喜欢自由软件。这篇文章也不是用来推行自由软件运动的,虽然我觉得自由软件运动是非常

2015-05-11 10:11:08 493

毕业设计注意事项

毕设 关于做好2012届本科学生毕业论文(设计)工作的通知.doc

2013-04-18

空空如也

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

TA关注的人

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