武汉光迅笔试题
6.longtotal;/* current total */
7.intsign;/* if ''-'', then negative, otherwise positive */
8.
9./* skip whitespace */
10.//char ,signed char、unsigned char类型的数据具有相同的特性然而当你把一个单字节的数赋给一个整型数时,便会看到它们在符号扩展上的差异。
}
}
void main()
{
int i,a[10]={3, 7, 9, 11, 0, 6, 7, 5, 4, 2};
cout << "The original array:\n";
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
inv(a, 10);
cout<<"The array has benn inverted:\n";
16.sign = c;/* save sign indication */
17.if(c =='-'|| c =='+') //如果第一个非空格字符为符号
18.c = (int)(unsignedchar)*nptr++;/* skip sign *///跳过符号,将符号后的那个字符给c
19.
20.total = 0; //结果置为0
共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。
六.套接字(socket)
socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。一个套接口可以看做是进程间通信的端点(endpoint),每个套接口的名字是唯一的;其他进程可以访问,连接和进行数据通信。
11.//ascii码当赋给整形数时要转为unsigned char再转为int
12.while( isspace((int)(unsignedchar)*nptr) ) //2.去掉首部的空格
13.++nptr;
14.
15.c = (int)(unsignedchar)*nptr++; //取得第一个非空格的字符
#include <iostream.h>
方法重写:字符串倒序数组指针重写
void inv(int *x,int n)
{
for (int i = 0; i < n / 2; ++i)
{
int temp = *(x + i);
*(x + i) = *(x + n - 1 - i);
*(x + n - 1 - i) = temp;
5.运算符重载与方法重写(覆盖)?
运算符重载:ostream & operator<<(ostream &os,const person &p)const {os<<p.id<<;return os;} >>代码如下:istream & operator>> (istream &ism, person &p){ism>>p.id>>; return ism;}
(3)参数相同;
(4)基类函数必须有virtual关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
值得注意的是,只有在管道有读端时,往管道中写数据才有意义。否则,向管道写数据的进程会接收到内核发出来的SIGPIPE信号;应用程序可以自定义该信号处理函数,或者直接忽略该信号。
二.信号量(semophore)
信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))
8.计算机程序,进程与线程的区别与联系?
1、进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
6.自我介绍
您好我叫韩玉龙(慢),2012年06毕业于、、学校、、专业。我的特长、、、,我应聘的岗位是C++工程师。(此时要谈定,看面试官的额头)
7.一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
网络层:网际协议(IP)
传输层:如传输控制协议(transparet control prototal ,TCP)、用户数据报协议(user datagramprotocol,UDP)
应用层:文件传输协议(FTP)、网络远程访问协议(Telnet)简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
答案:假设戴黑帽子的是A、B、C三人,以A的角度思考,A看到B、C戴黑帽子,A认为:第一次关灯时B看到C戴黑帽子,已满足“黑的至少有一顶”,所以B不能确定自己是否黑帽子,不会拍手,并且如果只有C戴黑帽子,第一次关灯时C就会拍手。但第一次关灯时C没拍手,这代表C也在等别人拍手,B就知道自己也戴了黑帽子,第二次关灯时B、C就都会拍手。但第二次关灯时也没拍手,这代表B、C也各自看到2顶黑帽子,A由此推出自己带了黑帽子。B、C逻辑推理也是如此,其他戴白帽子的人都是如此推理,在第三次关灯时会等着A、B、C拍手,于是第三次关灯时有且仅有三个人会拍手。
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行
2、进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
四.消息队列(Message Queue)
消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。
消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。
五.共享内存(shared memory)
34)数据的读写操作:一个进程向管道中写数据,所写的数据添加在管道缓冲区的尾部;另一个进程在管道中缓冲区的头部读数据。
(二)有名管道
有名管道也是半双工的,不过它允许没有亲缘关系的进程间进行通信。具体点说就是,有名管道提供了一个路径名与之进行关联,以FIFO(先进先出)的形式存在于文件系统中。这样即使是不相干的进程也可以通过FIFO相互通信,只要他们能访问已经提供的路径。
三.信号(Signal)
信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制—进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。
内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+\等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。
21.
22.while(isdigit(c)) { //3.如果碰到非法字符则停止
23.total = 10 * total + (c -'0');/* accumulate digit */
24.c = (int)(unsignedchar)*nptr++;/* get next char */
25.}
1.Linux进程间的通信有哪几种?请简要概述
一.管道(pipe)
管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等。
(一)无名管道,它具有几个特点:
1)管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;