面试总结
关于自我介绍好好弄一弄!!!!
为什么在主线程更新UI?
- 主要原因还是为了线程的安全,但是UIkit的线程不是安全的,假如在两个线程中设置同一张背景图片的话,这个图片当被释放的时候就会被释放两次,当前这个线程设置图片地址会把上一个线程赋值的图片地址给覆盖,因为他们设置的是同一个地址,这样就会出现野指针错误,会发生程序崩溃。虽然apple对大部分的绘图方法改成线程安全可用,但是官方还是建议我们在主线程进行UI更新,这样就会保证线程安全。
主要的目的还是为了线程安全,防止程序崩溃。围绕着线程安全说。
支付宝,微信,银联有什么区别?
- Apple pay非常屌,可以看一看。
- 支付宝支付需要三个东西,
私钥,appKey,还有签约商户
- 支付宝借口文档中写了3p参数列表:
- 合作者身份ID
- 接口名称
- 签名
- 服务器异步通知页面路径
- 微信只需要
appKey
- 注册开发者账号
- 注册应用通过审核
- 开始计数开发
- 签署在线协议
- 请求之前都会向后台请求接口来获取订单号
- 还有一点比较总要是后台的区别,后台原来和我说过,但是我现在不太记得了
- 银联
数据库上传格式不对会出现什么问题
-
不会出现问题,只是在我们想要获取数据的时候,查找数据比较麻烦一些。
-
数据库相关东西好好复习一下
推送怎么推送给指定的人群?
这个网站上有说明可以看一下:链接
图片上传
- 从相册中选取图片或者拍照
- 处理完毕,回到个人信息页面
- 保存图片到
document
- 保存到
NSUserDefaults
- 上传服务器
- 从
document
获取图片设置UI
代码链接地址:链接
使用数据库的好处?关于事物的解释?
-
SQLite3
是一款轻型的数据库,设计目标是嵌入式的,占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了,他的处理速度比Mysql
、PostgreSQL
这两款著名的数据库还快。 -
将网络数据存储在本地,不用每次都去网络加载,减少用户网络流量开销。在没网的情况下也能显示界面,增强用户体验。
-
提供的字段有
integer、real、text、blob、null
-
创建表:
create
删除表:drop
-
添加:
insert
删除:delete
改:update
查:select
-
系统本身提供的存储数据的方式,只能保存OC对象。
-
CoreData介绍
-
CoreData
是苹果公司封装的数据持久化框架。说白了就是对SQLite
进行的封装CoreData
在iOS 3.0
中开始开放, 它允许用户按照实体-属性-值模型组织数据,数据最终的存储形式可以是:二进制、XML、SQLite数据库、内存里、活自定义数据类型
- 优势:
- 它是苹果公司原生的产品
- 它可以节省代码量 大概是
30% - 70%
- 它支持可视化建模型。
-
CoreData
支持数据库版本升级
- CoreData基本使用:链接
-
FMDB
-
优点: 使用起来更加面向帝乡,省去了很多麻烦、冗余的C语言代码,对比苹果自带的
CoreData
框架,更加轻量级和灵活,提供了多线程安全的数据库操作方法,有效的防止数据混论 -
三大主要类:
- FMDatabase:一个
FMDatabase
对象就代表一个单独的SQLite
数据库,用来执行SQLite
语句、 - FMResultSet:使用
FMDatabase
执行查询后的结果集、 - FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的
- FMDatabase:一个
-
关于事物
- 事物就是把所有的东西打包在一起,一次性处理他,如果当前操作没有执行完毕,下次执行会从头开始,把之前执行的删除,这样更安全。而非事务就是一条一条的执行,如果中线断开,则不会删除上次的不安全。
核心动画有什么缺点,和UIView动画的区别?
- 核心动画只能添加到
CALayer
,UIView
没有办法使用核心动画,核心动画一切都是假象,并不会改变真实的值。 - 如果需要与用户交互就使用
UIView
的动画,不需要交互可以使用核心动画,在转场动画中,核心动画的类型比较多。 - 核心动画有代理方法,动画执行完毕的时候回调用代理方法。
推送的三种模式
- App正在运行,App在后台,App结束。
HTTP,Socket
-
Socket
是进程通讯的一种方式,既调用这个网络库的一些API
函数实现分布在不同主机的相关进程质检的数据交换 -
HTTP
的链接很简单,是无状态的,HTTPS
协议是SSL+HTTP
协议构建的,可以进行加密传输、身份证的网络协议,要被比HTTP
协议安全。 -
HTTPS
安全性更高,但HTTP
效率更高。但是如果要想安全效率就会降低,鱼和熊掌不可兼得。 -
HTTP
和HTTPS
的TCP
连接时间是差不多的,为0.031和0.032
,但是HTTPS的SSL过程耗时达到了0.182,差不多是TCP连接时间的6倍。
TCP和UDP
- TCP
-
Transmission Controller Protocol
是传输控制协议 - 提供的是面向连接、可靠的字节流服务。
-
- UDP
-
User Data Protocol
是用户数据协议 - 是一个简单的面向数据包的运输层协议。
-
三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=j)
到服务器,并进入SYN_SEND
状态,等待服务器确认;
第二次握手:服务器收到syn
包,必须确认客户的SYN(ack=j+1)
,同时自己也发送一个SYN包(syn=k)
,即SYN+ACK
包,此时服务器进入SYN_RECV
状态;
第三次握手:客户端收到服务器的SYN+ACK
包,向服务器发送确认包ACK(ack=k+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED
状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.
AFN的底层实现原理?
- AFN 3.0之前用的是
NSURLConnection
,AFN 3.0之后放弃connection
的接口,使用NSURLSesstion
, - AFN 封装了
reachability
的类,用于检测网络连接转态 - 还有请求的发送请求的使用如果JSON格式不对,需要修改
AFNHTTPRequestsSruakizer
请求方式,默认是AFNjsonRequestSerializer
. - 我们一般使用AFN都使用GET和POST请求,然后你就看着和他扯。
怎么监听子线程结束?
- (不太确定)可以使用调度组来监听子线程结束,会发送一条消息。
@synthesize 的语义是如果你没有手动实现 setter 方法和 getter 方法,那么编译器会自动为你加上这两个方法。
@dynamic 告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成。
APP 上架流程总结
- 通过钥匙串获取开发者证书,获取发布证书,获取PP证书
- 首先要创建一个开发者账号
- 登陆网站新建APP,然后去开发者账号,填写name和bundle ID,获取套装ID
- 打包项目,设置版本信息,把debug模式改成release,Product --> Archive
- 设置app类别和预览图片
平时怎么解决creach原因的
- 可以说打断点来解决,还可以使用第三方bugly.
你是怎么检查你程序的性能的?
- 使用苹果系统提供的instruments来测试程序的性能如何。
weak和assign的区别
- weak不会引用计数器+1,如果指向对象被销毁,指针会自动清空指向nil
- assgin指针不会执行nil 不会清空,导致程序崩溃
关于列表的优化
- 优化的链接链接
C语言与OC混编的时候需要注意什么
- 需要注意内存管理,比如过画图的时候创建一个路径,当你不使用的时候你要把它释放掉。
屏幕分辨率是多少
- iPhone5 ~ 5s 的分辨率 320 * 568 @2X
- iPhone6 ~ 6s 的分辨率 375 * 667 @2X
- iPhone6P ~ 6SP 的分辨率 414 * 736 @3X
你什么时候会考虑用XIB,什么时候用纯代码
- 使用纯代码的好处是合作开发方便,重用性好,缺点开发周期长,自动布局困难
- xib开发速度快,管理起来和纯代码差不多,缺点容易被代码所覆盖。
app使用GIT管理上传版本
- 我们一把需要开始开发新版本的时候,会开个分支,然后在分支上面进行开发,在开发完毕的后,在合并分支,如果上个版本出现错误,直接回退版本,修复bug在合并。
socker的基本概念
-
又称
套接字
-
网络上的两个程序通过一个
双向的通信连接实现数据的交换
-
通过
socket
向网络发出请求或者应答网络请求 -
发送网络请求之前一定要建立一个通信的连接.
-
TCP在连接中进行大数据传输(数据大小不受限制)通过三次握手来建立连接
-
是可靠的协议,安全送达
-
必须建立连接,效率比较低
-
UDP不需要建立连接就可以发送数据(大小限制在64K之内)
-
不需要创建连接,不安全
-
不需要建立连接,效率快
- Socket通信流程
- 绑定端口、链接端口,监听有没有客户端链接 、链接端口、建立链接、 发送请求、读取请求、处理请求、回应数据、结束链接
为啥子要使用单例
- 使用dispatch_once 创建单例是为了线程安全