iOS大厂面试问题及答案

电脑杂谈

ios 线程和进程_ios 线程 进程_ios多线程面试题

面试题 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、多线程的应用

一、共享资源

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

所以两个线程访问同一块资源时,需要考虑线程同步问题,即其中一个线程操作改资源时,其他线程不能访问该资源,只能等待,该线程执行结束之后,其他线程才能对该资源进行访问。假如,下载tickets=1,a线程刚执行完①语句,还没开始执行②语句时,cpu资源就被b线程抢夺去了,b线程执行“if(tickets>0)”,因为在此时num还是1,所以b线程将执行①语句,在“--tickets”之后,ticket的数量就变成0,而此时cpu资源就被a线程抢夺去了,接着还没有执行的②语句时,由于此时“ticket=0”,在执行完②语句后,ticket的数量就变成-1了。再稍加思考你会发现这样可能会出问题:由于线程调度器会随机的挂起某一个线程(前面介绍的线程间的切换),所以当线程a对共享数据d的访问(修改、删除等操作)完成之前被挂起,而此时线程b又恰好去访问数据d,那么线程b访问的则是一个不稳定的数据。

二、线程通信

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

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

三、线程的状态

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

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

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

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

同步堵塞

栅栏函数

调度组

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

double cvnorm(const cvarr* arr1,const cvarr* arr2=null,int norm_type=cv_l2,const cvarr* mask=null)。@arr2=grep{-t"path_"}@arr1。 cv_l1 arr1和arr2对应元素差的绝对值。

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

hitTest方法:首先会通过调用自身的 pointInside 方法判断用户触摸的点是否在当前对象的响应范围内,如果 pointInside 方法返回 NO hitTest方法直接返回 nil

返回之后又回到了audioservice的setringermode方法,再判断返回的ringermode和当前的ringermodeinternal是否相等,若不相等,则调用setringermodeint()方法,。下面的工作就是要inlinehook这个函数,具体的过程比较长,方法就是修改函数的前5个字节(内部还要判断,因为不同版本的shell32.dll的这个函数的实现代码还有差异),然后该成跳转到unlockerhook.dll内部的一个函数,这个函数接管这个调用,并判断调用返回值,如果成功就不做处理并直接返回,否则通过shellexecuteex函数来启动unlocker.exe,并把原调用里的文件名作为参数传递给它。 lpaddress.text:100013aa call ds:virtualprotect.text:100013b0 test eax, eax.text:100013b2 jz loc_100014a9下面的工作就是要inlinehook这个函数,具体的过程比较长,方法就是修改函数的前5个字节(内部还要判断,因为不同版本的shell32.dll的这个函数的实现代码还有差异),然后该成跳转到unlockerhook.dll内部的一个函数,这个函数接管这个调用,并判断调用返回值,如果成功就不做处理并直接返回,否则通过shellexecuteex函数来启动unlocker.exe,并把原调用里的文件名作为参数传递给它。

如果所有子视图都返回 nil hitTest 方法返回自身.

5、runtime的应用

具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)

ios 线程 进程_ios多线程面试题_ios 线程和进程

这里有一个iOS交流圈:[891 488 181] 不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
实现给分类增加属性

实现字典的模型和自动转换

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的简单封装,还有触发内存归还操作系统的条件等等。ios多线程面试题

不过已经足够回答题目中的问题了:因为malloc的时候记录了大小。

从代码上我们可以看到(edi为窗口对象指针),处理例程首先判断tagwnd附加数据(edi + 标准窗口结构长度)的ppopupmenu对象指针是否为空,如果为空,那么就是用mnallocpopup为menu窗口对象创建 ppopupmenu结构的内存空间(实际就是在session内存池内分配内存并初始化结构),并将分配出来的ppopupmenu指针写入menu窗口对象的附加数据中。对于某个对象,其 调用存在多态行为的某个函数时,会先通过虚表指针得到虚表.再根据函数在虚表中的偏移来得到相应的函数指针,最后才会调用函数.最后总结一下: 一个对象创建后 ,会在内存中占用一定的空间, 如果对象有虚函数调用的话(ie 中的对象基本都有 ) ,其内存块开头的 4 字节 会指向一个 叫做 虚表的东西 , 当 对象调用虚函数时 首先会 取出 虚表指针 (即 开头的 4字节) ,再到 虚表处根据所调用函数对虚表的相对偏移找到函数指针 , 最终 跳到 函数指针处执行 .。分配的方式有两种: 一种叫 指针碰撞 ,假设java堆中内存是绝对规整的,用过的和空闲的内存各在一边,中间放着一个指针作为分界点的指示器,分配内存就是把那个指针向空闲空间的那边挪动一段与对象大小相等的距离。

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

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

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

SQLite

SQLite是在世界上使用的最多的引擎,并且还是开源的。它实现了无配置,无服务要求的事务引擎。SQLite可以在Mac OS-X, iOS, Android, Linux, 和 Windows上使用.

由于它是使用ANSI-C开发的,因此它提供了一个简单的,方便使用的编程接口。SQLite也是一个小的,轻量级的,可以被存储在跨平台磁盘文件的完善的。

SQLite之所以这么流行的原因是:

独立于服务器

零配置

多进程和线程下安全访问。

在表中使用含有特殊数据类型的一列或多列存储数据。ios多线程面试题

Core Data

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

文章到这里就结束了,你也可以私信我及时获取最新资料以及面试相关资料。如果你有什么意见和建议欢迎给我留言。

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

推荐阅读更多精彩内容