【8】IOS面试题--数据存储
iOS应用测试如何进行数据存储和读取测试

iOS应用测试如何进行数据存储和读取测试在iOS应用开发中,数据存储和读取是非常重要的功能。
为了确保应用在数据操作方面的准确性和稳定性,进行数据存储和读取测试是必不可少的一步。
本文将介绍如何进行iOS应用的数据存储和读取测试,并提供一些测试技巧和注意事项。
一、数据存储测试1. 测试准备在进行数据存储测试之前,需要先准备好测试环境。
在iOS开发中,常用的数据存储方式包括数据库存储(如Core Data、SQLite等)、文件存储(如本地文件、缓存文件等)以及网络存储(如服务器接口等)。
根据应用的实际需求选择适合的存储方式,并搭建好相应的测试环境。
2. 数据存储功能测试针对不同的数据存储方式,需要进行相应的功能测试。
例如,对于数据库存储,可以测试插入数据、更新数据、删除数据等操作;对于文件存储,可以测试文件上传、下载、删除等操作;对于网络存储,可以测试接口调用、参数传递、数据返回等功能。
3. 数据边界测试数据边界测试是指针对数据存储的边界情况进行测试,以确保应用在处理边界数据时能正确处理。
例如,针对数据库存储,可以测试插入超出字段长度限制的数据是否能正确截断或报错;针对文件存储,可以测试文件大小限制和文件路径长度限制等。
4. 并发与竞争条件测试在多线程环境下进行数据存储测试,以模拟实际的并发和竞争条件。
通过同时进行读写操作,测试应用在并发和竞争条件下对数据的处理能力和稳定性。
可以使用多线程测试工具或编写自动化测试脚本来模拟并发和竞争条件。
二、数据读取测试1. 数据读取功能测试数据读取测试是为了验证应用在读取数据时的准确性和稳定性。
可以测试数据的查询、过滤、排序等功能,验证应用能否正确地从数据存储中获取到所需数据。
2. 边界和异常情况测试类似数据存储测试中的数据边界测试,数据读取测试也需要考虑边界和异常情况。
例如,针对数据库查询,可以测试空数据表、空查询结果等情况下应用的处理方式;针对文件读取,可以测试读取不存在的文件或无权限文件等情况。
iOS-底层常见的面试问题

iOS-底层常见的⾯试问题
OC语法相关的⾯试
今天先提出⼀些我们常见的语法⾯试问题。
然后根据这些问题去思考去分析底层的原理,以及为什么这么设计好处是什么呢?
在接下的的博客中我会⼀⼀为⼤家讲解
⼀.对象的本质
⼀个NSObject对象占⽤多少内存?
OC对象的分类?
对象的isa指针指向哪⾥?
OC的类的信息存放在哪⾥?
⼆.KVO
KVO的本质是什么?
如何⼿动触发KVO?
直接修改成员变量会触发KVO么?
三.KVC
通过KVC修改属性会触发KVO么?
KVC的赋值和取值过程是怎样的?原理是什么?
四.Category
Category的使⽤场合是什么?
Category的实现原理?
Category和Class Extension的区别是什么?
Category中有load⽅法吗?load⽅法是什么时候调⽤的?load ⽅法能继承吗?
load、initialize⽅法的区别什么?它们在category中的调⽤的顺序?以及出现继承时他们之间的调⽤过程?
Category能否添加成员变量?如果可以,如何给Category添加成员变量?
五.Block
block的原理是怎样的?本质是什么?
__block的作⽤是什么?有什么使⽤注意点?
block的属性修饰词为什么是copy?使⽤block有哪些使⽤注意?
block在修改NSMutableArray,需不需要添加__block?
有⼏种类型的block?分别是哪些呢?
之后可能会扩展的待补充
六.。
【5】IOS面试题--内存管理.doc

【5】IOS⾯试题--内存管理.doc1 .属性readwrite, readonly, assign, retain, copy, nonatomic, atomic各是什么作⽤,在那种情况下⽤?readwrite是可读可写特性;需要⽣成getter⽅法和setter ⽅法时使⽤readonly是只读特性只会⽣成getter⽅法不会⽣成setter ⽅法;不希望属性在类外改变assign是赋值特性,不涉及引⽤计数,弱引⽤,setter⽅法将传⼊参数赋值给实例变量;仅设置变量时;retain表⽰持有特性,setter⽅法将传⼊参数先保留,再赋值,传⼊参数的retaincount会+1;copy表⽰拷贝特性,setter⽅法将传⼊对象复制⼀份;需要完全⼀份新的变量时。
nonatomic⾮原⼦操作,不加同步,多线程访问可提⾼性能,但是线程不安全的。
决定编译器⽣成的setter getter是否是原⼦操作。
atomic原⼦操作,同步的,表⽰多线程安全,与nonatomic相反2. Difference between shallow copy and deep copy? 浅复制和深复制的区别?浅层复制:只复制指向对象的指针,⽽不复制引⽤对象本⾝。
深层复制:复制引⽤对象本⾝。
意思就是说我有个A对象,复制⼀份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同⼀个内存资源,复制的只不过是⼀个指针,对象本⾝资源。
对于深复制来说,A和A_copy指向的是两个不同的内存资源,他们是两份独⽴对象本⾝。
⽤⽹上⼀哥们通俗的话将就是:浅复制好⽐你和你的影⼦,你完蛋,你的影⼦也完蛋深复制好⽐你和你的克隆⼈,你完蛋,你的克隆⼈还活着。
3. 什么是栈内存(stack) ?什么是堆内存(heap) ? 栈内存:由编译器⾃动分配释放,存放函数的参数值,局部变量的值等。
其操作⽅式类似于数据结构中的栈(先进后出)。
iOS基础问答面试题

iOS基础问答面试题1.When to use NSMutableArray and when to use NSArray?什么时候使用NSMutableArray,什么时候使用NSArray?答案:当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray。
需要指出的是,使用NSArray 只表明的是该数组在运行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。
NSArray是线程安全的,NSMutableArray不是线程安全的,多线程使用到NSMutableArray需要注意。
2.Give us e某ample of what are delegate methods and what are data source methods of uitableview.给出委托方法的实例,并且说出UITableVIew的Data Source方法答案:CocoaTouch框架中用到了大量委托,其中UITableViewDelegate就是委托机制的典型应用,是一个典型的使用委托来实现适配器模式,其中UITableViewDelegate协议是目标,tableview是适配器,实现UITableViewDelegate协议,并将自身设置为talbeview的delegate的对象,是被适配器,一般情况下该对象是UITableViewController。
UITableVIew的Data Source方法有-(NSInteger)tableView:(UITableView 某)tableView numberOfRowsInSection:(NSInteger)section;- (UITableViewCell 某)tableView:(UITableView 某)tableView cellForRowAtInde某Path:(NSInde某Path 某)inde某Path;3.How many autorelease you can create in your application? Is there any limit?在应用中可以创建多少autorelease对象,是否有限制?答案:无4.If we don’t create any autorelease pool in our application then is there any autorelease pool already provided to us?如果我们不创建内存池,是否有内存池提供给我们?答案:界面线程维护着自己的内存池,用户自己创建的数据线程,则需要创建该线程的内存池5.When you will create an autorelease pool in your application?什么时候需要在程序中创建内存池?答案:用户自己创建的数据线程,则需要创建该线程的'内存池6.When retain count increase?什么时候内存计数会增加?答案:见iOS面试题(一)7.What are commonly used NSObject class methods?类NSObject的那些方法经常被使用?答案:NSObject是Objetive-C的基类,其由NSObject类及一系列协议构成。
iOS面试--字节跳动最新iOS开发面试题

iOS⾯试--字节跳动最新iOS开发⾯试题序⾔以下iOS⾯试题仅供参考,毕竟⾯试是不可控的,但懂得越多,⾃然机会越⼤!字节⼀⾯内容:1、⾃我介绍2、介绍⼀下简历中的⼀个项⽬3、⾯向对象的三个要素4、多态?5、 Java,python,OC运⾏效率孰⾼?6、 Property,其中copy如何?7、 Property(nonatomatic, copy) NSMutableArray有什么问题8、 Copy和MutableCopy的区别9、解释下类别,原理10、解释下封装,重载;11、 OC存在多重继承吗?12、了解表视图吗,解释⼀下复⽤原理13、说明⼀下表视图的滑动卡顿的优化⽅法14、viewDidLoad和viewDidAppear的调⽤时机(⼀次和多次的区别);15、页⾯间的传值⽅式有哪些(公有属性,公有⽅法和协议,block传值,通知,extern全局变量传值,NSUserDefault简单数据存储传值);16、通知和delegate的区别?17、通知的发送和接收是否在同⼀线程?18、HTTP和HTTPS区别?19、OC中多线程⼀般有⼏个⽅案?20、了解NSURLConnection和Session吗?21、说⼀下NSURLSession具体的实现原理22、http的头部的⼏个码。
;23、编程题:实现⼀个⼆叉树的倒置。
字节⼆⾯内容:1、⽼虎吃⽺问题。
(博弈论,⽼虎要吃⽺,假设所有⽼虎是理智的,即⾸先为了⽣存,其次为了饱腹,⽼虎吃了⽺后会变成⽺,同样会被其他⽼虎吃掉。
现在,N只⽼虎和1只⽺,请问N为多少时,⽼虎们会吃⽺。
动态规划问题,奇数吃,偶数不吃。
)2、青蛙跳格⼦,斐波拉契数列;青蛙跳格⼦,斐波拉契数列;3、熟悉使⽤什么框架?4、如果让你⾃⼰实现SDWebImage的⼆级存储机制,你如果实现?5、@autorelease{ NSString s;}和NSString s;有什么区别?6、说⼀下你对autorelease的理解。
ios 常见面试题

ios 常见面试题在iOS开发领域中,面试是评估候选人技术能力和知识水平的重要环节。
不同公司的面试题可能会有所不同,但有一些常见的面试题目是必备的。
本文将介绍一些iOS常见的面试题,并提供详细的回答和解析。
一、Objective-C相关问题1. 什么是Objective-C?Objective-C是一种基于C语言的面向对象编程语言,是iOS开发的主要编程语言。
它继承了C语言的特性,并添加了面向对象的能力和语法。
2. Objective-C中的@property关键字有什么作用?@property用于自动生成成员变量的getter和setter方法。
使用@property声明的变量可以直接通过点语法访问和修改。
3. 什么是Category?Category是Objective-C中一种扩展类的机制,可以在不改变原始类的情况下向类添加新的方法。
它可以用于为系统类或者自定义类添加新的功能。
4. 什么是Delegate(代理)模式?Delegate模式是一种设计模式,用于将对象之间的通信和事件处理分离。
通过使用Delegate,可以将一些特定的行为或功能委托给其他对象来实现。
二、iOS开发相关问题1. 什么是UIKit?UIKit是一个iOS开发框架,提供了一系列用于构建用户界面的类和工具。
它是iOS应用程序的核心框架,包括了视图、控制器、动画、手势识别等功能。
2. 什么是UIViewController?UIViewController是iOS开发中用于管理视图和处理用户交互的核心类。
每个屏幕上显示的内容都由一个或多个UIViewController来管理。
3. 什么是Autolayout(自动布局)?Autolayout是一种自动布局系统,用于定义界面元素之间的相对位置和尺寸关系。
它可以适应不同尺寸的设备和不同方向的屏幕,保持界面的稳定性和一致性。
4. 什么是MVC架构?MVC(Model-View-Controller)是一种软件架构模式,用于将应用程序的逻辑分离成三个主要部分:模型、视图和控制器。
iOS面试题及答案

面试题1.Object-c的类可以多继承么?category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承,可以用伪继承和@protocol委托来代替;可以实现多个接口,通过实现多个接口就可以完成C++的多重继承,Category 是类别,一般用分类比较好,用Category去重写类的方法,仅对本Category 有效,不会影响到其他类与原有类的关系。
伪继承必须覆盖两个方法,即methodSignatureForSelector: 和forwardInvocation:。
methodSignatureForSelector:的作用在于为另一个类实现的消息创建一个有效的方法签名。
forwardInvocation:将选择器转发给一个真正实现了该消息的对象.2.类别的作用?继承和类别在实现中有何区别?答:category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
/* 非正式协议:是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法,这样用来实现委托,我们可以使用选择器来判断该非正式协议中是否有这个方法。
正式协议:是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法。
*/3.类别和类扩展的区别?答:1."类别"比"子类"方便多了,因为对已添加category的类,使用到它或者它的子类的地方,category都会起作用;“子类”的话,则需要在使用的每个地方,创建子类对象2."类别"只能添加方法,不能加属性、变量3."类别"一般是对框架提供类的扩展(没有源码,不能修改)4."类别"一般是在不想生成一个新的子类的情况下,比如对NSArray的扩展“扩展”则相当于定义一个子类,在里面添加属性和方法4.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?什么情况使用weak关键字,相比assign有什么不同?答:1> readwrite:同时生成get方法和set方法的声明和实现2> readonly:只生成get方法的声明和实现3> assign:set方法的实现是直接赋值,用于基本数据类型4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)注意点:(nonatomic)非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。
ios面试题及答案2019

ios面试题及答案20191. 什么是iOS?iOS是苹果公司为其移动设备开发的操作系统,包括iPhone、iPad和iPod Touch。
它是一个闭源操作系统,基于Unix,提供了一系列用户界面和应用程序。
2. iOS和Android的主要区别是什么?iOS和Android的主要区别包括:- 开发环境:iOS基于Objective-C和Swift,而Android基于Java和Kotlin。
- 操作系统:iOS是苹果公司的闭源操作系统,而Android是谷歌的开源操作系统。
- 设备兼容性:iOS仅适用于苹果设备,而Android适用于多种设备制造商。
- 应用商店:iOS使用App Store,而Android使用Google Play商店。
3. 什么是Objective-C?Objective-C是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的特性。
它是iOS开发的主要语言之一。
4. Swift语言有哪些特点?Swift是苹果公司开发的一种新的编程语言,用于iOS和macOS应用的开发。
它的特点包括:- 简洁:Swift的语法更简洁,易于阅读和编写。
- 安全:Swift提供了多种安全特性,如自动引用计数和类型安全。
- 性能:Swift的性能接近于C语言,非常适合高性能应用。
5. MVC模式是什么?MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑、数据和用户界面分离。
在iOS开发中,MVC是常用的架构模式。
6. 如何在iOS中实现多线程?在iOS中实现多线程可以通过以下几种方式:- 使用NSThread类创建新线程。
- 使用Grand Central Dispatch(GCD)。
- 使用Operation Queue。
7. 什么是Auto Layout?Auto Layout是iOS开发中用于自动计算和调整视图大小和位置的布局系统。
它允许开发者定义视图之间的约束,系统会根据这些约束自动计算视图的位置和大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 什么是谓词?
答案:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件,完成对数据的筛选。
predicate = [NSPredicatepredicateWithFormat:@"customerID == %d",n];
a = [customers filteredArrayUsingPredicate:predicate];
2. 什么是数据持久化?简单谈一下你所了解的IOS
中的数据持久化的方式。
数据持久化就是将内存中的数据模型转换为存储模型,以及
将存储模型转换为内存中的数据模型的统称.数据模型可以
是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
在IOS中,少量的数据持久化可以使用属性列表、NSUserDefaults、归档等;
大量的数据持久化可以使用SQLite数据库、CoreData等,也可以使用FMDB第三方类库完成。
2. NSUserDefaults?
NSUserDefaults适合存储轻量级的本地数据,以键值对的形式进行存储,只能存储基本的OC对象(不包括自定义的对象)。
NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。
针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。
NSUserDefaults是典型的单例模式。
3. ProtocolList
属性列表,是一种用来存储串行化后的对象的文件。
因为扩展名为plist,因此通常被称为plist文件。
plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,其内容为xml格式。
它可以在程序运行期间动态的创建和读写,因此可以用于少量数据时候的数据持久化。
3. 归档?优缺点?
归档也叫序列化,是将文件存在硬盘,解档是从硬盘还原数据。
归档的形式来保存数据,只能一次性归档保存以及一次性解压。
所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。
除了简单的归档,还可以实现对象的归档。
对象归档是指对象写入文件保存到硬盘上,当再次重写打开程序时,可以还原这些对象。
可以实现对象序列化或者对象持久化。
除了原有的OC对象以外,归档还可以对自定义的对象实现归档,需要注意的是,自定义的归档对象必须要实现NSCoding协议,实现里面的解码和编码的方法。
4. 什么是数据库?使用步骤?特点?
数据库是按照数据结构来组织、存储和管理数据的仓库。
SQLite使用步骤:创建数据库、引入类库、获得沙盒路径、创建或打开数据库
SQLite比较原始,需要通过sql语句来创建表格,对数据进行操作,用起来比较麻烦,但是可控性强。
5. Core Data
Core Data是ios3以后引入的数据库持久化解决方案,是苹果官方推荐的,在使用的过程中不需要写sql语句,可以很方便的将数据存储到数据库中。
正因为不需要要写sql语句,具体的功能已经被封装好了,因此可控性要弱一些。
5. 数据持久化方面用过哪些第三方类库?
FMDB,以OC的方式封装了SQLite的C语言的API。
优点:1. 更加面向对象,省去了很多冗余的C代码;
2. 对比苹果自带的CoreData框架,更加灵活和轻量级;
3. 提供了多线程安全的数据库操作方法,能有效的防止数据混乱。
6. XML可扩展标记语言extensible markup language
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是存储数据。
XML与HTML的设计区别?
XML的核心是数据,其重点是数据的内容。
而HTML被设计用来显示数据,其重点是数据的显示。
XML和HTML语法区别?
HTML的标记不是所有的都需要成对出现,XML则要求所有的标记必须成对出现;
HTML标记不区分大小写,XML则大小敏感,即区分大小写。