腾讯笔试题目准备

3 下列排序算法中,哪些时间复杂度不会超过nlogn?(BC)

A.快速排序 B.堆排序 C.归并排序 D.冒泡排序

7 Unix系统中,哪些可以用于进程间的通信?(ABCD)

A.Socket B.共享内存 C.消息队列 D.信号量


4下列哪些可以用于Linux进程间通讯?A B C D E
UNIX套接字
信号量
无名管道
文件锁
共享内存

4以下关于死锁,描述正确的有()(银行家算法就是用来避免死锁的)
正确答案: A C 
A有序分配锁资源可以预防死锁
B银行家算法是用于检测死锁的
C剥夺死锁进程的所有资源可以解除死锁
D以上描述都不对


5若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()11

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1 


6列属于android常用的跨进程通信工具有:
正确答案: A B 你的答案: A C (错误)
broadcast
AIDL
handler

handler是跨线程

7以下属于ios常用的多线程编程组件有:
正确答案: A B C 你的答案: B C (错误)
GCD
NSOperationQueue
NSThread

8以下代码的运行情况: cba输出
int f(int a, int b, int c)
{
return 0;
}
int main(){
return f(printf("a"),printf("b"),printf("c"));
}

该题考察函数的参数传递:
当用函数做实参时,编译器一般会根据参数传递顺序,先计算出函数的返回值,然后将返回值传递给原来的函数。
在x86架构(Linux或Unix系统)上,函数的参数是通过栈传递的。因此参数从右往左入栈顺序是:printf("c"),printf("b"),printf("a")。依次计算出结果:cba
在x86_64架构(Linux或Unix系统)上,函数的前6个参数是通过寄存器传递的,超出6个的部分(如第7个参数,第8个参数等等)通过栈传递。因此参数进寄存器顺序是:printf("a"),printf("b"),printf("c")。依次计算出结果:abc

9在Linux上,对于多进程,子进程继承了父进程的下列哪些?
正确答案: B C D 你的答案: E (错误)
进程地址空间
共享内存
信号掩码
已打开的文件描述符
以上都不是

子进程继承父进程、用户号UIDs和用户组号GIDs、环境Environment、堆栈、共享内存、打开文件的描述符、执行时关闭(Close-on-exec)标志、信号(Signal)控制设定、进程组号、当前工作目录、根目录、文件方式创建屏蔽字、资源限制、控制终端
子进程独有、进程号PID、不同的父进程号、自己的文件描述符和目录流的拷贝、子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)、不继承异步输入和输出
父进程和子进程拥有独立的地址空间和PID参数。
子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。

10文件系统管理的最小磁盘空间单位是()

正确答案: C 你的答案: A (错误)
扇区
页面

文件

11下面关于DNS说法正确的是()
正确答案: A B C 你的答案: A (错误)

DNS的作用是域名和IP地址的相互映射
DNS协议运行在UDP协议之上
DNS协议端口号为53
DNS的默认缓存时间为1小时(操作系统DNS1天,浏览器,很短)

主要用UDP,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输。

12下列说法错误的是?
正确答案: B 你的答案: C D E (错误)

struct声明的类型是值类型
值类型是在堆上分配的
值类型不会被垃圾回收
值类型不需要指针来引用
引用类型在堆上分配,值类型在栈上分配

13:针对二分查找算法,假设一个有序数组有 136 个元素,那么要查找到第 10 个元素, 需要比较的元素为()
正确答案: B 你的答案: A (错误)

68,34,17,9,13,11,10
68,34,17,8,12,10

看二分法实现细节,取中值时:mid=low+((high-low)/2);

14是取左中值哪些设计模式是降低资源使用率:
正确答案: B C 你的答案: B (错误)

prototype
singleton
flyweight
abstract factory

享元模式(Flyweight): 基于共享技术用于把一些共同的信息(或模块)抽象出来,避免了大量相似类的开销,也降低了资源的使用率。

15在数据库系统中,产生不一致的根本原因是( )
正确答案: D 你的答案: C (错误)

数据存储量太大
没有严格保护数据
未对数据进行完整性控制
.数据冗余

数据库中可能存在不一致的数据,主要有以下三个方面:
A.数据冗余;
B.并发控制不当;
C.故障或者错误


16在UNIX系统中,目录结构采用( )
正确答案: D 你的答案: C (错误)

单级目录结构
二级目录结构
单纯树形目录结构
带链接树形目录结构

17请问下面的程序一共输出多少个“-”? 8
int main(void)
{
int i;
for (i = 0; i < 2; i++) {
fork();
printf("-");
}
return 0;

一共调用了6次printf,但是会输出8个-。因为父进程的输出缓冲也会被子进程复制(因为不是"-\n"这个是直接输出)
fork(); // i=0
 printf("-"); // buffer="-"
 fork(); // i=1
     printf("-"); // +1
  printf("-");
printf("-")
fork(); // i=1
 printf("-"); // +1
printf("-")

18下列运算符,在C++语言中不能重载的是()
正确答案: B C 你的答案: C (错误)
*
.*
::
operator delete

除了 . , .* , :: , ? : , sizeof , typeid 这几个运算符不能被重载

19in C++, which of the following keyword(s) can be used on both a variable and a function?
正确答案: A C E 你的答案: A E (错误)

static
virtual
extern
inline
const

static 静态变量和静态函数都可以在类外直接访问,
extern 可以用于声明变量,但是函数声明也可以用,只不过默认就是extern而已。
const也可以修饰函数或者变量

20给出以下定义,下列哪些操作是合法的?
const char *p1 = “hello”;
char *const p2 = “world”;
正确答案: A 你的答案: C (错误)

p1++;
p1[2] = ‘w’;
p2[2] = ‘l’;
p2++;

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


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

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

22将一组无序的正整数重新排列成有序序列,其方法有()
正确答案: B C D 你的答案: B C (错误)

拓扑排序
快速排序
堆排序
基数排序

基数排序,是基于,个位十位百位这样的排序

23

test.c文件中包括如下语句:
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a,b;
int_ptr c,d;
文件中定义的四个变量中,哪个变量类型不是指针类型?
正确答案: B 你的答案: E (错误)
a
b
c
d

#define INT_PTR int* 这是宏定义,编译预处理阶段要进行宏替换,INT_PTR a,b会变成 int* a,b 所以b不是指针类型,b是int
typedef int* int_ptr; 这是自定义类型,也就是把int_ptr定义为 int型指针,编译阶段会把c,d都识别为指针


24static函数与普通函数有什么区别?

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

25什么函数不能声明为虚函数?

1,静态成员函数不可以是虚函数,因为静态成员函数全局通用,不受限于某个具体对象
2,构造函数不可以是虚函数,虚函数主要是针对对象而言,而构造函数是在对象创建之前,所以构造函数的虚函数是没有意义的
3,内联函数不可以是虚函数,因为内联函数不能再运行中动态确定其位置


26不能做switch()的参数类型是:

除了整型,枚举类型,字符型,其他的都不行。譬如:字符串,浮点型这些都不可以作为switch的参数类型。

27随着IP 网络的发展,为了节省可分配的注册IP 地址,有一些地址被拿出来用于私有IP 地址,以下不属于私有IP 地址范围的是
正确答案: C 你的答案: D (错误)

10.6.207.84
172.23.30.28
172.32.50.80
192.168.1.100

注解:私有IP地址共有三个范围段:
A:10.0.0.0~10.255.255.255 /8
B:172.16.0.0~172.31.255.255 /12
C:192.168.0.0~192.168.255.255 /16


28已知rand7()可以产生1~7的7个数(均匀概率),利用rand7() 产 生 rand10() 1~10(均匀概率)。

产生指定范围内的随机数就要求指定范围内每个数的产生概率都是相等的。
由于无法直接通过rand7()产生1-10的数,所以就要思考如何组合rand7()生成1~10n之间的数。
为了讨论方便,更符合我们平时使用的习惯,我们将rand7() - 1,就表示生成的是0~6之间的随机数。
i = rand7() - 1, j = rand7() - 1
那么7 * i + j 就可以看出一个7进制的数范围为00~66(转换为十进制就是0~48),而且这些7进制数的产生概率都是一样的,每个数都是1/48,所以我们取0~39的这40个数,它们的概率也是相同的。余10加1就实现了rand10()。


29在下列排序方法中,不稳定的方法有:

不稳定排序的意思是在排序过程中,相等的两个数比较之后不会改变其原来的位置,即不需要交换。
常见的稳定排序有:
冒泡排序,插入排序,归并排序,基数排序。
常见的不稳定排序有:
选择排序,堆排序,希尔排序,快速排序。


30同一进程下的线程可以共享以下?
正确答案: B D 你的答案: A B (错误)

stack
data section
register set
file fd

解析: 线程共享的内容包括:
1.进程代码段
2.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)
3.进程打开的文件描述符、
4.信号的处理器、
5.进程的当前目录和
6.进程用户ID与进程组ID
线程独有的内容包括:
1.线程ID
2.寄存器组的值
3.线程的堆栈
4.错误返回码
5.线程的信号屏蔽码


31同步机制应该遵循哪些基本准则?
正确答案: A B C D 你的答案: A C D (错误)

空闲让进
忙则等待
有限等待
让权等待.

同步机制应该遵循的基本准则
· 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,允许一个请求进入临界区的进程立即进入临界区,以有效利用临界资源
· 忙则等待:当已有进程处于临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问
· 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态
· 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态


32设计模式中,属于结构型模式的有哪些?

正确答案: B C 你的答案: A B C D (错误)

状态模式
装饰模式
代理模式
观察者模式

结构型设计模式是从程序的结构上解决模块之间的耦合问题。包括以下七种模式:
1. Adapte适配器模式 2. Bridge 桥接模式 3. Composite 组合模式 4.Decorator装饰模式
5. Facade 外观模式 6. Flyweight 享元模式 7. Proxy 代理模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值