1. 在小端机器中,如果
union X{
int x;
char y[4];
};
如果:
X a;
a.x=0x11223344; //16进制
则:
A. a.y[0]=11
B. a.y[1]=11
C. a.y[2]=11
D. a.y[3]=11
E. a.y[0]=22
F. a.y[3]=22
这道题主要看看脑子清不清楚再加上一点关于联合的知识。联合分配空间得时候为联合内部占内存最大的部分的空间大小,所以这块就是4*sizeof(char),也就是4字节,题中给出的X a,a.x=0x11223344,为十六进制,十六进制后边的的这一串数填到a的空间里的时候为先从低位填,也就是说44占据第四个字节中最低位也是物理字节里的第一位,11是最高位也是字节里边的最后一位。这块就有意思了,字符数组在分配内存的时候y[0]是最低位字节,y[3]是最高位字节,储存的时候也是这样子储存的,先储存y[0],最后y[3].所以这块的y[3]对应的时候上面储存时候最后储存进来的11。
2.已知一个二叉树的前序遍历结果是(ACDEFHGB), 中序遍历结果是(DECAHFBG), 请问后序遍历结果是()
A. HGFEDCBA
B. EDCHBGFA
C. BGFHEDCA
D. EDCBGHFA
E. BEGHDFCA
F. BGHFEDCA
A的左子树前序遍历为CDE,中序遍历为DEC,则E为D的右子树D为C的子树,A的右子树前序为FHGB中序为HFBG,则H为F的左子树,G为右子树,B为G的左子树,然后总体的后序遍历就是EDCHBGFA
3.一个好基本的题,
程序出错在什么阶段______?
int main ( void )
{
http://www.taobao.com
cout << "welcome to taobao" << endl ;
}
这题真是个好题,很基本,但很巧妙。为啥可以通过编译通过运行呢?。。。http://www.taobao.com,这句话是这样子的,前面的http:是个无用的标签,其效果就想goto语句里面的跳转标签一个,也像switch case :语句里面的case:一样都是标签,然后后边部分都是注释。所以可以通过编译运行的。
4.用6块1×2的完整瓷砖,铺满2×6的地面,一共有______种不同的铺法(不允许将瓷砖划分成小块)
A.13
B.15
C.22
D.24
E.25
F.26
很简单,想一想就可以得到答案
5.下列方法中,______不可以用来程序调优 ?
A. 改善数据访问方式以提升缓存命中率
B. 使用多线程的方式提高I/O密集型操作的效率
C. 利用数据库连接池替代直接的数据库访问
D. 使用迭代替代递归
E. 合并多个远程调用批量发送
F. 共享冗余数据提高访问效率
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.
一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.
使用递归要注意的有两点:1.递归就是在过程或函数里面调用自身; 2.在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.
递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.
- //这是递归
- int funcA(int n)
- {
- if(n > 1)
- return n+funcA(n-1);
- else
- return 1;
- }
- //这是迭代
- int funcB(int n)
- {
- int i,s=0;
- for(i=1;i<n;i++)
- s+=i;
- return s;
- }
6.int main() { fork() || fork();}
共创建几个进程?
A. 1
B. 2
C. 3
D. 4
E. 5
第一个fork()产生两个进程,一个父进程一个子进程,父进程返回值为子进程的id,此id>0所以在父进程这块就不会在在运行||fork()这块了。然后子进程返回值为0,因为子进程现在还没有子进程,然后就会执行||fork(),这下子进程就会在创建两个进程。所以一共是三个进程。(a||b,如果a为大于0的数,就不会执行||b了。)