高级面试题

ISA

每一个对象内部都一个isa指针,对象的指针就指向他的真实类型,根据这个指针找到这个类

图片裁剪:

Core Graphics裁截三角形、矩形、圆形、以及这些图形,需创建画布,(自定义一个类继承自UIView,并重写子类的drawRect方法。)在这个方法中绘制图形。确定图形边框(path, drawRect)(Core Graphics其实是一套基于C的API框架,使用了Quartz作为绘图引擎)

coreAnimation:

CoreAnimation的动画执行过程都是在后台操作的,不会阻塞主线程。

继承结构:动画组,转场动画,基本动画,帧动画。

核心动画给我们展示的只是一个假象,layer的的frameboundsposition并不会在动画完毕之后发生改变。

•UIView封装的动画,会使会真实修改view的一些属性。

http://www.jianshu.com/p/ee2d3a8b2d67

autolayout:

做UI适配,不用考虑坐标

类和类扩展的区别(category,extension):

类只能扩充方法,类扩展能扩充属性和方法

socket:是一个网络传输协议,大文本传输只能用socket

框架AsyncSocket异步

TCP:传输协议,长链接。传输速度慢,不容易丢包,常用于聊天

UDP:传输协议,长链及。传输速度快,容易丢包,常用于网络游戏,局域网游戏

Http:超文本传输协议,短链接

客户端缓存机制:

缓存可以分为:内存数据缓存(先把数据放到内存中,程序退出,数据没有),数据库缓存,文件缓存

每次想获取数据的时候,先检测内存中有没有缓存数据,在检测本地有无缓存(数据库/文件),没有发送网络数据,将服务器返回的数据缓存

CoreData

1.coreData是SQLite的封装coreData是苹果自带的数据存储,sql语句是自己生成的,性能不好,会生成不必要的sql语句

2.NsManagedObject:实体对象(一个类对应一张表,一个对象对应表中的一条记录)

NSpersistentStoreCoordinator存储器,决定你的数据存储在什么地方

NSManagedObjectContext操作数据库(是个单例)

客户端安全性处理:

1.网络数据传输(登录的例子,加密,标示符)

敏感数据不能用明文发送

2.本地数据存储(加密)

3.源代码(混淆:把源代码搞乱)

手动混淆:类名,方法名等

工具混淆:

图片下载:

异步下载,多线程断点下载

AFNASI区别:

都是http请求框架

1.性能ASI最强,停止更新了,基于底层CFNetwork,AFN基于NSURL

2.AFN采取Block处理请求,ASI使用delegate

3.AFN服务器返回JSON,XML格式数据,ASI返回二进制

Run loop

1.每个线程都有runloop,主线程会自行创建并运run loop

2.Run loop处理事件有两种不同来源:input source输入源,timer source定时源

3.输入源传递异步消息,通常处理来自于其他线程或程序。定时源传递同步消息,处理UI界面的刷新,UI拖动,用户点击事件等

某一处卡顿解决

1.检查网络请求操作是否被放在主线程中;

2.看异步请求数量是否太多(子线程数量)

3.数据量是否太大(先清除看不见的数据,图片)

4.手机CPU使用率和内存问题

多线程实现,多线程安全控制

1.只在主线程刷新UI

2.防止资源抢夺

3.如果异步操作要保证线程安全等问题,尽量使用GCD(有些函数默认是安全的)

异步线程下载很多图片,失败解决:

1.重新下载

2.下载完毕后,利用RunLoop的输入源回到主线程刷新

runtime

基于c语言,是OC的底层,每写一句都会转成runtime,能动态增删修改一个类,一个成员变量,一个方法。

性能优化:

从用户体验出发:1、程序loading不要太长、2、相同数据不做重复获取、3、昂贵资源要重用(cell、sqlite、date),4、良好的编程习惯和程序设计:选择正确的集合对象和算法来进行编程、选择适合的数据存储格式(plist、SQLite)、优化SQLite查询语句5、数据资源方面的优化(缓存和异步加载)

多线程:http://www.jianshu.com/p/0b0d9b1f1f19

1.NSThread:经苹果封装后,完全面向对象。可以直接操控线程,但生命周期需手动管理。它还不够智能,不能优雅地处理多线程中的其他高级概念。

//创建

NSThread*thread = [[NSThreadalloc] initWithTarget:selfselector:@selector(run:) object:nil];

//启动

[thread start];

2.GCD会自动合理利用更多cpu内核,自动管理线程的生命周期(创建,调度任务,销毁),使用的是C语言,使用了大量block。

1).任务:两种执行方式

同步执行和异步执行区别在于会不会阻塞当前线程;

同步:会阻塞当前线程并等待block中任务执行完成,然后继续往下运行;

异步:线程之间不影响;

2).队列:

串行:先进先出,一个一个执行;

并行:开很多线程,一起执行,但任务过多,也不会让所有的人物同时执行。

3.NSOperation和NSOperationQueue:NSOperation是苹果对GCD的封装,完全面向对象。操作步骤:

1).将要执行的任务封装到一个NSOperation对象中。

2).将此任务添加到一个NSPOrerationgQueue对象中。

TCPUDP

1.TCP工作原理

TCP的连接建立过程又称为TCP三次握手:

首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;

接收方主机在收到这个请求后向发送方主机回复一个同步/确认(SYN/ACK)应答;

发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立.

一旦初始的三次握手完成,在发送和接收主机之间将按顺序发送和确认段。关闭连接之前,TCP使用类似的握手过程验证两个主机是否都完成发送和接收全部数据。

完成三次握手,客户端与服务器开始传送数据。

TCP工作过程比较复杂,包括的内容如下:

TCP连接关闭:发送方主机和目的主机建立TCP连接并完成数据传输后,会发送一个将结束标记置1的数据包,以关闭这个TCP连接,并同时释放该连接占用的缓冲区空间。

TCP重置:TCP允许在传输的过程中突然中断连接。

TCP数据排序和确认*:在传输的过程中使用序列号和确认号来跟踪数据的接收情况。

TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。

TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。

TCP数据保护(校验):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。

autorelease的对象何时被释放:

如果了解一点点Run Loop的知道,应该了解到:Run Loop在每个事件循环结束后会去自动释放池将所有自动释放对象的引用计数减一,若引用计数变成了0,则会将对象真正销毁掉,回收内存。

所以,autorelease的对象是在每个事件循环结束后,自动释放池才会对所有自动释放的对象的引用计数减一,若引用计数变成了0,则释放对象,回收内存。因此,若想要早一点释放掉auto release对象,那么我们可以在对象外加一个自动释放池。比如,在循环处理数据时,临时变量要快速释放,就应该采用这种方式:

for(inti=0;i<10000000;++i){

@autoreleasepool{

HYBTestModel*tempModel=[[HYBTestModelalloc]init];

//临时处理

// ...

}//出了这里,就会去遍历该自动释放池了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,014评论 11 349
  • iOS面试题目100道 1.线程和进程的区别。 进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,...
    有度YouDo阅读 29,763评论 8 137
  • 我就是魏蓓蓓阅读 189评论 0 0
  • 雨后,晕开几缕浮云 浅浅弥漫水汽氤氲 心情 被叶落占据 旋转 纷飞 零散了一地光晕 闭眼 倾听 风得到阳光的应允 ...
    乁乁阅读 288评论 0 1