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