天天看点

自己面试大厂iOS开发的心得以及一些面试题

前期准备

        从去年换了一家公司后,开始有空余的时间,然后就开始研究一些OC的底层原理。当时只是走马观花的看了遍视频,所以记得不是特别深刻。

        后来flutter听说特别火,就又去学了几个月flutter,到自己尝试可以写一些demo之后,把现有的项目用flutter写了大致流程之后,就再也没碰过了。再后来,机缘巧合吧,看到戴铭老师的一篇文章,要想走的远,还是学好基础,所以重新去跟着视频学习底层,这回就比较认真一点,看完后会记录在博客中,也算小有成就吧。学完感觉自己的技术有了很大的提升,虽然视频里面还是有很多细节没有记住,但是大部分基础原理都是掌握了,可以描述出来。而且,某些技术点也自己尝试用在了自己的项目中,某些优化,虽然效果甚微,但是技术点还是很突出的。

        然后开始不满足现状,想追求一个更好的发展平台,于是开始了求职之旅。这里一定要注意,你的简历一定要符合现实,而且你简历描述的点,基本上都会过问一遍,自己准备好,我就吃了这个的亏,错过了一些公司。我自己的简历上,把使用到的二进制重排这个技术点也写在简历上,还有懂得些底层原理,就这样有几个突出的技术点,我的简历被很多大公司筛选通过了,但是接下来才是噩梦,我有些高估了自己的水平。

        大厂问的问题都特别的深入,从app启动过程dyld做了什么,预编译的时候做了什么,再到各种技术点的底层原理,比如kvc、kvo、通知啊什么的,有些还会根据某些原理,让你去想想实际的应用,比如网易的大佬问的,contentsize实现的原理,又给我举例,frame和bounds的区别,我们都知道是基于参考坐标不一样,那么它对应的具体应用是什么呢,这个就是contentsize的原理,基于自己的坐标,更改位置,从而产生滑动的效果。再有,会问你阅读过哪些三分框架,常见的afn、sdwebimage基本上都可以去看看,里面的设计模式,这么设计的好处,好处基本上都是基于六大设计原则,内存管理,什么时候销毁缓存的图片之类的,提前准备好被问。

        总之,就是底层一定要扎实,我自己是3年的ios工作经验,之前一直都是混迹于小公司,2年的ui仔,然后开始学习底层,买了一些课程,才接触到世界。其次,你的简历上写的,一定要对应好每一个点,都准备好被提问,因为面试官面试你,最开始的就是简历筛选,然后通过简历去了解你的技术深度,再做额外拓展。

面试题

0、深copy和浅copy

1、load方法在什么时候调用 initialize又是什么时候调用 区别

2、runtime是什么

3、方法的本质,sel是什么,imp是什么,两者的关系

4、能否向编译后得到的类中增加实例变量?能否运行时创建的类中添加实例变量?

5、[self class][super class]

6、weak原理,为什么可以自动置为nil

7、线程与进程的关系 线程的同步方案

8、block?循环引用,__block 

9、如何解决循环引用

10、tablevie的重用机制

11、wkwebview与h5交互

12、内存5大区 (堆和栈的区别)

13、内存管理方式

14、数据存储方式

15、property的本质

16、isa指针

17、什么是runloop

18、uiview和calayer的关系

19、自动释放池原理

20、分类的作用 和拓展的区别

21、关联对象 原理

22、tcp和udp

23、为什么会离屏渲染 可能的原因

24、单利 优缺点

25、kvo、kvc 原理

26、mvc、mvvm mvp,优缺点

27、通知的原理 通知对对象是强引用还是弱引用

28、@asycnized原理

29、了解那些跨平台开发,以及对应的优缺点,flutter为什么比其他跨平台好

30、flutter混合开发(如何与原生交互,几种方式)

31、apns 通知的原理

32、sdimage的原理,以及其中图片的销毁机制

33、strong和copy

34、assign和weak 如果用assign修饰了对象会怎么样

35、编译原理

36、签名机制

37、工厂模式和抽象工厂模式

38、js桥原理  怎么去触发回调(如何触发多线程)

39、常用的加密算法(md5 、rsa、des 、3des,以及一些哈希算法)

40、.a和.framework

41、bounds和frame uitableview的contentsize 基于bounds

42、断点下载原理 (再深一层 就是http做了什么)

43、tableview卡顿可能原因

44、app启动流程(main函数 dyld做了什么)

45、启动优化(二进制重排 及其原理  去除没有用到的code load)

46、afn这么设计的原理(或者你自己看过的三分库,一定要知道原理,然后这么设计的好处,好处可以参考六大设计准则)

47、简单的防崩溃(使用hook nsarray的类是根据内容的数量初始化产生的,原理是try catch)

48、符号表内的结构

49、有哪些锁 (互斥和自旋  有什么区别 )

50、事件的响应链

51、六大设计准则

52、runloop原理 实际应用(卡顿检测以及它的原理)

53、子线程内使用nstimer会失效

54、与js交互的方式 (webview 内的js桥,注入js代码等等,还有原生提供的jscore)

55、崩溃的收集,友盟崩溃收集原理(提示要上传符号表)

56、app的日活量,崩溃率多少优秀

57、多线程使用 nsoperation 和 gcd 

58、数据库的使用

59、消息机制过程,可以利用消息机制做什么

60、代码管理方式,我所在的是用git,在分支上操作

继续阅读