參考答案不唯一,大家可以根據自己的理解回答,沒有必要跟筆者的一樣。參考筆者的答案,也許給你帶來靈感!
1、對數組中的元素去重復例如:
NSArray *array = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
參考答案:
NSMutableArray *resultArray = [[NSMutableArray alloc] initWithCapacity:array.count];
// 外層一個循環
for (NSString *item in array) {
// 調用-containsObject:本質也是要循環去判斷,因此本質上是雙層遍歷
// 時間復雜度為O ( n^2 )而不是O (n)
if (![resultArray containsObject:item]) {
[resultArray addObject:item];
}
}
NSLog(@"resultArray: %@", resultArray);
NSMutableDictionary *resultDict = [[NSMutableDictionary alloc] initWithCapacity:array.count];
for (NSString *item in array) {
[resultDict setObject:item forKey:item];
}
NSArray *resultArray = resultDict.allValues;
NSLog(@"%@", resultArray);
如果需要按照原來的升序排序,可以這樣:
resultArray = [resultArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSString *item1 = obj1;
NSString *item2 = obj2;
return [item1 compare:item2 options:NSLiteralSearch];
}];
NSLog(@"%@", resultArray);
NSSet *set = [NSSet setWithArray:array];
NSArray *resultArray = [set allObjects];
NSLog(@"%@", resultArray);
如果要求有序,那就得排序,比如這裡要升序排序:
resultArray = [resultArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSString *item1 = obj1;
NSString *item2 = obj2;
return [item1 compare:item2 options:NSLiteralSearch];
}];
NSLog(@"%@", resultArray);
以上三種方法是筆者所能想到的辦法。如果大家有更好的辦法,歡迎在評論中指出。
2、說說以下元素的特性和作用NSArray、NSSet、NSDictionary與NSMutableArray、NSMutableSet、NSMutableDictionary
參考答案:
特性:
作用:
參考答案:
筆者傾向於純代碼開發,所以所提供的參考答案可能具有一定的個人感情,不過還是給大家說說筆者的想法。
優點:
缺點:
參考答案:
NSString *timeStr = @"2015-04-10";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
formatter.timeZone = [NSTimeZone defaultTimeZone];
NSDate *date = [formatter dateFromString:timeStr];
// 2015-04-09 16:00:00 +0000
NSLog(@"%@", date);
5、在App中混合html5開發App如何實現的。在App中使用html5的優缺點是什麼?
參考答案:
在IOS中,通常是通常UIWebView來實現,當然在iOS8以後可以使用WKWebView來實現.有以下幾種實現方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
在iOS7以後,可以直接通過JavaScripteCore這個庫來實現,通過往JS DOM注入對象,而這個對象對應於我們iOS的某個類的實例。更詳細請閱讀:
可以通過WebViewJavascriptBridge來實現。具體如何使用,請大家去其它博客搜索吧!
優缺點:
參考答案:
首先,我們要明確一點,同步和異步都是在線程中使用的。在iOS開發中,比如網絡請求數據時,若使用同步請求,則只有請求成功或者請求失敗得到響應返回後,才能繼續往下走,也就是才能訪問其它資源(會阻塞了線程)。網絡請求數據異步請求時,不會阻塞線程,在調用請求後,可以繼續往下執行,而不用等請求有結果才能繼續。
區別:
參考答案:
在iOS中隊列分為以下幾種:
dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t q = dispatch_queue_create("......", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q = dispatch_get_main_queue();
上面這四種是針對GCD來講的,串行隊列中的任務只能一個個地執行,在前一個沒有執行完畢之前,下一個只能等待。並行隊列可以並發地執行任務,因此多個任務之間執行的順序不能確定,當添加一個新的任務時,交由GCD來判斷是否要創建新的新的線程。
大家可以閱讀圖片多線程,也許更明了:
參考答案:
內存管理准則:誰強引用過,誰就在不再使用時使引用計數減一。
對於內存的使用和優化常見的有以下方面:
重用問題:如UITableViewCells、UICollectionViewCells、UITableViewHeaderFooterViews設置正確的reuseIdentifier,充分重用。
盡量把views設置為不透明:當opque為NO的時候,圖層的半透明取決於圖片和其本身合成的圖層為結果,可提高性能。
不要使用太復雜的XIB/Storyboard:載入時就會將XIB/storyboard需要的所有資源,包括圖片全部載入內存,即使未來很久才會使用。那些相比純代碼寫的延遲加載,性能及內存就差了很多。
選擇正確的數據結構:學會選擇對業務場景最合適的數組結構是寫出高效代碼的基礎。比如,數組: 有序的一組值。使用索引來查詢很快,使用值查詢很慢,插入/刪除很慢。字典: 存儲鍵值對,用鍵來查找比較快。集合: 無序的一組值,用值來查找很快,插入/刪除很快。
gzip/zip壓縮:當從服務端下載相關附件時,可以通過gzip/zip壓縮後再下載,使得內存更小,下載速度也更快。
延遲加載:對於不應該使用的數據,使用延遲加載方式。對於不需要馬上顯示的視圖,使用延遲加載方式。比如,網絡請求失敗時顯示的提示界面,可能一直都不會使用到,因此應該使用延遲加載。
數據緩存:對於cell的行高要緩存起來,使得reload數據時,效率也極高。而對於那些網絡數據,不需要每次都請求的,應該緩存起來,可以寫入數據庫,也可以通過plist文件存儲。
處理內存警告:一般在基類統一處理內存警告,將相關不用資源立即釋放掉
重用大開銷對象:一些objects的初始化很慢,比如NSDateFormatter和NSCalendar,但又不可避免地需要使用它們。通常是作為屬性存儲起來,防止反復創建。
避免反復處理數據:許多應用需要從服務器加載功能所需的常為JSON或者XmlRss/ target=_blank class=infotextkey>Xml格式的數據。在服務器端和客戶端使用相同的數據結構很重要。
使用Autorelease Pool:在某些循環創建臨時變量處理數據時,自動釋放池以保證能及時釋放內存。
正確選擇圖片加載方式:詳情閱讀細讀UIImage加載方式
參考答案:
plist是iOS系統中特有的文件格式。我們常用的NSUserDefaults偏好設置實質上就是plist文件操作。plist文件是用來持久化存儲數據的。
我們通常使用它來存儲偏好設置,以及那些少量的、數組結構比較復雜的不適合存儲數據庫的數據。比如,我們要存儲全國城市名稱和id,那麼我們要優先選擇plist直接持久化存儲,因為更簡單。
10、iOS中緩存一定量的數據以便下次可以快速執行,那麼數據會存儲在什麼地方,有多少種存儲方式?參考答案:
詳情請閱讀:iOS常用的持久化存儲方式
11、請簡單寫出增、刪、改、查的SQL語句。參考答案:
數據庫的簡單操作,還是會的,大學可沒白學。
增:
insert into tb_blogs(name, url) values('標哥的技術博客','http://101.200.209.244');
刪:
delete from tb_blogs where blogid = 1;
改:
update tb_blogs set url = '101.200.209.244' where blogid = 1;
查:
select name, url from tb_blogs where blogid = 1;
12、在提交蘋果審核時,遇到哪些問題被拒絕,對於被拒絕的問題是如何處理的。
參考答案:
對於筆者而言,所提交過的app還沒有被拒絕過。不過在筆者所維護的幾個群裡經常有朋友們問到相關被拒絕的解決辦法。幸好還懂一點點英文,還能幫助他們翻譯翻譯蘋果反饋的被拒原因及所擔的建議。
這裡只列出幾種最常見的被拒原因:
在這個夜晚,所有答案都是筆者花了大量的時間來整理出來的,且看且珍惜吧!如果所提供的參考答案與您的想法有所不同,歡迎到群裡來交流,也可以直接在評論中反饋。
夜深人靜了~
轉自:寶庫iOS開發筆試題
【iOS之某公司iOS開發筆試題】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!