0
点赞
收藏
分享

微信扫一扫

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


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

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

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


C:类方法是可以调用其他类的static方法的。


D:可以在类方法中生成实例对象再调用实例方法。



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

*
.*
 ::
 
delete
// . .* :: ? : sizeof typeid


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

template <typename T1, typename T2>
 template <class T1, T2>
template <class T1, class T2>
 
template <typename T1; typename T2>



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<stdlib.h>
#include<string.h>
#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<stdio.h>
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<stdio.h>
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都会在初始大小空间用满时,系统自动增加其大小


举报

相关推荐

0 条评论