那些用烂了却一直在用的经典面试题,你知道吗?
啊,不知道啊
那我来给你说说,文章有点长,要耐心看完啊!
(一)面试题:
如图: 在这个MVC经典的架构中说说有哪些常用的设计模式?
2.这个图里面有如下所标志的设计模式.
设计模式是为了解耦而存在的.
1.通知跟kvo都是属于观察者模式, 观察者模式和代理模式就不多解释了.
2.target-action在Controller和view之间,使用的就是命令模式, 一般开发
中也常称为target-action模式. 在iOS中NSInvcation也使用了一种典型的命令模式.
3.MVC中,图上面Model和View是没有关联的, 他们之间的传递由Controller来完成, 其实Controller在这里起到的作用相当于是一个中介者. MVC也是一种简单的中介者模式.
4.策略模式,一般用在解决if else和switch-case中的繁琐逻辑. 可以根据算法分离出不同的类,作为策略. 可以起到解耦合的作用
在开发里面, 同一种搜索, 不同的显示效果. 这种tableView的显示就是典型的策略模式的使用
(二)面试题:白盒测试和黑盒测试的区别?
白盒测试
白盒测试(也被称为玻璃盒测试,透明盒子测试与结构测试,可以看见源代码)测试内部结构或者程序的工作。而不是对用户暴露功能。在白盒测试中,内部系统是可见的,包括编写的代码细节。
白盒测试包括:
API测试 : 应用程序接口
代码覆盖: 创建测试来满足一些代码测试覆盖的标准
突变测试方法
静态测试方法
代码覆盖工具可以评估测试的覆盖程度,包括黑盒测试,它们允许软件团队检查系统的各部分以及保证最重要的点被测试了,代码覆盖作为一个测试度量包括如下几方面
函数覆盖:报告了被测试的函数
声明覆盖:报告了完成测试的函数
决策覆盖:分支判断的测试
黑盒测试
黑盒测试对待软件如通一个黑盒,检查的是功能而没有任何关于实现的代码细节,源代码是不可见的。通过输入来得到输出,在判断输出是否符合预期。测试者只知道软件的外在功能。
这种测试方法能够应用与所有水平的软件测试:包括单元测试、集成测试。这是典型应用在High Level的测试。
(三)面试题
前言: 国内对iOS开发这一领域还处在初级阶段,许多开发人才并没有过系统iOS学习,但由于随波逐流的人数多,导致企业一步一步提升门槛,初级开发者过多,初级开发的池塘就只有那么大,导致许多随波逐流的人就面临找不到工作的风险,然后就出现了“iOS开发不行了”的热潮。
由于大多数开发者都是为了工作而且学习,而不是提升了自己去找更好的工作,导致许多随波逐流的开发者走向“失业”、转行这一条路。所以我们应该不是为了工作而去学习,要为了提升自己而去工作、去学习,在这个人挤人的社会,站在“其他人”的前面,想想自己多会一项技能,就能把多少人抛在后面了,就会有坚持下去的动力。
接下来进入今天的主题:面试要点分享
一个objc对象如何进行内存布局?
所有父类的成员变量和自己的成员变量都会存放在该对象所对应的存储空间中
每一个对象内部都有一个isa指针,指向他的类对象,类对象中存放着本对象的
1. 对象方法列表(对象能够接收的消息列表,保存在它所对应的类对象中)
2. 成员变量的列表
3. 属性列表
它内部也有一个isa指针指向元对象(meta class),元对象内部存放的是类方法列表,类对象内部还有一个superclass的指针,指向他的父类对象。
根对象就是NSobject,它的superclass指针指向nil类对象既然称为对象,那它也是一个实例。类对象中也有一个isa指针指向它的元类(metaclass),即类对象是元类的实例。元类内部存放的是类方法列表,根元类的isa指针指向自己,superclass指针指向NSObject类。
(四)面试题
1.CoreFundation框架中的CFRelease函数作用是什么?
A. 让对象的引用计数器减一 B.直接释放指针指向的堆区域数据
答案B
2.CFRelease函数和free函数有什么区别?原因是什么?
答案:在CoreFundation框架中提供的CFRelease函数专门用来释放CoreFundation的结构体指针。CFRelease和free都是释放内存空间。但是
free有可能存在内存泄露,释放不干净。
因为:CoreFundation框架中的结构体内部也许还有指针指向堆区域,如果直接free会导致那部分堆区域无法释放,引起内存泄露。
(五)面试题:
线程和进程的区别?
1. 每个应用程序都会一一对应一个进程,在内存中会占据一块存储空间
PID就是进程ID的. 从上图可以看出每一个程序运行的时候, 在内存中多会对应的进程ID.
2. 进程在执行任务的时候,会开启线程,一条线程就代表一个任务, 进程中可以开启多条线程,所以可以同时执行多个任务
集成测试通常都有那些策略?
1、在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
2、各个子功能组合起来,能否达到预期要求的父功能;
3、一个模块的功能是否会对另一个模块的功能产生不利的影响;
4、全局数据结构是否有问题;
5、单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
好了,文章暂时先到这里,会持续更新,敬请期待!
作者:程晓媛闯天涯
我是晓媛,喜欢记得关注我哦!!!
网友评论