一
面试时间 | 2022.02.22 |
---|
面试时长 | 7min | 面试结果 | 未OC | 公司 | 杭州异世界 |
简单自我介绍
面试官问:平时怎么学习iOS的?是用的swift吗?看得懂OC吗?
技术题:
1.UIButton的响应者链是怎么样的?
iOS 从UIButton学习响应者链及相关技术_王颜华的博客-CSDN博客
答:UIButton->UIView(subView没有可忽略)->UIView(superView)->UIViewController->UIWindow(keyWindow)->UIApplication。
? 事件的传递和响应的区别是:事件的传递从上到下(父控件到子控件),事件的响应从下到上(顺着响应者链条向上,子控件到父控件)。
2.说一下UIView和CALayer
-
联系
- CALayer在UIView背后提供更加丰富灵活的图形操作,UIView作为CALayer的代理更加快速地帮CALayer显示一些常用的UI元素并提供交互。
- UIView是所有视图的基类,CALayer是图层类。事实上,UIView和CALayer是平行的层级关系。每一份UIView都有一个CALayer实例的图层属性,视图的责任就是创建并管理图层,以确保当子视图在层级关系中被添加或者被移除的时候,与它们相关联的图层也同样在层级关系树中有相同的操作。
-
区别
- CALayer无法响应事件。UIView和CALayer的最明显区别在于他们的可交互性,即UIView可以响应事件,而CALayer不可以。原因可以从这两个类的继承关系上看出。UIView是继承自UIResponder的,决定了UIView类及其子类能够通过响应链(iOS通过视图层级关系来传递触摸事件)接收并响应用户事件。而CALayer直接继承于NSObject类,所以它不清楚具体的响应链,也就无法响应用户事件。
- 分工不同。UIView侧重于对显示内容的管理和整体布局,而CALayer侧重于显示内容的绘制、显示和动画。
- 所属框架不同。UIView类属于UIKit.framework框架的,UIKit框架主要就是用来构建用户界面的。CALayer类是属于QuartzCore.framework框架的,而且CALayer是作为一个低级的,可以承载绘制内容的底层对象出现在该框架的。
-
两个嵌套的for循环的时间复杂度 答:O(n^2)(有点弱智)
3.iOS里有几种访问权限?具体说明一下。
Swift中一共有五个级别的访问控制权限,从高到低依次是open,public,internal,fileprivate,private。它们遵循的基本规则是:高级别的变量不允许被定义为低级别变量的成员变量,比如一个private的class内部不允许包含public的string值,反正低级变量可以定义在高级别变量中。
- open:具备最高访问权限,其修饰的类和方法,可以在任意模块中被访问和重写。
- public:权限仅次于open,和open唯一的区别是:不允许其他模块进行继承和重写。
- internal:默认权限,只允许在当前的模块中访问,可以继承和重写,不允许在其他模块中访问。
- fileprivate:修饰的对象只允许在当前的文件中访问。
- private:最低级别访问权限,只允许在定于的作用域内访问。
4.反问环节:
-
您认为在iOS代码开发中最难的一点是什么? 答:性能的不断升级。 -
贵公司平时工作的配合机制是什么? 答:利用Git协作。
二
公司 | 谈烁科技 |
---|
面试时间 | 2022.02.28 | 面试时长 | 25min | 面试结果 | 已OC |
没有自我介绍,介绍了学了哪些课,挑了一些数理基础课,提到了C++和计算机网络,面试官很感兴趣,问计算机网络考了多少分,还问绩点怎么样。
1.怎么走上iOS开发这条路的?
- 答:初试(大一下学期在iPhone11上玩伪代码的快捷指令) → 对Swift感兴趣 在iPad上玩playground → 加入iOS Club 系统化学习。
2.Swift和学过的C++进行一个比较
- 答:都是面向对象的。脑子里只记得面向对象和函数式编程是有区别的。
追问1:什么是面向对象?
答:不太清楚啊。参考答案:面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为
追问2:为什么要用面向对象编程呢?
- 答:是为了特定地实现功能?面试官说函数式也行啊。参考答案:优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活。
3.谈谈学习Swift的体会
追问1: 什么情况用optional,用optional会带来什么困扰?
4.项目相关
(1)做这个项目的历程是怎样的?
答:一开始是用约束拉的,之后用SnapKit做优化。
(2)constraints能随着用户需求变动吗?
- 答:不可以(?)面试官纠正:其实是可以的,把它的约束拉到controller里面设置成变量就行。
(3)都用了什么控件?
- 答:自上而下依次是UILabel,UITextField(自己糊涂了,其实也是UILabel的,面试官也糊涂了,跟着问了好久。。。),UIButton.
(4)怎么响应Button指令?
(5)怎么按一下给Button改一个颜色?
-
答:提到了用tag来区分,用UILabel的addTarget来扩展一个方法,用color属性实现。 追问1:怎么操作这个方法呢?(有点疑惑)面试官提示是touchdown。 追问2:那怎么实现渐变呢?(好像看过,说用外部框架吧,也没记住面试官怎么说的)
(6)你还用过哪些控件?
-
答:TableView 追问1:TableView是怎么样的? 答:一开始记岔了,以为是navigation,很自信说是过渡。面试官疑惑,后来反应过来原来是列表。 追问2:你是怎么用的?需要设置哪些属性? 答:蹦出了indexPath和row啊这些属性 追问3:tableview是以行为主,那你知道以列为主的控件吗? 答:不知道。面试官提示是collectionView. 追问4:tableview两个很关键的协议是什么? 答:delegate和datasource。 追问5:怎样填充datasource? 答:用Core Data数据库和SQLite数据库。 追问6:用过HTTP请求进行网络数据的收集吗? 答:这个还真没试过(其实之前试过,失败了,但是没啥操作印象)
沸点工作室是什么啊
- 答:就是大家一起系统地学习技术的工作室(怪我没介绍好)
反问环节
CS-Notes (cyc2018.xyz)
2022届斩获BAT+TW外企Offer的双非硕士菜鸡学姐的秋招分享 - 知乎 (zhihu.com)
推荐这篇博文,反问环节有借鉴一点,个人觉得提到的问题很有水平。
问题1:请问作为iOS实习生,在贵公司工作的一天是怎样的呢?
- 答:公司的主要业务主要是承接一些小型简单的App制作,这对实习生是十分友好的,一上来就能上手做任务,对人能力得到锻炼
问题2:请问针对刚刚的面试,您对我今后的iOS学习有什么建议吗?
- 答:关键要在实践中学习。不要局限于那些小打小闹的练手项目,要向成熟的,企业型的,完备的项目进行挑战。
|