一次面試的記錄

面試記錄

提到以下問題:

  • 線程死鎖是什么果复?什么樣的情況會造成死鎖?如何確保不會發(fā)生死鎖渤昌?

    在串行隊列中,執(zhí)行 A 時同步調(diào)度一個任務(wù) B 會造成 AB 之間互相等待走搁,造成死循環(huán)独柑;

    syncSerialBlock
    {
                dispatch_queue_t queue = dispatch_queue_create("yanhooQueue", DISPATCH_QUEUE_SERIAL);

        dispatch_sync(queue, ^{
        NSLog(@"1-----%@", [NSThread currentThread]);

        // 這里阻塞了
            dispatch_sync(queue, ^{
                NSLog(@"2-----%@", [NSThread currentThread]);
        });
      });
        }
        /// 或者
    -(void)syncMain
    {
    // 獲得主隊列
    dispatch_queue_t queue = dispatch_get_main_queue();

    // 這里阻塞了
    dispatch_sync(queue, ^{
        NSLog(@"1-----%@", [NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"2-----%@", [NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"3-----%@", [NSThread currentThread]);
    });
}

> 不要在串行隊列(先進(jìn)先出)中同步調(diào)度任務(wù),可以避免死鎖私植。
vm_size_t usedMemory(void) {
    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
    return (kerr == KERN_SUCCESS) ? info.resident_size : 0; // size in bytes
}

    vm_size_t freeMemory(void) {
    mach_port_t host_port = mach_host_self();
    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    vm_size_t pagesize;
    vm_statistics_data_t vm_stat;

    host_page_size(host_port, &pagesize);
    (void) host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
    return vm_stat.free_count * pagesize;
    }

    void logMemUsage(void) {
    // compute memory usage and log if different by >= 100k
    static long prevMemUsage = 0;
    long curMemUsage = usedMemory();
    long memUsageDiff = curMemUsage - prevMemUsage;

    if (memUsageDiff > 100000 || memUsageDiff < -100000) {
        prevMemUsage = curMemUsage;
        NSLog(@"Memory used %7.1f (%+5.0f), free %7.1f kb", curMemUsage/1000.0f, memUsageDiff/1000.0f, freeMemory()/1000.0f);
    }
    // 周期性獲取目前占用的內(nèi)存,設(shè)定閾值贫悄,如果較大瑞驱,記錄并上報堆棧信息
    [NSThread callStackSymbols]);
    
    }
    
///以下是幀率的獲取方法
    let displayLink CADisplayLink(
            target: urDelegate,
            selector: #selector(urFunc)
        )
    //每幀刷新都會回調(diào) urFunc ,
    func urFunc() {
         if lastNotificationTime == 0.0 {
            lastNotificationTime = CFAbsoluteTimeGetCurrent()
            return
        }

        numberOfFrames += 1

        let currentTime = CFAbsoluteTimeGetCurrent()
        let elapsedTime = currentTime - self.lastNotificationTime

        if elapsedTime >= self.notificationDelay {
            
          let fps = Int(round(Double(self.numberOfFrames) / elapsedTime))
            lastNotificationTime = 0.0
            numberOfFrames = 0
            print(fps) //幀率
        }
        
    }
  • 中間人攻擊是什么窄坦?如何預(yù)防中間人攻擊唤反?

    指攻擊者 C 與通訊的兩端 A凳寺、B分別建立獨立的聯(lián)系,欺詐 A彤侍、B 使通訊的兩端 A 肠缨、B認(rèn)為他們正在通過一個私密的連接與對方直接對話(A ? B),并交換其所收到的數(shù)據(jù)盏阶,但事實上整個會話都被攻擊者完全控制(A ? C ? B)晒奕。iOS 中,App 端保存一份公鑰證書名斟,進(jìn)行 HTTPS 的 SSL 通信建立時脑慧,比對服務(wù)器提供的公鑰證書與本地是否一致,不一致拒絕蒸眠。

  • TCP 與 UDP 有什么區(qū)別漾橙? 如何保證網(wǎng)絡(luò)層使用 UDP 時應(yīng)用層的數(shù)據(jù)可達(dá)與完整性?

    TCP 通信握手更多楞卡,通信可靠霜运;UDP 更簡單更快不需要握手,不可靠蒋腮,如果詳細(xì)比較 TCP 與 UDP 有很多不同淘捡,可以參照此文章 http://www.diffen.com/difference/TCP_vs_UDP
    關(guān)于握手有一個笑話:
    我想聽一個 TCP 的笑話。你好池摧,你想聽 TCP 的笑話么焦除?嗯,我想聽一個 TCP 的笑話作彤。好的膘魄,我會給你講一個TCP 的笑話。好的竭讳,我會聽一個TCP 的笑話创葡。你準(zhǔn)備好聽一個TCP 的笑話么?嗯绢慢,我準(zhǔn)備好聽一個TCP 的笑話Ok灿渴,那我要發(fā) TCP 笑話了。大概有 10 秒胰舆,20 個字骚露。嗯,我準(zhǔn)備收你那個 10 秒時長缚窿,20 個字的笑話了棘幸。抱歉,你的連接超時了倦零。你好够话,你想聽 TCP 的笑話么 蓝翰。過癮不,沒過癮再來一個我給你們講個UDP的笑話吧女嘲,哈哈哈哈哈哈畜份。
    有關(guān)實現(xiàn)可靠 UDP 可參照這里,我的實現(xiàn)思路類似欣尼,文末有同道的討論爆雹,僅供參考 http://blog.codingnow.com/2016/03/reliable_udp.html

  • 鎖的作用是什么?iOS 中有哪些鎖愕鼓?怎么使用钙态?

    使用方法菇晃,參照這里:
    http://yulingtianxia.com/blog/2015/11/01/More-than-you-want-to-know-about-synchronized/
    http://www.reibang.com/p/ddbe44064ca4

  • 在慢速網(wǎng)絡(luò)與高丟包率網(wǎng)絡(luò)下保證請求結(jié)果的可靠性册倒?在運(yùn)營商屏蔽服務(wù)器時,如何解決 App 與 服務(wù)器通信磺送?

    多次請求驻子,與后端合作合并部分請求,減少 request 的復(fù)雜度和大泄啦印崇呵;關(guān)鍵請求為了確保可達(dá)馅袁,可以先持久化域慷,萬一失敗從持久層恢復(fù)重試;失敗后通知用戶手動重試汗销,提示網(wǎng)絡(luò)質(zhì)量犹褒;一般的請求失敗也無妨。 如果在運(yùn)營商屏蔽服務(wù)時弛针,與運(yùn)營商聯(lián)系協(xié)商解決化漆,或采用其他云服務(wù)。

  • 在需求多變的前提下钦奋,你會如何設(shè)計,使用什么樣的技術(shù)來保證高復(fù)用性與遠(yuǎn)端控制疙赠?

    復(fù)雜場景 ReactNative付材、簡單場景 Hybrid、Native 的自定義 UI 控件封裝

  • SQLite 圃阳、CoreData厌衔、Realm 等數(shù)據(jù)庫技術(shù)如何取舍?如果一個數(shù)據(jù)庫很大捍岳,查詢性能很低富寿,如何改善這種情況睬隶,請設(shè)計一下表結(jié)構(gòu)?

    數(shù)據(jù)庫是持久化的需求:最簡單的場景用 Plist 或簡單的文件存儲(JSON 页徐、XML等)苏潜;在 iOS 上平臺上單獨管理的可以考慮 CoreData;如果需要與安卓平臺共用數(shù)據(jù)庫可選用 SQLite 或 Realm 变勇;Realm 使用方便恤左,也可跨多平臺,并且專為移動平臺設(shè)計搀绣,查詢性能是 CoreData 和 SQLite 的五倍飞袋,但是多線程處理不好; SQLite 需要傳統(tǒng)數(shù)據(jù)庫基礎(chǔ)链患,但是與傳統(tǒng)數(shù)據(jù)庫兼容性好巧鸭,易于遷移。大數(shù)據(jù) A 抽出關(guān)鍵詞做成小數(shù)據(jù)庫 B麻捻,小數(shù)據(jù)庫與大數(shù)據(jù)采用一對一關(guān)系纲仍,B 中的每一條記錄都有 A 中的一條記錄與之匹配,A 中主鍵是關(guān)鍵字芯肤,鍵值是 B 的主鍵巷折,查詢時查詢小數(shù)據(jù)庫,然后再匹配 A 的主鍵崖咨。
    數(shù)據(jù)庫的關(guān)系可以參照微軟此文:
    https://technet.microsoft.com/en-us/library/ms190651(v=sql.105).aspx
    Realm 與 CoreData 和 SQLite 的比較:
    https://sebastiandobrincu.com/blog/5-reasons-why-you-should-choose-realm-over-coredata

  • 你們在 App 開發(fā)中遇到什么難點锻拘?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市击蹲,隨后出現(xiàn)的幾起案子署拟,更是在濱河造成了極大的恐慌,老刑警劉巖歌豺,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件推穷,死亡現(xiàn)場離奇詭異,居然都是意外死亡类咧,警方通過查閱死者的電腦和手機(jī)馒铃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痕惋,“玉大人区宇,你說我怎么就攤上這事≈荡粒” “怎么了议谷?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堕虹。 經(jīng)常有香客問我卧晓,道長芬首,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任逼裆,我火速辦了婚禮郁稍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘波附。我一直安慰自己艺晴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布掸屡。 她就那樣靜靜地躺著封寞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仅财。 梳的紋絲不亂的頭發(fā)上狈究,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音盏求,去河邊找鬼抖锥。 笑死,一個胖子當(dāng)著我的面吹牛碎罚,可吹牛的內(nèi)容都是我干的磅废。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荆烈,長吁一口氣:“原來是場噩夢啊……” “哼拯勉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起憔购,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宫峦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玫鸟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导绷,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年屎飘,在試婚紗的時候發(fā)現(xiàn)自己被綠了妥曲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钦购,死狀恐怖檐盟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肮雨,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布箱玷,位于F島的核電站怨规,受9級特大地震影響陌宿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜波丰,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一壳坪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掰烟,春花似錦爽蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至先馆,卻和暖如春发框,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煤墙。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工梅惯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仿野。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓铣减,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脚作。 傳聞我的和親對象是個殘疾皇子葫哗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容