程序员用烂了却一直在用的经典面试题合集(续写)

前面晓媛给大家分享过一些经典面试题,并且承诺会更新

今天终于更新出来啦啦啦

(一)面试题

题一:

OC项目里怎么混编入Swift文件?

 不管是混编还是用RN、Weex之类的混合开发模式都建议从小模块与主业务不太相关或耦合性,改动性影响度不大的地方入手。

这里我就说OC项目里混编Swift的做法吧,毕竟这个要实用一点Swift混编OC的暂不考虑,如果用了Swift写项目了,应该坚持全用Swift不应该来混编OC,当然一些三方倒是可以的。

一、 当我们创建一个Swift文件时,会自动有个创建桥接文件的提示,创建就行。

二、OC怎么访问Swift类。

Swift类放在一个 : 工程名-Swift.h的文件里,这个文件是自动生成的,不用手动创建,想在哪里访问Swift类就在哪里导入即可,当然暴力的做法是将这个文件导入到OC的pch文件里。

三、Swift怎么访问OC类。

把Swift想要访问到的类放在第一步创建Swfit自动生成的桥接文件里就行。

以上只是基于之前混编时的经验来说,更加详细的请参阅苹果官方文档说明

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

题二:

单元测试、集成测试、系统测试的侧重点是什么?

       单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。

系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。

(二)面试题

一、怎么解决iOS打包成功之后,运行在iPhone上会闪退,黑屏的问题?

关于打包之后无法安装,或者安装之后闪退的情况。

有两种情况:

1.证书错误.

2.另一种就是当前的设备并不在开发者对应的账号里面。


   怎么检测当前的设备是否在开发者的证书里呢,如果你有开发者账号,直接登录app即可获得。但是没有开发者账号的情况我们该怎么办?

以下面的ipa包为例,必须是hoc或者dev的包 

ipa其实就是一个压缩文件,可以对齐解压。得到一个payload文件夹。 

解压后,点击进入文件夹,然后显示包内容,可以看到里面的文件列表

(三)面试题

题一

对于设计聚合SDK你有什么解决方案吗?

例如:SharedSDK?Ping++?

SharedSDK:聚合分享SDK

Ping++:聚合支付SDK

聚合地图SDK、动态切换地图,快速切换, 分析实现

第一步:

所有的地图特点:

百度地图:MapView->爸爸->UIView,

高德地图:MapView->爸爸->UIView

而且:相同特点(共性问题), 不同特点(差异问题)

优先解决共性问题,然后解决差异问题

相同点:地图类型、地图坐标、地图模式等…

不同点:细节(例如:类封装方式,结构)

Google地图类似

 第二步:定义地图标准(统一标准)

定义协议(所有的地图都会遵循)->IMapView

第三步:实现具体地图

实现百度地图、高德地图、Google地图、客户端使用的是抽象(协议),而不是使用的具体类

注意:所有的地图都是独立,删除任意一个地图,对于整个聚合SDK没有任何影响

实现类:BaiduMapView、GaodeMapView

第四步:接触代码耦合问题

如果只是当前代码,是不够的

工厂模式->简单工厂、工厂方法、抽象工厂

目前:工厂方法模式

第五步:分析问题地图创建对象问题

工厂方法模式规范

分析角色、4个角色,

角色一:抽象工厂->IMapFactory(地图工厂)

只有一条流水线->专门生产地图MapView

角色二:具体工厂->BaiduMapFactory、GaodeMapFactory

角色三:抽象产品->IMapView

角色四:具体产品->BaiduMapView、GaodeMapView

目前需求:只有一个模块->基本地图显示

工厂方法模式:核心只有一个产品抽象

第六步:总结

发现还是有问题,在开发中,使用多个模块、多条流水线->抽象工厂模式解决

针对:多个产品抽象

角色划分

角色一:抽象工厂->IMapFactory

角色二:具体工厂->BaiduMapFactory、GaodeMapFactory

角色三:抽象产品A->IMapView

角色四:抽象产品B->IMapLocation

角色五:具体产品A1->BaiduMapView

角色六:具体产品A2->GaodeMapView

角色五:具体产品B1->BaiduMapLocation

角色六:具体产品B2->GaodeMapLocation

第七步:实现抽象工厂

第八步:聚合SDK

(四)面试题

简单工厂模式实现(地图引擎)->创建工厂

问题1

了解过iOS中的黑魔法吗? 请解释下

在没有一个类实现源码的情况下,想改变其中一个方法的实现,除了继承它重写和借助类别重名方法暴力抢先之处,还有更加灵活的方法Method Swizle ,类似逆向里面里的hook,挂钩,钩子的概念。

Method swizzling 指的是改变一个已存在的选择器对应的实现的过程。OC中方法的调用能够在运行时通过改变一一通过改变类的调度表 dispatch table 中选择器到最终函数间的映射关系。

在OC中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用OC的动态特性,可以实现在运行时偷换selector对应的方法实现。

每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似 函数指针,指向具体的Method实现。

我们可以利用mehod_exchangelmplementations来交换两个方法中的IMP

我们可以利用class_replaceMethod来修改类

我们可以利用method_setImplementation来直接设置某个方法的IMP

归根到底,都是偷换了selector的IMP。

问题2

objc中向一个nil对象发送消息将会发生什么?

在 Objective-C 中向 nil 发送消息是完全有效的——只是在运行时不会有任何作用:

如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)。例如:

Person * motherInlaw = [[aPerson spouse] mother];

如果 spouse 对象为 nil,那么发送给 nil 的消息 mother 也将返回 nil。 2. 如果方法返回值为指针类型,其指针大小为小于或者等于sizeof(void*),float,double,long double 或者 long long 的整型标量,发送给 nil 的消息将返回0。 2. 如果方法返回值为结构体,发送给 nil 的消息将返回0。结构体中各个字段的值将都是0。 2. 如果方法的返回值不是上述提到的几种情况,那么发送给 nil 的消息的返回值将是未定义的。

具体原因如下:

objc是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend(receiver, selector)。

那么,为了方便理解这个内容,还是贴一个objc的源代码:

// runtime.h(类在runtime中的定义)

// 

http://weibo.com/luohanchenyilong/

// https://github.com/ChenYilong

struct objc_class {

  Class isa OBJC_ISA_AVAILABILITY; //isa指针指向Meta Class,因为Objc的类的本身也是一个Object,为了处理这个关系,runtime就创造了Meta Class,当给类发送[NSObject alloc]这样消息时,实际上是把这个消息发给了Class Object

  #if !__OBJC2__

  Class super_class OBJC2_UNAVAILABLE; // 父类

  const char *name OBJC2_UNAVAILABLE; // 类名

  long version OBJC2_UNAVAILABLE; // 类的版本信息,默认为0

  long info OBJC2_UNAVAILABLE; // 类信息,供运行期使用的一些位标识

  long instance_size OBJC2_UNAVAILABLE; // 该类的实例变量大小

  struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; // 该类的成员变量链表

  struct objc_method_list **methodLists OBJC2_UNAVAILABLE; // 方法定义的链表

struct objc_cache *cache OBJC2_UNAVAILABLE; // 方法缓存,对象接到一个消息会根据isa指针查找消息对象,这时会在method Lists中遍历,如果cache了,常用的方法调用时就能够提高调用的效率。

  struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; // 协议链表

  #endif

  } OBJC2_UNAVAILABLE;

 objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。 那么,回到本题,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。

今天的是面试题就分享到这里,文章会不定时更新的,敬请期待!

作者:程晓媛闯天涯

我是晓媛,喜欢记得关注我哦!

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,678评论 0 9
  • 转载:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麦子阅读 727评论 0 2
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 744评论 0 1
  • ps:积少成多,积善成德 引言 曾经的我并不知道运行时这东西,因为那个时候开发并不是经常用到这东西,我相信很多初出...
    暴走的荷尔蒙阅读 348评论 0 0
  • 宠主带阿拉出门遛弯,阿拉半路狂奔,结果弄了一身泥沙。回到家里,宠主只好放水亲自给阿拉洗澡。好在自家阿拉向来很配合,...
    萌宠小马甲阅读 293评论 0 0