2019 年 3 月 iOS程序员面试心得总结,请你们多多指教!

序言:程序员

今年2月中下旬由于我的缘由,换了一份工做,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了本身的一些不足,因而就想写出来和你们分享一下,若是能帮到正在面试的小伙伴更好。从面试题中,其实能够看到一些行业的发展,以及整体人才需求是怎样的了。面试

一.笔试题算法

笔试基本都有一两道基础题,好比说UITableView的重用机制,ARC的基本原理,如何避免retain cycle,谈谈对MVC的理解,iOS内存管理机制、WebView与JS交互、安全机制。这些你们应该都很清楚了。数据库

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群638302184,无论你是小白仍是大牛欢迎入驻,你们一块儿交流学习,群里免费提供阿里面试题及各大BAT面试题,iOS全面进阶学习资料,但愿你能找到理想中的工做。

图片描述

笔试的内容有几种有选择题,问答题,难一点的就是多选题了。我面试了一家就是给了10道多选题,多选,少选,错选都不行,当时作完之后就感受不是很好,有些题目题干就是一下哪些是对的,而后ABCD依次给4个不一样的概念,这种一道题至关于考了4个点。编程

总之遇到这种“恶心”的多选题也不要太慌,静下心来一一甄别应该能拿到不错的成绩。安全

接下来我说几个我当时答的不怎么好的题目,我当时记了一下,和你们分享一下。网络

1.进程和线程的区别和联系数据结构

这个实际上是操做系统的问题,当时一会儿把我问的懵了,后来仔细回想了一下,加上本身的理解就答了,下面说说稍微完整的答案,你们能够准备准备,再问这种问题就能够完美做答了。多线程

进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源.并发

一个线程能够建立和撤销另外一个线程;同一个进程中的多个线程之间能够并发执行.

2.并行和并发的区别

并行是指两个或者多个事件在同一时刻发生;

并发是指两个或多个事件在同一时间间隔内发生。

3.谈谈你对Block和delegate的理解

我当时是这么答的,delegate的回调更多的面向过程,而block则是面向结果的。若是你须要获得一条多步进程的通知,你应该使用delegation。而当你只是但愿获得你请求的信息(或者获取信息时的错误提示),你应该使用block。(若是你结合以前的3个结论,你会发现delegate能够在全部事件中维持state,而多个独立的block却不能)

4.谈谈instancetype和id的异同

一、相同点

均可以做为方法的返回类型

二、不一样点

①instancetype能够返回和方法所在类相同类型的对象,id只能返回未知类型的对象;②instancetype只能做为返回值,不能像id那样做为参数

5.category中能不能使用声明属性?为何?若是能,怎么实现?

这种问题一问,我当时就感受确定能实现的,可是实在不知道怎么作,后来回来查了一下,才知道是用到了Runtime的知识了。贴一下答案

给分类(Category)添加属性

利用Runtime实现getter/setter 方法

@interface ClassName (CategoryName)@property (nonatomic, strong) NSString str;@end//实现文件#import "ClassName + CategoryName.h"#importstatic void strKey = &strKey;

@implementation ClassName (CategoryName)

-(void)setStr:(NSString *)str

{objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY);}

-(NSString *)str

{ return objc_getAssociatedObject(self, &strKey);}

@end

6.isKindOfClass和isMemberOfClass的区别

这个题目简单,可是就是当时紧张的状况下,别答反了。

isKindOfClass来肯定一个对象是不是一个类的成员,或者是派生自该类的成员

isMemberOfClass只能肯定一个对象是不是当前类的成员

7.block里面的如何防止retain cycle

使用弱引用打断block里面的retain cycle

MRC中 _block 是不会引发retain;但在ARC中 _block 则会引发retain。ARC中应该使用 _weak或__unsafe_unretained弱引用

8.iOS多线程有哪几种实现方法?GCD中有哪些队列?分别是并行仍是串行?

iOS中多线程编程工具主要3有:

1.NSThread

2.NSOperation

3.GCD

dispatch queue分为下面3种:而系统默认就有一串行队列main_queue和并行队列global_queue:

GCD中有三种队列类型:

The main queue:与主线程功能相同。实际上,提交至main queue的任务会在主线程中执行。main queue能够调用dispatch_get_main_queue()来得到。由于main queue是与主线程相关的,因此这是一个串行队列。

Global queues:全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。能够调用dispatch_get_global_queue函数传入优先级来访问队列。

用户队列:用户队列 (GCD并不这样称呼这种队列, 可是没有一个特定的名字来形容这种队列,因此咱们称其为用户队列) 是用函数 dispatch_queue_create

建立的队列. 这些队列是串行的。正由于如此,它们能够用来完成同步机制, 有点像传统线程中的mutex。

9.谈谈NSString的时候用copy和strong的区别?

这个题目当时问出来,真的是一会儿就傻了,平时虽然用的多,可是真的没有注意比较过他们俩,看来平时学习仍是多要问问因此然!

10.Core Data是数据库么?有哪些重要的类?

我当时一看问到是否是的问题,我就留神,感受应该不是常理的,当时仔细想了想,Core Data确实不是一个数据库,只是把表和OC对象进行的映射,当时并非进进映射那么简单,底层仍是用的Sqlite3进行存储的,因此Core Data不是数据库。

有如下6个重要的类:

(1)NSManagedObjectContext(被管理的数据上下文)

操做实际内容(操做持久层)

做用:插入数据,查询数据,删除数据

(2)NSManagedObjectModel(被管理的数据模型)

数据库全部表格或数据结构,包含各实体的定义信息

做用:添加实体的属性,创建属性之间的关系

操做方法:视图编辑器,或代码

(3)NSPersistentStoreCoordinator(持久化存储助理)

至关于数据库的链接器

做用:设置数据存储的名字,位置,存储方式,和存储时机

(4)NSManagedObject(被管理的数据记录)

至关于数据库中的表格记录

(5)NSFetchRequest(获取数据的请求)

至关于查询语句

(6)NSEntityDescription(实体结构)

至关于表格结构

以上是我3月份面试遇到的问到的我一会儿没有答全或者没答好的问题,大神所有都会的话请忽略哈。而后还有2个开放性的问题,那基本就是彻底考验实力和本身理解的深度了。一个是谈谈你对Runtime的理解,另外一个是谈谈你对Runloop的理解,因为我我的这两个理解都不是很深,这里就不贴个人理解了。你们若是也感受欠缺的,就赶忙去网上多看看吧!

今年面试多了这些问题,也让我眼前一亮,也感叹,2年技术发展之快,面试现在都会涉及到算法,不会算法和数据结构的程序员的道路会越走越窄。

算法题,我遇到的都不难,毕竟不是BAT那种公司,简单的就是直接要你写一个算法出来,稍微高级点的就是有一个背景,而后要你解决问题,其实就是和ACM题目同样的,不过就是没有那么复杂。我贴几段问的最多的算法,太难的题只能考本身的算法功底了。

数据结构的题目我就遇到了链表翻转,实现一个栈的结构,先进后出的,树先跟,中跟,后跟遍历,图的DFS和BFS。代码就不贴了,太长了。若是有忘记的,能够再去翻翻回顾一下。

面试:

面试基本都是问你以前作过什么项目,遇到了哪些问题,本身如何解决的。谈谈对XXX的见解等等这些问题,只要平时认真完成项目,其实面试反而问的东西更好答,由于都是关于你项目的,这些你最了解和清楚了。

好了,到此就是2019年3月上海地区除了BAT公司,招聘iOS开发工程师的行情了,比2年前,最大的体会就是面试面更广了,要求更高了。

如今要求除了会OC,还要懂算法和数据结构,还有要么会ReactNative,或者PhoneGap一系列混合开发的框架,或者熟悉Swift,程序员要一直跟上主流才能不能被时代淘汰。才能具备竞争力。这也是我面试了这些公司的感悟,活到老学到老!最后但愿你们都和我交流交流,我也是个iOS菜鸟,请你们多多指教!

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群638302184,无论你是小白仍是大牛欢迎入驻,你们一块儿交流学习,群里免费提供阿里面试题及各大BAT面试题,iOS全面进阶学习资料,但愿你能找到理想中的工做。

文章来源于网络,若有侵权,请联系小编删除。

相关文章
相关标签/搜索