面南京試聽科技筆試題:
解釋性語言和編譯型語言,各舉兩個(gè)例子
答:
解釋型語言:源代碼不能直接翻譯成機(jī)器語言,而是先翻譯成中間代碼,再由解釋器對中間代碼進(jìn)行解釋運(yùn)行;運(yùn)行效率一般相對比較低,依賴解釋器,跨平臺性好。舉例:Python、JavaScript、Shell、Ruby、MATLAB
編譯型語言:只須編譯一次就可以把源代碼編譯成機(jī)器語言,后面的執(zhí)行無須重新編譯,直接使用之前的編譯結(jié)果就可以;因此其執(zhí)行的效率比較高;但比較依賴編譯器,因此跨平臺性差一些。舉例:OC,C++,C
一個(gè)32位系統(tǒng)的機(jī)器,其指針是多少字節(jié)的。
答:指針是多少位只要看地址總線的位數(shù)就行了。80386以后的機(jī)子都是32的數(shù)據(jù)總線。所以指針的位數(shù)就是4個(gè)字節(jié)了。
“N+1<N”在N是什么類型下成立
答:這個(gè)確實(shí)不知道。
軟件測試有哪些類型,分別對應(yīng)哪些項(xiàng)目。
答:軟件測試可以分為黑盒測試和白盒測試,也可分為性能測試和功能測試。
單元測試:
集成測試:
系統(tǒng)測試:
驗(yàn)收測試:
回歸測試:
程序在內(nèi)存中運(yùn)行時(shí)分為幾個(gè)區(qū),各自用途:
答:
全局區(qū)(靜態(tài)區(qū)):存放全局變量和靜態(tài)變量,與其他變量的生命周期不同,程序結(jié)束時(shí)會(huì)自動(dòng)釋放這塊內(nèi)容
文字常量區(qū):常量字符串存放在這個(gè)位置,也就是常量池。程序結(jié)束時(shí),系統(tǒng)自動(dòng)釋放這塊區(qū)域
代碼區(qū):存放代碼,app程序會(huì)拷貝到這里。
棧區(qū):存放函數(shù)的參數(shù)值,局部變量的值。他的生命周期較短,進(jìn)入作用域的時(shí)候分配占用內(nèi)存,離開作用域的時(shí)候釋放占用的內(nèi)存。
堆區(qū):一般是由人為控制這塊區(qū)域的內(nèi)存分配和釋放。在C和C++中,堆內(nèi)存如果忘記釋放,可能導(dǎo)致可用內(nèi)存越來越少,這就是內(nèi)存泄漏。
引用和指針的區(qū)別:
答:引用是別名,指針是地址。
指針在運(yùn)行時(shí)可以改變其所指向的值,而引用一旦和某個(gè)對象綁定后就不再改變。
從內(nèi)存分配上看,程序?yàn)橹羔樧兞糠峙鋬?nèi)存區(qū)域,而不為引用分配內(nèi)存區(qū)域,因?yàn)橐寐暶鲿r(shí)必須初始化,從而指向一個(gè)已經(jīng)存在的對象。引用不能指向空值。
int retVal = UIApplicationMain(argc, argv, nil, nil);是什么意思
答:初始化UIApplication對象并為它設(shè)置代理,UIApplication對象是應(yīng)用程序的象征,一個(gè)UIApplication對象就代表一個(gè)應(yīng)用程序。 argc: 系統(tǒng)或者用戶傳入的參數(shù)個(gè)數(shù);argv: 系統(tǒng)或者用戶傳入的實(shí)際參數(shù)
ios 保存一個(gè)變量到本地的兩種方法:
答:iOS本地緩存數(shù)據(jù)的方式有五種:1.直接寫文件方式,可以存儲的對象有NSString、NSArray、NSDictionary、NSData、NSNumber,數(shù)據(jù)全部存放在一個(gè)屬性列表文件(*.plist文件)中;2.NSUserDefaults(偏好設(shè)置),用來存儲應(yīng)用設(shè)置信息,文件放在perference目錄下;3.歸檔操作(NSkeyedArchiver),不同于前面兩種,它可以把自定義對象存放在文件中;4.coreData;5.FMDB(FMDB是iOS平臺的SQLite數(shù)據(jù)庫框架,F(xiàn)MDB以O(shè)C的方式封裝了SQLite的C語言API)
實(shí)現(xiàn)一個(gè)委托的interface:
答:
import <Foundation/Foundation.h>
// 協(xié)議定義
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
// 協(xié)議定義結(jié)束
@interface SampleProtocol : NSObject
{
// Delegate to respond back
id <SampleProtocolDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)startSampleProcess; // Instance method
@end
當(dāng)A類中的某個(gè)方法執(zhí)行到某處時(shí),想在B類中執(zhí)行某方法,需要如何做?
答:使用通知,在B類中注冊通知,并綁定需要執(zhí)行的方法,在A類的方法執(zhí)行到特定地方時(shí),發(fā)送通知。這時(shí),B中的方法會(huì)被執(zhí)行。
類方法創(chuàng)造的對象要不要release釋放?
答:不需要 這個(gè)對象被放到自動(dòng)釋放池中
類方創(chuàng)建對象:好處:不用我們?nèi)ス芾韮?nèi)存,壞處:在類方法中創(chuàng)建的對象是autorelease的,我們并不知它什么時(shí)候回被釋放掉,有可能會(huì)造成提前釋放,提前釋放如果再訪問這個(gè)對象,就會(huì)野指針操作;
#import和#include的區(qū)別:
答:#import是導(dǎo)入Objective-C頭文件的關(guān)鍵詞,#include是導(dǎo)入C/C++頭文件的關(guān)鍵詞;
使用#include需要處理重復(fù)引用,#import能防止同一個(gè)文件被多次包含,則不需要處理重復(fù)引用;