展讯笔试题目:

1.给出字符串pszBuff, 将其全部转化为大写,a转化为A
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *convert(const char* dest)
{
    int ilen=0;
    char *tmp=(char *)dest;
    char *str;
   
    //strcpy(str,dest);
    while(*dest++) ilen++;
   
    str = (char *)malloc(ilen);

while(*tmp)
    {
        if ( (*tmp>'a') && (*tmp<'z')) {
            *str = *tmp + 'A' - 'a' ;
        }else{
            *str = *tmp;
        }
        str++;
        tmp++;
    }
   
    *str='\0';
    return str-ilen;
}

int main(int argc, char* argv[])
{
    const char pszBuff[] = "AbCd";
    char *cc;
    cc = convert(pszBuff);
    printf("%s",cc);
    getchar();
    return 0;
}

2. 给出输出结果,假设是CPU32位
int main(int argc, char* argv[])
{
    char *str="1234567890";
    long *pLong= (long *)str;
    char *pChar = str;
    pLong++;
    pChar++;
    printf("%d    %d    %s\n",sizeof(long),sizeof(pLong),pLong);
    printf("%d    %d    %s\n",sizeof(char),sizeof(pChar),pChar);
    printf("%d",sizeof(int));
    getchar();
    return 0;
}
答案:  4    4   567890
       1    4   234567890
       4

想把 0x12345678 从一台 x86 机器发送到另外一台 x86 机器

1. x86 机器是小端的,所以 0x12345678 在内存中的布局为 78 56 34 12;
2. 网络字节序是大端的,所以 0x12345678 在网络中的传输顺序为 12 34 56 78;可以这样理解,传输的顺序是从内存低地址到内存高地址依次传输,在传输之前先将小端的 78 56 34 12 转换为大端的 12 34 56 78,然后再按照内存低地址到内存高地址的顺序依次传输。
3. 在接收方,依次接收到的是 12 34 56 78,但是它本身是小端的,所以需要先将 78 存储在内存低地址,然后依次存储 56 34 12。

Part1  通信
GSM/GPRS/WCDMA区别
GSM的上下行频率

Part2  c语言
c语言中volatile的用处
链表与数组的区别
写出strcpy的c实现代码
求两个字符串的最大公共字符子串

Part3   智力题
一根非均匀绳子可以烧1小时,怎么用它定出15分钟?

两头点燃+中间点燃。一段烧光了,马上到另一段中间点燃。直到最后烧光。

你让工人为你工作7天,给工人的回报是一根金条。

金条平分成相连的7段,你必须在每天结束时给他们一段金条,
如果只许你两次把金条弄断,你如何给你的工人付费?

分成1,2,4三段。每天给一段,有时候要求找零。

Part4   英语
翻译:一段跟移动基站有关的英文技术文章

北京移动:

1,网络192.168.18.0采用255.255.255.240子网掩码划分子网时,那些是有效的主机地址? 192.168.18.33/.112/.119/.126/.175/.208(选择题)

字串3

2,GSM900和DCS1800的上下行频率分别是? 字串1

3,智能网的网络元素组成?

字串4

4,ping指令运行在OSI的哪层? 字串1

5,请写出英文全称:IMSI,HLR,VLR,MSC,TUP,SCCP

字串5

6,基站控制器BSC和基站BTS间的传输方式有哪些? 字串2


1. GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统,中国移动、中国联通各拥有一个GSM网,为世界最大的移动通信网络。GSM系统包括 GSM 900:900MHz、GSM1800:1800MHz 及 GSM-1900:1900MHz等几个频段

GPRS的英文全称为General Packet Radio Service,中文含义为通用分组无线服务,是通信公司的服务,可以利用他上网或一些数据的传输等等。
WCDMA 是一种由3GPP具体制定的,基于GSM MAP核心网,UTRAN(UMTS陆地无线接入网)为无线接口的第三代移动通信系统.
2.gsm900和dcs1900的上下行频率及射频带宽等
http://www.rfhy.com/gb2312/UploadFile/200562794926966.doc

什么是双工间隔?GSM系统、DCS1800的双工间隔是多少?

双工间隔指上下行频率之间的间隔,GSM为45MHz,DCS1800为95MHz。

900MHz

基本工作频带:          上行:890~915MHz

                    下行:935~960MHz

扩展工作频带:          上行:880~890MHz

                    下行:925~935MHz

dB、dBm、dBc、dBi的区别:

dB是个比值,不是单位;dBm是功率的单位;dBc常用互调方面,不常用;dBi是增益单位。

通信的时候在逻辑上需要两条链路:一条是出去的,一条是进来的(上行和下行);
上行是指信号从移动台(一般指手机)到基站(2G叫BTS,3G叫NODEB)到BSC
下行是指信号从BSC到基站(2G叫BTS,3G叫NODEB)到移动台(一般指手机)

这两条链路必须要分开,否则通信无法正常进行,由此产生双工模式。双工模式有2种:时分双工(TDD)和频分双工(FDD)
在TDD中,上下行链路靠时隙来区分,频率是一样的,  比如TD-SCDMA
在FDD中,上下行链路靠不同的频率来区分,同时收发,  比如WCDMA(FDD)
为了有效地区分开上下行频率,上行频率与下行频率必须有一定的间隔(保护带)
一般下行频率高于上行频率。

在GSM系统中,上行(接收)的频率为:880-915MHZ;下行(发射)频率为:925-960MHZ;
在我国GSM900的使用频率是:905-915MHZ(上行),950-960MHZ(下行)
移动的:下行(前向)950MHz-954MHz,  上行(反向)905MHz-909MHz共4M带宽,20个频道;
联通CDMA:下行 954MHz~960MHz  上行909MHz~915MHz共6M带宽,29个频道.
频率间隔是200KHZ;
双工间隔是45MHZ

上行:(890~915)MHz,移动台发。
下行:(935~960)MHz,移动台收。
频带宽度:25 MHz。
上,下行频率间隔:45 MHz。
载频间隔:200KHz
频点:25 MHz/200K Hz=125,共124个频点。
通信方式:全双工
DCS1800,上行:1710-1785MHz,下行:1805-1880MHz.
3. volatile关键字有什么用?

恐怕比较一下volatile和synchronized的不同是最容易解释清楚的。volatile是变量修饰符,而synchronized则作用于一段代码或方法;看如下三句get代码:

1.                             int i1; int geti1() {return i1;}

2.                             volatile int i2;  int geti2() {return i2;}

3.                             int i3;synchronized int geti3() {return i3;}

  geti1()得到存储在当前线程中i1的数值。多个线程有多个i1变量拷贝,而且这些i1之间可以互不相同。换句话说,另一个线程可能已经改变了它线程内的i1值,而这个值可以和当前线程中的i1值不相同。事实上,Java有个思想叫“主”内存区域,这里存放了变量目前的“准确值”。每个线程可以有它自己的变量拷贝,而这个变量拷贝值可以和“主”内存区域里存放的不同。因此实际上存在一种可能:“主”内存区域里的i1值是1,线程1里的i1值是2,线程2里的i1值是3——这在线程1和线程2都改变了它们各自的i1值,而且这个改变还没来得及传递给“主”内存区域或其他线程时就会发生。
  而geti2()得到的是“主”内存区域的i2数值。用volatile修饰后的变量不允许有不同于“主”内存区域的变量拷贝。换句话说,一个变量经 volatile修饰后在所有线程中必须是同步的;任何线程中改变了它的值,所有其他线程立即获取到了相同的值。理所当然的,volatile修饰的变量存取时比一般变量消耗的资源要多一点,因为线程有它自己的变量拷贝更为高效。
  既然volatile关键字已经实现了线程间数据同步,又要synchronized干什么呢?呵呵,它们之间有两点不同。首先, synchronized获得并释放监视器——如果两个线程使用了同一个对象锁,监视器能强制保证代码块同时只被一个线程所执行——这是众所周知的事实。但是,synchronized也同步内存:事实上,synchronized在“主”内存区域同步整个线程的内存。因此,执行geti3()方法做了如下几步:
1. 线程请求获得监视this对象的对象锁(假设未被锁,否则线程等待直到锁释放)
2. 线程内存的数据被消除,从“主”内存区域中读入(Java虚拟机能优化此步。。。[后面的不知道怎么表达,汗])
3. 代码块被执行
4. 对于变量的任何改变现在可以安全地写到“主”内存区域中(不过geti3()方法不会改变变量值)
5. 线程释放监视this对象的对象锁
  因此volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源。

  1. 链表和数组的区别

链表的特性是在中间任意位置添加删除元素的都非常的快,不需要移动其它的元素。
链表顾名思义,要把各个元素链接起来才算撒。
通常链表每一个元素都要保存一个指向下一个元素的指针(单链表)。
双链表的化每个元素即要保存到下一个元素的指针,还要保存一个上一个元素的指针。
循环链表则把最后一个元素中保存下一个元素指针指向第一个元素。
数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,这个编号叫做下标,我们可以通过下标来区别这些元素。数组元素的个数有时也称之为数组的长度
5. 写出strcpy的c实现代码

不使用库函数实现strcpy。这是一个很简单的题目,但它却可以考察如下的几点:

(1)编程风格;

(2)出错处理;

(3)算法复杂度分析(用于提高性能)。

这是摘自林锐的《高质量C++/C编程指南》中的内容。

也有人总结成了下面的几点,说的也很有道理:

(1)注意编程风格。比如,使用dst、src这样增强可读性的名字。

(2)使用断言来检验输入参数的有效性。

(3)使用const来约束src,表明src对应的内容不能被修改。

(4)返回dst,以便实现链式表达式这样的机制。
char   *strcpy(char   *strDest,   const   char   *strSrc);
{
        //使用断言来检验输入参数的有效性。

assert((strDest!=NULL)   &&   (strSrc !=NULL));
        char   *address   =   strDest;
        while(   (*strDest++   =   *   strSrc++)   !=   ‘\0’   )
              NULL   ;  
        return   address   ;
}
6。求两个字符串的最大公共字符子串,如"abccade","dgcadde"的最大子串为"cad"
int GetCommon(char *s1, char *s2, char **r1, char **r2)
{
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    int maxlen = 0;

for(int i = 0; i < len1; i++)
    {
        for(int j = 0; j < len2; j++)
        {
            if(s1 == s2[j])
            {
        int as = i, bs = j, count = 1;
        while((as + 1 < len1 )&& (bs + 1 < len2) && (s1[++as] ==s2[++bs]))
                    count++;

if(count > maxlen)
                {
                    maxlen = count;
                    *r1 = s1 + i;
                    *r2 = s2 + j;
                }
            }
        }
}

关于内存的4个经典题目GetMomery
void GetMemory(char *p)
{
    p = (char *)malloc(100);
}

void Test(void) 
{
    char *str = NULL;
    GetMemory(str); 
    strcpy(str, "hello world");
    printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
说的简单一些,就是传入的就是一个空指针,p确实分配空间了,
但是生成的空间首地址没有返回给str

2:
char *GetMemory(void)

    char p[] = "hello world";
    return p;
}
void Test(void)
{
    char *str = NULL;
    str = GetMemory(); 
    printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向"栈内存"的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
说的简单一些,就是函数的局部变量释放了。

3:
void GetMemory2(char **p, int num)
{
    *p = (char *)malloc(num);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(&str, 100);
    strcpy(str, "hello"); 
    printf(str); 
}
请问运行Test函数会有什么样的结果?
答:
(1)能够输出hello
(2)内存泄漏
说的简单一些,就是没有释放malloc的空间

4:
void Test(void)
{
    char *str = (char *) malloc(100);
    strcpy(str, "hello");
    free(str); 
    if(str != NULL)
{
            strcpy(str, "world"); 
            printf(str);
}
}
请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。
因为free(str);之后,str成为野指针,
if(str != NULL)语句不起作用。
说的简单一些,就是只收回内存,没有用str=NULL收回指针

转载于:https://www.cnblogs.com/hello-yz/p/3384275.html

展讯/北京移动--笔试题相关推荐

  1. 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿 ...

  2. 百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面拿出来两个球:     ii.如果取出的是两 ...

  3. 【转】2014百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    原文: http://www.cnblogs.com/JuneWang/p/3773880.html 已知memcpy的函数为: void* memcpy(void *dest , const voi ...

  4. 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 (转)

    原文地址:http://m.blog.csdn.net/blog/panfengyun12345/12618453 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有 ...

  5. 腾讯QQ2008年笔试题中的附加题(30分)

    //腾讯QQ2008年笔试题中的附加题(30分) //从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别 //存在什么问题?#include <iostream> ...

  6. 2022腾讯前端实习生笔试题与部分详细题解

    2022腾讯前端实习生笔试题与部分详细题解 前言与详细题目和个人题解 一.根据给定深度实现数组的扁平化 二.股票买入卖出收益最大化 欢迎交流和指正 前言与详细题目和个人题解 4月24晚举行的笔试,我做 ...

  7. 腾讯校园招聘会笔试题 难题解析

    1. 数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有10个物理块,10个数据记录R1------R10存放在这个磁道上,记录的安排顺序如下表所示: 物理块 1 2 3 4 5 6 ...

  8. 牛客 腾讯算法岗 笔试题整理

    牛客腾讯笔试题真题题解 格雷码 # -*- coding:utf-8 -*-class GrayCode:def getGray(self, n):GrayList = []tmp_list_0, t ...

  9. 腾讯2009年笔试题

    1.1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少? 答案:2和3 2.爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是 ...

最新文章

  1. 智能合约语言 Solidity 教程系列9 - 错误处理
  2. Beta冲刺 (7/7)
  3. 痞子衡嵌入式:第一本Git命令教程(0)- 索引
  4. python库numpy的reshape的终极解释
  5. wptx64能卸载吗_电脑可以卸载bonjour软件吗?详细介绍bonjour软件
  6. java考勤表导出_考勤表如何导出?
  7. Linux内核移植入门
  8. Oracle账号及客户端下载
  9. 【CSS】浅谈 CSS 中常用的相对长度单位 em, rem
  10. 1055 集体照(JAVA)
  11. 范罗士空气净化器PT65评测
  12. 澳元兑美元预测:美元可能因美国经济衰退担忧而进一步下跌(MogaFX)
  13. 数据库编程基本练习题
  14. Java项目:课程在线学习与测试系统(java+SSM+redis+Bootstrap+Tomcat+mysql)
  15. navicat12连接SQL Server时出错:未发现数据源名称并且未指定默认驱动程序
  16. Wind River Workbench 3.x VxWorks项目类型
  17. 黄金分割率理论--在分析大盘的时候用
  18. 让人跌破眼镜的人造鸡蛋制作过程
  19. Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity
  20. win10系统轻量级垃圾清理软件推荐

热门文章

  1. 番外篇——直流电机桥源码分析LED驱动例程开发
  2. 《深入理解Android内核设计思想》已陆续在全国各大书店及网上书店上市,感谢大家一直以来的支持~~
  3. 广东教国笔怎样才能提高自制力!
  4. Metaspace GC 问题排查
  5. Android 3分钟一个库搞定视频替换音频 视频合成 视频裁剪(高仿剪映)
  6. 学习weka(2):weka软件使用实例:针对kdd99数据集进行训练和测试
  7. HYCON单片机_以高整合度混合信号单片机实现电子计价秤应用
  8. Kinect开发(二)——注意项点,影像显示
  9. java毕业设计闲一品交易平台mybatis+源码+调试部署+系统+数据库+lw
  10. 基于 Mixup 数据增强的 LSTM-FCN 时间序列分类学习记录