iOS面试题-每日十道-第十一天

有误的地方 欢迎高手能给指出

一. 什么是动态绑定

动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法.程序运行的过程中,把函数调用与响应调用所需要的代码想结合的过程为动态绑定

二. 什么是协议?分几层?

通讯协议采用了4层的层级结构,每一层都呼叫一下层所提供的网络来完成自己的需求.这4层分别为:

  • 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远程访问协议(Telnet)等.
  • 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP).用户数据协议(UDP)等.TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被传送
  • 互联网络层: 负责提供基本的数据封包传送功能,让每一块数据包都能够达到目的主机(但不检查是否被正确传送),如网络协议(IP).
  • 网络接口层:对实际的网络媒体管理.定义如何使用实际网络(如Ethernet Serial Line等)来传送数据

三. TCP和UDP的区别?这两包的字节内容有啥不同?

TCP(Transmission Control Protocol,传输控制协议)

TCP是基于链接的协议,也就是说,在正是收发数据前,必须和对方建立可靠的链接.一个TCP链接必须要经过三次"对话"才能建立起来,其中的过程非常复杂,简单介绍:主机A向主机B发出链接请求数据包"我给你发数据,可以吗?"这是第一次对话;主机B🐘主机A发送同意链接和要求同步(同步就是两台主机一个在发送,一个在介绍,协调工作)的数据包:"可以",这是第二次对话;主机A再发出一个数据包确认主机B的要求同步;"我发的 你接着",这是第三次对话. 三次对话的目的是使数据包发送和接受同步,经过三次对话后,主机才向主机B正是发送数据.

UDP(User Data Protocol,用户数据报协议)

UDP是与TCP相对应的协议.它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适合用于一次只传送少量的数据,对可靠性要求不高的应用环境,比如,我们经常使用"ping"命令来测试两台主机之间TCP/IP通信是否正常.其实"ping"命令的原理就想对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

四. 你是否接触过OC中的反射机制?

NSObject常用的方法:
判断一个类是否属于某个类或者是它的子类
- (BOOL)isKindOfClass:(Class)aClass;
判断一个类对象是否为一个类的实例(不包括子类)
- (BOOL)isMemberOfClass:(Class)aClass
Class的反射

  • 根据字符串创建一个类
    Class class = NSClassFromString(@“Student”)
    Student *st= [class alloc]init]
  • 将类名改为字符串
    Class class = [Student class];
    NSString *str = NSStringFromClass(class);

SEL的反射
通过方法的字符串形式实例化方法

 SEL sel = NSSelectorFromString(@“setName:”);
      [st performSelector:sel withObject:@“Mike”];

将方法变成字符串

    NSStringFromSelector(@selector(setName:));

五.C和Obj-c如何混用

  • obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码, 处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp
  • 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是问题
  • 在cpp中混用obj- c其实就是使用obj-c编写的模块是我们想要的。
    如果模块以类实现,那么要按照cpp class的标准写类的定义,头文件中不能出现obj-c的东西,包括#import cocoa的。实现文件中,即类的实现代码中可以使用obj-c的东西,可以import,只是后缀是mm。
    如果模块以函数实现,那么头文件要按 c的格式声明函数,实现文件中,c++函数内部可以用obj-c,但后缀还是mm或m。

总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是 obj-c编译后的o文件,这个东西其实是无差别的,所以可以用。obj-c的编译器支持cpp.

六. 谈谈runtime机制

  • runtime,运行时机制,它是一套C语言库
  • 实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了runtime库里面的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制)
  • 因此,可以说runtime是OC的底层实现,是OC的幕后执行者
  • 有了runtime库,能做什么事情呢?runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等
  • KVO是runtime的一个典型应用

七. AFN 与 ASI 有什么区别

  • AFN基于NSURL,ASI基于底层的CFNetwork框架,因此ASI的性能优于AFN
  • AFN采取block的方式处理请求,ASI最初采取delegate的方式处理请求,后面也增加了block的方式
  • AFN只封装了一些常用功能,满足基本需求,直接忽略了很多扩展功能,比如没有封装同步请求;ASI提供的功能较多,预留了各种接口和工具供开发者自行扩展
  • AFN直接解析服务器返回的JSON、XML等数据,而ASI比较原始,返回的是NSData二进制数据

八. 如果后期需要增加数据库中的字段怎么实现,如果不使用CoreData呢?

编写SQL语句来操作原来表中的字段

  • 增加表字段
    ALTER TABLE 表名 ADD COLUMN 字段名 字段类型;
  • 删除表字段
    ALTER TABLE 表名 DROP COLUMN 字段名;
  • 修改表字段
    ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;

九. 简单描述下客户端的缓存机制

  • 缓存可以分为:内存数据缓存、数据库缓存、文件缓存
  • 每次想获取数据的时候
  • 先检测内存中有无缓存
  • 再检测本地有无缓存(数据库\文件)
  • 最终发送网络请求
  • 将服务器返回的网络数据进行缓存(内存、数据库、文件), 以便下次读取

十. 利用Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket.
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认.

  • 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
  • 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  • 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求

纯手动 有地方是个人理解 有误的地方希望大家能给指出 谢谢
大家面试中遇到的问题 也可以留言分享
如果您喜欢 或者 对您有点帮助 希望点一下喜欢 谢谢了~~

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

推荐阅读更多精彩内容

  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,876评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 1,982评论 0 12
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,318评论 0 35
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,696评论 2 37
  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 1,465评论 0 8