Skip to content

Latest commit

 

History

History
205 lines (175 loc) · 7.23 KB

14阿里腾讯百度头条美团iOS面试题2018年4月.md

File metadata and controls

205 lines (175 loc) · 7.23 KB

阿里腾讯百度头条美团iOS面试题

Tamp__&&jianshu.com/p/a992b5f697ca

  • Effective Objective-C
  • 和Objective-C高级编程(多线程和内存管理)
  • 程序员的自我修养
    • 一个程序是如何被机器运行起来的?
  • 《剑指Offer》 (三遍)
  • 图解HTTP
  • 图解TCP/IP

美团一面

  • 算法奇数排在前面,偶数排在后面
  • 智力题,一个骑手送餐,ABCD商店,送给abcd四个人
  • kvo的实现原理
  • 消息调用的过程
  • get和post的区别
  • http有哪些部分
  • tcp和udp的区别
  • 七层模型

美团二面

  • 讲一讲响应链
  • 如何通过一个view查找它所在的viewController
  • 如何扩大view的响应范围
  • 微信分享大图如何实现,从进程的角度
  • 进程间的通信方式,并举例
  • 两个进程分别指向同一个地址空间并初始化一个值,分别输出是什么
  • 算法,判断一个字符串是否所有的大写字母都在小写字母前面
  • 修改podfile文件后,怎么用git diff显示出修改后版本和当前版本的不同,让我来设计
  • 程序执行的过程
  • 如果想要删除自己的一段代码,如何删除(在程序执行的过程中删除)
    • 编译链接的过程
  • 用过脚本编程吗
  • 了解前后端吗
  • 各科成绩,成绩排名

阿里一面

先介绍了项目,然后问了一些项目中的问题,然后开始问基础

  • 属性的关键字
  • 浅拷贝和深拷贝的区别
  • Block的循环引用、如何解决、原理
  • 三种Block
  • Block和delegate的比较
  • kvo的实现原理
  • Autorelease pool的实现原理
  • 消息转发机制
  • 线程死锁的四个条件
  • 进程和线程的区别
  • 持久化
  • 事务的特征
  • 中途还讨论了Masonry的约束应该写在哪里,我说应该写在layoutSubViews,他说会调用多次,然后争论了一会儿
    • 写在layoutSubview 里在8.0以上是没问题,早期版本
    • 约束可以写在创建SubViews的方法里,前提是你不横竖屏或横竖屏使用同一套约束。约束不应该写在布局方法里,而是写在更新约束方法里 updateConstraints

阿里二面

  • 介绍项目
  • 性能优化
  • YYModel和AF源码
  • 如何自己设计json转model
  • 架构
  • 迷之算法题

阿里三面

  • 一个安卓的面试官。。。。。
  • 主要问了项目的一些东西 和给一些场景问我如何实现
  • 自我介绍 介绍一些项目难点
  • 主线程是相对于什么而言的
  • 一张图片的内存占用大小是由什么决定的
  • 索引的作用
  • 索引的优缺点
  • 在数组中找最小的k个数
  • 淘宝下拉加载更多如何优化
  • 淘宝页面发送HTTP请求的过程
  • 介绍一下MVVM
  • 知道哪些设计模式

头条一面

  • MVC的一些缺点
  • 讲一讲其它架构
  • 你知道哪些编码方式
  • 算法字符串翻转
  • HTTPS
  • 多线程的方式和它们的区别
  • 队列和线程的关系
  • 一道线程安全的题
  • 有哪些锁
  • 属性的关键字
  • assign可以用于OC对象吗
  • copy和strong的区别
  • weak如何实现自动赋nil
  • 为什么不可变对象要用copy
  • assing可以使用在对象中吗

头条二面

  • Pod update和pod install的区别

  • layoutIfNeeded和setNeedsLayout的区别

  • 抓包工具抓取HTTPS的原理

  • isEquel和hash的关系

  • SD的源码

  • bitmap的结构

  • 可变数组的实现原理

    • NSArray 或 NSMutableArray 和 CFArray 完全没有共同点
    • __NSArrayM 用了环形缓冲区 (circular buffer)。这个数据结构相当简单,只是比常规数组或缓冲区复杂点。环形缓冲区的内容能在到达任意一端时绕向另一端
    • 在 0 处插入对象用了环形缓冲区魔法来将新插入的对象放置在缓存区的末端
    • 这意味着 __NSArrayM 可以对任意一端进行处理。你可以使用 __NSArrayM 作为栈或队列而没有任何性能问题
    • 每当缓冲区满了,它会重新分配1.625倍大小的空间。我很惊讶它居然不等于 2
    • 在删除的时候不会清除指针
  • 如何hook一个对象的方法,而不影响其它对象

  • 如何避免if else

  • 自旋锁和互斥锁的区别

头条三面

  • 介绍项目,主要介绍自己强项一点的地方
  • 数组cop后里面的元素会复制一份新的吗
  • 数组的浅拷贝与深拷贝
  • TCP为什么是三次握手和四次挥手

腾讯一面

  • 介绍项目的网络层
  • 为什么要使用HTTP???为什么不直接用TCP
  • 如何保证HTTP传输到达
  • HTTP头部有哪些内容
  • 讲一讲拥塞控制
  • MVVM如何实现绑定
  • block和通知的区别,分别适用什么场景
  • 算法。连续问了好几个,都是数组,层层递进的,但是我忘了,只记得最后是找出数组中重复的数字
  • 进程和线程的区别
  • 程序在运行时操作系统除了分配内存空间还有什么
  • 进程间通信的方式
  • 如何检测应用是否卡顿
  • 好像没多少问题了,记不太清,然后他说完了,我感觉好快,以为要挂了,就强行讲了些runloop和性能优化的东西,然后他说好了,你和下一轮面试官再说吧

腾讯二面

  • OC中对象的结构
  • 多态
  • Ping是什么协议
  • 知道MTU吗
  • TCP头部多长,IP呢
  • 线程同步的方式
  • iOS中有哪些锁
  • MVC和MVVM的区别
  • 了解哪些设计模式
  • 存一个通讯录,包括增删改查,用什么数据结构
  • 看过哪些源码,讲讲思路
  • 两个链表找第一个相同结点
  • 字符串旋转
  • 找链表的倒数第k个结点
  • 把一个链表比某个值大的放在左边,比它小的放在右边
  • 二叉树的中序遍历,非递归

百度一面

大概回忆一下

  • 进程和线程的区别
  • 一个进程有哪些区
  • 拥塞控制
  • 进程间通信的方式
  • 七层模型
  • TCP和UDP的区别
  • 传输层和网络层分别是做什么的
  • UDP可以实现一对多??
  • 算法 求数组的最长子数组
  • Http2.0如1.x的区别

百度二面

  • 发送一个HTTP请求的过程
  • TCP是如何保证可靠的
  • 内核态和用户态的区别
  • 在一个10G的数据里面找出最大的100个数
  • 讲一下我最满意的一个项目
  • 然后讲了一下网络造成卡顿的原因

百度三面

全是问得iOS方面的问题,问得真的很细,需要基础很扎实,对各个机制真的足够理解,不然确实有点难回答。我只列举一下大概方向,这些东西也是iOS开发必须掌握的基础吧

  • 属性的关键字方面的
  • 内存管理方面的
  • 多线程
  • 各种队列
  • 线程锁
  • MVVM

觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)

链接