关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教。主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧。

美团

一面

1、简历上写的项目问了一遍,然后开始问知识点。

2、volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,

3、视觉控制器的生命周期

4、数据库

5、多线程(NSTread、NSOPeration、GCDA+block)

6、http协议get post的区别

7、手机适配一些方案

8、真机调试、项目上线注意事项

9、静态方法是否能被重写

这些大概聊了1个半小时,开始的时候还有些紧张,慢慢聊开了,就好多了,面试官的语速有点快,老是需要面试官重复一遍,我也不经意间语速也变快了,不过能看出来面试官还是很厉害的。

二面

1、id和nill代表什么(nill和NULL的区别)

2、向一个nill对象发送消息会发生什么?

3、http中的同步和异步

4、MVC 和 MVVM 的区别。

用 MVVM 实现一个业务。VC 是入口,VC1 显示 “省” 的列表,VC2 显示省关联的 “市” 的列表,VC3 显示市关联的 “县” 的列表。VC 到 VC1,VC1到 VC2,VC2 到 VC3,VC3 再跳转到 VC。相关点在于如何设计 ViewModel 和 Model ,以及 VC3 到 VC。

如何编写单元测试,比如写了一个网络库,如何测试该网络库,用例怎么写的更全面一些。

代码从 Git 上拉下来到生成 .ipa 都有哪些过程,期间都生成了什么文件。

最近读过哪些书,看过哪些框架,有什么收获。

谈到 JSPatch,问 JSPatch 是如何处理 Block 的。

自己擅长的地方。

遇到过什么样的挫折。

新增二面被问到的问题:如果没有instruments,该如何检测memory leak, zombie object 之类的问题。

三面

1、iOS是如何进行资源管理的。

2、Python比较重要的几个特性

3、网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。

先谈了下前两面的感受和问题,又和面试官聊到了单例和全局变量的区别。

Block和Protocol的区别,Block是为了解决什么问题而使用的。

iOS 的设计模式。iOS 为什么没有类似于 Java 和 C 之类的 “Builder” 的构造模式。

冒泡、插入、快速排序的平均时间复杂度和最坏时间复杂度。

堆排序。

有时间复杂度为 O(n) 的排序吗?

最近从 stackOverFlow 上解决过的问题,读过的开源框架,读过的书,业余兴趣,最有成就感的事情。

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

 

阿里

一面

1、介绍项目

2、在KVO中,他是怎么知道监听的对象发生了变化?

3、字典的工作原理 ?怎100w个中是怎么快速去取value?

4、一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?

5、Block和函数指针的区别?

6、性能优化

7、YYModel和AF源码

8、如何自己设计json转model

9、架构

他们的面试官好像都爱问一下底层的东西,比如这次面试上来机会问我KVO的问题。

问题【1】,看着好像很吊的样子,仔细一样不去思考,可能还真不是太了解,

问题【2】,这个就是纯纯的数据结构的问题了。

问题【3】,这个就是iOS的runTime的问题了,要只要isa,和一些swizzling技术

问题【4】,就是看你了解有多广泛了。

二面

1、浅拷贝和深拷贝的区别

2、Block的循环引用、如何解决、原理

3、Block和delegate的比较

4、kvo的实现原理

5、Autorelease pool的实现原理

6、消息转发机制

7、线程死锁的四个条件

8、进程和线程的区别

9、持久化

10、事务的特征

中途还讨论了Masonry的约束应该写在哪里,我说应该写在layoutSubViews,他说会调用多次,然后争论了一会儿

三面

主要问了项目的一些东西 和给一些场景问我如何实现

自我介绍 介绍一些项目难点

主线程是相对于什么而言的

一张图片的内存占用大小是由什么决定的

索引的作用

索引的优缺点

在数组中找最小的k个数

淘宝下拉加载更多如何优化

淘宝页面发送HTTP请求的过程

介绍一下MVVM

知道哪些设计模式

三面面试官主要就聊了一些具体场景问题和一些基础,基础应该是没太大问题。

头条

一面

自我介绍

项目相关

怎么自定义导航跳转

谈谈runtime的理解

KVC的用途

使用method swizzling要注意什么?(进行版本迭代的时候需要进行一些检验,防止系统库的函数发生了变化)

谈对引用计数的理解

谈谈runloop的理解

runloop有哪些状态

autoreleasepool的使用场景

TableView优化,怎么减少卡顿

copy assign retain weak关键词

JSON转Model

代码布局

多屏幕适配

HTTP2

HTTP请求头和响应头

Cookie

NSCache

自己设计一个缓存器

怎么实现LRU

SDWebImage

二叉树先序遍历(递归和非递归)

二面

MVC的一些缺点

讲一讲其它架构

你知道哪些编码方式

算法字符串翻转

多线程的方式和它们的区别

队列和线程的关系

一道线程安全的题

有哪些锁

属性的关键字

assign可以用于OC对象吗

copy和strong的区别

weak如何实现自动赋nil

为什么不可变对象要用copy

assing可以使用在对象中吗

Pod update和pod install的区别

layoutIfNeeded和setNeedsLayout的区别

抓包工具抓取HTTPS的原理

isEquel和hash的关系

bitmap的结构

可变数组的实现原理

如何hook一个对象的方法,而不影响其它对象

如何避免if else

自旋锁和互斥锁的区别

三面

介绍项目,主要介绍自己强项一点的地方

数组cop后里面的元素会复制一份新的吗

数组的浅拷贝与深拷贝

TCP为什么是三次握手和四次挥手

头条一直都是视频面,而且是一条龙服务。总体来说感觉不错,反正主要就是需要基础足够扎实,

百度

一面

1、iOS基础知识

2、Python基础知识,大概是多线程,线程安全,集合类,JVM,类相关知识等。

3、iOS一些源码的阅读

4、优秀的第三方框架源码阅读

5、GLSurfaceView的相关知识,OpenGL,Shader,绘制流程。

6、询问当前做的项目,以及到具体的实现和优化。

7、多进程间的通讯,Binder机制。

8、询问看过哪些框架源码,EventBus,Volley讲了一下。

二面

1、Delegate 、Notification和KVO比较各自的优缺点

2、在一个UI的正中间实现一个正方形的红色视图有几种方式?

3、手触碰到屏幕的时候,响应机制是怎样的?第一响应者是谁?追问 UIView和UIResponse的关系是什么?

4、UIViewController的生命周期是什么?追问 UIViewController 只alloc而没用到的时候,

5、UIViewController 的view是否加载了?如果没有加载那什么时候加载?

直接用UILabel和自己用DrawRect画UILabel,哪个性能好?为什么?哪个占用的内存少?为什么?

6、AFNetworking是否支持ipv6?

7、项目采用64位,为什么要用64位?怎么修改成64位?i386是什么?他们有什么关系?

8、iOS的应用程序有几种状态?追问,退到后台代码是否可以执行?双击home键,代码是否可以执行?

9、一般使用的图标内存为多大?比如200×300的图片,内存应该占用多少比较合理?

10、说说你对内存泄漏的看法,追问,block为什么容易引起内存泄漏?

11、[object copy]是浅拷贝还是深拷贝?为什么是浅拷贝?copy是实现了哪个协议?

12、Images.xcassets和直接用图片有什么不一样?

三面

全是问得iOS方面的问题,问得真的很细,需要基础很扎实,对各个机制真的足够理解,不然确实有点难回答。

1、内存管理方面的

2、多线程

3、各种队列

4、线程锁

5、MVVM

就是考察一下我iOS方面的能力到底是否有水分吧。问得很细,确实需要基础足够扎实才行。

腾讯

一面

1、介绍一下实习的项目,任务分工,做了哪些工作?介绍实习内容

2、网络相关的:项目里面使用到什么网络库,用过ASIHTTP库吗

3、断点续传怎么实现?需要设置什么?

4、在杭州HTTP请求服务器响应快,可能离服务器距离近,而在深圳访问就很慢很慢,会是什么原因?如果用户投诉,怎么分析这个问题?

5、HTTP请求的哪些方法用过?什么时候选择get、post、put?

6、TCP建立连接的过程,断开连接的过程,为什么是四次握手?

7、项目里面的数据存储都用了哪些?知道iOS里面有哪些数据存储方法?什么时候该用哪些方法存储?

8、MVVM如何实现绑定

9、block和通知的区别,分别适用什么场景

10、算法。连续问了好几个,都是数组,层层递进的,但是我忘了,只记得最后是找出数组

11、中重复的数字

12、进程和线程的区别

13、程序在运行时操作系统除了分配内存空间还有什么

14、进程间通信的方式

15、如何检测应用是否卡顿

16、发布出去的版本,怎么收集crash日志?不使用bugly等第三方平台或者这些第三方平台是怎么收集crash日志的?

17、在block里面使用_property会造成循环引用吗?怎么解决?除了使用self->_property,可以使用valueforkey来访问吗 在block里面可以修改它的值吗setvalueforkey?可以修改它的值,可以用valueforkey来解决,显式的的使用self,block外先持有self的弱引用。

二面

1、OC中对象的结构

2、多态

3、Ping是什么协议

4、知道MTU吗

5、ARC和MRC的本质区别是什么?

6、NSThread,GCD,NSOperation相关的。开启一条线程的方法?线程可以取消吗?

7、子线程中调用connection方法,为什么不回调?因为没有加入runloop,执行完任务就销毁了,所以没有回调。

8、MVC和MVVM的区别

9、了解哪些设计模式

10、存一个通讯录,包括增删改查,用什么数据结构

11、autorelease变量什么时候释放?手动添加的是大括号结束的时候释放,系统自动释放是在12、当前runloop循环结束的时候

13、那子线程中的autorelease变量什么时候释放?

14、子线程里面,需要加autoreleasepool吗

15、GCD和NSOperation的区别?

16、项目里面遇到过死锁吗?怎么解决?数据库访问本来就是线程安全的,不会造成死锁啊。什么是死锁?

17、Viewcontroller的生命周期?

18、在init方法里面,设置背景颜色,会生效吗 会生效。为什么会?

19、WWDC2016公布了哪些新特性?对苹果系列的最新特性有关注吗

20、看过哪些源码,讲讲思路

21、两个链表找第一个相同结点

22、字符串旋转

23、找链表的倒数第k个结点

24、把一个链表比某个值大的放在左边,比它小的放在右边

25、二叉树的中序遍历,非递归

iOS技能 - 最新美团、百度、腾讯、头条、阿里 面试题目记录的更多相关文章

  1. 深度分析:面试腾讯,阿里面试官都喜欢问的String源码,看完你学会了吗?

    前言 最近花了两天时间,整理了一下String的源码.这个整理并不全面但是也涵盖了大部分Spring源码中的方法.后续如果有时间还会将剩余的未整理的方法更新到这篇文章中.方便以后的复习和面试使用.如果 ...

  2. IOS 获取最新设备型号方法

    1.IOS 获取最新设备型号方法列表最新对照表:http://theiphonewiki.com/wiki/Models方法: #import "sys/utsname.h” struct ...

  3. iOS 技能图谱

    # iOS 技能图谱## 编程语言 - Swift - Objective-C - C++/C - JavaScript ## 操作系统 - Mac OSX - iOS - watchOS - tvO ...

  4. 腾讯2016实习生面试经验(已经拿到offer)

      忐忑了好几天,今天最终收到深圳总部的电话.允许录用我为2016年实习生,感觉整个天空都放晴了.坐标:武汉大学,给大家说说我的面试经历吧,我投的是软件开发--应用开发方向. 一.校招流程 投递简历- ...

  5. AT一万亿港元市值之差,腾讯和阿里到底“差”在哪里?

    很少有人注意到,港股之王已经悄然易主. 2019年底,阿里巴巴赴港二次上市,中国两大互联网巨头终于有了统一的比较口径,同台竞技之下,我们发现一个惊人事实--截止9月5日,港股阿里巴巴市值5.9万亿港元 ...

  6. 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮

    (出处:http://www.cnblogs.com/linguanh/) 前序: 距离  2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...

  7. 李洪强iOS经典面试题156 - Runtime详解(面试必备)

    李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...

  8. 关于在android手机中腾讯、阿里产品不自定义虚拟键盘的想法

    1,自定义虚拟键盘,影响用户体验.你每个用户的喜好不一样,都有自己心仪的一款输入法.腾讯或是阿里设计出来的输入法很难满足上亿用户的喜好,到时候又是一场口水战,再说了就是专业的输入法肯定要比应用里嵌套的 ...

  9. 你不知道的腾讯社招面试经验(已offer)

    # 你不知道的腾讯社招面试经验(已offer) ## 背景 最近一段时间换工作,成功获得了腾讯的offer.在这里有点经验跟大家分享,我觉得,比起具体的面试题,有些东西更加重要,你知道这些东西,再去准 ...

随机推荐

  1. LeetCode--第180场周赛

    LeetCode--第180场周赛 1380. 矩阵中的幸运数 class Solution { public: vector<int> luckyNumbers (vector<v ...

  2. 面试刷题12:zero copy是怎么回事?

    文件copy是java的io部分不可忽视的内容. 我是李福春,我在准备面试,今天的问题是: zero-copy是怎么回事? 操作系统的空间划分为内核态空间, 用户态空间: 内核态空间相对操作系统具备更 ...

  3. 一个简单的方法去掉angular application中URLs的hashtag

    本文转载自:Pretty URLs in AngularJS: Removing the # By default, AngularJS will route URLs with a hashtag. ...

  4. 设计模式—建造者模式(Builder)

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  5. hdu1171kmp果题

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1711/ #include<bits/stdc++.h> using namespace std; t ...

  6. git push错误,如何回滚

    --> git push Counting objects: 81, done.Delta compression using up to 4 threads.Compressing objec ...

  7. JS十大经典排序排序算法

    1.冒泡排序 冒泡排序通常排在第一位,说明它是排序算法的入门算法,是最简单的一个排序算法,而且必须掌握和理解. 先来看看代码吧: function bubbleSort(arr) { let temp ...

  8. java两数相乘基础算法

    下面是别人给我的代码: package com.bootdo; public class Test { public static void main(String[] args) { System. ...

  9. Github桌面版使用方式(MAC)

    Github是一个流行的代码管理网站,同时也是全球最大的同性交友网站(滑稽).Github网页上你可以自由地托管自己的项目,也可以fork别人的项目过来玩耍,非常之方便,今天笔者就来介绍一下githu ...

  10. 从零开始的JSON库

    从零开始的JSON库 项目地址 jsoncpp ,此项目受到 leptjson 启发,实现了最基本的功能,仅作学习使用. 提供简单的 parse() 和 generate() 方法将 JSON 文本解 ...