往年的深信服笔考试齐全Word格式.docx

上传人:b****3 文档编号:7446902 上传时间:2023-05-08 格式:DOCX 页数:12 大小:21.75KB
下载 相关 举报
往年的深信服笔考试齐全Word格式.docx_第1页
第1页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第2页
第2页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第3页
第3页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第4页
第4页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第5页
第5页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第6页
第6页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第7页
第7页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第8页
第8页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第9页
第9页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第10页
第10页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第11页
第11页 / 共12页
往年的深信服笔考试齐全Word格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

往年的深信服笔考试齐全Word格式.docx

《往年的深信服笔考试齐全Word格式.docx》由会员分享,可在线阅读,更多相关《往年的深信服笔考试齐全Word格式.docx(12页珍藏版)》请在冰点文库上搜索。

往年的深信服笔考试齐全Word格式.docx

abc"

*p2;

*p3 

123456"

123456\0在常量区,p3在栈上。

static 

=0;

全局(静态)初始化区 

p1 

(char 

*)malloc(10);

p2 

*)malloc(20);

分配得来得10和20字节的区域就在堆区。

strcpy(p1, 

);

123456\0放在常量区,编译器可能会将它与p3所指向的"

优化成一个地方。

}不知道是那个高人怎么想的和我一样,我估计中间应该有错误)

2%&

.&

&

<

==那个优先级别最高

.&

%<

=&

=

3

4以下哪些通信方式是可靠的通讯方式 

1信号2管道3消息4tcp5udp6串口I/O 

5是(M)?

(a++):

(a--),此处的M等于我选C

A,M==O,B,M==1,C,M!

=O,D,M!

=1

6是Unix的启动顺序排序。

(6个选项)

1是数制转换151转2进制和九进制。

10010111177

2已知0的ASCII码为0x40,那么int 

120;

在内存中的表示形式是0x__ 

78(0的ASCII码为0x40,应该为0x30)

1、在linux下,查看目录大小的命令是:

du–shdirname

2、修改文件属性的命令是:

chomd/chgrp

3、切换为其他用户身份的命令是:

su

4还有一道指针交换数值inti=0,j=10,int*p=&

i,int*q=&

j,

intfun(**a,*b)

{int*temp=a;

*a*=10;

*b*=10;

a=b;

b=temp;

}最后问调用fun(&

p,q)问i、j、p、q的最终值(具体形式大概如此,但中间指针肯定记的错误)

此题主要考察指针指向一个整数,然后利用指针改变变量,最后交换指针

∙5有道填插入排序的算法。

有一个数组a[0]到a[i-1]为从小到大排序,a[i]到a[count-1]没有排序,请您添加3条语句使它们按照从小到大排序

intinsert_sort(inta[],intcount)

{

for(inti=1;

i<

count;

++i)

{

intj,t;

t=a[i];

(j=i-1;

while(j>

=0&

t<

a[j])

{

(a[j+1]=a[j];

j--;

}

(a[j+1]=t;

}

return0;

}

三,编程与逻辑题

1自己写一个strstr

(单链表判断有无环,)

char*strstr(char*buf,char*sub)

char*bp;

char*sp;

If(!

*sub)

returnbuf;

while(*buf)

{bf=buf;

sp=sub;

do{if(!

*sp)

while(*bp++==*sp++)

buf+=1;

return0;

2遍历文本找单词并删掉出现频率最少的单词,fun(char*pText)

#include 

<

stdio.h>

stdarg.h>

//定义av_list、av_start、av_arg等宏

∙3实现一个与printf功能相似的函数

iostream>

conio.h>

/*******************************************************************

此函数的作用:

实现一个参数个数可变的函数,此函数的功能与printf类似,

但在格式处理上,不如printf丰富

无异常,返回一个true,否则返回false

format字符串的合法情况如下:

1."

%%zyk%%zyk%%"

OUTPUT:

%zyk%zyk%

2."

%dzyk%fzyk%s"

(int)zyk(float)zyk(string)

3."

zyk"

 

OUTPUT:

zyk

非法情况如下:

%zyk%"

ERROR:

不存在%z格式、%后面必须跟一个格式字符

*******************************************************************/

bool 

zykPrintf(const 

char 

format,...)

//定义一个可用于指向参数的指针(实为char 

*),

va_list 

argPtr;

//把函数的第一个参数format的地址传给argPtr

va_start(argPtr,format);

const 

int 

size 

strlen(format)+1;

*tmp 

new 

char[size];

memset(tmp, 

0, 

size);

∙while 

(*format 

!

0)

i;

for 

(i=0;

*format!

='

%'

=0;

i++)

tmp[i]=*format++;

tmp[i] 

0;

//在有效的字符串末尾作0值防护

printf("

%s"

tmp);

if 

== 

return 

true;

switch(*++format)

//按指定类型读取下一个参数,并打印

case 

'

d'

:

%d"

va_arg(argPtr, 

int));

break;

s'

*));

c'

%c"

char));

f'

%f"

float));

//对%%的处理

%%"

//格式错误

default 

Error 

Ocurr!

Please 

Check 

the 

Format!

"

false;

++format;

delete[] 

tmp;

main(int 

argc,char 

argv[])

zykPrintf("

%zyk"

//error

zyk%"

//OUTPUT:

\nzyk 

is 

pretty 

boy!

His 

age 

%d 

and 

5,"

love 

zyk^_^!

getch();

文章引用自:

∙4是一道逻辑题,有的数是2,3,5的倍数,在三位数中出去可整除这三个数的和

(5升和3升桶量4升水)

四,改错题三道

1tozero算法

2比较简单

3是高质量里的一道题

五,问答题

1VC中有哪些方法避免C编程中的头文件重复包含:

#ifndef!

#def!

#endif

2在C++中externc的作用

(按键转换,比如点击p输出q)

作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。

extern"

C"

是连接申明(linkagedeclaration),被extern"

修饰的变量和函数是按照C语言方式编译和连接的

3编程中异步IO和同步IO有什么区别?

说说你可知道的几种IO?

4使用异步socket编程,通常因为网络拥塞send不出数据,会获得什么样的错误码(windows下举例),通常如何处理这种情况?

(核心太与用户太的区别,x86如何转换。

5将程序移植到不同的32位cpu中,经常出现结构字节对齐和大小端的问题,有哪能些方法避免?

(是子网源码的判断,计算,ABCDE网络的区别,DE网络的用途,)

6怎样解决在vc中内存泄漏的问题(release版本)

(1)放置关键字assert()

(2)生成map文件。

它并不往exe文件中添加任何东西,仅仅只是把编译连接时的所有函数入口地址记录在后缀为.map文件。

程序崩溃的时候,可以得到一个崩溃时的EIP地址,通过地址可以很容易的查到崩溃所在的函数。

(在vcsetting下有个link按钮选上generatemapfile)

(3)Release版本也是可以设置断点的,在希望设置断点处加入_asmint3

(4)熟悉汇编,通过编译时的汇编看出

(5)使用第三方调试器。

(6)关掉发行版中的一些优化选项,生成调试信息。

(是p2p软件在nat用户里实现数据互传的原理

开发类笔试全部是C/C++,要求对底层有一定的了解开发类的笔试题目比较晕,共五页纸,要求两个钟头完成(我的简历没有通过筛选,我是去霸王笔的-_-)好像考的内容都跟网上流传的差不多,题目内容大致如下:

希望对参加深信服笔试和面试的同学有所帮助:

1.选择题:

6题 

第一题是考变量和值的存储位置(堆/栈/代码段/数据段等) 

最后一题是Unix系统的启动顺序,其他几题比较简单。

2.填空题:

4/5题 

考sizeof、指针、数制转换、排序等,看过高质量C/C++应该都没有问题。

3.改错题:

3题 

有道题跟高质量C/C++中一道指针题类似,不过那题中没有错,原本不需要修改,却反倒被我改错了,汗...另外两题比较简单。

4.编程题:

4/5题 

判断链表有没有环(要求用两种方法);

实现C中的printf

深圳某公司几个vc/mfc笔试题目(含参考答案)

1:

Release版本下如何解决memoryleak以及非法操作的BUG。

(搞不清什么非法操作)

2:

在异步socket时,为什么有时send不出数据,会报什么错误(分windows/linux下),你一般怎么处理?

下面是几个编程的

3:

实现strstr模型(我晕,我写了个函数,只是不是strstr,而是strchr)

4:

实现printf类似的函数,voidmyprintf(char*str,...)

(用consoleAPI吗?

好像在哪书上看到可用那些API实现,嘿,我就写了个std:

cout<

5:

删除文本文件中出现频率最小的单词,(文件里以空格表示间隔一个单词)

voidfunc(char*pTxt)

1、strstr的实现原型。

char*my_strstr(constchar*str,constchar*strSearch)

while(*str!

='

\0'

char*p=(char*)str;

char*ps=(char*)strSearch;

while(ps&

*p==*ps)

p,ps;

if('

==*ps)

return(char*)str;

str;

returnNULL;

2、从指定文本中删除出现频率最少的单词,如果有多个,则都删除。

实现voidfunc(char*pTxt)函数。

...看单词处理,论坛中很多都有涉及

3、printf的实现。

intprintf(constchar*format,...)

va_listarglist;

intbuffing;

intretval;

va_start(arglist,format);

_ASSERTE(format!

=NULL);

#ifdef_MT

_lock_str2(1,stdout);

__try{

#endif/*_MT*/

buffing=_stbuf(stdout);

retval=_output(stdout,format,arglist);

_ftbuf(buffing,stdout);

__finally{

_unlock_str2(1,stdout);

return(retval);

4、VC中有哪些方法避免C编译头文件重复。

(除了#ifndef/#define/#endif外,就想不出来了)

#pragmaonce

5、extern"

的用法。

用于提供C接口,如使用C命名方式等.

6、异步socket编程中,send不出数据的错误码是什么,(举Linux或Windows为例),你是怎么处理的?

非阻塞SOCKET,SEND不出数据的原因有2个吧,TCP下连接断开了和该SOCKET处在阻塞状态(也就是说在发送数据中)。

UPD发不出只有TCP后面的情况。

处理的办法就是记录下该SOCKET的状态,当状态为阻塞的时间,放入缓冲,当该SOCKET再次可写时,发送。

7、异步IO和同步IO有什么区别?

举例说明有几种(如read)?

异步IO当函数返回时不一定就完成了IO操作,而同步IO已经完成了。

所以异步IO需要有一个事件,当IO完成时会设置此事件,调用者在事件上等待。

8、32位系统中,出现结构字节对齐的问题和大小端的问题的避免?

#pragmapack(4)

9、如何查出内存泄漏和非法操作的BUG(在Release版本下)?

使用map文件

1,PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。

而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。

而且,PostMessage的返回值表示PostMessage函数执行是否正确;

而SendMessage的返回值表示其他程序处理消息后的返回值。

这点大家应该都明白。

2,如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。

SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。

SendMessage在同一线程中发送消息并不入线程消息队列。

如果在不同线程内。

最好用PostThreadMessage代替PostMessage,他工作的很好。

SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。

这是SendMessage的一般情况,事实上,处理过程要复杂的多。

比如,当发送消息的线程监测到有别的窗口SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(这个过程不需要消息循环中GetMessage等的支持)。

3,msdn:

IfyousendamessageintherangebelowWM_USERtotheasynchronousmessagefunctions(PostMessage,SendNotifyMessage,andSendMessageCallback),itsmessageparameterscannotincludepointers.Otherwise,theoperationwillfail.

如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。

最好不要用PostMessage发送带有指针参数的消息。

PostMessage和SendMessage的区别主要在于是否等待其他程序消息处理。

PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;

而SendMessage必须等待其他程序处理消息后才返回,继续执行。

这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2