这几年来我面试过的iOS开发岗(附面试题)

前言

对过去的两三年做个总结,或许能帮助到些人,或者从中能得一些建议。这次出去面试主要是两个星期的时间,第一个星期主要是投简历,第二个星期主要是面试,一天安排了2-3个面试。

一、如何准备面试呢?面试的注意事项有哪些呢?

image

下面是我总结的一些准备面试的Tips以及面试必备的注意事项:

1.准备一份自己的自我介绍,面试的时候根据面试对象适当进行修改(突出重点,突出自己的优势在哪里,切忌流水账);

2.注意随身带上自己的成绩单和简历复印件;(有的公司在面试前都会让你交一份成绩单和简历当做面试中的参考。)

3.如果需要笔试就提前刷一些笔试题,大部分在线笔试的类型是选择题+编程题,有的还会有简答题。(平时空闲时间多的可以刷一下笔试题目(牛客网上有很多),但是不要只刷面试题,不动手code,程序员不是为了考试而存在的。)另外,注意抓重点,因为题目太多了,但是有很多题目几乎次次遇到,像这样的题目一定要搞定。

4.提前准备技术面试。 搞清楚自己面试中可能涉及哪些知识点、那些知识点是重点。面试中哪些问题会被经常问到、自己改如何回答。(强烈不推荐背题)
第一: 通过背这种方式你能记住多少?能记住多久?
第二: 背题的方式的学习很难坚持下去!

5.面试之前做好定向复习。 也就是专门针对你要面试的公司来复习。比如你在面试之前可以在网上找找有没有你要面试的公司的面经。

6.准备好自己的项目介绍。 如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑:

①对项目整体设计的一个感受(面试官可能会让你画系统的架构图;
②在这个项目中你负责了什么、做了什么、担任了什么角色;
③ 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用;
④项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能

提前知道有哪些技术问题常问: iOS底层原理、热修复,算法题等等问题我觉得面试中实在太常见了,好好准备!后面的文章会我会分类详细介绍到那些问题最常问。

提前熟悉一些常问的非技术问题: 面试的时候有一些常见的非技术问题比如“面试官问你的优点是什么,应该如何回答?”、“面试官问你的缺点是什么,应该如何回答?”、“如果面试官问"你有什么问题问我吗?"时,你该如何回答”等等,对于这些问题,如何回答自己心里要有个数,别面试的时候出了乱子。

6.面试之后记得复盘。 面试遭遇失败是很正常的事情,所以善于总结自己的失败原因才是最重要的。如果失败,不要灰心;如果通过,切勿狂喜。

二、面试主要印象比较深的知识点:

image

kvo的实现原理

消息调用的过程

get和post的区别

http有哪些部分

tcp和udp的区别

消息转发机制

线程死锁的四个条件

进程和线程的区别

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

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

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

4.为什么要使用HTTP???为什么不直接用TCP

5.MVVM如何实现绑定

6.block和通知的区别,分别适用什么场景

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

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

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

10、GCD和NSOperation的区别?

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

12、线程同步的方式

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

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

以上的面试题,主要是iOS底层原理和算法和应用知识,需要面试之前造造火箭的,还需要平时的耕耘、积累和总结。

三、真题(附答案)

image
1、1、如何令自己所写的对象具有拷贝功能?

如果想让自己的类具备copy方法,并返回不可边类型,必须遵循nscopying协议,并
且实现

  • (id)copyWithZone:(NSZone *)zone
    如果让⾃⼰的类具备mutableCopy方法,并且放回可变类型,必须遵守
    NSMutableCopying,并实现- (id)mutableCopyWithZone:(nullable NSZone *)zone
    注意:再此说的copy对应不可边类型和mutableCopy对应不可边类型⽅法,都是遵从
    系统规则⽽已。如果你想实现自己的规则,也是可以的。
1、 2、iOS 中的多线程?

iOS中的多线程,是Cocoa框架下的多线程,通过Cocoa的封装,可以让我们更为方
便的使⽤线程,做过C++的同学可能会对线程有更多的理解,比如线程的创立,信号
量、共享变量有认识,Cocoa框架下会方便很多,它对线程做了封装,有些封装,可
以让我们创建的对象,本身便拥有线程,也就是线程的对象化抽象,从而减少我们的
工程,提供程序的健壮性。

  • GCD是(Grand Central Dispatch)的缩写 ,从系统级别提供的⼀个易⽤地多线程类
    库,具有运⾏时的特点,能充分利⽤多核⼼硬件。GCD的API接⼝为C语⾔的函数,函
    数参数中多数有Block,关于Block的使用参看这⾥,为我们提供强⼤的“接⼝”,对于
    GCD的使⽤参⻅本⽂
  • NSOperation与Queue
    NSOperation是一个抽象类,它封装了线程的细节实现,我们可以通过子类化该对
    象,加上NSQueue来同⾯向对象的思维,管理多线程程序。具体可参看这个:一个基
    于NSOperation的多线程网络访问的项目。
  • NSThread
    NSThread是⼀个控制线程执行的对象,它不如NSOperation抽象,通过它我们可以⽅
    便的得到一个线程,并控制它。但NSThread的线程之间的并发控制,是需要我们⾃自己
    来控制的,可以通过NSCondition实现。
    参看 iOS多线程编程之NSThread的使用
1、 3、内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象?

需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
谁申请,谁释放
遵循Cocoa Touch的使用原则;
内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property
设置特性时,⼀定要⽤对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,
要细心。
关键字alloc 或new 生成的对象需要手动释放;
设置正确的property属性,对于retain需要在合适的地方释放

以下文章可以做一个学习参考:
GCD面试要点
block面试要点
Runtime面试要点
RunLoop面试要点
内存管理面试要点
MVC、MVVM面试要点
网络性能优化面试要点
网络编程面试要点
KVC&KVO面试要点
数据存储面试要点
混编技术面试要点
设计模式面试要点
UI面试要点

你可能感兴趣的:(这几年来我面试过的iOS开发岗(附面试题))