阿里面試

當時是下午的時候,吃完晚飯和同學在宿舍討論下午上機的一個題目。突然電話響了,定睛一看,杭州來電,愣了兩秒,給旁邊的小伙伴看了一下,他都跳了起來,怎么這時候來了,趕緊坐好準備接電話。

首先,面試官說明他是阿里的面試官,讓我進行一下自我介紹,我當時就語無倫次了,畢竟第一次嘛。我就慢慢的,緩緩地說了一下我學iOS,什么時候開始的,平時怎么學的,都做了一些什么,然后講了一下自己的課余生活等等,大概一分多鐘吧。

然后面試官就說那就看看你的項目上寫的一些東西吧。

1、keychain的安全性
iOS的keychain服務(wù)提供了一種安全的保存私密信息(密碼,序列號,證書等)的方式,每個iOS程序都有一個獨立的keychain存儲。
相對于NSUserDefaults、文件保存等一般方式,ychain保存更加安全,而且keychain里保存的信息不會因APP被刪除而丟失,所以重裝APP后,keychain里的數(shù)據(jù)還能使用。
我們可以把keychain理解為一個Dictionary,所有數(shù)據(jù)都以key-value的形式存儲,可以對這個Dictionary進行增刪改查這四個操作。
對于每一個應(yīng)用來說,keychain都有兩個訪問區(qū),私有區(qū)和公共區(qū)。
私有區(qū)是有一個sandbox,本程序存儲的任何數(shù)據(jù)都對其他的程序不可見。
而要想在將存儲的內(nèi)容放在公共區(qū),需要先聲明公共區(qū)的名稱,官方文檔管這個名稱叫“keychain access group”,

1938365-99bc3fa299c6f218.jpeg

公共區(qū)名稱前面必須是你的yourAppleID.com.yourCompany.com.whatever,聲明的方法是新建一個plist文件,這個文件的路徑要配置在Project->build setting->Code Signing Entitltments里,否則公共區(qū)無效,配置好后,須用你正式的證書簽名編譯以才可以通過,否則Xcode會告訴你code setting有問題。
所以,蘋果公司限制了你只能同公司的產(chǎn)品共享keychain數(shù)據(jù),別的公司訪問不了你公司產(chǎn)品的keychain。

之后在公眾號了解到新情報說是最新iOS10.3有了變動:
如果APP被刪除,之前存儲于keychain中的數(shù)據(jù)也會被一同刪除。
如果使用了keychain group,只要當group所有相關(guān)的APP刪除時,keychain中的數(shù)據(jù)才會被刪除。
這樣的話
有的APP重裝就需要登錄啦
基于設(shè)備的免費使用功能就無法實現(xiàn)了
短信費用上升
因為有的APP以手機注冊的,為了節(jié)省驗證費用直接讀取keychain,10.3之后的話,每次重裝的話,都要在發(fā)送短信驗證一次。
2、http,tcp/ip
三次握手,四次揮手。
3、JSON解析的優(yōu)化(YYModel)
YYModel的核心是通過runtime獲取結(jié)構(gòu)體中的Ivars的值,將此之定義為key,然后給key賦value值,然后KVC。
之后可能會問KVC,KVO。

在model屬性和字典的屬性名不一致時,要重寫轉(zhuǎn)換的方法。

/*!
 *  1.該方法是 `字典里的屬性Key` 和 `要轉(zhuǎn)化為模型里的屬性名` 不一樣 而重寫的
 *  前:模型的屬性   后:字典里的屬性
 */

+ (nullable NSDictionary<NSString *, id> *)modelCustomPropertyMapper{

    return @{@"messageId":@"i",
             @"content":@"c",
             @"time":@"t"};
}
/*!
 *  2. 下面的兩個方法 `字典里值`與`模型的值`類型不一樣`需要轉(zhuǎn)換`而重寫的方法
 *   NSDate *time     dic[@"t"]是double類型的的秒數(shù)
 */

/// Dic -> model
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {

    self.time = (NSDate *)[NSDate dateWithTimeIntervalSince1970:[dic[@"t"] doubleValue]/1000];

    return YES;
}

/// model -> Dic
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic {

    dic[@"t"] = @([self.time timeIntervalSince1970] * 1000).description;

    return YES;
}

4、corelocation如何定位以及兩個位置之間的最短路徑
這里問到算法,迪杰斯特拉或者是其他的路徑算法,會問時間復(fù)雜度與算法思想。
以及位置信息更新的優(yōu)化。

最后,面試官問我有什么問題問他嗎?

我說,如果有幸去實習的話,會有培訓嗎,畢竟自己沒有親身參加過項目的開發(fā)流程。。

面試官說會有的,一帶一,然后布置任務(wù),做完之后作總結(jié)分享等等。

最后面試官還說,要有想象力,創(chuàng)造力,比如pokemonGO 那樣,將兒時的夢想化作現(xiàn)實,是有可能的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容