1. 面试问题整理

1.1. 面向对象


1.1.1. 面向对象编程特征有哪些?

  • “抽象”,把现实世界中的某一类东西,提取出来,用程序代码表示;
  • “封装”,把过程和数据包围起来,对数据的访问只能通过已定义的界面;
  • “继承”,一种联结类的层次模型;
  • “多态”,允许不同类的对象对同一消息做出响应。

1.2. 语言特性


1.2.1. OC和Swift如何互相调用?

1.2.2. struct和class的区别?

https://juejin.cn/post/6844903799413276685

  1. 类属于引用类型,结构体属于值类型
  2. 类允许被继承,结构体不允许被继承
  3. 类中的每一个成员变量都必须被初始化,否则编译器会报错,而结构体不需要,编译器会自动帮我们生成init函数,给变量赋一个默认值

1.2.3. Swift设置访问权限如何设置?

https://juejin.cn/post/7012087397765054494

  • open
  • public
  • internal
  • fileprivate
  • private

1.2.4. Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)

https://juejin.cn/post/6844903951519727629

概念:一个接受闭包作为参数的函数,该闭包可能在函数返回后才被调用,也就是说这个闭包逃离了函数的作用域,这种闭包称为逃逸闭包。当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@escaping来明确闭包是允许逃逸。

概念:一个接受闭包作为参数的函数, 闭包是在这个函数结束前内被调用。

1.3. 设计模式


1.3.1. 常见设计模式有哪些?

https://www.cnblogs.com/newsouls/archive/2011/07/28/DesignTemplage.html

  • 单例模式
  • 工厂模式

1.4. 多线程


1.4.1. 如何用GCD同步若干个异步调用?

https://cloud.tencent.com/developer/article/1521135

  • 将几个线程加入到group中, 然后利用group_notify来执行最后要做的动作
  • 利用GCD信号量dispatch_semaphore_t来实现

1.4.2. 创建线程有几种方式?

  • pthread 实现多线程操作
  • NSThread实现多线程
  • GCD 实现多线程
  • NSOperation

1.5. 运行时


1.5.1. KVO的底层实现?

http://chuquan.me/2018/12/12/kvo-principle/

1.6. 内存管理


1.6.1. 对象在什么时候释放?

https://youle.zhipin.com/questions/4c09e5e18447d9dbtnV809W7FlQ~.html

引用计数小于1的时候释放的。在ARC环境下我们不能直接去操作引用计数的值,但是我们可以跟踪是否有strong指针指向、如果没有strong指针指向、则立即销毁。 这里有一个地方值得关注的事自动缓存池,他会延迟销毁时机,但是实际上也是延迟执行re lease而已。

1.7. 单元测试


1.7.1. 是否编写过单元测试?

1.8. 工程结构


1.8.1. 如何管理依赖库?

1.8.2. 组件化开发方式有哪些?

1.9. 加解密


1.9.1. https是什么?

1.9.2. 如何存放敏感信息?

1.9.3. 对称加密和非对称加密的区别?

1.10. 代码管理


1.10.1. 如何使用Git?

results matching ""

    No results matching ""