我是靠谱客的博主 长情野狼,最近开发中收集的这篇文章主要介绍笔试选择题二十六 正确答案: A B C   正确答案: A D  ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、下面代码的输出结果是()
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
    int pid;
    int num=1;
    pid=fork();
    if (pid>0){
    num++;
    printf ( "in parent:num:%d addr:%xn" ,num,&num);
    }
    else if (pid==0){
    printf ( "in child:num:%d addr:%xn" ,num,&num);
    }
}
虚拟地址空间。num地址的值相同,但是其真实的物理地址却不一样。
linux下实现了一下,发现地址值真的一样。
fork之后子进程复制了父进程的数据、堆栈。
但是由于地址重定位器之类的魔法存在,
所以,看似一样的地址空间(虚拟地址空间),
其实却是不同的物理地址空间。
同时可以验证c程序中输出的地址空间其实都是虚拟地址空间。
父子进程中输出的num不同,num地址相同
二、
不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>//1
class B //2
{ //3
}; //4
B func( const B& rhs){ //5
   return rhs; //6
} //7
int main( int argc, char **argv){ //8
   B b1,b2; //9
   b2=func(b1); //10
} //11
一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=
b2=func(b1);//10
一次拷贝构造函数发生在func函数调用完成,返回B类型的对象时,因为返回的不是引用类型,所以会生成一个对象,
不妨称为TEMP,将返回的对象通过拷贝构造函数复制给TEMP,然后,返回值所对应的对象会被析构。如果返回值是引用类型,
则不会调用拷贝构造函数。

赋值运算符在func函数执行完成后,将上面提到的TEMP,通过赋值运算符赋值给b2,值得注意的是赋值运算符重载函数如果不自己定义,
程序会认为是调用缺省的赋值运算符重载函数。
三、 以下代码段有问题的是()

正确答案: A B C  

void func1(char *e){
  char *p1;
  p1=malloc(100);
  sprintf(p1,error:"%s'.",e);
  local_log(p1);
  }
int func2(char *filename)
  {
    FILE *fp;
    int key;
    fp=fopen(filename,"r");
    fscanf(fp,"%d",&key);
    return key;
   }
void func3(char *info){
  char *p,*pp;
  p=malloc(100);
  pp=p;
  free(p);
  sprintf(pp,*info:"%s'.",info);
  free(pp);
  }
选项全部都正确


答案是A 申请了空间没有释放,答案B 打开流没有关闭,答案C free了二次,但是其实指针都是一块内存空间
四、
#include<stdio.h>
int main()
{
     unsigned  char i=7;
     int j=0;
     for (;i>0;i-=3)
     {
        ++j;
      }
      printf ( "%dn" ,j);
      return 0;
}
请问该程序的输出是多少?
unsigned char 8位数据位,范围 0-255
所以-2(11111110)时,溢出变成254;
同理-1(11111111)时,溢出变成255;
最后减到0时,不满足循环条件,for停止。
刚好173次。
7 4 1 ==> 共 (7-1)/3+1=3次(1-3=-2,即254, 继续循环
254 251 ... 5 2 ==> 共 (254-2)/3+1=85次(2-3=-1,即255, 继续循环
255 252 ... 6 3 ==> 共 (255-5)/3+1=85次(3-3=0, 退出循环
所以总共173次。
这题正着推不容易,可以考虑反着推
要想退出循环  最后必定是 i=0
根据选项
A:        (0 + 2*3) % 256 = 6  不是7 , 所以A错误
C:          (0 + 173*3) % 256 = 7 ,           所以C可以
D:          (0 + 172*3) % 256 = 4 不是7,所以D错误
B: 既然C可以,当然B就错误
五、 假设MySQL数据库表:
create table T{
k int unsigned not null auto_increment,
a date,
b varchar(24),
c int,d varchar(24),
primary key(k),unique key a_index (a DESC,b DESC),
key k1(b),key k2(c),key k3(d));
如下哪些sql语句查询能较好的利用索引?()

正确答案: A D  

select b from WHERE b like 'aaa%';
select a,b from T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;
select a,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;
select a,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

解析如下:
一、什么是索引:
简单的来说,建立索引在进行数据库操作的时候不需要全盘一条条的扫描,删选出符合的记录,索引内部自己有一套优化算法,因此借助索引来对数据库进行操作可以提高查询的效率。

二、什么时候建立的索引将失效或效率不高(情况有很多,这里列举常见的几种, 假设在字段name上建立了索引):
1、使用了运算符!=,以及关键字not in, not exist等,认为产生的结果集很大,往往导致引擎不走索引而是走全盘扫描
2、对索引字段使用了函数,如where substr(name, 1, 3)=‘mark’, 导致索引无效
3、使用like和通配符,第一个字符是%将导致索引失效,如where name like "%ark“  (A正确)
.....
三、order by与索引
首先利用where进行数据查询,这一步是免不了的,至于这一步有没有利用索引暂时不考虑,关键是在获取所有符合的记录后还需要进行排序,看看order by是如何利用索引的。
如果order by中的字段有建立索引,同时:
1、该字段没有出现在where中,则在排序的时候需要正常排序,默认order by是升序排序, 故索引没有对排序产生有利帮助 (B,C错误)
2、该字段同时同时出现在where中,则在获取记录后不进行排序,而是直接利用索引, 效率变高。(D正确)

补充: group by也和order by类似
六、 InvalidateRect(NULL,TRUE)使整个客户区重绘,而且擦除背景。  
InvalidateRect(NUll,FALSE)使整个客户区重绘,不擦除背景。
七、 windows编程首先要包含Windows.h头文件

创建窗口大致需要以下几个步骤:

    1.建立窗口类,WNDCLASS

    2.注册窗口类,RegisterClass

    3.创建窗口,CreateWindow

    4.显示更新窗口,ShowWindow,UpdateWindow

    5.消息循环

    6.窗口过程

       至于ShowWindow之后为什么还要调用UpdateWindow呢,是因为ShowWindow只负责将窗口以什么各样的方式显示,而UpdateWindow负责发送WM_PAINT消息,将窗口重绘。而不调用UpdateWndow则系统要等消息队列遍历完成之后重绘。同样会显示窗口,只是UpdateWindow会让WM_PAINT立刻被处理发生重绘操作,效率要高一些。

最后

以上就是长情野狼为你收集整理的笔试选择题二十六 正确答案: A B C   正确答案: A D  的全部内容,希望文章能够帮你解决笔试选择题二十六 正确答案: A B C   正确答案: A D  所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部