1,简述进程通信的几种方式?
1)管道,是一种半双工通信方式,数据单向流动,只能用于具有亲缘关系的进程(如父子进程)间通信。
2)有名管道,半双工通讯方式,但允许无亲缘关系进程间通信。
3)信号量,是一个计数器,用来控制多进程对共享资源的访问。是一种锁机制,使进程有序的访问资源。
4)信号,用于通知接收进程某个事件已发生。
5)消息队列,是消息的链表,存放在内核中由消息标识符标识。克服了传递信息少,管道只能承载无格式字节流等缺点。
6)共享内存,由一个进程映射的一段内存,其他进程可以访问。是最快的IPC方式,往往配合其他通信方式。
7)socket,可以用于不同机器间的进程进行通信。
2,去除字符串中的重复字符
如果限制使用辅助空间,只能使用一两个辅助变量,则第一步将重复的元素置为“ ”,需要O(n^2)的复杂度。
for( i = 1; i < len; i++) {
for( j = 0; j < i; j++) {
if( str[ j ] == str[ i ] ) { str[ i ] = ‘ ‘; } } }
如何可以使用与问题复杂度无关的辅助数组,可以建立一个大小为256的数组,存放ASCII码表,在O(n)时间内就可以完成第一步。
接下来就是蛮力移动元素(每次记下从前往后的第一个空字符位置和再次出现非空字符的位置),填补留下的“ ”字符。
3,将字符串语句翻转