某公司面试题

一、基础题

1,冯诺依曼结构的计算机硬件逻辑组成中,不包含以下哪个模块?
A,编译器
B,控制器
C,输入设备
D,输出设备
解释:冯诺依曼由五个模块组成:输入设备 输出设备 存储器 控制器 运算器
故答案选择:A

2,假设有一个栈,元素依次进栈的顺序是A,B,C,D,E。下列不可能的出栈顺序是?
A,EDCBA
B,ABCDE
C,BCDEA
D,EABCD
解释:栈:先进后出
故答案选择:D

3,[多选]C语言中,static关键字说法正确的有?
A,用static修饰的全局变量可以在运行时修改
B,用static修饰的函数,其内部变量可以传递给其他函数
C,在a.c文件中,有一个static修饰的函数,任何情况下都不能可能在b.c中被调用
D,其余说法均不对
解释:参考自该篇博客static
函数体内 static 变量的作用范围为该函数体,不同于 auto 变量, 该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值
在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问
在模块内的static 函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内
在类的static 成员变量属于整个类所拥有,对类的所以对象只有一份拷贝
在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量
若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度
若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度
设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题

static在c里面可以用来修饰变量,也可以用来修饰函数。

修饰变量

int a ;
int main()
{int b ; int c* = (int *)malloc(sizeof(int));
}

变量在c里面可分为存在全局数据区、栈和堆里。
a是全局变量,b是栈变量,c是堆变量。
static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束了。但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。

修饰函数

static对函数的修饰与对全局变量的修饰相似,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。
a.c文件

static int i; //只在a文件中用
int j;          //在工程里用
static void init()         //只在a文件中用
{
}
void callme()          //在工程中用
{static int sum;
}

上面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。

b.c文件

extern int j;                    //调用a文件里的
extern void callme();   //调用a文件里的
int main()
{...
}

extern的另外用法是当C和C++混合编程时如果c++调用的是c源文件定义的函数或者变量,那么要加extern来告诉编译器用c方式命名函数:文件A.cpp调用a.c里面的变量i和函数callme()

extern "C"  //在c++文件里调用c文件中的变量
{int j;void callme();
}
int main()
{callme();
}

全局变量有外部、静态两种存储方式。
1,全局变量一般用外部存储方式存储,用保留字extern加以定义。此时,变量的作用域是构成整个程序的所有程序文件,也就是定义的外部变量可供其它程序文件使用。(使用这样的全局变量一定要非常慎重,一旦产生错误,将波及整个程序。)
2,如果希望全局变量仅限于本程序文件使用,而其它程序文件中不能引用,这时必须将其存储方式定义为静态存储方式,用保留字static加以定义。此时称为静态外部变量。
对全局变量加static,定义为静态存储方式,并不意味着是静态存储;而不加static,是动态存储。两种形式的全局变量(外部变量)都是静态存储方式,都是编译时分配存储空间,但作用域不同。使用静态外部变量,有利于隔离错误,有利于模块化程序设计。
3,全局变量的缺省存储方式是外部存储方式。
对局部变量采用auto方式,对全局变量采用extern方式。

故答案选择:A、B

4,C语言中,在头文件正常引用的情况下,执行printf("%5s",“abcdefg”);后的结果为?
A,abcde
B,abcdefg
C,cdefg
D,输出错误信息
解释:
%5s 是把变量的值保持长度5位(不足5位时),不足5位在前面用空格补齐,超过5位就不用补空格,直接显示全部,以字符串方式输出。
%-5s 是把变量的值保持长度5位(不足5位时),不足5位在后面用空格补齐,超过5位就不用补空格,直接显示全部,以字符串方式输出。
故答案选择:A

5,在32位操作系统中,我们定义如下变量 int (*n)[10];请问调用函数sizeof(n),返回值为?
A,4
B,40
C,8
D,80
解释:
int(*n)[10]; 是数组指针 sizeof(n)=4
int* n[10]; 是指针数组 sizeof(n)=40
在32位操作系统下,只要是指针就是4个字节,占32位。
故答案选择:A

6,[多选]请说出const与#define相比,有何优点?
A,宏常量有数据类型,而const常量没有数据类型
B,有些集成化的测试工具可以对const常量进行调试,但是不能对宏常量进行调试
C,编译器可以对const进行类型安全检查。而对#define只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误
解释:
const常量有数据类型,而宏常量没有数据类型
编译器可以对const常量进行类型安全检查,而对宏常量只能字符替换
有些集成化的调试工具能对const常量进行调试,对宏常量不能调试
故答案选择:B、C

7,以下不是无限循环的语句为?
A,for(y=0,x=1;x>++y;x=i++) i=x;
B,for(;;x++=i);
C,while(1) {x++;}
D,for(i=10;;i–) sum+=i;
解释:其实看是否是无限循环就看for中的第二个判断是否退出条件即可
故答案选择:A

8,C语言中,逻辑“真”等价于?
A,大于零的数
B,大于零的整数
C,非零的数
D,非零的整数
解释:C语言没有提供逻辑型的数据类型,关系(及逻辑)表达式的值“假”用数值0代表,而非零的值(系统默认用1)表示“真”。
说白了就是 零(假) 和 非零(真)
故答案选择:C

9,(1)请写出bool flag 与 “零值”比较的if语句

//若flag有可能为true也有可能为false
if(flag)
if(! flag)

(2)请写出float x 与 “零值”比较的if语句

const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)

(3)请写出char *p 与 “零值”比较的if语句

//字符指针有可能为空指针也有可能不为空
if (p == NULL)
if (p != NULL)

10,运行以下代码会出现什么问题?

void getmemory(char *p)//调用GetMemory( str )后, str并未产生变化,依然是NULL.只是改变的str的一个拷贝的内存的变化
{p = (char *)malloc(100);strcpy(p,"hello world");//程序运行到这将产生错误//new的时候有可能内存出错,应该在*p = (char *) malloc( num );后判断内存是否申请成功//if (*p == NULL){//进行申请内存失败处理}
}
int main()
{char *str = NULL;getmemory(str);printf("%s/n",str);free(str);//释放动态创建的内存return 0;
}

参考博文

二、编程题

1,编程实现冒泡排序
我以前写过,这里就不在叙述,可参考我的这篇博客

#include <stdio.h>
int main()
{int i,j,t,a[10];for(i=0;i<10;i++){scanf("%d",&a[i]);}for(i=0;i<9;i++)//10个数,进行9次循环,进行9趟比较{for(j=0;j<9-i;j++)//在每一趟比较中,进行9-i次比较{if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(j=0;j<10;j++){printf("%d\n",a[j]);}return 0;
}

2,给定一个头节点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
参考博文
定义一个fast和一个slow,fast每走两步,slow就走一步, 最终返回的slow就是中间的值(链表的节点个数为奇数偶数都适用)

class ListNode {public int val;public ListNode next;public ListNode(int val){this.val = val;this.next = null;}
}public class TestDemo1025_1 {public ListNode head;//给定一个头结点为 head 的非空单链表,返回链表的中间结点。
//如果有两个中间结点,则返回第二个中间结点。public ListNode middleNode() {ListNode fast = this.head;ListNode slow = this.head;while (fast != null && fast.next != null){fast = fast.next.next;slow = slow.next;}return slow;}
}

三、选做题

1,802.11b/g协议的非重叠信道有()个?
A,2
B,3
C,5
D,8
答案选择:B

2,无线局域网WLAN传输介质就是?
A,无线电波
B,红外线
C,载波电流
D,卫星通信
答案选择:A

3,如果Boot Loader、内核、启动参数以及其他的系统映像四部分在固态存储设备上分别独立存放,则其存储结构的分配顺序应当是:()
A,文件系统、内核、启动参数、Bootloader
B,启动参数、Bootloader、内核、文件系统
C,Bootloader、内核、启动参数、文件系统
D,Bootloader、启动参数、内核、文件系统
解释:华为认证考试题库中嵌入式软件助理工程师题库的一道题:Bootloader、启动参数、内核、文件系统
答案选择:D

4,Boot Loader的stage2通常使用C语言实现,以完成复杂的功能,以下哪一步骤属于stage2的内容:()
A,为加载Boot Loader的stage2准备RAM空间
B,设置好堆栈
C,硬件设备初始化
D,将Kernel映像和根文件系统映像从flash上读到RAM空间中
解释:为认证考试题库中嵌入式软件助理工程师题库的一道题:将kernel映像和根文件系统映像从flash上读到RAM空间中
答案选择:D

5,关于ARM处理器的异常的描述不正确的是()
A,复位属于异常
B,除数为零会引起异常
C,所有异常都要返回
D,外部中断会引起异常
答案选择:C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAP(全局平均池化层)操作

转载的文章链接&#xff1a; 为什么使用全局平均池化层&#xff1f; 关于 global average pooling https://blog.csdn.net/qq_23304241/article/details/80292859 在卷积神经网络的初期&#xff0c;卷积层通过池化层&#xff08;一般是 最大池化&#xff09;后总是要一个或n个全…

zoj1245 Triangles(DP)

/* 动态三角形&#xff1a;每次DP时考虑的是两个子三角形的高度即可 注意&#xff1a; 三角形可以是倒置的。 */ View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <stdio.h> 5 6 using namespace std; 7 8…

第十八章 程序打包

第十八章 程序打包 Setuptools和较旧的Distutils都是用于发布Python包的工具包&#xff0c;能够使用Python轻松地编写安装脚本。这些脚本可用于生成可发布的归档文档&#xff0c;供用户用来编译和安装编写库。 Setuptools并非只能用于创建基于脚本的Python安装程序&#xff0…

如何在Java中检查对象是否为空?

With the help of "" operator is useful for reference comparison and it compares two objects. 借助“ ”运算符&#xff0c;对于参考比较非常有用&#xff0c;它可以比较两个对象。 "" operator returns true if both references (objects) points to…

android编程从零开始,从零开始学习android开发

博主最近开通了Android栏目&#xff0c;现在正在从零开始学习android&#xff0c;遇到的所有值得分享的知识点以及遇到的问题将发布在这个博客的android栏目下。因为我有着深厚的java底子&#xff0c;所以学习起来得心应手&#xff0c;十分的简单&#xff0c;当然也只能算是入门…

CNN基本步骤以及经典卷积(LeNet、AlexNet、VGGNet、InceptionNet 和 ResNet)网络讲解以及tensorflow代码实现

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言1、卷积神经网络的基本步骤1、卷积神经网络计算convolution2、感受野以及卷积核的选取3、全零填充Padding4、tf描述卷积层5、批标准化(BN操作)6、池化Pooling7、舍弃Dropout8、卷积神经网络搭建以及参数分析2、经…

String.valueOf()

1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下列几种 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成…

emacs gdb 调试

写下linux下用emacs调用dgb调试的方法 emacs中使用gdb 说明C等价于ctrl M等价于alt 1,编写 .c函数 test.c 2&#xff0c;gcc一把 看看对不对 带上-g gcc -g -o test .debug test.c 如果要用gdb调试器&#xff0c;必须使用g选项。 3&#xff0c;#ema…

第十九章 趣味编程

第十九章 趣味编程 本章将介绍一些通用的Python编程指南。 为何要有趣 Python有趣的地方之一就是让用户的编程效率非常高效。 极限编程是一种软件开发方法 编程柔术 python的灵活性描述原型设计Python的优点之一是让你能够快速地编写程序。要更深入地了解面临的问题&#…

android按钮在容器下方,使用flex布局解决安卓手机上固定在底部的按钮,在键盘弹起后挡住input输入框的问题...

移动端经常会出现&#xff0c;一个表单里面&#xff0c;确定按钮固定在底部这样的布局&#xff0c;一般会让按钮absolute或者fixed&#xff0c;这样在ios上没有问题&#xff0c;但是在安卓手机上&#xff0c;当表单里面的input输入框获得焦点的时候&#xff0c;按钮会挡在表单上…

dbms支持哪几种数据模型_DBMS中不同类型的数据模型

dbms支持哪几种数据模型资料模型 (Data Model) A data model is a model that defines in which format the data are represented and accessed. Data model mainly defines some of the data elements and relationships that exist between them. 数据模型是定义数据以哪种格…

JS 数组迭代方法

var arr [3,4,5,6,7,"a"]; var isNum function(elem,index,AAA){ return !isNaN(elem);} var toUpperCase function(elem){ return String.prototype.toUpperCase.apply(elem);} var print function(elem,index){ console.log(index"."elem);} /*对数组…

php开源问答_PHP基础知识能力问答

php开源问答This section contains Aptitude Questions and Answers on PHP Basics. 本部分包含有关PHP基础知识的 Aptitude问题和解答。 1) There are the following statements that are given below, which of them are correct PHP? PHP stands for the Preprocessor Hom…

【数据结构基础笔记】【顺序表】

代码参考《妙趣横生的算法.C语言实现》 文章目录前言1、创建顺序表2、顺序表插入元素3、顺序表删除元素4、顺序表实例分析1、静态2、动态5、顺序表总结前言 本章总结&#xff1a;从静态和动态分别进行顺序表的创建、插入、删除、以及实例分析 1、创建顺序表 1、静态地生成一张…

ubuntu安装oracle unzip: No such file or directory

$ln -s /usr/bin/unzip /你的oracle11安装目录/install/unzip$sudo chmod 777 /usr/bin/unzip转载于:https://www.cnblogs.com/qm4050/archive/2011/08/25/2241466.html

一、网络爬虫概述

1&#xff0c;浏览器与网络爬虫的区别 答&#xff1a; 对于浏览器而言&#xff1a;浏览器打开一个网站&#xff0c;会对网站服务器发送一个request请求&#xff0c;服务器收到该请求之后&#xff0c;会给浏览器一个respond响应&#xff0c;该响应携带很多数据&#xff0c;之后…

百度android广告sdk下载,IS_Freedom

美数广告 SDK接入流程1.嵌入广告SDK将 sdk-android-demo/app/libs 中的 meishu-sdk_xxx_release.aar、open_ad_sdk_xxx.aar、Baidu_MobAds_SDK-release-xxx.aar、GDTSDK.unionNormal.xxx.aar、msa_mdid_1.0.13 拷贝到项目的 libs 下&#xff0c;对应的 build.gradle 文件里面添…

关于《加密与解密》的读后感----对dump脱壳的一点思考

偶然翻了一下手机日历&#xff0c;原来今天是夏至啊&#xff0c;时间过的真快。ISCC的比赛已经持续了2个多月了&#xff0c;我也跟着比赛的那些题目学了2个月.......虽然过程很辛苦&#xff0c;但感觉还是很幸运的&#xff0c;能在大三的时候遇到ISCC&#xff0c;不管怎样&…

java vector_Java Vector elements()方法与示例

java vector向量类elements()方法 (Vector Class elements() method) elements() method is available in java.util package. elements()方法在java.util包中可用。 elements() method is used to get an enumeration of the elements that exist in this Vector. elements()方…

【数据结构基础笔记】【链表】

代码参考《妙趣横生的算法.C语言实现》 文章目录前言1、链表基础2、创建一个链表3、插入结点4、删除结点5、销毁链表6、实例分析前言 本章总结&#xff1a;链表的定义、创建、销毁&#xff0c;结点的插入与删除 1、链表基础 链表的物理存储结构是用一组地址任意的存储单元存储…