
面试题总结
文章平均质量分 73
Mars尘
一步一步往前走,不再浮躁
展开
-
不能被继承的类
方法一C++中子类的构造函数和虚构函数会调用父类的构造和虚构函数,所以将父类构造函数和虚构函数定义为私有函数,子类不能继承私有函数,那么子类继承时将会出错。类的构造函数和虚构函数定义为私有函数,怎样的到该类型的实例呢?通过公有的静态函数来创建和释放实例,直接通过类SeadledClass1::GetInstance()访问。但得到的实例在堆上,而不是在栈上。class SealedCl原创 2014-03-14 18:00:43 · 412 阅读 · 0 评论 -
C++基本概念
什么是虚函数?在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数原创 2014-04-25 20:05:31 · 506 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符
char FindFirstNoRepeatChar(const char *str){assert(str != NULL);const char *s = str;for(; *str != '\0'; ++str){for(s = (++str),--str; *s != '\0' && *s != *str; s++)NULL;if(*s == '\0')原创 2014-04-25 19:39:14 · 364 阅读 · 0 评论 -
字符串拷贝函数
char *strcpy(char *strDest,const char *strSrc){ if()}原创 2014-04-28 21:30:17 · 698 阅读 · 0 评论 -
死锁
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。产生死锁的四个必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接转载 2014-04-28 21:41:50 · 511 阅读 · 0 评论 -
完全二叉树的判断
bool is_complete(Tree *root){queue q;Tree *ptr;// 进行广度优先遍历(层次遍历),并把NULL节点也放入队列q.push(root);while ((ptr = q.pop()) != NULL){q.push(ptr->left);q.push(ptr->right);}// 判断是否还有未被访问转载 2015-10-16 21:28:48 · 411 阅读 · 0 评论 -
海量数据处理
第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率转载 2015-11-03 23:49:24 · 336 阅读 · 0 评论 -
微策略笔试题
1 堆栈的区别,优劣,以及栈最多层次 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回原创 2015-10-21 23:56:30 · 1257 阅读 · 0 评论 -
ip地址与整数之间的转换
比如 A.B.C.D的换成整数就是:(((A*256)+B)*256+C)*256+D整数转IP:1409823698 = 540833D2 H => 以字节分解: 54H 08H 33H D2H => 转回10进制: 84 08 51 210bool is_Invalid = false;int IPtoINT(string s){ int result = 0;原创 2015-11-14 21:09:30 · 474 阅读 · 0 评论 -
程序结束时,动态内存会释放吗
1 从C语言本身设计来说,不会释放。所谓动态内存,是由malloc系列函数进行申请的内存,除非在程序中使用free释放,否则该段内存不会被释放掉。从这个角度来说,即使进程结束,该段内存也会被占用。这种现象被称为内存泄露。2 大多数操作系统可以智能释放。动态内存由于是进程使用,向操作系统控制方申请的内存,所以操作系统内核可以记录哪些内存由哪个进程使用,这样为了减少内存泄露的危害,操作转载 2016-01-19 22:47:34 · 8381 阅读 · 0 评论 -
C++中的单例模式
如果采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响。1.懒汉式是以时间换空间的方式。2.饿汉式是以空间换时间的方式。懒汉式懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的时候才会加载。。。。。。?123转载 2016-01-19 22:57:35 · 457 阅读 · 0 评论 -
最少硬币找零问题-动态规划
动态规划把问题分为子为题,解决了这些子问题,再把子问题合并起来,便可以得到问题的解。在解决子问题过程中,需要把子问题的解保存起来方便后面使用。最少硬币找零问题为:给予不同面值的硬币若干种种(每种硬币个数无限多),用若干种硬币组合为某种面额的钱,使硬币的的个数最少。在现实生活中,我们往往使用的是贪心算法,比如找零时需要13元,我们先找10元,再找2元,再找1元。这是因为现实生活中的硬转载 2015-12-05 19:05:31 · 4079 阅读 · 0 评论 -
重建二义树
BinaryTreeNode* Construct(int* preorder, int* inorder, int length){ if(preorder == NULL || inorder == NULL || length return NULL; return ConstructCore(preorder, preorder + length原创 2014-04-25 19:43:16 · 425 阅读 · 0 评论 -
malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内转载 2014-04-25 19:41:37 · 328 阅读 · 0 评论 -
不用加减乘除做加法与不用新的变量交换两个变量的值
不用加减乘除做加法第一步:不考虑进位对每一位相加,0加0的0,0加1的1,1加0的1,1加1的0,这个结果和异或的结果相同第二步:只有1加1会进位,这个结果和与的结果相同第三步:将两步的结果相加,重复上面的操作,直到不产生进位int Add(int num1, int num2){ int sum, carry; do { sum原创 2014-03-14 18:54:42 · 626 阅读 · 0 评论 -
求1+2……+n,不能用循环和乘除和条件判断语句
一 利用构造函数求解每个实例化都会调用构造函数,同时静态变量使得变量只有一个副本,每次实例化后值的改变影响一直存在。class Temp{public: Temp(){++n;sum+=n;} //++n从1开始 static void Rest(){n=0;sum=0} static unsigned int G原创 2014-03-14 20:48:05 · 688 阅读 · 0 评论 -
阿里巴巴集团2014校园招聘笔试题
转自http://blog.sina.com.cn/s/blog_6f83fdb40101eyzw.html第一部分 单选题(前10题,每题2分;后10题,每题3分。选对得满分,选错倒扣1分,不选得0分)1、一次内存访问,SSD硬盘访问和SATA硬盘随机访问的时间分别是(B) A、几微秒,几毫秒,几十毫秒 B、几十纳秒,几十微秒,几十毫秒 C转载 2014-03-27 20:18:54 · 1189 阅读 · 0 评论 -
二维数组中的查找
给定一个矩阵int matrixA[m][n],每行每列都是增序的,实现一个算法判断矩阵中的是否包含某个元素elementbool Find(int* matrix, int rows, int columns, int number){ bool found = false; if(matrix != NULL && rows > 0 && columns原创 2014-03-27 21:04:07 · 382 阅读 · 0 评论 -
链表问题
给定单链表的头指针和一个节点指针,在O(1)时间内删除该节点void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if(!pListHead || !pToBeDeleted) return; // 要删除的结点不是尾结点 if(pToBeDeleted->m_p原创 2014-03-28 17:05:14 · 351 阅读 · 0 评论 -
Fibonacci数列
long long Fibonacci_Solution1(unsigned int n){ if(n return 0; if(n == 1) return 1; return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2);}/原创 2014-03-31 15:11:26 · 388 阅读 · 0 评论 -
寻找数组中的最大值最小值问题
转自http://blog.youkuaiyun.com/insistgogo/article/details/7693743问题描述:给出一个数组,包含N个整数,那么需要比较多少次找到最大值和最小值注意:要想得到最大值和最小值,遍历一遍数组是不可避免的。我们能减少的就是减少比较次数来提高效率方法一、遍历一遍数组,同时得到最大值和最小值具体是,定义一个max 和 min,每遍历转载 2014-03-31 15:46:14 · 1198 阅读 · 0 评论 -
重建二义树
关于书写规范:所有宏定义、枚举常数和const变量,用大写字母命名函数名是复合词的,第一个词采用全部小写,随后每个单词采用第一个字母大写,其它字母小写方式用小写字母的前缀表示变量的类型,前缀的下一个字母用大写类、类型定义和枚举型名的第一个字母大写类的成员变量应采用m_开头 BinaryTreeNode* Construct(int* preorder, int* ino原创 2014-03-21 21:48:17 · 506 阅读 · 0 评论 -
用两个栈实现队列与用两个队列实现栈
#pragma once要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次#pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。用两个栈实现队列template void CQueue::appendTail(const T& element) //每个模板函数的实现原创 2014-03-22 19:12:23 · 391 阅读 · 0 评论 -
字符串反转
char *stringReverse(char *string){ char *start=string;char *left=string;char ch;if (string !=NULL){ while(*string != '\0') string++;string -=1; //1while(left {原创 2014-04-05 14:26:14 · 372 阅读 · 0 评论 -
字串查找
给定一个字符串A,要求在A中查找一个子串B。如A="ABCDF",要你在A中查找子串B=“CD”。char *strstr(const char *strSrc, const char *str) { assert(strSrc != NULL && str != NULL); const char *s = strSrc;原创 2014-04-25 20:21:32 · 500 阅读 · 0 评论 -
找零钱
有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。测试样例:[1,2,4],3,3返回:2class Exchange {pu原创 2015-12-05 19:13:14 · 891 阅读 · 0 评论