2020抖音iOS面试经历(附参考答案)

2020-06-01  本文已影响0人  文博同学

一面

  1. UIButton不响应事件的原因

  2. error 为什么是**

    • 如果将指向对象的指针传递给函数,则函数只能修改指针所指向的内容。
    • 如果将指针传递给对象指针,则该函数可以修改指针以指向另一个对象。
    • 对于NSError,该函数可能希望创建一个新的NSError对象,并向您传递一个指向该NSError对象的指针。因此,您需要双间接,以便指针可以修改。
    • 总结:*想改变什么值就传入什么值得指针,很明显我们想改变的是NSError error的值

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

推荐阅读

iOS开发——最新 BAT面试题合集(持续更新中)

    - 实现一个新的 isEqualTo__ClassName__ 方法,进行实际意义上的值的比较。
    - 重载 isEqual: 方法进行类和对象的本体性检查,如果失败则回退到上面提到的值比较方法。
    - 重载 hash 方法,在下一个部分会详细介绍

- 对于面向对象编程来说,对象相等性检查的主要用例,就是确定一个对象是不是一个集合的成员。为了加快这个过程,子类当中需要实现 hash 方法:

    - 对象相等具有 交换性 ([a isEqual:b] ⇒ [b isEqual:a])
    - 如果两个对象相等,它们的 hash 值也一定是相等的 ([a isEqual:b] ⇒ [a hash] == [b hash])
    - 反过来则不然,两个对象的散列值相等不一定意味着它们就是相等的 ([a hash] == [b hash] ¬⇒ [a isEqual:b])

//NSObject 使用 isEqual: 这个方法来测试和其他对象的相等性。在它的基类实现中,相等性检查本质上就是对本体性的检查。
//两个 NSObject 如果指向了同一个内存地址,那它们就被认为是相同的。
@implementation NSObject (Approximate)

@implementation Person

//对于好奇心旺盛和不畏钻研的同学来说,Mike Ash 的这篇博文解释了如何通过移位操作和旋转可能重复的部分值来进一步优化 hash 函数的实现。


```</details> 

*   业务上的问题,为什么用highcharts这个库

    *   这个面试问题是根据你的项目经验提出的,所以具体问题具体分析。
*   webview的优化,webview为什么会加载白屏

<details open="" style="box-sizing: border-box; display: block; margin-top: 0px; margin-bottom: 16px;"><summary style="box-sizing: border-box; display: list-item; cursor: pointer;"> 参考内容</summary>


*   项目遇到哪些比较困难的问题

    *   曲线卡顿问题
    *   全局切换工厂问题
*   app 启动优化

<details open="" style="box-sizing: border-box; display: block; margin-top: 0px; margin-bottom: 16px;"><summary style="box-sizing: border-box; display: list-item; cursor: pointer;"> 参考内容</summary>


+load方法中做的事情延迟到+initialize中,或者在+load中做的事情不宜花费过多时间 - 减少不必要的framework,或者优化已有的framework - main阶段优化 - didFinishLaunchingWithOptions,日志、统计,某个功能的预加载,第三方SDK初始化,可以采用懒加载,或者分阶段启动 - 首页启动渲染的页面优化,对于viewDidLoad以及viewWillAppear方法中尽量去尝试少做,晚做,不做,或者采用异步的方式去做。不使用xib或者storyboard,直接使用代码</details> 

*   TableView卡顿

    *   要说明ios卡顿&掉帧的原理
    *   然后针对CPU和GPU渲染超时的解决方案
*   查找两个view的共同父视图

<details open="" style="box-sizing: border-box; display: block; margin-top: 0px; margin-bottom: 16px;"><summary style="box-sizing: border-box; display: list-item; cursor: pointer;"> 参考内容</summary>

注意这是要手敲代码的!!!

思考:如果是只需要查找最近的公共父视图呢?


- (void)findCommonSuperViews:(UIView *)view1 view2:(UIView *)view2
{
    NSArray * superViews1 = [self findSuperViews:view1];

    NSArray * superViews2 = [self findSuperViews:view2];

    NSMutableArray * resultArray = [NSMutableArray array];

    int i = 0;

    while (i < MIN(superViews1.count, superViews2.count)) {

        UIView *super1 = superViews1[superViews1.count - i - 1];

        UIView *super2 = superViews2[superViews2.count - i - 1];

        if (super1 == super2) {

            [resultArray addObject:super1];

            i++;

        }else{

            break;
        }
    }

    NSLog(@"resultArray:%@",resultArray);

}
- (NSArray <UIView *>*)findSuperViews:(UIView *)view
{
    UIView * temp = view.superview;

    NSMutableArray * result = [NSMutableArray array];

    while (temp) {

        [result addObject:temp];

        temp = temp.superview;
    }

    return result;
}


*   用过设计模式介绍下

<details open="" style="box-sizing: border-box; display: block; margin-top: 0px; margin-bottom: 16px;"><summary style="box-sizing: border-box; display: list-item; cursor: pointer;"> 参考内容</summary>

六大原则:单一职责/开闭/接口隔离/依赖倒置/里氏替换/迪米特原则


## [](https://github.com/DevDragonLi/iOSInterviewsAndDevNotes/blob/master/interview-iOS/23%E6%8A%96%E9%9F%B3%E9%9D%A2%E8%AF%95%E9%A2%982020%E5%B9%B43%E6%9C%88.md#链接)链接

*   [面试题系列目录](https://github.com/DevDragonLi/iOSInterviewsAndDevNotes/blob/master/README.md)
*   **上一份**: [第22份:2020年3月份快手X3岗面试题](https://github.com/DevDragonLi/iOSInterviewsAndDevNotes/blob/master/interview-iOS/22%E5%BF%AB%E6%89%8BX3%E5%B2%97%E9%9D%A2%E8%AF%95%E9%A2%982020%E5%B9%B43%E6%9C%88.md)
*   **下一份**: [阿里iOS五轮面经2019年10月](https://github.com/DevDragonLi/iOSInterviewsAndDevNotes/blob/master/interview-iOS/24%E9%98%BF%E9%87%8CiOS%E4%BA%94%E8%BD%AE%E9%9D%A2%E7%BB%8F2019%E5%B9%B410%E6%9C%88.md)



<details class="details-reset details-overlay details-overlay-dark" style="box-sizing: border-box; display: block;"><summary data-hotkey="l" aria-label="Jump to line" role="button" style="box-sizing: border-box; display: list-item; cursor: pointer; list-style: none;"></summary></details>



*   © 2020 GitHub, Inc.
*   [Terms](https://github.com/site/terms)
*   [Privacy](https://github.com/site/privacy)
*   [Security](https://github.com/security)
*   [Status](https://githubstatus.com/)
*   [Help](https://help.github.com/)


*   [Contact GitHub](https://github.com/contact)
*   [Pricing](https://github.com/pricing)
*   [API](https://developer.github.com/)
*   [Training](https://training.github.com/)
*   [Blog](https://github.blog/)
*   [About](https://github.com/about)

上一篇 下一篇

猜你喜欢

热点阅读