对于下面的答案,只是我自己的想法。不一定对,还有好多我没查到的,没给出答案。如果知道答案的,可评论,我会修改
1、以下哪些可以提升网络后台系统性能
A、数据库单独部署 B、负载均衡部署 C、增加缓存 D、增加备份设备
2、下面哪些方法可以提高系统对请求的并发处理能力
A、使用select/epoll等IO复用技术处理网络请求
B、对下行消息或者请求的回复消息进行包合并处理
C、发送消息之前对网络数据进行压缩
D、在系统和mysql之间增加dbproxy,把发往mysql的同步请求转为异步处理
3、 数据库表:user
字段:name,age,sex
索引1:age
索引1:age,sex
查询:年龄在20~30之间的用户数。
以下哪种查询可能是正确的?
A、select count(1) as cnt from user where age>=20 and age<=30
B、select count(age) from user where age between 20 and 30
C、select count(1) from user where age>=20 and age<=30 and sex is not null
D、select sum(age) from user where age>=20 and age<=30
4、假设有4台机器,它们之间的网络延迟小于1毫秒,及其之间的带宽是每秒10MB,现在其中一台机器上有数据大小为1GB的数据库,如果想把这台机器上的数据库备份到其他三台机器上(使每台机器都有完整的数据备份),最快大概需要多少时间(不考虑压缩)
A、300秒 B、200秒 C、150秒 D、100秒
5、以下程序的输出是
var a = 1; function funcA(){ alert(a); var a = 2; } funcA()
A、undefined 1 B、undefined 2 C、1 1 D、1 2
6、在C++中,有类型Foo声明如下
class Foo{ Public: virtual void func1(){} void func2(){} int data1; static int data2; }; int Foo::data2 = 1;
现有如下代码
Foo *p_foo = (Foo*)malloc(sizeof(Foo));
不考虑内存分配失败的情况,以下哪些语句会引起程序异常
A、p_foo->func1(); B、p_foo->func2(); C、p_foo->data1 = 1; D、p_foo->data2 = 1;
答案:A
A:虚函数必须要定义函数体,不加函数体的话要=0定义成纯虚函数
B:正常的函数,可以调用
C:成员变量,可调用
D:静态成员变量,为所有成员共享,当然可以赋值。因为前面已经初始化过了,没问题。
7、下列代码输出为啥
void Test( int Array[], int size ){ int Num = sizeof(Array)/sizeof(int); for( int i = 0; i<Num && i<size; ++i ) printf( "%d ", Array[i] ); } int main(){ int Array[] = {1,2,3,4}; Test( Array, sizeof(Array)/sizeof(int)); return 0; }
A、1 B、1 2 C、1 2 3 D、1 2 3 4
答案:A
Array[]作为函数参数的时候,其实传入的是一个int*的指针,故Num = 1;
所以只会输出1
8、下列代码可能的输出为啥
union U{ char* a; char b; }; struct S{ char *a; char b; }; union U2{ S s; U u; }; printf("%zu, ", sizeof(U)); printf("%zu, ", sizeof(S)); printf("%zu, ", sizeof(U2)); printf("%zu, ", sizeof(std::array<char, 2>)); printf("%zu, ", sizeof(char[2])); printf("%zu", sizeof(char*));
A、4 5 5 8 2 4 B、4 8 8 8 2 4 C、 4 5 5 2 3 4 D、8 16 16 2 2 8
答案:B
U为联合体,所有变量共享存储单元,char*为4字节,char为1字节,故4
S为结构体,为保持字节对齐,故8
U2联合体,同理,S为8字节,U为4字节,故8
std::array<char,2> 按道理为2才对
char[2] 为2字节
char*为4字节
9、在x86-64机器上,下面代码的打印是什么
char* string 1 = “tencent2018”; int size1 = sizeof(string1); int size2 = sizeof(*string2); char string2[100] = “tencent2018”; int size3 = sizeof(string2); printf(“%d, %d, %d”, size1, size2, size3 );
A、8,1,100 B、 8,12,100 C、 12,1,12 D、 12,12,12
答案:A
sizeof(string1)求的是指针的大小,64位系统为8
sizeof(*string1)求的是string1指向的't'的大小,为1
sizeof(string2)求数组的大小,为100。若用strlen(string2),长度则为12
10、以下代码,当输入是2018时,函数的返回值为
int func( int n ){ if(n>0) return n+func(n-1); else return 0; }
A、 2035153 B、 2037171 C、 2036162 D、 2034144
答案:B
求的其实是2018!阶乘。手算肯定来不及。
可以10为单位进行计算,1+2+3+4+5+6+7+8+9+10=55,最后一位为5。所以1+...+20=..0。
故1+...+2010=...5,5+1+2+3+4+5+6+7+8=...1。故选B
11、若数据元素序列11,12,13,7,8,9,23,4,5是采用下列排序方法之一得到的第二趟排序后的结果
A、冒泡排序 B、插入排序 C、选择排序 D、归并排序
答案:B
冒泡每次可选最大的一个数放到序列尾部
选择每次可选最大的一个数放到序列头部
归并第一次应该出现两两成序列,第二趟则四四成序列
两趟插入后,有三个数字排成序列,对的。
12、以下关于二叉树的描述错误的是
A、二叉树可以用数组进行存储,此时节点索引为i的父节点(如果存在)的索引可以用i/2向下取整获得
B、二叉树的前序序列和中序序列存在相同的可能性
C、在二叉树的非递归深度优先遍历中,我们需要记下每个待访问的点,而非递归的广度优先遍历则不需要
D、二叉查找树的最差查找时间为O(n),但通常可以达到O(logn)
答案为:A
A:要看下标从0还是从1开始,从0开始,则i的父节点为(i-1)/2 下取整;从1开始,则i的父节点为i/2下取整
B:当只存在右子树时,前序和中序相同
C:非递归深度优先遍历,可用栈记录下每个待访问的点,以便后续使用。非递归广度优先遍历则使用队列
D:二叉查找树最差的时候,只有一个子树,一直遍历到底,为O(n)。正常情况下,基本平衡是,可达到O(logn)
13、两种常用的稀疏矩阵压缩存储方式是
A、三元组和散列 B、二维数组和三维数组 C、散列和十字链表 D、三元组和十字链表
答案:D
14、设栈S和队列Q的初始状态均为空,元素abcdefg以此进入栈S。若每个元素出栈后立即进入队列Q,但7个元素出队的顺序是bdcfeag,则栈S的容量可能是
A、1 B、2 C、3 D、4
答案:C、D
a入栈,此时栈内为a;b入栈,栈内ab;b出栈入队列,栈内a;c入栈,栈内ac;d入栈,栈内acd;bc先后出栈入队列,栈内a;ef先后入栈,栈内aef;fea先后出栈入队列,栈空;最后g先入栈后出栈。
从这个流程可以看出,只要栈至少能容纳3个元素即可。故选C、D
编程题一题
小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌曲的先后顺序的情况下,请问有多少种组成歌单的方法。
输入描述:
每个输入包含一个测试用例
每个测试的第一行包含一个整数,表示歌单的总长度K(1<=K<=1000).
接下来的一行包含四个正整数,分别表示歌的第一种长度A(A<=10)和数量X(X<=100)以及歌的第二种长度B(B<=10)和数 量Y(Y<=100).保证A不等于B。
输出描述: 输出一个整数,表示组成歌单的方法取模。因为答案可能会很大,输出对1000000007取模的结果
输入示例:
5
2 3 3 3
输出示例:
9