面试题四

来源:互联网 发布:北京软件管理学院 编辑:程序博客网 时间:2024/04/29 23:06
 1.有以下表达式:
int a=248,b=4;
int const c=21;
const int *d=&a;
int *const e=&b;
int const *f const =&a;
请问下列表达式哪些会被编译器禁止?为什么?
*c=32;                   禁止
d=&b;
*d=43;                  是const禁止
e=34;
e=&a;                   是const 禁止
f=0x321f;               禁止

3.c和c++中的struct有什么不同?
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private.
4.#include <stdio.h>
  #include <stdlib.h>
  void getmemory(char *p)
  {
    p=(char *) malloc(100);
    strcpy(p,"hello world");
  }
  int main( )
  {
    char *str=NULL;
    getmemory(str);
    printf("%s/n",str);
    free(str);
    return 0;
   }
       程序崩溃,getmemory中的malloc 不能返回动态内存,free()对str操作很危险.
5.char szstr[10];
  strcpy(szstr,"0123456789");
  产生什么结果?为什么?长度不一样,会造成非法的OS.
6.列举几种进程的同步机制,并比较其优缺点。
   原子操作
   信号量机制
   自旋锁
   管程,会合,分布式系统
7.进程之间通信的途径
共享存储系统
消息传递系统
管道:以文件系统为基础
8.进程死锁的原因:资源竞争及进程推进顺序非法.

9.死锁的4个必要条件:互斥、请求保持、不可剥夺、环路
10.死锁的处理
鸵鸟策略、预防策略、避免策略、检测与解除死锁
11.  操作系统中进程调度策略有哪几种?
FCFS(先来先服务),优先级,时间片轮转,多级反馈
12.类的静态成员和非静态成员有何区别?
类的静态成员每个类只有一个,非静态成员每个对象一个
13.纯虚函数如何定义?使用时应注意什么?
virtual void f()=0;是接口,子类必须要实现
14.数组和链表的区别
数组:数据顺序存储,固定大小
连表:数据可以随机存储,大小可动态改变
15.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
应用层
表示层
会话层
运输层
网络层
物理链路层
物理层
tcp /udp属于运输层
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好
udp: 不提供稳定的服务,包头小,开销小.
2.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;
有两种解法, 一种用算术算法, 一种用^(异或)
a = a + b;
b = a - b;
a = a - b;
or
a = a^b;// 只能对int,char..
b = a^b;
a = a^b;
or
a ^= b ^= a;
原创粉丝点击