- 博客(135)
- 资源 (8)
- 收藏
- 关注
转载 Java虚拟机原理、内存分配和回收机制
通常情况下Java编译过的代码是一些class文件,Java虚拟机在执行代码的时候,首先解析Class,查找该类的方法、常量,这些对于常规情况下都编译成二进制的代码保存在jar文件中,而对于Java的反射,VM的类加载器需要动态的查找这些类名,虽然节省了编译时间,但是运行时的查找大大降低运行效率。1、栈 存取速度快 存放一些基本类型的变量或对象的引用变量。主要用来执行程序的。2、堆 存
2014-04-17 20:22:36
3928
转载 C++中的继承 public protected private
public protected private共有继承 public protected 不可见私有继承 private private 不可见保护继承 protected protected 不可见#includeusing namespace std;////////
2014-03-28 11:03:50
1890
原创 C++ 中的vptr与vtable
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class no_virtual { int a;public: void x() const{} int i() const {return 1;}};class on
2014-03-28 11:03:38
3697
原创 C++纯虚函数
抽象基类:函数调用时,形参不能够是抽象基类,而应该是“指针”或者是"引用"。// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class Base { int a;public: virtual void x()
2014-03-28 11:03:23
1881
原创 C++对象切片
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std; class Pet { string pname; public: Pet(Pet& p) { pname=p.pname; }
2014-03-28 11:03:06
4321
原创 C++中继承时的重载和重新定义
C++编程思想 P372对于虚函数,在派生类中:不允许改变返回值(非虚函数派生类可以。),特殊情况:但是当返回值的类型是基类返回值类型的派生类时,可以改变。如果重新定义了基类的重载成员函数,也就是定义了一个同名的函数,但参数不同,则基类的其它函数将被隐藏。
2014-03-28 11:02:50
1913
原创 写正确函数需要注意的地方:链表的及时终止冒泡排序
Node* sort(Node* phead){ if (NULL==phead || NULL==phead->pNext) { return phead; } Node* ptemp=phead; Node* plastchangepoint=NULL;//标记上一次 while (plastchangepoint!=phead->pNext) { bool chan
2014-03-28 11:02:31
1917
转载 GFP、GSP和VCG的特点和介绍
GFP(广义一阶价格拍卖),主要特点是关键词拍卖中广告主之间进行的是重复博弈,在每一轮拍卖结束后,广告主会根据上一轮报价的情形决定下一轮的报价决策,而这场价格战会被自然而然地分为价格攀升阶段和价格崩溃阶段。只能是在搜索引擎公司了解广告商估价的前提下运作,否则因为没有均衡,波动会在极大程度上带来拍卖效率上的损失。GSP(广义二阶价格拍卖),简单来说它即是支付数=点击次数*下位出价。在实际
2014-03-28 11:01:25
23810
3
原创 C++的new 和 delete 操作符重载。
测试代码:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class test{public: int a; double x; test(int i,double m):a(i),x(m) { printf("cr
2014-03-04 12:16:20
4383
原创 只能用于构造函数的explicit
这个关键字只能用于构造函数,意思是该构造函数不能隐式的被调用。当有隐式的类型转换的时候,该explicit可以阻止这一过程。如:class One{public:One(){}};class Two{public:Two(const One&){}};void f(Two){}int main(){One one;f(one);}该程序
2014-03-04 12:16:07
2217
原创 C++ 指向成员的指针(数据成员指针,函数成员指针)
数据成员指针:class Data{public : int a, b,c;}定义数据成员指针:int (Data::*pmInt)=&Data::a;这样子的话pmInt就可以指向某个Data对象中的所有int数据成员。如:pmInt=&Data::a;定义一个DataData d;d.*pmInt=48;//d.a=48;函数成员指针:
2014-03-04 12:15:55
2208
原创 模板中的嵌套类
#include "stdafx.h"#include #include using namespace std; template class X{ //without typename , you should get an error: typename T::id i; //T::id i;public: void f(){i.g();}};cl
2014-03-04 12:15:03
5545
原创 template函数
#include "stdafx.h"#include #include using namespace std; template T sum(T b,T e, T init=T()){ char chars[N]; cout<<"N: "<<N<<endl; init=b+e; return init;}template T sum(T b,T e,
2014-03-04 12:14:57
1958
原创 C++异常处理的用处
异常处理一个用处在于将正常的处理流程中跳到恰当的异常处理器中,使得异常处理与正常的处理流程隔离。使得程序设计过程更加流畅。 异常处理保证当程序执行流程离开一个作用域的时候,对于属于该作用域的所有由 “构造函数建立起来的” 对象,它们的析构函数一定会被调用。 然而,如果一个对象的构造函数在执行过程中抛出异常的话,则它的析构函数将不会被调用。因此,编写构造函数的时候,程序员必须特别的仔细
2014-03-04 12:14:50
2144
原创 C++异常处理catch向上类型转换。
匹配的异常并不要求与其捕获的对象类型一致。一个对象或者是指向派生类对象的引用都会与其积累处理器匹配。如果是对象本身而不是引用或指针的话,这个异常对象将会被“切割”,丢失派生类包含的所有信息。因此最好是抛出引用,或者是指针。但是不会进行自动类型转换。比如如下情况:class Except1{};class Except2{public: Except2(co
2014-03-04 12:14:45
2056
原创 throw后局部变量的析构。
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std; class object{public: ~object() { cout<<"~object()"<<en
2014-03-04 12:14:37
2037
原创 C++中的cast
dynamic_cast:用于向下类型转换。该函数仅当向下类型转换是正确的时候返回有效的指针,否则返回0;所以说他是安全的。注意:通常在向下类型转换和向上类型转换时,指针的值会有所调整,特别是在多重继承的时候。当知道确实是该类型时,可以用static_cast代替dynamic_cast。
2014-03-04 12:14:27
1560
原创 C++析构函数和虚析构函数。
析构函数如果不是虚的话,基类的析构函数将不会被调用。多态时,也就是派生类被基类指针所指,或者被基类别名:虚析构函数,被调用时,其自身的析构函数和基类的析构函数都将会被调用。非虚的时候,不进行多态,只有基类的会被调用。纯虚析构函数:定义的时候除了加“=0”。还需要给出函数的实现。因为当递归的调用析构函数时需要自动执行。作为一个准则,任何时候我们的类中都要有一个虚函数,我们
2014-03-04 12:14:21
1700
原创 写正确程序需要注意的地方:一个数组是有一个递减数列座椅若干位形成的,在这种数组中查找某一个数。
//4,3,2,1,10,9,8,7,6,5int searchInRotateSortedArray(int* arr, int count, int value){ if (count<=0 || arr==NULL) return -1; int mid; int left=0; int right=count-1; while (left<=right) { //
2014-03-04 12:13:48
805
原创 写正确程序需要注意的地方:输入一个正数n,输出所有和为n连续正数序列。
int sequenceFactor(int n){ if(n<=0) return -1; for(int i=2;i<=n/2;++i) { if(i%2==1)//需要分成奇数个 { int div=n/i;//则商为中间值。 if(n%i==0 && div-(i-1)/2>0)//必能整除,并且最小数应该大于0。 { printf("%d..
2014-03-04 12:13:37
783
原创 写正确函数需要注意的地方:输入一个字符串,打印出该字符串中字符的所有排列
void allPermutations(char* arr, char* desarr, bool* assis, int count, int curindx){ if(curindx==count) { desarr[curindx]=0; printf("%s\n",desarr); return; } for(int i=0;i<count;++i) { i
2014-03-04 12:13:27
929
原创 写正确函数需要注意的地方:链表的合并排序
Node* mergeSort(Node* head, int length){ if(length==0) return NULL; if(length==1) { head->pNext=NULL;//一定要赋值为NULL,否则可能出现死循环。 return head; } int halflength=length/2; Node* halfp=head; fo
2014-03-04 12:12:54
580
原创 操作系统相关知识复习
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑地址也就是在Intel 保护模式下程序执行代码段限
2014-03-04 12:11:58
638
原创 写正确函数需要注意的地方:奇偶数分开,左边偶数,右边奇数。
void oddEvenSort(int* arr,int count){ int left=0; int right=count-1; int midval=arr[left]; while(left<=right) { while(left<=right && arr[right]%2==1) --right; if(left<=right) { arr[l
2014-03-04 12:11:28
931
原创 写正确函数需要注意的地方:给定一个十进制整数N,计算从1开始到N的所有整数出现的“1”的个数
int numOf1(int n){ int factor=1; int count=0; while(n/factor!=0) { int higher=n/(factor*10);//当前位置的高位组成的数字。 int cur=n/factor%10;//当前位置数字 int lower=n%factor;//当前位置的低位组成的数字。 if(cur==0) c
2014-03-04 12:10:58
849
转载 简单的Spring实例
编写第一个Spring程序 HelloWorld接口: Java代码 /** * * @Copyright(C),2009-2010 SISE Java Team. * @Author:easinchu * @Email:easinchu@gmail.com * @Description: */ public in
2013-08-02 10:22:37
862
转载 windows7重装后恢复Ubuntu开机启动项,Ubuntu所在的硬盘uuid改变没法进入Ubuntu系统,解决方法
第一种情况:当重装windows7后,其他盘符没有发生改变,这种情况最简单,方法如下: 恢复方法: 1.把安装ubuntu->winboot文件夹下wubidr和wubidr.mbr两个文件拷到C盘根目录下 2.以管理员权限打开附件中的“运行” 在命令行中运行c:/windows/system32>bcdedit /create /d "Ubu
2013-04-24 10:57:38
2188
转载 谷歌面试题:1024! 末尾有多少个0?
解答思路:末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。 是5的倍数的数有: 1024 / 5 = 204个 是25的倍数的数有:1024 / 25 = 40个 是125的倍数的数有:1024 / 125 = 8个 是625的倍数的数有:1024 / 625 = 1个 所以1024! 中总共有204+40+8
2012-10-04 16:25:16
1335
转载 神奇的catalan数
http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0
2012-09-18 13:34:58
678
原创 Java中的特殊关键字
说他特殊,是因为C++中没有或意思有变化:final:final修饰的类,和方法都很好理解。关键是final修饰的函数变量,如void pro(final String str);final 关键字保证对被final修饰的变量只能赋值一次,也就是说final不能再指向别的变量了。但是被指的这个变量还是可以改变的。使用final修饰符不仅会保持对象不会改变,而且编译器还会
2012-09-14 14:41:37
961
原创 写正确函数需要注意的地方:最长递减子序列
int longest=0;void LongestSubSeq(int* arr, int count, bool* assis, int curindx, int lastnum, int length){ if(curindx==count) { if(longest<length) { longest=length; for(int i=0;i<count;++
2012-09-10 16:12:05
821
原创 写正确函数需要注意的地方:二叉树非递归中序遍历
void Inorder_NoRecu(Node* root){//省去了参数正确性检测和返回值。 stack lefts; Node* cur=root; while(cur!=NULL || !lefts.empty()) { if(cur!=NULL) { lefts.push(cur); cur=cur->left; } else { cu
2012-09-10 14:43:14
1005
原创 写正确函数需要注意的地方:两个非降序链表的并集,1>2>3和2>3>5合并为1>2>3>5。
int OutCombine(Node* p1, Node* p2){ while(p1!=NULL && p2!=NULL) { if(p1->value>p2->value) { coutvalue<<" "; p2=p2->pNext; } else if(p1->valuevalue) { coutvalue<<" "; p1=p1->pN
2012-09-10 13:59:52
4549
转载 聚簇索引与非聚簇索引
建立索引的目的是加快对表中记录的查找或排序。付出的代价:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 索引分为聚簇索引和非聚簇索引两种。聚簇索引:聚簇索引确定表中数据的物理顺序。聚簇索引类似于电话簿,后者按姓氏排列数据。由于聚簇索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚簇索引。但该索引可以包含多个列(组合索引)
2012-09-04 15:27:21
941
转载 海量数据查询优化(精)
海量数据查询优化(精)2009-03-20 01:36这是我面试的一家数据维护业务公司的面试题,虽然这个职位并不是我所期望的Java开发的工作,自己还是想把握好每一次机会,最后还是去尝试了一下。 由于平时开发的应用数据量比较小,不太关注性能优化的问题,所以不知如何作答,答得不好,很是郁闷。从网上搜索出海量数据查询优化的两篇文章,转载下来,学习学习。
2012-09-04 14:23:27
2293
原创 写正确函数需要注意的地方:两个序列a,b,大小都为n,序列元素的值为任意整数,无序;要求通过交换a,b中的元素,使序列a元素的和与序列b元素的和之间的差最小
int sum(int* arr, int count){ int sum=0; for(int i=0;i<count;++i) sum+=arr[i]; return sum;}int MinArrayDis(int* a, int* b, int count){ if(a==NULL || b==NULL || count<=0) return -1; bool
2012-09-03 13:39:59
3352
原创 写正确函数需要注意的地方:在字符串中找出连续最长的数字串,并把这个串的长度返回
int findDigtalMaxLength(char* a, int count, char*& ret){ if(a==NULL || count<0)//输入参数处理 return 0; int maxstart=0;//记录最长数字串的起始 int maxlength=0;//记录最长数字串的长度 int length=0; int start=0; for(int
2012-08-21 13:45:07
1196
拼图游戏 android
2011-03-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人