iOS面試那點事

2021-07-11 22:44:53 字數 2638 閱讀 9509

我在面試中遇到的一些問題 希望分享出來對大家有用

1、題目:求1+2+…+n,

要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(a?b:c)。

其實會有很多種解法,但是我只是了解 這個邏輯與的方式 因為 這個邏輯與利用了語言的特性 0代替bool值false 來解決遞迴中的判斷問題

int addfunc(int i)

3、kvc 和 kvo

kvc(key-value-coding)內部的實現:乙個物件在呼叫setvalue的時候,(1)首先根據方法名找到執行方法的時候所需要的環境引數。(2)他會從自己isa指標結合環境引數,找到具體的方法實現的介面。(3)再直接查詢得來的具體的方法實現。kvo(key-value- observing):當觀察者為乙個物件的屬性進行了註冊,被觀察物件的isa指標被修改的時候,isa指標就會指向乙個中間類,而不是真實的類。所以 isa指標其實不需要指向例項物件真實的類。所以我們的程式最好不要依賴於isa指標。在呼叫類的方法的時候,最好要明確物件例項的類名

4、tcp/udp區別聯絡

tcp—傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。

udp—使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並不能保證它們能到達目的地。由於udp在傳輸資料報前不用在客戶和伺服器之間建立乙個連線,且沒有超時重發等機制,故而傳輸速度很快

tcp(transmission control protocol,傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次「對話」才能建立起來,我們來看看這三次對話的簡單過程:1.主機a向主機b發出連線請求資料報;2.主機b向主機a傳送同意連線和要求同步(同步就是兩台主機乙個在傳送,乙個在接收,協調工作)的資料報;3.主機a再發出乙個資料報確認主機b的要求同步:「我現在就發,你接著吧!」,這是第三次對話。三次「對話」的目的是使資料報的傳送和接收同步,經過三次「對話」之後,主機a才向主機b正式傳送資料。

udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料報傳送過去! udp適用於一次只傳送少量資料、對可靠性要求不高的應用環境。

tcp協議和udp協議的差別

是否連線面向連線面向非連線

傳輸可靠性可靠不可靠

應用場合傳輸大量資料少量資料

速度慢快

5、socket連線和http連線的區別

簡單說,你瀏覽的網頁(**以http://開頭)都是http協議傳輸到你的瀏覽器的, 而http是基於socket之上的。socket是一套完成tcp,udp協議的介面。

http協議:簡單物件訪問協議,對應於應用層 ,http協議是基於tcp連線的

tcp協議: 對應於傳輸層

ip協議: 對應於網路層

tcp/ip是傳輸層協議,主要解決資料如何在網路中傳輸;而http是應用層協議,主要解決如何包裝資料。

socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面(api),通過socket,我們才能使用tcp/ip協議。

http連線:http連線就是所謂的短連線,即客戶端向伺服器端傳送一次請求,伺服器端響應後連線即會斷掉;

socket連線:socket連線就是所謂的長連線,理論上客戶端和伺服器端一旦建立起連線將不會主動斷掉;但是由於各種環境因素可能會是連線斷開,比如說:伺服器端或客戶端主機down了,網路故障,或者兩者之間長時間沒有資料傳輸,網路防火牆可能會斷開該連線以釋放網路資源。所以當乙個socket連線中沒有資料的傳輸,那麼為了維持連線需要傳送心跳訊息~~具體心跳訊息格式是開發者自己定義的

我們已經知道網路中的程序是通過socket來通訊的,那什麼是socket呢?socket起源於unix,而unix/linux基本哲學之一就是「一切皆檔案」,都可以用「開啟open –> 讀寫write/read –> 關閉close」模式來操作。我的理解就是socket就是該模式的乙個實現,socket即是一種特殊的檔案,一些socket函式就是對其進行的操作(讀/寫io、開啟、關閉),這些函式我們在後面進行介紹。我們在傳輸資料時,可以只使用(傳輸層)tcp/ip協議,但是那樣的話,如果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如http、ftp、telnet等,也可以自己定義應用層協議。web使用http協議作應用層協議,以封裝http文字資訊,然後使用tcp/ip做傳輸層協議將它發到網路上。

1)socket是乙個針對tcp和udp程式設計的介面,你可以借助它建立tcp連線等等。而tcp和udp協議屬於傳輸層 。

而http是個應用層的協議,它實際上也建立在tcp協議之上。

(http是轎車,提供了封裝或者顯示資料的具體形式;socket是發動機,提供了網路通訊的能力。)

2)socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面(api),通過socket,我們才能使用tcp/ip協議。socket的出現只是使得程式設計師更方便地使用tcp/ip協議棧而已,是對tcp/ip協議的抽象,從而形成了我們知道的一些最基本的函式介面。

面試那點事!!!

序言 不是在被打擊的路上,就是正在遭受攻擊中,生活就是這樣,不斷的覆盤,不斷的出現新的故障。不是在面試的路上,就是在被面試的途中。風言風語 我的口頭禪是,我不信。為了說這一句話,臉都被打腫了,現實教育我,我不信的東西,都將會發生。然而我依舊不信,只是沒找到合適的人,所以才會被赤裸裸的打臉。選擇比努力...

iOS開發Runtime那點事

runtime從字面上的意思理解就是執行時間,run 跑,執行 time 時間 在ios中呢俗稱執行時,它是一套底層的純c語言api,屬於乙個c語言庫,包含了很多底層的c語言api,同時它也是oc的幕後工作者,我們平時寫的oc 在執行的過程中都會轉為runtime的c語言 注意哦 用到runtime...

iOS螢幕適配那點兒事

首先要明白幾個概念 座標 表示螢幕的物理尺寸大小 畫素 表示螢幕的大小,和座標之間的比值對我們很重要,一般是1 1或1 2.ppi 就是座標和畫素的比值。ios螢幕適配可以分為兩部分,一 螢幕大小的適配,二 畫素的適配。螢幕大小的適配 5 5s 5c之後,因為螢幕的大小改變了,使用絕對定位是不可行的...