博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS面试题06-其他
阅读量:6279 次
发布时间:2019-06-22

本文共 2198 字,大约阅读时间需要 7 分钟。

常用的设计模式

  • 单例模式
  • 组合模式
  • 观察者模式
  • 代理模式
  • 享元模式
  • 工厂方法模式
  • 抽象工厂模式

MVC的理解

数据管理者(M)、数据展示者(V)、数据加工者(C)M应该做的事:    给ViewController提供数据    给ViewController存储数据提供接口    提供经过抽象的业务基本组件,供Controller调度C应该做的事:    管理View Container的生命周期    负责生成所有的View实例,并放入View Container    监听来自View与业务有关的事件,通过与Model的合作,来完成对应事件的业务。V应该做的事:    响应与业务无关的事件,并因此引发动画效果,点击反馈(如果合适的话,尽量还是放在View去做)等。    界面元素表达复制代码

MVC 和 MVVM 的区别

MVVM是对胖模型进行的拆分,其本质是给控制器减负,将一些弱业务逻辑放到VM中处理MVC是一切设计的基础,所有新的设计模式都是基于MVC进行的改进补充:常见的设计模式有:MVC、MVCS、MVVM、viper复制代码

TCP的三次握手

第一次握手:客户端发送syn包到服务器,并进入syn_send状态,等待服务器进行确认;第二次握手:服务器收到客户端的syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN + ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户收到服务器发送的SYN+ACK包之后,向服务器发送确认包,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成第三次握手。复制代码

如何制作一个静态库/动态库?他们的区别是什么?

Xcode6支持制作静态库/动态库 framework无论是动态库还是静态库都是区分真机和模拟器的静态库编译静态库文件装入程序空间,动态库是文件动态装入内存动态库执行到相关函数才会被调用,节省空间苹果一般不允许第三方动态库,APP容易被拒复制代码

一个lib包含了很多的架构,会打到最后的包里么?

不会,如果lib中有armv7, armv7s, arm64, i386,x86_64架构,而target architecture选择了armv7s,arm64,那么只会从lib中link指定的这两个架构的二进制代码,其他架构下的代码不会link到最终可执行文件中;反过来,一个lib需要在模拟器环境中正常link,也得包含i386架构的指令每一个设备都有属于自己的CPU架构每一个静态支持的架构是固定模拟器4s-->5 : i3865s-->6plus : x86_64真机3gs-->4s : armv75/5c : armv7s,静态库只要支持了armv7,就可以跑在armv7s的架构上5s-->6plus : arm64常用命令总结:// 使用lipo -info命令,查看指定库支持的架构,比如UIKit框架lipo -info UIKit.framework/UIKit// 想看的更详细的信息可以使用lipo -detailed_infolipo -detailed_info UIKit.framework/UIKit// 还可以使用file命令file UIKit.framework/UIKit// 合并MyLib-32.a和MyLib-64.a,可以使用lipo -create命令合并lipo -create MyLib-32.a MyLib-64.a -output MyLib.a复制代码

支持64-bit后程序包会变大么?

会,支持64-bit后,多了一个arm64架构,理论上每个架构一套指令,但相比原来会大多少还不好说复制代码

用过Core Data 或者 SQLite吗?读写是分线程的吗?遇到过死锁没?如何解决的?

用过SQLite,使用FMDB框架丢给FMDatabaseQueue 或者 添加互斥锁(NSLock/@synchronized(锁对象))复制代码

请简单的介绍下APNS发送系统消息的机制

APNS优势:杜绝了类似安卓那种为了接受通知不停在后台唤醒程序保持长连接的行为,由iOS系统和APNS进行长连接替代APNS的原理:    应用在通知中心注册,由iOS系统向APNS请求返回设备令牌(device Token)    应用程序接收到设备令牌并发送给自己的后台服务器    服务器把要推送的内容和设备发送给APNS    APNS根据设备令牌找到设备,再由iOS根据APPID把推送内容展示复制代码

不用中间变量,用两种方法交换A和B的值

方法1:A = A + BB = A - BA = A - B方法2:异或A = A^B;B = A^B;A = A^B;复制代码

开发常用的工具有哪些?

你一般是怎么用 Instruments 的?

你一般是如何调试 Bug 的?

如何实现单例,单例会有什么弊端?

节省内存资源,一个应用就一个对象复制代码

APP上架后如何搜集错误信息?

简答描述下你所理解的敏捷开发

block 循環引用

https://www.jianshu.com/p/fc2f4d207d25

转载于:https://juejin.im/post/5a6c2070f265da3e303cb9ce

你可能感兴趣的文章
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
试水区块链出版?纽约时报在招人了
查看>>
拥抱PostgreSQL,红帽再表态:SSPL的MongoDB坚决不用
查看>>
QCon演讲速递:异步处理在分布式系统中的优化作用
查看>>
Javascript 中的 Array 操作
查看>>
YARN的AsyncDispatcher原理
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>