如何面試一個Swift程序員

前言

說到Swift不得不提一下Objective-C。程序員

Objective-C做爲和C++同一時代的語言,是蘋果和Smalltalk生下的孩子,它寄託了蘋果無盡的指望。面試

然而時代在發展,人們經過無數次實踐總結出了各類編程思想。Objective-C那詭異的中括號和動態語言的弊端,讓蘋果背了愈來愈多的技術債。 大號煉廢了就開個小號。算法

因而蘋果總結了現代各類語言的特性,各類編程思想,各類基因摻雜培育出了Swift。一樣Swift寄託了蘋果無盡的指望,與此同時承諾依舊不會拋棄Objective-C這個孩子。(固然現實就是這麼殘忍,Objective-C被拋棄的命運是註定的,哪怕依舊有不少它的粉絲,可是一旦親爹都不想養了,光靠粉絲接濟是沒用的)編程

因爲Swift身上有不少其餘語言的基因,以致於不少吃瓜羣衆對Swift有很深的誤解,有的人認爲它是一門腳本語言,有的人認爲它是OC的一個語法糖,有的人認爲它的速度很慢。後端

實際上和JS這種十幾天就誕生出來的語言不一樣。Swift包含了不少細節性的設計,每個語法都是通過不斷地推敲和演練的。經歷過Swift演變升級到如今的穩定Swift5的人應該都懂。網絡

這兩天靜極思動,面了幾家試,發現招聘軟件上已經開始有專門招Swift程序員的公司。閉包

不過發現不少面試官問的最最最的問題就是 類和結構體的區別是什麼。。。 還有什麼是面向協議。而後就沒了。。。app

仔細想了想要想區分Swift程序員的能力,光靠這兩個問題是絕對不行的。有不少問題能夠問(下面問題深度順序比較亂,難度不是依次遞增的):函數式編程

1.類和結構體的區別是什麼

這個問題不少面試官問的時候更多時候想要獲得的答案是函數

類和結構體的 建立方式一個在堆一個在棧,或者類是引用類型 結構體是值類型 這種只要是Swifter都懂得答案。

可是其實也能夠深刻的問一下,好比類和結構體的 編譯方式區分,分類和類的編譯方式區分,Swift爲何要在有類的同時又設計告終構體和枚舉。等等

2.寫時拷貝機制

Swift自己是很建議程序員少用類 多用結構體 枚舉。可是使用結構體的時候,寫時拷貝若是不清楚的話,很容易寫出性能不是很好的代碼。若是是對算法要求高的公司寫時拷貝機制是必問的。

3.模式匹配

其餘語言使用Switch語法或多或少 都有這樣那樣的限制,Swift的Switch就不同,除了對枚舉 數字 字符串 Switch,還能夠對任意的實現了~=運算符的對象 Switch。還支持where子句、匹配範圍、類型推斷轉換。。。等等。如此強大的Switch,面試不深刻問一下豈不是惋惜。

4.協議

Swift的一大亮點就是面向協議開發,程序員能夠 對協議擴展默認實現。不但能實現其餘語言的相似多繼承的效果、並且面向協議開發能對代碼帶來極大的擴展性。

5.泛型

Swift的泛型感受真的是作到了極致了,Swift標準庫裏面用到了大量的協議和泛型。

若是想招個有點水平的Swift開發、泛型豈能不問。

泛型除了問 where泛型約束 這些,也能夠問下爲何Swift標準庫好比 swap map這些函數爲何要用到泛型,只用協議有什麼弊端。

@_specialize也能夠問下

6.運算符、下標、字面量協議、尾隨閉包

這幾個特性可讓Swift實現不少語法級別的擴展、也能夠問下。

7.Optional、變量常量、類型檢查、擴展

現代語言設計有不少必選項。Kotlin和Swift有不少類似之處,各有所長。 可是他們不約而同的設計了相似於Optional這些特性,主要仍是由於這些特性都是太多人踩過坑,踩出來的經驗。舊時代語言大致定型,很差大改,新時代語言設計之初確定會考慮這些特性。

8.函數式編程

什麼函子、單子 使勁問、函數是第一公民之類的也都是必問的。

9.響應式編程

能夠問問RxSwift、也能夠問問蘋果新出的Combine,思想都同樣。 好比響應式編程在網絡請求,數據解析,UI響應 等等各個方面的表現

10.單向數據流模式

結合Redux問問單項數據流的一些流程原理。(Swift版的有個ReSwift或者RxFeedback等等)

11.MVC、MVVM、Coordinator、單向數據流

這些模式用法千人千面,沒有標準答案,均可以深刻探討

12.SwiftUI

蘋果新出的UI庫,結合Flutter,討論二者之間各自的好處

13.Swift5.1新特性

好比@propertyWrapper、@_functionBuilder、@dynamicMemberLookup每個都值得探討

14.Swift在其餘領域的擴展

好比探討下Swift在Web、後端開發上面的思路、探討下Swift在人工智能上面有什麼語法的優越性、以及Swift在直接使用其餘語言所寫的庫的可行性思路。

結語

大概想了這麼十多個問題,還有不少優秀的特性和麪試問題,數不勝數。

整體而言,Swift是一門入門有點小門檻,深刻學習有個大門檻的語言,難學難精。很容易區分程序員的水平,兩個程度不一樣的程序員寫出的Swift代碼 從美觀性、性能上面很容易就能看出差距。

可是一旦把Swift的設計理念 理清楚,想清楚爲何這樣設計,會發現一通百通,Swift學會,其餘語言也就那麼回事。

相關文章
相關標籤/搜索