思维导图
面试题答问
1、IO多路复用的引入目的和原理
目的:在有操作系统时,可以用多线程和进程完成任务并发执行,没有操作系统的情况下可以使用IO多路复用技术来进行任务并发。
原理:将多个阻塞任务的文件描述符统一放到一个检查容器中,然后用一个阻塞函数进行管理,如果容器中有一个或这多个文件描述符对应的事件产生,就会接触阻塞,进而去执行相应的函数
2、实现IO多路复用的方式和区别
select:连接数为1024
pool:连接数无限制
epol:连接数无限制
3、数据库操作的函数有哪些
4、什么是僵尸进程
子进程结束,父进程没有收回
5、什么是孤儿进程
子进程没有退出,但父进程已经结束,孤儿进程会被一号进程收养
6、什么是IO
程序与外部设备进行信息交互的过程
7、IO的分类
文件IO和标准IO
8、文件IO的函数是提供,标准IO依赖的函数谁提供
文件IO由linux内核提供,标准 IO由C语言库提供
9、消息列队和共享内存的区别
消息列队:有同步机制,一定是先写再读,如果是先读就会阻塞
共享内存:没有任何的同步机制
10、什么是野指针,以及野指针的产生情况
指向非法内存的指针
指针未初始化、指针释放后未置空、指针超出作用域
数据库表格删除
int do_delete(sqlite3 *ppDb)
{
char aql[128]="";//表名
char bql[128]="";//x姓名
printf("请输入删除表名\n");
scanf("%s",aql);
printf("请输入要删除的姓名\n");
scanf("%s",bql);
getchar();
char sql[128]="";//存储sql指令
sprintf(sql,"delete from \"%s\" where name==\"%s\"",aql,bql);
char *errmsg=NULL;
if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("exec error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("删除成功\n");
return 0;
}
效果图
数据库表格数据修改
int do_update(sqlite3 *ppDb)
{
char aql[128]="";
int sco;
printf("输入要修改的学生姓名\n");
scanf("%s",aql);
printf("输入修改分数\n");
scanf("%d",&sco);
getchar();
char sql[128]="";
sprintf(sql,"update Stu set score=%d where name=\"%s\";",sco,aql);
char *errmsg=NULL;
if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("exec error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("修改成功\n");
}
效果图