【6】IOS面试题--线程与网络
ios开发工程师面试题.doc

ios开发工程师面试题经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案。
1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?2.#import跟#include又什么区别,@class呢;#import<>跟#import”"又什么区别?3.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?4.id声明的对象有什么特性?5.MVC是什么?有什么特性?为什么在iPhone上被广泛运用?6.对于语句NSString*testObject=[[NSDataalloc]init];testObject在编译时和运行时分别时什么类型的对象?7.什么是平安释放?8.为什么有些4.0独有的objective-c函数在3.1上运行时会报错.而4.0独有的类在3.1上分配内存时不会报错?分配的结果是什么?9.为什么4.0独有的c函数在3.1的机器上运行不会报错(在没有调用的情况下?)而4.0独有的类名在3.1的机器上一运行就报错? 10.常见的object-c的数据类型有那些,和c的根本数据类型有什么区别?如:nsinteger和int11.property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成get/set方法怎么做?有什么考前须知?12.委托是什么?委托的property声明用什么属性?为什么?13.浅拷贝和深拷贝区别是什么?…14.NSString和NSMutableString 有什么区别?15.自动释放池跟GC有什么区别?iPhone上有GC么?[poolrelease]和[pooldrain]有什么区别?16.for(intindex=0;index<20;index++){NSString*tempStr=@”tempSt r”;NSLog(tempStr);NSNumber*tempNumber=[NSNumbernumberWithInt:2 ];NSLog(tempNumber);}这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?17.内存管理的几条原那么时什么?按照默认法那么.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的防止内存泄露?18.在一个对象释放前.如果他被加到了notificationCenter中.不在notificationcenter中remove这个对象可能会出现什么问题?19.怎样实现一个singleton的类.给出思路。
ios面试题及答案

ios面试题及答案1.uiview 和 calayer 是什么关系?•uiview 继承 uiresponder,而 uiresponder 是响应者对象,可以对ios 中的事件响应及传递,calayer 没有继承自 uiresponder,所以 calayer 不具备响应处理事件的能力。
calayer 是 quartzcore 中的类,是一个比较底层的用来绘制内容的类,用来绘制ui•uiview 对 calayer 封装属性,对 uiview 设置frame、center、bounds 等位置信息时,其实都是uiview 对 calayer 进一层封装,使得我们可以很方便地设置控件的位置;例如圆角、阴影等属性, uiview就没有进一步封装,所以我们还是需要去设置 layer 的属性来实现功能。
•uiview 是 calayer 的代理,uiview 持有一个 calayer 的属性,并且是该属性的代理,用来提供一些 calayer行的数据,例如动画和绘制。
2.bounds 和 frame 的区别?•bounds:一般是相对于自身来说的,是控件的内部尺寸。
如果你修改了 bounds,那么子控件的相对位置也会发生改变。
•frame :是相对于父控件来说的,是控件的外部尺寸。
3.setneedsdisplay 和 layoutifneeded 两者是什么关系?[图片上传失败...(image-fe66cb-)]uiview的setneedsdisplay和setneedslayout两个方法都是异步执行的。
而setneedsdisplay会自动调用drawrect方法,这样可以拿到uigraphicsgetcurrentcontext进行绘制;而setneedslayout会默认调用layoutsubviews,给当前的视图做了标记;layoutifneeded 查找是否有标记,如果有标记及立刻刷新。
ios多线程面试题

ios多线程面试题在进行iOS多线程面试时,以下是一些常见的问题及其答案,帮助您更好地准备面试。
多线程是指同时执行多个线程的概念,它可以提高程序的运行效率。
在iOS开发中,多线程常用于处理耗时的操作,如网络请求、数据解析等,以避免阻塞主线程造成界面卡顿。
以下将介绍一些与iOS多线程相关的面试题目。
1. 什么是线程?线程是程序中的执行单元,是CPU调度和分派的基本单位。
每个进程至少有一个线程,称为主线程。
多线程是指同时运行多个线程。
2. iOS中常用的多线程技术有哪些?iOS中常用的多线程技术有以下几种:- Grand Central Dispatch (GCD)- NSOperationQueue- Thread3. Grand Central Dispatch (GCD)是什么?GCD是Apple推出的一套自动管理线程的技术,它使用了线程池的概念,通过将任务放入队列中,自动调度执行任务的线程。
GCD使用起来简单高效,是iOS开发中常用的多线程技术。
4. GCD中的队列有哪两种类型?GCD中的队列分为以下两种类型:- 串行队列:按照先进先出的顺序,依次执行队列中的任务。
- 并发队列:可以同时执行多个任务,任务之间的执行顺序不确定。
5. 什么是同步任务和异步任务?- 同步任务:在当前线程中执行,会阻塞当前线程,等待任务执行完毕后再继续执行后续代码。
- 异步任务:在新的线程中执行,不会阻塞当前线程,可以继续执行后续代码。
6. GCD中的dispatch_group有什么作用?dispatch_group用于在异步任务执行完毕后,执行特定代码。
dispatch_group_enter与dispatch_group_leave配合使用,用于标记任务的开始和结束,通过dispatch_group_notify方法执行指定代码。
7. NSOperationQueue与GCD有什么区别?- NSOperationQueue是基于GCD的更高级的多线程技术,支持添加依赖关系、取消操作等功能。
软件运维面试题

软件运维面试题一、操作系统相关1. 请解释什么是进程和线程,并说明它们之间的区别。
进程是指在计算机中执行的一个程序,是一个正在运行的应用程序的实例。
一个进程可以包含多个线程,每个线程代表了进程中的一个执行单元。
线程是进程的一个实体,是CPU调度和分派的基本单位。
区别:- 进程是资源分配的基本单位,线程是CPU调度的基本单位。
- 进程拥有独立的地址空间,线程共享所属进程的地址空间。
- 进程间通信需要特殊机制,线程间通信直接共享进程的地址空间。
- 创建、切换新线程的开销比进程小,线程之间切换更快。
2. 什么是死锁?请简要介绍死锁产生的条件及处理方法。
死锁是指两个或多个进程因争夺系统资源而无法继续执行的情况。
死锁产生的条件:- 互斥条件:一个资源每次只能被一个进程占有。
- 请求与保持条件:一个进程占有资源时,继续请求新的资源。
- 不剥夺条件:进程已获得的资源在未使用完之前不能被其他进程强行剥夺。
- 环路等待条件:存在一个进程资源申请的环形链。
处理方法:- 预防死锁:破坏死锁产生的四个条件。
- 避免死锁:在资源分配前进行安全性检查,避免进入不安全状态。
- 检测与恢复:定期检测系统资源分配状态,一旦检测到死锁,采取相应措施进行恢复。
- 忽略死锁:将死锁发生的概率降到非常低。
二、网络与安全1. 简要介绍什么是TCP/IP协议族,并说明TCP和UDP的区别。
TCP/IP协议族是指一套网络通信协议,包括许多协议,如IP、TCP、UDP等。
它是互联网的核心协议,用于在网络中实现数据的传输与通信。
TCP和UDP的区别:- TCP(传输控制协议)是一种面向连接的可靠传输协议,UDP(用户数据报协议)是一种面向无连接的不可靠传输协议。
- TCP提供了数据的可靠传输,通过序号、确认和重传机制保证数据的完整性与正确性;UDP不提供数据传输的可靠性,不保证数据完整性。
- TCP面向连接,需要在通信前建立连接,而UDP不需要建立连接,发送数据时直接发送。
最全多线程经典面试题和答案

最全多线程经典⾯试题和答案Java实现线程有哪⼏种⽅式?1、继承Thread类实现多线程2、实现Runnable接⼝⽅式实现多线程3、使⽤ExecutorService、Callable、Future实现有返回结果的多线程多线程同步有哪⼏种⽅法?Synchronized关键字,Lock锁实现,分布式锁等。
Runnable和Thread⽤哪个好?Java不⽀持类的多重继承,但允许你实现多个接⼝。
所以如果你要继承其他类,也为了减少类之间的耦合性,Runnable会更好。
Java中notify和notifyAll有什么区别?notify()⽅法不能唤醒某个具体的线程,所以只有⼀个线程在等待的时候它才有⽤武之地。
⽽notifyAll()唤醒所有线程并允许他们争夺锁确保了⾄少有⼀个线程能继续运⾏。
为什么wait/notify/notifyAll这些⽅法不在thread类⾥⾯?这是个设计相关的问题,它考察的是⾯试者对现有系统和⼀些普遍存在但看起来不合理的事物的看法。
回答这些问题的时候,你要说明为什么把这些⽅法放在Object类⾥是有意义的,还有不把它放在Thread类⾥的原因。
⼀个很明显的原因是JAVA提供的锁是对象级的⽽不是线程级的,每个对象都有锁,通过线程获得。
如果线程需要等待某些锁那么调⽤对象中的wait()⽅法就有意义了。
如果wait()⽅法定义在Thread类中,线程正在等待的是哪个锁就不明显了。
简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象。
为什么wait和notify⽅法要在同步块中调⽤?主要是因为Java API强制要求这样做,如果你不这么做,你的代码会抛出IllegalMonitorStateException异常。
还有⼀个原因是为了避免wait 和notify之间产⽣竞态条件。
什么是死锁?如何避免死锁?死锁就是两个线程相互等待对⽅释放对象锁。
iOS面试题集锦(附答案)(个人精心整理)

iOS⾯试题集锦(附答案)(个⼈精⼼整理)1、第三⽅库、masonry第三⽅⾃动布局是否⽤过,类⽅法和对象⽅法的区别2、MVC机制C对M:APIC对V:OutletV对C:T arget-action,Delegate,DatasourceM对C:Notification,KVO3、runtime机制runtime是⼀套⽐较底层的纯C语⾔API, 属于1个C语⾔库, 包含了很多底层的C语⾔API。
runtime ⽤来⼲什么呢??⽤在那些地⽅呢?怎么⽤呢?runtime是属于OC的底层, 可以进⾏⼀些⾮常底层的操作(⽤OC是⽆法现实的, 不好实现)在程序运⾏过程中, 动态创建⼀个类(⽐如KVO的底层实现)在程序运⾏过程中, 动态地为某个类添加属性\⽅法, 修改属性值\⽅法遍历⼀个类的所有成员变量(属性)\所有⽅法例如:我们需要对⼀个类的属性进⾏归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使⽤了runtime就可以动态设置!1>头⽂件利⽤头⽂件,我们可以查看到runtime中的各个⽅法!2>相关应⽤NSCoding(归档和解档, 利⽤runtime遍历模型对象的所有属性)字典–>模型(利⽤runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)KVO(利⽤runtime动态产⽣⼀个类)⽤于封装框架(想怎么改就怎么改)这就是我们runtime机制的只要运⽤⽅向3>相关函数objc_msgSend : 给对象发送消息class_copyMethodList : 遍历某个类所有的⽅法class_copyIvarList : 遍历某个类所有的成员变量class_…..这是我们学习runtime必须知道的函数!4.必备常识1> Ivar : 成员变量2> Method : 成员⽅法从上⾯例⼦中我们看到我们定义的成员变量,如果要是动态创建⽅法,可以使⽤Method,4、strong ,weak, assign有什么区别assign:简单赋值,不更改索引计数(Reference Counting)。
百度 ios面试题

百度 ios面试题百度iOS面试题在iOS开发领域中,百度一直以来都是一家颇具实力和创新能力的公司。
为了能够顺利通过百度的iOS面试,我们需要对百度常见的iOS 面试题进行深入了解和准备。
本文将针对百度iOS面试题展开讨论并给出相应的答案,以帮助读者在准备面试时有所依据。
1. 什么是iOS中的Autorelease Pool?它的主要作用是什么?在iOS中,Autorelease Pool(自动释放池)是一种内存管理机制,用于管理autorelease对象,即需要延迟释放内存的对象。
其主要作用是延迟内存释放,提高内存利用率和性能。
当autorelease对象被添加到Autorelease Pool中时,系统会在合适的时机(通常是在当前的runloop结束时)自动释放这些对象。
2. 请描述下iOS中的内存管理机制。
在iOS中,内存管理主要依靠引用计数来完成。
当一个对象被引用时,其引用计数会加1,当引用计数为0时,对象将会被释放。
通过retain、release和autorelease等方法可以控制对象的引用计数。
iOS中引入了ARC(自动引用计数)机制,可以自动管理对象的引用计数,从而减少手动引用计数的工作。
3. 在iOS中,什么是代理模式?请举一个例子并说明其使用场景。
代理模式是一种常用的设计模式,在iOS开发中被广泛使用。
在代理模式中,一个类可以将某些任务委托给另一个类来完成,从而实现代码的分离和解耦。
一个常见的例子是UITableView的代理模式。
UITableView的DataSource和Delegate就是典型的代理模式的应用。
UITableView的DataSource负责提供数据源,Delegate负责处理用户交互等事件。
通过代理模式,我们可以将UITableView的数据源和事件处理逻辑抽离出来,更好地实现了业务逻辑的分离和复用。
4. 在iOS开发中,什么是MVC模式?请描述一下各个组成部分的作用。
【7】IOS面试题-线程网络2

1.多线程都有哪些实现,GCD要注意些什么。
三种线程优缺点?(1)NSThread:轻量级的方式(具有很少的规则和惯例,依赖的东西少),比较底层和原始。
需要自己手动管理线程的生命周期,同步的时候需要加锁来控制线程执行顺序,会增加系统开销。
不推荐使用。
(2)NSOperationQueue:一个NSoperation对象可以通过调用start方法执行任务,默认是同步执行;也可以将NSOperation添加到一个NSOperationQueue中执行,这时是异步的。
通过这个方式开启线程后,可以中途停止、继续、取消等操作。
如果想控制线程执行顺序,可以通过添加依赖完成。
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
对于上传、下载这种复杂的操作,推荐使用。
(3)GCD:苹果提供的,异步执行。
提高了代码执行效率和多核的利用率,性能更好。
对于复杂的不推荐使用,但是简单的提交数据推荐使用。
2. 在哪里用过哪些第三方库,在哪获取第三库?读过第三方代码没有?在开发的过程中,用过很多第三方类库,AFNetWorking、SDWebImage、MBProgressHUD、FMDB、EGOTableViewPullRefresh、ShareSDK等。
注意:提到的可能面试官都会问到。
大多是从Github、CocoaChina地方等下载。
第三方类库主要是用它的功能,对于比较优秀的代码自己也读了一下,写的非常棒,比如。
(这个时候可以详细介绍一个你最熟悉的第三方类库)3. 多个iphone版本适配?最简单有效的方式是通过autolayout+sizeclass来进行适配的,但是这种方式的缺点需要添加的约束比较多,对于手写的代码非常麻烦。
一般手写代码进行布局的时候,会选择第三方类库来做,比如FLKAutoLayout,可以用简单的一句代码完成对一个控件添加的全部约束,非常实用。
4. 上拉加载更多,下拉刷新如何实现?用EGOTableViewPullRefresh做的,上拉的时候,从服务器取一组新的数据,加到数组中,刷新界面;下拉的时候,从服务器取数据,更新数组,刷新界面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 线程与进程的区别和联系?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的主要差别在于它们是不同的操作系统资源管
理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
2.什么是线程?什么是进程?两者关系
线程是一组指令的集合,是程序中一个单一顺序的控制流程。
进程是整个程序或者部分程序的动态执行。
每个正在系统上运行的程序都是一个进程。
每个进程中包含多个线程。
进程之间不能共享资源,但是线程之间可以共享资源。
3.实现线程的方式?各自特点是什么?相互间区别是什么?
(1)NSThread:轻量级的方式(具有很少的规则和惯例,依赖的东西少),比较底层和原始。
需要自己手动管理线程的生命周期,同步的时候需要加锁来控制线程执行顺序,会增加系统开销。
不推荐使用。
(2)NSOperationQueue:一个NSoperation对象可以通过调用start方法执行任务,默认是同步执行;也可以将NSOperation添加到一个NSOperationQueue中执行,这时是异步的。
通过这个方式开启线程后,可以中途停止、继续、取消等操作。
如果想控制线程执行顺序,可以通过添加依赖完成。
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
对于上传、下载这种复杂的操作,推荐使用。
(3)GCD:苹果提供的,异步执行。
提高了代码执行效率和多核的利用率,性能更好。
对于复杂的不推荐使用,但是简单的提交数据推荐使用。
4、线程同步和异步分别是什么意思?如何实现线程
的同步?
线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低。
线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制。
通过添加线程锁实现线程的同步。
单线程不加锁可以,但是多线程的时候,对于公共资源,必须加锁。
当线程并发,也就是异步访问,就会出现问题。
所以要把异步的变成同步的才行。
5、如何实现多线程按顺序执行?
在NSOperationQueue,可以通过添加依赖完成线程的顺序执行。
6. Object C中创建线程的方法是什么?如果在主线
程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?
线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:
7.What is lazy loading?
懒汉模式,只在用到的时候才去初始化。
也可以理解成延时加载。
我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。
一个延时加载,避免内存过高,一个异步加载,避免线程堵塞。
8. URI是什么?URL是什么?URL格式?
URI: 统一资源标识符(类似于身份证号,找到唯一的资源)
URL: 统一资源定位符(类似于门牌号,里面资源可以有多个)
URL格式:协议://域名:端口号/具体地址
9. http特点?
超文本传输协议,是无状态的协议。
请求应答模式。
10. get、post区别?
get 用于请求少量数据,明文发送。
(新闻、天气等)post 大量数据,密文发送。
(注册、网银等)
11.做过的项目是否涉及网络访问功能,使用什么完成网络功能?
网络访问可以通过NSURLConnection实现,主要步骤为:(1)创建一个NSURL对象,设置请求路径(设置请求路径)(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(创建请求对象)
(3)使用NSURLConnection发送NSURLRequest(发送请求)第三方类库ASIHTTPRequest也可以实现,但是最常用的方式是通过第三方类库AFNetWorking完成的。
12.简单介绍下NSURLConnection类及
+sendSynchronousRequest:returningResponse:e rror:与
–initWithRequest:delegate:两个方法的区别?
NSURLConnection主要用于网络访问,其中
+sendSynchronousRequest:returningResponse:error:是同步访问数据,即当前线程会阻塞,并等待request的返回的response,而–initWithRequest:delegate:使用的是异步加载,当其完成网络访问后,会通过delegate回到主线程,并其委托的对象。