十月份到现在参加了4个公司的笔试和面试,后天打算把三方协议签了,找工作就暂时尘埃落定了。开始专心复习之前,把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想,非原题目。
我面试的这4家IT公司,对于三点都非常重视。一个是基础知识,一个是运用知识,思考的能力,一个组织表达能力。按这三种分类记录下笔试和面试题目。
[基础知识]
考察基础知识,在笔试题目最常见,占比例也最大。
- 有n个节点的二叉树,其中有m个节点有两个孩子,问这棵树有多少颗叶子节点。
这题目其实是数据结构上的原题,不要被n迷惑了。
某题目:问下面的程序需要几次才能跳出循环?
unsigned int a =1;
int b = 0;
while ( a+b >= 0){
b--;
}
开始以为a会转换为int类型,这样循环只需要2次就结束了。测试程序后发现这是个死循环。今天看《The C Programming Language》,赫然发现”转换”一节中,提到了”整数提升”一词。规定:在一个表达式中,如果原始类型的所有值都可以用int类型表示,则其值将被转换为int类型,否则将被转换为unsigned int类型。
我感觉很多时候我花了大把时间来搞明白,甚至以为…
Linux下进程间通信主要有管道,消息队列,信号量,共享内存,套接口。这里主要说命名管道的一个应用:使用命名管道实现进程间Server/Client机制的通信.
之所以去接触它,是因为实验室的项目中要求可信组和加密组可以进行通信。两者都在用户层,加密组向可信组发送请求,可信组返回响应。比如加密小组发送请求密钥信息,可信组返回所请求的密钥。由于传输的信息相对来说比较大,而且这两个程序逻辑上并不相关,所以在几种通信方式中我们选择了命名管道。
命名管道其实是FIFO文件。在linux中终端下创建一个管道,用mkfifo命令:mkfifo fifoname;或者mknod命令:mknod fifo…
fork函数在linux中非常重要,因为进程大多是通过它来创建的,比如linux系统在启动时首先创建了进程0,之后的很多进程借助do_fork得到创建.这两天在看匿名管道时了解了下fork,其应用毕竟广,这里只说些我才学到的吧.
首先来看例1.
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
int main(){
int i;
printf("hello world %d\n",getpid());
i=
…
今天师兄问,linux内核模块之间如何进行通信?我才想起我之前也有这个疑问,只是当时不需要所以就没去关心了。晚上查了些资料,终于弄明白了些。
这里的通信可以简单点理解,就是模块B如何调用A的函数,变量或者常量。为了简化,我设计一个模块A中的一个函数为printMSG,原型为int printMSG(int n);传入的参数n表示打印几遍一个固定的字符串。模块A(在helloworld基础上修改的,所以名字都没变…懒)源码:
#include <linux /init.h>
#include </linux><linux /module.h>
int __init hel
…
考虑下面的键盘钩子函数。(MFC工程)
1
2
3
4
5
6
7
8
|
LRESULT CALLBACK KeyProc(int nCode,WPARAM w,LPARAM l){
if('A'==w){
MessageBox(NULL,"yes","test",MB_OK);
return 1;
}
return 0;
}
|
也就是想在按下A的时候,弹出一个对话框。
然后在一个事件中添加:
SetWindowsHookEx(WH_KEYBOARD,KeyProc,NULL,GetCurrentThread…