Linux,数据库,C++常见面试题

运维的一些小题目

在/tmp/目录下创建test.txt文件,内容为: Hello,World! ,用一个命令写出来: echo “Hello,World!”

/tmp/test.txt

用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net:
末行: G 首行: gg 行首: ^ 行末: $ 光标行下一行插入: o 复制5行:5yy 删除10行:10dd
替换::%s/jingfeng/jfedu.net/g

查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。
find / -name *txt -mtime +30 -type f -size +20k -perm a=x -exec cp {}
/data/backup/ ;

当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。 chown
abc:root test.txt

每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:date +%Y%m%d) echo “mkdir
/tmp/date +%Y%m%d” >> /etc/rc.d/rc.local

将普通用户test加入root组的命令是? usermod -G root test

ps: -aux, - ef:显示所有进程的相关信息,-ef是按照bsd版本的格式显示出来

top: top -p:显示指定的进程号的进程信息 top -S:以累积模式显示程序运行的时间

TCP为什要进行三次握手

如果采用两次的话,会出现下面这种情况。比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。传完东西后,断开。
结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。但是实际上此时A没有数据要传输,造成服务器事件白白的被浪费了。

TRUNCATE,DELETE,DROP比较:

TRUNCATE TABLE:删除内容、释放空间但不删除定义。 DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。
速度: drop> truncate > delete。

长连接和短连接

连接->传输数据->关闭连接,短连接是指SOCKET连接后,发送接收完数据后马上断开连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。这也是HTTP协议无状态的原因之一。 连接->传输数据->保持连接 ->
传输数据->…………->直到一方关闭连接,多是客户端关闭连接。长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
什么时候用长连接,短连接:
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也是对资源的浪费。
比如说qq的维持在线显示状态使用的好像就是长连接,或者是网络游戏这样的,smtp,pop3,telnet这种就可以认为是长连接。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。比如百度的搜索服务,搜索完成之后建立的连接就会断开。

事件与消息的区别

事件是一个动作——用户触发的动作,消息是一个信息——传递给系统的信息。 事件:只能由用户的操作产生
消息:由操作系统产生。由用户触发的事件转换而来。由另一个消息产生。

Struct与Union之间的区别

结构体每个属性都可以有默认值,union只能有一个有默认值

Linux中进程调度方法

SCHED_OTHER: 分时调度方法
SCHED_FIFO: 先来先服务调度算法
SCHED_RR: 实时调度策略,采用的是时间片轮转

什么叫做MVC

  1. 模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  2. Model(模型)表示应用程序核心(比如数据库记录列表).View(视图)显示数据(数据库记录).Controller(控制器)处理输入(写入数据库记录)

  3. MVC分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。MVC分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

static关键字在c++作用

文件中作用:作用域
函数中作用:长生存期,保持值
类中作用:类变量或者类函数,没有this指针,变量需要在外部初始化,否则链接错误,static可以用作callback 默认初始化值为0

IPCS命令

unix/linux下的共享内存、信号量、队列信息管理
在unix/linux下,经常有因为共享内存、信号量,队列等共享信息没有干净地清楚而引起一些问题。 查看共享信息的内存的命令是ipcs [-m|-s|-q]。

进程和线程的简单比较

进程是分配资源的基本单位(CPU、内存等),有独立的地址空间。线程是进程中的一个实体,共享进程的地址空间,是轻量级的进程,是CPU调度和分配的基本单位,但是各个线程拥有自己的栈空间。
(1)单线程遇到阻塞,会卡死,影响交互;
(2)发挥多核CPU的计算能力;
(3)简化程序结构,使程序便于维护;
(4)与进程相比,线程的创建和切换开销更小

Linux下进程通信的几种方式

1)管道:具有亲缘关系的进程通信,命名管道允许无亲缘关系的进程通信,shell命令中的”|”就是一种管道通信,一个命令的输出作为另外一个进程的输入;
(2)信号:程序运行过程中可以随时被各种信号打断,从而去处理信号,Linux下面的kill命令就是通过信号的方式和其它进程通信,比如kill -l可以查看信号的分类,kill -9强制杀死对应进程;
(3)消息队列:有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点;
(4)共享内存:非常快的进程通信方式,和信号量结合起来,达到进程间的同步与互斥;
(5)socket:套接字可以让不同主机之间的进程进行通信,肯定还会讲到,很重要。

线程之间同步的方式

  • 因为线程之间共享内存,所以线程之间需要进行同步。

  • 同步的方式有互斥锁、条件变量、读写锁。

    • 互斥锁用于保护临界区,信号量同理(注意和信号之间的区别);

    • 条件变量用于发送信号和等待信号;

    • 读写锁是在互斥锁的基础上做的改进,又被成为共享-独占,非常适合于读数据的频率远大于写数据的频率的应用。

数据库常用的优化技巧

(1)索引:优点是读速度快;带来的缺点是体积变大、插入性能变差(需要创建索引);
(2)缓存配置(缓存查询语句,缓存查询数据);
(3)分库分表,分表又分为垂直和水平拆分;
(4)子查询优化。

epoll的ET模式与LT模式

  1. 对LT模式。epoll_wait检测到其上有事件发生并且将此事件通知应用的时候,应用程序可以不立即处理,那么下一次调用epoll_wait的时候,epoll_wait还是会将这个时间通知上层应用。直到这个时间被处理。
  2. 对LT模式。当epoll_wait第一次通知上层这个事件的时候,应用程序必须立即处理,因为后续epoll_wait不会再向上层通知这个事件。epoll再很大程度上降低了同一个事件被多次触发的概率
  3. EPOOL如果触发一个线程开始读取socket上的一个事件的时候,在数据处理的过程中这个socket可能又有新的数据到来,epoll可能触发另一个线程来处理,如果期望一个socket在任意时刻只能被一个线程处理的话,那么可以是使用epoll的EPOLLONESHOT来实现。当然了,当一个线程处理完成了注册了EPOLLONESHOT的socket上的时间之后,需要立即将EPOLLONESHOT重置,这样才能让socket的后续事件得到处理。

例如下面这样

void reset(int epollfd, int fd){
    epoll_event event;
    event.data.fd = fd;
    event.events = EPOLLIN | EPOLLET | EPOLLONESHUT;
    epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, &event);
}

常见的数据库对象

表:基本的数据存储集合,由行和列组成。
视图:从表中抽出的逻辑上相关的数据集合。
序列:提供有规律的数值。
索引:提高查询的效率
同义词 :给对象起别名

数据库约束

  • NOT NULL,UNIQUE ,PRIMARY KEY,FOREIGN KEY,CHECK
  • 列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。
  • 列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。
  • 非空(not null) 约束只能定义在列上

例:添加一个外键约束:

ALTER TABLE     employees
ADD CONSTRAINT  emp_manager_fk 
FOREIGN KEY(manager_id) 
REFERENCES employees(employee_id);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值