校园招聘笔试面试题及部分答案.docx
- 文档编号:25870562
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:64
- 大小:104.08KB
校园招聘笔试面试题及部分答案.docx
《校园招聘笔试面试题及部分答案.docx》由会员分享,可在线阅读,更多相关《校园招聘笔试面试题及部分答案.docx(64页珍藏版)》请在冰豆网上搜索。
校园招聘笔试面试题及部分答案
笔试面试题汇总
一、笔试题
1、给你一个二叉树的前序序列和中序序列,求其后续序列?
(淘宝)
先看三个公式:
PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树);
InOrder(T)=InOrder(T的左子树)+T的根节点+InOrder(T的右子树);
PostOrder(T)=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根节点。
根据以上的三给公式就可以很容易解决一下两个问题:
前序+中序→后序;
中序+后序→前序。
当然也可把树画出来,再求他的各种序列。
2、Cache替换算法命中率最高是?
(淘宝)
这个组成原理就有讲到了,可以找组成原理的书看下,把各种替换算法在理解下,在书上的P98-P99讲得很详细。
3、给一个顺序表,然后再给你一个码值,求在二分查找改码值的比较次数?
(淘宝)
自己去做二分的查找的过程,我们知道二分查找是log(n)的,一次比较次数大于log(n)肯定是错的。
具体可以看下数据结构的书,P17-P一八讲的很详细。
4、编译程序中安排中间代码生成的目的是?
(淘宝)
把与机器相关的工作集中到目标代码生成阶段,难度和工作量下降。
便于移直和维护。
利于优化。
5、假设在n进制下,17*456=8206成立,n是多少?
(淘宝)
从上面的等式中可以看到8,则进制可定大于8,因此可以从9进制开始枚举,直至满足等式,就可以了。
(建议:
先都转换成十进制,在实现乘法运算)
6、要从一亿会员中抽出100万会员,考虑到公平性、相对分散、相对随机,不能重复,抽取速度要快。
有一个random函数,能产生0-9的随机数。
请写出你能想到的抽取方法?
并写明步骤。
(淘宝)
用random函数产生两个数x1、x2,那么会员号mod100等于x1x2的话,该会与就被选中。
这样每个会员的中奖概率是1/100。
7、Malloc和new的区别?
8、++、--、sizeof(字符串、结构体)(融通)
9、字符串函数的实现(strlen、strcpy等)(网龙、亿联网络)
10、字符串以单词逆序
11、CSTRING类的一些基本函数的实现
12、DEBUG和RELESE两种调试的区别
13、CONST的用法
我只要一听到被面试者说:
"const意味着常数",我就知道我正在和一个业余者打交道。
去年DanSaks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:
EmbeddedSystemsProgramming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。
尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。
(如果你想知道更详细的答案,仔细读一下Saks的文章吧。
)
如果应试者能正确回答这个问题,我将问他一个附加的问题:
下面的声明都是什么意思?
constinta;
intconsta;
constint*a;
int*consta;
intconst*aconst;
前两个的作用是一样,a是一个常整型数。
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。
顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?
我也如下的几下理由:
1)关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。
如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。
(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。
)
2)通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。
简而言之,这样可以减少bug的出现。
14、虚基类抽象基类的用法
答:
在派生类继承基类时,加上一个virtual关键词则为虚拟基类继承,如:
classderive:
virtualpublicbase
{
};
虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如:
classB
{
};
classD1:
publicB
{
};
classD2:
publicB
{
};
classC:
publicD1,publicD2
{
};
这里C在D1,D2上继承,但有两个基类,造成混乱。
因而使用虚基类,即:
classB
{
};
classD1:
virtualpublicB
{
};
classD2:
virtualpublicB
{
};
classC:
publicD1,publicD2
15、Java线程中的sleep,yeild,notify的作用和区别
sleep:
让线程睡眠
yeild:
暂停当前正在执行的线程对象,并执行其他线程
notify:
唤醒线程
16、面向对象的特征有哪些方面
封装、继承、多态
17、ServletConfig对象与ServletContext对象的作用和区别
servletconfig对象可以使用一个或多个
进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
18、编程:
链表的反转、两个排好序链表结合成一个有序链表
19、写一个程序实现字符串反转。
(新大陆)
20、多态性意味着一个操作在不同的类中可以有不同的实现方式。
(淘宝)
21、二分搜索算法
具体可以看下数据结构的书,P17-P一八讲的很详细。
22、树:
节点个数与树高的计算
这个可以用深搜和广搜实现,节点个数没遇到一个还没标记的节点就加1并标记该节点。
把根节点记为1,然后对于还没标记的节点就等于他父亲的值+1,这过程中出现的最大值就是树高。
对于树的一些定义数据结构书上有P一三8-P一三9。
23、操作系统:
内存的大小端,生产者、消费者问题
1-2.生产者消费者问题:
生产者与消费者问题可以被描述为:
一个有限缓冲区和两类线程,它们是生产者和消费者,生产者把产品放入缓冲区,相反消费者便是从缓冲区中拿走产品。
生产者在缓冲区满时必须等待,直到缓冲区有空间才继续生产。
消费者在缓冲区空时必须等待,直到缓冲区中有产品才能继续读取。
P,V操作来解决进程同步与进程通信的问题。
信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。
信号量为一个整数,我们设这个信号量为:
sem。
很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。
根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。
p操作和v操作是不可中断的程序段,称为原语。
P,V原语中P是荷兰语的Passeren,相当于英文的pass,V是荷兰语的Verhoog,相当于英文中的incremnet。
P原语操作的动作是:
(1)sem减1;
(2)若sem减1后仍大于或等于零,则进程继续执行;
(3)若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作的动作是:
(1)sem加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
需要提醒大家一点就是P,V操作对于每一个进程来说,都只能进行一次。
而且必须成对使用。
且在P,V愿语执行期间不允许有中断的发生。
24、软件工程的类图
类图(Classdiagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。
类
(Class) 一般包含3个组成部分。
第一个是类名;第二个是属性(attributes);第三个是该类提供的方法。
类与类间关系
常见的关系有:
继承(Generalization),关联关系(Association),聚合关系(Aggregation),组合关系(Composition),依赖关系(Dependency)。
其中,聚合关系(Aggregation),组合关系(Composition)属于关联关系(Association)。
详见软件工程教材。
25、C语言:
c语言的关键字、运算符的优先级与结合性、宏、指针的理解、typedef等
3-1.c语言的关键字
关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。
用户定义的标识符不应与关键字相同。
c语言关键字共32个:
1、数据类型关键字(12个):
(1).char:
声明字符型变量或函数
(2).double:
声明双精度变量或函数
(3).enum:
声明枚举类型
(4).float:
声明浮点型变量或函数
(5).int:
声明整型变量或函数
(6).long:
声明长整型变量或函数
(7).short:
声明短整型变量或函数
(8).signed:
声明有符号类型变量或函数
(9).struct:
声明结构体变量或函数
(10).union:
声明联合数据类型
(11).unsigned:
声明无符号类型变量或函数
(12).void:
声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
2、控制语句关键字(12个):
A.循环语句
(1).for:
一种循环语句(可意会不可言传)
(2).do:
循环语句的循环体
(3).while:
循环语句的循环条件
(4).break:
跳出当前循环
(5).continue:
结束当前循环,开始下一轮循环
B.条件语句
(1).if:
条件语句
(2).else:
条件语句否定分支(与if连用)
(3).goto:
无条件跳转语句
C.开关语句
(1).switch:
用于开关语句
(2).case:
开关语句分支
(3).default:
开关语句中的“其他”分支
D.
return:
子程序返回语句(可以带参数,也看不带参数)
3、存储类型关键字(4个):
(1).auto:
声明自动变量一般不使用
(2).extern:
声明变量是在其他文件正声明(也可以看做是引用变量)
(3).register:
声明积存器变量
(4).static:
声明静态变量
4、其它关键字(4个):
(1).const:
声明只读变量
(2).sizeof:
计算数据类型长度
(3).typedef:
用以给数据类型取别名(当然还有其他作用)
(4).volatile:
说明变量在程序执行中可被隐含地改变
3-2.运算符的优先级与结合性、宏、指针的理解、typedef等
注:
谭浩强那本书附录很详细。
c语言运算符
1级优先级左结合
()圆括号
[]下标运算符
->指向结构体成员运算符
.结构体成员运算符
2级优先级右结合
!
逻辑非运算符
~按位取反运算符
++前缀增量运算符
--前缀增量运算符
+正号运算符
-负号运算符
(类型)类型转换运算符
*指针运算符
&地址与运算符
sizeof长度运算符
3级优先级左结合
*乘法运算符
/除法运算符
%取余运算符
4级优先级左结合
+加法运算符
-减法运算符
5级优先级左结合
<<左移运算符
>>右移运算符
6级优先级左结合
<、<=、>、>=关系运算符
7级优先级左结合
==等于运算符
!
=不等于运算符
8级优先级左结合
&按位与运算符
9级优先级左结合
^按位异或运算符
10级优先级左结合
|按位或运算符
11级优先级左结合
&&逻辑与运算符
12级优先级左结合
||逻辑或运算符
一三级优先级右结合
?
:
条件运算符
14级优先级右结合
=+=-=*=/=%=&=^=|=<<=>>=全为赋值运算符
一五级优先级左结合
,逗号运算符
26、网络:
就osi模型
OSI七层模型介绍
OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。
OSI模型有7层结构,每层都可以有几个子层。
OSI的7层从上到下分别是
7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层
其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。
下面我给大家介绍一下这7层的功能:
1)应用层:
与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。
例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。
但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。
示例:
telnet,HTTP,FTP,WWW,NFS,SMTP等。
2)表示层:
这一层的主要功能是定义数据格式及加密。
例如,FTP允许你选择以二进制或ASII格式传输。
如果选择二进制,那么发送方和接收方不改变文件的内容。
如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。
在接收方将标准的ASII转换成接收方计算机的字符集。
示例:
加密,ASII等。
3)会话层:
他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。
示例:
RPC,SQL等。
4)传输层:
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
示例:
TCP,UDP,SPX。
5)网络层:
这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。
为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。
示例:
IP,IPX等。
6)数据链路层:
他定义了在单个链路上如何传输数据。
这些协议与被讨论的歌种介质有关。
示例:
ATM,FDDI等。
7)物理层:
OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。
连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。
物理层常用多个规范完成对所有细节的定义。
示例:
Rj45,802.3等。
27、在一个工程中,如果一个文件向要引用其他文件中定义的一个变量或者函数,请问需要添加什么关键字?
答:
extern。
28、volatile:
说明变量在程序执行中可被隐含地改变
29、
voidfunc(void){
staticinti=0;
i++;
printf("%d\n",i);
}
voidmain(){
func();
func();
}
请问输出是:
1
2
(关键考察static关键字)
30、指针的应用方面,数组应用,链表应用。
31、一些简单的字符串处理函数,排序函数(冒泡,快排等)。
32、智力游戏:
你面前有一对黑白棋,同色给你足够多的黑白棋(以防不够用)。
你每次从这一堆黑(B)白(W)棋中随机抽取出2颗棋子,如果同色(BB,WW),则向这一堆中放入一颗黑棋,否则(RW)放入一颗白棋。
最后只剩下一颗。
请问,最终状态和初始状态有和关系?
解:
由于当抽取出RW时,放入W,即W没有减少,而抽取出WW时,放入的是B,因此W只能成对减少。
因此结果与W的奇偶有关,W为奇,则剩下W;否则剩下B。
33、500Mtxt搜abcd串
34、封装,继承,多态,析构函数,解析函数相关的题目
35、给你10万个关键词,然后再给你一些文章(这些文章的大小为k的数量级的),然后把文章中出现的关键词过滤不确定的解答:
先根据10万个关键词构建AC自动机,然后对每一篇文章进行一次AC自动机处理,这样的空间复杂度是10万个关键词的字典树的空间消耗。
他的下一个问题是如何进行空间优化,当事人表示不懂。
36、编程题:
String[]str={“test”,null,””,”中国”,”福富软件”}
设一全局变量*然后让字符数组变成t*e*s*t中*国,福*富*软*件并输出
答案:
源码(仅供参考):
publicclassTest{
publicstaticvoidmain(String[]args){
String[]str={"","中国",null,"福富软件","test"};
for(inti=0;i StringBuffersb=newStringBuffer(); sb.delete(0,sb.length()); sb.append(str[i]); if("".equals(str[i])||str[i]==null) System.out.println("*"); else{ intn=1; intlen=str[i].length(); while((len--)>1){ sb.insert(n,"*"); n=n+2; }//endwhile System.out.println(sb); }endelse }//endfor }//endmain }//endclass 37、编程题: 实现数据库连接工具类,并实现增删改查的功能。 二、面试题(计算机1、3、4、7班提供) 1、Linux的存储管理? (融通) Linux采用请求调页策略进行存储管理。 请求调页策略在内外村之间来回传递的是存储页而不是整个进程,从而使得进程的地址映射具有了更大的灵活性,且允许进程的大小比可用物理存储空间大得多。 2、Linux的常用命令? (如: ls及其参数)(融通) 3、数据库索引: 如何建立及其作用? (实达电脑) 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,索引好比是一本书前面的目录,用之能加快数据库的查询速度 建立索引的一般格式: create[unique][cluster]index<索引名>on<表名>(<列名>【<次序>】[,<列名>[<次序>]]…); 4、多进程访问共有资源如何解决冲突? (实达电脑) 靠进程间互斥来实现 5、UML的各种图? (如请说出几种UML的图)(融通) 用例图,类图,对象图,活动图,状态图,顺序图,协作图,构件图,部署图。 6、最擅长的科目? 接下来的问题: 用一句话概括该科目? 及关于该科目的一些问题 7、在C语言里面用指针要注意哪些方面? (福富) 内存泄露,内存碎片,数组越界. 8、进程间通信实现方式? (联迪、实达) 信号,信号量,消息队列,共享内存,命名管道 9、Const、static、final、typed、define等的用法? (网龙、实达) 1)const是一个C语言的关键字,它限定一个变量不允许被改变。 使用const在一定程度上可以提高程序的安全性和可靠性; 2)C++的static有两种用法: 面向过程程序设计中的static和面向对象程序设计中的static。 前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用,面向过程程序设计中static用法主要有: 静态全局变量,静态局部变量,还有静态函数,定义静态函数的好处: 静态函数不能被其它文件所用;其它文件中可以定义相同名字的函数,不会发生冲突;面向对象中的用法有: 静态数据成员,静态成员函数之类的 3)Final: Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。 可以修饰的对象: final域final方法final类。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 4)Typedef: 为现有类型创建一个新的名字,是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 5)Define: a)简单的define定义#defineMAXTIME1000 b)define的“函数定义”#definemax(x,y)(x)>(y)? (x): (y)等等 10、堆和栈的区别? (联迪、实达、台达) 栈区(stack)―由编译器自动分配释放,存放函数的参数值,局部变量的值等。 其操作方式类似于数据结构中的栈。 堆区(heap)―一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。 注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 具体差别如下: (1)申请方式: stack: 由系统自动分配。 例如,声明在函数中一个局部变量intb;系统自动在栈中为b开辟空间; heap: 需要程序员自己申请,并指明大小,在c中malloc函数,如p1=(char*)malloc(10); (2)申请后系统的反应: 栈: 只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 堆: 首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 招聘 笔试 试题 部分 答案