阿里巴巴一面问题
-
上来先来一个自我介绍,然后问了一些项目的问题
(略)
-
atomic关键词是绝对的线程安全吗,为什么
肯定不是,atomic确保了操作的原子性,就是指两个线程读写同一个属性,总能获取到有效的属性值,但如果一个线程在连续多次读取一个atomic属性值的过程中,别的线程修改这个值,也是会读到不同的属性值。
-
那在iOS中怎么实现绝对线程安全的加锁机制
我回答了用自旋锁,后面他让我解释了一下怎么实现自旋锁,然后还让我说了一下iOS中的锁:@synchronized、NSLock、dispatch的信号量
-
ARC内存管理
直接问他是不是想问我autoreleasepool,然后就说了autoreleasepool相关的内容。
-
为什么要在block里面强弱引用变换
当self持有block,而在block外面弱化了self时,当进入到block之后有可能会发生self已经被释放的问题,那样就会出现野指针的情况,所以需要在block中对weakSelf进行强化,避免self被释放的问题。
-
针对上个问题追问在block中嵌套block是否需要再做一次强弱变换,为什么
这个没答出来,后面我想了一下,内层block是被外层block中的
strongSelf
所持有的,这个strongSelf
是对外层block中的对象进行强引用,只不过在block过后就会将对象释放掉,所以在内层block中再次调用self
的确是需要对外层block的strongSelf
再进行一次强弱变换的。 -
iOS app启动过程
一开始我以为是问我
appDelegate
中的方法,后面他问我还有没有,我就说需要链接执行文件、动态库、framework等等。 -
系统报错unrecognizedSelector的流程,以及如何利用runtime对这个错误进行避免
第一个问题:iOS调用方法的时候会在对应类中对方法进行查找,如果找不到则会往上对父类进行查找,还查找不到则一直往上直到查找
NSObject
类,还是没有找到的话则会报错unrecognizedSelector
错误。 -
Load和initialize方法区别
+Load
是一定会在runtime中被调用的,在类被初始化的时候调用。+initialize
是不一定会被执行,只有当一个类第一次执行类的一些方法的时候才会被调用。 -
项目里面为什么要重构Model层
(略)
-
有了解过MVVM吗,对ViewModel有什么了解
我说ViewModel就是用来存放不属于Model但是要让UI展示的逻辑的代码,然后能提供更好的测试性。
-
算法题:斐波那契数列优化
剑指Offer有
-
有看过第三方的框架吗
我说了SDWebImage,然后他问了SD的缓存原理。 SDWebImage图片缓存原理
-
有了解过LRU算法吗,让你实现怎么实现
LRU(最近最少使用算法),根据数据的访问记录来淘汰数据。实现我说使用链表,当用到里面某个数据则将这个数据节点拿出来,然后放到链表头部,当需要淘汰数据的时候就将链表尾部数据节点进行淘汰。
-
有什么问题问他
阿里巴巴1.5面
刚面完一面没多久在走路就打电话过来说想让我打打代码。
题目
给定一个字符串,找到最长子串的长度,而不重复字符。
例子
给定“abcabcbb”,答案是“abc”,长度为3。
给定“bbbbb”,答案是“b”,长度为1。
给定“pwwkew”,答案是“wke”,长度为3.请注意,答案必须是子字符串,“pwke”是子序列而不是子字符串。
阿里巴巴二面问题
第二天又打电话过来了,感觉这次面我的不是做iOS开发的
-
自我介绍
-
什么是内存泄漏,instrument中Leak检测内存泄漏的原理是什么
内存泄漏就是应该被释放的对象没有被释放,一直保留在内存当中。第二题不会。
关于第二个问题能找到的相关博客只有这个,但是他说的是allocation的原理。
-
又问了一次ARC
我又说了一遍autoreleasepool
-
循环引用
a强应用b,b又强应用a
-
iOS多线程有没有在debug或者开发中用过
gcd
- 那么让你做一个异步下载图片怎么做
-
多线程重复设置图片问题
一面中SD有相关内容
-
png和jepg在内存中占用的大小哪个多一些
png
-
为什么要重构Model层,重构完之后的架构是怎么样的
重构完之后是MVC
-
那说一下MVC架构
M是Model,V是View,C是controller,model和view之间不能直接通信,需要通过controller来协调,controller可以直接调用model,model的改变通过Notification通知controller,并由controller直接操作view,而view通过action与controller进行交互,controller是view的数据源和代理。
-
那iOS为什么要使用MVC架构呢,小项目直接一个文件写全它不就好了吗?
讲真我好懵逼???然后我跟他解释如果全部都写到controller里面就会让整个controller代码很多,不方便维护,别人接手或者了解这个模块都会变得很困难。
-
看过哪些库
还是SDWebImage,然后追问我SD的缓存机制,还有内存命中率。(我感觉还是想问我LRU,但我当时没想到)
-
数据库有用过吗,索引是什么
我说我用过Realm,索引是用来快速寻找某些值,比如可以根据员工的姓作为索引在一个表中快速找到相关数据。
-
事务是什么
我问了是不是指ACID,他直接就说那就说ACID吧。
A:atomic,原子性,一个事务操作只能成功和不成功,不存在中间状态
C:consistency,一致性,事务必须保持系统处于一致状态,即多个线程进行操作后系统状态要保持一致
I:isolation,隔离性,两个相同功能的事务同一时间只能有一个事务请求使用同一个数据
D:durability,持久性,事务对系统的更改的持久的,不可以回退的。
- 最后也没有让我问问题
阿里巴巴三面
当天晚上又来了一个电话,应该是技术总监
- 项目相关
- 项目遇到的问题
- 为什么要重构网络请求框架
- 重构完有什么改进
- 有自己写过的小控件吗
- 有用到在项目上面吗
- github上有类似的吗
- 相比github上的有什么不同
- OC和swift你觉得有什么区别
- 职业规划
- 目前还有面试哪些公司
- 工作地点在杭州可以吗
- 家庭支持吗
- 有考虑过考研吗
- iOS学习经历
20分钟完了,等通知
阿里巴巴HR面
在下午视频面试
- 自我介绍
- 学习上的经历
- 项目上令你印象最深的点
- 为什么选择阿里巴巴
- 为什么选择iOS开发
- 对1688部门的认识
- 目前还有在面试哪些公司
- 腾讯和阿里选择哪个?为什么
- 评价一下自己的性格
- 工作地点有没有问题
- 对你影响最大的人
- 有没有考研的打算
-
有什么问题问她
(还好我先问了一下是不是最后一面,她说不是,那我就机智的没有谈薪资)
阿里巴巴交叉面
面试官是钉钉的
- 做项目遇到的难点
- 为什么要重构网络请求框架
- 我看你项目经验挺丰富的,在做项目遇到过什么难点吗
- 这个难点给你什么收获
- 成绩
- 大学期间有没有特别佩服的同学
- 评价一下自己
-
有了解过1688事业部吗
其实并没有,然后我绕了个弯说我已经跟HR了解过挺多的了,让他以为我误解了他的意思是他要给我科普哈哈哈哈哈
- 有了解过钉钉吗
- 有什么问题问他
后面我说加一下他微信了解情况他说他们不用微信,只用钉钉,真是尴尬死我了
最后我拿到了Offer~~