<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何面試一個Swift程序員

          共 2701字,需瀏覽 6分鐘

           ·

          2021-12-17 00:36

          ????關(guān)注后回復(fù) “進群” ,拉你進程序員交流群????


          作者 | ZJaDe

          來源 | 掘金

          https://juejin.cn/post/6844903945408610312



          前言

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

          Objective-C作為和C++同一時代的語言,是蘋果和Smalltalk生下的孩子,它寄托了蘋果無盡的期望。

          然而時代在發(fā)展,人們通過無數(shù)次實踐總結(jié)出了各種編程思想。Objective-C那詭異的中括號和動態(tài)語言的弊端,讓蘋果背了越來越多的技術(shù)債。

          大號煉廢了就開個小號。

          于是蘋果總結(jié)了現(xiàn)代各種語言的特性,各種編程思想,各種基因摻雜培育出了Swift。同樣Swift寄托了蘋果無盡的期望,與此同時承諾依舊不會拋棄Objective-C這個孩子。

          (當(dāng)然現(xiàn)實就是這么殘忍,Objective-C被拋棄的命運是注定的,哪怕依舊有很多它的粉絲,但是一旦親爹都不想養(yǎng)了,光靠粉絲接濟是沒用的)


          由于Swift身上有很多其他語言的基因,以至于很多吃瓜群眾對Swift有很深的誤解,有的人認(rèn)為它是一門腳本語言,有的人認(rèn)為它是OC的一個語法糖,有的人認(rèn)為它的速度很慢。

          實際上和JS這種十幾天就誕生出來的語言不同。Swift包含了很多細(xì)節(jié)性的設(shè)計,每一個語法都是經(jīng)過不斷地推敲和演練的。經(jīng)歷過Swift演變升級到現(xiàn)在的穩(wěn)定Swift5的人應(yīng)該都懂。

          這兩天靜極思動,面了幾家試,發(fā)現(xiàn)招聘軟件上已經(jīng)開始有專門招Swift程序員的公司。


          不過發(fā)現(xiàn)很多面試官問的最最最的問題就是 類和結(jié)構(gòu)體的區(qū)別是什么。。。還有什么是面向協(xié)議。然后就沒了。。。

          仔細(xì)想了想要想?yún)^(qū)分Swift程序員的能力,光靠這兩個問題是絕對不行的。有很多問題可以問(下面問題深度順序比較亂,難度不是依次遞增的):

          1.類和結(jié)構(gòu)體的區(qū)別是什么

          這個問題很多面試官問的時候更多時候想要得到的答案是

          類和結(jié)構(gòu)體的 創(chuàng)建方式一個在堆一個在棧(結(jié)構(gòu)體一般會被優(yōu)化存儲到棧上,但不是絕對的),或者類是引用類型 結(jié)構(gòu)體是值類型 這種只要是Swifter都懂得答案。

          (個人測試過結(jié)構(gòu)體和類的創(chuàng)建速度,因為結(jié)構(gòu)體創(chuàng)建一般不涉及到堆內(nèi)存分配,創(chuàng)建速度比類快了10w倍不止,早期的swift版本效果可能沒這么大,10w這個數(shù)字也是不準(zhǔn)的,但的確快了好幾個量級。當(dāng)然類創(chuàng)建速度也不慢,只不過是相對而言)

          但是其實也可以深入的問一下,比如類和結(jié)構(gòu)體的 編譯方式區(qū)分,分類和類的編譯方式區(qū)分,Swift為什么要在有類的同時又設(shè)計了結(jié)構(gòu)體和枚舉。等等

          2.寫時拷貝機制

          Swift本身是很建議程序員少用類 多用結(jié)構(gòu)體 枚舉。但是使用結(jié)構(gòu)體的時候,寫時拷貝如果不清楚的話,很容易寫出性能不是很好的代碼。如果是對算法要求高的公司寫時拷貝機制是必問的。

          3.模式匹配

          其他語言使用Switch語法或多或少 都有這樣那樣的限制,Swift的Switch就不一樣,除了對枚舉 數(shù)字 字符串 Switch,還可以對任意的實現(xiàn)了~=運算符的對象 Switch。還支持where子句、匹配范圍、類型推斷轉(zhuǎn)換。。。等等。如此強大的Switch,面試不深入問一下豈不是可惜。

          4.協(xié)議

          Swift的一大亮點就是面向協(xié)議開發(fā),程序員可以 對協(xié)議擴展默認(rèn)實現(xiàn)。不但能實現(xiàn)其他語言的類似多繼承的效果、而且面向協(xié)議開發(fā)能對代碼帶來極大的擴展性。

          5.泛型

          Swift的泛型感覺真的是做到了極致了,Swift標(biāo)準(zhǔn)庫里面用到了大量的協(xié)議和泛型。
          如果想招個有點水平的Swift開發(fā)、泛型豈能不問。

          泛型除了問 where泛型約束 這些,也可以問下為什么Swift標(biāo)準(zhǔn)庫比如 swap map這些函數(shù)為什么要用到泛型,只用協(xié)議有什么弊端。

          @_specialize也可以問下


          6.運算符、下標(biāo)、字面量協(xié)議、尾隨閉包

          這幾個特性可以讓Swift實現(xiàn)很多語法級別的擴展、也可以問下。

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

          現(xiàn)代語言設(shè)計有很多必選項。Kotlin和Swift有很多相似之處,各有所長。
          但是他們不約而同的設(shè)計了類似于Optional這些特性,主要還是因為這些特性都是太多人踩過坑,踩出來的經(jīng)驗。舊時代語言大體定型,不好大改,新時代語言設(shè)計之初肯定會考慮這些特性。


          8.函數(shù)式編程

          什么函子、單子 使勁問、函數(shù)是第一公民之類的也都是必問的。

          9.響應(yīng)式編程

          可以問問RxSwift、也可以問問蘋果新出的Combine,思想都一樣。
          比如響應(yīng)式編程在網(wǎng)絡(luò)請求,數(shù)據(jù)解析,UI響應(yīng) 等等各個方面的表現(xiàn)

          10.單向數(shù)據(jù)流模式

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


          11.MVC、MVVM、Coordinator、單向數(shù)據(jù)流

          這些模式用法千人千面,沒有標(biāo)準(zhǔn)答案,都可以深入探討

          12.SwiftUI

          蘋果新出的UI庫,結(jié)合Flutter,討論兩者之間各自的好處

          13.Swift5.1新特性

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

          14.Swift在其他領(lǐng)域的擴展

          比如探討下Swift在Web、后端開發(fā)上面的思路、探討下Swift在人工智能上面有什么語法的優(yōu)越性、以及Swift在直接使用其他語言所寫的庫的可行性思路。

          結(jié)語

          大概想了這么十多個問題,還有很多優(yōu)秀的特性和面試問題,數(shù)不勝數(shù)。


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

          但是一旦把Swift的設(shè)計理念 理清楚,想清楚為什么這樣設(shè)計,會發(fā)現(xiàn)一通百通,Swift學(xué)會,其他語言也就那么回事。




          作者 | ZJaDe

          來源 | 掘金

          https://juejin.cn/post/6844903945408610312

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點這里好文分享給更多人↓↓

          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月成人丁香 | 奇米av | 日屄小视频 | 成人免费版 欧美州 | 国产精品 久久久精品cos |