某公司面試題

一、基礎題

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.pswp.cn/news/378250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378250.shtml
英文地址,請注明出處:http://en.pswp.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、鏈表基礎 鏈表的物理存儲結構是用一組地址任意的存儲單元存儲…