(滴滴二面结束15分钟后开始)
时长:1h
1. 项目问答
1.1 你在这个App项目中使用了数据库,为什么不选取其他的方法?(变相问iOS有哪些持久化方法)
答:userDefault、plist、归档技术都仅限于轻量级的数据存储和持久化,不适合需求;core data由于有不小的学习成本,没有采用;数据库用的比较广泛,在Swift中也有较好的支持
1.2 你感觉Swift语言相比于C++这类语言,有什么样的特点?
答:安全性、代码风格现代化等等.......
1.3 你认为SwiftUI和UIKit有什么区别?
答:代码风格不同。(面试官提醒是否知道声明式风格和命令式风格,然后恍然大悟就是说不出来这俩名词)
1.4 你在项目中用到了通知NotificationCenter,为什么?
答:为了检测键盘的高度以实现SnapKit自动布局约束
1.5 iOS中的通知,他们的处理方式是在什么线程中的?(没答上来)
2. Swift基础
2.1 在Swift中,类和结构体的区别?
2.2 在Swift中的类和结构体,与C++中的类和结构体,有什么不同?
答:Swift的类是单继承,C++是多继承;C++中类和结构体同样可以继承、定义属性、方法,除了访问权限控制外,没有太大的区别
2.3 Swift的闭包是?
答:在Swift中,闭包实际上是广义函数。闭包其实就是一段代码块,可以捕获上下文的值来进行一些逻辑处理,此外,闭包也是一种引用类型
2.4 讲一下你了解的架构?MVC?
2.5 如何优化MVC?(MVVM)
2.6 用到过哪些设计模式?
答:单例模式、命令模式(target-action机制)、代理模式、观察者模式、装饰模式(extension)
2.7 iOS有哪些创建多线程的方法?
答:GCD、operationQueue、NSThread、p_thread
2.8 GCD中串行、并行、同步、异步是指?他们之间的四种组合,工作的方式是什么样的?
2.9 什么是循环引用?如何解决?
3. 算法与数据结构
3.1 有哪些排序算法?
3.2 快排的思路?
3.3 算法题目:口述,升序数组中寻找两数之和等于target(双指针)
3.4 算法题目:口述,如果有10万个无序数据,如何进行快速的排序?(堆排)
4. 反问:工作性质:参与类似智能家居App的开发