技术面试题目及答案Word下载.docx
《技术面试题目及答案Word下载.docx》由会员分享,可在线阅读,更多相关《技术面试题目及答案Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
3.在您玩游戏的时候,突然游戏出现某个漏洞,您的感觉是?
4.请问你使用过何种游戏修改工具,特别擅长哪种,请就你熟悉的一款单机游戏把里面一段数据完整的分析出来
5•请问您知道BUG—次的含义吗?
游戏中的致命BUG一般频繁出现
在什么地方?
所谓致命BUG:
就是能让一款游戏玩家人数锐减的那种啦,如:
游戏金钱方面的,游戏平衡方面的等等。
6.如果您玩网络游戏的话,举几个你曾经在网络游戏中发现的BUG,
最好是你站在玩家的立场上看,觉得可利用价值最高的BUG,然后简述一下当时发现的情景和过程。
7.在熟悉或者通关游戏之后您会为您付出的这段游戏时间写点东西吗?
或者会下其余时间研究研究您玩过的这款游戏?
2/19
8.您关注游戏市场上的行情吗?
请就你熟悉的游戏类型对现在的游戏市场简要说明一下。
分为以下三方面:
手机游戏市场,电视游戏和单机市场,网络游戏市场。
Web前端开发类:
1、CSS+DIVf发Web页面的优势有哪些?
2、两种跳转方式分别是什么?
有什么区别?
有两种,分别为:
<
jsp:
includepage=included.jspflush=rue>
forwardpage=
extpage.jsp”>
3、搜索引擎如何抓取网页和如何索引网页
4、简述列举文档对象模型DOM里document的常用的查找访问节点的方法
5、在IE中,HTML对象的ID可以作为document的下属对象变量名
直接使用,在FF中不能,此兼容性问题如何解决?
6、引入样式表的方式有几种?
7、JavaScript是一门基于解释性的语言,它和java语言的区别?
8JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)
的命令是什么?
游戏美术类:
考查对于PS3DsMax(或MAYA),AE等软件的熟悉程度
答案:
1考察数据结构的知识点,这里可使用筛选法,该方法是大部分数据结构书籍都有讲解的算法,当然还有时间复杂度更低的算法(空间复杂度),但是因为求值范围为1-100,故综合来看,筛选法的效率是最高的。
3/19
intmain()
{
int*sieve;
intn;
intiCounter=2,iMax,i;
printf(“Pleaseinputmaxnumber:
”);
scanf(“%d”,&
n);
sieve=(int*)malloc((n-1)*sizeof(int));
for(i=0;
i<
n-1;
i++)sieve[i]=i+2;
iMax=(int)sqrt(n);
while(iCounter<
=iMax){
for(i=2*iCounter-2;
i<
i+=iCounter)
sieve[i]=0;
iCounter++;
}
for(i=0;
i++)
if(sieve[i]!
=0)printf(“%d”,sieve[i]);
return0;
}
2、考察数据结构的知识点,求公约数的算法很多,可考虑效率较高的欧几里德递归算法,
intgcd(intm,intn){
4/19
inttemp=0;
if(m<
n){temp=m;
m=n;
n=temp;
if(n==0)
returnm;
else
returngcd1(n,m%n);
3、考察C++容器的知识,这里考察的MAP
stringstr;
map<
string,int>
content;
for(intcnt=0;
cnt<
10;
cnt++){
cin>
>
str;
(content.insert(make_pair(str,0)).first)->
second++;
:
iteratorit=content.begin();
5/19
for(;
it!
=content.end();
++it)
cout<
it->
first<
”:
”<
second<
endl;
return0;
4、考察数据结构,文件目录是一个树
5、考察基础编程能力#include<
iostream>
usingnamespacestd;
template<
classT>
voidSwap(T*a,T*b){
Ttemp;
temp=*a;
*a=*b;
*b=temp;
begin
/********************************************************************************//*
*简单选择排序
*A:
以数组存放的无数数
*n:
数组A中从位置0到n排序(从小到大)
6/19
*/
voidSelectSort(TA[],intn)
intsmall;
for(inti=0;
i<
n-1;
i++){small=i;
第一个元素最小
for(intj=i+1;
j<
n;
j++){if(A[j]<
A[small]){还小的,则记下其下标small=j;
Swap(&
A[i],&
A[small]);
中第一个元素交换}
/*
*直接插入排序
//执行n-1趟
//先假定待排序序列中
//每趟扫描待排序序列n-i-1次
//如果扫描到一个比最小值元素
//最小元素与待排序序列
数组A中从位置0到n排序(从小到大)*/
template<
voidBubbleSort(TA[],intn)
8/19
inti,j,last;
i=n-1;
while(i>
0){last=0;
for(j=0;
i;
j++){两比较if(A[j+1]<
A[j]){Swap(&
A[j],&
A[j+1]);
last=j;
i=last;
则last为0
//最多进行n-1躺
//将last赋值为0
//从前往后进行相邻元素的两
//后者小,则交换
//有交换,last置为j
//如果一趟没有元素交换,
简单排序算法end
/****************************************
****************************************
*快速排序
*left和right:
A[left]和A[right]之间的元素排序*/
9/19
voidQuickSort(TA[],intleft,intright)
inti,j;
if(left<
right){//若待排序序列多于一个元素,则继续快速排序
i=left;
//游动指针i,j
j=right+1;
A[left],&
A[(left+right)/2]);
//避免最坏境况发生
do{//开始一趟快速排
序,A[left]做为分割元素
doi++;
while(A[i]<
A[left]);
//i指针从左往右找第一个大于等
于分割元素的元素
doj--;
while(A[j]>
//j指针从右往左找第一个小于等
//若i<
j,则交换两个元素
j则继续本趟排
//交换分割元素A[left]和
//对低端序列快速排序
//对高端序列快速排序
if(i<
j)Swap(&
A[j]);
}while(i<
j);
序
A[j]的位置
QuickSort(A,left,j-1);
QuickSort(A,j+1,right);
10/19
快速排序end
/********************************************************************************/
/*对上面的几种排序算法,进行简单的测试*/intmain(){inta[5]={2,1,6,8,3};
//SelectSort(a,5);
//InsertSort(a,5);
//BubbleSort(a,5);
QuickSort(a,0,4);
for(inti=0;
5;
i++){
a[i]<
1、单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
主要单元测试工具:
QTP:
quicktestProfessional.,C++TEST
2、规范编程内容:
标识符规则---类,方法,变量,同时也是包名
的规范
11/19
由字母(汉语中的一个汉字是一个字母),数字,下划线和$组成,不能以数字开头。
大小写敏感
没有长度限制,不能有空格
不能使用Java的关键字和保留字
java中的关键字
goto和const在java中虽然不再使用但是还作为保留字存在
java中没有sizeof这个关键字了,java中的boolean类型的值只能用
true和false,且这两个也是关键字
enum枚举assert断言
一个标识符尽量符合语义信息,提高程序可读性
类名:
每个单词首字母大写,
变量和方法:
第一个单词小写,后边的每个单词首字母大写
包名:
全部小写
常量:
全部大写以下划线分词
局部变量:
定义在方法中的变量
(1)先赋值后使用
(2)从定义变量的代码块开始到代码块结束
(3)在同一范围内不允许两个局部变量发生命名冲突
3、简单点说,对于一个vector&
lt;
int&
gt;
的函数,比如size(),如果在不同的cpp中出现,在这些文件编译的时候都要把
vector&
size()编译一遍。
然后在链接的时候把重复的函数去掉。
很显然增加了编译时间。
12/19
模板的声明是不编译的,更没有空间,它根本不是实际的类型或函数,编译器根本不管它。
只有实例化的时候,才生成真正的类型、函数,而实例化的地方不在一起,必然造成同一个类型、函数被编译了多次。
反观类的编译,只在它的cpp中编译一次,其他地方都使用它的头文件得到声明。
4、面对对象就是:
把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
对同类对象抽象出其共性,形成类。
类中的大多数数据,只能用本类的方法进行处理。
类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
程序流程由用户在使用中决定。
5、设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
毫无疑问,设计模式于己于他人于系统都是多赢的;
设计模式使代码编制真正工程化;
设计模式是软件工程的基石脉络,如同大厦的结构一样。
好处:
(1)、复用解决方案——通过复用已经公认的设计,能够在解决问题时取得先发优势,而且避免重蹈前人覆辙。
可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案。
(2)、确立通用术语——开发中的交流和协作都需要共同的词汇基础和对问题的共识。
设计模式在项目的分析和设计阶段提供了共同的基准点。
(3)、提高观察高度--模式还提供了观察问题、设计过程和面向对象的更高层次的视角,这将可以从“过早处理细节”的桎梏中解放出来。
(4)、大多数设计模式还能使软件更容易修改和维护。
其原因在于,它们都是久经考验的解决方案。
所以,它们的结构都是经过长期发展形成的,比新构思的解决方案更善于应对变化。
而且,这些模式所用代码往往更易于理解——从而使代码更易维护。
6、引用就是对某个变量其别名。
对引用的操作与对应变量的操作的效果完全一样。
2.申明一个引用的时候,切记要对其进行初始化引用声明完毕后,13/19
相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。
3.不能建立数组的引用。
//切记不能建立数组的引用
7、面向对象是一种程序设计的思想,简单的讲,就是封装,继承,多态;
当然,也可以说抽象。
封装这个概念简单的说,对于简单的数据类型,有它自己的封装类(通常我们说的打包);
对于引用类型,类就是一个封装体的一个表现.继承:
子类继承父类(也就是派生类继承基类),它具有可扩展性,便于程序代码的重用性。
继承可以实现多态:
通过重写(覆写),通过对象上传可以实现多态:
通过重写和重载实现
抽象:
面向接口编程
8、
(1).打开块检查(blockchecking)
(2).用rman备份时打开块跟踪(10g以上)
(3).镜像日志组成员。
4).备份时使用checklogical选项这会让rman检查块中的逻辑损坏以及头尾校验,这是获得良好备份的最好方式。
(5).测试你的备份做任何操作都不如实际恢复一次数据库。
(6).每个数据文件在一个单独的备份片中做部分恢复时rman必须
读取整个备份片和必须的归档日志。
(7).维护rman的恢复目录和控制文件仔细选择你的保留政策。
(8).预防控制文件丢失这将确保您始终具备最新controlfile的可用。
14/19
(9).测试你的恢复在恢复场合,会让你知道恢复将怎样执行。
(10).在备份归档时不要使用deleteallinputDELETEINPUT各从第一个归档位置删除日志。
9、CPU工作方法分为中断模式和查询模式.
查询模式就是说CPU轮翻的对外设顺序访问,比方说它先看看键盘有没被按下有的话处理,没的话继续往下看鼠标有没有移动再看看打印机印的怎么样了,再看...等等..显然查询方式的效率低.但稳定可靠.中断模式时就是说CPU不主动访问这些设备,,只管处理自己的任务,没任务就闲着•也就是说在那等着•如果有设备要与CPU联系,或要CPU处理一些事情,他会给CPU发一个中断请求信号•一种情况是这时CPU就会放下正在进行的工作而去处理这个外设的要求.这叫做响应中断.
处理完中断后,CPU返回去继续执行中断以前的工作•还有一种情况如果CPU这时正在做更重要的事情他就会让这个设备先在那等着•有空
时响应他•如果同时有好几个设备都要CPU来处理,CPU就会从按重要
程度来逐个处理.这就是中断和中断的优先级0、死锁
(1)互斥条件:
一个资源每次只能被一个进程使用。
(2)请求与保持条件:
一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:
进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:
若干进程之间形成一种头尾相接的循环等待资源关系。
数学题:
1、采用分类讨论的方法,首先,要是三个数字的和是奇数.那么共有
1奇数+奇数+奇数=奇数
2偶数+偶数+奇数=奇数
15/19
第一种情况是在5个中取出3个奇数.共有10方法.(这是一个组合)第二种情况是在这九个数字中取出两个偶数,即在4个偶数中取出2
个偶数•共有4X3/2!
=6种方法.忘记了还有五个奇数中再选取一个.5
X6=30
所以一共有40种方法.
2、9999
1、
(1)div+css这个网页设计模式中,div承担了网页的内容,css承担了网页的样式。
这样就使网页的内容和样式的分离开来。
有利于页面的维护升级。
(2)有助于提高搜索引擎亲和力(快速找到需要的数据,而不是像
在table中一层层的查找)
(3)有助于页面的重构(换皮肤如blog,直接套用另外一套样式就可以实现,而不用改动网页脚本。
)
2、在JSP中,跳转页面有两种方式:
〔.forward跳转:
樼灳昺牯慷摲瀠条?
跳转页面地址/>
2.response跳转:
敲灳湯敳献湥剤摥物捥?
跳转页面地址);
两种跳转的区别如下:
a.服务器端跳转,地址栏不改变;
b.执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源);
c.request设置的属性在跳转后的页面仍可以使用;
d.使用樼灳瀺牡浡渠浡?
参数名?
慶畲?
参数值/>
传递参数。
2.response跳转:
a.客户端跳转,地址栏改变;
b.所有代码执行完毕后跳转;
c.跳转后的页面不能使用上一个页面的request属性;
d.使用地址重写传递参数(response.sendRedirect(URL参数名=参数值))。
3、每个独立的搜索引擎都有自己的网页抓取程序(spider)。
Spider顺着网页中的超链接,连续地抓取网页。
被抓取的网页被称之为网页快照。
由于互联网中超链接的应用很普遍,理论上,从一定范围的网页出发,就能搜集到绝大多数的网页
抓取网页信息需要有高性能的“网络蜘蛛”程序(Spider)去自动地在互联网中搜索信息。
一个典型的网络蜘蛛工作的方式,是查看一个页面,并从中找到相关信息,然后它再从该页面的所有链接中出发,继续寻找相关的信息,以此类推,直至穷尽。
网络蜘蛛要求能够快速、全面。
网络蜘蛛为实现其快速地浏览整个互联网,通常在技术上采用抢先式多线程技术实现在网上聚集信息。
通过抢先式多线程的使用,你能索引一个基于URL链接的Web页面,启动一个新的线程跟随每个新的URL链接,索引一个新的URL起点。
当然在服务器上所开的线程也不能无限膨胀,需要在服务器的正常运转和快速收集网页之间找一个平衡点。
在算法上各个搜索引擎技术公司可能不尽相同,但目的都是快速浏览Web页和后续过程相配合。
目前国内的搜索引擎技术公司中,比如XX公司的网络蜘蛛采用了可定制、高扩展性的调度算法使得搜索器能在极短的时间内收集到最大数量的互联网信息,并把所获得的信息保存下来以备建立索引库和用户检索。
4、1.通过ID使用getElementByld()获得标签节点
2.通过标签的名称,使用getElementsByTagName()获得元素节点或标签节点
注意:
以上的查找方式都会忽略文档的结构
3.通过使用一个元素节点的parentNode、firstChild以及
lastChild属性
4.节点名称nodeName
(a)如果节点是标签,nodeName是标签名称
(b)如果节点是属性,nodeName是属性名称
(c)如果节点是文本节点,nodeName是#text
(d)女口果节点是文档,nodeName是#document
5.节点值nodeValue
6.节点类型nodeType
17/19
5、HTML对象的id作为对象名的问题
(1)现有问题
在IE中,HTML对象的ID可以作为document的下属对象变量名直接使用。
在火狐中不能。
(2)解决方法
用getElementById(idName)代替idName作为对象变量使用。
6、1.最常用的,引入样式表,在样式表中编写样式,引入方式如下:
linkhref=css/style.cssrel=stylesheettype=ext/css>
2.在Html头部用<
style>
v/style^起来,在这里面编写样式:
styletype=ext/css>
*{
padding:
0;
margin:
0
/style>
3.在标签里面直接编写行内样式。
<
divstyle=color:
#333>
div>
7、JavaScrip是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript可使网页变得生动。
使用它的目的是与HTML超文本标识语言、Java
脚本语言一起实现在一个网页中链接多个对象,与网络客户