系统编程

1、系统编程中多线程要分清是同步问题还是互斥问题?
答、正确。


2、多线程访问共享变量(例如全局变量)肯定会发生同步和互斥问题?这里要通过假设线程的推进顺序,多做测试。
3、问epoll能监听的最大文件描述符个数?
答、与内存有关,1g内存约10万多个。


4、问putenv的作用?
答、添加环境变量。


5、问dup2的作用?
答、复制文件描述符。


6、WIFEXITED函数作用?
答、等待子进程结束,回收子进程的信息。


7、getpwnam函数作用?
答、获取用户登录相关信息。


8、getpwuid函数的作用?
答、getpwuid函数是通过用户的uid查找用户的passwd数据。


9、strtol函数的作用?
答、strtol函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36。


10、getopt函数的作用?
答、函数说明 getopt()用来分析命令行参数。


11、问optind变量作用?
答、optind: the index of the next element to be processed in the argv.  The system initializes it to 1. The caller can reset it to 1 to restart scanning of the same
 argv or scanning a new argument vector.
 
12、问optarg变量的作用?
答、返回选项指定的某个参数后面的字符串,例如-a 123;
optarg会返回123;


13、问execl有没有创建新进程?
答、没有。


14、问标准输入输出、错误文件描述符的作用?
答、之一是将进程和终端设备联系起来。


15、问ps aux 命令查看进程状态s的含义?
答、一个session leader。


16、问ps aux 命令查看进程状态R的含义?
答、正在运行,不受事件影响。


17、问ps aux 命令查看进程状态l的含义?
答、表示一个多线程进程。


18、atexit函数的作用?
答、注册终止函数(即main执行结束后调用的函数)


19、ioctl的作用?
答、控制i/o设备的通道。


20、cd命令长期驻在内存,ls命令存储在磁盘?
答、对。


21、问消息传递通信方式的本质?
答、类似cs通信,用系统调用打开连接。


22、问什么是共享存储区?
答、系统调用先划分一块物理存储区域,再讲这个区域与进程的虚地址空间进行连接。


23、问wait的作用?
答、①、使父进程管理子进程;②、使父进程和子进程同步执行。


24、问系统调用是什么?
答、程序。中断程序。


25、getcwd的作用?
答、获得程序运行的当前目录。


26、fstat?
答、由文件描述符获得文件状态(包括文件大小);


27、pread?
答、带偏移量地原子的从文件中读取数据。


28、问linux如何调试某个进程占用cpu?
答、gdb
attach 2907
info threads


thread 2
bt


detach();


或者使用pstack;


29、问stat函数使用头文件?
答、
#include <stdio.h>
      #include      <stdlib.h>    //exit()
      #include      <string.h>    //strerror()
      #include      <errno.h>     //errno
      #include      <sys/types.h> //stat()
      #include      <sys/stat.h>
  
30、问DIR 头文件?
答、#include<dirent.h>


31、dirent结构体?
答、struct dirent   
{   
  long d_ino; /* inode number 索引节点号 */  
     
    off_t d_off; /* offset to this dirent 在目录文件中的偏移 */  
     
    unsigned short d_reclen; /* length of this d_name 文件名长 */  
     
    unsigned char d_type; /* the type of d_name 文件类型 */  
     
    char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */  
}  


32、锁一般用于什么情况?
答、同任务的线程之间互斥访问资源。??


33、问man命令能不能查看链接、编译指令例如-lpthread?
答、可以。


34、问信号量的缺点?解决方法?
答、不知道谁先拿到信号。一个拿到以后,一般会继续拿到这个信号;设置两个信号量。


35、优先考虑用锁。


36、unlink,删除文件。


37、如何实现线程同步?
答、互斥锁加条件变量,条件变量可以使线程挂起。


38、top -H -p 18550
查看所有子线程。


39、问int 类型不损失精度如何转换为void*,一般int类型4字节,void*类型8字节。
答、pthread_creat(&tid,NULL,thread_func,(void *)(intptr_t)ptr);


40、linux线程特点?
答、轻量级、一个线程异常挂掉,会造成整个进程挂掉。


41、如何打印错误信息?
答、strerror(errno);
或perror("open:");




42、用户态和内核态,cpu对内存的处理方式稍有不同。


43、系统调用会影响程序运行效率,因为涉及内核态和用户态的切换。


44、为什么char buf[1024]申请多大内存空间会影响程序运行性能?
答、频繁申请内存会造成程序运行效率降低。


45、一般char buf[4096]要申请4096大小的空间。


46、O_APPEND可以解决原子操作。


47、O_EXCL,可以解决原子操作。


48、如何给已经打开的文件增加属性?
答、fcntl;


49、ioctl系统调用的特点?
答、更加注重设置底层硬件。


50、问什么是文件映射?
答、能将硬盘映射到进程的地址。


51、内存映射代码?
答、
void*addr=NULL;
size_t length=4096;
int prot=PROT_WRITE|PROT_READ;
int flags=MAP_SHARED;
int fd=open("a.tmp",O_RDWR);
off_t offset=0;


char *ptr=(char*)mmap(addr,length,prot,flags,fd,offset);


close(fd);
strcpy(ptr,"hello world");


munmap(ptr,length);
return 0;


52、问内存映射读文件和普通读文件效率哪个高?
答、内存映射。


53、问内核层缓存刷新api是什么?
答、fsync;


54、问pcb是什么?
答、内核控制进程。


55、问内存申请空间是什么含义?
答、由虚拟地址确定的空间。


56、问sighub信号如何触发?
答、关闭终端。


57、问abort()函数的作用?
答、给自己发送一个SIGABRT;


58、问除/0操作造成程序退出的原因?
答、程序自己给自己发送浮点数异常信号。


59、问c++异常机制是怎么实现的?
答、通过信号捕获。


60、问什么是为进程设置信号?
答、内核在进程的pcb的信号集中写入信号信息。


61、问SIGFPE、SIGINT真实的值含义?
答、表示信号集上该信号对应的位数。


62、问如何为信号集设置信号?
答、sigset_t sigset;//类似一个整型变量
sigemptyset(&sigset);
sigfillset(&sigset);//理解成将整型变量所有位变成1
sigaddset(&sigset,SIGUSR1);//理解成左移操作。


63、删除信号、添加信号操作?
答、sig_set |=1<<SIGUSR1;
sig_set &=~(1<<SIGUSR1);// 在一个整数中,删除信号。


64、如何判断信号集是否有某种信号?
答、sigismember(&sigset,SIGUSR1);


65、什么是不可靠信号?
答、信号接收多次,只处理一次。


66、问什么是中断系统调用?
答、如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。


67、SIGCHLD信号时不可靠的,如何正确使用wait?
答、while(1)
{
wait(NULL);
}


68、signal、kill是c标准定义的接口函数?
答、正确。


69、sigaction、sigqueue是操作系统提供的系统调用?
答、正确。


70、signal,内部通过调用sigaction实现,默认具有SA_RESTART苏醒。


71、进程间通信匿名管道原理?
答、内核中创建一块内存用来进行通信。


72、所有进程内核地址空间是一样的,共同映射到同一块内存。


73、cd、pwd是内建命令,linux上无法用exec、popen成功执行。


74、socketpair与匿名管道类似,但是是全双工的。


75、socketpair是一种常用的全双工通信技术。


76、管道、socketpair适合于小数据量通信?
答、正确。涉及频繁的内核态和用户态。


77、大数据量通信使用共享内存?
答、正确。


78、多进程实现屏幕共享。ffmpeg实现屏幕共享。


79、ffmpeg打开摄像头。


80、进程间通信能不能加锁?
答、能。pthread_mutex 锁属性要设置。锁不适合进程间通信。


81、windows 平台适合多线程不适合多进程。linux 平台适合多进程不适合多线程。


82、线程退出会造成整个进程退出。


83、重复加锁会不会导致死锁?
答、会。


84、问select函数的作用?
答、检查文件描述符集合中有没有响应的文件描述符,挑选有数据的fd。


85、select函数的返回值表示的含义?
答、表示有多少文件有消息。


86、epoll函数是线程安全的。


87、epoll内部文件描述符应该是非阻塞的。


88、如何保证在文件中写入内容具有原子性?
答、记录锁(只对部分记录上锁)。不是文件锁(对整个文件上锁);


89、多线程编程,要设置信号屏蔽,防止出现一个线程挂掉,整个进程崩溃。


90、生产者、消费者模型一定要有锁和条件变量或者信号量。


91、信号量是可靠信号还是不可靠信号?
答、不可靠。接收到多个信号量,只会处理一次信号。


92、问监听的事件本质是什么?
答、文件描述符所代表的资源的变化情况。


93、问epolloneshot的作用?
答、相当于事件的disable。


94、问close(fd),epoll集合中该文件描述符会被删除吗?
答、不会再被监听,注意EONESHOT修饰的文件描述符,可以再重启。


95、写服务器必须要有定时器。


96、问EPOOLET标志概念在什么情况下产生的?
答、客户端发送的数据较多少。服务器端无法一次全部将数据读完。


97、问主线程和辅线程的使用技巧?
答、主线程:接收用户的输入;辅线程:处理长时间的操作,例如读写文件、访问网络。


98、多线程和多进程实现了程序中不同代码段的异步执行。


99、多线程与多进程相比的优势是什么?
答、多个线程共享进程的地址空间,而多进程实现数据共享必须通过各种通信方式。cpu在一个进程内不同线程之间的切换
与不同进程相比所花时间更少。


100、为什么服务器程序要使用多线程?
答、当一个线程等待费时的网络读或写操作时,该线程被阻塞,而程序中的其他线程可以独立地进行。


101、线程比进程开销少体现在哪几个方面?
答、执行时间和存储空间。


102、线程同步机制会降低多线程的效率。如何避免?
答、通过算法。


103、调试多线程程序的难度在哪?
答、①、调试操作会改变线程的执行效率,造成问题不再出现。②、很难跟踪内存错误。


104、问最适合使用线程的应用场景?
答、①、计算密集型应用;②、I/O密集型应用。


105、条件变量的作用?
答、使用条件变量来通知共享数据的状态变化。


106、问线程是怎么被cpu执行的?
答、通过核实体。


107、问fork多线程进程会发生什么?
答、只有那个调用fork的线程在子进程内存在。


108、问exec函数对多线程程序的影响?
答、exec函数的功能是消除当前程序的环境并且用一个新程序代替它。对exec的调用,
将很快地终止进程内除调用exec的线程外的所有线程。它们不执行清除处理器或线程
私有数据。




109、每个线程都有自己的硬件寄存器和堆栈?
答、正确。



































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值