《收藏的精品资料深信服面试题往年.doc》由会员分享,可在线阅读,更多相关《收藏的精品资料深信服面试题往年.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、虽然还是不够全面,但是还是可以用来对付一些基本笔试面试的。一.基本数据类型(WINDOWS32位机下)Char 1个字节Short 2Int 4Long 4Float 4Double 8Long double 10指针: 32位机. 4个字节.浮点数双精度的比较; Float f; 判断F是否为0 If( f=-0.00001&f=0.00001) =0 else !=0;-二.修饰保留字.Const:Const char*p/p 指向的内容不能被修改Char const *p; / p指针不能修改Const type fun(); / 返回值类型为一个const type类型,不能修改Fun
2、( const char *p); fun( const A &a) /保护指针,引用传递的值不被修改.类成员函数:中 fun() const; /表明FUN不能修改成员变量,不调用非const 成员函数.Volatile:修饰变量时,确保变修改后保存在内存中,每次取数从内存中取.Static:静态变量: 保存于数据段中., 只初始化一次.全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,
3、非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,
4、应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;作用域限于本文件!static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次调用函数时依据上一次结果值进行改变;如: fun()Static int m=0;M+;Coutmendl; 调用:Fun();Fun();输出: 1 2static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。作用域限于本文件-三.内存使用:程序的局部变量存在于(堆栈
5、)中,全局变量存在于(静态区 即数据段)中,动态申请数据存在于( 堆)中。 分配方式有三种,请记住:1 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量,静态变量.2 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。3 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。-动态申请内存:-Malloc/free 与 new/delete 的区别;前者: 是C的库函数. 在C+中创建对像时,不会调用构造函数,FREE时也不会调用析构函数.后者: 是C+中运算符, 创建析构对象都会调用构造函数,与析构函
6、数.注意: Free(p)或delete p后, P成为野指针, 并非为空, (P所指地址不变,只是所指内存已释放) 两次释放P会出错. 最好,释放后加个P=NULL. 空指针多次释放不会出错.-四.运算符:+,-操作: A+ : A加一后, 表达式返回A加一前的附本,(非左值) +A: A加一后,表达式返回加一后的A.(左值)位运算. 使用异或交换数据: 交换A与B的值 A=B; 即: A=AB; B=A; B=BA; A=B; A=AB;-五.语句: For(A;B;C) C语句是在每次循环后才执行. 如: y=10;for( i=0;i10;y=+i) Coutyendl;/ 第一次输出
7、是10. 循环语句设计: 尽量小循环放外面,大循环放里面.-原因减少循环之间的切换.-六.函数设计:参数传递选择- 作为输入参数的,应该用CONST作保护 如:strcpy(char*str1,const char*str2) 要修改函数外面的变量时可用 : 1, 指针传递: 即把变量地址传入函数; 如: FUN( int*m); 调用时: int m=0; FUN(&m); 2. 引用传递: FUN(int &m),调用时:int m=0; fun(m); 3. 如果只要修改一个外面的变量,也可以用返回值解决,但是多个的话就要用上面两种方法中的一种.内部变量: Static 变量;(注意);
8、 FUN() Static int m=0; . 其中M 只初始化一次. 每次调用FUN()后,都会在前一次调用的基础上进行修改M 值函数指针: 如: void (*pFun)(int); 则pFun 为一个函数指针,函数参数必须为一个INT参数. 调用: pFun=FUN; pFun(b); 或 (*pFun)(b); /一定要加个括号; (主要用于回调函数设计) 另一种定义: Typedef void (*pFun)(int a); 则pFun成为一个函数参数为一个INT的函数指针类型. 定义: pFun p=FUN; 函数返回: 不要返回栈内存指针; 如: char* fun() Cha
9、r a=”kdkdk”;/栈中的一块内存 Return a;/返回栈中内存地址。 (面向对象的函数设在后面);-七.指针与数组; 指针+,-; Int *p; 如果p+后,则P的值应该是增加4 指针的累加与它自己的类型有关. Char str=”akakak”;Strlen(str) 是求串的长度, 所以一定要小心那个0结束符;Strcpy(str1,str2);, /一定要小心0- 面向对象:一. 类默认四个函数: 无参数构造函数, 拷贝构造函数(浅拷贝), 赋值函数(浅), 析构函数.重写赋值函数时,注意要避免自赋值.(参考高质量C+,string类的编写)-函数重载: 同一区域内,函数名
10、相同,参数列表不同.(略)-实现编译时多态函数覆盖: 在子类与父类之间. 由虚函数产生.-运行时多态 Class A Virtual void fun() ; Class B: public A Void fun() 则子类中的fun()覆盖了父类中的fun();函数隐藏: 在子类与父类之间, 不是虚函数,但是函数名相同,参数列表不一定相同. 子类函数会隐藏父类的同名函数. Class A Void Fun 1(); Void Fun2(); Class b : pubic A Void Fun1(); Void Fun2(int); 则fun1,fun2都隐藏了父类的同名函数.基类指针与子类
11、指针的使用: 假设A为父类,B为子类;定义: B b; A*pA=&b;/ pA只能调用A类中的函数,和B中继承了A中的虚函数. / 但是不能调用,A中被覆盖的函数与B类中的其它函数. B*pB=&b;/ pB只能调用B类中的所有可访问函数,和A中继承下来的所有/ 公有函数. 但是不能调用A中被B隐藏或覆盖的函数.-带virtual 的析构函数: Class A Virtual A() cout”in A”endl; Class B: public A Virtual B() cout”in B”value+=1; Return *this; 后+:A operator+(int)/int 用
12、于区另前加加,还是后加加。/值返回 A temp(*this); /自加后,返回一个自加前的附本。 *this-value+=1; Return temp; 非类成员函数+,定义(友元) A& operator+(A&a)/前加加 A operator+(A&a,int)/后加加。 函数实现同上。(其中减减的与+类似)多继承有待补充;?/?模板- 数据结构与算法(最好这里能做到于老师的标准:看到题目就能写出算法)-链表操作:(不带头结点,书上的都是带头结点的)主要是不带头结点的操作,记住可能要修改头指针,所以注意函数参数与返回值设计。(细心);(华为面试)静态链表栈队列的使用: 二叉树遍历,图
13、遍历,非递归实现。(华为,三G门户面试);串操作: KMP算法(模式匹配) (深信服笔试);二叉树: 三种遍历递归与非递归。(华为面试); 计算叶子数,计算结点数。(华为笔试,迅雷笔试); 哈夫曼树-(不知什么公司的面试题了);图: 十字链表结构 两种遍历-深度(非递归与递归),广度-队列。查找: 二分查找-递归与非递归。(普信笔试) 二叉排序树 红黑树(了解,深信服面试)set ,map内部使用。 B-,B+树,了解。 键树-用二叉对表示,键的匹配。 哈希表-哈希函数编写,解决冲突的方法4个(深信服面试);内部排序: 插入排序 快排 堆排序,堆操作。 归并排序-各种形式的归并(QQ笔试);
14、基数排序。 (记住各种排序的复杂度,最好会自己计算.)其它算法: Strcpy, strcmp, strcat, memcpy, string类的编写。最大公约数,最小公倍数,素数,PI计算。 链表环判断,链表交点判断。找链表中间结点,链表反序。(华为面试) 八皇后-深信服笔试,(一个朋友的QQ面试)STL: Vertor List set map, 使用与内部实现。-系统编程(windows or unix)-(可以在windows 与UNIX中选择一个,如果两个都行就更好)多进程多线程进程/线程间同步与通信.-这个也很重要. CriticalSection, mutex, event, s
15、emaphore.区别与使用 Unix下不懂.网络编程-select()与setsockopt(),多播,广播.问得最多. 最好能写出所有常的SOCKET函数,和基本流程.TCP/IP协议, TCP, IP ,UDP 头的组成.各个控制位的作用.地址分类,子网,子网掩码,多播地址,广播地址,网络号,主机号.MFC下的 SendMessage()与PostMessage()区别.-数据库: 多个关系表设计, 基本SQL语句的编写,嵌套查询,多表查询操作系统: P-V操作。生产者与消费者。用代码实现。(华为面试); (A一天生产3个饼,B一天生产4个饼,C一天吃10个,现有100个饼,用PV操作
16、编程,问多少天可以吃完) -项目-如果你没有项目,那你就把自己的课程设计也搬出来,不要怕别人笑你.千万不要说大话,什么东西我很牛B,面试官几句话可以试出你来.自己有料的地方一定要突出给他看.项目分析:系统功能-整体架构-自己负责的模块-遇到的困难-有待改进的地方-存在的瓶颈,与解决方案。 (个人认为按上面的顺序分析项目,面试前一定要先自己对自己介绍下项目)-面试细节-1-面试进门后,一定要向面试官问好,等面试官示意坐下时才坐下. 面试完后, 要道谢,如果对方和你握手,一定要站起来 握手要有力,表达自己的诚意.(可以说:希望我有机会为公司效力等等之类的话);2-当问及工资问题时,(书面形式写期望
17、工资) 一定要说按公司薪水制度. 原因: 刚从学校出对公司没有贡献,工资应该和贡献成正比,按公司的薪水制度比较合理.3-描术自己的强项?弱点?职业目标?,性格?自我介绍?为什么要选择做这个职位/公司? 用英语描术学校,家乡(华为面试) (最好中英文都会表达,一定要作好这些准备)4-你有什么问题要问吗?不要关涉工资和培训.,要表明自己加入公司的决心.(中大一学生的回答:是否进入公司就可以接手项目,个人觉得不错)6-越简单的题目越是考你的细心.所以要注意细节,小心再小心.7-说话要表现自我,千万不能说自己什么很了不起.绝不可说大话,错了就是错了,要承认. 不会的,也要直接说不会(也可请教),会的就直接说出来.,不要吞吞吐吐,不要不懂装懂. 如果面试官说自己错了,但自己发现不了,可以请教下面试官(能不能指点下我哪里错了,我真看不出来),虑心学习,并改正.即使BS了,也要抵住压力,不要就起身走人,要请教面试官,错在哪,应该怎么做.?要顺着面试官的意思,不要与其争执.一定要抗压力,抵住.8成绩问题: 主要是针对和我一样成绩很差的同学。当面试官问到怎么你的成绩那么差。你一定要想到好的解围方法。他不是看不起你而是给你施加压力,看你在压力面前怎么样解决问题,能不能抵住压力。9-自信,一定要自信,但不是自认清高
限制150内