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的异同
1、相同点
都可以作为方法的返回类型
2、不同点
①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全面进阶学习资料,希望你能找到理想中的工作。
文章来源于网络,如有侵权,请联系小编删除。
2019 年 3 月 iOS程序员面试心得总结,请大家多多指教!的更多相关文章
- 2019年腾讯PHP程序员面试题目分享
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...
- 2018 年 3 月 iOS架构师 面试总结
序言: 今年2月中下旬因为个人原因,换了一份工作,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了自己的一些不足,于是就想写出来和大家分享一下, ...
- iOS程序员如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核 ...
- iOS程序员 如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异, 说白了就是你的优势,而且最好是独一无二的的优势,这就是 ...
- Java程序员面试学习资料汇总
整理了一些关于Java程序员面试的书籍及免费资料. 一.书籍篇1)<Offer来了:Java面试核心知识点精讲(原理篇)>精讲Java面试必需的JVM原理.Java基础.并发编程.数据结构 ...
- iOS程序员对算法的要求
算法和数据结构(鉴于二者的关联,以下统称算法),对于程序员的重要性一直是个具有争议性的话题.有一些程序员内心对算法有着天然的排斥,面试当中一旦考察算法知识,会被不少程序员吐槽,但有部分公司又一直在坚持 ...
- 同样级别iOS程序员,为啥比我菜的程序员薪资都比我高?
前言: 作为程序员,都有一种相同的焦虑——即当一次又一次的新技术浪潮袭来,总会不由自主的拼命跟随,总是担心如果不紧跟新技术的潮流,将会被时代所抛弃. 害怕年龄,害怕平庸,其实只是你在现实里的努力无法支 ...
- 新书出版 |《Oracle程序员面试笔试宝典》
新书出版 |<Oracle程序员面试笔试宝典> <Oracle程序员面试笔试宝典> 丛书[数据库 面试 笔试宝典]已在京东.淘宝和天猫预售,一共 5 本,目前市场上已有4本,丛 ...
- ASP.NET的几个试题(《C#与.NET程序员面试宝典》)
更多参考:博客园笔记 :ASP.NET是什么 ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和 ...
随机推荐
- 《JavaScript高级程序设计》笔记:面向对象的程序设计(六)
面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. 理解对象 创建自定义对象的最简单的方法就是创建一个Object的实例,然后再为它添加属性和方法.例 ...
- Android Studio Error:Execution failed for task ':app:preDebugAndroidTestBuild'.彻底解决的方法以及修改AScompileSDKVersion
Error Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency ...
- Android探究之View的绘制流程
Android中Activity是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当Activity启动时,我们会通过setContentView方法来设置一个内容视图 ...
- javafx:JavaFX Scene Builder 2.0打开含有第三方jar包的fxml文件报错 Caused by: java.lang.ClassNotFoundException
报错如下: java.io.IOException: javafx.fxml.LoadException: /C:/User.................test.fxml at com.orac ...
- 阿里云MySQL远程连接不上问题
解决阿里云MySQL远程连接不上的问题:step1:1.修改user表:MySQL>update user set host = '%' where user = 'root'; 2.授权主机访 ...
- C#自定义控件添加到工具箱
1.在需要使用这个自定义控件的项目中,在引用中,右键,添加引用,浏览,找到dll(如:ComButton.dll),进行添加,这时候,控件应该是能够自动添加到工具箱的. 2.在Visual Studi ...
- Apache kylin概览
一.Apache kylin的核心概念 表(Table ):表定义在hive中,是数据立方体(Data cube)的数据源,在build cube 之前,必须同步在 kylin中. 模型(model) ...
- EOS开发环境搭建
EOS开发环境搭建 在上一篇文章<扒一扒EOS的前世今生>中,我们已经了解了EOS以及他的创始人Daniel Larimer的故事,本次为大家带来的是关于EOS开发环境搭建的内容.首先 ...
- 专注于C#.Net WPF软件开发-软件反编译-软件破解-逆向-靖芯科技-包括安卓APK反编译
靖芯科技提供.Net软件开发,软件修改定制二次开发,软件破解,反编译,逆向等各项优质服务: 包括安卓APK软件反编译. 包括但不限于C#,WPF,Surface,Winform,Asp.net.JAV ...
- fullcalendar日历插件的使用并动态增删改查
我上个项目是做了一个关于教育方面的web端页面,其中的课程表就要用到fullcalendar日历插件,刚开始也是不会用,因为以前也没用过,后面也是看官方文档,问同事,最后完成了这个课程表,个人感觉fu ...