中兴通讯实习生招聘笔试小记

2023-12-11 18:40

本文主要是介绍中兴通讯实习生招聘笔试小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

选择题中根据记忆挑选了几个有代表性的题目:

1、  Switch…Case语句中的参数类型

分析:这个是很基础的问题,Switch后面括号内的表达式,ANSI标准允许它为任何类型

Case后面括号内的表达式,只能是整型或字符型的常量或常量表达式。

2.         若有说明int i,j,k;则执行i=10;j=20;k=30;k*=i+j后k的值为900。

分析:a*=b相当于a=a*b,所以k*=i+j相当于k=k*(i+j)

3.         int i=1;

       int j;

       j=(i++)+(++i)+(i++);

运算结果为i=4,j=6

分析:虽然自增自减是C语言的基础语句,但是平时不会有人写出这么无聊混淆的语句除非它有病。无奈啊,中国的考官就是这么无聊,伤不起啊!!!下面是根据http://topic。csdn。net/u/20100329/23/2fc2d30e-3c79-4f55-ada6-cd7b3bbed3ba。html中复制过来的分析,分析得很好。

  (1)++i表示,i自增1后再参与其它运算;而i++ 则是i参与运算后,i的值再自增1。

  (2)i++的理解应该是执行完整个表达式的其他操作后,然后才自增,++j是先自增然后再参加其它运算。

 

例一:
  int i=3;
  int j=4;
  i++;
  ++j;
  printf("%d, %d/n", i, j);
对此,大家都不会有什么困惑,结果就是 4,5;下面我们来做一点小改动:

  int i=3;
  int j=4;
  int a = i++;
  int b = ++j;
  printf("%d, %d/n", a, b);
结果又是多少呢?这里就开始体现出++前置与后置的区别了,结果是3,5。结合此例,我们回头再来理解一下“++前置:i自增1后再参与其它运算;++后置:i参与运算后,i的值再自增1”。很明显,a = i++;由于是先执行赋值运算,再自增,所以结果是a=3,i=4;而b = ++j;
则因先自增,然后再赋值,所以b,j均为5。

其实基本道理就这么简单了,但在更复杂点的情况下又会如何呢,请看:
例二:
  int i=3;
  int j=4;
  int a = i++ + i++;
  int b = ++j + ++j;
  printf("%d, %d/n", a, b);

问题又来了,i++ + i++是先自增一次,相加,再自增,然后赋值呢,还是先相加赋值然后自增两次呢。另外,++j又将如何表现呢?
结果是:6,12
这下明白了,原来 i++的理解应该是执行完整个表达式的其他操作后,然后才自增,所以例子中的a=3+3=6;而后i再自增2次,i=5;相反,++j是先自增然后再参加其它运算,所以b=6+6=12。

到此,是否就彻底明了了呢?然后回到引子中的问题:
例三:
  int i=3;
  int j=4;
  int a = i++ + i++ + i++;
  int b = ++j + ++j + ++j;
  printf("%d, %d/n", a, b);
有人可能会说,这很简单,我全明白了:a=3+3+3=9,i=6,b=5+5+5=15,j=5。真的是这样吗?
结果却是:9,19
这下可好,又糊涂了。对于a = i++ + i++ + i++;我们已经没有疑问了,++后置就是执行完整个表达式的其他操作后,然后才自增,上例中也得到了验证,但 b = ++j + ++j + ++j;又该如何理解呢?
原理表达式中除了预算法本身的优先级外,还有一个结合性问题。在++j + ++j + ++j;中,因为存在两个同级的+运算,根据+运算符的左结合性,在编译时,其实是先处理前面的(++j + ++j)这部分,然后再将此结果再和++j相加。

例四:
  int i=1;
  int j=1;
  int a = i++ + i++ + i++ + i++ + i++ + i++ + i++; // 七个
  int b = ++j + ++j + ++j + ++j + ++j + ++j + ++j;
  printf("%d, %d/n", a, b);
  printf("%d, %d/n", i, j);
规则就是规则,咱的计算机可不是黑客帝国的母体,总是要遵循它的
a = 1+1+1+1+1+1+1 = 7, i=8
b = 3+3+4+5+6+7+8 = 36, j=8
一切OK,恭喜你还生活在21世纪的地球。注:以上结果及解释出自VC编译器,但对于++这个问题是和编译器的解析有关的,不同厂家可能理解不一致,因手头没有其他开发环境,暂无法做全面分析,本文只是为了说明++,--这运算符的一些特性,尤其是前置后置的区别这个问题。类似的问题如果有困惑,最好是写程序做试验解决,请勿生搬硬套。谢谢!在实际的编程实践中,类似的问题除了要试验搞清外,应该尽量避免引入环境相关的编程技巧。

 

4.         关系数据库中关系的完整性

a.域完整性

      域完整性是对数据表中字段属性的约束,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。

b.实体完整性

      实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。

c.参照完整性

      参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。

 

5.         GSM中UM接口(具体题目内容不记得了,此处简要分析)

分析:Um接口被定义为MS(mobile station)与BTS(Base Transceiver Station)之间的通信接口,也称为无线接口。在所有的GMS接口中,Um接口是最重要的。首先,完善的无线接口实现了各种制造商的移动台与不同运营商的网络间的兼容性,从而实现了移动台的漫游。其次,蜂窝系统的频谱效率是以关键的经济因素,它完全由无线接口上的传输决定。GSM无线传输的两个主要方面是:多址方式和信号处理。很明显,Um接口实现了MS到GSM系统固定部分的物理链接,即无线链路,同时它还传递了无线资源管理,、移动性管理和接续管理等信息。GSM系统使用类似OSI协议模型的简化协议,包括物理层(L1)、数据链路层(L2)和应用层(L3)。L1是协议模型最底层,提供物理媒介传输比特流所需的全部功能。L2保证正确传递消息及识别单个呼叫。在GSM系统中,无线接口(Um)上的L1和L2分别是TDMA帧和LAPDm协议。在网络侧,Abis接口和A接口使用的L1均为E1传输方式,L2分别为LAPD和MTP协议。在Um接口,MS每次呼叫时都有一个L1和L2层的建立过程,在此基础上再与网络侧建立L3上的通信。在网络侧(A和Abis接口),其L1和L2(SCCP除外)始终处于连接状态。L3层的通信消息按阶段和功能的不同,分为无线资源管理(RR)、移动性管理(MM)和呼叫控制(CC)三部分。

 

6.         static变量相关(考了几个题目,具体题目不记得了,下面对static用法做个总结)

(1)       修饰变量:

静态全局变量:作用域仅限于被定义的文件中,其他文件即使使用extern声明也没法使用,准确的说:作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它,要想使用就得在前面再加extern。

静态局部变量:在函数体里面定义,就只能在这个函数里用了,同一个文档中的其他函数也用不了。

(2)  修饰函数:函数的作用域仅局限于本文件。

 

问答题

1、  进程和线程的区别:

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

一个程序至少有一个进程,一个进程至少有一个线程。

进程有自己独立的地址空间,一个进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程程序要比多线程程序健壮,但在进程切换时耗费资源较大,效率要差一些,但对于某些要求同时进行且要共享某些变量的并发操作,不能用进程。

 

2、  中断服务程序的原理

保护现场->中断处理->恢复现场

 

3、  简述Stack Frame,并画出当函数A调用函数B时A和B各自的堆栈布局图

分析:笔试时此题知道概念描述不清楚,现在好好理一下。

大多数CPU上的程序实现使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息、临时保存寄存器原有值以备恢复以及用来存储局部数据。单个函数调用操作所使用的栈部分被称为栈帧结构,栈帧结构的两端有两个指针来指定。寄存器ebp通常用作帧指针,而esp则用作栈指针。在函数执行过程中,栈指针esp会随着数据的入栈和出栈而移动,因此函数中对大部分数据的访问都基于帧指针ebp进行。设在函数A中调用函数B,函数B中有两个形参m,n,则栈帧结构如下图:

调用之前:

 

 

调用之后:

 

 

两道编程题

1、  编写函数实现链表反转:

Struct node

{

       int data;

       struct node *next;

}

typedef struct node Node;已知头结点head。

程序实现:该题的原题是微软早年的经典面试题

[c-sharp]  view plain copy
  1. Node* ReverseIteratively(Node* pHead)  
  2. {  
  3.     Node* pReversedHead = NULL;  
  4.     Node* pNode = pHead;  
  5.     Node* pPrev = NULL;  
  6.     while(pNode != NULL)  
  7.     {  
  8.         // get the next node, and save it at pNext  
  9.         Node* pNext = pNode->Next;  
  10.         // if the next node is null, the currect is the end of original   
  11.         // list, and it's the head of the reversed list  
  12.         if(pNext == NULL)  
  13.             pReversedHead = pNode;  
  14.           
  15.         // reverse the linkage between nodes  
  16.         pNode->pNext = pPrev;  
  17.           
  18.         // move forward on the the list  
  19.         pPrev = pNode;  
  20.         pNode = pNext;  
  21.     }  
  22.       
  23.     return pReversedHead;  
  24. }  

2、    用递归法实现整型数到字符串的转换,例如:输入1234,转换后得到“1234”,输入整数的范围不超过5位。

 

程序实现:

[c-sharp]  view plain copy
  1. #include <stdio.h>  
  2. #define M 6  
  3.   
  4. void intToString(char *p,int origin)  
  5. {  
  6.   if(origin/10==0)  
  7.   {  
  8.       p[0]=origin%10+'/0';  
  9.         
  10.   }  
  11.   else  
  12.   {  
  13.     intToString(p+1,origin/10);  
  14.   }  
  15.   
  16. }  
  17.   
  18. int main()  
  19. {  
  20.     char s[M];  
  21.     int i;  
  22.     scanf("%d",&i);  
  23.     if(i>65535||i<-65535)  
  24.         return -1;  
  25.     intToString(&s[0],i);  
  26.     printf("/n%s",s);     
  27.     return 0;     
  28. }  

这篇关于中兴通讯实习生招聘笔试小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481710

相关文章

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

未雨绸缪:环保专包二级资质续期工程师招聘时间策略

对于环保企业而言,在二级资质续期前启动工程师招聘的时间规划至关重要。考虑到招聘流程的复杂性、企业内部需求的变化以及政策标准的更新,建议环保企业在二级资质续期前至少提前6至12个月启动工程师招聘工作。这个时间规划可以细化为以下几个阶段: 一、前期准备阶段(提前6-12个月) 政策与标准研究: 深入研究国家和地方关于环保二级资质续期的最新政策、法规和标准,了解对工程师的具体要求。评估政策变化可

两道笔试题

“char a='\72'”是什么意思? 这么理解:\为转义字符,\072转义为一个八进制数072,也就是十进制数的58买一送一,将转义字符对照表也一并贴给你吧:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答