技術(shù)部-APP面試題

軟性熱身題

1.自我介紹
2.介紹下你負責的公司項目
3.你有什么優(yōu)點和缺點?
4.在同一個項目組內(nèi),你認為你怎么做會比另外一名更加優(yōu)秀?
5.你為什么離開上家公司?離職原因(這個會在最后問)

軟技能

1、做過哪些工作職責之外的事情?
2、經(jīng)歷過最難的一次業(yè)務(wù)開發(fā)是什么樣的,最終怎么解決的?
3、最近有學習什么新技術(shù)嗎?有何收獲?
4、你最擅長iOS哪方面的知識?怎么體現(xiàn)出來的?
5、常用哪些開源庫,有沒有研究過他們的原理?
6、如何保持個人成長?

你最擅長iOS/android哪方面的知識?怎么體現(xiàn)出來的?

分享推廣的時候,免邀請碼安裝注冊,如何實現(xiàn)

對大量數(shù)據(jù)列表有什么優(yōu)化方案?

優(yōu)化1. 利用UITableView重用cell的機制
優(yōu)化2. 分批次異步加載數(shù)據(jù)
優(yōu)化3. 緩存高度
優(yōu)化4. 將耗時操作放在異步線程來做

對大量數(shù)據(jù)列表有什么優(yōu)化方案?

當前維護的App的崩潰率是多少?怎么追蹤并解決的?線上崩潰如何解決的?
  崩潰率這個就不談了,開發(fā)過程中遇到的崩潰問題主要查看崩潰的棧信息,利用異常斷點來解決。線上崩潰的話,就是利用dSYMS文件來符號化蘋果的崩潰日志來解決了

講一下你做過的性能優(yōu)化的事情。

這個根據(jù)自己情況來說吧。

計算機基礎(chǔ)

http與https?socket編程?tcp、udp?get與post?
tcp三次握手與四次握手
進程與線程的區(qū)別
保持登錄狀態(tài)

如何有效降低 APP 包的大???

圖片壓縮,無用圖片刪除
一些大圖可以動態(tài)下發(fā)
刪除無用類,無用方法
減少三方庫的依賴

如何開展并架構(gòu)一個APP

架構(gòu)app 方式方法有很多: MVC MVP MVVM 組件化 路由

如何優(yōu)化APP啟動耗時

在一個HTTPS連接的網(wǎng)站里,輸入賬號密碼點擊登錄后,到服務(wù)器返回這個請求前,中間經(jīng)歷了什么

類似微博的短視頻列表,滑動停留播放,如何實現(xiàn)?

這個主要就是檢測contentOffset和屏幕中間位置,設(shè)置一些邊界條件,處理滑動過程中的切換行為

如何設(shè)計一套切換主題的方案?

計算機相關(guān)

1、項目編譯的流程是什么?手機上的應(yīng)用程序自點擊圖標開始到首屏內(nèi)容展示都經(jīng)歷了哪些步驟?
2、對于基本數(shù)據(jù)類型,一般是存儲到棧中的,它有沒有可能存在堆上,什么情況下會存儲到堆上?
3、數(shù)據(jù)庫中的事務(wù)是什么意思?
4、使用過什么數(shù)據(jù)庫(我回答的Sqlite,Realm),Realm在使用時有哪些注意事項,如何實現(xiàn)批量操作?
5、LRU算法是否了解,如何實現(xiàn)一套LRU算法?
6、知道哪些設(shè)計模式,怎么理解設(shè)計模式的作用?
7、如果有1000萬個Int類型的數(shù)字,如何對他們排序?
8、設(shè)計一套數(shù)據(jù)庫方案,實現(xiàn)類似微信的搜索關(guān)鍵詞能快速檢索出包含該字符串的聊天信息,并展示對應(yīng)數(shù)量(聊天記錄的數(shù)據(jù)量較大)。

客戶端與服務(wù)器交互的方式中的對稱加密和非對稱加密是什么?

對稱加密,就是加密和解密數(shù)據(jù)都是使用同一個key,這方面的算法有DES。 非對稱加密,加密和解密是使用不同的key。發(fā)送數(shù)據(jù)之前要先和服務(wù)端約定生成公鑰和私鑰,使用公鑰加密的數(shù)據(jù)可以用私鑰解密,反之。這方面的算法有RSA。ssh 和 ssl都是典型的非對稱加密。

安卓端保障新消息及時通知的常見實踐

當app在后臺運行時,環(huán)信IM SDK默認通過一個后臺服務(wù)保持一條連接環(huán)信服務(wù)器的長連接。但Android為了解決系統(tǒng)待機性能差的問題,隨著Android版本的升級逐漸禁止了app級別的后臺服務(wù)的運行。所以在一些版本比較高的Android系統(tǒng)上會有APP進入后臺后接收不到消息的情況。

1.集成廠家推送
集成盡可能多的廠家推送。環(huán)信支持了所有主流的第三方廠家推送服務(wù),包括小米推送,華為推送,OPPO推送,魅族推送,VIVO推送,Google FCM推送

2.手機上開啟APP的“自啟動模式”、“非省電模式
針對沒有廠家推送的手機型號,可以采取的優(yōu)化措施包括:
告知APP使用者去開啟該APP的“自啟動模式”、“非省電模式”,從而可以讓App活得更久。常見的實踐是在APP的設(shè)置頁面,通過提供文檔說明的方式告知APP使用者如何開啟APP的“自啟動模式”、“非省電模式“。也可以在APP的設(shè)置頁面,設(shè)置鏈接,讓用戶點擊鏈接后就跳轉(zhuǎn)到該型號手機的相應(yīng)的系統(tǒng)設(shè)置位置。
3.通過短信通知用戶重要新消息
通過短信告知。方法如下:開通消息回執(zhí);如果在規(guī)定時間內(nèi)(例如1分鐘)沒有返回值“已讀”,環(huán)信將信息轉(zhuǎn)給業(yè)務(wù)系統(tǒng);業(yè)務(wù)系統(tǒng)發(fā)現(xiàn)時間到期后(例如超過3分鐘),業(yè)務(wù)系統(tǒng)服務(wù)器去環(huán)信服務(wù)器查詢,如果沒有下發(fā),然后出發(fā)短信系統(tǒng)發(fā)送信息
4.自定義推送鈴聲
在音視頻通話的場景下,還可以使用自定義推送鈴聲,讓推送的鈴聲提醒更明顯持續(xù)時間更長。請注意,自定義鈴聲,目前只支持華為
5.自定義推送擴展

iOS端保障新消息及時通知的常見實踐

iOS系統(tǒng)因為不允許APP在后臺允許,所以在音視頻場景下,會出現(xiàn)推送提醒不明顯,從而錯過對方發(fā)起的通話請求的情況。

集成PushKit

自定義鈴聲
自定義推送擴展

IOS 講一下對Runloop的理解?

Runloop就是一個運行循環(huán),它保證了在沒有任務(wù)的時候線程不退出,有任務(wù)的時候即使響應(yīng)。Runloop跟線程,事件響應(yīng),手勢識別,頁面更新,定時器都有著緊密聯(lián)系。

IOS 可以用Runloop實現(xiàn)什么功能?

檢測卡頓
線程保活
性能優(yōu)化,將一些耗時操作放到runloop wait的情況處理。

IOS 談?wù)勀阍趇OS中對多線程的理解?

多線程編程是防止主線程堵塞,增加運行效率等等的最佳方法。而原始的多線程方法存在很多的毛病,包括線程鎖死等。在Cocoa中,Apple提供了NSOperation這個類,提供了一個優(yōu)秀的多線程編程方法。

iOS APNS?

第一階段:應(yīng)用程序把要發(fā)送的消息、目的iPhone的標識打包,發(fā)給APNS。 第二階段:APNS在自身的已注冊Push服務(wù)的iPhone列表中,查找有相應(yīng)標識的iPhone,并把消息發(fā)到iPhone。 第三階段:iPhone把發(fā)來的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知。

iOS單元測試框架有哪些?

OCUnit 是 OC 官方測試框架, 現(xiàn)在被 XCTest 所取代。 XCTest 是與 Foundation 框架平行的測試框架。

iOS中持久化方式有哪些?

屬性列表文件 -- NSUserDefaults 的存儲,實際是本地生成一個 plist 文件,將所需屬性存儲在 plist 文件中
對象歸檔 -- 本地創(chuàng)建文件并寫入數(shù)據(jù),文件類型不限
SQLite 數(shù)據(jù)庫 -- 本地創(chuàng)建數(shù)據(jù)庫文件,進行數(shù)據(jù)處理
CoreData -- 同數(shù)據(jù)庫處理思想相同,但實現(xiàn)方式不同

ANDROID 進程?;?/h3>

當前業(yè)界的Android進程保活手段主要分為** 黑、白、灰 **三種,其大致的實現(xiàn)思路如下:

1.黑色保活:不同的app進程,用廣播相互喚醒(包括利用系統(tǒng)提供的廣播進行喚醒)
場景1:開機,網(wǎng)絡(luò)切換、拍照、拍視頻時候,利用系統(tǒng)產(chǎn)生的廣播喚醒app
場景2:接入第三方SDK也會喚醒相應(yīng)的app進程,如微信sdk會喚醒微信,支付寶sdk會喚醒支付寶。由此發(fā)散開去,就會直接觸發(fā)了下面的 場景3
場景3:假如你手機里裝了支付寶、淘寶、天貓、UC等阿里系的app,那么你打開任意一個阿里系的app后,有可能就順便把其他阿里系的app給喚醒了。(只是拿阿里打個比方,其實BAT系都差不多)
2.白色保活:啟動前臺Service
白色?;钍侄畏浅:唵?,就是調(diào)用系統(tǒng)api啟動一個前臺的Service進程,這樣會在系統(tǒng)的通知欄生成一個Notification,用來讓用戶知道有這樣一個app在運行著,哪怕當前的app退到了后臺。
3.灰色?;睿豪孟到y(tǒng)的漏洞啟動前臺Service
灰色保活,這種保活手段是應(yīng)用范圍最廣泛。它是利用系統(tǒng)的漏洞來啟動一個前臺的Service進程,與普通的啟動方式區(qū)別在于,它不會在系統(tǒng)通知欄處出現(xiàn)一個Notification,看起來就如同運行著一個后臺Service進程一樣。這樣做帶來的好處就是,用戶無法察覺到你運行著一個前臺進程(因為看不到Notification),但你的進程優(yōu)先級又是高于普通后臺進程的。

ANDROID 推送到達率如何提高

判手機系統(tǒng),小米使用小米推送,華為使用華為推送,其他手機使用友盟推送

ANDROID 跨進程通信的幾種方式

Intent,比如撥打電話
ContentProvider數(shù)據(jù)庫存儲數(shù)據(jù)
Broadcast廣播通信
AIDL通信,通過接口共享數(shù)據(jù)

ANDROID Activity生命周期

onCreate() 創(chuàng)建活動,做一些數(shù)據(jù)初始化操作 onStart() 由不可見變?yōu)榭梢?onResume() 可以與用戶進行交互,位于棧頂 onPause() 暫停,啟動或恢復另一個活動時調(diào)用 onStop() 停止,變?yōu)椴豢梢?onDestroy() 銷毀 onRestart() 由停止狀態(tài)變?yōu)檫\行狀態(tài)

ANDROID 如何優(yōu)化ListView

①Item布局,層級越少越好,使用hierarchyview工具查看優(yōu)化。 ②復用convertView ③使用ViewHolder ④item中有圖片時,異步加載 ⑤快速滑動時,不加載圖片 ⑥item中有圖片時,應(yīng)對圖片進行適當壓縮 ⑦實現(xiàn)數(shù)據(jù)的分頁加載

Android異步消息處理機制

主要有四個部分: ①. Message (消息) 在線程之間傳遞,可在內(nèi)部攜帶少量信息,用于不同線程之間交換數(shù)據(jù) 可以使用what、arg1、arg2字段攜帶整型數(shù)據(jù) obj字段攜帶Object對象 ②. Handler (處理者) 主要用于發(fā)送和處理消息,sendMessage()用來發(fā)送消息,最終會回到handleMessage()進行處理 ③. MessageQueue (消息隊列) 主要存放所有通過Handler發(fā)送的消息,它們會一直存在于隊列中等待被處理 每個線程只有一個MessageQueue ④. Looper (循環(huán)器) 調(diào)用loop()方法后,會不斷從MessageQueue 取出待處理的消息,然后傳遞到handleMessage進行處理

?著作權(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ù)。

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