美文网首页iOS面试相关iOS面试题
2018 iOS面试题个人总结

2018 iOS面试题个人总结

作者: 思兄 | 来源:发表于2019-02-05 00:24 被阅读89次


    1.前言

    由于公司项目调整,11月份我必须重新面试找工作,本文从个人角度,对这次面试过程中各家公司的面试题作一个简单总结,以备后续参考和复习,面向3年左右的iOS开发者。坐标深圳,时间2018年11月-12月。其中问题研究深浅请根据个人具体项目经验区分看待。

    2.公司面试真题


    A公司

    UIViewController的生命周期

    Runtime的理解与项目内的使用

    Websocket的通信过程

    NSNotification的方法调用顺序

    B公司

    iOS事件响应链查找过程

    Runloop与线程保活,有哪些Mode

    React native的实现原理,数据流过程

    线程死锁的原因

    合作开发,Git提交如何避免冲突

    C公司

    GCD中Group的使用

    UITableView有哪些方法做滚动流畅度优化

    TCP3次握手的过程

    SDWebImage的源码与逻辑

    D公司

    utf8与unicode的关系

    ReactiveCocoa的理解与使用

    Block的理解与使用

    Webview如何优化加载:本地存储css等

    E公司

    RAC中冷信号、热信号的区别,什么情况需要转,怎样转

    RAC的使用中有哪些要注意的点总结

    Swift中结构体与类的区别,举实际例子

    HTTPs的加密连接过程

    对称加密与非对称加密的区别与使用场景

    ProtocolBuffer的编码与解码过程

    OC动态性的一些体现

    Git常用命令

    F公司

    崩溃统计的第三方实现方式

    __block可以修改变量的原理

    开发中一般有哪几种传值方式

    用GCD/NSOperation/信号量实现3个异步操作完成后再处理

    为什么在load方法中做方法替换

    如何设计请求缓存的框架,根据不同请求计算key

    RAC的双向绑定是如何实现的

    SDWebImage原理

    类似微信朋友圈的UITableView如何做优化(图文混排)

    NSNotification发出与接收是在同一线程吗

    NSURLProtocol拦截webview请求的机制

    G公司

    Exception与Error的区别

    二叉树遍历求和的算法,递归如何改为循环

    webview与原生交互遇到的问题

    半覆盖控制器的实现方式

    oop与pop的理解

    dealloc里面应该写什么

    struct与class的区别

    pointInside方法与事件响应链

    WWDC18中iOS、macOS的新特性等

    copy on write机制

    iOS开发中常用的设计模式

    H公司

    runloop的source0与source1

    OC的方法调用流程

    UIViewController的生命周期

    信号量与锁的原理,如何用信号量实现锁的效果

    iOS系统界面显示与绘制的原理、流程

    使用KVO遇到过什么问题,需要注意哪些

    runtime的在项目中应用场景(尽量多举)

    SDWebImage的图片编码解码,SD如何计算图片的key

    GCD与NSOperation的使用比较

    UIView响应链机制

    Alarmofire、Moya具体做了哪些工作

    自己怎样实现UIScrollview

    UIView与CALayer的关系,用了哪些设计模式

    如何通过修改isa指针实现KVO

    最近看的一篇技术文章的详细内容

    WebSocket的连接过程

    详细讲解做过哪些性能优化

    多种设计模式在项目中的具体应用

    GCD可以设置优先级吗,如何做

    I公司

    swift 3.0到4.2有哪些变化

    Codable协议

    rxswift的各种操作符的理解:map、flatmap、concat ...

    rxswift中的Driver与Observable的区别

    安卓fragment的生命周期,四大组件

    使用struct还是class作为模型以及为什么

    MVC与MVVM的理解

    函数科里化(Currying)有什么作用

    rxswift中的Subject有哪几种

    rxswift的concat与其类似操作符的区别

    二叉树每一个右节点求和的算法

    kvc/kvo在OC和swift中用法区别

    swift的String为什么不用数字取范围

    rxswift中的zip操作符使用示例

    自动释放池(AutoReleasePool)的理解与使用

    如何做代码混淆(安卓/iOS)

    WWDC18中的新技术点

    数据库SQL语句的书写(创建表、修改记录),数据库索引的作用

    做支付功能时:支付宝SDK,后台,APP交互过程

    J公司

    从浏览器输入字符后回车到浏览器界面显示,整个流程的讲述

    TCP连接3次握手保证了什么,为什么刚好是3次

    设计一个API与数据库与UI层的架构,来支撑IM功能,单向数据流等等

    装饰器模式,各种模式的代码逻辑举例

    MVC和MVVM的区别理解

    算法:求数组中出现次数最多的值

    做过哪些便于规范协作的工具(例如类模板、xunique脚本等)

    toC类的APP需要更加注重的点有哪些(动画,性能,多线程,质量监控)

    性能优化的实践、抽象能力与编程能力的关系

    K公司

    runtime、runloop的实际使用

    Swift泛型的理解与使用(Reusable的思想等)

    Moya的错误类型,使用Moya的好处

    RAC中常用的类与操作符

    ViewModel中应该放哪些代码

    递归、尾递归、栈溢出的概念

    有哪些持久化存储方案

    App沙盒的所有目录结构

    如何做数据校验:标志位、长度、摘要

    HTTP请求返回码有哪些系列

    DNS解析过程,查找、缓存(类比OC类的方法调用的查找与缓存过程)

    做蓝牙通信过程中的数据分包、拆包过程

    第三方库,简历中写的要完全熟悉(Alamofire、SDWebImage等等)

    throw与rehtrow,try?与try!的区别

    如何提升tableview的流畅度


    3.面试题要点归类


    编程基础:

    1.数据结构(栈,堆,二叉树,链表等)

    2.算法(剑指offer,Leet code中等及以下难度; 排序、查找、字符串、数组等)

    3.计算机网络(网络分层、DNS、TCP/IP、HTTPs、Socket)

    4.操作系统(进程与线程、内存布局)

    5.编译原理与过程

    iOS基础:

    6.OC基础与消息动态派发机制,类/元类继承关系图

    7.OC属性各种修饰符的使用区别

    8.Swift与OC的对比(泛型,面向协议,类与结构体,COW写时复制,异常处理)

    9.UIApplication、UIViewController、UIView生命周期

    10.OC/Swift的内存管理机制、weak的实现方式

    11.Runtime的原理,在语言层面和项目中的使用

    12.Core Animation,自定义UIView,自定义UICollectionView布局

    13.事件响应链机制,手势冲突处理

    14.原生与Webview的交互相关问题

    15.常用的持久化方案、App沙盒的目录结构

    iOS高级:

    16.KVC/KVO原理,具体应用,遇到过什么问题

    17.RunLoop原理及其应用

    18.多线程编程(线程、队列、锁、信号量),死锁,常用方式(GCD,NSOperation)对比

    19.设计模式(创建型、结构型、行为型等)及在实际项目中的使用

    20.动态化方案原理及其应用:Flutter、React Native

    21.iOS图形渲染机制,离屏渲染如何避免

    22.Block实现分析,使用注意事项

    23.AutoReleasePool作用、数据结构、实现细节

    24.Category的理解与实现分析

    项目经验

    25.项目的难点/核心技术点,做了哪些优化,解决的问题、得到的效果

    26.架构理解与实践:MVC/MVVM

    27.架构实践:ReactiveCocoa/RxSwift响应式,概念,操作符,特定使用场景

    28.几种主流的组件化(模块化)架构方案对比,Pod私有库相关问题

    29.Instruments性能分析与调优、lldb调试分析

    30.线上问题如何迅速定位修复,举例说明

    31.打包脚本与持续集成

    32.项目相关的特定需求:蓝牙、socket、ProtocolBuffer

    其他方面:

    33.最常用源码研究(Alamofire,SDWebImage,JSON->Model,Masonry,YYKit等)

    34.代码规范性、扩展性意识

    35.数据库常用SQL(温习)

    36.最近学习的技术点、平时学习方式等

    37.WWDC最近的内容

    38.GitFlow协同开发实践

    4.总结

    每年大家都传着互联网寒冬的说法,但是今年的确感到特别冷。走过这个过程,其实发现寒冬并不是坏事,它反而让我看清了自己的位置,明白求职的本质逻辑,尤其是在程序员这个行当里面,太多浮躁的心态需要寒冬的洗礼,这也是互联网软件行业逐渐成熟的必经之路。

    本次简单总结以下几点:

    ①算法和数据结构是一个程序员永不过时的内功

    ②学习新的技术点,一定要先深入底层搞清楚原理是什么,没有这个前提,API用的再熟也算不上掌握

    ③除了把项目做好,还需要时刻关注自己的技能图谱,补齐短板,打磨自己的突出项。总之,把本职的作品做好之外,还需要认识到自己“手艺人”的身份,才可能在寒潮中逆势开花。

    相关文章

      网友评论

        本文标题:2018 iOS面试题个人总结

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