深信服面试题往年

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

虽然还是不够全面,但是还是可以用来对付一些基本笔面的
基本数据类(WINDOWS3位机
Cha个字
Shor
In
Lon
Floa
Doubl
Londoubl1
指3位个字
浮点数双精度的比
Floaf
判是否
Iff>0.00001&&f<=0.00001)=0els{!=0}
----------------------------------------------------------------------------------------------------------------修饰保留
Const
Conschar*p//指向的内容不能被修
Chacons*p/指针不能修
Constypfun()/返回值类型为一constyp类不能修
Funconscha*p)funcons&a/保护指引用传递的值不被修
类成员函fun(const/表FU不能修改成员变不调用cons成员函
olatile
修饰变量确保变修改后保存在内存每次取数从内存中
Static
静态变保存于数据段.只初始化一
全局变外部变的说明之前再冠stati就构成了静态的全局变量。

全局变量本身
是静态存储方式静态全局变量当然也是静态存储方式这两者在存储方式上并无不。

这两者的区别虽在于非静态全局变量的作用域是整个源程序当一个源程序由多个源件组成时,非静态的全局变量在各个源文件中都是有效的而静态全局变量则限制了其用域即只在定义该变量的源文件内有效在同一源程序其源文件中不能使用它
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用因此以避免在其它源文件中引起错误
从以上分析可以看出把局部变量改变为静态变量后是改变了它的存储方式即改变
它的生存期。

把全局变量改变为静态变量后是改变了它的作用域限制了它的使用范stati函数与普通函数作用域不同,仅在本文件。

只在当前源文件中使用的函数应
说明为内部函(static,内部函数应该在当前源文件中说明和定义。

对于可在当前源
件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头件
stati全局变量与普通的全局变量有什么区别stati全局变量只初使化一次,防止在
他文件单元中被引作用域限于本文
stati局部变量和普通局部变量有什么区别stati局部变量只被初始化一次,下
次调用函数时依据上一次结果值进行改变;
如:fun()
{
Static int m=0;
M++;
Cout<<m<<endl;
}
调用:
Fun();
Fun();
输出:1
2
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个
被调用中维持一份拷贝。

作用域限于本文件
---------------------------------------------------------------------------------------------------------------------三.内存使用:
程序的局部变量存在于(堆栈)中,全局变量存在于(静态区即数据段)中,动态申请数据存在于(堆)中。

分配方式有三种,请记住:
-1-静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局
变量、常量,静态变量.
-2-栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。

-3-堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。

--------动态申请内存:---------------
Malloc/free与new/delete的区别;
前者:是C的库函数.在C++中创建对像时,不会调用构造函数,FREE时也不会调用析构函数
.
后者:是C++中运算符,创建析构对象都会调用构造函数,与析构函数.
注意:
Free(p)或delete p后,P成为野指针,并非为空,(P所指地址不变,只是所指内存已释放)
两次释放P会出错.
最好,释放后加个P=NULL.空指针多次释放不会出错.
---------------------------------------------------------------------------------------------------------------------四.运算符:
++,--操作:
A++:A加一后,表达式返回A加一前的附本,(非左值)
A加一后,表达式返回加一后的A.(左值)++A:位运算.
使用异或交换数据:交换A与B的值
A^=B;即:A=A^B;
B^=A;B=B^A;
A^=B;A=A^B;
---------------------------------------------------------------------------------------------------------------------五.语句:
For(A;B;C)C语句是在每次循环后才执行.
如:y=10;
for(i=0;i<10;y=++i)
{
Cout<<y<<endl;//第一次输出是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变量;(注意);
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()
{
栈中的一块内存a[]=”kdkdk”;///Char
Return a;///返回栈中内存地址。

}
(面向对象的函数设在后面);
----------------------------------------------------------------------------------------------------------------------七.指针与数组;
指针++,--;
Int*p;
如果p++后,则P的值应该是增加4
指针的累加与它自己的类型有关.
Char str[]=”akakak”;
Strlen(str)是求串的长度,所以一定要小心那个'\0'结束符;
Strcpy(str1,str2);,///一定要小心'\0'
----------------------------------------------------------------------------------------------------------------------面向对象:
一.类
默认四个函数:无参数构造函数,拷贝构造函数(浅拷贝),赋值函数(浅),析构函数.
重写赋值函数时,注意要避免自赋值.(参考高质量C++,string类的编写)
--------------------------------------------------------------------------
函数重载:同一区域内,函数名相同,参数列表不同.(略)---实现编译时多态
函数覆盖:在子类与父类之间.由虚函数产生.--------------运行时多态
Class A
{
Virtual void fun(){}
};
Class B:public A
{
V oid fun(){}
}
则子类中的fun()覆盖了父类中的fun();
函数隐藏:在子类与父类之间,不是虚函数,但是函数名相同,参数列表不一定相同.
子类函数会隐藏父类的同名函数.
Class A
{
V oid Fun1();
V oid Fun2();
}
Class b:pubic A
{
V oid Fun1();
V oid Fun2(int);
}
则fun1,fun2都隐藏了父类的同名函数.
基类指针与子类指针的使用:
;为子类,B为父类A假设
定义: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”<<endl;}
}
定义:
A*Pa=new B;
Delete pa;
输出:in A
In B
但是如果,A中的析构函数没有virtual,则结果只是:in A
原因:不明!
类中回调函数设计:
使用友元函数,或static函数。

原因:两者不存在this指针。

如果要修改对象成员,则可以把对象指针或引用传入函数。

如:static void fun(A*Pa),,,or static void fun(A&a);
面向对象函数设计:
V oid fun(A a)-----------------//出现临时对象
{
-----------其它代码;
A aa;
Return(aa);--------------//出现临时对象;
}
优化后:
V oid fun(A&a)
{
---------其它代码
RETURN(A());
}
类大小计算:
空类,大小不为0;
变量不会计入其中。

static求类对象大小时,sizeof()成员变量,当static
其它参考sizeof()专题
解决头文件重复包含:
1.#pragma once.
2.ifndef/define/endif
----------------------------------------------------------------------------------------------------------------------二.运算符重载。

赋值:A&ōperator=(A&other)//返回引用。

{
避免自赋值;
---------其它代码---------
Return*this;
}
前++:A&operator++()///////自加后返回本身。

返回值为引用。

{
This->value+=1;
Return*this;
}
后++:A operator++(int)/////int用于区另前加加,还是后加加。

//值返回
{
A temp(*this);/////自加后,返回一个自加前的附本。

*this->value+=1;
Return temp;
}
非类成员函数++,定义(友元)
A&operator++(A&a)//前加加
A operator++(A&a,int)//后加加。

函数实现同上。

(其中减减的与++类似)
多继承有待补充;?/???????
模板
----------------------------------------------------------------------------------------------------------------------数据结构与算法
(最好这里能做到于老师的标准:看到题目就能写出算法)
---------------------------------------------------------------------
链表操作:(不带头结点,书上的都是带头结点的)
主要是不带头结点的操作,记住可能要修改头指针,所以注意函数参数与返回值设计。

(细心);(华为面试)
静态链表
栈队列的使用:
二叉树遍历,图遍历,非递归实现。

(华为,三G门户面试);
串操作:
;)试笔服信深(算法(模式匹配)KMP二叉树
三种遍
计算叶子数,计算结点数(华为笔试,迅雷笔试
哈夫曼-------(不知什么公司的面试题了

十字链表结
两种遍--深度(非递归与递归,广----队列
查找
二分查----递归与非递归(普信笔试
二叉排序
红黑树(了解,深信服面试se,ma内部使用
B树,了解
键----用二叉对表示,键的匹配
哈希-----哈希函数编写,解决冲突的方
内部排序
插入排

堆排序,堆操作
归并排-----------各种形式的归并Q笔试
基数排序
(记住各种排序的复杂最好会自己计
其它算法
Strcpystrcmpstrcatmemcpystrin类的编写
最大公约数,最小公倍数,素数P计算
链表环判断,链表交点判断。

找链表中间结点,链表反序华为面
八皇-----深信服笔试一个朋友Q面
ST
VertoLissemap使用与内部实现
----------------------------------------------------------------------------------------------------------------------------------------系统编(windowounix-----------------------------
可以windowUNI中选择一如果两个都行就更
多进
多线
进线程间同步与通------这个也很重
CriticalSectionmutexeventsemaphore区别与使
Uni下不
网络编------select(setsockopt()多广问得最
最好能写出所有常SOCKE函和基本流
TCP/I协TCPI,UD头的组各个控制位的作
地址分子子网掩多播地广播地网络主机
MF下SendMessage(PostMessage(区
----------------------------------------------------------------
数据库多个关系表设计
基SQ语句的编写,嵌套查询,多表查
操作系
--操作。

生产者与消费者。

用代码实现(华为面试
一天生个饼一天生个饼一天1个,现10个饼,P

编程,问多少天可以吃完
-----------------------项---------------------------
如果你没有项那你就把自己的课程设计也搬出不要怕别人笑千万不要说大
么东西我很B面试官几句话可以试出你自己有料的地方一定要突出给他
项目分
系统功》整体架》自己负责的模》遇到的困》有待改进的地》存在的瓶
,与解决方案
(个人认为按上面的顺序分析项目,面试前一定要先自己对自己介绍下项目
-----------------------------面试细----------------------------------
--面试进门一定要向面试官问等面试官示意坐下时才坐面试完要道
如果对方和你握一定要站起
握手要有表达自己的诚.可以希望我有机会为公司效等等之类的)
--当问及工资问题,书面形式写期望工一定要说按公司薪水制
原刚从学校出对公司没有贡工资应该和贡献成正按公司的薪水制度比较
----描术自己的强?弱??职业目??性?自我介?为什么要选择做这个职
公?用英语描术学校,家乡(华为面试
(最好中英文都会表达,一定要作好这些准备
--你有什么问题要问???不要关涉工资和培.要表明自己加入公司的决
(中大一学生的回答:是否进入公司就可以接手项目,个人觉得不错
--越简单的题目越是考你的细所以要注意细小心再小
--说话要表现自我,千万不能说自己什么很了不…绝不可说大错了就是错要承
不会也要直接说不也可请)会的就直接说出.不要吞吞吐不要不懂装
如果面试官说自己错但自己发现不可以请教下面试能不能指点下我哪里错
我真看不出)虑学并改即B也要抵住压不要就起身走要请教面
错在应该怎么.?要顺着面试官的意不要与其争一定要抗压抵
8成绩问题
主要是针对和我一样成绩很差的同学。

当面试官问到怎么你的成绩那么差。

你一
要想到好的解围方法。

他不是看不起你而是给你施加压力,看你在压力面前怎么样解决题,能不能抵住压力
自信,一定要自信,但不是自认清--9.。

相关文档
最新文档