iOS面试-必问知识

作者: Gaizka | 来源:发表于2019-05-23 18:25 被阅读17次

    计算机网络

    对于大前端类,计算机网络主要考量的还是传输层和应用层部分的知识。

    浏览器输入url到网页显示经历了什么过程?

    TCP三次握手:具体是怎么握手?为什么要三次握手?两次行不行?为什么不行?三次握手,第二次和第三次分别因为什么?

    TCP是如何保持可靠传输的(拥塞控制,慢启动等等概念的理解)

    TCP为什么要四次挥手,TIME_WAIT为什么至少设置两倍的MSL时间?

    TCP三次握手的详细数据传递,四次挥手详细数据内容,数据包组成、TIME_WAIT状态,2MSL,RTT,重传、滑动窗口、拥塞原理等等

    TCP、UDP面向连接、无连接具体理解,他们的区别,如何将 UDP 改造成和 TCP 功能相似

    TCP/IP四层协议,OSI七层协议,每层都有啥对应的协议,原理是啥

    http报文结构,http中超文本超是啥意思,http请求的组成

    http 报文头部含有什么,multipart了解吗

    http的状态码,200,304,301,http请求报文,响应报文

    get和post请求的区别?什么情况下用到?POST传输的数据都有哪些格式呢(这里需要搞定http各种请求传输的数据格式)

    描述一次完整的http请求

    什么是cookie,什么是session,区别联系,cookie的本质是什么

    http1.0,1.1,2.0的区别

    https有几次握手和挥手?https的原理。http有几次挥手和握手?TLS在哪一网络层,基本原理是什么?

    https与中间人攻击

    HTTPS,安全层除了SSL还有,最新的? 参数握手时首先客户端要发什么额外参数

    HTTPS是什么?握手过程,SSL原理,非对称加密了解多少

    证书是干什么用的

    算法

    剑指 offer 上面的题目都是面试过程中的算法高频题,特别是二叉树和字符串,栈队列,链表,跳台阶问题一定要弄懂并且熟练。
    八大排序算法的复杂度,概念,最好最坏情况,手写都是必须要掌握的,其中的重点是快排和堆排序,对于快排的优化,快排的基础原理,系统 API 快排的实现原理等都是必须要掌握的基础知识。
    二分查找在面试过程中也比较常见,因为比较简单,包括二分查找的变种。
    二叉树的前中后序的递归与非递归遍历方式,以及层序遍历和蛇形遍历都是重点。
    海量数据如何找到重复次数最多的那个 优化
    海量数据,但是都是1~100之间的,如何找到重复次数最多的那个
    面试算法题一般不难,掌握技巧很重要。二叉树相关的算法题基本都要往二叉树的遍历上靠,链表相关的算法题基本都要往额外的“帮助指针”上面靠。

    数据结构

    在面试过程中这一类主要是和算法来一起考,数据结构一般主要会问栈与堆的区别,栈与队列的区别等等,在前端的面试中,红黑树这类的很少被问到。

    编译原理

    主要需要了解程序的编译过程的基础概念就OK。

    操作系统

    操作系统老生常谈的就是进程,线程的概念和区别,几个状态,以及他们的调度方式,通信方式,保持安全等等知识点,基本面试都会被考到一点,这一部分需要牢牢掌握,实在理解不了就背下来。
    说说递归和普通的循环方式有什么区别
    计算机存储系统是指?哪些存储系统能提高程序执行的效率?
    段错误和栈溢出分别在什么时候会出现,为什么
    其他方面的包括页置换等等基础知识,知道概念就OK,在前端面试过程中这部分不是特别重点考量的点。

    数据库

    数据库这部分也比较简单,主要就是 ACID 等基础概念,几大范式,简单的 sql 语句。

    设计模式

    工厂方法,抽象工厂,简单工厂的区别和联系
    装饰者
    观察者
    代理模式等等

    概率论

    三门问题
    红黑球等等常见问题百度即可

    Linux

    主要包括基本的 shell 编程,基本的脚本命令,重点是 grep,ps,top,free等

    版本控制

    版本控制主要包括 Git 和 SVN
    git 的基础概念,基本命令,包括 merge 和 rebase 的区别等。
    Git 和 SVN 的区别,异同点
    平时开发中,版本控制的流程是怎么样的

    通用语言基础

    面向对象的多态。多态的几种方式
    各个语言中的单例模式
    内存管理方式
    static 和 const 的作用和区别
    C 语言的内存分段

    iOS专业知识点

    iOS 的面试过程中,虽然知识点很多很杂,但是老生常谈的还是那些比较陈旧的知识,只要对他们有较好的理解,通过面试一般不成问题。

    内存管理

    ARC 和 MRC 的区别
    属性的关键字,他们具体的底层实现以及区别,被问烂的知识点包括 copy, 浅拷贝和深拷贝的区别, weak 的底层实现。稍微新颖一点的 assgin 和 weak,unsafe_unretained 具体有什么区别,assgin是否可以用来修饰对象。这一部分是面试必问,一定要弄懂。
    Autorelease pool的底层实现原理,与 Runloop 的关系, autoreleasing 关键字。

    Block

    本质,基础概念
    使用时要注意的地方
    block的实现,如何截获自动变量的,如何修改自动变量的值的,block的几种形式
    __block的本质
    forwarding 指针
    block怎么避免循环引用。是不是所有的block都会产生循环引用,block里面怎么避免被提前释放

    多线程

    iOS 中多线程的几种方式,区别,使用场景,基本概念,同步异步,串行并行的区别。
    GCD,写一个死锁,并行和串行队列,同步和异步的区别,GCD怎么控制最大并发数
    怎么让子线程定时执行一个方法,具体的实现方法
    如何控制线程的最大并发数为10,然后加载十个图片最后展示出来,具体方法
    子线程的runloop是怎么执行的,它里面的 autoreleasepool 是怎么执行的。
    NSMutableArray 怎么保证线程安全的。
    GCD怎么避免block中的变量被提前释放

    Runtime

    消息的动态转发
    给 Category 添加属性,关联对象都有几种形式
    method swizzling
    说一说类的结构,运行时中的class都有什么属性,property都有什么属性
    说一说isa指到NSObject的那个过程
    Category的本质,load方法什么时候加载,Category重写了父类的方法会怎样,底层源码 ,如果两个Category和一个基类,都有同名方法,先执行哪个
    property会自动生成什么,如果此时已经有下划线_name的实例变量了那会生成什么
    load 和 initialize

    Runloop

    runloop实现原理

    source 类型

    线程保活的方式

    runloop和多线程的关系,以及timer的关系

    第三方库的源码

    AFNetWorking, SDWebImage,YYModel 都是非常常见,基本面试必问
    举例:SDWebImage怼源码,实现原理,如果正在请求一个地址的图片,这个时候又同时另一个请求,这个时候会再发送一个请求吗?
    如何自己实现一个 YYModel,具体使用的方法,延伸到 runtime 的源码

    生命周期

    app 的生命周期
    控制器的生命周期
    视图的生命周期

    UI

    UICollectionView 瀑布流
    UITableView 相关的优化,底层原理等
    页面布局
    layoutSubViews 和 drawInRect 等的区别
    自己实现一个 UIScrollView
    事件的传递链和响应链
    界面非常卡顿怎么定位到具体的类和方法
    UIView和CALayer区别

    数据存储

    数据持久化都有什么,用过什么,归档,偏好设置都可以存储什么样的类型

    架构

    MVC,MVVM等,他们的区别和联系,优缺点
    从 0 到 1 实现一个 app 的思路
    对于项目从 main 函数执行之前到之后启动优化,卡顿优化和界面优化。

    OC 语言特性

    OC 与 C 的区别, OC 与 Java, C++ 的区别。
    iOS中的协议
    OC 动态性
    C语言如何动态的交换两个方法的实现

    其他

    KVO 的底层原理,自己实现
    KVC 的底层原理,自己实现
    NSNotificationCenter 的底层原理,是同步还是异步,如何实现一个,如果在子线程接收一个通知能不能接收到
    几种页面传值方式的区别
    界面非常卡顿怎么定位到具体的类和方法
    一个 int 类型的值,被@(10) 包装成 NSNumber 类型,传递到一个接受 id 类型的方法参数中,这个值能不能保持正确
    在 iPad 上面,分屏功能,拖拽 wps 的文件到qq的这个过程是怎么实现的(进程间通信的方法)
    如何实现dispatch_once
    Instrument 的使用
    热修复用过么,平时版本是怎么迭代的,线上bug是怎么修复的
    实习期的一些内容。

    必备书单

    图解 TCP/IP, 图解 HTTP
    剑指offer
    Effective Objective-C
    iOS 与 OSX 高级编程
    以上都是必须要重复看很多遍的书单,其他不太重要的暂不列出。

    相关文章

      网友评论

        本文标题:iOS面试-必问知识

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