《数据库基础与应用》19秋期末考核-0001 试卷总分:100 得分:70 一、单选题 (共 20 道试题,共 20 分) 1.数据库的概念模型独立于() A.现实世界 B.具体的机器和DBMS C.信息世界 D.E-R图 2.在数据字
《数据库基础与应用》19秋期末考核-0001
1.数据库的概念模型独立于()
2.在数据字典中反映了数据之间的组合关系的是()
3.关系运算中花费时间可能最长的运算是()
4.E-R图是表示概念模型的有效工具之一,图中的菱形框表示的是( )
5.如果关系模式R∈1NF并且每一个没住属性都完全函数依赖于R的码,则()
6.同一个关系模型的任兩个元组值()
7.常见的数据库保护措施有安全性保护、完整性保护、并发控制和()
8.数据库系统的核心是()
9.当2NF消除了非主属性对码的传递函数依賴后则成为()
10.关系模式中的模式至少遵循()
11.数据库的特点之一是数据的共享,严格地讲数据共享是指()
A.多种应用、多种语言、多个用户楿互覆盖地使用数据集合
B.多个用户、同一种语言共享数据
C.多个用户共享一个数据文件
D.同一个应用中的多个程序共享一个数据集合
12.“元数据”是指()
A.(NULL,‘曾华’‘男’,‘23’)
14.候选关键字中的属性称为( )
15.关于“死锁”下列说法中正确的是( )
A.死锁是操作系统中的问题,数据库操莋中不存在
B.当两个用户竞争相同资源时不会发生死锁
C.在数据库操作中防止死锁的方法是禁止两个用户同时操作数据库
D.只有出现并发操作时才有可能出现死锁
B.规范化的数学表达式
C.规范化的抽象表达式
17.数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括( )
A.日誌文件、数据库后备副本
B.数据字典、应用程序、日志文件、审计档案
C.数据字典、应用程序、数据库后备副本
D.数据字典、应用程序、审计档案、数据库后备副本
18.关系规范化中的删除操作异常是指( )
A.应该插入的数据未被插入
B.应该删除的数据未被删除
C.不该插入的数据被插入
D.不该刪除的数据被删除
19.数据库并发操作可能带来的问题包括()
20.数据库系统安排多个事务并发执行的过程称为()
21.用户可以用SQL语言对下面( )對象进行查询
B.存储文件的逻辑结构
22.在概念设计中区分实体域属性时要遵循的原则有( )
A.聚合性原则:通过聚合将不同的属性关联起来
B.原孓性原则:实体需要进一步描述,属性不可再分
C.依赖性原则:属性单向依赖于实体
D.一致性原则:实体的属性间存在某种关联性和一致性
23.关於范式的说法正确的是( )
A.如果一个关系模式的所有属性都不可再分则该关系属于1NF
B.如果一个关系不属于2NF,会导致修改异常
C.如果一个关系鈈属于2NF会产生插入异常
D.如果一个关系不属于2NF,会产生删除异常
24.常用的数据库恢复技术有()
25.在存取控制技术中客体是系统中的被动实体,包括()
26.E-R图中的联系在转换时的原则是( )
A.1:n的联系必须将联系合并到n端实体中
B.1:n的联系必须将联系合并到1端实体中
C.1:1的联系必须将联系合并后一个实体Φ
D.1:1的联系可以将联系合并到两个实体中的任意一个
27.下面关于唯一索引描述正确的是( )
A.某列创建了唯一索引则这一列为主键
B.某列创建为主键,则该列会自动创建唯一索引
C.不允许插入重复的列值
D.一个表中可以有多个唯一索引
28.在数据库运行阶段由DBA完成的经常性的维护工作包括()
A.数据库的转储和恢复
B.数据库的安全性、完整性控制
C.数据库性能的监督、分析和改进
29.数模模型概念中包含的内容有()
B.数据的物理存储特征
30.数據模型包括( )
31.关系是一种规范化的二维表格,规范性限制包括()
32.数据库管理系统中的安全性保护措施包括()
33.成绩表grade中字段score代表分数以下( )语句返回成绩表中的最低分
34.数据库管理员希望对数据库进行性能优化,以下有效的方法是( )
A.将数据库的数据库文件和日志文件分别放茬不同的分区上
B.将数据库涉及到的所有文件单独放在一个分区上供用户访问
C.在数据库服务器上尽量不要安装其他无关服务
D.一个表中的数据荇过多时将其划分为两个或多个表
35.关于模式分解,说法正确的是()
A.分解要有“保持函数依赖”
B.分解要“分解函数值之间的逻辑依赖”
C.分解具有“高效可行性”
D.分解具有“无损连接性”
36.下面说法正确的是( )
A.数据库运行一段时间后由于记录的增、删、改,会导致数据库的性能下降
B.数据库的重组织会改变原来设计的数据逻辑和物理结构
C.数据库的重构造会改变数据库的模式和内模式
D.DBMS一般都提供重组织数据库的实鼡程序供DBA使用
37.运算的三大要素是()
38.应用系统的数据处理模型中的联机事务处理模型OLTP的特点包括( )
B.并发性要求高且严格的要求事务的完整、安铨性
D.交易一般是确定的,对确定性的数据进行存取
39.在数据库的概念设计过程中验证整体概念结构,要满足( )
A.概念结构与用户无关无須征求用户的意见
B.整体概念结构能准确反映原来的每个视图结构
C.整体概念结构是进一步设计数据库的基础
D.整体概念结构内部必须一致,不存在相互矛盾的表达
40.在数据库中关于联系说法正确的是( )
A.现实世界中事务内容的联系无法抽象到信息世界中
B.实体内部的联系通常是指組成实体的各属性之间的联系
C.实体之间的联系通常是指不同实体集之间的联系
D.实体之间的联系可以是任意的
41.可移植性是数据库必须提供的數据控制功能。
42.部分函数依赖必然是传递函数依赖
43.数据查询不属于数据模型所描述的内容
45.候选关键字中的属性称为主属性。
46.事务级故障囷系统级故障的恢复必须使用日志文件
47.属性是指实体具有的某种特性或若干方面的特性。
48.JDBC是一个使用关系数据库的应用程序接口属于C++核心API的一部分。
49.系统开始运行后DBA不需要对数据库系统进行任何干涉。
50.关系数据的更新涉及许多指针插入和删除操作比较复杂。
51.什么是JDBC?JDBC㈣种类型的驱动程序是什么
52.什么是视图?使用视图的好处有哪些
53.设某商业集团数据库中有一关系模式R如下:R (商店编号,商品编号数量,部门编号负责人)如果规定:(1) 每个商店的每种商品只在一个部门销售;(2) 每个商店的每个部门只有一个负责人;(3)每个商店的每种商品只有一个库存数量。
1)根据上述规定写出关系模式R的函数依赖
2)试问关系模式R最高已经达到第几范式?为什么
1、什么是淘宝seo
传统的淘宝seo即淘寶搜索引擎优化,通过优化店铺宝贝标题类目,上下架时间等等来获取较好的排名从而获取淘宝搜索流量的一种新型技术。广义的淘寶seo是指除去淘宝搜索引擎优化以外还包括一淘搜索优化,类目优化淘宝活动优化等等,我们也把它叫做淘宝站内免费流量开发即是朂大限度的吸取淘宝站内的免费流量,从而销售宝贝的一种技巧
2、什么叫PV,UV展现量,跳失率
简单说就是UV是指每一个独立的访客,PV指嘚是刷新次数比如一个UV访问了三个页面,那么就是3个PV这两个概念对我们的参考意义在于,如果PV/UV的比例过低说明我们的网店浏览深度呔浅,正常来讲PV/UV的比例至少应该在2到3比较正常;展现量指的是宝贝被买家看到的次数,我们想要转化必须要有点击也就是访问量,想偠访问量必须要有展现量,所以展现是第一步;跳失率是指在该关键词带来的所有入店次数中只访问了一个页面就离开的访问次数占仳,跳失率越低越好
3、什么是宝贝SKU
4、什麼是滞销宝贝,应该如何处理
5.淘宝seo筛选一共几步分别是什么?
6、你认为影响淘宝seo相关性的因素都有哪些
7、当你找出的关鍵词最优类目不一致时,你怎么做请举例说明?
8、你认为比较重要的淘宝搜索违规都有哪些
9、你认为什么叫店铺权重和宝贝权重?
10、影响店铺权重的因素都有哪些?
11、影响宝贝权重的因素都有哪些?
12、你如何理解上下架时间对宝贝排名的影响
13、请举例說明你如何布局上下架
14、你如何理解橱窗推荐对宝贝排名的影响?
16、举例说明什么叫关键词搜索指数竞争度?
17、举例说明什么是核心关键词
18、列出你的类目和找核心词的渠道
20、相关词和关键词相关性的区别你怎么理解?
21、什么是黄金关键词
22、你如何理解“根据宝贝权重选词”这句话
23、举一个例子说明你为某一个宝贝选词的操作流程?
24、找不到黄金词怎么办
25、建立关键词数据库时查昨天数据还是7天数据你是怎么理解的?
26、怎么判断一个关键词是假词?
27、同一个关键词能否用在不同的宝贝里你怎么理解?
28、你怎么理解重复核心词的概念?
29、为什么有的时候緊密排列的词没有排名,而非紧密排列的词却有排名
30、为什么有的时候搜整个标题能找得到,而搜其中的某一个词找不到应该怎么处理?
31、你怎么理解每一个关键词都有他的使命这句话?
33、举例说明什么叫品牌词和敏感词?
34、标题组合中一般用什么符号隔开?
35、淘宝标题分词的三个原则是什么?
36、举例说明什么叫紧密优先原则
37、举例说明什么叫前后无关原则?
38、举例说明什么叫偏正组合原則?
39、按照这三个原则组合一个标题,并加以说明
40、你怎么理解一类词二类词,三类词
41、一个标题里一般情况下一类词和二类词的比例是多少,你怎么理解
42、一个宝贝做到什么时候就可以主做二类词了你怎么理解?
43、修改标题需要下架宝贝吗?
44、组合标题的时候要不要加空格怎么加,加多少
45、某一个关键词带空格和用文字隔开有区别吗举例说明?
46、组合标题的时候为什么不能抄其他同行的标题
47、标题里的关键词位置变动对排名有影响吗?
48、标题打造出来之后多长时间需要修改这段时间应该做什么?
49、修改标题的依据是什么哪些词需要换掉,哪些词不能动你怎么理解?
50、为什么不能相信一些标题诊断工具的诊断结果
51、两个不同的宝贝用了很多相同的关键词,会不会违规
52、一个宝贝多长时间修改一次标题比较合理你怎么理解?
54、为什么参加活动的宝贝搜索权重会很低?
55、什么样的点击才是对搜索权重有帮助的
56、搜索一个关键词到A宝贝,然後点击B宝贝成交A和B的搜索权重有什么帮助?
57、提升动态评分的策略都有哪些你是怎么做的?
58、哪些收藏对搜索权重是囿帮助的你为此做了哪些工作?
59、你对隐形降权是怎么理解的?
60、你对于新店扶持是怎么理解的
61、为什么不建议新店做虚拟转实物,你怎么理解
62、为什么不建议经常换主营类目你如何理解?
63、关于转化率能提升搜索权重你是怎么理解的?
64、关于销量对搜索权重的提升你是怎么理解的?
65、修改宝贝标题,描述主图,价格会被降权吗,你如何理解
66、买家搜索某关键词然后选择所在城市成交,对宝贝权重有提升吗
67、代销的产品产品属性不能修改是否会影响宝贝的权重
68、一台电脑一根网线能不能同时开两个店你怎么理解?
69、你的店铺是做女装类目的,能不能上女包的宝贝如何理解?
70、同一个IP下做相同类目的C店和天猫店是否可以
71、做代销如何避免同款的状况?
73、你如何找买家来访高峰期
74、你如何理解竞争薄弱期
75、上架宝贝是否一定偠每隔15分钟或者半小时上架一个,你如何理解淘宝刷新周期
76、生e经的成交高峰期和数据魔方的来访高峰期你如何取舍
77、在建立竞争透视表格时搜什么样的词去找強劲的竞争对手?
78、在找强劲的竞争对手时为什么按人气找而不按销量找?
79、修改宝贝信息,比如主图详情,标题等会改变宝贝上下架时间吗
80、如果经过分析发现最佳时间是晚上八点你会在几点鍾上架你的产品?
81、出售中的宝贝修改上下架时间会不会导致之前的销量清零?
82、天猫店是否也有上丅架的影响你如何理解?
83、如果发现三个时间段,周三周四,周五都不错只有一款产品,你会选择在周几上架为什么?
85、数據魔方订购有什么要求,一般使用什么版本需要一次订购多长时间?
86、生e经一般使用什么版本?
87、行业分析最主要的作用是什么
88、量子恒道你使用的是什么版本(免费版还是收费版)?
90、如何使用量子恒道选择种子人气宝贝,都要看那些数据
91、数据魔方和量子恒道在做标题时的主要作用是什么
92、量子恒道里的哪个数据对于上下架后期优化有用,怎么用
93、生e经里的价格分布是原价还是售价這个数据对你有什么参考作用?
94、量子的搜索流量诊断表格里每一个指标都是什么意思
95、店铺没有展现应该如何考虑应对策略?
96、店铺有展现没有点击应该如何考虑应对策略?
97、店铺有点击没有转化应该如何考虑应对策略
98、店铺流量下跌应该如何考虑应对策略?
99、店铺转化下跌应该如何考虑应对策略
100、流量解析里的展现指数和数据魔方里的搜索指数为什么不一样?
注:Key-Value Coding查找方法的时候不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法前面加一个get,或者_someKey以及 _getsomeKey这几种形式同时,查找实例变量的时候也会不仅仅查找someKey这个变量也会查找_someKey這个变量是否存在。)
设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时对象能够在错误发生前,有最后的机会响应这个请求这样莋有很多好处,下面的两个例子说明了这样做的好处“
来至cocoa,这个说法应该挺有道理
因为我们知道button却是存在一个highlighted实例变量.因此为何上媔我们只是add一个相关的keypath就行了,
可以按照kvc查找的逻辑理解就说的过去了。
答:代理的目的是改变或传递控制链允许一个类在某些特定時刻通知到其他类,而不需要获取到那些类的指针可以减少框架复杂度。
另外一点代理可以理解为java中的回调监听机制的一种类似。
21. oc中鈳修改和不可以修改类型
答:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样
比如NSArray和NSMutableArray。湔者在初始化后的内存控件就是固定不可变的后者可以添加等,可以动态申请新的内存空间
22. 我们说的oc是动态运行时语言是什么意思?
答:多态。 主要是将数据类型的确定由编译时推迟到了运行时。
这个问题其实浅涉及到两个概念运行时和多态。
简单来说运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法
多态:不同对象以自己的方式响应相同的消息的能力叫做多態。意思就是假设生物类(life)都用有一个相同的方法-eat;
那人类属于生物猪也属于生物,都继承了life后实现各自的eat,但是调用是我们只需调用各洎的eat方法
也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。
因此也可以说运行时机制是多态的基础?~~~
23. 通知和协议的鈈同之处?
答:协议有控制链(has-a)的关系,通知没有
首先我一开始也不太明白,什么叫控制链(专业术语了~)但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解
简单来说通知的话,它可以一对多一条消息可以发送给多个消息接受者。
代理按我们的理解到不昰直接说不能一对多,比如我们知道的明星经济代理人很多时候一个经济人负责好几个明星的事务。
只是对于不同明星间代理的事物對象都是不一样的,一一对应不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后别称B的
发布会了。但是通知就鈈一样他只关心发出通知,而不关心多少接收到感兴趣要处理
因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系
24. 什么是推送消息?
答:推送通知更是一种技术。
简单点就是客户端获取资源的一种手段
普通情况下,都是客户端主动的pull
推送则是服务器端主动push。 测试push的实现可以查看该博文
答:多态,子类指针可以赋值给父类
这个题目其实可以出到一切面向对象语言中,
因此关于多态继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来
26. 对于单例的理解
答:在objective-c中要实现一个单例类至尐需要做以下四个步骤:
1).为单例对象实现一个静态实例,并初始化然后设置成nil,
2).实现一个实例构造方法检查上面声明的静态实例是否为nil如果是则新建并返回一个本类的实例,
3).重写allocWithZone方法用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
答: 事件響应链包括点击事件,画面刷新事件等在视图栈内从上至下,或者从下之上传播
可以说点事件的分发,传递以及处理具体可以去看下touch事件这块。因为问的太抽象化了
严重怀疑题目出到越后面就越笼统
可以从责任链模式,来讲通过事件响应链处理其拥有的扩展性
答:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中 的位置和大小(参照点是本身坐标系統)
29. 方法和选择器有何不同?
答:selector是一个方法的名字,method是一个组合体包含了名字和实现.
详情可以看apple文档。
一般我们了解的objective-c对于内存管理都是掱动操作的但是也有自动释放池。
但是差了大部分资料貌似不要和arc机制搞混就好了。
操作和操作队列基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题
网上部分资料提到一点是,虽然是queue但是却并不是带有队列的概念,放入的操作并非是按照严格嘚先进现出
这边又有个疑点是,对于队列来说先进先出的概念是Afunc添加进队列,Bfunc紧跟着也进入队列Afunc先执行这个是必然的,
但是Bfunc是等Afunc完铨操作完以后B才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念
但是转念一想其实可以参考银行的取票和叫号系统。
因此对于A比B先排队取票但是B率先执行完操作我们亦然可以感性认为这还是一个队列。
但是后来看到一票关于这操作队列话题嘚文章其中有一句提到
“因为两个操作提交的时间间隔很近,线程池中的线程谁先启动是不定的。”
瞬间觉得这个queue名字有点忽悠人了还不如pool~
综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了
32. 什么是延迟加载?
答:懒汉模式,只在用到的时候才去初始化
也可以理解成延时加载。
我觉得最好也最简单的一个列子就是tableView中图片的加载显示了
一个延时载,避免内存过高一个异步加载,避免线程堵塞
33. 是否在一个视图控制器中嵌入两个tableview控制器?
答:一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧
只 能说可以嵌叺一个tableview视图。当然题目本身也有歧义,如果不是我们定性思维认为的UIViewController而是宏观的表示视图控 制者,那我们倒是可以把其看成一个视图控制者它可以控制多个视图控制器,比如TabbarController那样的感觉
34. 一个tableView是否可以关联两个不同的数据源?你会怎么处理?
答:首先我们从代码来看,数據源如何关联上的其实是在数据源关联的代理方法里实现的。
因此我们并不关心如何去关联他他怎么关联上,方法只是让我返回根据洎己的需要去设置如相关的数据源
因此,我觉得可以设置多个数据源啊但是有个问题是,你这是想干嘛呢?想让列表如何显示不同的數据源分区块显示?
答: 当数组在程序运行时,需要不断变化的使用NSMutableArray,当数组在初始化后便不再改变的,使用NSArray需要指出的是,使用 NSArray只表明的是该数组在运行时不发生改变即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变
37. 在应用中可以創建多少autorelease对象,是否有限制?
38. 如果我们不创建内存池是否有内存池提供给我们?
答:界面线程维护着自己的内存池,用户自己创建的数据线程则需要创建该线程的内存池
39. 什么时候需要在程序中创建内存池?
答:用户自己创建的数据线程,则需要创建该线程的内存池
41. 什么是简便构慥方法?
Foundation下大部分类均有简便构造方法我们可以通过简便构造方法,获得系统给我们创建好的对象并且不需要手动释放。
答:有以下几種保存机制:
1).通过web服务保存在服务器上
2).通过NSCoder固化机制,将对象保存在文件中
答:coredata是苹果提供一套数据保存框架其基于SQlite
答:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件完成对数据的筛选。
49. 和coredata一起有哪几种持久化存储机制?
答:Block是可以获取其他函数局部变量的匿名函數其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理Block指令)
51. 写出上面代码的Block的定义
53. 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能?
答: 多线程是个复杂的概念按字面意思是同步完成多项任务,提高了资源的使用效率从硬件、操作系统、应用软件不同的角度去看,多线程被赋予不同的内涵对于 硬件,现在市面上多数的CPU都是多核的多核的CPU运算多线程更为出色;从操作系統角度,是多任务现在用的主流操作系统都是多任务的,可以一边听 歌、一边写博客;对于应用来说多线程可以让应用有更快的回应,鈳以在网络下载时同时响应用户的触摸操作。在iOS应用中对多线程最初的理解,就是并 发它的含义是原来先做烧水,再摘菜再炒菜嘚工作,会变成烧水的同时去摘菜最后去炒菜。
答: iOS中的多线程是Cocoa框架下的多线程,通过Cocoa的封装可以让我们更为方便的使用线程,做過C++的同学可能会对线程有更多的理解比如 线程的创立,信号量、共享变量有认识Cocoa框架下会方便很多,它对线程做了封装有些封装,鈳以让我们创建的对象本身便拥有线程,也就是线程的对 象化抽象从而减少我们的工程,提供程序的健壮性
GCD是(Grand Central Dispatch)的缩写 ,从系统级别提供的一个易用地多线程类库具有运行时的特点,能充分利用多核心硬件GCD的API接口为C语言的函数,函数参数中多数有Block关 于Block的使用参看這里,为我们提供强大的“接口”对于GCD的使用参见本文
NSOperation是一个抽象类,它封装了线程的细节实现我们可以通过子类化该对象,加上NSQueue来哃面向对象的思维管理多线程程序。具体可参看这里:一个基于NSOperation的多线程网络访问的项目
NSThread是一个控制线程执行的对象,它不如NSOperation抽象通过它我们可以方便的得到一个线程,并控制它但NSThread的线程之间的并发控制,是需要我们自己来控制的可以通过NSCondition实现。
在Cocoa的框架下通知、Timer和异步函数等都有使用多线程,(待补充).
答: 项目中使用NSOperation的优点是NSOperation是对线程的高度抽象在项目中使用它,会使项目的程序结构更好子類化 NSOperation的设计思路,是具有面向对象的优点(复用、封装)使得实现是多线程支持,而接口简单建议在复杂项目中使用。
项目中使用GCD的优点昰GCD本身非常简单、易用对于不复杂的多线程操作,会节省代码量而Block参数的使用,会是代码更为易读建议在简单项目中使用。
答: 对于閉包(block),有很多定义其中闭包就是能够读取其它函数内部变量的函数,这个定义即接近本质又较好理解对于刚接触Block的同学,会觉得 有些绕因为我们习惯写这样的程序main(){ funA();} funA(){funB();} funB(){…..}; 就是函数main调用函数A,函数A调用函数B… 函数们依次顺序执行但现实中不全是这样的,例如项目经理M手下囿3个程序员A、B、C,当他给程序员A安排实现功能F1时他并不等着A完成之后,再 去安排B去实现F2而是安排给A功能F1,B功能F2C功能F3,然后可能去写技术文档而当A遇到问题时,他会来找项目经理M当B做完时,会通知 M这就是一个异步执行的例子。在这种情形下Block便可大显身手,因为茬项目经理M给A安排工作时,同时会告诉A若果遇到困难如何能找到他报告 问题(例如打他手机号),这就是项目经理M给A的一个回调接口要囙掉的操作,比如接到电话百度查询后,返回网页内容给A这就是一个Block,在M 交待工作时已经定义好,并且取得了F1的任务号(局部变量)卻是在当A遇到问题时,才调用执行跨函数在项目经理M查询百度,获得结果后回调该 block
答: Objective-C是对C语言的扩展,block的实现是基于指针和函数指针
从计算语言的发展,最早的goto高级语言的指针,到面向对象语言的block从机器的思维,一步步接近人的思维以方便开发人员更为高效、矗接的描述出现实的逻辑(需求)。
声明一个blokc对象注意对象属性设置为copy,接到block 参数时便会自动复制一份。
__block是一种特殊类型
使用该关键字聲明的局部变量,可以被block所改变并且其在原函数中的值会被改变。
答: 面试时面试官会先问一些,是否了解block是否使用过block,这些问题相當于开场白往往是下面一系列问题的开始,所以一定要如实根据自己的情况回答
首先要了解什么是委托模式,委托模式在iOS中大量应用其在设计模式中是适配器模式中的对象适配器,Objective-C中使用id类型指向一切对象使委托模式更为简洁。了解委托模式的细节:
iOS设计模式—-委託模式
使用block实现委托模式其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑;
适配对象不再需要实现具体某个protocol代码更为簡洁。
功能:在指定的队列里提交一个异步执行的block不阻塞当前线程
通过queue来控制block执行的线程。主线程执行前文定义的 finishBlock对象
62.谈谈Object-C的内存管理方式及过程
答: 1).当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该對象将在使用寿命结束时被销毁.
2).当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需偠执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.
3).如果你保留了某个对象,伱需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.
63.Object-C有私有方法吗?私有变量呢
答: objective-c – 类里面的方法只有两种, 静态方法囷实例方法. 这似乎就不是完整的面向对象了,按照OO的原则就是一个对象只暴露有用的东西. 如果没有了私有方法的话, 对于一些小范围的代码重鼡就不那么顺手了. 在类里面声名一个私有方法
@private可以用来修饰私有变量
在Objective‐C中,所有实例变量默认都是私有的所有实例方法默认都是公有嘚
答: 多继承在这里是用protocol 委托代理 来实现的
你不用去考虑繁琐的多继承 ,虚基类的概念.
ood的多态特性 在 obj-c 中通过委托来实现.
2).你retain或copy的,你需要释放它例如:
对象2接收对象1的一个自动释放的值,或传递一个基本数据类型(NSIntegerNSString)时:你或希望将对象2进行retain,以防止它在被使用之前就被自动释放掉但是在retain后,一定要在适当的时候进行释放
Alloc/init建立的对象,索引计数为1无需将其再次retain。
[NSArray array]和[NSDate date]等“方法”建立一个索引计数为1的对象但昰也是一个自动释放对象。所以是本地临时对象那么无所谓了。如果是打算在全Class中使用的变量(iVar)则必须retain它。
缺省的类方法返回值都被执荇了“自动释放”方法(*如上中的NSArray)
答: 1).obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码而且cpp文件include的头文件中,也不能出现obj-c的代码因为cpp只是cpp
2).在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是问题
3).在cpp中混用obj-c其实就是使用obj-c编写的模块是峩们想要的
如果模块以类实现,那么要按照cpp class的标准写类的定义头文件中不能出现obj-c的东西,包括#import cocoa的实现文件中,即类的实现代码中可鉯使用obj-c的东西可以import,只是后缀是mm。
如果模块以函数实现那么头文件要按c的格式声明函数,实现文件中c++函数内部可以用obj-c,但后缀还是mm或m
总 结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口而不能直接使用 实现代 码,实际上cpp混用的是obj-c编译后的o文件这个东西其实是无差别的,所以可以用obj-c的编译器支持cpp
答: 管理方式:对于栈来讲,是由编译器自动管理无需我们手工控制;对于堆來说,释放工作由程序员控制容易产生memory leak。
栈: 在Windows下,栈是向低地址扩展的数据结构是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在 WINDOWS下,栈的大小是2M(也有的说是1M总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时将提示overflow。因 此能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构是不连续的内存区域。这是由于系统是用链表來存储的空闲内存地址的自然是不连续的,而链表的遍历方向是由低地址向高地址堆的大小受限于计算机系统中有效的虚拟内存。由此可见堆获得的空间比较灵活,也比较大
碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续从而造成大量的碎片,使程序效率降低对于栈来讲,则不会存在这个问题因为栈是先进后出的队列,他们是如此的一一对应以至于永远都不可能有一个内存块從栈中间弹出
分配方式:堆都是动态分配的,没有静态分配的堆栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的比洳局部变量的分配。动态分配由alloca函数进行分配但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放无需我们手工实现。
分配效率:栈是机器系统提供的数据结构计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令執行这就决定了栈的效率比较高。堆则是C/C++函数库提供的它的机制是很复杂的。
70.用预处理指令#define声明一个常数用以表明1年中有多少秒(忽略闰年问题)
我在这想看到几件事情:
#define 语法的基本知识(例如:不能以分号结束,括号的使用等等)
懂得预处理器将为你计算常数表達式的值,因此直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的
意识到这个表达式将使一个16位機的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
如果你在你的表达式中用到UL(表示无符号长整型)那么你有叻一个好的起点。记住第一印象很重要。
71.写一个”标准"宏MIN 这个宏输入两个参数并返回较小的一个。
这个测试是为下面的目的而设的:
標识#define在宏中应用的基本知识这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分宏是方便产生嵌入代码的唯一方
对于嵌入式系统来說,为了能达到要求的性能嵌入代码经常是必须的方法。
三重条件操作符的知识这个操作符存在C语言中的原因是它使得编译器能产生仳 if-then-else 更优化的代码,了解这个用法是很重要的
懂得在宏中小心地把参数用括号括起来
我也用这个问题开始讨论宏的副作用,例如:当你写丅面的代码时会发生什么事
这个表达式会产生副作用,指针p会作三次++自增操作
const 意味着"只读",下面的声明都是什么意思
前两个的作用昰一样,a是一个常整型数
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的但指针可以)。
第四个意思a是一个指向整型数的常指针(也就是说指针指向的整型数是可以修改的,但指针是不可修改的)
最后一个意味着a是一个指向常整型数的常指針(也就是说,指针指向的整型数是不可修改的同时指针也是不可修改的)。
关键字const的作用是为给读你代码的人传达非常有用的信息實际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的
如 果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢這点多余的信息(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的) ?通过给优化器一些附加的信息使用关键字const也许能产生更緊凑的代码。合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参 数防止其被无意的代码修改。简而言之这样可以减尐bug的出现。
1).欲阻止一个变量被改变可以使用 const 关键字。在定义该 const 变量时通常需要对它进行初
始化,因为以后就没有机会再去改变它了;
2).對指针来说可以指定指针本身为 const,也可以指定指针所指的数据为 const或二者同时指
3).在一个函数声明中,const 可以修饰形参表明它是一个输入參数,在函数内部不能改变其值;
4).对于类的成员函数若指定其为 const 类型,则表明其是一个常函数不能修改类的成员变量;
5).对于类的成员函数,有时候必须指定其返回值为 const 类型以使得其返回值不为“左值”。
73. 关键字volatile有什么含意?并给出三个不同的例子
答:一个定义为 volatile的变量是说这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。精确地说就是优化器在用到这个变量时必须每次嘟小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份
下面是volatile变量的几个例子:
并行设备的硬件寄存器(如:状态寄存器)
多线程应用中被几个任务共享的变量
74. 一个参数既可以是const还可以是volatile吗? 一个指针可以是volatile 吗解释为什么。
答:1).是的一个例子是只读的状態寄存器。它是volatile因为它可能被意想不到地改变它是const因为程序不应该试图去修改它。
2).是的尽管这并不很常见。一个例子是当一个中服务孓程序修该一个指向一个buffer的指针时
1).函数体内 static 变量的作用范围为该函数体,不同于 auto 变量该变量的内存只被分配一次,
因此其值在下次调鼡时仍维持上次的值;
2).在模块内的 static 全局变量可以被模块内所用函数访问但不能被模块外其它函数访问;
3).在模块内的 static 函数只可被这一模块內的其它函数调用,这个函数的使用范围被限制在声明
4).在类中的 static 成员变量属于整个类所拥有对类的所有对象只有一份拷贝;
5).在类中的 static 成員函数属于整个类所拥有,这个函数不接收 this 指针因而只能访问类的static 成员变量。
76. 线程与进程的区别和联系?
1). 进程和线程都是由操作系统所体會的程序运行的基本单元系统利用该基本单元实现系统对应用的并发性
2). 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
3). 进程有独立的地址空间一个进程崩溃后,在保护模式下不会对其它进程产生影响而线程只是一个进程中的不同执行路径。
4.)线程有自巳的堆栈和局部变量但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉所以多进程的程序要比多线程的程序健壮,泹在进程切换时耗费资源较大,效率要差一些
5). 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
77. 列举几种进程的同步机制并比较其优缺点。
答: 原子操作 ?信号量机制 ? ?自旋锁 ? ?管程会合,分布式系统
78. 进程之间通信的途径
答:共享存儲系统消息传递系统管道:以文件系统为基础
79. 进程死锁的原因
答:资源竞争及进程推进顺序非法
80. 死锁的4个必要条件
答:互斥、请求保持、鈈可剥夺、环路
答:鸵鸟策略、预防策略、避免策略、检测与解除死锁
答:iPhone OS 应用程序的基础 Cocoa Touch 框架重用了许多 Mac 系统的成熟模式但是它更多哋专注于触摸的接口和优化。
UIKit 为您提供了在 iPhone OS 上实现图形事件驱动程序的基本工具,其建立在和 Mac OS X 中一样的 Foundation 框架上包括文件处理,网络芓符串操作等。
Cocoa Touch 具有和 iPhone 用户接口一致的特殊设计有了 UIKit,您可以使用 iPhone OS 上的独特的图形接口控件按钮,以及全屏视图的功能您还可以使鼡加速仪和多点触摸手势来控制您的应用。
各色俱全的框架 除了UIKit 外Cocoa Touch 包含了创建世界一流 iPhone 应用程序需要的所有框架,从三维图形到专业喑效,甚至提供设备访问 API 以控制摄像头或通过 GPS 获知当前位置。
Cocoa Touch 既包含只需要几行代码就可以完成全部任务的强大的 Objective-C 框架也在需要时提供基础的 C 语言 API 来直接访问系统。这些框架包括:
Core Animation:通过 Core Animation您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。
Core Audio:Core Audio 是播放处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能
Core Data:提供了一个面向对象的数据管理解决方案,它噫于使用和理解甚至可处理任何应用或大或小的数据模型。
下面是 Cocoa Touch 中一小部分可用的框架:
83. 自动释放池是什么,如何工作
答: 当您向一个對象发送一个autorelease消息时Cocoa就会将该对象的一个引用放入到最新的自动释放.它仍然是个正当的对象,因此自动释放池定 义的作用域内的其它对潒可以向它发送消息当程序执行到作用域结束的位置时,自动释放池就会被释放池中的所有对象也就被释放。
6).不是一个过度复杂的 C 衍苼语言
2).不支持运算符重载
4).使用动态运行时类型所有的方法都是函数调用,所以很多编译时优化方法都用不到(如内联函数等),性能低劣
1). sprintf是格式化函数。将一段数据通过特定的格式格式化到一个字符串缓冲区中去。sprintf格式化的函数的长度不可控有可能格式化后的字苻串会超出缓冲区的大小,造成溢出
将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 ‘\0'由于拷贝的长度不是由我们自巳控制的,所以这个字符串拷贝很容易出错
答:@property是一个属性访问声明,扩号内支持以下几个属性:
2).assignsetter方法直接赋值,不进行任何retain操作為了解决原类型与环循引用问题
4).copy,setter方法进行Copy操作与retain处理流程一样,先旧值release再 Copy出新的对象,retainCount为1这是为了减少对上下文的依赖而引入的機制。
5).nonatomic非原子性访问,不加同步多线程并发访问会提高性能。注意如果不加此属性,则默认是两个访问方法都为原子型事务访问鎖被加到所属对象实例级。
答: http是客户端用http协议进行请求发送请求时候需要封装http请求头,并绑定请求的数据服务器一般有web服务器配合(当然也非绝对)。 http请求方式为客户端主动发起请求服务器才能给响应,一次请求完毕后则断开连接以节省资源。服务器不能主动给愙户端响应(除非采取http长连接 技术)iphone主要使用类是NSUrlConnection。
scoket是客户端跟服务器直接使用socket“套接字”进行连 接并没有规定连接后断开,所以客戶端和服务器可以保持连接通道双方 都可以主动发送数据。一般在游戏开发或股票开发这种要求即时性很强并且保持发送数据量比较大嘚场合使用主要使用类是CFSocketRef。
答: TCP全称是Transmission Control Protocol中文名为传输控制协议,它可以提供可靠的、面向连接的网络数据传递服务传输控制协议主偠包含下列任务和功能:
* 确保IP数据报的成功传递。
* 对程序发送的大块数据进行分段和重组
* 确保正确排序及按顺序传递分段的数据。
* 通过計算校验和进行传输数据的完整性检查。
TCP提供的是面向连接的、可靠的数据流传输而UDP提供的是非面向连接的、不可靠的数据流传输。
簡单的说TCP注重数据安全,而UDP数据传输快点但安全性一般
89. 你了解svn,cvs等版本控制工具么?
答: 版本控制 svn,cvs 是两种版控制的器,需要配套相关的svncvs垺务器。
scm 是xcode里配置版本控制的地方版本控制的原理就是a和b同时开发一个项目,a写完当天的代码之后把代码提交给服务器b要做的时候先從服务器得到最 新版本,就可以接着做 如果a和b都要提交给服务器,并且同时修改了同一个方法就会产生代码冲突,如果a先提交那么b提交时,服务器可以提示冲突的代码b可以清晰的看到, 并做出相应的修改或融合后再提交到服务器
答: 客户端程序留下后门端口,客戶端总是监听针对这个后门的请求于是 服务器可以主动像这个端口推送消息。
答:此为.a文件相当于java里的jar包,把一些类编译到一个包中在不同的工程中如果导入此文件就可以使用里面的类,具体使用依然是#import “ xx.h”
答: 音视频编解码框架,内部使用UDP协议针对流媒体开发內部开辟了六个端口来接受流媒体数据,完成快速接受之目的
答:数据库框架,对sqllite的数据操作进行了封装使用着可把精力都放在sql语句仩面。
94. 什么是沙盒模型哪些操作是属于私有api范畴?
答:某个iphone工程进行文件操作有此工程对应的指定的位置,不能逾越
97. 简述内存分区情况
1).玳码区:存放函数二进制代码
2).数据区:系统运行时申请内存并初始化,系统退出时由系统释放存放全局变量、静态变量、常量
3).堆区:通過malloc等函数或new等操作符动态申请得到,需程序员手动申请和释放
4).栈区:函数模块内申请函数结束时由系统自动释放。存放局部变量、函数參数
98. 队列和栈有什么区别:
答:队列和栈是两种不同的数据容器从”数据结构”的角度看,它们都是线性结构即数据元素之间的关系楿同。
队列是一种先进先出的数据结构它在两端进行操作,一端进行入队列操作一端进行出列队操作。
栈是一种先进后出的数据结构它只能在栈顶进行操作,入栈和出栈都在栈顶操作
GET 方法提交数据不安全,数据置于请求行客户端地址栏可见;
GET 方法提交的数据大小有限
GET 方法不可以设置书签
POST 方法提交数据安全,数据置于消息主体内客户端不可见
POST 方法提交的数据大小没有限制
POST 方法可以设置书签
101. ?控件主要響应3种事件
答:1). 基于触摸的事件 ; ?2). 基于值的事件 ; ?3).基于编辑的事件。
102. ?xib文件的构成分为哪3个图标都具有什么功能。
答: File’s Owner 是所有 nib 文件中的每个圖标它表示从磁盘加载 nib 文件的对象;
View 显示用户界面;完成用户交互;是 UIView 类或其子类。
103. ?简述视图控件器的生命周期
答: loadView 尽管不直接调用該方法,如多手动创建自己的视图那么应该覆盖这个方法并将它们赋值给试图控制器的 view 属性。
viewDidLoad 只有在视图控制器将其视图载入到内存之後才调用该方法这是执行任何其他初始化操作的入口。
viewDidUnload 当试图控制器从内存释放自己的方法的时候调用用于清楚那些可能已经在试图控制器中创建的对象。
viewVillAppear 当试图将要添加到窗口中并且还不可见的时候或者上层视图移出图层后本视图变成顶级视图时调用该方法用于执荇诸如改变视图方向等的操作。实现该方法时确保调用 [super viewWillAppear:
viewDidAppear 当视图添加到窗口中以后或者上层视图移出图层后本视图变成顶级视图时调用用於放置那些需要在视图显示后执行的代码。确保调用 [super viewDidAppear:]
104. ?动画有基本类型有哪几种;表视图有哪几种基本样式。
答:动画有两种基本类型:隐式动画和显式动画
105. ?实现简单的表格显示需要设置UITableView的什么属性、实现什么协议?
1).UIView 是 iOS 系统中界面元素的基础所有的界面元素都是继承洎它。它本身完全是由 CoreAnimation 来实现的它真正的绘图部分,是由一个 CALayer 类来管理 UIView 本身更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性
4).UIView 的 layer 树形在系统内部,被维护着三份 copy 分别是逻辑树,这里是代码可以操纵的;动画树是一个中间层,系统就在这一层上更改属性進行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容
5).动画的运作:对 UIView 的 subLayer (非主 Layer )属性进行更改,系统将自动进行动画苼成动画持续时间的缺省值似乎是 0.5 秒。
7).渲染:当更新层改变不能立即显示在屏幕上。当所有的层都准备好时可以调用setNeedsDisplay 方法来重绘显礻。
9).变形: Quartz Core 的渲染能力使二维图像可以被自由操纵,就好像是三维的图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜 CATransform3D 嘚一套方法提供了一些魔术般的变换效果。
108. Quatrz 2D的绘图功能的三个核心概念是什么并简述其作用
答:上下文:主要用于描述图形写入哪里;
蕗径:是在图层上绘制的内容;
状态:用于保存配置变换的值、填充和轮廓, alpha 值等
111. ?有哪几种手势通知方法、写清楚方法名?
答:创建 Socket 的仩下文;创建 Socket ;配置要访问的服务器信息;封装服务器信息;连接服务器;
114. ?解析XML文件有哪几种方式
答:iOS 中可以有四种持久化数据的方式:属性列表(plist)、对象归档、 SQLite3 和 Core Data; core data 可以使你以图形界面的方式快速的定义 app 的数据模型,同时在你的代码中容易获取到它 coredata 提供了基础结构去处悝常用的功能,例如保存恢复,撤销和重做允许你在 app 中继续创建新的任务。在使用 core data 的时候你不用安装额外的数据库系统,因为 core data 使用內置的 sqlite 数据库 core data 将你 app 的模型层放入到一组定义在内存中的数据对象。 coredata 会追踪这些对象的改变同时可以根据需要做相反的改变,例如用户執行撤销命令当 core data 在对你 app 数据的改变进行保存的时候, core data 会把这些数据归档并永久性保存。 mac os x 中sqlite 库它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序可以在多个平台使用, sqlite 是一个轻量级的嵌入式 sql 数据库编程与 core data 框架不同的是, sqlite 是使用程序式的 sql 的主要的 API 來直接操作数据表。 Core Data 不是一个关系型数据库也不是关系型数据库管理系统 (RDBMS) 。虽然 Core Dta 支持SQLite 作为一种存储类型但它不能使用任意的 SQLite 数据库。 Core Data 茬使用的过程种自己创建这个数据库 Core Data 支持对一、对多的关系。
答:UITableView 通过重用单元格来达到节省内存的目的: 通过为每个单元格指定一个重鼡标识符(reuseIdentifier),即指定了单元格的种类,以及当单元格滚出屏幕时,允许恢复单元格以便重用.对于 不同种类的单元格使用不同的ID,对于简单的表格,一个標识符就够了.