笔试真题解析 TT-2016 研发工程师在线模拟笔试题

1. 32位系统中,定义**a[3][4],则变量占用内存空间为()。
【解析】
a是一个数组,数组大小3*4,数组中存放着指针的指针,在32为系统下,指针大小4B,所以结果为4*3*4=48

2. 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()。
【解析】
假设每行有n个元素:
[9][9] - [4][4] = 21c-140=5n+5
[7][7] - [4][4]=x- 140 =3n+3
[7][7] = 140+3/5*( 21c-140 )= 1c4 

3. 线性表的长度为10,在最坏情况下,冒泡排序需要比较次数为()。
【解析】
最坏的情况即是每个元素两两都要相比较。故用排列组合的思想即为C(10,9)=45

4. 下面函数的时间复杂度是
long foo(long x){
    if(x<2) return 1;
        return x*x*foo(x-1);
}
【解析】
这里要从foo(1)一直计算到foo(n),因此时间复杂度为O(N)。

5. 22个顶点的连通图中边的条数至少为()

完全图是指任意两个结点之间都有一个边相连,也就是结点两两相连;连通图是指任意两个结点之间都有一个路径相连。

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


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;
}
【解析】
typedef int(FUNC1)(int in); 是函数指针定义
show(multi,10,&a); FUNC2类型函数指针fun 指向函数multi的首地址
FUNC1 p=&inc;  FUNC1类型 函数指针p 指向函数inc的首地址
int temp=p(arg1); 此时调用函数inc,参数为10, 将arg1=10自增, 返回值为11
fun(&temp,&arg1,arg2); 调用函数multi,参数为(11,10,arg2) arg2为指针变量负责带回返回,
*arg2=temp*arg1=11*10=110
printf("%d\n",*arg2); 输出 110


7. 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?
【解析】
36分成6组赛跑,每次取前三,将每组第一名拉出来跑一次,按照每组第一名的排列每组,也就是
A1 A2 A3
B1 B2 B3
C1 C2 C3
D1 D2 D3
E1 E2 E3
F1 F2 F3
此时,每一排是由快到慢,第一列是由快到慢。
因为,总共只需要最快的三个人,4-6排都不可能,然后C2、C3也不可能,因为A1、B1 、C1都比他们快,B3也不可能,因为A1、B1 、B2都比他快,A1一定是最快的,OK,只剩下5个人需要比一下2、3名。再跑一次。
所以,需要 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;
}
【解析】
当*p = 5时,会再调用add(p),然后先输出*p = 6,然后进行判断,直接跳出程序。所以,输出123456 。

9. 下列哪些http方法对于服务端和用户端一定是安全的?()
GET
HEAD
TRACE
OPTIONS
PSDT
【解析】
HEAD,GET,OPTIONS和TRACE视为安全的方法,因为它们只是从服务器获得资源而不对服务器做任何修改。而POST,PUT,DELETE和PATCH则影响服务器上的资源。
GET方法存在安全问题,GET提交数据时,用户名和密码出现在URL上 
TRACE: 请求服务器回送收到的请求信息,主要用于测试或诊断。所以是安全的。

10. 一个系统,提供多个http协议的接口,返回的结果Y有json格式和jsonp格式。json的格式为{"code":100,"msg":"aaa"},为了保证该协议变更之后更好的应用到多个接口,为了保证修改协议不影响到原先逻辑的代码,以下哪些设计模式是需要的?协议的变更指的是日后可能返回xml格式,或者是根据需求统一对返回的消息进行过滤。()
adapter
factory method
proxy
decorator
composite
【解析】
1.adapter:新增功能但不能修改原来代码,原来代码实现思路——标准接口Target定义interface, ConcreteTarget就是当前解析json的类(实现 Target接口 ); 新增功能这样实现—— Adaptee是新增功能的所属类,Adapter实现 Target接口并集成 Adaptee,这样的 Adapter就有了新的功能了,因此需要适配器模式。调用实例如下:
public static void main(String[] args) {
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();
// 使用特殊功能类,即适配类
Target adapter = new Adapter();
adapter.request();
}
2. 工厂模式: 为多个http协议的接口,在客户端代码中,告诉要请求的接口名称,会调用不同的类来处理,显然是工厂方法
4. 装饰者模式,是用来动态添加功能的,就是过滤 消息,比如非法字符&&&之类的,消息过长之类;
为了保证该协议变更之后更好的应用到多个接口    适配器模式;
为了保证修改协议不影响到原先逻辑的代码    协议的变更指的是日后可能返回xml格式     工厂模式;
或者是根据需求统一对返回的消息进行过滤   装饰模式;
所以 选择 A B D

11. 对于定义"int *p",下列哪些说明可能是正确的?()
p是一个指向int型值的指针
p是一个指向一维数组的指针
p是一个指向二维数组的指针
p是一个动态数组
【解析】
正确答案: A B D  

12. 关于操作系统heap与stack说法中,正确的是()。
stack由编译器自动分配和释放,存放函数的参数值,局部变量,全局变量的值
heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
stack由系统自动分配,无需程序员干涉,heap需要手动申请
heap与stack都会在初始大小空间用满时,系统自动增加其大小
【解析】
正确答案: B C  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值