天天看点

iOS开发——BAT网易笔试&面试题&参考答案

阿里B2B - 一面

1,load方法执行顺序,分类和主类的load方法顺序,两个分类的load方法顺序,跟main函数的顺序

2,sqllite的跟orcale这些大型的数据库的机制有什么不同的?

3,sqllite用FMDB,FMDB是怎么实现防止多线程操作数据库的?(回答用了队列),用队列会不会用性能问题,比较慢?怎么做?

4,如果多个线程同时操作同张表,会造成什么问题?

5,同时上传9张图片(三四M)原图,你有什么设计思路做的比较好的性能。 6,项目怎么做的模块化?用过路由转发跳转页面吗?怎么做的?

网易一面iOS:

1.你一般学习iOS是如何学习的?

2.app内存你是如何分析的?

3.用过 TableView 吗,平时怎么解决 TableView 滑动卡顿问题的?

4.网络模型了解么?有哪几种?说说你的看法?

5.block本质是什么?

6.KVC机制是如何通过key找到value。

7.说说你最熟悉的第三方,知晓其原理么?

文中的所有题目都会分享在我的iOS交流群里,外加每天都会整理一道两道面试题,然后发布在群公告上,感兴趣的小伙伴赶紧一起加入吧,不想当咸鱼,想要换工作,还在犹豫什么,进群

=== 大厂offer。 iOS开发交流群:761407670,群文件直接获取面试资料

网易一面参考思路:http://url.cn/5PLSqYj

1.使用了第三方库, 有看他们是怎么实现的吗?

2.强连通量算法了解嘛?

3.遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些?

4.M、V、C相互通讯规则你知道的有哪些?

5.NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?

**腾讯一面参考答案地址:http://url.cn/5Hv8Jlv **

iOS学习视频下载地址:http://url.cn/5iAe35k

腾讯二面:

1.编译过程做了哪些事情;

2.字典大致实现原理;

3.block和函数指针的理解;

4.一般开始做一个项目,你的架构是如何思考的?

5.你了解的UIKit结构?

腾讯二面参考答案:http://www.jianshu.com/p/dd17bdcff9f7

**1.腾讯二面:http://www.jianshu.com/p/dd17bdcff9f7 **

**2.腾讯一面:http://www.jianshu.com/p/0e9e7486e1a7 **

3.BAT内推:http://www.jianshu.com/p/73be68baa1ac

**1.腾讯二面:http://www.jianshu.com/p/dd17bdcff9f7 **

**2.腾讯一面:http://www.jianshu.com/p/0e9e7486e1a7 **

**3.网易一面:http://www.jianshu.com/p/fe6c1606a9ba **

4.阿里一面:http://www.jianshu.com/p/de1418dc031a

腾讯三面:

1.OC你了解的锁有哪些?在你回答基础上进行二次提问; 追问一:自旋和互斥对比? 追问二:使用以上锁需要注意哪些? 追问三:用C/OC/C++,任选其一,实现自旋或互斥?口述即可!

2.内存泄漏可能会出现的几种原因,聊聊你的看法? 追问一:非OC对象如何处理? 追问二:地图类内存若泄漏,如何处理? 追问三:若常用框架出现内存泄漏如何处理?

3.容错处理你们一般是怎么做的?

4.项目开始容错处理没做?如何防止拦截潜在的崩溃?

腾讯三面:http://www.jianshu.com/p/3a50d1805655

**网易面试题: **

1.MRC和ARC 运行时有啥不同?

2.在流程A,比如支付的时候如何不被流程B,比如其他请求打断?

腾讯三面参考思路:http://www.jianshu.com/p/3a50d1805655

3.阿里P6二面:http://www.jianshu.com/p/fe6c1606a9ba

【链接】IOS视频编辑功能详解上篇-添加水印 http://www.hudongdong.com/ios/546.html 清华课程数据结构视频:链接: https://pan.baidu.com/s/1c100aJ2 密码: fpji

C++算法视频:链接: https://pan.baidu.com/s/1c2fH6mc 密码: bvnf

西北工业大学算法设计:链接: https://pan.baidu.com/s/1i59t31N 密码: jkuu

麻省理工学院算法导论:链接: https://pan.baidu.com/s/1i59t31N 密码: jkuu

中科大数据结构算法:链接: https://pan.baidu.com/s/1gfKmT5h 密码: gftv

小甲鱼数据结构和算法:链接: https://pan.baidu.com/s/1hsmuR7e 密码: 7k51

七月算法合集:链接: https://pan.baidu.com/s/1eSIndlg 密码: rcgw

浙江大学数据结构:链接: https://pan.baidu.com/s/1jIePpNw 密码: wtmg

Java数据结构和算法:链接: https://pan.baidu.com/s/1eSriCcq 密码: 694g nsmutableSet %lu

GCD

gcd: 它是苹果为多核的并行运算提出的解决方案,会自动管理线程的生命周期,使用的也是c语言,不过由于使用了 Block,使用起来更加方便,而且灵活. 串行队列和并行队列 dispatchqueuecreate

串行:传入DISPATCHQUEUESERIAL

并行:传入DISPATCHQUEUECONCURRENT 两种执行方式 同步sync和异步async

什么情况下使用:GCD在多核CPU上线程切换的时间比较短效率相对高些.NSOperation是建立在GCD之上的虽然使用起来比较复杂但是在线程并发管理优先级上有着GCD无法比拟的优势.

利用dispatch_once创建单例:代码仅会被运行一次,而且还是线程安全的.

gcd 同步,异步,串行/并行,由谁控制

异步:队列是用来提交block的对象,当block提交到队列后,链表保存所有提交的 block,按照先进先出的顺序处理,系统在GCD底层维护一个线程池,用来执行block

同步:利用了线程专属信号量,保证了每次只有一个 block 被执行。 如果向当前串行队列提交任务就会走到上述分支,导致死锁。如果是向其它串行队列提交 block,则会利用原子性操作来实现,因此不会有死锁问题。

gcd的简单表现在哪些方面:

延迟执行,dispatchafter 重复执行次数:dispatchapply GCD提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱,而且因为基于block,它能极为简单得在不同代码作用域之间传递上下文。 *能自动根据系统负载来增减线程数量,这就减少了上下文切换以及增加了计算效率。

gcd与队列的区别:

栈和队列的特点与区别

1.队列先进先出,栈先进后出。 栈一端进行插入和删除。 队列在一端插入,另一端进行删除。

控制部分任务完成如何操作

runtime

使用runtime实现json->object转换:

使用class_copyPropertyList获取Model的所有属性列表, 遍历该列表使用property_getName即可得到所有属性名. 对于Model中定义的属性, 使用KVC即可将dict中的值赋给该属性.

NSMutableArray *keys = [[NSMutableArray alloc] init]; u_int count = 0; objc_property_t *properties = class_copyPropertyList([self class], &count); for (int i = 0; i < count; i++) { objc_property_t property = properties[i]; const char *propertyCString = property_getName(property); NSString *propertyName = [NSString stringWithCString:propertyCString encoding:NSUTF8StringEncoding]; [keys addObject:propertyName]; } free(properties); for (NSString *key in keys) { if ([dict valueForKey:key]) { [self setValue:[dict valueForKey:key] forKey:key]; } }

使用runtime实现object->json转换:

将自定义类的实例化对象转为字典,转data,转json

音视频

设计模式:

目前常用的几种设计模式:代理模式、观察者模式、MVC模式、单例模式、策略模式、工厂模式、MVVM

工厂模式 场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。 “专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。” 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例。

单例 场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

即时通讯 :

即时通讯 Socket:实时性(监视和检测),断线重连,注销手动关闭。

1.连接:全局单例数据共性,定时发送长连接(NSTimer)指令(指令与信息数据格式服务器来制定),没有收到服务器返回消息,得到失去连接的消息,在失去连接的回调方法中重新连接。

2.断开与重连:两种可能枚举type:服务器掉线0;用户断开连接1(退出登录或程序退出);我们在cut前对socket的userData赋予一个值来标记为用户退出,这样我们可以在收到断开信息时判断究竟是什么原因导致的掉线。 实现代理方法掉线重连,用户断开不重连(return)。

3.发送接收数据:socket发送数据是以栈的形式存放。先发送或接收长度,再接收数据。 Xmpp:基于xml的协议,可以通过发送扩展的信息来处理用户需求,建立内容发布系统和基于地址的服务应用程序,包含了针对服务器端的软件协议。功能是用TCP传xml流。 环信:消息构造,文字,图片,位置,语音视频文件,插入消息更新。 会话:创建、删除、获取会话、未读消息数、 解析:图片文字文件(缩略图自动下载)的远程路径,本地路径,长宽,下载状态。下载失败主动调用asyncFetchMessageThumbnail:progress方法主动获取。下载方法:同步方法,block回调方法,. IChatManagerDelegate异步方法。 已读回执:收到的”已读回执”对象,包括 from, to, chatId等

socket

优化有哪些 优化cpu

对象创建:

使用轻量对象:比如 CALayer 比 UIView 要轻量许多。

不涉及 UI 操作的放到后台线程创建

延迟创建时间

尽量复用对象

单元测试如何找到对应的元素

[[app.textFields elementBoundByIndex:i] typeText:@“张三"];

XCTest完整简单案例及分析

动画包括哪些:转场动画,基础动画,关键帧动画,组动画,转场动画

多线程包括哪些

NSThread:

优点:NSThread 比其他两个轻量级,使用简单

缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销

NSOperation:

不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上

NSOperation是面向对象的

GCD:

Grand Central Dispatch是由苹果开发的一个多核编程的解决方案。iOS4.0+才能使用,是替代NSThread, NSOperation的高效和强大的技术

死锁是什么?如何解决死锁?

死锁通常指有两个线程A和B都卡住了,并等待对方完成某些操作。GCD同步执行时,在串行队列中添加了block,block一直等到前面的任务处理完才会执行,从而导致了死锁。

如何用C语言模拟MRC?

进程与线程的特点与区别?

1)进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。 (2)进程和线程的主要差别在于它们是不同的操作系统资源管理方式。 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 共享变量可以实现线程调用另一个线程。

链表有哪些特点?用指针连接

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。

链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

嵌套数据库语法 left

排序的复杂度 最小复杂度

树的遍历方法?

typeof 被弃用了,新的方法是什么

assign 和 weak,block,weak的简单说明 delegate:ARC 使用weak,MRC 使用assign 保证安全。 __block通过指针地址修改变量。在多线程中防止在block中self 已释放掉。ARC,MRC模式都可以用,可以修饰对象,也可以修饰基本数据类型。 __block typeof(self) = weakself __weak修饰对象,不修饰基本数据类型,只能在ARC模式下使用

weak弱引用,对象消失后,会自动将对象置nil

core Data 或者sqlite的读写是分线程的吗?

tcp与udp

进程管理优化

内存管理优化

使用ARC

使用reuseIdentifier

重用和延迟加载View

  • 缓存

    2018第一波面试题已更新

阿里一面:

MVC具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?

两个无限长度链表(也就是可能有环) 判断有没有交点

UITableView的相关优化

KVO、Notification、delegate各自的优缺点,效率还有使用场景

如何手动通知KVO

重写Controller里面某个属性的setter方法,联动给View赋值,使用Controller监控Model里面某个值的变化,在controller的dealloc函数中用一行代码了结:removeObserver。

Objective-C 中的copy方法

runtime 中,SEL和IMP的区别

方法名 SEL – 表示该方法的名称; 一个 types – 表示该方法参数的类型; 一个IMP – 指向该方法的具体实现的函数指针,说白了IMP就是实现方法。

autoreleasepool的使用场景和原理

RunLoop的实现原理和数据结构,什么时候会用到

block为什么会有循环引用

使用GCD如何实现这个需求:A、B、C 三个任务并发,完成后执行任务 D。

NSOperation和GCD的区别

CoreData的使用,如何处理多线程问题

如何设计图片缓存?

有没有自己设计过网络控件?

[[UIApplication sharedApplication] statusBarFrame].size.height 这个是状态栏高度

蚂蚁金服面试

1:在KVO中,他是怎么知道监听的对象发生了变化?

2:字典的工作原理 ?怎100w个中是怎么快速去取value?

3:一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?

4:Block和函数指针的区别?

支付宝面试题:1.iOS多线程有哪些?他们之间各有什么区别,优劣性?2.UIView和NSObject这两个类,所有里面的方法和原理都需要了解一下。3.Runloop和线程的关系?4.Runloop的作用?RunloopMode的原理?

搜狗iOS面试题: 1.iOS应用的文件目录都是什么?缓存文件存在哪个文件里?它的上一层是什么?

2.SDWebImage图片处理原理?

3.SDWebImage在iOS9 3dtouch下出现的问题?

4.NSArray和NSMutableArray在Copy和MutableCopy下的内存是怎样的?

5.用户下载一个图片,图片很大,需要分成很多份进行下载,使用GCD应该如何实现?使用什么队列?

6.现有两个人和一张桌子,两个人依次在桌子上放硬币,硬币不能叠放、立着,若一方找不到放的位置则失败。若你在玩这个游戏,设计一个算法必赢。

7.现有n个物品和一个体积为V的包,每件物品的体积是ci,价格是wi,现在请你往包中放,每件物品只能放一次,怎么放能让包的价格最大。

文中的所有题目都会分享在我的iOS交流群里,外加每天都会整理一道两道面试题,然后发布在群公告上,感兴趣的小伙伴赶紧一起加入吧,不想当咸鱼,想要换工作,还在犹豫什么,进群

=== 大厂offer。 iOS开发交流群:761407670,群文件直接获取面试资料