扩展眼界收藏iosiOS 面试题

今日头条面试题

2020-01-04  本文已影响0人  AKyS佐毅

1、kvo底层实现cell中一个点赞功能如果用kvo需要注意什么?(提示涉及cell复用问题)

关于TableViewCell中的KVO的使用

2、UIView和layer的关系,组合关系,为什么不做成继承?两种方式各有什么利弊?

UIView和CALayer是啥关系?

3、Swift用过没?它就使用了面向协议?

谈谈Swift面向协议编程

4、显式动画,隐式动画平时哪里使用多线程?要注意什么?

iOS动画原理--隐式动画

5、AFNetworking怎么实现线程保活?

AFNetworking3.0后为什么不再需要常驻线程

6、reachability如何检测到网络状态变化?

iOS下的实际网络连接状态检测:RealReachability

7、渲染UI为什么要在主线程?

为什么刷新UI在主线程

8、FB那个Async库都做了什么?消息转发,哪些步骤能被利用?

iOS保持界面流畅的技巧和AsyncDisplay介绍

9、算法:一个数组,有个滑动窗口,求每次窗口中的中位数。

滑动窗口的中位数
滑动窗口的中位数

iOS基础

1:讲讲你对atomic 和noatomic的理解
2:被 weak 修饰的对象在被释放的时候会发生什么?是如何实现的?知道sideTable 么?里面的结构可以画出来么?
3:block 用什么修饰?strong 可以?
4:block 为什么能够捕获外界变量? __block做了什么事?
5:谈谈你对事件的传递链和响应链的理解 (这个面试题,如果求职者能够回答一些实际开发相关的处理,不只是简单的概念,予以加分)
6:谈谈 KVC 以及 KVO 的理解?
7:RunLoop 的作用是什么?它的内部工作机制了解么?
8:苹果是如何实现 autoreleasepool的?
9:谈谈你对 FRP (函数响应式) 的理解,延伸一下 RxSwift 或者 RAC!
10:平时开发有没有玩过 Instrument ?

Runtime

1:什么是 isa,isa 的作用是什么?
2:一个实例对象的isa 指向什么?类对象指向什么?元类isa 指向什么?
3:objc 中类方法和实例方法有什么本质区别和联系?
4:load 和 initialize 的去呗?
5:_objc_msgForward 函数是做什么的?直接调用会发生什么问题?
6:简述下 Objective-C 中调用方法的过程
7:能否想向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?

iOS基础

1.1、讲讲你对atomic 和noatomic的理解

1.2、被 weak 修饰的对象在被释放的时候会发生什么?是如何实现的?知道sideTable 么?里面的结构可以画出来么

struct SideTable {
    // 保证原子操作的自旋锁
    spinlock_t slock;
    // 引用计数的 hash 表
    RefcountMap refcnts;
    // weak 引用全局 hash 表
    weak_table_t weak_table;
}

struct weak_table_t {
    // 保存了所有指向指定对象的 weak 指针
    weak_entry_t *weak_entries;
    // 存储空间
    size_t    num_entries;
    // 参与判断引用计数辅助量
    uintptr_t mask;
    // hash key 最大偏移值
    uintptr_t max_hash_displacement;
};

1.3、block 用什么修饰?strong 可以

image.png image.png

auto变量的捕获

image.png

Block的类型

image.png image.png

对象类型的auto变量

image.png

__block修饰符

image.png

__block的内存管理

image.png image.png

对象类型的auto变量、__block变量

image.png
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    MJPerson *p = [[MJPerson alloc] init];
    
    __weak MJPerson *weakP = p;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"1-------%@", p);
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"2-------%@", weakP);
        });
    });
    
    NSLog(@"touchesBegan:withEvent:");
}

测试结果:

touchesBegan:withEvent:
1-------<MJPerson: 0x6000037984e0>
MJPerson - dealloc
2-------(null)

1.5:谈谈你对事件的传递链和响应链的理解

1、史上最详细的iOS之事件的传递和响应机制-原理篇
2、iOS响应者链、事件的传递

1.6、谈谈 KVC 以及 KVO 的理解?

image.png image.png

探究KVO的底层实现原理

iOS窥探KVO底层实现原理篇

1.7、RunLoop 的作用是什么?它的内部工作机制了解么?

深入理解RunLoop

image.png image.png

RunLoop与线程

image.png

RunLoop相关的类

image.png

CFRunLoopModeRef

image.png

CFRunLoopObserverRef

image.png

RunLoop的运行逻辑

image.png image.png

1.8、苹果是如何实现 autoreleasepool的

Autoreleasepool所使用的数据结构是什么?AutoreleasePoolPage结构体了解么

arc下编译器会优化成

void *context = objc_autoreleasePoolPush();
// {}中的代码
objc_autoreleasePoolPop(context);
image.png

AutoreleasePoolPage的结构

image.png image.png

Runloop和Autorelease

image.png

1.9、谈谈你对 FRP (函数响应式) 的理解,延伸一下 RxSwift 或者 RAC!

参考文章:RxSwift(1)— 初探 看这一篇文章也就够了!然后结合 RxSwift 映射到 RAC!函数响应式的思想是不变的!至于内部的封装有所不同,但是最终却是殊途同归!

1.10、平时开发有没有玩过 Instrument

iOS 使用Instruments的工具小结

Runtime

1.1、什么是 isa,isa 的作用是什么?

image.png image.png

Class的结构

image.png

1.2、isa、superclass总结

image.png

1.3、load 和 initialize 的区别?

+load

+initialize

image.png image.png

1.4、_objc_msgForward 函数是做什么的?直接调用会发生什么问题?

当对象没有实现某个方法 ,会调用这个函数进行方法转发。某方法对应的IMP没找到,会返回这个函数的IMP去执行)

如果直接调用这个方法,就算实现了想调用的方法,也不会被调用,会直接走消息转发步骤。

1.5、简述下 Objective-C 中调用方法的过程

image.png image.png image.png
image.png image.png

1.6、能否想向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?

解释:

上一篇 下一篇

猜你喜欢

热点阅读