2022年ios最新面试(底层基础)问题答案(代码片段)

super_man_风清扬 super_man_风清扬     2022-12-01     732

关键词:

文章目录

Runloop

1、RunLoop 的本质是什么?

答:本质是一个OC对象,内部也有isa指针。

2、Runloop和线程是什么关系?

答:线程和 RunLoop 之间是Key-value的对应关系,是保存在一个全局的 Dictionary 里,线程是key,RunLoop是value,而且是懒加载的。

3、Runloop的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?

答:Runloop的底层数据结构(NSRunLoop是CFRunLoop的封装):
CFRunLoop,RunLoop对象
Mode,运行模式
Source,输入源/事件源
Timer,定时源
Observer,观察者
系统默认注册了5个Mode常用的有3个 常见的几种Mode:
Default : App的默认Mode,通常主线程是在这个Mode下运行
UITracking: 界面跟踪Mode,用于ScrollView`追踪触摸滑动,保证界面滑动时不受其他Mode影响。
Common :并不是一个真的模式,它只是一个标记,如:被标记的 Timer可以在Default模式和UITracking下运行。

基本用不到的Mode:

UIInitialization :私有的mode,App启动的时候的状态,加载出第一个页面后,就转成了Default
GSEventReceive系统的内部 Mode,通常用不到

4、Runloop 的监听状态有哪几种?

答:Entry->BeforeTimers->BeforeSources->BeforeWaiting(休眠)->AfterWaiting(唤醒)->Exit->AllActivities

/* Run Loop Observer Activities */
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) 
    kCFRunLoopEntry = (1UL << 0),                 // 即将进入Loop
    kCFRunLoopBeforeTimers = (1UL << 1),          // 即将处理Timer
    kCFRunLoopBeforeSources = (1UL << 2),         // 即将处理Source
    kCFRunLoopBeforeWaiting = (1UL << 5),         // 即将进入休眠
    kCFRunLoopAfterWaiting = (1UL << 6),          // 刚从休眠中唤醒
    kCFRunLoopExit = (1UL << 7),                  // 即将退出Loop
    kCFRunLoopAllActivities = 0x0FFFFFFFU         // 所有状态
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5、Runloop 的工作流程大概是什么样的?

6、Runloop 有哪些应用?

答:滑动scrollview时候的mode切换,cell的图片下载 将多个耗时操作分开执行,在每次 RunLoop
唤醒时去做一个耗时任务。

7、Runloop的内核态和用户态?

答:CPU的两种工作状态:内核态和用户态(或者称管态和目态)
内核态:系统中既有操作系统的程序,也由普通用户的程序。为了安全和稳定性操作系统的程序不能随便访问,这就是内核态,内核态可以使用所有的硬件资源。
用户态:不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。

线程、队列、锁

1、线程、队列的关系? 一个线程是否可能存在于两个队列?

答:线程是系统调度的最小任务单位,队列是存放管理任务单位的数据结构。

2、队列一定会创建线程吗?

答:不,同步执行方式是不创建新线程的,就在当前线程嗨。

线程按执行方式分为同步、异步,按队列管理分为串行并行,这样有四种组合,加上常说的主线程主队列,那么结合执行方式就有六种组合。

同步串行,不创建线程,所以还是在当前线程一个一个做

同步并行,不创建线程,所以就算是并行,也还是在当前线程一个一个做

异步串行,开辟多一条线程,任务在新开辟的一条线程里面一个一个做

异步并行,开辟多条线程,任务在新开辟的线程里面一起做

同步主队,阻塞

异步主队,同异步串行,因为主队就是串行,但是不开辟新线程,因为主线程是全局的单例的

3、队列是否可以无限制创建?

12个iOS技术面试题及答案总结

pdf正在上传…重新上传取消0星超过10%的资源94KB

正在上传…重新上传取消

下载

答:不能,队列也是对象,要占用内存,受限于硬件资源,不能无限制创建。

4、PerformSelector & NSInvocation优劣对比

答:相同点: 有相同的父类NSObject 区别: 在参数个数<= 2的时候performSelector:的使用要简单一些,但是在参数个数 > 2的时候NSInvocation就简单一些。

5、gcd 的使用,能不能取消?

答:dispatch_block_cancel可以取消尚未执行的任务。已经在运行的,用代码中断

6、如何进行线程保活

答:想让线程不死掉的话,需要为线程添加一个RunLoop

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
// 往RunLoop里面添加Source\\Timer\\Observer,Port相关的是Source1事件
// 添加了一个Source1,但是这个Source1也没啥事,所以线程在这里就休眠了,不会往下走,----end----一直不会打印
[runLoop addPort:[NSMachPort port] forMode:NSRunLoopCommonModes];
[runLoop run];
  • 1
  • 2
  • 3
  • 4
  • 5

GCD

GCD、NSOperation区别, 功能方法区别.

答:
NSThread是早期的多线程解决方案,实际上是把C语言的PThread线程管理代码封装成OC代码。
GCD是取代NSThread的多线程技术,C语法+block。功能强大。 充分利用多核,效率最高
NSOperationQueue是把GCD封装为OC语法,额外比GCD增加了几项新功能。 最大线程并发数 取消队列中的任务 暂停队列中的任务
可以调整队列中的任务执行顺序,通过优先级 线程依赖 NSOperationQueue支持KVO。 这就意味着你可以观察任务的状态属性。
但是NSOperationQueue的执行效率没有GCD高,所以一半情况下,我们使用GCD来完成多线程操作。

gcd queue 的区别

答:
GCD是取代NSThread的多线程技术,C语法+block。功能强大。
充分利用多核,效率最高 NSOperationQueue是把GCD封装为OC语法,额外比GCD增加了几项新功能。
最大线程并发数
取消队列中的任务
暂停队列中的任务
可以调整队列中的任务执行顺序,通过优先级
线程依赖
NSOperationQueue支持KVO。 这就意味着你可以观察任务的状态属性。
但是NSOperationQueue的执行效率没有GCD高,所以一半情况下,我们使用GCD来完成多线程操作。

group 如何实现barrier类似的功能?

网易iOS岗位面试真题面经

docx正在上传…重新上传取消0星超过10%的资源107KB

正在上传…重新上传取消

下载

答:barrier栅栏功能,栅栏前不管多少个异步都要执行完毕,才会执行栅栏后面的操作。
可以尝试用信号量来实现,例如A、B、C、barrier、D并发,但是希望ABC完成后D才开始。
设定线程信号量最大值为3,ABC先执行,等ABC都执行完,D才开始

GCD group 如何实现同步的? (还能用什么实现?)

答:第一串行队列,第二并行队列,第三分组,第四信号量。
串行,一个一个执行,有同步操作的效果
并行,先开一个异步线程,把多个同步线程放在该异步中执行并行
分组,dispatch_group_notify()提供了一个知道group什么时候结束的点
信号量,信号量和锁的作用差不多,可以用来实现同步方式

执行一个 NSThread 任务, 如何在执行过程中让他终止?

答://监测当前线程是否被取消过,如果被取消了,则该线程退出。在线程里面检测取消的标记,然后执行退出 if ([[NSThread
currentThread] isCancelled]) [NSThread exit];

iOS NSOperation 是如何终止/取消任务的?

答:正在执行的任务,NSOperation也是不能取消的,可以考虑用一个条件来做,满足条件则执行此任务,不满足则不执行

多线程,异步执行(async)一个performSelector 会执行么?如果加上 afterDelay呢?

答:performSelector会执行,afterDelay不会执行;原因performSelector只是单纯的直接调用某函数,afterDelay是在该子线程执行一个NSTimer,注意一点:子线程中的runloop默认是没有启动的状态,要想afterDelay生效,要runloop在线程有事务的状态下跑起来,所以需要执行[[NSRunLoop
currentRunLoop] run]。

GCD 实现 NSOperationQueue

答:莫名其妙的题目,要阐述怎么用GCD缔造出NSOperationQueue吗

DispatchQoS的作用

答:线程优化,告诉系统是什么类型的任务。
user_interactive:用户交互(希望尽快完成,用户对结果很期望,不要放太耗时操作)
user_initiated:用户期望(不要放太耗时操作)
default:默认(不是给程序员使用的,用来重置对列使用的)
utility:实用工具(耗时操作,可以使用这个选项)
background:后台
unspecified:未指定
iOS 7.0 之前 优先级
priority_high:高优先级
priority_default:默认优先级
priority_low:低优先级
priority_backgroud:后台优先级

 

2022年java面试题最新整理,附白话答案(代码片段)

2022年Java开发面试题最新整理,附白话答案写在前面:本篇面试题整理是我在北京地区进行面试整理得出,常见的基本都在下面了。基本都是可以直接在面试时用白话回答的答案总结,面试时照此回答即可,有... 查看详情

android面试题及答案整理(2022年最新android面试题大全带答案)(代码片段)

Android面试题及答案(2022年最新Android面试题大全带答案),发现网上很多Android面试题整理都没有答案,所以花了很长时间搜集,本套Android面试题大全,Android面试题大汇总,有大量经典的Android面试题以... 查看详情

2022年最新的android面试大厂必考174题(附带详细答案)(代码片段)

前言互联网行业竞争也越来残酷,我们工程师只有不断地学习,提升自己的能力才更保障你拿到更好的薪水,进入理想的企业(阿里、字节、腾讯、美团等等…)但目前很多人出现了一系列的疑惑问题就是ÿ... 查看详情

前端面试题及答案整理(2022最新版)(代码片段)

收集整理2022年最新前端面试题及答案,方便平时翻看记忆,欢迎各位大佬们补充。一般来说,把下面基础中的高频题写熟练就差不多了。当然去面大厂这些远远不够,还要再刷一些算法题。基础高频1.手写instanceof... 查看详情

21年最新python面试题及答案汇总详解(上)(代码片段)

Python面试你做准备了吗?下面小千整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总。希望能够帮助到大家。21年最新Python面试题及答案汇总详解(上)1、列表(list)和元组(tuple)有什么区别?在我每一次... 查看详情

2022年最新android面试题分享,助你轻松拿下名企offer

前言首先在这里祝大家新年快乐!2022准备跳槽的小伙伴可以往下翻翻看,说不定本文会对你有帮助Android面试题及答案(2022中高级Android面试必备百题)免费分享!!!发现网上很多Android面试题及答案... 查看详情

备战2022年春季面试java基础面试题库《收藏》(代码片段)

前言本文主要涉及到的面试问题点比较多各种各样的,本文主要涉及到的是Java的基础、集合类、并发编程、框架、面试题我就把我常遇到的和一些出现频率比较多的问题整理出来了。如果想要更多的学习资料的小伙伴可以点... 查看详情

2022年最新java工程师面试题从基础到中级到高级

2022年最新Java工程师面试题从基础到中级到高级一.基础Java面向对象有哪些特征,如何应用面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象,不同的事物之间有不同的关系,一个类自身... 查看详情

2022年最新java工程师面试题从基础到中级到高级

2022年最新Java工程师面试题从基础到中级到高级一.基础Java面向对象有哪些特征,如何应用面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象,不同的事物之间有不同的关系,一个类自身... 查看详情

2022年最新java工程师面试题从基础到中级到高级

2022年最新Java工程师面试题从基础到中级到高级一.基础Java面向对象有哪些特征,如何应用面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象,不同的事物之间有不同的关系,一个类自身... 查看详情

2022年最新android大厂面试174题+答案解析,限时分享

几年前,Android大火,人人想要来分一杯羹,导致现在入门级的工作岗位已经非常饱和了,但高级人才依旧稀缺。最直观的表现就是拿offer越来越难,大厂还天天招不到人…因此,无论各行各业,抱怨行... 查看详情

2022年python技术类面试题总结(面试题+答案解析)

...技术A这是一位有着五年Python经验的好友最近对Python岗位面试后的一篇经验总结,从Python就业方向到Python面试题。Python就业方向:下面是Python面试知识点,总结了华为、阿里巴巴等互联网公司Python常问面试题。每道题都提供参考... 查看详情

2022年android面试题及答案汇总,每天20题持续更新中...(从面试官角度帮你审视问题)(代码片段)

...文乃找工作、招人必备之良品。后期不断完善中……对于面试仍然充满畏惧?多次面试后信心被搓,被恶心的面试官打击?这里有一份宝典合集:包括有《1599页Android面试宝典》+《AndroidFramework开发揭秘》+《... 查看详情

2022年4月最新面经答案总结(java基础数据库jvm计网计操集合多线程spring)持续更新

答案有任何不懂欢迎进群询问群主,再次加深知识,热烈欢迎这些提问的小伙伴!!群里有22届秋招招聘汇总信息!一、引言(秉持开源的想法)经过残酷的春招实习面试,自己从中也从牛客和各个大神那些... 查看详情

python基础2022最新练习2(代码片段)

【Python基础2022最新】练习2概述第五题第六题第七题第八题第五题(答案)第六题(答案)第七题(答案)第八题(答案)概述从今天开始,小白我将带领大家学习一下Python零基础入门的内容.本专栏会以讲解+练习的模式,带领大家熟悉Python... 查看详情

python基础2022最新练习2(代码片段)

【Python基础2022最新】练习2概述第五题第六题第七题第八题第五题(答案)第六题(答案)第七题(答案)第八题(答案)概述从今天开始,小白我将带领大家学习一下Python零基础入门的内容.本专栏会以讲解+练习的模式,带领大家熟悉Python... 查看详情

python基础2022最新练习2(代码片段)

【Python基础2022最新】练习2概述第五题第六题第七题第八题第五题(答案)第六题(答案)第七题(答案)第八题(答案)概述从今天开始,小白我将带领大家学习一下Python零基础入门的内容.本专栏会以讲解+练习的模式,带领大家熟悉Python... 查看详情

python基础2022最新练习1(代码片段)

【Python基础2022最新】练习1概述第一题第二题第三题第四题第一题(答案)第二题(答案)第三题(答案)第四题(答案)概述从今天开始,小白我将带领大家学习一下Python零基础入门的内容.本专栏会以讲解+练习的模式,带领大家熟悉Python... 查看详情