大厂面试题

36 篇文章 1 订阅
32 篇文章 0 订阅

电脑杂谈

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" p a t h path 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类的对象。

有想要的面试资料或者其他资料也可以找我,欢迎咨询!需要的可自行下载,还有其他整理好的面试题资料可咨询管理,还有其他面试真题与资料。




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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值