如何面试一个Swift程序员

前言

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

Objective-C作为和C++同一时代的语言,是苹果和Smalltalk生下的孩子,它寄托了苹果无尽的期望。

然而时代在发展,人们通过无数次实践总结出了各种编程思想。Objective-C那诡异的中括号和动态语言的弊端,让苹果背了越来越多的技术债。

大号炼废了就开个小号。

于是苹果总结了现代各种语言的特性,各种编程思想,各种基因掺杂培育出了Swift。同样Swift寄托了苹果无尽的期望,与此同时承诺依旧不会抛弃Objective-C这个孩子。(当然现实就是这么残忍,Objective-C被抛弃的命运是注定的,哪怕依旧有很多它的粉丝,但是一旦亲爹都不想养了,光靠粉丝接济是没用的)

如果你正在面试,或者正准备跳槽,不妨看看我精心总结的面试资料:https://gitee.com/Mcci7/i-oser 来获取一份详细的大厂面试资料 为你的跳槽加薪多一份保障

由于Swift身上有很多其他语言的基因,以至于很多吃瓜群众对Swift有很深的误解,有的人认为它是一门脚本语言,有的人认为它是OC的一个语法糖,有的人认为它的速度很慢。

实际上和JS这种十几天就诞生出来的语言不同。Swift包含了很多细节性的设计,每一个语法都是经过不断地推敲和演练的。经历过Swift演变升级到现在的稳定Swift5的人应该都懂。

这两天静极思动,面了几家试,发现招聘软件上已经开始有专门招Swift程序员的公司。
不过发现很多面试官问的最最最的问题就是 类和结构体的区别是什么。。。 还有什么是面向协议。然后就没了。。。

仔细想了想要想区分Swift程序员的能力,光靠这两个问题是绝对不行的。有很多问题可以问(下面问题深度顺序比较乱,难度不是依次递增的):

1.类和结构体的区别是什么

这个问题很多面试官问的时候更多时候想要得到的答案是

类和结构体的 创建方式一个在堆一个在栈(结构体一般会被优化存储到栈上,但不是绝对的),或者类是引用类型 结构体是值类型 这种只要是Swifter都懂得答案。(个人测试过结构体和类的创建速度,因为结构体创建一般不涉及到堆内存分配,创建速度比类快了10w倍不止,早期的swift版本效果可能没这么大,10w这个数字也是不准的,但的确快了好几个量级。当然类创建速度也不慢,只不过是相对而言)

但是其实也可以深入的问一下,比如类和结构体的 编译方式区分,分类和类的编译方式区分,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学会,其他语言也就那么回事。

作者:ZJaDe
链接:https://juejin.cn/post/6844903945408610312

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容