LoveSi

自处超然,处人蔼然,无事澄然,遇事斩然,得意淡然,失意泰然

常用链接

统计

最新评论

2010年10月16日 #

c++面试常问的问题

1.c与c++的区别

   1.全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。 
   2
C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API 
   3
,特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。 
   4
CC++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。 
   4
C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。 
   5
C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。 
   6
C++中的IDE很智能,和VB一样,有的功能可能比VB还强。 
   7
C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。 
   8
C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。 
   9
,调试功能强大,并且方法多样。

2.数组和链表的优缺点
   
   数组在内存中开辟连续的一块区域,如果一个数据要两个内存单元,一组5个数据10个单元就够了,无需标记其地址,因为数组定义时候标顶了第一个原许的地址,其他四个都知道了。链表可以是连续的,也可以是不连续的,但一般都是不连续的。
  1.链表灵活,数组简洁。  
  2
。要在数据中间做插入或删除,链表高效些,因为数组得把数据往前/后挪。  
  3
。数组的简索比链表快,因为它可以直接用偏移(offset)而链表要一接接地找。  
  4
。数组的建立/销毁比链表要快。  
3. malloc/new, free/delete之间的区别
   
malloc,free 是C语言的标准函数库,new/delete 是C++的运算符,他们都可以动态申请内存和释放内存; 
   对于非内部数据类型的对象而言, 光用malloc/free无法满足动态对象的需求. 对象要创建的同时要自动执行构造函数,对象在消亡之前要执行析构函数,由于malloc/free不是运算符,不在编译器控制权限之内,不能把构造函数和析构函数的务强加于malloc/free上. 因此,C++语言需要一个动态内存分配和初始化的运算符new和一个能完成清理与释放内存的运算符delete

不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。
既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
  malloc/free功能还有一好处,就是可以和realloc组合使用,在需要扩大内存块时不一定会导致内存移动;而用new/delete实现时只能用new[]-copy-delete[]操作序列完成,每次都会导致内存移动。


posted @ 2010-10-16 20:01 LoveSi 阅读(756) | 评论 (0)编辑 收藏

2010年10月10日 #

笔试碰到的算法题

至今笔试都悲剧的被拒,先发几道笔试中遇到的算法题
1.给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大.
例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。
int max_sub2(int a[], int size)
{
    
int  max = 0;
    
int temp_sum = 0;
    
for(int i = 0; i < size; i++)
    
{
        temp_sum 
+= a[i];
        
if(temp_sum > max)
            max 
= temp_sum;
        
else if(temp_sum < 0)
            temp_sum 
= 0;
    }

    
return max;
}

2. 任何一个基于"比较"的内部排序的算法,若对6个元素进行排序,则在最坏情况下所需的比较次数至少为____。

   据严蔚敏数据结构,问题等价于给n个不同的砝码和一台天平要称几次能分辨它们的顺序。n个记录的序列可能出现的初始状态有n!个,则描述n个记录排序过程的判定树必有n!个叶子节点,若有n个叶子节点,则二叉树的高度至少为log 2 n,(2为底),也即是说必然存在一条长为log 2 n!的路径,求出来n10,(取上界)

3. 对一个表达式求值时,首先要把表达式转换为后缀表达式,然后在利用栈求值。

posted @ 2010-10-10 16:37 LoveSi 阅读(436) | 评论 (2)编辑 收藏

淘宝笔试

1.如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1。问对于一个给定的n,怎样才能用最少的步骤将它变到1。
例如 n= 61
n-- 60
n/2 30
n/2 15
n++ 16
n/2 8
n/2 4
n/2 2
n/2 1

参照网上的讨论,这道题的意思其实是看最后两位的二进制数:AB。如果B为偶数,则直接/ 2,如果B为奇数,则看A的值,若A为1,则该值+1,若为0,则该值-1。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
    
int n;
    cin
>>n;
    
int count = 0;
    
while( n > 1)
    
{
        
if( n%2 == 0)
            n 
/= 2;
        
else if( n == 3)
            n
--;
        
else
            n 
+= (n % 4 - 2);
        count
++;
    }


    cout
<<"times:"<<count<<endl;
    
return 0;
}


2.编一个有3个线程的程序,由Main主线程进入,生产者线程产生一个随机的整数。这个整数存在List中,再由消费者线程读取List数据,并显示。
3.列举3种你最喜欢的语言(Java/c++)框架,它们的特点和你喜欢的原因。
4.前缀表达式和后缀表达式的问题。
   35,15,+,80,70,-,*,20,/               //后缀表达方式
   (((35+15)*(80-70))/20)=25           //中缀表达方式  
   /,*,+,35,15,-,80,70, 20             //前缀表达方式

人们习惯的运算方式是中缀表达式。而碰到前缀,后缀方式。。迷茫。其实仅仅是一种表达式子的方式而已(不被你习惯的方式),我这里教你一种也许你老师都没跟你讲的简单转换方式。一个中缀式到其他式子的转换方法~~这里我给出一个中缀表达式~           a+b*c-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
                 式子变成拉:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
        前缀:把运算符号移动到对应的括号前面
                 则变成拉:-( +(a *(bc)) +(de))
                 把括号去掉:-+a*bc+de  前缀式子出现
        后缀:把运算符号移动到对应的括号后面
              则变成拉:((a(bc)* )- (de)+ )-
              把括号去掉:abc*+de+-  后缀式子出现
发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。
后天晚上会有笔试,我会把最新的发上来~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2011年的笔试
1前面的选择题记不清了.就上c++的答题吧?
2.不用sizeof,计算int的字节数
3.MAC地址字符串XX:XX:~~~最后改成XX-XX-XX-XX的标准形式
4.色子问题:有一枚筛子,每个面都有一个数字:1~6。很显然,你会倾向于认为这6个面出现的概率是相等的,也就是,你倾向认为:P(x1)=P(x2)=…=P(x6)=1/6其中,P(xi)表示出现数字xi的概率。
假如,我告诉你,这枚筛子与其它筛子不同,似乎,他很容易滚到4或者5这个面,所以这个筛子滚了好多次以后,它出现的平均值是4.5。这个时候,你会怎样分配P(x1)~P(x6)的概率呢?



 

posted @ 2010-10-10 16:28 LoveSi 阅读(1894) | 评论 (1)编辑 收藏

2010年10月9日 #

智力题目集锦

     摘要: 1.你有5瓶药,每个药丸重10克