设为首页 加入收藏

TOP

C++问题(三)
2014-11-24 01:25:59 来源: 作者: 【 】 浏览:34
Tags:问题
界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问
;然而,对齐的内存访问仅需要一次访问。
34. int i=10, j=10, k=3; k*=i+j; k最后的值是?
答案:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低
35. 对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现
答案:将操作多个表的操作放入到事务中进行处理
36. TCP/IP 建立连接的过程 (3-way shake)
答案:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状
态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个
SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
37. ICMP是什么协议,处于哪一层
答案:Internet控制报文协议,处于网络层(IP层)
38. 触发器怎么工作的
答案:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT
、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数
据的处理必须符合由这些SQL 语句所定义的规则。
39. winsock建立连接的主要实现步骤
答案:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()
等待客户端连接。
客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(
),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连
接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesock
et()关闭套接字。
40. 动态连接库的两种方式
答案:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数
,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向
系统提供了载入DLL时所需的信息及DLL函数定位。
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa
dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的
出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了

41. 一个32位的机器,该机器的指针是多少位
答案:指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
42. 关键字volatile有什么含意?并举例?
答案:提示编译器对象的值可能在编译器未监测到的情况下改变。如多线程、多CPU,变量的值可能被其它线程或运行在其它CUP的代码更改。
43. c和c++中的struct有什么不同?
答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private
44. 列举几种进程的同步机制,并比较其优缺点。
答案:原子操作
信号量机制
自旋锁
管程,会合,分布式系统
45. 进程之间通信的途径
答案:共享存储系统
消息传递系统
命名管道
46. 进程死锁的原因
答案:资源竞争及进程推进顺序非法
47. 死锁的4个必要条件
答案:互斥、请求保持、不可剥夺、环路
48. 操作系统中进程调度策略有哪几种?
答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈
49. 类的静态成员和非静态成员有何区别?
答案:类的静态成员每个类只有一个,非静态成员每个对象一个
50. 纯虚函数如何定义?使用时应注意什么?
答案:virtual void f()=0;
是接口,子类必须要实现
51. 数组和链表的区别
答案:数组:数据顺序存储,固定大小
链表:数据可以随机存储,大小可动态改变
52. 线程与进程的区别和联系 线程是否具有相同的堆栈 dll是否有独立的堆栈
答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。
每个线程有自己的堆栈。
DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?
以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇灵川科技面试题C# .NET方面的 下一篇紫光华宇面试题(.Net)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: