大厂iOS面试题——备战2019

面试题

1、多线程的应用

2、GCD实现多个请求都完成之后返回结果

3、A、B两个int数组,得到A数组中B数组不包含的元素

4、事件传递链,页面上一个按钮,按钮和它的superView有一样的action,为什么只执行button的action?

5、runtime的应用

6、array中加入对象,对象的retainCount会加1 如何是的对象自己管理自己的生命周期

7、bugly的卡顿监控原理

8、如何架构一个APP

9、c中,malloc对象,传入了size,free只需要指针,这是为什么?

10、如何管理移动端团队,包括帮助大家提高技术

11、数据库选择原因(realm 、coreData、FMDB、Sqlite)

12、数据库做过哪些优化

13、arc情况下,编译的时候,系统是怎么添加相关内存管理的代码

14、脚本打包原理

15、app运行过程中,同时最多有几个线程,怎么实现的高并发

1、多线程的应用

一、共享资源

共享资源 : 就是内存中的一块资源同时被多个进程所访问,而每个进程可能会对该资源的数据进行修改

问题 : 如果 线程A 访问了某块资源 C,并且修改了其中的数据,此时 线程B 也访问了 资源C,并且也对 C 中的数据进行了修改;那么等到 线程A 和 线程B 执行结束后,此时,资源C 中的数据就并不是最初的设置了

二、线程通信
通常, 一个线程不应该单独存在,应该和其他线程之间有关系

例如 : 一个线程完成了自己的任务后需要切换到另一个线程完成某个任务;或者 一个线程将数据传递给另一个线程

三、线程的状态

  • 当一个线程对象创建并开启后,它就会被放到线程调度池中,等待系统调度;如图


  • 当正在运行的线程被阻塞时,就会被移出 可调度线程池,此时不可再调度它


  • 当线程正常结束,异常退出,强制退出时都会导致该线程死亡,死亡的线程会从内存中移除,无法调度


2、GCD实现多个请求都完成之后返回结果

  • 同步堵塞
  • 栅栏函数
  • 调度组

3、A、B两个int数组,得到A数组中B数组不包含的元素

4、事件传递链,页面上一个按钮,按钮和它的superView有一样的action,为什么只执行button的action?

  • hitTest方法:首先会通过调用自身的 pointInside 方法判断用户触摸的点是否在当前对象的响应范围内,如果 pointInside 方法返回 NO hitTest方法直接返回 nil
  • 如果 pointInside 方法返回 YES hitTest方法接着会判断自身是否有子视图.如果有则调用顶层子视图的 hitTest 方法 直到有子视图返回 View
  • 如果所有子视图都返回 nil hitTest 方法返回自身.

5、runtime的应用

  • 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)
  • 实现给分类增加属性
  • 实现字典的模型和自动转换
  • JSPatch替换已有的OC方法实行等
  • aspect 切面编程

6、array中加入对象,对象的retainCount会加1 如何是的对象自己管理自己的生命周期

[obj autoreleasepool] 将对象加到自动释放池

7、bugly的卡顿监控原理

Runloop的两次source的监控
渲染界面的频率来监控帧率

8、如何架构一个app

架构app 方式方法有很多: MVC MVP MVVM 组件化 路由

9、c中,malloc对象,传入了size,free只需要指针,这是为什么?

总体上说,ptmalloc的内存管理是基于内存池的,而它的内存来源有两种:
1 通过brk()获得
2 通过mmap()匿名映射获得

当用户向ptmalloc请求内存时:
1 首先查找定长内存分配池,如果查找到则返回
2 如果没有空闲内存可供使用,则向操作系统申请一块64Mb的内存,从中切出用户需要的内存,返回

当用户调用free释放内存时:
1 直接将内存放入适当的定长内存池队列
2 如果触发了一定的条件,则将所有空闲内存合并,如果满足释放条件,将内存全部还给操作系统

当然了,上面的描述中省略了太多的细节。比如什么时候走brk什么时候走mmap, 再比如当请求的内存大于一个阙值时,ptmalloc将会变成一个mmap的简单封装,还有触发内存归还操作系统的条件等等。
不过已经足够回答题目中的问题了:因为malloc的时候记录了大小。
这里还可以得出另一个结论:由于malloc的时候记录了大量的状态,所以在频繁使用malloc分配小内存时,会造成大量的内存浪费。举例来说,当反复malloc(1)时,每一次分配的内存在32字节:包括size of previous chunk,size of chunk,bk_chunk_pointer,fd_chunk_pointer共4个指针,合计4 * 8 = 32字节....

10、如何管理移动端团队,包括帮助大家提高技术

这个题没有固定答案,看你个人的经验,团队管理能力

11、数据库选择原因(realm 、coreData、FMDB、Sqlite)

SQLite
SQLite是在世界上使用的最多的数据库引擎,并且还是开源的。它实现了无配置,无服务要求的事务数据库引擎。SQLite可以在Mac OS-X, iOS, Android, Linux, 和 Windows上使用.
由于它是使用ANSI-C开发的,因此它提供了一个简单的,方便使用的编程接口。SQLite也是一个小的,轻量级的,可以被存储在跨平台磁盘文件的完善的数据库。
SQLite之所以这么流行的原因是:

  • 独立于服务器
  • 零配置
  • 多进程和线程下安全访问。
  • 在表中使用含有特殊数据类型的一列或多列存储数据。

Core Data
Core Data是App开发者可以使用的第二大主要的iOS存储技术。你需要根据数据类型和数据量进行管理和存储,SQLite和Core Data都有它们各自的优缺点。Core Data 更加关注于对象而不是传统的表数据库方法。使用Core Data,你可以存储一个Objective-C类的对象。

  • 比SQLite使用更多的内存。
  • 比SQLite使用更多的存储空间。
  • 比SQLite在取数据方面更快。

FMDB
FMDB框架其实只是一层很薄的封装,主要的类也就两个:FMDatabase和FMResultSet。在使用fmdb的时候还需要导入libsqlite3.0.dylib。

core data允许用户使用代表实体和实体间关系的高层对象来操作数据。它也可以管理串行化的数据,提供对象生存期管理与object_graph 管理,包括存储。Core Data直接与Sqlite交互,避免开发者使用原本的SQL语句.

Realm
Realm 是个新技术。Realm天生比前面提到的数据库解决方案更快,更高效。新的解决方案就叫做Realm,它是一个跨平台的移动数据库。它可以在Objective-C 和Swift中使用,并且它是专门为 iOS 和 Android设计的数据库。
Realm最主要的优势是:

  • 绝对免费
  • 快速,简单的使用
  • 没有使用限制
  • 为了速度和性能,运行在自己的持久化引擎上。

由于字数上限,以下面试题答案可加iOS交流群:624212887,群文件获取完整面试题
更多:iOS面试题大全(附答案)

12、数据库做过哪些优化

13、arc情况下,编译的时候,系统是怎么添加相关内存管理的代码

14、脚本打包原理

15、app运行过程中,同时最多有几个线程,怎么实现的高并发

结语

以上问题加参考答案,部分自己回答(群友回答)+网上博客参考,希望对读者有所帮助,回答的不好勿喷!


如下图所示:

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,028评论 1 32
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,019评论 29 471
  • 李老师让每个研修生为自己的书起个书名,我起的是《向暖》。 老师心理研究所的名字叫新阳光,我是由于新阳光才算正式迈进...
    小石榴籽儿阅读 544评论 4 5
  • 《雨后.空港》之一——雨后凉气息,空港似秋移,暑气后日夕,飞鸟掠天际。踟蹰入花影,彳亍小径行,念未来不迎,当下即永...
    静听玉兰花开阅读 759评论 6 4
  • 上一篇粗略说了营卫,十二正经和亚健康的关系,本章继续说卫气。 老实说,要详细论述卫气极难,难的不是在于太深奥,或者...
    MC钟阅读 3,282评论 6 21