前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我的2020 九月iOS面试秘籍,为你的跳槽保驾护航

我的2020 九月iOS面试秘籍,为你的跳槽保驾护航

原创
作者头像
编程怪才-凌雨画
修改于 2020-09-21 02:16:48
修改于 2020-09-21 02:16:48
79900
代码可运行
举报
运行总次数:0
代码可运行

前言

开门见山,这篇文章,适合「中高级iOS开发」,如果你现在待业,或者想跳槽并且还在求职的话,可以看看本文,找一找灵感,希望对你们有帮助。

2020年注定是一个特殊且不平凡的一年。*

疫情之下,内忧外患,部分企业,倒下的倒下,扣薪的扣薪……,在这样的大环境之下,即是危机也是机会,毅然决定踏上求职之路。

起初自信满满,在没有做好充分准备情况之下,简历寥寥草草,简简单单,以至于错失不少好机会。切记切记!吃一堑长一智。

最后通过优化精简排版简历,接到不少互联网大厂的邀约面试。事实证明,拥有一份好简历,你已经成功一半了。最终,通过两个月的艰苦奋战,终于拿到自己比较满意的offer。为了做个总结,特开此篇,仅供参考~

我的感受就是,自己一边梳理知识点,一边总结归纳,收获可能更大,所以打算把我梳理的部分分享出来,篇幅有点长,大家见谅。

覆盖的点不是很全,分享给你们,希望你们在金九银十的招聘季一切顺利,offer收割机

1、面试经历

坐标:深圳,面试公司数:约15家, offer:到手的有2两个,还有2家也进入谈薪阶段,谈完后就一直没下文了,表示很郁闷。 面试方式:大部分采用远程视频面试,极少现场面试。面试特点:一轮iOS技术面(OC基础+OC底层+算法), 二轮广泛技术面(网络工程+数据结构+算法)+HR面。总体感受,今年面试最大特点是,首先.机会比往年少很多,iOS招聘需求主要集中在3-5年工作经验(换句话就是说岗位薪资20k普遍是上限,当然大厂除外),其次. 技术方面:OC底层已是必须掌握,Swift极少被提到。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:642363427,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!


2、iOS高频(基础+底层)面试题

1. 你在开发过程中常用到哪些定时器,定时器时间会有误差吗,如果有,为什么会有误差?

iOS中常NSTimer、CADisplayLink、GCD定时器,其中NSTimer、CADisplayLink基于NSRunLoop实现,故存在误差,GCD定时器只依赖系统内核,相对一前两者是比较准时的。

误差原因是:与NSRunLoop机制有关, 因为RunLoop每跑完一次圈再去检查当前累计时间是否已经达到定时设置的间隔时间,如果未达到,RunLoop将进入下一轮任务,待任务结束之后再去检查当前累计时间,而此时的累计时间可能已经超过了定时器的间隔时间,故会存在误差。

参考《iOS常见三种定时器-NSTimer、CADisplayLink、GCD定时器》

2. NSTimer、CADisplayLink会产生循环引用吗?如果会,你是如何解决的?

如果直接使用,会产生循环引用问题。可以增加一个中间类,给这个类添加一个用weak修饰的id 类型target属性,并重写中间类的消息转发方法。实现如下代码:

声明文件.h:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import <Foundation/Foundation.h>

@interface LXProxy : NSProxy
+ (instancetype)proxyWithTarget:(id)target;

@end

实现文件.m

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "LXProxy.h"

@interface LXProxy ()

/** weak target*/
@property (nonatomic, weak) id target;

@end

@implementation LXProxy

+ (instancetype)proxyWithTarget:(id)target{
LXProxy *proxy = [LXProxy alloc];
proxy.target = target;

return proxy;

}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel{
return [self.target methodSignatureForSelector:sel];

}

- (void)forwardInvocation:(NSInvocation *)invocation{
[invocation invokeWithTarget:self.target];

}

@end

调用代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:[LXProxy proxyWithTarget:self] selector:@selector(test) userInfo:nil repeats:YES];

3. 对Runtime有了解吗,Runtime的方法查找过程是什么样的?有哪些实际应用?

runtime是OC动态语言的运行时机制,OC的方法调用最后都转成了runtime的objc_msgSend函数。

3.1 Runtime消息传递:
  1. 通过哈希算法,先从方法缓存中查找,如果命中,调用方法结束流程
  2. 如果缓存中没有,则去当前类的方法列表中查找,如果命中,调用方法,加入当前方法缓存中,结束流程
  3. 如果当前类没有对应方法,则去逐级父类方法列表中查找,如果命中,调用方法,加入当前方法缓存中,结束流程 4.如果方法都不存在,进入方法动态解析,转入消息转发流程。

注:对于已经排序好的方法列表,采用二分查算法查找对应的执行函数,对应没有排序的列表,采用一般遍历方法查找对应执行函数。

3.2 消息转发流程:

image.png

  1. 调用动态解析方法resolveClassMethod:(SEL)sel,如果动态添加方法(调用class_addMethod函数)并返回YES,则结束流程
  2. 如果上一步没有实现动态添加方法,无论返回Yes还是No,都会调用消息接受者重定向forwardingTargetForSelector方法,如果返回重定向接受者,则当前流程结束
  3. 如果返回上一步nil,则会调用methodSignatureForSelector获取函数的参数和返回值类型,同时调用forwardInvocation消息通知当前对象。
  4. 如果上一步返回nil,消息无法处理,App crash。
3.3 继承关系:

e

  1. 实例对象(isntance)的isa指针指向类对象(class),类对象的存放实例方法(-方法)
  2. 类对象(class)的isa指针指向其元类对象(meta), 元类对象存放类方法(+方法)
  3. 根类对象(root class)的isa指针指向根元类对象(root meta),superclass指针指向nil.
  4. 根元类对象(root meta)的isa指针指向自己,superclass指针根类对象(root class)

由此可知, 实例方法(-方法)查找是沿着其superclass指针逐级父类查找,终于根类对象(root class)。而类方法(+方法)查找是沿着其superclass指针逐级父类(meta)查找,终于根类对象(root class),如果根类对象存在同名实例方法,则会调用同名实例方法

3.4 Runtime实际运用:
  1. 给NSTimer定时器声明一个中间类Proxy(消息转发)
  2. 通过rumtime动态获取类的所有属性(json转model、可归档类对属性的归档及解归档操作)
  3. 反射机制(NSClassFromString, CTMediator原理)
  4. 交换系统方法(比如交换viewController生命周期方法,从而进行统一埋点等操作)
  5. 给分类添加属性(通过关联对象,实现getter, setter方法)

4. +load和+initlize调用时机?现在有一个类,给其添加了多个分类,并且每个实现分类都实现了相同的类方法(比如+test),在调用这个方法时,会调用到哪个分类?

  1. +initialize 方法,会在第一次初始化这个类之前被调用,我们用它来初始化静态变量。+load 方法会在加载类的时候就被调用,也就是 ios 应用启动的时候,就会加载所有的类,就会调用每个类的 +load 方法。initialize 方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次,且调用发生在 +init 方法之前。
  2. 调用最后参与编译的分类的test方法。原因:Xcode在编译时根据buildPhases->Compile Sources里面的从上至下顺序编译的,通过压栈的方式将多个分类压栈,且根据后进先出的原则,后编译的会被先调用(插入顶部添加,即[methodLists insertObject:category_method atIndex:0]。所以objc_msgSend遍历方法列表查找SEL 对应的IMP时,会先找到最后参与编译的分类)当objc_msgSend找到方法并调用之后,结束传递消息,所以就形成了所谓的“覆盖”。

5. App冷启动优化?

App冷启动优化方案博客非常之多,概括总结大致如下:

  1. pre-main优化:减少动态静态库,合并动态库,移除废弃第三方库及所依赖的系统库,二进制重排(抖音优化方案)
  2. runtime对类的注册,类对象的初始化,load方法加载阶段:精简类,合并分类,移除废弃分类等等
  3. main函数之后,推迟对三方库注册及延时调用耗时操作函数。可以通过Instruments-->Time Profiler: 性能分析,定位耗时函数

6. UIView和CALayer有了解吗,UI卡顿原因是什么,什么是离屏渲染,为什么会产生离屏渲染,如何避免触发离屏渲染?

  1. UIView和CALayer遵循单一职责原则,UIView负责事件处理,参与响应链,为CALayer提供显示的内容,CALayer负责内容显示。
  2. UI卡顿原因:参考

7. 事件响应响应链是什么样的?touchbegin,button touch,手势的区别和联系?

8. 实际开发过程当中,您使用到哪些设计模式?说说单例模式优缺点?苹果设计的类对象是不是单例模式?

9. 实际开发过程当中,您使用到哪些多线程,GCD与NSOperationQueue有什么联系?

10. Runloop响应事件类型,常用几种mode类型,与GCD有什么联系?

11. 说说你对Block的理解,有几种类型的Block, Block在捕获自变量,局部静态变量,全局变量,全局静态变量有什么区别, 什么情况下要注意Block循环引用问题?

12. NSString属性,使用什么关键字修饰,使用copy和strong修饰,有什么区别?

13. 什么是引用计数,说说你对自动释放池的理解,它是什么时候释放的,为什么用__weak修饰的变量所指向的对象在释放时会自动把变量指针置为nil?

3、网络工程面试题

1. HTTPS和HTTP有什么区别,HTTPS加密过程是什么样的,对称加密和非对称解密各有什么优缺点?

HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全 HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。 HTTP与HTTPS的区别,详细介绍

2. TCP和UDP有什么区别,TCP是可靠传输吗,如果保证其可靠性?

2.1 TCP和UDP区别:
  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道 参考1
2.2 TCP可靠性:
  1. 校验和
  2. 确认应答与序列号
  3. 超时重传
  4. 连接管理
  5. 流量控制
  6. 拥塞控制(慢启动,拥塞避免,快重传,快恢复) 参考2

3. 如何针对App弱网情况优化

参考:浅谈APP弱网优化

4、算法编程面试题

1. 判断一个单向链表是否有环?

1.快慢双指针法,快指针一次走两步,慢指针一次走一步,如果有环必会相遇

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class ListNode {
     public var val: Int
     public var next: ListNode?
     public init(_ val: Int) {
         self.val = val
         self.next = nil
     }
 }

func validedCycleNoded(_ node: ListNode?) -> Bool {
    if node == nil {
        return false
    }

    var fast = node, slow = node

    while fast != nil {
        fast = fast?.next?.next
        slow = slow?.next

        if fast?.val == slow?.val {
            return true
        }
    }

    return false
}
  1. 可以使用集合(Set)来判断,来一次遍历,把所有node添加到集合中,如果有重复,则肯定要有环

2. 如何计算二叉树的高度?

递归算法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    func maxDepth(_ root: TreeNode?) -> Int {
        guard let root = root else {return 0;}  
        return max(maxDepth(root.left), maxDepth(root.right)) + 1
    }
}

3. 合并两个有序数组,同时去重

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func mergeSortedArray(_ a: [Int], b:[Int]) ->[Int] {

    var i = 0
    var j = 0
    var ans = [Int]()

    //合并数组
    while i < a.count && j < b.count {
        if a[i] > b[j] {
            ans.append(b[j])
            j += 1
        }else if (a[i] == b[j]) {
            ans.append(b[j])
            j += 1
            i += 1
        }else {
            ans.append(a[i])
            i += 1
        }
    }

     //数组a有未合并元素
    while i < a.count {
        ans.append(a[i])
        i += 1
    }

    //数组b有未合并元素
    while j < b.count {
        ans.append(b[j])
        j += 1
    }

    return ans
}

4. 字符串编辑最短距离(LeeCode)

LeeCode-72.编辑距离 解法:动态规划

5. 判断括号的有效性(LeeCode)

LeeCode-20.有效的括号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    func isValid(_ s: String) -> Bool {
     if s.isEmpty {
        return true;
    }

    let map = ["}":"{", ")":"(","]":"["]
    var stack = [String]()

    for c in s {
       let key = String(c)
        if key == "{" || key == "(" ||  key == "[" {
            stack.append(key)
        } else if !stack.isEmpty && map[key] == stack.last {
            stack.removeLast()
        } else {
            return false
        }
    }

    return stack.isEmpty
    }

}
复制代码

6. 25匹马,现有5条跑道,没有计时器,要找出最快3匹马,至少要跑几场?

至少跑7场,

  1. 对25匹马随机分成5个组(A,B,C,D,E,F),每组跑一场,记录每一匹马在当前组中名次(第1名,第2名,第3名)(跑了五场)
  2. 从各个组中选取名次为第一名的马组成一组,跑一场,记录名次(第六场),本组第1名则确定了25匹马中最快的一匹马
  3. 选取第六场中名次为第1名的所在原来组名次为第2、3名马,选取第六场中名次为第2名的所在原来组名次第1、2名马(它自己+第2名),选取第六场中名次为第3名所在原来组名次第1名的马(它自己),组成一组,跑一场,记录名次(第七场),本场的第1、2名就是25匹马中最快的第2、3名

7. 8瓶液体,其中1瓶有毒药,毒药1小时后至死,请问最快找出毒药,需要几只老鼠?

1只老鼠可以断定2瓶液体,2^3=8,所以需要3只老鼠即可, 对液体进行编号,001,010,011,100,101,110,111 给1号老鼠喂编码个位数上是1的液体(001,011,101,111), 给2号老鼠喂编码十位数上是1的液体(010,011,110,111), 给3号老鼠喂编码百位数上是1的液体(100,101,110,111), 1小时后, 如果老鼠全活, 8号液体有毒, 如果全都死,7号液体有毒, 如果1号死,2,3活, 1号液体有毒 如果2号死, 1,3活,2号液体有毒 如果3号死,1,2活, 4号液体有毒 如果1,2号死,3活, 3号液体有毒 如果1,3号死,2活, 5号液体有毒 如果2,3号死,1活, 6号液体有毒

5、其他面试题

1. 如下结构体,大小是多少?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct  Node {
char a;
int b;
}  node;

结构体大小是8,考察结构体特性,内存对齐原则。

2. 定义一个全局变量a = 0; 开辟两条子线程访问 a = a + 1; 各for loop 10次,a的最终结果是多少?

<=20,线程安全问题。

3. 公司员工表(user)中有入职时间(t1)和离职时间(t2),请编写sql语句,查询18年3月(date1)-18年6月(date2)所有在职员工人信息

select * from user where 入职时间<201806 and (离职时间 is null or离职时间>201803)。

由于时间关系,后面慢慢完善面试题答案。最后借用《三十而已》电视剧的台词作为结尾:“以上就是我面试遇到的故事,未完待续~~~”

作者:iOS面试总结 链接:https://www.jianshu.com/p/313706ef1f80 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS_定时器:NSTimer、GCDTimer、DisplayLink
在iOS里用个 Timer(定时器)真的是太麻烦了,一不小心就不work了,一不小心又导致内存泄露了~
mikimo
2022/07/20
9150
深入学习iOS定时器
定时器,用来延迟或重复执行某些方法,例如:网络定时刷新,UI间隔刷新,动画效果......iOS中的定时器大致分为这几类: <pre> NSObject GCD定时器 NSTimer CADisplayLink </pre>
sweet说好的幸福
2020/12/23
1K0
我的 2020 iOS BAT 面试心得
我面试了大大小小的各种公司,BAT、bigo、字节、快手、伴鱼等,因为一些原因,也拒面了一些公司,拿了几家的offer。
ios-lan
2020/09/23
1.4K0
面试iOS 机会在自己手中
前言 面试是我们工作的敲门砖,正好现在也到了我们金九银十的招聘季,在这我汇出32个面试题希望能帮到正在面试的你。 加油(同样有不足的地方还望指出我们一起商讨,有兴趣的可以加我的iOS交流群: 6423
编程怪才-凌雨画
2020/09/15
5690
面试iOS 机会在自己手中
iOS开发--我与面试官有个约会
[TOC] 一、写在前面 首先是对帮助过我的大哥大姐们来一波感谢?在我换工作这段时间里有内推的,答疑解惑的,送吃的甚至还有看风水的(/ω\),多少让Lisa这个小透明有些受宠若惊了。真的非常感谢大家对
谦谦君子修罗刀
2020/12/22
2.7K1
iOS开发--我与面试官有个约会
备战九十,iOS面试题菜单,持续更新(题目及答案已上传Github)
Objective_C语言特性 (戳这里跳转到Github) 分类 扩展 代理(Delegate) 通知(NSNotification) KVO (Key-value observing) KVC(Key-value coding) 属性关键字 runloop (戳这里跳转到Github) RunLoop概念 RunLoop的数据结构 RunLoop的Mode RunLoop的实现机制 RunLoop与NSTimer RunLoop和线程 讲一下 Observer ? autoreleasePool 在何时
iOSSir
2019/07/02
1.4K0
iOS APP运行时Crash自动修复系统
大白(Baymax),迪士尼动画《超能陆战队》中的健康机器人,是一个体型胖胖的充气机器人,因呆萌的外表和善良的本质获得大家的喜爱,被称为“萌神”。
会写bug的程序员
2020/06/08
3.4K0
iOS APP运行时Crash自动修复系统
iOS 中的定时器
从上述代码我们可以发现 Timer 生成实例的方式有八种,除了可以设置触发起止时间的两个之外,剩余六个为Block、Target-Action以及NSInvocation三种形式并且都提供类方法以及构造函数两种形式。我们可以根据自己的需求选择合适的构造函数。
CoderStar
2022/09/23
1.3K0
2020年6月最新iOS面试题总结(答案篇)
之前发了这篇iOS面试总结(2020年6月),没想到挺受大家欢迎,本来是没打算为它写答案,但有几个人建议我最好出一篇答案,提的人多了我就答应了下来。因为最近比较忙,断断续续总算补完了,就有了这篇文章,希望它对大家还有用处。这些都属于参考答案,如果大家感觉有不对不准确的地方也欢迎指出,我会及时更新。
会写bug的程序员
2020/09/04
9.3K0
2020年6月最新iOS面试题总结(答案篇)
“赢”战2020!阿里、字节:一套高效的iOS面试真题!
这里小编有收集一些相关的问题,其中大部分都是大厂面试或者面试其他人用到的,能命中大部分的面试和日常工作,更希望你可以用它来检验自己!
iOSSir
2020/03/04
1.1K0
2020-iOS最新面试题解析—1(原理篇)
面试题持续整理更新中,如果你想一起进阶去大厂,不妨添加一下交流群1012951431
会写bug的程序员
2020/06/22
1.7K0
2020-iOS最新面试题解析—1(原理篇)
iOS 知识点回顾(三)
温故而知新 目录 一. GCD和OperationQueue 二. CADisplayLink、NSTimer使用注意 三. 内存布局 四. Tagged Pointer 五. copy和mutableCopy 六. OC对象的内存管理 七. AutoreleasePool自动释放池 八. 图片的解压缩到渲染过程 九. 应用卡顿的原因以及优化 十. APP的启动 一. GCD和NSOperationQueue GCD 可用于多核的并行运算; GCD 会自动利用更多的 CPU
且行且珍惜_iOS
2020/01/15
7580
iOS BAT面试对答题
见名知意,其概念无非就是“因为 Objective-C 是一门动态语言,所以它需要一个运行时系统……这就是 Runtime 系统”云云。对博主这种菜鸟而言,Runtime 在实际开发中,其实就是一组C语言的函数。
编程怪才-凌雨画
2021/02/21
9820
iOS  BAT面试对答题
iOS面试题梳理(三)
在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么? 1.前者是存在内存管理的setter方法赋值,它会对_name对象进行保留或者拷贝操作,后者是普
Jacklin
2018/05/15
1.4K0
iOS,面试必看,最全梳理
目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡。矫情一下,言归正传,我奉献一下,为iOS应聘者梳理一下面试题,希望能助一臂之力!
Jacklin999
2018/09/12
1.2K0
iOS,面试必看,最全梳理
iOS面试资料参考答案总结
打个比方,如果把找工作理解成考大学,面试就是高考,市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”,重点准备,期待“押题”成功。但实际上,即使面试同一家公司,它会有不同部门,不同业务线,不同面试官,即使遇到同一面试官,他也不一定就每次考察完全一样的内容。想想高考中那些考的好的同学,他们肯定不是靠“押题”才能取得好成绩吧,他们大多靠的是平常积累及对知识点灵活掌握,那面试也一样啊。执着于搜题,把面试题当做重点进行“复习”,还不如自己划出“考纲”,各个知识点逐一检查掌握情况,复习的更全面呢。
编程怪才-凌雨画
2020/11/25
1.7K0
iOS面试资料参考答案总结
iOS狗都不要,用这份面试真题,21天拿了4个大厂Offer
14、信号量、如果有两组任务执行,需要先执行某两组,再执行另外两组,有多少种方式?
谦谦君子修罗刀
2022/05/18
2.2K0
2017年5月iOS招人心得(附面试题)
在2017年5月中旬,技术老大让我招两个1-2年的iOS开发,把简历的筛选和第一轮技术面试的任务交给了我。于是便自己准备了这套面试题。
用户2932962
2018/08/30
5780
2017年5月iOS招人心得(附面试题)
iOS面试知识总结之功能区分
凡经历过iOS面试的我们总会发觉,即使实际开发中做过许多项目,也难免为一个普通的面试题受挫。这也许不是因为我们技术不过关,而是因为在平时我们忽略了怎样将用到的知识很好的表述出来。闲暇之余我把一些常见的iOS面试问题总结一下,即使不是为了面试,也有助于对基础知识的回顾。 此篇总结在iOS中遇到的有关概念或功能相似的,容易混淆的知识点: 1.区分UDID与UUID UDID(Unique Device Identifier)用户设备唯一编码 UDID是一串由40位16进制数组成的字符串,用以标识唯一的设备。
梧雨北辰
2018/04/24
8920
16道面试官必问你必须会的iOS面试题
一个 UIViewController 中的所有 view 之间的关系其实可以看成一棵树,UIViewController 的 view 变量是这棵树的根节点,其它的 view 都是根节点的直接或间接子节点
会写bug的程序员
2020/05/29
2.8K0
16道面试官必问你必须会的iOS面试题
相关推荐
iOS_定时器:NSTimer、GCDTimer、DisplayLink
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验