雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  基础知识

摘要:一到实习校招的时间,大伙儿开始准备笔试面试,还有人搜相应公司的面经,看啥啥所谓的面试宝典。 本人也是俗人一枚,看到大伙儿这么干,自己又有什么不干的理由呢? 尤其是面经,常常感觉面试官问的问题其实也不难啊,如果那个人这样回答可以进公司,自己也可以的,在看看google,facebook的问题,貌似也不是很难,然后又感觉自己飘飘然,实力已经差不多了。 然后也参见实战了,面试去了,才发现面经中出现的只是基础题,然而面试官更希望的是看到你做什么项目,特别是有什么比较有技术含量的项目。可以说面经中呈现的只是冰山一角,你只看到了面试官问的一些基础题,殊不知最后成功的应聘者本身做了多少牛逼的项目,... 阅读全文

posted @ 2014-03-08 12:54 huhuuu 阅读(1180) 评论(2) 推荐(0) 编辑

摘要:有5亿个int范围的数字,量太大不能直接存放到内存下,如何处理可以找出中位数 一般这种问题,可以考虑用分支的思想。 1、由于不能直接放在内存里,先将这int范围的数字划分成2^16个区,第一个区的范围是[0 , (2^32-1) / (2^16)),以此类推。 2、然后读入数据,分别将其累加到相应的分区。 3、依次统计分区,读到累加数字个数大于等于2.5亿的时候,说明中位数在这个分区。 4、重新读取所有数据,添加在这个分区范围的数据到数组中,对该数组排序就可以得到中位数了。 //有5亿个数字,量太大不能直接存放到内存下,如何处理可以找出中位数#include#include#i... 阅读全文

posted @ 2014-02-27 16:10 huhuuu 阅读(699) 评论(0) 推荐(0) 编辑

摘要:sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么? #include#includeclass base{ int a,b,c; static int x; //静态成员变量不会被计算 virtual void fun(){ //有虚函数的话,类中会增加一个虚函数指针 }};class son:public base{ int d,e,f; //对父类计算的时候,也会把继承过来的子类成员计算进去};int main(){ printf("%d\n",sizeof(base)); print... 阅读全文

posted @ 2014-02-27 15:07 huhuuu 阅读(123) 评论(0) 推荐(0) 编辑

摘要:线程存在的意思:计算机中的设计无非是节约空间,二来节约时间。而线程的存在就是既可以节约空间也可以节约时间。当一个进程有多个线程,而计算机又有多个CPU的时候,不同的线程可以在不同的CPU中并发执行!同时,进程间通信会涉及管道(pipe)和有名管道(FIFO),信号(signal),消息队列,共享内存,信号量,套接字(socket) 等,比较麻烦,但是线程间通信就简单多了,因为是共享内存的,所以直接访问相应的内存就可以了。 同时线程是轻量级的,线程的申请释放的资源消耗远低于进程的申请释放。 线程同步的意义:并发执行的目的是为了更高效得利用CPU资源,但是,并发执行也会有问题发生。比如两个线... 阅读全文

posted @ 2014-02-21 16:50 huhuuu 阅读(226) 评论(0) 推荐(0) 编辑

摘要:在写CPP的时候,常常要写using namespace std;这么一句话,到底有什么用呢?#include namespace first{ double var = 5;}namespace second { double var = 10;}int main () { std::cout << "5 plus 10 equals " << first::var + second::var << std::endl ; std::cin.get(); return 0;} 我们可以使用同一个变量名,只要在它们之前加上namespac 阅读全文

posted @ 2014-01-11 13:50 huhuuu 阅读(1319) 评论(0) 推荐(0) 编辑

摘要:发帖水王:一堆数中有一个数字出现的次数多于1/2,问那个数? 比较简单的思路就是两个变量,一个记录当前的数字a,另一个记录当前数字出现的次数size,下一个数字与a相同的时候,size++,不同的时候:size>1,则size--;否则更新a,size=1; 加强版:一堆数中有3个数字出现的次数多于1/4,问是哪三个数? 思维迁移,用3个{a,size}量保存当前更新的数,下一个数字的时候,看这三个里面是否有这个数字存在,若是,则相应的size++;否则,找出sizez最小的那个量,size>1,则size--;否则更新a,size=1; #include#include#in.. 阅读全文

posted @ 2013-12-28 21:07 huhuuu 阅读(308) 评论(0) 推荐(0) 编辑

摘要:三门问题,其中有一扇门后面有一辆车,两扇门后面是山羊,你随意选择了一扇门,这时,主持人打开了某一扇门是山羊,问你换不换你刚才选的门。 大部分人应该跟我的想法是一样的,换不换有区别么?区别大了!网上找了下资料,这个解释是比较通俗易懂的。 如果让3000个人来选,那么第一次选的时候,按照概率,会有1000个人左右选中,是吧? 对于每个观众,主持人展示了一扇没有奖的门之后,说:“虽然给你去掉了一个错误答案,但是你没有反悔的机会。”这就相当于,每个人都选择了不换。于是最终,一开始选中的那1000人得到了奖。也就是说,如果不换的话,获奖概率为1/3。 也可以反过来:主持人展示了一扇没有奖的门... 阅读全文

posted @ 2013-12-23 18:42 huhuuu 阅读(272) 评论(0) 推荐(0) 编辑

摘要://位图的概念就是在个一字节八位的地方存八个状态比如 bool hash[] 表示某个数字被标记过,一个数字需要一个字节而bitMap就是可以把每位都用来标记,起到节约空间的目的//位图的概念就是在个一字节八位的地方存八个状态#includechar s[100]; // 范围0~799void bitmap(int n){ int insert=n/8; int insertbit=n%8; s[insert]|=(1<<insertbit);}int findBitmap(int n){ int insert=n/8; int insertbit=n%8; ... 阅读全文

posted @ 2013-12-03 10:46 huhuuu 阅读(243) 评论(0) 推荐(0) 编辑

摘要:#include#includeusing namespace std;class base1{public: base1(){ printf("start base1\n"); } ~base1(){ printf("end base1\n"); }private: int mx,my; int mi,mj;};class base2:public base1{public: base2(){ printf("start base2\n"); } ~base2(){ ... 阅读全文

posted @ 2013-12-02 09:42 huhuuu 阅读(320) 评论(0) 推荐(0) 编辑

摘要:析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为对象所分配的空间,即要撤消一个对象。用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。(在有派生类的情况下)如果是非虚函数,会调用指针所指类型的实现版本。析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构函数就会被调用。当派生类对象出了作用域,派生类的析构函数会先调用,然后再调用它父类的析构函数, 这样能保证分配给对象的内存得到正确释放。但是,如果我们删除一个指向派生类对象的基类指针,而基类析构函数又是非虚的话, 那么就会先调用基类 阅读全文

posted @ 2013-12-01 22:11 huhuuu 阅读(10557) 评论(0) 推荐(0) 编辑

摘要:105 6 7 8 9 10 1 2 3 4查找4当是s[ll]s[mid]的时候,(k>s[ll]||k#includeusing namespace std;int s[109];int main(){ int n,k; while(scanf("%d",&n)!=EOF){ int i; for(i=0;i=s[ll]||k<=s[mid]){ rr=mid-1; }else{ ll=mid+1; } ... 阅读全文

posted @ 2013-12-01 21:12 huhuuu 阅读(324) 评论(0) 推荐(0) 编辑

摘要:给一个长度为n的字符串,把这个字符串循环右移N位(0#includeusing namespace std;int s[109];int main(){ int n,k; while(scanf("%d",&n)!=EOF){ int i; for(i=0;i<n;i++){ scanf("%d",&s[i]); } scanf("%d",&k); k=k%n; int end1=(k-1)/2; int end2=(k+n-1)/2; int en... 阅读全文

posted @ 2013-12-01 20:54 huhuuu 阅读(1259) 评论(0) 推荐(0) 编辑

摘要:char const* ptr1const char * ptr2char * const ptr3看到这三个const作何感想其实const比较好理解的是const 后面整体是不能改变的(整体的思想)如char const* ptr1=&s;后//*ptr1=‘B’;这样是不可以,但是ptr1=&s2;还是可以的;const char * ptr2同理char * const ptr3=&s;后*ptr3='A';是可以的,但是ptr3=&s2;不行 阅读全文

posted @ 2013-12-01 19:01 huhuuu 阅读(149) 评论(0) 推荐(0) 编辑

摘要:sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么?#include using namespace std;class Base1 {public: int b1; static int a1; virtual void f() { cout << "Base1::f" << endl; } virtual void g() { cout << "Base1::g" << endl; } void h() { cout << " 阅读全文

posted @ 2013-12-01 18:33 huhuuu 阅读(439) 评论(0) 推荐(0) 编辑

摘要:1.指针可以不初始化,引用必须要初始化。2.指针可以改变指向,引用在初始化后就不能再变化了。#includevoid swap1(int& a,int& b){ int temp; temp=a;a=b;b=temp;}void swap2(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}int main(){ int x=1,y=10; swap1(x,y); swap2(&x,&y); printf("%d %d\n",x,y);}在swap1处:可以发现,在main函数中,x... 阅读全文

posted @ 2013-12-01 16:16 huhuuu 阅读(178) 评论(0) 推荐(0) 编辑

摘要:#include#includechar s[123]={"1233232"},str[123];char* strcpy(char *to,char *from){ if(NULL==to||NULL==from) //不检查指针的有效性,说明答题者不注重代码的健壮性。 throw "point error"; //应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。 int i; for(i=0;from[i]!='\0';++i){//直接使用字面常量(如本例中的0)会减少程序的可维护性 to 阅读全文

posted @ 2013-11-28 22:24 huhuuu 阅读(796) 评论(0) 推荐(0) 编辑

摘要:一个进程相当于你写了的一个程序正在内存中运行,而这个进程内至少有一个主线程,C++就是main(),还有辅助线程,当然一旦主线程结束了,辅助线程就都结束了,这样就可以比较清晰地理解,进程是资源分配的基本单位,而线程,是共用进程中的资源的,同时操作系统就给了进程一部分内存堆和cpu处理的时间。 下面的函数可以观察两个辅助线程的运行情况 下面的程序有两个辅助线程,没有临界资源#include #include#include#include#include#include#include#include #includeusing namespace std;DWORD WINAPI Fu... 阅读全文

posted @ 2013-11-25 22:32 huhuuu 阅读(408) 评论(0) 推荐(0) 编辑

摘要:1.有一组无序的数,只能两两相邻交换,最少交换几次可以使数组有序 由两两相邻交换考虑到逆序数,这个问题就转化到了逆序数一共有几对。 对于逆序数对数的计算,普通的有O(n*n)的算法,当然可以通过树状数组优化N*log(N)2.有一组无序的数(数字两两不相等:如3 1 1 1就不行),可以任意相互交换,最少交换几次可以使数组有序 问题其实可以转化到选择排序,比如 6 2 1 3 4,第一次将最小的取出放到第一位,如果最小的本来就在第一位,步数就不变,反之加1后交换位置 1 2 6 3 4,后面依次进行 O(n*n)的方法#include#include#includeusing namespac 阅读全文

posted @ 2013-11-25 20:29 huhuuu 阅读(755) 评论(0) 推荐(0) 编辑

摘要:主要考虑,字符串中是否有非法字符,字符串是否有溢出控制#includeint myatoi(const char *str){ int sight=1,ret=0,i=0; if(str[i]==' ')i++; int max=(1='0'&&str[i]max){//溢出控制 ret=max;break; } } return ret*sight;}int main(){ printf("%d\n",myatoi("214748.3649"));}View Code 后来仔细想想发现自己的代码弱爆了!改 阅读全文

posted @ 2013-11-20 18:03 huhuuu 阅读(516) 评论(0) 推荐(0) 编辑

摘要:从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:123int *p;p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);或:123int* parr;parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。1234567int* p;p = (int *) malloc (sizeof(int)*12 阅读全文

posted @ 2013-11-19 22:03 huhuuu 阅读(18441) 评论(1) 推荐(5) 编辑