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

iOS开发——BAT网易笔试&面试题&参考答案_第1张图片
笔试&面试题

阿里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,群文件直接获取面试资料
——点击加入:iOS开发交流群

网易一面参考思路: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第一波面试题已更新

阿里一面:

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

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

  3. UITableView的相关优化

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

  5. 如何手动通知KVO

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

  6. Objective-C 中的copy方法

  7. runtime 中,SEL和IMP的区别

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

  8. autoreleasepool的使用场景和原理

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

  10. block为什么会有循环引用

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

  12. NSOperation和GCD的区别

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

  14. 如何设计图片缓存?

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

[[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面试题:

1.Delegate 、Notification和KVO比较各自的优缺点

2.在一个UI的正中间实现一个正方形的红色视图有几种方式?

3.手触碰到屏幕的时候,响应机制是怎样的?第一响应者是谁?追问 UIView和UIResponse的关系是什么?

4。UIViewController的生命周期是什么?追问 UIViewController 只alloc而没用到的时候,UIViewController 的view是否加载了?如果没有加载那什么时候加载?

5.直接用UILabel和自己用DrawRect画UILabel,哪个性能好?为什么?哪个占用的内存少?为什么?

6.AFNetworking是否支持ipv6? 7.项目采用64位,为什么要用64位?怎么修改成64位?i386是什么?他们有什么关系?

8.iOS的应用程序有几种状态?追问,退到后台代码是否可以执行?双击home键,代码是否可以执行?

9.一般使用的图标内存为多大?比如200×300的图片,内存应该占用多少比较合理?

10.说说你对内存泄漏的看法,追问,block为什么容易引起内存泄漏?

11.[object copy]是浅拷贝还是深拷贝?为什么是浅拷贝?copy是实现了哪个协议? 是浅拷贝,地址不变。

浅复制:不拷贝对象本身,仅仅是拷贝指向对象的指针. 深复制:是直接拷贝整个对象内存到另一块内存中. 一般来说像这种使用‘=’号赋值的对象,基本上都是浅复制. 内存地址一样的-->浅复制 copy:修改源对象或者副本的属性及行为,不影响副本或源对象。 对nsstring mutableCopy, 内容不变,地址变了。

12.Images.xcassets和直接用图片有什么不一样?

一、首先一点:用法和原来一样,用[UIImage imageNamed:]来加载图片; 而且图片更换名字的时候不用再代码中更换图片名字。比如说,在images.xcassets中开始有一张名为aaaa.png的图片,[UIImage imageNamed:@"aaaa"] 然后在images.xcassets中把这张图替换为bbbb.png的图片,代码是不用改的。 二、不用再为多像素的图片命名。mages.xcassets会自动的排列不同像素的图片。 三、可以轻松的生产出不同像素的图片,这就需要xcode的一个插件,mages.xcassets RTImageAssets插件的简介:本项目是一个Xcode插件,用来生成@3x的图片资源对应的@2x和@1x 版本,只要拖拽高清图到 @3x 的位置上,然后按Ctrl+Shift+A即可自动生成两张低清的补全空位。当然你也可以从@2x 的图生成@3x 版本,如果你对图片质量要求不高的话。另外给大家推荐一个多像素图片生产工具:Prepo,这是一款免费的使用工具。 四、一个重要的改变:图片是被放到Images.xcassets里面 1.app支持版本在>=iOS7的时候,打包的资源包中的图片会被放到Assets.car.图片有被压缩;此时若用[[NSBundle MainBundle] pathForResource: ofType: ]来访问时访问不到的。同时你也无法像平常一样轻易的拿到被人的图片资源了。 2.app支持版本在

上周刚出炉的汽车之家面试题

对大量数据列表有什么优化方案?

内存优化,开启tableviewcell的重用机制在tableview的heightforrow函数中不要在调用cellforrow方法,应该把之前计算到的行高缓存起来,避免cellforrow被调用很多次

对加载的数据进行存储,将加载过的数据存储到数据库中,及时清空内存中的数据

进行分页处理,异步加载更多数据 如何检查app的内存和CPU的使用情况?检查有问题的时候如何处理?

使用analyze检查代码有无内存泄露的可能产生

使用leaks检查程序是否有内存泄露产生

Xcode的instrument可以检测到app在运行时候的内存消耗,当内存占用量过大的时候即使释放掉不用的对象 app上有一数据列表,客户端和服务器都没有缓存服务器有数据更新的时候在wifi下能刷新到数据在4G下刷新不到数据,请分析可能产生的原因?

用户禁止了该app使用蜂窝移动数据

代码中可能为了省流量,对网络类型做了判断,只在wifi状态下发送请求

当前维护app的崩溃率是多少?怎么最终并解决的?如何解决线上的闪退

我们努力把崩溃率控制在5/1000 一下 ,使用plcrashreport第三方框架统计用户崩溃日志 什么是事件响应链,当用户和手机屏幕触摸的时候都发生了什么?事件是如何传递的。

发生触摸事件后系统将触摸事件加入UIApplication管理的事件队列中,

UIApplication会从事件队列中取出最前面的事件在将事件发送出去,通常会发给keywindow

主窗口会在视图层次结构中找到最合适的视图来处理触摸事件

找到合适的视图控件后,就会调用视图控件的touches方法来作事件的具体处理:touchesBegin... touchesMoved...touchesEnded等

会顺着响应者链条往子控件传递 UIView不能接收触摸事件情况有哪些:

1.不接受用户交互:userInteractionEnabled = NO;

2.隐藏:hidden = YES;

3.透明:alpha = 0.0~0.01 如何找到最合适的控件来处理事件呢?有什么原则?

自己是否能接受触摸事件

触摸点是否在自己身上

从后往前遍历子控件,重复上面的两个步骤

如果没有符合条件的子控件,那么自己最适合处理 runloop是什么?,使用runloop的目的是什么?使用runloop要注意什么?何时使用?

阿里iOS面试初体验:

本人毕业之后,一直从事的是java开发,外包公司到国美,再到京东。当时在国美的时候,还在做java。当时移动开发正火,经不住诱惑,放弃了java,在家自学一个月的iOS开发,那段时间,真是一个月没出家门。一个月之后感觉时机成熟,出去面试。

好好的把简历修饰了一翻,就开始投简历。当时收到阿里文娱的面试邀请,很是意外,也很是担心,因为我从没有经验变成了二年开发经验。(声明一下,在此我并不是让大家伪造工作经验)

当时共经历了四轮面试,最开始是电话面试 -> 一轮面聊 -> 二轮面聊 ->人事面试

电话面试比较简单大概是这些问题 :

Object-c中copy和mutableCopy 区别

ViewController之间怎么传值

内存管理原则,MRC 和 ARC

应用的启动过程

推送原理(本地推送和远程推送)

定位 一轮面聊,问题大概是这些:

当画了一个图,就是subview有一部分view飘出来了,问点击飘出来的部分能不能响应点击事件?

xcode中怎么给系统方法打断点

xcode签名原理

怎么将符号转换成代码

字典模型的转换。引出MJExtension框架,问了MJExtension的原理,以前使用过程中有没有bug(我猜他在使用过程中发现了MJExtension 框架中的bug所以才这么问)

1.面试上百个求职者后的感受: https://pan.baidu.com/s/1i4BeY5R

2.支付宝生活圈开发:https://pan.baidu.com/s/1qYx9J5M

3.融云即时通讯讲解:https://pan.baidu.com/s/1c1FsZOs

4.微信朋友圈开发:https://pan.baidu.com/s/1qYJo7UW

5.Runtime精讲:https://pan.baidu.com/s/1i505T2l

6.MJ浅谈逆向:https://pan.baidu.com/s/1miBVipq

7.带你玩转Github:https://pan.baidu.com/s/1i5tKt85

8.求职心态篇:https://pan.baidu.com/s/1eSEjopO

我朋友未回答 NSRunLoop是IOS消息机制的处理模式

NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。

NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)异步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知,corefunction向线程添加runloop observers来监听事件,意在监听事件发生时来做处理。

runloopmode是一个集合,包括监听:事件源,定时器,以及需通知的runloop observers runloop与线程的关系?

只有在为你的程序创建次线程的时候,才需要运行run loop。对于程序的主线程而言,run loop是关键部分。Cocoa提供了运行主线程run loop的代码同时也会自动运行run loop。IOS程序UIApplication中的run方法在程序正常启动的时候就会启动run loop。如果你使用xcode提供的模板创建的程序,那你永远不需要自己去启动run loop

在多线程中,你需要判断是否需要run loop。如果需要run loop,那么你要负责配置run loop并启动。你不需要在任何情况下都去启动run loop。比如,你使用线程去处理一个预先定义好的耗时极长的任务时,你就可以毋毋需启动run loop。Run loop只在你要和线程有交互时才需要 进程和线程的区别?

一个应用程序有且只有一个进程,一个进程有1个和多个线程 线程生命周期

当我们创建一个线程实例对象的时候,这个线程是创建状态

当调用了start的方法的时候,线程被启动,此时进入就绪状态,等待CUP来执行

获取CPU的资源正在执行,这个时候进入运行状态

当线程执行完毕,或者被其他线程杀死的时候这个时候线程进入死亡状态,死亡状态的线程不可能在进入等待执行的就绪状态

由于某些原因,线程需要暂停自己,让出CPU的资源,这个时候线程进入阻塞状态

淘宝-P6

1.查找字符串算法

2数组匹配算法

3.代码文件编译生成过程,编译和链接有什么区别,链接做了什么事情

4.用C语言实现一个通知流程

5.A B 线程执行到一半去执行C线程,用OC和C各自怎么实现。

6.用过GCD什么方法 7对什么技术比较感兴趣

8.tableview怎么优化,优化后还是感觉卡怎么办

9.怎么定位到野指针的地方。如果还没定位到,这个对象被提前释放了,怎么知道该对象在什么地方释放的

10.ARC的实现原理,什么情况下用MRC比ARC好

11.懂视频技术吗

12.16进制的FF + 2后 等于什么 有哪几种情况?

1.介绍下内存的几大区域?

2.你是如何组件化解耦的?

3.runtime如何通过selector找到对应的IMP地址

4.runloop内部实现逻辑?

5.你理解的多线程?

6.GCD执行原理?

7.怎么防止别人动态在你程序生成代码

8.YYAsyncLayer如何异步绘制?

9.优化你是从哪几方面着手?

OC 使用.a静态库 swift使用 frameworks 动态库

各大互联网公司招聘官网
阿里招聘:https://job.alibaba.com 腾讯招聘:http://hr.tencent.com 百度招聘:http://talent.baidu.com 京东招聘:http://zhaopin.jd.com 小米招聘:http://hr.xiaomi.com 乐视招聘:http://job.letv.com 网易招聘:http://hr.163.com 唯品会招聘:http://job.vip.com 携程招聘:http://job.ctrip.com 360招聘:http://hr.360.cn

二轮面聊:

问的技术方向并不多,主要是https原理,这个问的相当细,包括单向双向认证。其它的就是扯别的啦。

整体感觉面试官人相当不错,详细的介绍了团队情况公司文化 人事面试,问的问题如下:

这里重点说一下人事面试,阿里的人事权力真的很大,哪怕是前面的技术面试全部通过,她也有一票否决权。而且阿里人事处处设陷阱,应该被她发现了我的简历有假的成份。面了没有多长时间让我回去等消息,过了几天收到了拒绝邮件!

今日更新阿里三面面试题参考答案,需要的留意下

1.dSYM你是如何分析的?

2.多线程有哪几种?你更倾向于哪一种?

3.单例弊端?

4.如何把异步线程转换成同步任务进行单元测试?

5.介绍下App启动的完成过程?

6.比如App启动过慢,你可能想到的因素有哪些?

7.0x8badf00d表示是什么?

8.怎么防止反编译?

9.说说你遇到到的技术难点?

10.说说你了解的第三方原理或底层知识?

1.Nsstring占用多少内存?

2.SD最大支持多少个下载数?

3.yykit如何异步渲染?

4.runtime动态创建一个类,需要注意什么?

5.runloop和线程有和关系?

6.你平时做过什么有技术难点的东西,然后解决难点

7.你是如何学习iOS,看什么网站,列举几个国外的学习网站?

8.技术架构如何搭建?

9.还有一个很长字符串,你用什么算法搜索到abc的位置?

10.字符串如何预处理?

11.https和ssl在握手方向有什么区别?

12.还有,你平时很忙,怎么学习和积累技术

13.怎么防止别人动态在你程序生成代码

14.怎么防止反编译

1, 查找字符串算法

2,数组匹配算法

3,代码文件编译生成过程,编译和链接有什么区别,链接做了什么事情

4,用C语言实现一个通知流程

5,A B 线程执行到一半去执行C线程,用OC和C各自怎么实现。

6,用过GCD什么方法

7,对什么技术比较感兴趣

8,tableview怎么优化,优化后还是感觉卡怎么办

9,怎么定位到野指针的地方。如果还没定位到,这个对象被提前释放了,怎么知道该对象在什么地方释放的

10,ARC的实现原理,什么情况下用MRC比ARC好

11,懂视频技术吗

12,16进制的FF + 2后 等于什么 有哪几种情况

**p6 - 淘宝 - 二面 **

1,我说我做过一个C的日志库,他说怎么优化你的日志库性能,上传到后台怎么实现断点续传,断点续传的代码实现

2,怎么找野指针,已经发布的app包怎么定位到野指针,野指针的堆栈内存是怎么样的

3,类的内存结构有哪些

4,app启动流程慢了,怎么判断哪个地方比较慢,让你做个工具类去监听启动流程哪段程序比较慢你这么做,讲出你代码的实现步骤

5,ios崩溃的情况有哪些?selector异常奔溃流程,怎么防止奔溃

iOS阿里三面参考答案:http://url.cn/5lCGZQE

iOS学习视频链接:http://url.cn/5BbKBkX

【链接】<精华篇>:iOS葵花宝典4.0版(专人更新) http://www.jianshu.com/p/5dddc0e643ec

阿里-p6-一面

1.介绍下内存的几大区域?

2.你是如何组件化解耦的?

3.runtime如何通过selector找到对应的IMP地址

4.runloop内部实现逻辑?

5.你理解的多线程?

6.GCD执行原理?

7.怎么防止别人反编译你的app?

8.YYAsyncLayer如何异步绘制?

9.优化你是从哪几方面着手?

参考答案地址(学习视频等资源也在公众号内): http://url.cn/5YAhbxs

阿里招聘:https://job.alibaba.com 腾讯招聘:http://hr.tencent.com 百度招聘:http://talent.baidu.com 京东招聘:http://zhaopin.jd.com 乐视招聘:http://job.letv.com 网易招聘:http://hr.163.com 唯品会招聘:http://job.vip.com 携程招聘:http://job.ctrip.com 360招聘:http://hr.360.cn 滴滴出行:http://job.didichuxing.com/ 爱奇艺:http://zhaopin.iqiyi.com/job-school.html 快手:https://www.kuaishou.com/joinus.html 今日头条:https://job.toutiao.com/ 当当网:http://zhaopin.dangdang.com/ 聚美优品:http://www.jumei.com/about/hiring 美团:http://zhaopin.meituan.com/ 去哪儿:http://qunar.zhiye.com/ 陌陌:http://www.immomo.com/ 新浪:http://career.sina.com.cn/welcome.html

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

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

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

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

5.block本质是什么?

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

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

OC的协议里面只能有方法的申明,不能有方法的实现

每一个selector对应一个IMP指针

福利较好互联网公司名单:http://url.cn/5OaBa0w (安卓/PHP/H5会最近更新到该公众号,仅做学习使用)

https://developer.apple.com/app-store/review/guidelines/cn/ 苹果审核条款官网

控制器动态加载

对号入座,方便线下交流、聚会、跳槽内推! 对不上地区的直接加,请不要重复申请! 以下均5000人群!

全国iOS群:2466454 北京iOS开发群:567907994
上海iOS开发群:679742571 广州iOS开发群:681144583 深圳iOS开发群:490783419 杭州iOS开发群:415613181 合肥iOS开发群:679751290

扯淡、斗图放松专区: iOS开发闲聊群:628596529

1.使用了第三方库, 有看他们是怎么实现的吗? 2.强连通量算法了解嘛? 3.遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些? 4.M、V、C相互通讯规则你知道的有哪些? 5.NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?

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

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

https://developer.apple.com/download/more/

**阿里二面: **

1. 怎么判断某个cell是否显示在屏幕上 2. 进程和线程的区别 3. TCP与UDP区别

TCP:Transfer Control Protocol,传输控制协议.面向连接的、可靠的并且是精确控制的协议,主要是用在那些实时性不强、但要求不能出错的应用. UDP:User Datagram Protocol,用户数据报协议。这是一个不可靠的传输协议。因为它不排序所要发送的数据段、不关心这些数据段到达目的方的顺序(所以它才不可靠),所以它在网络的开销要比TCP小很多。因此UDP适合用在那些实时性强、允许出错的场合。

  1. TCP流量控制

滑动窗口机制

  1. 数组和链表的区别

从逻辑结构来看 1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。 2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素 从内存存储来看 1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小 2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦 从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。 链表是动态进行存储分配,不连续。数组是固定好数组长度,存储空间是静态连续的。

  1. UIView生命周期
  2. 如果页面 A 跳转到 页面 B,A 的viewDidDisappear方法和 B 的viewDidAppear方法哪个先调用?
  3. block循环引用问题
  4. ARC的本质
  5. RunLoop的基本概念,它是怎么休眠的?
  6. Autoreleasepool什么时候释放,在什么场景下使用?
  7. 如何找到字符串中第一个不重复的字符
  8. 哈希表如何处理冲突

今日更新,阿里二面以及参考答案; 此后群内会陆续更新iOS BAT最新面试题; 包括滴滴、京东、今日头条、陆金所、携程等!

包括北京、上海、广州、深圳等全国各大城市iOS最新行情,靠实际行动、用数据说话!

敬请期待~

  1. 怎么判断某个cell是否显示在屏幕上 答案以这个为参考 http://www.cocoachina.com/bbs/read.php?tid=48777

饿了么面试题: 你了解哪些iOS底层知识 * automic一定是线程安全的吗

atomic所说的线程安全只是保证了getter和setter存取方法的线程安全,并不能保证整个对象是线程安全的。

  • iOS中的消息传递是怎么一步一步实现的

  • category和extension有什么区别

  • iOS中的私有属性如何设置

  • 串行队列和同步锁两者在保护线程安全上的性能对比

  • 并行队列是同时执行的吗

  • iOS中有哪些锁,你了解多少

  • iOS中UIKit框架的架构

  • UIView和CALayer之间的关系

  • UIView、CoreAnimation和CoreGraphics的关系

  • 应该知道SegmentFault,这个在iOS中是什么错误,那StackOverFlow呢

  • GCD、NSThread、NSOperation性能上有何区别

1.Nsstring占用多少内存? 2.SD最大支持多少个下载数? 3.yykit如何异步渲染? 4.runtime动态创建一个类,需要注意什么? 5.runloop和线程有和关系? 6.你平时做过什么有技术难点的东西,然后解决难点 7.你是如何学习iOS,看什么网站,列举几个国外的学习网站? 8.技术架构如何搭建? 9.还有一个很长字符串,你用什么算法搜索到abc的位置? 10.字符串如何预处理? 11.https和ssl在握手方向有什么区别? 12.还有,你平时很忙,怎么学习和积累技术 13.怎么防止别人动态在你程序生成代码 14.怎么防止反编译

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

2.SDWebImage图片处理原理?

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

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

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

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

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

笔试面试题 现场实拍:http://www.jianshu.com/p/f5a30acef5f0

**技术笔试题: **

1、 改变view的frame,layer的frame是否会变化?改变layer.frame,view的frame是否会变化?请问原因是什么?

2、 autoreleasepool的释放时机是什么,什么时候需要自己声明一个autoreleasepool。

3、 nsdictionry底层的数据结构是什么,根据key找到value的时间复杂度是多少?

4、 求一个整数数组中和最大的连续子数组,例如:[1, 2, -4, 4, 10, -3, 4, -5, 1]的最大连续子数组是[4, 10, -3, 4](需写明思路,并编程实现)。

5、 请简述在iOS项目中遇到的最大的技术问题是什么,如何解决的? 选做题(可四选一): 1、 请实现一个完善内存的图片缓存工具,key为url,value为uimage。缓存最大可容纳100张图片,并有淘汰机制。(需编程实现) 2、 请用效率最高的方式绘制不同颜色的10w个的三角形(需编程实现) 3、 请用完善的代码实现异步并发读写文件的接口函数(需编程实现) 4、 请实现视频添加滤镜的功能,其中视频含音频(需编程实现)

文中的所有题目都会分享在我的iOS交流群里,外加每天都会整理一道两道面试题,然后发布在群公告上,感兴趣的小伙伴赶紧一起加入吧,不想当咸鱼,想要换工作,还在犹豫什么,进群 === 大厂offer。
iOS开发交流群:761407670,群文件直接获取面试资料
——点击加入:iOS开发交流群

你可能感兴趣的:(iOS开发——BAT网易笔试&面试题&参考答案)