iOS细节知识收录面试题iOS-面试

高级iOS面试题全纪录

2018-09-02  本文已影响36人  zyzxrj

iOS基础:

  1. 多线程使用,gcd跟operation区别,怎么取消正在执行的gcd任务
  1. runtime的使用

3.runloop的理解跟应用

  1. 自动释放池工作原理
    AutoreleasePool的原理和实现
  2. 响应链原理
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
        return nil;
    }
    if ([self pointInside:point withEvent:event]) {//这边point是在self上的位置
        for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
            CGPoint convertedPoint = [subview convertPoint:point fromView:self];//convertedPoint是subView上的位置
            UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
            if (hitTestView) {
                return hitTestView;
            }
        }
        return self;
    }
    return nil;
}
  1. 自动打包技术
  1. a,b任务并发执行,然后执行c任务怎么做,有哪些方法实现
-(void)testBarrier{
    dispatch_queue_t osConcurrent = dispatch_queue_create("dyConcurrent1", DISPATCH_QUEUE_CONCURRENT); //自己创建并行队列
    dispatch_async(osConcurrent, ^{
        for (int i = 0; i< 3; i++) {
            NSLog(@"任务1");
        }
    });
    
    dispatch_async(osConcurrent, ^{
        for (int i = 0; i< 3; i++) {
            NSLog(@"任务2");
        }
    });

    dispatch_barrier_async(osConcurrent, ^{//这边一定要是自己创建的并行队列,系统global无效
        NSLog(@"追加追加追加");
    });
    dispatch_async(osConcurrent, ^{
        for (int i = 0; i< 3; i++) {
            NSLog(@"任务3");
        }
    });
}
输出:
任务1、2并发执行,执行完执行追加追加,再执行任务3

一个dispatch_barrier允许你在一个并行队列中创建一个同步点。当在队列中遇到这个barrier时,这个barrier block便会延迟执行(同时所有在其后的block都会延迟),直至所有在barrier之前的block执行完成。这时,这个barrier block便会执行。之后队列便恢复正常执行。

  1. 多线程中的锁使用,要是你你怎么实现

网络相关:

  1. https请求流程,哪一步有可能被攻破
  2. tcp,udp协议

数据结构:

  1. 数组、字典底层实现

开放性问题:

  1. 你的优势是什么
  2. 你们公司做的最好的是哪一块
  3. 组建化做了吗,路由要是你设计你怎么设计,每种设计的优缺点
  1. RN有了解吗?你们公司为什么不用RN,原因是什么
  2. 要是你入职能为我们公司带来哪些改变
  3. 最近在看什么书,以后职业规划?
  4. 你有什么问题问我吗?

最后附上浏览的其他面试心得:

  1. 2017年iOS面试题总结
  2. 2017年5月iOS招人心得(附面试题)
上一篇 下一篇

猜你喜欢

热点阅读