广告
返回顶部
首页 > 资讯 > 精选 >高级iOS面试题有哪些
  • 320
分享到

高级iOS面试题有哪些

2023-06-04 22:06:06 320人浏览 泡泡鱼
摘要

这篇文章主要介绍“高级iOS面试题有哪些”,在日常操作中,相信很多人在高级ioS面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高级iOS面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧

这篇文章主要介绍“高级iOS面试题有哪些”,在日常操作中,相信很多人在高级ioS面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高级iOS面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

NSArray与NSSet的区别?

  • NSArray内存中存储地址连续,而NSSet不连续

  • NSSet效率高,内部使用hash查找;NSArray查找需要遍历

  • NSSet通过anyObject访问元素,NSArray通过下标访问

NSHashTable与NSMapTable?

  • NSHashTable是NSSet的通用版本,对元素弱引用,可变类型;可以在访问成员时copy

  • NSMapTable是NSDictionary的通用版本,对元素弱引用,可变类型;可以在访问成员时copy

(注:NSHashTable与NSSet的区别:NSHashTable可以通过option设置元素弱引用/copyin,只有可变类型。但是添加对象的时候NSHashTable耗费时间是NSSet的两倍。
NSMapTable与NSDictionary的区别:同上)

属性关键字assign、retain、weak、copy

  • assign:用于基本数据类型和结构体。如果修饰对象的话,当销毁时,属性值不会自动置nil,可能造成野指针。

  • weak:对象引用计数为0时,属性值也会自动置nil

  • retain:强引用类型,ARC下相当于strong,但block不能用retain修饰,因为等同于assign不安全

  • strong:强引用类型,修饰block时相当于copy。

weak属性如何自动置nil的?

  • Runtime会对weak属性进行内存布局,构建hash表:以weak属性对象内存地址为key,weak属性值(weak自身地址)为value。当对象引用计数为0 dealloc时,会将weak属性值自动置nil。

Block的循环引用、内部修改外部变量、三种block

  • block强引用self,self强引用block

  • 内部修改外部变量:block不允许修改外部变量的值,这里的外部变量指的是栈中指针的内存地址。__block的作用是只要观察到变量被block使用,就将外部变量在栈中的内存地址放到堆中。

  • 三种block:NSGlobalBlack(全局)、NSStackBlock(栈block)、NSMallocBlock(堆block)

KVO底层实现原理?手动触发KVO?swift如何实现KVO?

  • KVO原理:当观察一个对象时,runtime会动态创建继承自该对象的类,并重写被观察对象的setter方法,重写的setter方法会负责在调用原setter方法前后通知所有观察对象值得更改,最后会把该对象的isa指针指向这个创建的子类,对象就变成子类的实例。

  • 如何手动触发KVO:在setter方法里,手动实现NSObject两个方法:willChangeValueForKey、didChangeValueForKey

  • swift的kvo:继承自NSObject的类,或者直接willset/didset实现。

categroy为什么不能添加属性?怎么实现添加?与Extension的区别?cateGory覆盖原类方法?多个category调用顺序

  • Runtime初始化时categroy的内存布局已经确定,没有ivar,所以默认不能添加属性。

  • 使用runtime的关联对象,并重写setter和getter方法。

  • Extenstion编译期创建,可以添加成员变量ivar,一般用作隐藏类的信息。必须要有类的源码才可以添加,如NSString就不能创建Extension。

  • category方法会在runtime初始化的时候copy到原来前面,调用分类方法的时候直接返回,不再调用原类。如何保持原类也调用(https://www.jianshu.com/p/40e28c9f9da5)。

  • 多个category的调用顺序按照:Build Phases ->Complie Source 中的编译顺序。

load方法和initialize方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?
load initialize 调用时机 app启动后,runtime初始化的时候 第一个方法调用前调用 调用顺序 父类->本类->分类 父类->本类(如果有分类直接调用分类,本类不会调用) 没实现子类的方法会不会调用父类的 否 是 是否沿用父类实现 否 是

高级iOS面试题有哪些

image

对 runtime 的理解。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局

OC中向对象发送消息时,runtime会根据对象的isa指针找到对象所属的类,然后在该类的方法列表和父类的方法列表中寻找方法执行。如果在最顶层父类中没找到方法执行,就会进行消息转发:Method resoution(实现方法)、fast forwarding(转发给其他对象)、nORMal forwarding(完整消息转发。可以转发给多个对象)

runtime 中,SEL和IMP的区别?

每个类对象都有一个方法列表,方法列表存储方法名、方法实现、参数类型,SEL是方法名(编号),IMP指向方法实现的首地址

autoreleasepool的原理和使用场景?

  • 若干个autoreleasepoolpage组成的双向链表的栈结构,objc_autoreleasepoolpush、objc_autoreleasepoolpop、objc_autorelease

  • 使用场景:多次创建临时变量导致内存上涨时,需要延迟释放

  • autoreleasepoolpage的内存结构:4k存储大小

高级iOS面试题有哪些

image

Autorelase对象什么时候释放?

在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。

Runloop与线程的关系?Runloop的mode? Runloop的作用?内部机制?

  • 每一个线程都有一个runloop,主线程的runloop默认启动。

  • mode:主要用来指定事件在运行时循环的优先级

  • 作用:保持程序的持续运行、随时处理各种事件、节省cpu资源(没事件休息释放资源)、渲染屏幕UI

iOS中使用的、死锁的发生与避免

  • @synchronized、信号量、NSLock等

  • 死锁:多个线程同时访问同一资源,造成循环等待。GCD使用异步线程、并行队列

NSOperation和GCD的区别

  • GCD底层使用C语言编写高效、NSOperation是对GCD的面向对象的封装。对于特殊需求,如取消任务、设置任务优先级、任务状态监听,NSOperation使用起来更加方便。

  • NSOperation可以设置依赖关系,而GCD只能通过dispatch_barrier_async实现

  • NSOperation可以通过KVO观察当前operation执行状态(执行/取消)

  • NSOperation可以设置自身优先级(queuePriority)。GCD只能设置队列优先级(DISPATCH_QUEUE_PRIORITY_DEFAULT),无法在执行的block中设置优先级

  • NSOperation可以自定义operation如NSInvationOperation/NSBlockOperation,而GCD执行任务可以自定义封装但没有那么高的代码复用度

  • GCD高效,NSOperation开销相对高

oc与js交互

  • 拦截url

  • javascriptCore(只适用于UIWEBView)

  • WKScriptMessageHandler(只适用于WKWebView)

  • WebViewJavaScriptBridge(第三方框架)

swift相比OC有什么优势?

struct、Class的区别

  • class可以继承,struct不可以

  • class是引用类型,struct是值类型

  • struct在function里修改property时需要mutating关键字修饰

访问控制关键字(public、open、private、filePrivate、internal)

  • public与open:public在module内部中,class和func都可以被访问/重载/继承,外部只能访问;而open都可以

  • private与filePrivate:private修饰class/func,表示只能在当前class源文件/func内部使用,外部不可以被继承和访问;而filePrivate表示只能在当前swift源文件内访问

  • internal:在整个模块或者app内都可以访问,默认访问级别,可写可不写

OC与Swift混编

  • OC调用swift:import "工程名-swift.h” @objc

  • swift调用oc:桥接文件

map、filter、reduce?map与flapmap的区别?

  • map:数组中每个元素都经过某个方法转换,最后返回新的数组(xx.map({高级iOS面试题有哪些0}))

  • flatmap:同map类似,区别在flatmap返回的数组不存在nil,并且会把optional解包;而且还可以把嵌套的数组打开变成一个([[1,2],[2,3,4],[5,6]] ->[1,2,2,3,4,5,6])

  • filter:用户筛选元素(xxx.filter({$0 > 25}),筛选出大于25的元素组成新数组)

  • reduce:把数组元素组合计算为一个值,并接收初始值()

高级iOS面试题有哪些

image

guard与defer

  • guard用于提前处理错误数据,else退出程序,提高代码可读性

  • defer延迟执行,回收资源。多个defer反序执行,嵌套defer先执行外层,后执行内层

try、try?与try!

  • try:手动捕捉异常

  • try?:系统帮我们处理,出现异常返回nil;没有异常返回对应的对象

  • try!:直接告诉系统,该方法没有异常。如果出现异常程序会crash

@autoclosure:把一个表达式自动封装成闭包

throws与rethrows:throws另一个throws时,将前者改为rethrows

App启动优化策略?main函数执行前后怎么优化

  • 启动时间 = pre-main耗时+main耗时

  • pre-main阶段优化:

  • 删除无用代码

  • 抽象重复代码

  • +load方法做的事情延迟到initialize中,或者+load的事情不宜花费太多时间

  • 减少不必要的framework,或者优化已有framework

  • Main阶段优化

  • didFinishLauchingwithOptions里代码延后执行

  • 首次启动渲染的页面优化

crash防护?

  • unrecognized selector crash

  • KVO crash

  • NSNotification crash

  • NSTimer crash

  • Container crash(数组越界,插nil等)

  • NSString crash (字符串操作的crash)

  • Bad Access crash (野指针)

  • UI not on Main Thread Crash (非主线程刷UI (机制待改善))

内存泄露问题?

主要集中在循环引用问题中,如block、NSTime、perform selector引用计数问题。

UI卡顿优化?

架构&设计模式

  • mvc设计模式介绍

  • MVVM介绍、MVC与MVVM的区别?

  • ReactiveCocoa的热信号与冷信号

  • 缓存架构设计LRU方案

  • SDWebImage源码,如何实现解码

  • AFNetWorking源码分析

  • 组件化的实施,中间件的设计

  • 哈希表的实现原理?如何解决冲突

数据结构&算法

  • 快速排序、归并排序

  • 二维数组查找(每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数)

  • 二叉树的遍历:判断二叉树的层数

  • 单链表判断环

计算机基础

  1. Http与https?Socket编程tcp、udp?get与post?

  2. tcp三次握手与四次握手

  3. 进程与线程的区别

到此,关于“高级iOS面试题有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 高级iOS面试题有哪些

本文链接: https://www.lsjlt.com/news/240083.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 高级iOS面试题有哪些
    这篇文章主要介绍“高级iOS面试题有哪些”,在日常操作中,相信很多人在高级iOS面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高级iOS面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-04
  • php高级面试题有哪些
    小编给大家分享一下php高级面试题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServer也同样的...
    99+
    2023-06-14
  • Vue.js中高级面试题有哪些
    小编给大家分享一下Vue.js中高级面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue-loader 是 Webp...
    99+
    2022-10-19
  • android中高级面试题有哪些
    今天小编给大家分享一下android中高级面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Activity生命...
    99+
    2023-06-04
  • java高级面试题的难点有哪些
    这篇文章主要介绍了java高级面试题的难点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android...
    99+
    2023-06-14
  • 热门的高级Java面试题有哪些
    本篇内容主要讲解“热门的高级Java面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“热门的高级Java面试题有哪些”吧!什么是可变参数?可变参数允许调用参数数量不同的方法。请看下面例子...
    99+
    2023-06-17
  • P6级Java面试题有哪些
    这篇文章主要介绍了P6级Java面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、String stringBuffer和stringBuilderString:...
    99+
    2023-06-02
  • php初级面试题有哪些
    这篇文章主要介绍php初级面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phalc...
    99+
    2023-06-14
  • Redis高频面试题有哪些
    这篇文章将为大家详细讲解有关Redis高频面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是RedisRedis(Remote Dictionary Ser...
    99+
    2022-10-18
  • CSS高频面试题有哪些
    这篇文章主要讲解了“CSS高频面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS高频面试题有哪些”吧!一.什么是 BFC机制BFC(Block...
    99+
    2022-10-19
  • Redis有哪些高频面试题
    本篇内容介绍了“Redis有哪些高频面试题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、说说 Redis 都有哪些应用场景?缓存:这应该...
    99+
    2023-06-04
  • Python高频面试题有哪些
    本篇内容介绍了“Python高频面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. Given an array of inte...
    99+
    2023-06-02
  • Python有哪些高频面试题
    本篇内容主要讲解“Python有哪些高频面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python有哪些高频面试题”吧!一. 将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字...
    99+
    2023-06-02
  • Redis中有哪些高频面试题
    这篇文章将为大家详细讲解有关Redis中有哪些高频面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 为什么这么快?很多人只知道是 K/V NoSQl 内存数...
    99+
    2022-10-18
  • MySQL的高频面试题有哪些
    本篇内容介绍了“MySQL的高频面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.什么是关系型...
    99+
    2022-10-18
  • Redis的高频面试题有哪些
    本篇内容主要讲解“Redis的高频面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis的高频面试题有哪些”吧!1、说说 Redis 都有哪些应用...
    99+
    2022-10-19
  • Redis高频的面试题有哪些
    这篇文章主要介绍“Redis高频的面试题有哪些”,在日常操作中,相信很多人在Redis高频的面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis高频的面试题有...
    99+
    2022-10-19
  • Python的高频面试题有哪些
    这篇文章主要讲解了“Python的高频面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的高频面试题有哪些”吧!一. 如何提高爬取效率?爬虫下载慢主要原因是阻塞等待发往网...
    99+
    2023-06-02
  • Python有哪些高频的面试题
    这篇文章主要介绍“Python有哪些高频的面试题”,在日常操作中,相信很多人在Python有哪些高频的面试题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python有哪些高频的面试题”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • java中级面试题的考点有哪些
    这篇文章主要介绍了java中级面试题的考点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作