1.检查网络连通性的应用程序是( )
- A、 PING
- B、 ARP
- C、 NFS
- D、 DNS
ping也属于一个通信协议,是TCP/IP协议的一部分。
利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
2.下面哪个文件定义了网络服务的端口?( )
- A、 /etc/netport
- B、 /etc/services
- C、 /etc/server
- D、 /etc/netconf
3.新建一个管理员用户admin,需要使用的参数()
- A、 useradd -u 0 -o admin
- B、 useradd -g -0 admin
- C、 useradd -p -d admin
- D、 useradd -e -f admin
-g<群组> :指定用户所属的群组。
-u<uid> :指定用户ID。
-d<登入目录> :指定用户登入时的起始目录。
-e<有效期限> :指定帐号的有效期限。缺省表示永久有效。
-f<缓冲天数> :指定在密码过期后多少天即关闭该帐号。
-r :建立系统帐号。
-p:创建密码
因为系统用户的用户号为0,故指定用户号为0
如果同时有-o选项,则可以重复使用其他用户的标识号;因为系统本身存在用户号为0的系统用户,故应该使用该参数。
4.写出linux命令: 在当前目录及其子目录所有的.cpp文件中查找字符串"example", 不区分大小写?
- A、 grep -i example ./*.cpp
- B、 grep -v example ./*.cpp
- C、 grep -i -v example ./*.cpp
- D、 grep -i -r example ./*.cpp
-i 或 --ignore-case : 忽略字符大小写的差别。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-r 或 --recursive : 递归查找当前目录及其所有子目录。
5.关于linux的I/O复用接口select和epoll,下列说法错误的是( )
- A、 select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历
- B、 select的最大连接数为FD_SETSIZE
- C、 select较适合于有大量并发连接,且活跃链接较多的场景
- D、 epoll较适用于有大量并发连接,但活跃连接不多的场景
select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的缺点,因为现在的服务器并发量远远不止1024。即使能重新编译内核改变FD_SETSIZE的值,但这并不能提高select的性能。 每次调用select都会线性扫描所有描述符的状态,在select结束后,用户也要线性扫描fd_set数组才知道哪些描述符准备就绪,等于说每次调用复杂度都是O(n)的,在并发量大的情况下,每次扫描都是相当耗时的,很有可能有未处理的连接等待超时。每次调用select都要在用户空间和内核空间里进行内存复制fd描述符等信息。
poll使用pollfd结构来存储fd,突破了select中描述符数目的限制。 与select的后两点类似,poll仍然需要将pollfd数拷贝到内核空间,之后依次扫描fd的状态,整体复杂度依然是O(n)的,在并发量大的情况下服务器性能会快速下降。
epoll维护的描述符数目不受到限制,而且性能不会随着描述符数目的增加而下降。服务器的特点是经常维护着大量连接,但其中某一时刻读写的操作符数量却不多。epoll先通过epoll_ctl注册一个描述符到内核中,并一直维护着而不像poll每次操作都将所有要监控的描述符传递给内核;在描述符读写就绪时,通过回调函数将自己加入就绪队列中,之后epoll_wait返回该就绪队列。也就是说,epoll基本不做无用的操作,时间复杂度仅与活跃的客户端数有关,而不会随着描述符数目的增加而下降。*epoll在传递内核与用户空间的消息时使用了内存共享*,而不是内存拷贝,这也使得epoll的效率比poll和select高
6.栈的特点是先进后出。栈底至栈顶依次存放元素A、B、C、D, 在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是:( )
- A、 DCBEA
- B、 DEBCA
- C、 DBCEA
- D、 DCAEB
7.HashMap的数据结构是怎样的?
- A、 数组
- B、 链表
- C、 数组+链表
- D、 二叉树
那么哈希表,是既能具备数组的快速查询的优点,又能融合链表方便快捷的增加删除元素的优势。
所谓的hash,简单的说就是散列,即将输入的数据通过hash函数得到一个key值,输入的数据存储到数组中下标的key值的数组单元中去。
8.下列对函数double add(int a , int b)进行重载,错误的是
- A、 int add(int a ,int b ,int c)
- B、 int add(double a , double b)
- C、 double add(double a , double b)
- D、 int add(int a , int b)
重载: 函数名相同 参数不同(个数或类型或顺序) 返回值类型可以相同也可以不同
9.如果有一个类是 myClass , 关于下面代码正确描述的是:
myClass::~myClass(){
delete this;
this = NULL;
}
- A、 正确,我们避免了内存泄漏
- B、 它会导致栈溢出
- C、 无法编译通过
- D、 这是不正确的,它没有释放任何成员变量
编译不通过主要是语句 this=NULL; 因为类的构造函数中,this 指针的形式为Myclass *const this; 它是一个常量指针,指针的指向不能修改。
10.实现auto_ptr