升级版iOS开发面试题,难倒80%的iOS程序员?

序言:

之前一时兴致在本站上出过一份iOS的中级面试题,引起一些关注,不少同学表示对”隐藏关卡“感兴趣。升级版iOS面试题来了,目测难倒90%iOS程序员,目测一大波程序员撸着袖子在靠近。

每道题都不难,对知识广度有要求,请摸着良心回答,不要百度。

**声明:**这份面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正面或消极的评价,请理性对待,权当做闲暇之余的消遣。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:834688868,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

如果你正在面试,或者正准备跳槽不妨动动小手,添加一下咱们的交流群:834688868 来获取一份详细的大厂面试资料 为你的跳槽加薪多一份保障

以下资料在群文件可自行下载!

面试题

1.NSString如何计算字符的个数?

2.PKI体系当中加密和签名有什么区别?

3.如何自己高效实现NSUserDefault?

4.解释下tcp的慢启动特性。

5.如何用HTTP实现长连接?

6.HTTP2.0针对同一个域名的多个请求,会建立多少个tcp连接?

7.数据库建表的时候索引有什么用?

8.Full Text Search为什么快?

9.iOS下如何实现指定线程数目的线程池?

10.介绍下iOS设备获取唯一设备号的历史变迁。

11.函数式编程当中的 first-class function是什么意思呢?

12.如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?

13.谈下Objective C都有哪些锁机制,你一般用哪个?

14.聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。

15.让你设计一种机制检测UIViewController的内存泄漏,你会怎么做?

16.通过[UIImage imageNamed:]生成的对象什么时候被释放?

17.applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。

18.如何终止正在运行的工作线程?

19.穷举iOS下所有的本地持久化方案。

20.如果公司强制996,你有什么心里话要对老板说吗?

一个5年iOS开发者的五点建议
一位有 5年 iOS 开发经验的程序员提出的 5 点建议,违背了这 5 条。。。后果很严重!也许你现在没出现问题,也许只是项目不够庞大!为了所以一定要深记以下五点!我从第一年开始开发 iOS,并参与了无数应用的开发。这里提几个建议,也许能帮助你构建更高效更易维护的项目。

  1. 坚持原生开发原生代码可以避免一些致命的错误。每个跨平台技术将为您的项目增加复杂程度和潜在的 bug。我还没有听说过哪一个大型的项目,因为使用原生开发而后悔,但是我听过很多大型项目后悔使用了跨平台开发技术,不要冒这个险!

  2. 避免使用第三方库如今真的不需要第三方库。几乎所有的东西都可以使用原生框架来解决。网络是一个很好的例子 - 你真的不需要一些高级的第三方库来实现。只需建立自己的基于 iOS 网络的封装,并根据您的项目需求。简单灵活!这几乎满足你所有的需要。当然有一些你无法避免添加第三方库的情况。如果您想要在您的应用程序中使用 Google 地图或Intercom,那就没关系。

  3. 不要使用包管理器既然你不应该使用这么多的第三方库,你也就不需要一个包管理器去管理它们。只需将它们添加到项目中。使用包管理工具不会为您节省任何时间。

  4. 使用代码布局而不是 StoryboardsStoryboards 可能会帮助初学者快速入门,但是一旦需要做一些合理的动态布局,就需要用代码来完成这部分逻辑,所以为什么不从开始的时候就使用代码布局呢。我看到许多项目使用了巨大的 Storyboards,而且大部分的 ViewController 都是没有内容的。更不用说自动布局了 -所有复杂的东西,都可以通过代码简单的实现。我建议将所有布局逻辑放在代码中,而不需要 Storyboard 或自动布局,这样简单而且非常灵活!Core Data 很少被 iOS 开发人员所接受。因为它很复杂,需要大量的 boilerplate才能开始使用,起初看起来并不吸引人。

5.在我的头几年里,我尝试过几次,但失败了。然后我读了这篇很棒的文章,并决定花更多时间来研究它。随着对它研究的深入,我发现 Core Data 真的是处理 iOS 数据非常合适的方式。它有强大的功能,能够帮助您解决一些非常困难的问题,如持久性和数据更改传播,在几乎每个应用程序中都需要。遵循这些建议将让您的项目更具维护性,可以在多个版本迭代中保存下去。让项目维护起来更简单!

Guess you like

Origin blog.csdn.net/qq_36237037/article/details/115186416