2013搜狐实习生招聘笔试题

一、不定项选择题

1、HTTP状态码500代表什么含义(C)

A、请求资源未在服务器上发现

B、请求成功,相应的响应头或数据包丢失

C、服务器错误

D、返回时间500ms

注解:

HTTP状态码:

500 :Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

404: Not Found请求失败,请求所希望得到的资源未被在服务器上发现。

2、下面那些不是链表的特点(B)

A、插入不需要移动

B、快速随即访问一个节点

C、所需存储空间与线性表长度成正比

D、不用预估计存储大小

3、向一个栈找push下列元素,ABCDE,其pop可能的顺序不正确的是(D)

A、EDCBA

B、DECBA

C、ABCDE

D、DCEAB

4、下面哪些不属于面向对象的特征的是(D)

A、继承

B、抽象

C、封装

D、反射

5、mysql数据表有三个字段A、B、C,建立联合索引ABC,查询一下字段不需要联合索引的是(D)

A、AB

B、AC

C、BC

D、C

6、TCP/UDP下面正确的是(B)

A、both TCP and UDP provide reliability service

B、TCP provide connection-oriented services

C、TCP cannot provide flow control

D、Both TCP and UDP provide retransmission services

注解:UDP是没有保障的。

7、给出下面java代码,

Class Test{

private int a;

public static void fun(){…}

}

如何使成员变量a被函数fun()直接访问?(B)

A、将private int a改成protected int a

B、 将private int a改成static int a

C、 将private int a改成public  int a

D、将private int a改成nt a

8、产生死锁的四个必要条件是:互斥、(A)、循环等待和不可强占。

A、请求与保持

B、保持阻塞

C、请求与阻塞

D、独立执行

9、下列属于稳定的排序算法的是(A)

A、插入排序

B、快速排序

C、堆排序

D、选择排序

1.稳定的排序
冒泡排序(bubble sort) — O(n2) 
鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2) 
插入排序 (insertion sort)— O(n2) 
桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体 
计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体 
归并排序 (merge sort)— O(n log n); 需要 O(n) 额外记忆体 
原地归并排序 — O(n2) 
二叉树排序 (Binary tree sort) — O(n log n); 需要 O(n) 额外记忆体 
鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外记忆体 
基数排序 (radix sort)— O(n·k); 需要 O(n) 额外记忆体 
Gnome sort — O(n2) 
Library sort — O(n log n) with high probability, 需要 (1+ε)n 额外记忆体 
2.不稳定的排序
选择排序 (selection sort)— O(n2) 
希尔排序 (shell sort)— O(n log n) 如果使用最佳的现在版本 
Comb sort — O(n log n) 
堆排序 (heapsort)— O(n log n) 
Smoothsort — O(n log n) 
快速排序 (quicksort)— O(n log n) 期望时间, O(n2) 最坏情况; 对於大的、乱数串列一般相信是最快的已知排序 
Introsort — O(n log n) 
Patience sorting — O(n log n + k) 最外情况时间, 需要 额外的 O(n + k) 空间, 也需要找到最长的递增子序列(longest increasing subsequence)

10、下面哪些项是一个典型的优势来实现分布式对象系统(ABCDE)

A、增加可扩展性

B、利用多个CPU

C、允许可伸缩性

D、数据/服务可靠性

E、实现了ACID特性

11、输入1 2 3 4 5 0,选择输出

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int s;
    scanf("%d",&s);
    while(s >0)
    {
        switch(s)
        {
            case 1:printf("%d",s+5);
            case 2:printf("%d",s+4);break;           
            case 3:printf("%d",s+3);
            default: printf("%d",s+2);break;
        }
        scanf("%d",&s);
    }
    system("pause");
}

这段代码输入1 2 3 4 5 0回车,输出结果是(A)

A、6566567

B、65665672

C、66667

D、666672

12、unsigned short hash(unsigned short key){return (key>>4)%256;}

请问hash(16),hash(256)的值分别是(A)

A、1,16

B、8,32

C、4,16

D、1,32

13、设fop已定义,执行语句fop=fopen(“file”,”w”);后,以下针对文本file进行操作正确的是(D)

A、写操作结束后可以从头开始读

B、可以在原有内容后追加写

C、可以随意读和写

D、只能写不能读

14、linux的cron后台常驻程序(daemon)用于(D)

A、负责文件在网络找的共享

B、管理打印子系统

C、跟踪管理系统信息和错误

D、管理系统日常任务的调度

15、一下数据结构找不属于线性数据结构的是(C)

A、队列

B、线性表

C、二叉树

D、栈

注解:

线性结构中的数据元素之间是一种线性关系,数据元素一个接一个地排列。

常用的线性结构有:线性表,栈,队列,循环队列,数组。线性表中包括顺序表、链表等。

数据结构分类:

16、SQL语言是什么语言(C)

A、层次数据库

B、网络数据库

C、关系数据库

D、非数据库

17、设一棵二叉树找有3个叶子节点,有8个度为1的节点,则树中总得节点数为(B)

A、12

B、13

C、14

D、15

注解:

可以推导得出度为2的节点=叶子节点数-1.

18、下面有关测试原则的说法的说法不正确的是(BCD)

A、测试用例应由测试的输入数据和语句的输出结果两部分组成

B、测试用例可自选合理的输入数据

C、程序最好由编写该程序的程序员自己来测试

D、使用测试用例进行测试是为了检查程序员是否做错了他该做的事情

19、属于网络层协议的是(B)

A、TCP

B、IP

C、UDP

D、FTP

注解:

各层:协议

互联网层:IP

传输层:TCP、UDP

应用层:TELNET、FTP、SMTP、WWW等

20、下列编码中汉字一般占用3个字节的是(B)

A、GBK

B、UTF-8

C、ASCII

D、Unicode

注解:GBK:汉字占2字节。Unicode:2字节。无论是ASCII码还是EBCDIC码,都无法对拥有几万个的汉字进行编码。

1、在linux下,填写完成如下操作的命令。

查看java进程数(ps | grep java)

查看磁盘空间(df)

2、栈操作的原则(先入后出)

队列操作的原因是(先入先出)

3、线程的几种基本状态(就绪、阻塞和运行)

4、对一批编号为1-100的全部或开关朝上(开)的灯进行一下操作,凡是1的倍数的朝反方向拨一次,全部是2的倍数的又拨一次,3的倍数的反方向又拨一次。。。最后开挂不能熄灭的是(平方数)。

注解:拨开关的次数必须满足一个条件:约数的个数是奇数个。

5、若某二叉树的前序遍历访问顺序是abdgcefi,中序顺序是dgbaecif。那么后续遍历访问顺序是(gdbeifca)

 

1、介绍一下设计模式的工厂模式和单例模式,并实现一个单例模式。

这个google搜索一大堆。

 

2、快速排序法事应用最广泛的排序算法之一,最佳情况下时间复杂度是O(nlogn)。但是最坏情况下可能达到O(n^2)。说明快速排序达到最坏情况的原因。并提出改善方案并实现之。

答:出现坏情况的原因是每次选定枢轴进行划分之后所得的两部分不均衡,导致直到有序所需的划分次数很大。

改善方案:

改变枢轴的选取方法。

每次随机选择一个枢轴进行划分。

#include <iostream>
#include <ctime>//time
#include <cstdlib>//rand
#include <algorithm>//swap
 
using namespace std;
 
//划分-普通版本
template <class KeyType>
int partition(KeyType *a,int low,int high)
{
       //int pivotKey = *(a + high);
       //int i = low;
       //int j = high - 1;
       //while(i < j)
       //{
       //     while(i < j && pivotKey > *(a + i))
       //            ++i;
       //     while(i < j && pivotKey < *(a + j))
       //            --j;
       //     if(i < j)
       //            swap(*(a + i),*(a + j));
       //}
 
       ////将枢轴放到正确的位置
       //if(*(a + i) > *(a + high))
       //     swap(*(a + i),*(a + high));
 
       //版本2
       int pivotKey = *(a + low);
       while(low < high)
       {
              while(low < high && *(a + high) > pivotKey)
                     --high;
              *(a + low) = *(a + high);
              while(low < high && *(a + low) < pivotKey)
                     ++low;
              *(a + high) = *(a + low);
       }
       *(a + low) = pivotKey;
 
       //return i;
 
       return low;
}
 
//划分-随机化版本
template <class KeyType>
int partitionRandomized(KeyType *a,int low,int high)
{
       //随机选取一个数作为枢轴
       //随机生成[low,high]中的一个数,作为枢轴的索引
       srand(time(NULL));
       int pivotKeyIndex = rand() % (high - low + 1) + low;
      
       //交换数组中最后一个元素与枢轴
       swap(*(a + high),*(a + pivotKeyIndex));
 
       return partition(a,low,high);
}
 
//快排-普通版本
template <class KeyType>
void QuickSort(KeyType *a,int low,int high)
{
       if (low < high)
       {
              int mid = partition(a,low,high);
              QuickSort(a,low,mid - 1);
              QuickSort(a,mid + 1,high);
       }
}
 
//快排-随机化版本
template <class KeyType>
void QuickSortRandomize(KeyType *a,int low,int high)
{
       if (low < high)
       {
              int mid = partitionRandomized(a,low,high);
              QuickSort(a,low,mid - 1);
              QuickSort(a,mid + 1,high);
       }
}
 
int main()
{
       const int num = 7;
       int a[num] = {4,2,7,9,3,0,6};
 
       /*QuickSort(a,0,num - 1);*/
 
       QuickSortRandomize(a,0,num - 1);
      
       for(int i = 0;i < num;++i)
              cout << *(a + i) << " ";
       cout << endl;
}

3、说说session和cokies的区别。

 

posted @ 2013-08-25 16:39  一枚程序员  阅读(1077)  评论(0编辑  收藏  举报