腾讯2015春招pc客户端开发练习卷/腾讯2016研发工程师在线模拟笔试题

1 下列说法错误的有( )
在类方法中可用this来调用本类的类方法
在类方法中调用本类的类方法时可直接调用
在类方法中只能调用本类中的类方法

在类方法中绝对不能调用实例方法

//A:类方法是指类中被static修饰的方法,无this指针。

C:类方法是可以调用其他类的static方法的。
D:可以在类方法中生成实例对象再调用实例方法。

2 下列运算符,在C++语言中不能重载的是()
*
.*
::

delete

// . .* :: ? : sizeof typeid


3 下列的模板说明中,正确的有( )
template
template
template

template


4 In C++, which of the following keyword(s) can be used on both a variable and a function?
static
virtual
extern
inline
const

5 Which of the following statement(s) equal(s) value 1 in C programming language?
the return value of main function if program ends normally
return (7&1)
char *str="microsoft"; return str=="microsoft"
return "microsoft"=="microsoft"

None of the above

6 下列定义语句中,错误的是
int px*;
char*acp[10];
char(*pac)[10];
int(*p)();

7 抽象基类是指( )
嵌套类
派生类
含有纯虚函数
多继承类

8 给出以下定义,下列哪些操作是合法的?
const char *p1 = “hello”;
char *const p2 = “world”;

p1++;
p1[2] = ‘w’;
p2[2] = ‘l’;
p2++;
//
p1是指向字符常量的指针,p1本身不是常量,所以p1++合法,A正确。
p2本身是指针常量,可以指向非常量的字符。但是"hello"这样声明的字符串是存储在只读存储区的,不可修改,
所以B,C,D都错误。

9 关于IP地址下列说法错误的是?
IP地址采用分层结构,它由网络号与主机号两部分组成
根据不同的取值范围IP地址可以分为五类
202.112.139.140属于B类地址
每个C类网络最多包含254台主机
IPv6采用128位地址长度
A类,B类和C类地址为内部私有地址


10 对于二分查找算法下面描述正确的是哪个?
只能用于数组
只能用于链表
只能在已经排序的数据上进行查找
最坏情况下时间复杂度是O(N*logN)
// O(logN).

11 用来检查到一台主机的网络层是否连通命令是( )?
PING
TRACERT
TELNET
IPCONFIG

12 类B从类A派生,则类B可以访问类A中的( )成员?
public成员
private成员
protected成员
数据成员
函数成员


13 路由器转发数据包到非直接网段的过程中,依靠下列哪一个选项来寻找下一跳地址( )
帧头
IP报文头部
SSAP子段
DSAP子段


14 IPv6地址占____个字节
4
6
8
16

15 以下说法正确的是:
在并行程度中,当两个并行的线程,在没有任何约束的情况下,访问一个共享变量或者共享对象的一个域,而且至少要有一个操作是写操作,就可能发生数据竞争错误。
原语Compare-and-swap(CAS)是实现无锁数据结构的通用原语。
获得内部锁的唯一途径是:进入这个内部锁保护的同步块或方法。
volatile变量具有synchronized的可见性特性,但是不具备原子特性。
减小竞争发生可能性的有效方式是尽可能缩短把持锁的时间


16 调用动态连接库的函数有哪几种方法?

调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。 2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。

17 WM_QUIT消息的用途是什么?一个普通的Windows窗口能收到的最后一条消息是什么?

WM_QUIT是消息队列的消息。其用途是退出消息循环。最后一条消息是WM_QUIT。

18有pqueue.h如下
#ifndef HEADER_PQUEUE_H
#define HEADER_PQUEUE_H
typedef struct_pqueue{
    pitem *items;
     int count;
}pqueue_s;
typedef struct_pqueue *pqueue;
typedef struct_pitem{
    unsigned char priority[8];
    void *data;
    struct_pitem *next;
}pitem;
typedef struct_pitem *piterator;
pitem *pitem_new(unsigned char *prio64be,void *data);
void pitem_free(pitem *item);
  
pqueue pqueue_new(void);
void pqueue_free(pqueue pq);
pitem *pqueue_insert(pqueue pq,pitem *item);
pitem *pqueue_peek(pqueue pq);
pitem *pqueue_pop(pqueue pq);
pitem *pqueue_find(pqueue pq,unsigned char *prio64be);
pitem *pqueue_iterator(pqueue pq);
pitem *pqueue_next(piterator *iter);
int pqueue_size(pqueue pq);
#endif /*! HEADER_PQUEUE_H */
pq_test.c如下:
#include
#include
#include"pqueue.h"
/*remember to change expected.txt if you change there values*/
unsigned char prio1[8]="supercal";
unsigned char prio2[8]="ifragili";
unsigned char prio3[8]="sticexpi";
static void
pqueue_print(pqueue pq)
{
     pitem *iter,*item;
     iter=pqueue_iterator(pq);
     for(item=pqueue_next(&iter);item!=NULL;
         item=pqueue_next(&iter)){
         printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n",
             item ->priority[0],item->priority[1],
             item ->priority[2],item->priority[3],
             item ->priority[4],item->priority[5],
             item ->priority[6],item->priority[7],
         }
}
int main(void)
{
     pitem *item;
     pqueue pq;
     pq=pqueue_new();
     item=pitem_new(prio3,NULL);
     pqueue_insert(pq,item);
  
     item=pitem_new(prio1,NULL);
     pqueue_insert(pq,item);
  
     item=pitem_new(prio2,NULL);
     pqueue_insert(pq,item);
     item=pqueue_find(pq,prio1);
     fprintf(stderr,"found %p\n",item->priority);
     item=pqueue_find(pq,prio2);
     fprintf(stderr,"found %p\n",item->priority);
  
     item=pqueue_find(pq,prio3);
     fprintf(stderr,"found %p\n",item->priority);
      
     pqueue_print(pq);
     for(item=pqueue_pop(pq);item!=NULL;item=pqueue_pop(pq))
     pitem_free(item);
  
     pqueue_free(pq);
     return 0;
}
pq_test.sh如下:
1
2
3
#!/bin/sh
set -e
./pq_test | cmp $srcdir/pq_expected.txt-
pq_expected.txt如下:
item 6966726167696c69
item 7374696365787069
item 737570657263616c
1.根据测试代码描述pqueue的工作原理。

2.请实现 pitem *pqueue_insert(pqueue pq,pitem *item);



腾讯2016研发工程师在线模拟笔试题

1 32位系统中,定义**a[3][4],则变量占用内存空间为()。
4
48
192
12

2 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()。
Oxf8b821c4
Oxf8b821a6
Oxf8b82198
Oxf8b821c0
x[4][4]这个元素的地址是Oxf8b82140,则 x[4][9]的地址是Oxf8b82140+5= Oxf8b82145,它与x[9][9这个元素刚好差5行,所以每行的元素个数为{ Oxf8b8221c- Oxf8b82145)/5=d7(十进制245)/5=43,所以x[]7[9]的地址是x[4][9]+3*43(十六进制81)= Oxf8b821c6,x[7][7]的地址=x[7][9-2]= Oxf8b821c4



3 线性表的长度为10,在最坏情况下,冒泡排序需要比较次数为()。
40
42
44
45

4 下面函数的时间复杂度是
long foo(long x){
    if(x<2) return 1;
        return x*x*foo(x-1);
}
O(N)
O(N^2)
O(N^2)
o(N!)


5 22个顶点的连通图中边的条数至少为()
18
20
21
23

n个顶点的连通图至少有n-1条边(树);
n个顶点的简单图(完全图)至少有n*(n-1)/2条边。
所以选C



6 写出下列代码的输出内容()
#include
int inc(int a)
{
   return (++a);
}
int multi(int *a,int *b,int *c)
{ 
  return (*c=*a* *b);
}
typedef int (FUNC1)(int in);
typedef int (FUNC2)(int*,int*,int*);
void show(FUNC2 fun,int arg1,int *arg2)
{
  FUNC1 p=&inc;
  int temp=p(arg1);
  fun(&temp,&arg1,arg2);
  printf("%d\n",*arg2);
}
int main()
{ 
   int a;
   show(multi,10,&a);
   return 0;
}
100
110
120
0
show(multi,10,&a); FUNC2类型函数指针fun 指向函数multi的首地址
FUNC1 p=&inc;  FUNC1类型 函数指针p 指向函数inc的首地址
int temp=p(arg1); 此时调用函数inc,参数为10,返回值为11
fun(&temp,&arg1,arg2); 调用函数multi,参数为(10,10,arg2) arg2为指针变量负责带回返回值
printf("%d\n",*arg2); 输出 110


7 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?
7
8
9
10
首先分为6组跑一次,6次
A1  A2  A3  A4  A5  A6
B1  B2  B3  B4  B5  B6
.........
每组的第一都跑一次, 一共为7次,取前三名,暂定为(A1 B1 C1),此时第一名已经定了 为A1

D组 E组 F组肯定直接被淘汰,他们的第一名都跑不进前三

接着ABC组缩小范围
A组 A2  A3 参加比赛,因为只有A1作为参照物,而A1是冠军 所有它俩都机会,A1>A2>A3
B组 B1  B2 参加比赛,B3跑输 B1 B2 ,B1跑输A1,因此B2之后的拿不到前三,A1>B1>B2
C组 C1 参加比赛,同理,A1>B1>C1

最后 A2 A3 B1 B2 C1 可以决出前三  A1陪跑哈,总共为8次



8 下面程序运行的结果是()。
#include
void add(int *p)
{
    (*p)++;
    printf("%d",*p);
    if (*p>5)
    {
        return;
    }
    add(p);
}
int main()
{
    int i=0;
    add(&i);
    return 0;
}
12345
123456
111111
未知


9 下列哪些http方法对于服务端和用户端一定是安全的?()
GET
HEAD
TRACE
OPTIONS
PSDT


10 一个系统,提供多个http协议的接口,返回的结果Y有json格式和jsonp格式。Json的格式为{"code":100,"msg":"aaa"},为了保证该协议变更之后更好的应用到多个接口,为了保证修改协议不影响到原先逻辑的代码,以下哪些设计模式是需要的?协议的变更指的是日后可能返回xml格式,或者是根据需求统一对返回的消息进行过滤。()
Aadapter
factory method

proxy
decorator
composite


11 对于定义"int *p",下列哪些说明可能是正确的?()
p是一个指向int型值的指针
p是一个指向一维数组的指针
p是一个指向二维数组的指针
p是一个动态数组


12 关于操作系统heap与stack说法中,正确的是()。
stack由编译器自动分配和释放,存放函数的参数值,局部变量,全局变量的值
heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
stack由系统自动分配,无需程序员干涉,heap需要手动申请

heap与stack都会在初始大小空间用满时,系统自动增加其大小

你可能感兴趣的:(腾讯2015春招pc客户端开发练习卷/腾讯2016研发工程师在线模拟笔试题)