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、每个线程都有自己的硬件寄存器和堆栈?
答、正确。
答、正确。
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、每个线程都有自己的硬件寄存器和堆栈?
答、正确。