筆試錯題記錄1
####選擇題 1.C++中的const。
int b = 2;
const int * a = &b; //這種情況是表示指標所指的資料是常量,但是a這個指標可以指向其他記憶體。
int * const c = &b; //這種情況是表示指標是常量,也就是c只能指向b,但是b這個記憶體裡面儲存的值是可以變得。
2.ARM開發整合環境 只讀的程式碼段和常量被稱作RO段,是程式中的指令和常量; 可讀寫的全域性變數和靜態變數稱為RW段,是程式中已初始化變數; RW段中要被初始化為0的變數稱為ZI段,是程式中未初始化變數。 則不同程序載入同一個動態庫的時候,不能共享的部分是RW和ZI。因為只有只讀程式碼和常量是可以分享的。
3.同一個程序不同的執行緒,不可以共享的是棧。 因為執行緒共享的是程序程式碼段,程序的公共資源,程序檔案描述符,程序使用者ID等等。但是每一個執行緒都有一個執行緒ID,使用者棧和記憶體棧等等。
4.關於Java中自動裝箱的問題。 Byte a = 126; Byte b = 127; Byte c = a +b; 最後出現的情況是最後一行編譯錯誤。因為a和b進行加法運算時自動提升為Int型別,沒有辦法賦值給Byte型別。
####填空題 1.在32位系統中,void *p = malloc(100);則sizeof§=4。 因為p是一個指標型別的資料,所以無論p指向的記憶體多大,p的大小都是固定的。在32位地址下,8位一個位元組,就是4個位元組。
2.設迴圈佇列的容量為50,且頭指標front=5,尾指標rear=29,則該迴圈佇列中是共有24個數值 演算法(rear-front+size)%size
3.已知程式碼char* p=(char*)malloc(val);其中p在執行的時候獲得了一個空指標,請列舉三種可能的原因?
- 分配的空間太小
- 分配的空間被當做記憶體碎片處理
- val取值過大,導致分配之後會導致記憶體空間溢位
4.程序間的通訊方式
- pipe 也就是管道通訊
- socket
- signal 訊號處理機制
- memory share 記憶體共享
- message 訊息佇列
- file 檔案的讀寫
5.Android四大元件
- Activity 活動
- Service 服務
- Broadcast 廣播
- Content Provider 內容提供器
6.Java中的final
- final類不可以再派生出新的子類。因此一個類不可以既是abstract也是final。
- final變數可以保證變數在使用中不會被改變。則只能在宣告變數或構造器初始化。
- final函式不能被子類重寫。
7.如何定義C++類,阻止C++類物件的相互賦值(obj2=obj1)。 只要過載=的定義在private或protected下面即可,過載原型的const修飾及函式體內容無所謂。
class A{
protected:
A& operator = (const A&){}
}
class A{
private:
A& operator = (const A&){}
}
8.java中Thread.sleep()和 Object.wait() 有什麼區別? sleep是使執行緒休眠一段時間。在sleep休眠時間到期後,執行緒不一定立即恢復執行,除非系統沒有其它更高優先順序的任務正在執行。wait是執行緒間實現同步的一種機制。呼叫wait的執行緒會主動進入等待狀態,直到被其它執行緒喚醒或者等待超時
9.sprintf、strcpy、strncpy及 memcpy 函式,請問這些函式功能有什麼區別?從安全形度考慮一般應該用哪個函式複製字串?
- sprintf為格式化字串函式
- strcpy為字串複製函式
- strncpy也是字串複製函式,但是可以指定最大複製長度
- memcpy為記憶體複製函式 從安全形度應該選strncpy,不易出現越界異常
####程式設計題 約瑟夫環是一個數學應用題:已知n個人(編號1、2、…n)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下一個又從1開始報數,數到m的那個人又出列;依次規律重複下去,直到圓桌周圍的人全部出列。請編寫一個程式,給定n、m計算出列人員先後順序。 這道題先考慮用Java中已有的LInkedList來解決。 ArrayList和LinkedList的不同點
- ArrayList基於動態陣列實現,它適合於隨機訪問元素,但是插入和刪除元素較慢。
- LinkdList基於連結串列實現,在LInkedList中間進行插入和刪除的代價較低,但是在隨機訪問方面LInkedList效能較慢。