筆試題錯題本
int main (void) {
char str1[] = “abc”;
char str2[] = “abc”;
const char str3[] = “abc”;
const char str4[] = “abc”;
const char* str5 = “abc”;
const char* str6 = “abc”;
cout << (str1 == str2) << endl;
cout << (str3 == str4) << endl;
cout << (str5 == str6) << endl;
return 0;
}
第一個,第二個存放的是地址 第三個是指針指向的字符串
2.已知函數fun的原型為int fun(int,int,int);下列重載函數原型中錯誤的是
char fun(int,int);
double fun(int,int,double);
int fun(int,char*);
float fun (int,int,int);
函數重載和返回類型無關,參數列表不同即可
3.
不同進程加載同一個動態庫時,不能共享的部分是
RO段
RW段
ZI段
RW和ZI段
- 進程代碼段
- 進程的公有資源(如全局變量,利用這些共享的數據,線程很容易的實現相互之間的通信)
- 進程打開的文件描述符
- 消息隊列
- 信號的處理器
- 進程的當前目錄
- 進程用戶ID
- 進程組ID
- 線程ID
- 寄存器組的值
- 用戶棧、內核棧(在一個進程的線程共享堆區(heap))
- 錯誤返回碼
- 線程的信號屏蔽碼
- 線程的優先級
堆: 是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統對進程初始化的時候分配,運行過程中也可以向系統要額外的堆,但是記得用完了要還給操作系統,要不然就是內存泄漏。
棧:是個線程獨有的,保存其運行狀態和局部自動變量的。棧在線程開始的時候初始化,每個線程的棧互相獨立,因此,棧是 thread safe的。操作系統在切換線程的時候會自動的切換棧,就是切換 SS/ESP寄存器。棧空間不需要在高級語言里面顯式的分配和釋放
5.請問linux系統發送信號的系統調用是
7.操作系統在控制和管理進程過程中,涉及到( )這一重要數據結構,這是進程存在的唯一標志。
每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的進程控制塊是task_struct結構體。
/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 結構體定義。其內部成員有很多,重點:
- 進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表- 示,其實就是一個非負整數。
- 進程的狀態,有就緒、運行、掛起、停止等狀態。
- 進程切換時需要保存和恢復的一些CPU寄存器。
- 描述虛擬地址空間的信息。
- 描述控制終端的信息。
- 當前工作目錄(Current Working Directory)。
- umask掩碼。
- 文件描述符表,包含很多指向file結構體的指針。
- 和信號相關的信息。
- 用戶id和組id。
- 會話(Session)和進程組。
- 進程可以使用的資源上限(Resource Limit)。
(2) 內存碎片
(3) val取值過大
10.Android四大組件是:Activity、Service、Broadcast Receiver、Content Provider
11.JAVA中,final修飾的類、成員函數、變量分別有什么特點?
類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。
將變量聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在new一個對象時初始化(即只能在聲明變量或構造器或代碼塊內初始化),而在以后的引用中只能讀取,不可修改。
將方法聲明為final,則方法只能使用,而不能在子類重寫。
12.java中Thread.sleep()和 Object.wait() 有什么區別?
sleep是使線程休眠一段時間。在sleep休眠時間到期后,線程不一定立即恢復執行,除非系統沒有其它更高優先級的任務正在執行
wait是線程間實現同步的一種機制。調用wait的線程會主動進入等待狀態,直到被其它線程喚醒或者等待超時
13.sprintf、strcpy、strncpy及 memcpy 函數,請問這些函數功能有什么區別?從安全角度考慮一般應該用哪個函數復制字符串?
sprintf為格式化字符串函數
strcpy為字符串復制函數
strncpy也是字符串復制函數,但是可以指定最大復制長度
memcpy為內存復制函數
從安全角度應該選strncpy,不易出現越界異常
14.算法 最長公共子串
function findSubStr(s1,s2){ var S=sstr= "" ,L1=s1.length,L2=s2.length; if (L1>L2){ var s3=s1;s1=s2,s2=s3,L1=s2.length;} for ( var j=L1;j> 0 ;j--) for ( var i= 0 ;i<=L1-j;i++){ sstr = s1.substr(i,j); if (s2.indexOf(sstr)>= 0 ) return sstr; } return "" ;}document .writeln(findSubStr( "aaa3333" , "baa333cc" )); //aa333document .writeln(findSubStr( "aaaX3333--" , "baa333ccX3333333x" )); //X3333
浙公網安備 33010602011771號