本科应届毕业生笔试面试分享

(一)笔试题:
int a = 1 ;
a = a << 32 ;
求a的值??

对于d << k. 编译期一般会扩展为d << (k % word ), 其中word是计算机字的大小,
注意不一定是硬件, 因为在64位的CPU安装32的系统, word一样是32。
所以,这里的a<<32,被扩展为a<<(32%32),也就成了a<<0,左移0位,自然是保持原样了,
所以a的值仍然是1 。

再看下面的这种情况:
int a = 1 ;
a = a << 31 ;
a = a << 1 ;

第一步之后a的最高位为1,后面31位都是0
第二步之后a的所有位左移变为全0
a的值为0

(二)笔试题:
当前文件的路径(包含名字)<源文件的标题>: char* file = FILE ;
当前文件的总行数(目前执行位置的行): int line = LINE ;

(三)笔试题:
C语言库函数中判断不可打印字符的函数:
isprint (char c);

(四)笔试题:
填空题,快速排序,以二分法来定位枢轴(支点),理解快速排序思想即可。

(五)笔试题:
两个书比较大小,不用任何条件比较:
int a = 5 , b = 6 ;

设 a = x + y , b = x - y 。int 型求取绝对值为abs()
int c = (a+b+abs(a-b))/2 ;
有时也会以宏定义形式考查。
(六)int a[3][4] ;哪个不能表示a[1][1]?
(&a[0][0] + 5) ,② ((a + 1) + 1) ,③ (&a[1] + 1) ,④ *(&a[0][0] + 4)

①③不能表示

(七)4个人(A、B、C、D)乘船过河,分别需用1、2、5、10分钟,一次过河船上最多两人,要求在17分钟内所有到河对岸。
怎么过河??

ABCD AB————————>AB 2分钟 AB
ACD A<—————————A 1分钟 B
ACD CD————————>CD 10分钟 BCD
AB B<—————————B 2分钟 CD
AB AB—————————>AB 2分钟 ABCD

(八)计算a^b<<2
如果a = 1 ,b = 2 ,则a^b<<2 = 9
先进行位“左移”运算,然后逻辑“异或”运算。

(九)什么是僵尸进程?什么是孤儿进程?它们会造成什么影响?如何防止僵尸进程?
僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
注:僵尸进程将会导致资源浪费,而孤儿则不会。

子进程持续10秒钟的僵尸状态(EXIT_ZOMBIE)

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
   pid_t pid;
   pid = fork();
   if(pid < 0)
       printf("error occurred!\n");
   else if(pid == 0) {
       printf("Hi father! I'm a ZOMBIE\n");
       exit(0);      //(1)
   }
   else {
       sleep(10);
       wait(NULL);   //(2)
   }
}

(1) 向父进程发送SIGCHILD信号
(2) 父进程处理SIGCHILD信号
执行exit()时根据其父进程的状态决定自己的状态:
如果父进程已经退出(没有wait),则该子进程将会成为孤儿进程过继给init进程
如果其父进程还没有退出,也没有wait(),那么该进程将向父进程发送SIGCHILD信号,进入僵尸状态等待父进程为其收尸。如果父进程一直没有执行wait(),那么该子进程将会持续处于僵尸状态。

子进程将成为孤儿进程

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
   pid_t pid;
   pid = fork();
   if(pid < 0)
       printf("error occurred!\n");
   else if(pid == 0) {
       sleep(6);
       printf("I'm a orphan\n");
       exit(0);
   }
   else {
       sleep(1);
       printf("Children Bye!\n");
   }
}
# ./a.out
Children Bye!
# I'm a orphan
(回车后将会进入#)
#

二、影响:
僵尸进程会占用系统资源,如果很多,则会严重影响服务器的性能
孤儿进程不会占用系统资源
处理流程:
只要父进程不等wait(sys/wait.h)子进程,子进程都将成为孤魂野鬼zombie(zombie),unix中默认父进程总是想看子进程死后的状态
if 父进程比子进程先退出
子进程将被init(id = 1)收养,最后的结果是zombie子进程彻底再见,系统资源释放
else
{
子进程的zombie将一直存在,系统资源占用…
if 父进程dead
子进程将被init(id = 1)收养,最后的结果是zombie子进程彻底再见,系统资源释放
else 类似的子进程zombie越来越多,系统就等死了!!!
}
三、如何防止僵尸进程
首先明白如何产生僵尸进程:
1、子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它
2、父进程没有调用wait()或waitpid()函数来等待子进程的结束
第一种方法: 捕捉SIGCHLD信号,并在信号处理函数里面调用wait函数
转贴Richard Steven的Unix Network Programming代码

int main(int argc, char **argv)
{
               ...
       Signal(SIGCHLD, sig_chld);
               for(;
               }
             ...
}
void sig_chld(int signo)
{
       pid_t        pid;
       int         stat;
        while ( (pid = waitpid(-1, &stat, WNOHANG)) >; 0)
               printf("child %d terminated\n", pid);
       return;
}

第二种方法:两次fork():转载
在《Unix 环境高级编程》里关于这个在8.6节有非常清楚的说明。
回忆一下8 . 5节中有关僵死进程的讨论。如果一个进程要fork一个子进程,但不要求它等待子进程终止,也不希望子进程处于僵死状态直到父进程终止,实现这一要求的诀窍是调用fork两次。程序8 - 5实现了这一点。在第二个子进程中调用sleep以保证在打印父进程ID时第一个子进程已终止。在fork之后,父、子进程都可继续执行——我们无法预知哪一个会先执行。如果不使第二个子进程睡眠,则
在fork之后,它可能比其父进程先执行,于是它打印的父进程ID将是创建它的父进程,而不是init进程(进程ID1)。

#include        <sys/types.h>
#include        <sys/wait.h>
#include        "ourhdr.h"
int main(void)
{
       pid_t        pid;
        if ( (pid = fork()) < 0)
               err_sys("fork error");
       else if (pid == 0) {               
               if ( (pid = fork()) < 0)
                       err_sys("fork error");
               else if (pid > 0)
                       exit(0);       
                sleep(2);
               printf("second child, parent pid = %d\n", getppid());
               exit(0);
       }
        if (waitpid(pid, NULL, 0) != pid)       
               err_sys("waitpid error");
        exit(0);
}
//avoid zombie process by forking twice

(十)试题题
桶排序和计数排序(时间复杂度为O(n))
请上百度百科或者谷歌查询了解更多。

(十一)面试题
虚拟内存

(十二)面向对象和面向过程的区别?

(十三)归并排序、二路排序 二路归并排序(腾讯笔试)

(十四)IP地址与子网掩码、子网划分

(十五)进程与线程、多进程间通讯、多线程 以及枷锁解锁和信号量

(十六)笔试题
CRC(循环校验码)以编程题形式出现

(十七)笔试题与面试题
Sendmessage 和 postmessage的区别
分为一般情况、同线程内、不同线程内三方面。

(十八)堆和栈的区别
从数据结构和内存两方面说明

(十九)多次笔试和面试题
TCP和UDP的区别

(二十)注意int 转换为字符(+ ’0’)和字符转换为int(- ’0’)

(二十一)二叉树的遍历

(二十二)STL相关知识

(二十三)多继承与单继承时的虚表问题,还有虚继承时的类对象空间大小

(二十四)面试题
MFC单文档 doc、view、frame的关系

(二十五)笔试题

class A 
{ 
  int m_count ; 
  public:  
       A() {} 
       virtual void f() {}
}; 

class B : public A 
{
int m_count ;
}; 

void main() 
{
int size = sizeof(A)+sizeof(B); cout<<size<<endl ;
} 
// 8 + 4 + 8 = 20

(二十六)OSI七层结构 与TCP/IP四(五)层结构

OSI七层模型
OSI中的层 功能 TCP/IP协议族
应用层: 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层: 数据格式化,代码转换,数据加密 没有协议
会话层: 解除或建立与别的接点的联系 没有协议
传输层: 提供端对端的接口 TCP,UDP
网络层: 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层: 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层: 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
(2)TCP/IP五层模型的协议
应用层
传输层
网络层
数据链路层
物理层

(二十七)三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时 ,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

(二十八)四次挥手(淘米面试)连接终止协议(四次挥手)

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
(二十九)笔试题(淘米)
一个男人带了两个男孩,一个女人带了两个女孩,猎人带了一只狗。现在他们都在河岸边,要通过一条船到达河对岸。男人不在,女人会打男孩;女人不在,男人会打女孩;孩子在一起不会打架;猎人不在时,狗会咬人。
该怎么过河??
男,男孩1,男孩2
女,女孩1,女孩2 ———————————>猎人,狗 猎人,狗
——————————————————————————————————————
男,男孩1,男孩2
女,女孩1,女孩2 <———————————猎人 狗
猎人
——————————————————————————————————————
男,男孩2
女,女孩1,女孩2 ———————————>猎人,男孩1 猎人,狗,男孩1
——————————————————————————————————————
男,男孩2
女,女孩1,女孩2 <———————————猎人,狗 男孩1
猎人,狗
——————————————————————————————————————
女,女孩1,女孩2 ———————————>男,男孩2 男人,男孩1,男孩2
猎人,狗
——————————————————————————————————————

女,女孩1,女孩2 <———————————男 男孩1,男孩2
猎人,狗
——————————————————————————————————————
女孩1,女孩2 ————————————>男,女 男,女
猎人,狗 男孩1,男孩2
——————————————————————————————————————

女孩1,女孩2 <————————————女 男,男孩1,男孩2
猎人,狗
——————————————————————————————————————
女 男,男孩1,男孩2
女孩1,女孩2 ————————————>猎人,狗 猎人,狗
——————————————————————————————————————
男,女 男孩1,男孩2
女孩1,女孩2 <————————————男 猎人,狗
——————————————————————————————————————
男孩1,男孩2
女孩1,女孩2 ————————————>男,女 猎人,狗
男,女
——————————————————————————————————————
女 男孩1,男孩2
女孩1,女孩2 <————————————女 猎人,狗

—————————————————————————————————————— 男,男孩1,男孩2
女孩2 ————————————>女,女孩1 猎人,狗
女,女孩1
——————————————————————————————————————

                                                 男,男孩1,男孩2

女孩2 <————————————猎人,狗
猎人,狗 女,女孩1
——————————————————————————————————————
男,男孩1,男孩2
狗 ————————————>猎人,女孩2 猎人,女孩2
女,女孩1
——————————————————————————————————————
男,男孩1,男孩2
狗 ,猎人 <————————————猎人
女,女孩1,女孩2
——————————————————————————————————————
男,男孩1,男孩2
————————————>猎人,狗 女,女孩1,女孩2
女,女孩1,女孩2
——————————————————————————————————————
(三十)在一天中,钟表的时针与分针重合的次数(淘米)
假设时针的角速度是ω(ω=π/6每小时),则分针的角速度为12ω,秒针的角速度为720ω。 分针与时针再次重合的时间为t,则有12ωt-ωt=2πn

时 分 秒
1 60 3600
30 360 21600
w 12w 720w
π/6 2π 120π

0≤t≤24

12wt-wt=2π*n(n=0,1,2,…)=12w*n
11wt=12w*n
11t=12n
t=12n/11(n=0,1,2,…)
t=12*0=0 ,n=0
t=12*1/11=1+1/11 ,n=1
t=12*2/11 ,n=2
t=12*3/11 ,n=3
….. …..
t=12*10/11 ,n=10
t=12*11/11=12 ,n=11
t=12*12/11 ,n=12
….. …..
t=12*22/11=24 ,n=22(每天时针分针22次重合。)

由上可知时针和分针一天中可重合22次;由于0时至12时和12时至24时是对称的,所以只需考虑0时至12时时针、分针重合时,秒针是否也重合,就能得出结果。

t=12/11小时,换算成时分秒为1小时5分27.3秒,显然秒针不与时针分针重合,同样可以算出其它10次分针与时针重合时秒针都不能与它们重合。只有在正12点和0点时才会重合。 所以一天中只有两次三针重合,分别是0时,12时。

(三十一)模态对话框和非模态对话框的区别(常问)

(三十二)覆盖和隐藏(常问)

(三十三)指针和引用的区别
①指针可以不用初始化;引用必须初始化。

②指针可以指向空(NULL);引用不能为空值。

③指针的指向可以改变;引用一旦初始化就不能改变。

④指针占4个字节;引用占的空间大小为其定义(指向)的数据类型的大小。

⑤引用的改变可以直接改变目标对象的值;指针通过间接引用(*p)的改变来改变其所指向的对象的值。

⑥引用的值不为空,所以在执行时可不必判断其合法性;而指针需要判断其合法性。

(三十四)简历上出现的东西像技能一定要慎重,项目经验要很熟悉,逐条逐句。。
(三十五)面试时会问到“工作压力”和“考研”相关问题。

猜你喜欢

转载自blog.csdn.net/mike_modern/article/details/78076087