【转】搜狐实习生技术类笔试题【绝对长姿势】

http://blog.sina.com.cn/s/blog_629226620101c0co.html

答案全部照搬原帖:

第一部分:四个中选出不同的一个。

1.A:CVS  B:SVN  C:GIT  D:SSH

CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。
SVN(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
SSH(Struts,Spring,Hibernate) Struts进行流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装!
答案:【D】
 

2.A:AirBNB  B:CragList  C:Yandex  D:Monster

Airbnb是一个旅行房屋租赁社区,用户可通过网络或手机应用程序发布、搜索度假房屋租赁信息并完成在线预定程序。Airbnb的概念抽象一下,它的逻辑应该是:有空闲的资源就可以出租,就可以提高闲置资源利用率从而获得最大收益。

Craigslist是一个网上大型免费分类广告网站,但在某些城市的征才广告需付费,这也是这网络公司的主要收入。

Yandex(俄语ЯндексNASDAQYNDX)是一家俄罗斯互联网企业,旗下的搜索引擎在俄国内拥有逾60%的市场占有率,[1]同时也提供其他的一系列互联网产品和服务。

Monster全球最大的专业招聘网站,也是全球最大的招聘服务供应商,其访问量长期位居30位内,提供由招聘代理、线上招聘、猎头服务和招聘黄页广告四项构成的全方位的全球招聘解决方案。

答案:【】
 

3.A:AWK  B:Shell C:Sed  D:Bash

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。

Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。

sed是stream editor的缩写。是一个非交互式上下文(context)编辑器

bash 是一个为GNU计划编写的Unix shell。

答案:【】

 

4.A:AVL  B:Huffman  C:B  D:B+

AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。
二叉排序树(Binary Sort Tree)又称二叉查找树,也叫B树。
它或者是一棵空树;或者是具有下列性质的二叉树
(1)若左子树不空,则左子树上所有结点的值均小于左子树所在树的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于右子树所在树的根结点的值;
(3)左、右子树也分别为二叉排序树
B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:
1.有n棵子树的结点中含有n个关键字
2.所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字
通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
答案:【D】

 

5.A:LVS  B:Nginx  C:Lighttpd  D:Apache

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
答案:【A】

 

6.A:Spring  B:Ibatis  C:Velocity  D:Zend

Spring是一个开源框架,Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java持久层框架。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Zend引擎是一个开源脚本引擎(一个虚拟机),因作为PHP语言的重要核心而闻名。 
答案:【D】

 

7.A:Latin1  B:GBK  C:JIS  D:ASCII

JIS,日本工业标准的简称,由日本工业标准调查会组织制定和审议。也可以表示一种函数。

其他三个是编码标准。 

答案:【A】
 

8.A:H1  B:BR  C:DIV  D:P

标题文字 <h#>..........</h#> #=1~6;h1为最大字,h6为最小字。
换行 <br>。
分段 <p>。
<div >层的意思</div>。 

答案:【B】
 

9.A:JQuery  B:Node.js  C:Prototype  D:CommonJS

Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器

Node.js是一套用来编写高性能网络服务器的JavaScript工具包。

在JavaScript中,prototype对象是实现面向对象的一个重要机制。每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。prototype.js是由Sam Stephenson写的一个javascript类库。
CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。 
答案:【D】
 

10.A:enum  B:char  C:float  D:int

enum不是基本类型。 

答案:【A】
 

11.A:XML  B:JSon  C:Base64  D:YAML

可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。

YAML是一种很简单的类似于XML的数据描述语言,语法比XML简单很多。 

答案:【C】
 

12.A:fopen  B:fread  C:fseek  D:fwrite

fopen打开文件。

fread读文件。

fseek函数设置文件指针stream的位置。

fwrite写文件。 

答案:【D】
 

13.A:JAVA  B:Python  C:objectC  D:C#

Python是脚本语言。 

答案:【B】
 

14.A:Eclipse  B:VS2012  C:Aptana  D:Emacs

Emacs是文本编辑器。 

答案:【D】
 

15.A:main  B:typedef  C:sizeof  D:enum

main不是关键字。 

答案:【A】
 

16.A:telnet  B:rsync  C:wget  D:scp

Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。

wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。

scp就是secure copy,是用来进行远程文件拷贝的。 

答案:【B】
 

17.A:Mysql  B:MongoDB  C:DB2  D:PostgreSQL

MongoDB是一个基于分布式文件存储的数据库。其他三个是关系型数据库系统。 

答案:【B】
 

18.A:fiddler  B:firebug  C:httpwatch  D:IETester

Fiddler是一个http调试代理,它能够记录并检查所有你的电脑和互联网之间 的http通讯,设置断点,查看Fiddle 所有的“进出”的数据。

Firebug是firefox下的一个插件,能够调试所有网站语言。

HttpWatch是强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出.HttpWatch 是一款能够收集并显示深层信息的软件

IETester是一个WebBrowser控件,包含有五个版本的IE浏览器,界面美观。
答案:【A】
 

19.A:<nav>  B:<footer>  C:<meta>  D:<canvas>

<nav> 标签定义导航链接的部分。

<footer> 标签定义 section 或 document 的页脚。

<meta> 标签位于文档的头部,不包含任何内容。<meta> 标签的属性定义了与文档相关联的名称/值对。

<canvas> 标签定义图形,比如图表和其他图像。 

答案:【C】

 

20.A:MacOS  B:IOS  C:Andriod  D:WP8

MacOS是电脑操作系统。其他的是手机操作系统。 

答案:【A】
 
第二部分:填空题
1.52张牌,没有大小王,平均分给4个人,至少一个人拿到至少2张A的概率是(  ).去掉4张K,剩下48张牌,抽到的概率比刚才(大还是小)。无数张牌,抽到的概率是()。
2.2个骰子,摇到7的概率(1/6)。若摇到6的概率是50%,则摇到7的概率(5/18)。
 
第三部分:论述题
1.请从C/C++、java、python、javascript语言种任一种,论述其基本数据类型,API种类,适用范围以及优缺点。
 2013年搜狐实习生技术类笔试题
C语言优点:
1、C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。
2、微软的MFC库博大精深,学会它可以让随心所欲地进行编程。
3、VC是微软制作的产品,与操作系统的结合更加紧密。
缺点:
对使用者的要求比较高,既要具备丰富的C语言编程经验,又要具有一定的Windows编程基础,它的过于专业使得一般的编程爱好者学习起来会有不小的困难。

C++语言优点:
1、C++语言的优点全部得以继承。
2、完全的可视化。
3、极强的兼容性,支持OWL、VCL和MFC三大类库。
4、编译速度非常快。
缺点:
由于推出的时间太短,关于它的各种资料还不太多。
2.对第一题中的语言,论述其在调试过程中出现的问题和错误种类。
1、   atal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value
“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)。 
 
错误种类:
语法错误,比如关键字拼写错误。
逻辑错误,比如本来要需要计算和,却在编程的过程将加号误写为减号,结果输出了差。
运行时错误,比如在运行的过程中,空间耗尽。
 
3.列举程序漏洞种类,以及如何系统性的避免这些漏洞。

1、软件编写存在bug
无论是服务器程序、客户端软件还是操作系统,只要是用代码编写的东西,都会存在不同程度的bug。Bug主要分为以下几类:
(1) 、缓冲区溢出:指入侵者在程序的有关输入项目中了输入了超过规定长度的字符串,超过的部分通常就是入侵者想要执行的攻击代码,而程序编写者又没有进行输入长度的检查,最终导致多出的攻击代码占据了输入缓冲区后的内存而执行。别以为为登录用户名留出了200个字符就够了而不再做长度检查,所谓防小人不防君子,入侵者会想尽一切办法尝试攻击的途径的。
(2)、意料外的联合使用问题:一个程序经常由功能不同的多层代码组成,甚至会涉及到最底层的操作系统级别。入侵者通常会利用这个特点为不同的层输入不同的内容,以达到窃取信息的目的。例如:对于由Perl编写的程序,入侵者可以在程序的输入项目中输入类似“mail</etc/passwd”的字符串,从而使perl让操作系统调用邮件程序,并发送出重要的密码文件给入侵者。借刀杀人、借Mail送“信”,实在是高!
(3) 、不对输入内容进行预期检查:有些编程人员怕麻烦,对输入内容不进行预期的匹配检查,使入侵者输送炸弹的工作轻松简单。
(4)Raceconditions:多任务多线程的程序越来越多,在提高运行效率的同时,也要注意Raceconditions的问题。比如说:程序A和程序B都按照“读/改/写”的顺序操作一个文件,当A进行完读和改的工作时,B启动立即执行完“读/改/写”的全部工作,这时A继续执行写工作,结果是A的操作没有了表现!入侵者就可能利用这个处理顺序上的漏洞改写某些重要文件从而达到闯入系统的目的,所以,编程人员要注意文件操作的顺序以及锁定等问题。
2、系统配置不当
(1) 、默认配置的不足:许多系统安装后都有默认的安全配置信息,通常被称为easy to use。但遗憾的是,easy to use还意味着easy to break in。所以,一定对默认配置进行扬弃的工作。
(2)、 管理员懒散:懒散的表现之一就是系统安装后保持管理员口令的空值,而且随后不进行修改。要知道,入侵者首先要做的事情就是搜索网络上是否有这样的管理员为空口令的机器。
(3) 、临时端口:有时候为了测试之用,管理员会在机器上打开一个临时端口,但测试完后却忘记了禁止它,这样就会给入侵者有洞可寻、有漏可钻。通常的解决策略是:除非一个端口是必须使用的,否则禁止它!一般情况下,安全审计数据包可用于发现这样的端口并通知管理者。
(4) 、信任关系:网络间的系统经常建立信任关系以方便资源共享,但这也给入侵者带来借牛打力、间接攻击的可能,例如,只要攻破信任群中的一个机器,就有可能进一步攻击其他的机器。所以,要对信任关系严格审核、确保真正的安全联盟。
3、口令失窃
(1) 、弱不禁破的口令:就是说虽然设置了口令,但却简单得再简单不过,狡猾的入侵者只需吹灰之力就可破解。
(2) 、字典攻击:就是指入侵者使用一个程序,该程序借助一个包含用户名和口令的字典数据库,不断地尝试登录系统,直到成功进入。毋庸置疑,这种方式的关键在于有一个好的字典。
(3) 、暴力攻击:与字典攻击类似,但这个字典却是动态的,就是说,字典包含了所有可能的字符组合。例如,一个包含大小写的4字符口令大约有50万个组合,1个包含大小写且标点符号的7字符口令大约有10万亿组合。对于后者,一般的计算机要花费大约几个月的时间才能试验一遍。看到了长口令的好处了吧,真正是一两拨千斤啊!
4、嗅探未加密通讯数据
(1)、共享介质:传统的以太网结构很便于入侵者在网络上放置一个嗅探器就可以查看该网段上的通讯数据,但是如果采用交换型以太网结构,嗅探行为将变得非常困难。
(2)、服务器嗅探:交换型网络也有一个明显的不足,入侵者可以在服务器上特别是充当路由功能的服务器上安装一个嗅探器软件,然后就可以通过它收集到的信息闯进客户端机器以及信任的机器。例如,虽然不知道用户的口令,但当用户使用Telnet软件登录时就可以嗅探到他输入的口令了。
(3)、 远程嗅探:许多设备都具有RMON(Remotemonitor,远程监控)功能以便管理者使用公共体字符串(publiccommunitystrings)进行远程调试。随着宽带的不断普及,入侵者对这个后门越来越感兴趣了。
5、设计存在缺陷
(1) 、 TCP/IP协议的缺陷:TCP/IP协议现在已经广为应用、但是它设计时却是在入侵者猖狂肆虐的今天之很早以前设计出来的。因此,存在许多不足造成安全漏洞在所难免,例如smurf攻击、ICMPUnreachable数据包断开、IP地址欺骗以及SYNflood。然而,最大的问题在于IP协议是非常容易“轻信”的,就是说入侵者可以随意地伪造及修改IP数据包而不被发现。现在Ipsec协议已经开发出来以克服这个不足,但还没有得到广泛的应用。
6、系统攻击
系统攻击是指某人非法使用或破坏某一信息系统中的资源,以及非授权使系统丧失部分或全部服务功能的行为。

 

4.请从“唱吧”和“微信”两款APP中,选择一款,画出系统结构图。注意:考虑前端、后端、数据流转。 

原文地址:https://www.cnblogs.com/xiawen/p/3073580.html