面试答题积累

作者: 杰米 | 来源:发表于2016-08-24 10:44 被阅读640次

    http://kyxu.tech/2016/04/15/实习求职终结篇/
    http://www.jianshu.com/p/ee15c1cf9c16
    http://www.wtoutiao.com/p/e2fwlu.html
    http://blog.csdn.net/xieyupeng520/article/details/50681147
    iOS 中级面试题
    知乎
    iOS面试必看,最全梳理
    百度面试
    九月十月百度,迅雷,华为,阿里巴巴笔试面试六十题(第411~470题)

    1. 都熟悉哪些框架,有没有特别了解的?

    2. 说一说GCD的底层。

    3. 同类型的问题还有 assign、weak 的区别

    1.assign 在对象释放后指针不会置nil,指向值类型
    2.weak 在对象释放后运行时系统自动将weak置nil

    4. ARC 如何实现

    5. 编译时、运行时区别

    对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。 OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。

    6. weak 属性的对象在废弃后 指针是如何指向 nil 的

    7. MVC、MVVM

    8. 知道 KVO、KVC 吗?

    1.KVO是 Key Value Observe
    可以检查一个属性的变化而回调,只能观察property?
    2.KVC是Key Value Coding
    可以用key path设置属性,这个属性甚至可以是私有的

    9. 如何监 测这个 App 的内存情况

    10. 说一下你自己理解的 RunTime

    1.运行系统可以改变函数的实现
    2.运行时系统可以用category动态增加对象属性

    11. 知道 RunLoop 吗?

    参考链接
    runloop
    比较概括

    1. RunLoop可以保持一个线程的生命周期
    2. RunLoop是一个事件处理的循环(do while循环) 用来不断调度工作和接受事件(用户输入)

    12. 知道 STL 吗(问了 List 和 Vector)

    13. 用过 TableView 吗,平时怎么解决 TableView 滑动卡顿问题的?

    iOS开发——项目实战总结&UITableView性能优化与卡顿问题
    UITableview性能优化总结
    UIKit性能调优

    1. 缓存行高
    2. 缓存cell里子控件的内容计算结果 
    3. 控件尽量设置不透明,不用alpha=0,clearColor
    4. 避免离屏渲染,不要用layer的cornerRadius和maskToBounds设置圆角和用layer设置shadow
    5. 加载网络数据,下载图片,使用异步加载,并缓存,停止滑动时加大下载并发量
    6. 尽量减少cell子控件的数量
    7. 重用cell
    

    14. 知道本地存储吗?

    15. C++ 里面传递一个引用和传递一个指针有什么区别?

    16. 说一下 C/C++ 里面变量定义和声明的区别

    17. OC 里面的 property 有没有像 Swift 里面一样的 public 和 private 之分

    有,只有暴露在接口里的属性和函数才能被外部调用
    

    18. 说一下 HTTP 协议

    (我说不会,就简单说了下 http 和 https 的区别,和 iOS 9 开始引导访问 https 的问题,大家可以背一下这一段:【为了强制增强数据访问安全, iOS9 默认会把所有从NSURLConnection 、 CFURL 、 NSURLSession发出的 HTTP 请求,都改为 HTTPS 请求:iOS9.x-SDK编译时,默认会让所有从NSURLConnection 、 CFURL 、 NSURLSession发出的 HTTP 请求统一采用 TLS 1.2(SSL 3.1) 协议。】)

    19. iOS响应链

    20. SDWebImage原理

    21. AFNetworking原理

    22. AutoreleasePool原理,什么时候释放

    23. Runloop是什么,是不是会自动创建,mode,source

    24. Runtime,如何用runtime进行hook,hotpatch就是利用runtime来做的

    25. 计算机网络五层模型是哪五层

     1. 应用层,确定进程之间通信的性质以满足用户需求;应用层协议如支持万维网应用的http协议、支持电子邮件的smtp协议、支持文件传送的ftp协议等等
     2. 传输层,负责主机间不同进程的通信;协议有面向连接的TCP(传输控制协议)、无连接的UDP(用户数据报协议);数据传输的单位称为报文段或用户数据报
     3. 网络层,负责分组交换网中不同主机间的通信;作用有二:发送数据时,将运输层中的报文段或用户数据报封装成IP数据报;选择合适路由 
     4. 数据链路层,负责将网络层的IP数据报组装成帧
     5. 物理层,透明地传输比特流 
    

    26. http协议相关

    27. 有1000亿个数字,在单机上对它进行排序

    28. 手写冒泡排序代码

    29. 如何统计一个城市的井盖数,方法越多越好

    30. 两个水桶,一个3L,一个5L,然后问能组装成几L的水

    31. 不用临时变量怎么实现 swap(a, b)——用加法或者异或都可以

    32. 二维有序数组查找数字

    33. 亿级日志中,查找登陆次数最多的十个用户——(不确定对不对,我的思路是)先用哈希表保存登陆####次数和ID,然后用红黑树保存最大的十个数。剑指 offer 第 30题

    34. 简述排序算法——快排,partion 函数的原理,堆排(不稳定),归并排序,基数排序。

    35. 说说你对 OC 中 load 方法和 initialize 方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?

    36. 说说你对 MVC 和 MVVM 的理解

    37. 说说你对 block 的理解。—— 三种 block,栈上的自动复制到堆上,block 的属性修饰符是 copy,循环引用的原理和解决方案。

    38. 说说 UITableView 的调优。——一方面是通过 instruments 检查影响性能的地方,另一方面是估算高度并在 runloop 空闲时缓存。

    39. 谈谈你对 ARC 的理解。ARC 是编译器完成的,依靠引用计数,谈谈几个属性修饰符的内存管理策略,什么情况下会内存泄露。

    40. 野指针是什么,iOS 开发中什么情况下会有野指针?——野指针是不为 nil,但是指向已经被释放的内存的指针,不知道什么时候会有,如果有知道的读者还望提醒。

    41. 把 "www.zhidao.baidu.com" 这样的字符串改成 "com/baidu/zhidao/www"。——老题目了,剑指 offer 的,两次逆序排列即可。

    42. 求数组中和为某个值的所有子数组,比如数组是 [5,5,10,2,3] 一共有四个子数组的和是 15,比如 [5,10],[5,10],[10,2,3],[5,5,2,3]。这个就是简单的递归了,分两种情况,当前位置的数字在子数组中,以及不在子数组中。

    43. 介绍 block。——我提到栈上的 block 在 ARC 下会自动复制到堆上,面试官问我从 iOS 4 还是 5 开始支持这一特性,表示不知道,我又不是学 OC 历史的,后来想想可能是公司内部老项目有这个坑。

    44. ARC 会对代码做什么优化?

    45. 读过某个库的源码么?——扯了一点 SDWebImage,后来被告知这个库用了 runloop 来保证滑动是加载数据的流畅性,自己看了源码后表示没有发现,唯一用到 runloop 地方是保证后台线程一直跑,也有可能是我理解错了,如果错误欢迎指正。

    46. SDWebImage 下载了图片后为什么要解码?

    47. MVC 具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?

    48. 两个无限长度链表(也就是可能有环) 判断有没有交点

    49. KVO、Notification、delegate 各自的优缺点,效率还有使用场景

    50. Objective-C 中的 copy 方法

    51. 如何手动通知 KVO

    52. runtime 中,SEL 和 IMP 的区别

    http://fengmm521.blog.163.com/blog/static/2509135820125672836405/
    - SEL:OC在编译的时候会根据方法名字(包括参数序列)生成一个区分这个方法的唯一id,这个id就是SEL类型的

    1 SEL 变量名 = @selector(方法名字);

       2    SEL 变量名 = NSSelectorFromString(方法名字的字符串);
       3    NSString *变量名 = NSStringFromSelector(SEL 参数);
    - IMP:
    >   void(*setSkinColor_Func) (id, SEL, NSString*);//定义一个函数指针(传统C语言的处理方式)
    

    IMP say_Func;//定义一个IMP方式的函数指针(obj-C中推荐的方式)
    说白了IMP就是实现方法,给一个方法起个名字,实现动态调用,不用再使用[对象 message]的方式。
    IMP 的定义如下:
    typedef id (*IMP)(id, SEL, ... );

    所以IMP是函数指针,也是实现方法?
    

    取得函数指针后,即是获得执行这段方法的代码的入口?

    53. autoreleasepool 的使用场景和原理

    54. RunLoop 的实现原理和数据结构,什么时候会用到

    55. block 为什么会有循环引用

    56. 使用 GCD 如何实现这个需求:A、B、C 三个任务并发,完成后执行任务 D。

    57. NSOperation 和 GCD 的区别

    58. CoreData 的使用,如何处理多线程问题

    59. 如何设计图片缓存?

    60. 怎么判断某个 cell 是否显示在屏幕上

    61. 进程和线程的区别

    62. TCP 与 UDP 区别

    63. TCP 流量控制

    64. 数组和链表的区别

    65. UIView 生命周期

    66. 如果页面 A 跳转到 页面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪个先调用?

    67. ARC 的本质

    68. RunLoop 的基本概念,它是怎么休眠的?

    69. Autoreleasepool 什么时候释放,在什么场景下使用?

    70. 如何找到字符串中第一个不重复的字符

    71. 哈希表如何处理冲突

    72. autoreleacepool(内存管理池)的使用,以及全局的autoreleace pool何时释放

    两次运行循环(消息循环)切换之间

    73. 观察者(KVO)的实现

    通过类型混合指针机制,通过runtime,动态生成所观察对象类的子类,改变所观察对象的isa指针,使他指向它的子类,这样这个对象就神奇的变成原来类的子类,重写所监听属性的set方法,通过runtime拦截这个方法就是hook,来实现。

    74. Objective-C是一门动态的语言,对象是如果调用一个方法的

    75. 如果点击一个按钮,但是按钮响应的方法没有实现咋办?

    (1)动态方法解析

    (2)快速转发

    (3)标准转发

    76. 如何绘制一个三角形?

    1.1 如何绘制大量三角形?
    1.2 一定要重写drawRect吗?
    1.3 如何刷新View界面?
    1.4 Layer好在哪?

    77. NSTimer有什么需注意的以及和RunLoop的关系?

    78. 线程加锁原理(信号量,临界区,自选锁)

    79. GCD指向了野指针了怎么办

    80. AFNetworking的内部实现原理?

    81. 如何用GCD同步若干个异步调用?

    82. 实现水波纹

    83. oc有私有方法吗

    Objective-C的动态消息传递机制,OC中不存在真正意义上的私有方法

    84. 为什么只能在主线程刷新UI

    7cc8121c9607fb513a094e2621938f41_b.png

    85. 堆和栈

    详细易懂

    86. 三次握手四次挥手

    TCP三次握手详解及释放连接过程
    TCP协议中的三次握手和四次挥手(图解)

    87. socket与http的区别

    socket与http的区别

    88. 对网络通信协议熟悉吗?对socket和http了解吗?

    对网络通信协议熟悉吗?对socket和http了解吗?

    89. 字节对齐

    C语言字节对齐
    C语言字节对齐/7213465

    • 自身子节对齐
      如int为4字节,其开始地址必须为4字节的倍数
    • 结构自身对齐
      以结构内最大字节对齐数的倍数
    • 数组
      数组第一个对齐后面的自然对齐

    计算过程,先根据上面规则计算结构体内字节数,然后按结构内最大字节对齐数的倍数字节对齐

    struct B
    {
            char b;
            int a;
            short c;
    };
    
    b 地址0
    a对齐,地址为4
    c地址为8
    总共9个字节,4为倍数的最近一个为12,所以sizeOf(b)=12
    
    

    90. 大端小端

    [大端小端格式详解]

    相关文章

      网友评论

        本文标题:面试答题积累

        本文链接:https://www.haomeiwen.com/subject/ywdfsttx.html