为什么这道题和书上的题是镜像的呢?

1. iOS开发中的加密方式

  • 加密和解密使用同一个密钥。
  • 加密解密过程:明文->密钥加密->密文,密文->密钥解密->明文。
  • 优点:算法公开、计算量少、加密速度快、加密效率高、适合大批量数据加密;
  • 缺点:双方使用相同的密钥,密钥传输的过程不安全,易被破解,因此为了保密其密钥需要经常更换。

AES:AES又称高级加密标准,是下一代的加密算法标准,支持128、192、256位密钥的加密,加密和解密的密钥都是同一个。iOS一般使用ECB模式,16字节128位密钥。
AES算法主要包括三个方面:轮变化、圈数和密钥扩展。
优点:高性能、高效率、灵活易用、安全级别高。
缺点:加密与解密的密钥相同,所以前后端利用AES进行加密的话,如何安全保存密钥就成了一个问题。

DES:数据加密标准,DES算法的入口参数有三个:Key、Data、Mode。
其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密、解密。
缺点:与AES相比,安全性较低。

3DES:3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。是DES向AES过渡的加密算法,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

  1. 非对称加密:RSA加密
  • 非对称加密算法需要成对出现的两个密钥,公开密钥(publickey) 和私有密钥(privatekey) 。
  • 加密解密过程:对于一个私钥,有且只有一个与之对应的公钥。生成者负责生成私钥和公钥,并保存私钥,公开公钥。
    公钥加密,私钥解密;或者私钥数字签名,公钥验证。公钥和私钥是成对的,它们互相解密。

1). 对信息保密,防止中间人攻击:将明文通过接收人的公钥加密,传输给接收人,因为只有接收人拥有对应的私钥,别人不可能拥有或者不可能通过公钥推算出私钥,所以传输过程中无法被中间人截获。只有拥有私钥的接收人才能阅读。此方法通常用于交换对称密钥
2). 身份验证和防止篡改:权限狗用自己的私钥加密一段授权明文,并将授权明文和加密后的密文,以及公钥一并发送出来,接收方只需要通过公钥将密文解密后与授权明文对比是否一致,就可以判断明文在中途是否被篡改过。此方法用于数字签名。

  • 优点:加密强度小,加密时间长,常用于数字签名和加密密钥、安全性非常高、解决了对称加密保存密钥的安全问题。
  • 缺点:加密解密速度远慢于对称加密,不适合大批量数据加密。
  1. 哈希算法加密:MD5加密、.SHA加密、HMAC加密
  • 哈希算法加密是通过哈希算法对数据加密,加密后的结果不可逆,即加密后不能再解密。
  • 特点:不可逆、算法公开、相同数据加密结果一致。
  • 作用:信息摘要,信息“指纹”,用来做数据识别的。如:用户密码加密、文件校验、数字签名、鉴权协议。

MD5加密:对不同的数据加密的结果都是定长的32位字符。

.SHA加密:安全哈希算法,主要适用于数字签名标准(DSS)里面定义的数字签名算法(DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。当然除了SHA1还有SHA256以及SHA512等。

HMAC加密:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32位字符串。

  • 一种编码方式,严格意义上来说不算加密算法。其作用就是将二进制数据编码成文本,方便网络传输。

  • 用 base64 编码之后,数据长度会变大,增加了大约 1/3,但是好处是编码后的数据可以直接在邮件和网页中显示;

  • 虽然 base64 可以作为加密,但是 base64 能够逆运算,非常不安全!

  • base64 编码有个非常显著的特点,末尾有个 ‘=’ 号。

  • 1). 将所有字符转化为ASCII码;
    3). 将二进制三位一组不足补0,共24位,再拆分成6位一组共四组;
    4). 统一在6位二进制前补两个0到八位;
    5). 将补0后的二进制转为十进制;
    6). 最后从Base64编码表获取十进制对应的Base64编码。

2. App安全,数字签名,App签名,重签名

因为应用实际上是一个加壳的ipa文件,但是有可能被砸壳甚至越狱手机下载的ipa包直接就是脱壳的,可以直接反编译,所以不要在plist文件、项目中的静态文件中存储关键的信息。所以敏感信息对称加密存储或者就存储到keychain里。而且加密密钥也要定期更换。

数字签名是通过HASH算法RSA加密来实现的。
我们将明文数据加上通过RSA加密的数据HASH值一起传输给对方,对方可以解密拿出HASH值来进行验证。这个通过RSA加密HASH值数据,我们称之为数字签名。

  1. 在Mac开发机器上生成一对公钥和私钥,这里称为公钥L,私钥L(L:Local)。
  2. 苹果自己有固定的一对公钥和私钥,私钥在苹果后台,公钥在每个iOS设备上。这里称为公钥A,私钥A(A:Apple)。
  3. 开发机器上的公钥L传到苹果后台,用苹果后台的私钥A去签名公钥L。得到一个包含公钥L以及其签名数据证书。
  4. 在苹果后台申请AppID,配置好设备ID列表APP可使用的权限,再加上第③步的证书,组成的数据用私钥A签名,把数据和签名一起组成一个Provisioning Profile描述文件,下载到本地Mac开发机器
  5. 在安装时,iOS系统取得证书,通过系统内置的公钥A,去验证embedded.mobileprovision数字签名是否正确,里面的证书签名也会再验一遍。
  6. 确保了embedded.mobileprovision里的数据都是苹果授权的以后,就可以取出里面的数据,做各种验证,包括用公钥 L 验证APP签名,验证设备 ID 是否在 ID 列表上,AppID 是否对应得上,权限开关是否跟 APP 里的 Entitlements 对应等。
  • C语言基本数据类型(如short、int、float等)在OC中都不是对象,只是一定字节的内存空间用于存储数值,他们都不具备对象的特性,没有属性方法可以被调用。
  • OC中的基本数据类型:
    • 他们并不是类,只是用typedef对基本数据类型进行了重定义,他们依然只是基本数据类型
  • 枚举类型:其本质是无符号整数。

指针数据类型包括:类class、id。

  • id:id是指向Objective-C对象的指针,等价于C语言中的void*,可以映射任何对象指针指向他,或者映射它指向其他的对象。常见的id类型就是类的delegate属性。
  • 都是存储不同的对象的地址;
  • 但是NSArray是有序的集合,NSSet是无序的集合,它们俩可以互相转换。
  • NSSet会自动删除重复元素。
  • 集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。

构造类型包括:结构体、联合体

  • 结构体:struct,将多个基本数据类型的变量组合成一个整体。结构体中访问内部成员用点运算符访问。
  • 联合体(共用体):union,有些类似结构体struct的一种数据结构,联合体(union)和结构体(struct)同样可以包含很多种数据类型和变量。

结构体和联合体的区别:

  • 结构体(struct)中所有变量是“共存”的,同一时刻每个成员都有值,其sizeof为所以成员的和。
    优点:是“有容乃大”,全面;
    缺点:是struct内存空间的分配是粗放的,不管用不用,全分配,会造成内存浪费。
  • 联合体(union)中各变量是“互斥”的,同一时刻只有一个成员有值,其sizeof为最长成员的sizeof。
    优点:是内存使用更为精细灵活,也节省了内存空间。
    缺点:就是不够“包容”,修改其中一个成员时会覆盖原来的成员值;

我们每次增加一个属性时内部都做了什么:
1.系统都会在 ivar_list 中添加一个成员变量的描述;
3.在属性列表中增加一个属性的描述;
4.然后计算该属性在对象中的偏移量;
5.给出 settergetter 方法对应的实现,在 setter 方法中从偏移量的位置开始赋值,在 getter 方法中从偏移量开始取值,为了能够读取正确字节数,系统对象偏移量的指针类型进行了类型强转。

assign:用于基本数据类型,不更改引用计数。如果修饰对象(对象在堆需手动释放内存,基本数据类型在栈系统自动释放内存),会导致对象释放后指针不置为nil 出现野指针。
retain:和strong一样,释放旧对象,传入的新对象引用计数+1;在MRC中和release成对出现。
strong:在ARC中使用,告诉系统把这个对象保留在堆上,直到没有指针指向,并且ARC下不需要担心引用计数问题,系统会自动释放。
weak:在被强引用之前,尽可能的保留,不改变引用计数;weak引用是弱引用,你并没有持有它;它本质上是分配一个不被持有的属性,当引用者被销毁(dealloc)时,weak引用的指针会自动被置为nil。可以避免循环引用。
后者的值跟着变化。还有block也经常使用 copy 修饰符,但是其实在ARC中编译器会自动对block进行copy操作,和strong的效果是一样的。但是在MRC中方法内部的block是在栈区,使用copy可以把它放到堆区。
readonly:只读;会告诉编译器不用自动生成setter方法。属性不能被赋值。
nonatomic:非原子性访问。用nonatomic意味着可以多线程访问变量,会导致读写线程不安全。但是会提高执行性能。
atomic:原子性访问。编译器会自动生成互斥锁,对 setter 和 getter 方法进行加锁来保证属性的 赋值和取值 原子性操作是线程安全的,但不包括可变属性的操作和访问。比如我们对数组进行操作,给数组添加对象或者移除对象,是不在atomic的负责范围之内的,所以给被atomic修饰的数组添加对象或者移除对象是没办法保证线程安全的。原子性访问的缺点是会消耗性能导致执行效率慢。
nonnull:设置属性或方法参数不能为空,专门用来修饰指针的,不能用于基本数据类型。
nullable:设置属性或方法参数可以为空。
null_resettable:设置属性,get方法不能返回为空,set方法可以赋值为空。
_Null_unspecified:设置属性或方法参数不确定是否为空。
后四个属性应该主要就是为了提高开发规范,提示使用的人应该传什么样的值,如果违反了对规范值的要求,就会有警告。

weak修饰的对象释放则自动被置为nil的实现原理:
Runtime维护了一个weak表,存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组(这个地址的值是所指对象的地址)。

weak 的实现原理可以概括一下三步:
1、初始化时:runtime会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址。
3、释放时,调用clearDeallocating函数。clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。

分两种情况:手动干预释放时机系统自动释放
手动干预释放时机:手动指定 autoreleasepool 的 autorelease 对象,在当前作用域大括号结束时释放。
系统自动释放:不手动指定 autoreleasepool 的 autorelease 对象,出了作用域之后,会被添加到最近一次创建的自动释放池中,并会在当前的 runloop 迭代结束时释放。而它能够释放的原因是系统在每个 runloop 迭代中都加入了自动释放池 Push 和 Pop。一个典型的例子是在一个类方法中创建一个对象并作为返回值,这时就需要将该对象放置到对应的 autoreleasepool 中。

5. 成员变量ivar和属性property的区别,以及不同关键字的作用

成员变量:成员变量的默认修饰符是@protected、不会自动生成set和get方法,需要手动实现、不能使用点语法调用,因为没有set和get方法,只能使用->
属性:属性会默认生成带下划线的成员变量和setter/getter方法、可以用点语法调用,实际调用的是set和get方法。
注意:分类中添加的属性是不会自动生成 setter/getter方法的,必须要手动添加。
实例变量:class类进行实例化出来的对象为实例对象

  • @public:声明公共实例变量,在任何地方都能直接访问对象的成员变量。
    @private:声明私有实例变量,只能在当前类的对象方法中直接访问,子类要访问需要调用父类的get/set方法。
    @protected:可以在当前类及其子类对象方法中直接访问(系统默认)。
    @package:在同一个包下就可以直接访问,比如说在同一个框架。
  • 类簇是Foundation框架中广泛使用的设计模式。类簇在公共抽象超类下对多个私有的具体子类进行分组。以这种方式对类进行分组简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。类簇是基于抽象工厂设计模式的

以数组为例:不管创建的是可变还是不可变的数组,在alloc之后得到的类都是 __NSPlaceholderArray。而当我们 init 一个不可变的空数组之后,得到的是__NSArray0;如果有且只有一个元素,那就是

  • 可以将抽象基类背后的复杂细节隐藏起来。
  • 程序员不会需要记住各种创建对象的具体类实现,简化了开发成本,提高了开发效率。
  • 便于进行封装和组件化。
  • 减少了 if-else 这样缺乏扩展性的代码。
  • 增加新功能支持不影响其他代码。
  • 已有的类簇非常不好扩展。
  1. 出现 bug 时,可以通过崩溃报告中的类簇关键字,快速定位 bug 位置。
  2. 在实现一些固定且并不需要经常修改的事物时,可以高效的选择类簇去实现。例:
    • 针对不同版本,不同机型往往需要不同的设置,这时可以选择使用类簇。
    • app 的设置页面这种并不需要经常修改的页面,可以使用类簇去创建大量重复的布局代码。
  • 单例模式:在整个应用程序中,共享一份资源。保证在程序运行过程中,一个类只有一个实例,而且该实例只提供一个全局访问点供外界访问,从而方便控制实例个数,节约系统资源。
    优点是:提供了对唯一实例的受控访问、可扩展、避免频繁创建销毁对象影响性能。
    缺点是:延长了声明周期,一直存在占用内存。如果两个单例循环依赖会造成死锁,所以尽量不去产生单例间的依赖关系。
  • 工厂方法模式:通过类继承创建抽象产品,创建一种产品,子类化创建者并重载工厂方法以创建新产品。
  • 抽象工厂模式:通过对象组合创建抽象产品,可以创建多系列产品,必须修改父类的接口才能支持新的产品。
  • 代理模式:代理用来处理事件的监听和参数传递。@required修饰必须实现这个协议方法方法,@optional修饰是可选实现。使用方法时最好先判断方法是否实现respondsToSelector:,避免找不到方法而崩溃。
    delegate和block、Notification对比优缺点:delegate和block是一对一通信、block比delegate更加简洁清晰,但是如果通信事件较多时delegate运行成本较低且不易造成循环引用;通知适合一对多通信,代码清晰简单,但问题查找溯源会比较困难,并且注册通知要注意在合适的时间移除,避免对野指针发送消息引起崩溃(注意:iOS9之后已经做了弱引用处理不需要移除了,之前版本使用不安全引用__unsafe_unretained是为了兼容旧版本)。
  • 类簇:见上边 5. 类簇
  • 装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。如:分类
  • 享元模式:使用共享物件,减少同一类对象的大量创建。如:UITableviewCell复用。
  • 观察者模式:其本质上是一种发布-订阅模型,用来消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作。如:KVO
  • 命令模式:是一种将方法调用封装为对象的设计模式,在iOS中具体实现为NSInvocation。下边为NSInvocation的实现代码。
// 注意:设置参数的索引时不能从0开始,因为0已经被self占用,1已经被_cmd占用 注:调用invocation的invoke方法,就代表需要执行NSInvocation对象中指定对象的指定方法,并且传递指定的参数
  • M 是数据模型Model,负责处理数据,以及数据改变时发出通知(Notification、KVO),Model和View不能直接进行通信,这样会违背MVC设计模式;
  • V 是视图View,用来展示界面,和用户进行交互,为了解耦合一般不会直接持有 或者 操作数据层中的数据模型(可以通过action-targetdelegateblock等方式解耦);

优点:View、Model低耦合、高复用、容易维护。
缺点:Controller的代码过于臃肿,如果View与Model直接交互会导致View和Model之间的耦合性比较大、网络逻辑会加重Controller的臃肿。

  • MVVM衍生于MVC,是MVC的一种演进,促进了UI代码和业务逻辑的分离,抽取Controller中的展示逻辑放到ViewModel里边。
  • VM:ViewModel负责封装业务逻辑、网络处理和数据缓存。使用ViewModel会轻微的增加代码量,但是总体上减少了代码的复杂性。ViewModel之间可以有依赖。
  • View引用ViewModel,但反过来不行,因为如果VM跟V产生了耦合,不方便复用。即不要在viewModel中引入#import UIKit.h,任何视图本身的引用都不应该放在viewModel中 (注意:基本要求,必须满足)。

低耦合、可复用、数据流向清晰、而且兼容MVC,便于代码的移植、并且ViewModel可以拆出来独立开发、方便测试。
类会增多、ViewModel会越来越庞大、调用复杂度增加、双向绑定数据会导致问题调试变得困难。

  • MVVM其实是MVC的变种。MVVM只是帮MVC中的Controller瘦身,把一些逻辑代码和网络请求分离出去。不让Controller处理更多的东西,不会变得臃肿,MVVM和MVC可以根据实际需求进行灵活选择。
  • MVVM 在使用当中,通常还会利用双向绑定技术,使得Model 变化时,ViewModel会自动更新,而ViewModel变化时,View 也会自动变化。OC中可以用RAC(ReactiveCocoa)函数响应式框架来实现响应式编程。
  • ReactiveCocoa简称RAC,是函数响应式编程框架,因为它具有函数式编程和响应式编程的特性。
  • 由于该框架的编程思想,使得它具有相当魅惑人心的功能,它能实现传统设计模式和事件监听所能实现的功能,比如KVO、通知、block回调、action、协议等等,它的全面性并不是它最为优越的特色,RAC最值得炫耀的是它提供了统一的消息传递机制,这种机制使得它的代码更加的简洁,同一功能代码块更少,这正是符合了我们编程的思想:高聚合、低耦合,它非常适合MVVM设计模式的开发。
  • 不过它也并不能完全取代传统的编码方式,在多人开发和代码维护方面,RAC还是有着一些让人头痛的问题。

优点:使用灵活方便、代码简洁、逻辑清晰
缺点:维护成本较高、问题溯源困难

RAC的统一消息传递机制,其所以动作都离不开信号(sigal)
1). 信号的创建、发送、接收

// 创建 此时为冷信号,并不会被触发
 // 回收资源。注意:手动创建一个signal一定要记得回收资源,不然程序会崩溃
// 订阅信号后才会变为热信号,可以被触发

这个方法可以简单的实现监听操作,并且逻辑在其后的block中处理,而且也能添加手势并进行监听。

相当于枚举遍历,但是效率相比更高

② 对信号进行过滤(filter)
可以对信号进行条件判断是否处理。

③ 对信号进行映射(map)
映射也可以理解为转换,第一个block返回的是id类型,如果返回"map now",就相当于信号转换,第二个block打印的值就是你return的值"map now"

// 创建需要联合的信号
 // 这里进行信号逻辑判断和处理

10. 类的继承,类能否多继承,协议能不能做继承

  • OC的类不支持多继承只支持单继承。
  • 协议可以实现多继承,遵循多个协议即可。
  • 消息的转发也可以实现多继承,但并不建议,维护成本高。

继承和类别在实现中有何区别?

  • category 可以在不获悉、不改变原来代码的情况下往里面添加并且只能添加方法不能删除修改。 如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别不会影响到其他类与原有类的关系。
  • (1)将类的实现分散到多个不同文件或多个不同框架中。
    (2)创建对私有方法的前向引用。
    (3)向对象添加非正式协议。
  • 继承可以增加,修改或者删除方法,并且可以增加属性。
  • Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息。在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)。
  • 类扩展可以为类添加私有变量和私有方法,在类的源文件中书写,不能被子类继承,类扩展在编译的时候,它的数据就已经包含在类信息中。
  • 分类可以为类添加方法并且可以被子类继承,因为分类是运行时才会将数据合并到类信息中。但是分类不能直接添加属性,需要借助运行时关联对象。

3). 分类为啥不能添加成员变量?

  • 从结构体可以知道,有属性列表,所以分类可以声明属性,但是分类只会生成该属性对应的get和set的声明,没有去实现该方法。
  • 结构体没有成员变量列表,所以不能声明成员变量。

weak:该属性定义了一种非拥有关系。为属性设置新值时,设置方法既不持有新值,也不释放旧值。

  1. 当一个对象被weak指针指向时,这个weak指针会以对象为key,存储到sideTable类weak_table散列表上对应的一个weak指针数组里面。

keyweak指向的对象内存地址value所有指向该对象的weak指针表

进程:是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建。
线程:是程序执行的最小单位,是进程的一个执行流,一个进程由多个线程组成。
一个进程中并发执行多个线程,叫做多线程。在一个时间片内,CPU只能处理一个线程中的一个任务,对于一个单核CPU来说,在不同的时间片来执行不同线程中的任务,就形成了多个任务在同时执行的“假象”。

  1. NSThread苹果封装的面向对象的线程类,可以直接操作线程,比起GCD,NSThread效率更高,由程序员自行创建,当线程中的任务执行完毕后,线程会自动退出,程序员也可手动管理线程的生命周期。使用频率较低。
  2. Dispatch,由C语言实现,是苹果为多核并行运算提出的解决方案,CGD会自动利用更多的CPU内核,自动管理线程的生命周期,程序员只需要告诉GCD需要执行的任务,无需编写任何管理线程的代码。GCD也是iOS使用频率最高的多线程技术。
  1. GCD仅仅支持先进先出FIFO队列,不支持异步操作之间的依赖关系设置。而NSOperation中的队列可以被重新设置优先级,从而实现不同操作的执行顺序调整。
  2. NSOperation支持KVO,可以观察任务的执行状态。
  3. GCD更接近底层,GCD在追求性能的底层操作来说,是速度最快的。
  4. 从异步操作之间的事务性,顺序行,依赖关系。GCD需要自己写更多的代码来实现,而NSOperation已经内建了这些支持。
  5. 如果异步操作的过程需要更多的被交互和UI呈现出来,NSOperation更好。底层代码中,任务之间不太互相依赖,而需要更高的并发能力,GCD则更有优势。
  • 使用线程执行任务的时候,需要到线程池中去取线程进行任务分配。
  • 首先判断线程池大小是否小于核心线程池大小,如果小于的话,创建新的线程执行任务;
  • 如果当前小城池大小大于了核心线程池大小,然后开始判断工作队列是否已满,如果没满,将任务提交到工作队列。
  • 如果工作队列已满,判断线程池的线程是否都在工作,如果有空闲线程没有在工作,就交给它去执行任务。
  • 如果线程池中的线程都在工作,那么就交给饱和策略去执行。

饱和策略分为下面四种:

直接同步或者异步向任务队列添加任务。
通过NSPort端口的形式进行发送消息,实现不同的线程间的通信。使用的时候注意需要将NSPort加入的线程的RunLoop中去。

  • 直接消息传递:通过performSelector的一系列方法,可以实现由某一线程指定在另外的线程上执行任务。因为任务的执行上下文是目标线程,这种方式发送的消息将会自动的被序列化。
  • 全局变量、共享内存块和对象:在两个线程之间传递信息的另一种简单方法是使用全局变量,共享对象或共享内存块。尽管共享变量既快速又简单,但是它们比直接消息传递更脆弱。必须使用锁或其他同步机制仔细保护共享变量,以确保代码的正确性。 否则可能会导致竞争状况,数据损坏或崩溃。
  • 条件执行:条件是一种同步工具,可用于控制线程何时执行代码的特定部分。您可以将条件视为关守,让线程仅在满足指定条件时运行。
  • Runloop sources:一个自定义的Runloop source配置可以让一个线程上收到特定的应用程序消息。由于Runloop source事件驱动的,因此在无事可做时,线程会自动进入睡眠状态,从而提高了线程的效率。
  • Ports and sockets:基于端口的通信是在两个线程之间进行通信的一种更为复杂的方法,但它也是一种非常可靠的技术。更重要的是,端口和套接字可用于与外部实体(例如其他进程和服务)进行通信。为了提高效率,使用Runloop source来实现端口,因此当端口上没有数据等待时,线程将进入睡眠状态。
  • 消息队列:传统的多处理服务定义了先进先出(FIFO)队列抽象,用于管理传入和传出数据。尽管消息队列既简单又方便,但是它们不如其他一些通信技术高效。
  • Cocoa 分布式对象:分布式对象是一种 Cocoa 技术,可提供基于端口的通信的高级实现。尽管可以将这种技术用于线程间通信,但是强烈建议不要这样做,因为它会产生大量开销。分布式对象更适合与其他进程进行通信,尽管在这些进程之间进行事务的开销也很高。

线程安全就是在同一时刻,对同一个数据操作的线程只有一个。这时就用到了锁。

  • 锁:是保证线程安全的同步工具。每一个线程在访问数据资源之前,要先获取(acquire)锁,然后在访问结束之后释放(release)锁。如果锁已经被占用,其它要获取锁的线程会等待,直到锁重新可用。
  • iOS中的锁分为互斥锁自旋锁信号量这三种。
    互斥锁:就是在多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写。
  • 调用synchronzied的每个对象,runtime都会为其分配一个递归锁并存储在哈希表中。
  • 注意不要像synchronzied传入nil , 这将会从代码中移走线程安全。

是在指定Date之前尝试加锁,如果在指定时间之前都不能加锁,则返回NO。注意不能多次调用lock方法,会造成死锁。

自旋锁:线程会反复检查锁变量是否可用,线程在这一过程中保持执行,是一种忙等待,一旦获取了自旋锁,线程会一直保持该锁,直至显式释放自旋锁,自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。atomic就是通过个set和get方法添加一个自旋锁。

  • Runloop sources:一个自定义的Runloop source配置可以让一个线程上收到特定的应用程序消息。由于Runloop source事件驱动的,因此在无事可做时,线程会自动进入睡眠状态,从而提高了线程的效率。
    > - Ports and sockets:基于端口的通信是在两个线程之间进行通信的一种更为复杂的方法,但它也是一种非常可靠的技术。更重要的是,端口和套接字可用于与外部实体(例如其他进程和服务)进行通信。为了提高效率,使用Runloop source来实现端口,因此当端口上没有数据等待时,线程将进入睡眠状态。
    > - 消息队列:传统的多处理服务定义了先进先出(FIFO)队列抽象,用于管理传入和传出数据。尽管消息队列既简单又方便,但是它们不如其他一些通信技术高效。
    > - Cocoa 分布式对象:分布式对象是一种 Cocoa 技术,可提供基于端口的通信的高级实现。尽管可以将这种技术用于线程间通信,但是强烈建议不要这样做,因为它会产生大量开销。分布式对象更适合与其他进程进行通信,尽管在这些进程之间进行事务的开销也很高。

    > 线程安全就是在同一时刻,对同一个数据操作的线程只有一个。这时就用到了锁。
    > - 锁:是保证线程安全的同步工具。每一个线程在访问数据资源之前,要先获取(acquire)锁,然后在访问结束之后释放(release)锁。如果锁已经被占用,其它要获取锁的线程会等待,直到锁重新可用。
    >> - iOS中的锁分为互斥锁自旋锁信号量这三种。
    >> 互斥锁:就是在多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写。
    是在指定Date之前尝试加锁,如果在指定时间之前都不能加锁,则返回NO。注意不能多次调用lock方法,会造成死锁。
    >> 自旋锁:线程会反复检查锁变量是否可用,线程在这一过程中保持执行,是一种忙等待,一旦获取了自旋锁,线程会一直保持该锁,直至显式释放自旋锁,自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。atomic就是通过个set和get方法添加一个自旋锁。
    互斥锁是 dispatch_semaphore在取值0/1时的特例。信号量可以有更多的取值空间,用来实现更加复杂的同步,而不仅仅是线程间互斥。

15. 通知,能不能跨线程

不能跨线程,在哪个线程发送的通知,就会在哪个线程接收。所以需要手动切换到主线程更新UI。

  • 测试过程:发出通知的线程决定接收通知处理代码线程
    主线程发通知 — 子线程监听通知:接收通知代码在主线程处理
    子线程发通知 — 主线程监听通知:接收通知代码在子线程处理

16. 网络TCP协议,三次握手

TCP是传输控制协议,具有面向连接、可靠传输、点到点通信、全双工服务等特点,TCP侧重可靠传输。
UDP是用户数据报协议,具有非连接的、不可靠的、点到多点的通信等特点,UDP侧重快速传输。

TCP/IP协议:TCP/IP不是一个协议,而是一个协议簇的统称。通常使用的网络是在TCP/IP协议簇的基础上运行的。应用层HTTPDNSFTP传输层TCP(传输控制协议)、UDP(用户数据报协议),网络层IP等等都属于它内部的一个子集。

序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。

TCP是面向连接的协议,建立连接需要经过三次握手
1.首先客户端将标志位SYN置为1,然后随机产生一个序号seq=J,将数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认。
2.服务器收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1确认序号ack=J+1,随机产生一个序号seq=K,并将该数据包发送给服务端确认连接请求,服务端进入SYN_RCVD状态。
3.客户端收到确认后,检查确认序号ack是否为J+1标志位ACK是否为1,确认正确后将标志位ACK=1确认序号ack=K+1数据包发送给服务端,服务端检查标志位ACK为1确认序号ack=K+1成功后,客户端和服务端进入ESTABLISHED(建立连接)状态,完成三次握手,两端可以进行数据传输。

TCP断开连接需要经过四次挥手
1.首先客户端向服务端发送释放连接的标志位 FIN,客户端进入FIN_WAIT_1状态,等待服务端确认。
2.服务端收到标志位FIN后发送确认标志位ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。
3.服务端发送自己的释放连接的标志位 FIN。服务端进入LAST_ACK状态。
4.客户端收到标志位FIN后进入TIME_WAIT状态,然后发送一个确认标志位ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

客户端进入TIME_WAIT状态而不是直接进入CLOSED状态是因为:我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

为什么不能用两次握手进行连接?
因为三次握手是为了双方都知道彼此已做好准备,如果改成两次握手,会发生死锁。假设客户端给服务端发送连接请求,服务端收到后发送确认连接给客户端,如果两次握手的话此时服务端会认为已经建立了连接,可以发送数据了,但是如果确认连接数据丢失,客户端还不知道已经建立了连接,会一直等待确认连接序号,导致数据传输超时,服务端重复发送同样的数据,造成死锁。

为什么是四次挥手而不是三次?
因为TCP是全双工连接,关闭连接需要双向确认关闭才算是真正的关闭,否则未关闭一方仍可以继续发送数据。

HTTPS是身披SSL外壳的HTTP,是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包。

  1. 客户端向服务端发送请求,然后连接到server的443端口
  2. 服务端本身是要有一套数字证书的,这套证书其实就是一对公钥和私钥
    服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
  3. 服务端把证书(公钥)传送给客户端
    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
  4. 客户端解析证书,验证无误后用证书加密一个随机生成的值(秘钥)
    这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(秘钥)。然后用证书对该随机值进行加密。
  5. 客户端传送加密后的秘钥给服务端
    这部分传送的是用证书加密后的秘钥,目的就是让服务端得到这个秘钥,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务端用私钥解密随机值,然后通过该值对称加密信息
    服务端用私钥解密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。
  7. 再传输加密后的信息给客户端
    这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
  8. 因为是对称加密,客户端可以解密信息
    客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。
  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的。
  • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
  • Socket是抽象层,并不是一个协议,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输层(TCP/UDP)之间的一组接口。
  • WebSocket和HTTP一样,都是应用层协议,是基于TCP 连接实现的双向通信协议,替代HTTP轮询的一种技术方案。是全双工通信协议,HTTP是单向的,注意WebSocket和Socket是完全不同的两个概念。
    • WebSocket建立连接时通过HTTP传输,但是建立之后,在真正传输时候是不需要HTTP协议的。
    • 相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 Socket 的 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。
    • 1.浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。
      2.TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手)
      3.服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。
      4.当收到了连接成功的消息后,通过TCP通道进行传输通信。
  • Socket.IO 是一个为浏览器(客户端)和服务器之间提供实时,双向和基于事件的通信软件库。
    Socket.IO 是把数据传输抽离成 Engine.IO,内部对轮询(Polling)和 WebSocket 等进行了封装,抹平一些细节和平台兼容的问题,提供统一的 API。

19. 事件传递和响应机制

在iOS中只有继承了UIResponder的对象才能接受并处理事件。

事件传递:事件的传递是从上到下(父控件到子控件)

  • 产生触摸事件A后,触摸事件会被添加到由UIApplication管理的事件队列中(首先接收到事件的是UIApplication)。
  • 只要事件传递给控件,就会调用自身的hitTest:withEvent:方法,寻找能够响应事件最合适的view(其内部会调用pointInside:withEvent:判断触摸点是否在自己身上)。

响应机制:从下到上(顺着响应者链条向上传递:子控件到父控件)
当事件传递到某个控件,但是最终hitTest:withEvent:没有找到第一响应者,那么该事件会沿着响应者链向上回溯,如果UIWindow实例UIApplication实例都不能处理该事件,则该事件会被丢弃。

响应者链条:在iOS程序中视图的摆放是有前后关系的,一个控件可以放到另一个控件上面或下面,那么用户点击某个控件时是触发上面的控件还是下面的控件呢,这种先后关系构成一个链条就叫响应者链。也可以说,响应者链是由多个响应者对象连接起来的链条

  • 如果父控件不能接受触摸事件,那么子控件就不可能接收到触摸事件
  • UIView有三种情况不能接收事件:

子视图在父视图之外区域点击是否有效?

  • 无效(父视图的clipsToBounds=NO,这样超过父视图bound区域的子视图内容也会显示),因为父视图的pointInside:withEvent:方法会返回NO,就不会向下遍历子视图了。**

runloop:通过系统内部维护的循环进行事件/消息管理的一个对象。runloop实际上就是一个do...while循环,有任务时开始,无任务时休眠。
其本质是通过mach_msg()函数接收、发送消息。

  1. RunLoop的作用就是来管理线程的,当线程的RunLoop开启后,线程就会在执行完任务后,处于休眠状态,随时等待接受新的任务,不会退出。
  2. 只有主线程的RunLoop是默认开启的,其他线程的RunLoop需要手动开启。所以当程序开启后,主线程会一直运行,不会退出。

runloop 事件循环机制内部流程

  • Source1:基于mach_Port,处理来自系统内核或其它进程的事件,比如点击手机屏幕。
  • Source0:非基于Port的处理事件,也就是应用层事件,需要手动标记为待处理和手动唤醒RunLoop。
  1. CFRunLoopTimer定时源,就是NSTimer。在预设的时间点唤醒RunLoop执行回调。因为它是基于RunLoop的,因此它不是实时的(就是NSTimer 是不准确的。 因为RunLoop只负责分发源的消息。如果线程当前正在处理繁重的任务,就有可能导致Timer本次延时,或者少执行一次)。

各数据结构之间的联系:

  1. Runloop线程一对一的关系

runloop,可以做到有消息处理时,能够迅速从内核态到用户态的切换,立刻唤醒处理,而没有消息处理时通过用户态到内核态的切换进入等待状态,避免资源占用因此 main 函数能够一直存在且不退出

runtime 一套c、c++、汇编编写的API,为OC提供运行时功能。能够将数据类型的确定由编译期推迟到运行时。

问1:方法的本质,问2:runtime的消息机制
方法的本质其实就是发送消息。

SEL是什么?IMP是什么?两者有什么联系?

  • SEL是方法编号,即方法名称,在dyld加载镜像时,通过read_image方法加载到内存的表中了。
  • IMP是函数实现指针,找IMP就是找函数的过程
  • 两者的关系:sel相当于书本的目录标题,imp就是书本的页码。查找具体的函数就是想看这本书里面具体篇章的内容:
  1. 方法的交换:具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)
  2. 实现字典的模型和自动转换
  3. JSPatch替换已有的OC方法实行等

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?

  1. 不能向编译后得到的类中增加实例变量。
  2. 可以向运行时创建的类中添加实例变量。
  3. 因为编译后的类已经注册在 runtime 中,类结构体中的 objc_ivar_list实例变量的链表instance_size 实例变量的内存大小已经确定,同时runtime会调用

Category中添加属性和成员变量的区别

  1. Category它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。
  2. 分类的结构体指针中,没有属性列表,只有方法列表。原则上它只能添加方法,不能添加属性(成员变量),但是可以借助运行时关联对象objc_setAssociatedObject(self, @selector(name), name,
  3. 分类中的可以写@property,但不会生成setter/getter方法声明和实现,也不会生成私有的成员变量,会编译通过,但是引用变量会报错。
  4. 如果分类中有和原有类同名的方法,会优先调用分类中的方法,就是说会忽略原有类的方法,同名方法调用的优先级为 分类 > 本类 > 父类,因为方法是放在方法栈中,遵循先进后出原则;
  • isa是一个Class类型的指针,其源码结构为isa_t联合体,在类中以Class对象存在,指向类的地址,大小为8字节(64位)。
  • 每个实例对象都有isa的指针指向对象的类。Class里也有个isa的指针指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。元类(meteClass)也是类,它也是对象,也有isa指针。

isa的指向:对象的isa指向类,类的isa指向元类(meta class),元类isa指向根元类,根元类的isa指向本身,形成了一个封闭的内循环。isa可以帮助一个对象找到它的方法。

Block是将函数及其执行上下文封装起来的对象。

Block调用即是函数的调用。

Block有三种形式,包括:

ARC环境下,当我们声明并且定义了一个block,系统默认使用__strong修饰符,如果该Block捕获了外部变量,实质上是从__NSStackBlock__转变到__NSMallocBlock__的过程,只不过是系统帮我们完成了copy操作,将栈区的block迁移到堆区,延长了Block的生命周期。对于栈block而言,变量作用域结束,空间被回收。
2). ARC的环境下,如果我们在声明一个block的时候,使用了__weak或者__unsafe__unretained的修饰符,那么系统就不会做copy的操作,也就不会将其迁移到堆区

1). 在MRC环境下,我们需要手动调用copy方法才可以将block迁移到堆区

在什么场景下使用__block修饰符呢?
1). 对截获变量进行赋值操作需要添加__block修饰符(赋值 != 使用)。
2). 对局部变量(基本数据类型和对象类型)进行赋值需要__block修饰符
其内部其实是对该__block对象进行拷贝,所以通过__block可以修改被截获变量的值且不会和外部变量互相影响。
3). 对静态局部变量、全局变量、静态全局变量不需要__block修饰符

block 的截获变量特性?
基本数据类型的局部变量 Block 可以截获其值。
对于对象类型的局部变量连同所有权修饰符一起截获。
局部静态变量以指针的形式进行截获。
全局变量和静态全局变量,block 是不截获的。

}

  测试者无一成功 记者 韩丹 摄

快报7位记者在参与测试 记者 韩丹 摄

  “7分钟内连续写出数字1—300(不能涂改)”,这道题目来自于19日上午南方科技大学在广东、山东、四川、安徽等全国八省同时开考的自主招生能力测试。

  看了这道考题,学生觉得有趣,但也有家长摸不着头脑。

  昨天,快报7位记者也饶有兴趣地做了实验,结果没有一人成功。

  7分钟内写完300的有4人,但没有1人不涂改

  实验者:小汪,男,25岁

  5分39秒写完,在数字63开始有改动,改动1处。

  听说测试结果和注意力有关,小汪蛮兴奋的。测试前,他特地做了准备工作。“我去吸了一根香烟‘提提神’,跑了一趟厕所。”小汪还很细心,把纸张先折出了一道道横线,“这样写数字的时候就不会歪掉,应该会快一些吧。”作为最早写完的,小汪蛮惋惜,在63时改动了。他总结了两点:1.思维比手要快。心里想到63了,手才写到62,但是下笔就不知不觉写到63了。2.集中注意会让人烦躁,写到70、80以后,需要稳稳情绪。

  实验者:小葛,女,27岁

  6分02秒写完,在数字53开始有改动,改动4处。

  小葛是个文静内秀的女孩,一张A4纸,她写完300才用了一半纸。数字个个小小的细细密密。小葛说写到100多的时候,脑子要开小差了,手很酸很酸。

  实验者:小李,男,31岁

  6分03秒写完,在数字154开始有改动,改动8处。

  小李是所有人中,唯一采用竖排写。他说:“竖排写,手的移动最少,可以快而迅速。这是事先下笔前,我思量过的。”这点确实有效,因为小李的字迹很大,但是速度几乎和小葛一样。特别提一句,小李是7位测试者中唯一一位搞技术工作的,确切地说不是记者,是IT男。

  实验者:小章,女,27岁

  6分18秒写完,在数字29开始有改动,改动7处。

  小章的数字每个都排得很准很整齐。她说:“对我来说,对齐写比较好,不容易错也比较快。还有一个是默念出来,对提高准确性有帮助。”

  实验者:小王,女,31岁

  7分钟时写到290,在数字158开始有改动,改动6处。

  小王字迹大,正面写了不够,纸张的反面也用上了。她没有写完有些冤枉,因为坐在她旁边的小蒋和小陈都在好几个时段说话,干扰到她了。

  实验者:小陈,男,27岁

  7分钟时写到269,在数字269开始有改动,改动1处。

  小陈是在测试前临时“抓”来的。他说写到70、80后,人有些烦躁,这时问了问旁边的人写了多少了。另外,写的过程中也在思考怎样写得更快,所以他先横着写,后来竖着写,变化方法。

  实验者:小蒋,男,26岁

  7分钟时写到269,在数字132开始有改动,改动5处

  小蒋在测试时也说话了,他写的时候还是找窍门的。比如写81到89时,他先写1、2、3、4、5、6、7,8、9,然后再把前面的8填上。

  实验后,他们总结出为什么没能完成的4点:1.写到数字70后开始出现烦躁。2.眼睛和手都会出现酸胀感,之后速度会放慢,需要毅力和耐力。3.当周围有人说话或环境有声响时,会影响注意力。4.几乎所有人都出现了思维和手不合拍的情况。

  7分钟内写完数字1到300

  事后,南科大校长朱清时对为什么要考这道题有个解释:“这是考查学生的注意力,看他能不能写完、会写错多少。一般人坚持不了7分钟这么高强度的集中注意力,写到中间就会走神、出错。所以,这道题看似很容易,其实用它考查一个人的注意力是很见效的。”

  杭州某疗养院负责体检的一位主任说,7分钟内从1写到300,测试了4个能力:人的协调性、思维连贯性、精细操作和注意力。

  首先是协调性,比如你看一个人写字,他笔头是否流畅,字迹是不是歪歪扭扭。思维连贯性上看,是不是会漏写数字。精细操作就是看会不会写错,写错多少个数字。注意力集中与否和以上三点都有一些关系。此外,从字的大小、字体的好看与否、是整齐的还是倾斜歪扭的,都能看出一些问题。

  杭州市第七人民医院周国岭医师是研究注意力缺陷多动症的专家。他说:“如果关注点仅从写错数字的角度来说,考的不仅仅是注意力,还有压力下的抵抗心理暗示的能力。越是不想出错,越是有可能错。”

  周医师举例了一个经典的心理故事,叫“喜马拉雅山的猴子”。一个游客对山民们说:“只要心里默念一个咒语,就会出现一大堆金币。”游客收了山民的学费后开始传授:“咒语是:×××××××××××,念咒语的时候心里千万不能想到喜马拉雅山的猴子,否则咒语就会失效。”

  每位山民都面对大山虔诚地念起了咒语。但是,那只该死的喜马拉雅山猴子总是出现在脑中,他们愈是提醒自己不要去想,猴子的影像愈是清晰。

  “这就是心理暗示,和一个人的心理素质是有关系的。刻意的忘记反而是加深记忆,情绪紧张时越容易写错。”周医师说。

  省立同德医院身心科马永春医生也认为,这道题更多地是考查人在压力情况下完成任务的准确性,当然也考查心理素质。因为注意力是所有心理活动的开始。

  马医生也打了一个比方:人的注意力就好比是在暗黑环境中的一个手电筒,人注意力集中的地方,就是手电筒照到的地方。有的人手电筒光圈大,看到范围广,有的人灯光暗,看到了也看不清楚。因为就算是同样的景象,每个人印到脑子里的图像也是不一样的,这就是注意力的差异。

  再延伸开去,注意力又是记忆力的窗口。你看,同样一节课,有的孩子记住的多,有的孩子上完了,却好像没上过一样,就是注意力的差异。曾经有个研究,一堂45分钟的课程,一个孩子如果能持续15分钟注意力集中,那么他的成绩已经是很好的了。7分钟内从数字1写到300,而不出错,这是需要注意力非常集中的。

  马医生说,这个题目,类似的在很多特种行业的招考中都会用到。比如飞行员,警察等,归根究底,都是考察压力下完成任务的准确性。

  “有关人的注意力,幼儿时可以集中五六分钟,5岁后可以集中8至10分钟。成年人可以在半小时左右。”省立同德医院马永春医生说,随着年龄的增长,注意力会越来越集中。但是,也有些注意力缺陷多动症的人,是没有办法保持长时间的注意力集中的。

  马医生说,如果孩子有注意力缺陷多动症,家长要带孩子及时就医,可以通过吃药和训练的方法改善。

  怎么让孩子的注意力更集中?

  对正常小孩来说,注意力如何训练?怎样提升注意力的极限?

  除了养成良好的睡眠习惯、学会自我减压、适当运动增强体质外,做一些锻炼注意力的训练和小游戏也是很有必要的。

  这个方法是济南市市中区首席班主任、育英中学教师丁雪英推荐的。具体方法为:

  每天拿出20分钟从1写到500,锻炼孩子集中精力做事的能力。一定要让孩子回头检查所写的500个数字有没有错误,这是提高他自我检查能力的好方法。这个方法是经过实验的,效果很好。不要以为这是在耽误时间,对于粗心的孩子来说,有时候越简单的东西越容易出错。表面上看是粗心,其实也体现了他能力和基础知识存在一些问题。

  二:舒尔特方格法。

  据说,舒尔特方格是全世界范围内最简单、最有效也是最科学的注意力训练方法,现在国内许多注意力训练机构也在采用这方法。

  方法很简单,最开始从9方格开始。在一张9个方格的表中,将1-9的数字,随意打乱顺序,填写在里面,然后以最快的速度从1数到9,要边读边指出,同时计时。

  寻找目标数字时,注意力是需要极度集中的,把这短暂的高强度的集中精力过程反复练习,大脑的集中注意力功能就会不断地加固、提高,注意力水平会越来越高。而且这个训练还可以提高眼球的末梢视觉能力,有效拓展视幅,加快阅读节奏,锻炼眼睛快速认读的能力。

  如果觉得9方格太简单了,可以提高难度至16方格、25方格、49方格,甚至更多方格。

  训练时要注意:①眼睛距表30~35厘米,视点自然放在表的中心;②在所有字符全部清晰入目的前提下,按顺序找全所有字符,注意不要顾此失彼,因找一个字符而对其他字符视而不见(这样可以培养看书一目十行的能力);③每看完一张表,眼睛稍作休息,或闭目,或做眼保健操,不要过分疲劳;④练习初期不要太计较成绩。⑤每天看10个表。

  平均1个字符用1秒钟成绩为优良,即9格用9秒、16格用16秒、25格用25秒为优良。也不用硬逼着孩子一定要达到这个成绩,只要他比以前有进步就值得鼓励。

  也可以用文字代替数字,比如将一首诗、一篇文章打乱填入表中,然后让孩子按顺序快速指出并念出来。

  扑克牌是许多孩子爱玩的游戏。取3张牌反扣在桌上,让孩子挑一张牌看一下,让他盯住这张牌,然后家长随意更换3张牌的位置,让孩子报出他挑选的那张牌在哪儿。一开始,家长可以和孩子比赛。随着能力的提高,可以增加牌的数量、变换牌的位置的次数和提高变换牌位置的速度。

  这种方法能高度培养注意力的集中,因为是做游戏,符合孩子的心理特点,可能更受孩子欢迎,积极性也高。每天坚持玩一阵,注意力会有所提高。

  四:买一些视觉大发现的书。

  这类书的共性是:在一大堆图案中,要求找出某样东西。或者在两幅看似相同或不同的图片中,找出异同。一定要给孩子规定时间,最好每天坚持练。

  小时候,很多人都被老师罚过抄书,相信绝大多数人都不认为这是一种好事。其实,抄书是锻炼注意力的一种好方法。刚抄的时候,我们可能一次最多记住6个字。随着抄的次数越来越多,一次,我们平均可以记下10个字,甚至更多。当平均每次能记住约15个字时,你的专注性就已经相当不错了。

  你适不适合去西藏旅游

  也可以用写数的方法测试

  杭州一所疗养院针对一些想去西藏等高海拔地区旅游的人士,有一项专门的低氧耐力检查和高原反应测试,其中也用到类似写数的方法:

  医生先在检查者面前放一张“低氧耐力检查表”和一支笔,然后给检查者戴上一个专用头盔,罩上面罩,检查者左手无名指夹上一个连着导线和仪器的夹子。医生说测试开始,检查者就在纸上从1000开始倒着写数字。这时,面罩释放的氧气浓度,模拟的是6000米高空的常压低氧状态,检查者的血氧饱和度往往只有70%左右。

  “倒写数字是在检测大脑用氧水平和低氧耐受能力。这个测试和南方科技大学的考题相比,思维是一样的。但是倒写比顺写的难度更大。”负责这项检查的主任说,测试时模拟低氧状态,考察的是人有效意识时间。简单地说,是低氧状态下人的大脑持续工作能力、大脑中氧化酶的活力好不好、呼吸中枢对氧的调节能力好不好。

  这项测试的费用是100元,如果测出来情况不是很好,可以作针对性训练,使人体慢慢适应后,再到西藏去。

  从1写到×××的骗局

  大家看了今天的报道

  骗子可能是这个世界上最先知先觉的人群之一,像类似从1写到300这样的游戏,从古至今,骗子们早已用得烂熟于心,都市快报也曾多次报道过这类骗局。

  2002年11月25日,唐小姐给来电说,她在文一路上一家小店工作。24日下午2点左右,进来两个男子,40岁上下。男子说,他们在做一项有关心理素质的研究,想请唐小姐参与一个街头数字测试,测试结果会计入他们研究的统计数据。

  测试方法很简单,就是从100开始依次往上写数字,看写到多少会写错。测试分成几个级别,最低一级是写到500。男子说,如果没有写错顺利通过测试,是有奖金的。奖金的多少根据所选择的测试级别而定。写到500没写错的,可以得到100元。最高一级是从100写到2000,如果没写错,奖金是1800元。但如果出错的话,就得付给他们相应级别的测试费。

  唐小姐和同事都很好奇,觉得这种测试比较简单,决定试一试。唐小姐首先出场,选了100-600这一档,没想到只写到“159”时,就错写成了“519”,不得不付给男子60元“测试费”。同事选了最低一档100-500,也错了,赔了10元。围观的人不信邪,但一圈下来,成绩最好的也只写到555,没有一个人拿到奖金。

  2003年4月13日,吴山广场来了几个卖洗发水的年轻人,他们的推销口号是:“你能在5分钟内,从1写到500而不出错吗?那么你就能免费得到一个高级相机。如果错了的话,那你必须花36元买我们的洗发水。”这则广告吸引了许多市民跃跃欲试,但所有的尝试者都铩羽而归。

  2009年1月,一个40多岁的男子走进拱墅区一家浴室,掏出一张纸,交给浴室女服务员小何,说想不想玩一个“自信心与勇敢”的游戏。他掏出3000元拍在服务台上,说如果小何从1写到1000不出错,这3000元就归她。如果中间错了,只要给他480元就可以了。小何想想这还不简单,拿出500元也放在服务台上。当写到500多时,男子说写错了,拿了小何的500元走了。

  据都市快报 记者 张姝 通讯员 陈员 徐勤

}

  2、对页面显示进行缩放的方法有下列哪几种?A B C

  A. 使用放大镜工具

  3、下列关于标尺和参考线描述正确的是:B C D

  A. 将光标放到水平或垂直标尺上,按下鼠标,从标尺上拖出参考线到页面上,一旦将参考线放到某个位置,就再也不能移动

  B. 参考线的颜色可以任意更改

  C. 路径和参考线之间可以任意转化

  D. 在缺省状态下,参考线是被锁定的,可以通过菜单命令解除参考线的锁定状态,解除锁定后的参考线可以通过Release Guide(释放参考线)命令将参考线转化为路径

  4、下列是Illustrator中关于颜色定义的描述,其中正确的是: A B C D

  C. Grayscale(灰度)模型就是采用不同浓淡的黑色来表现层次

  D. 专色是预先混合好的油墨,由印刷业使用一个标准的颜色匹配系统配置,如印刷中常用的烫金就是专色应用的例子

  5、下列描述不正确的是:C D

  A. 在Gradient(渐变)调板中设定好的渐变色可以直接拖入到Swatches(色样)调板中保存起来

  B. 在Color(颜色)调板中,可以设定选中对象的填充色和描边色

  C. 在Swatches(色样)调板中可存储印刷四色、RGB颜色、专色、图案,但不可以存储渐变色

  D. 在使用RGB颜色时,如果在Color(颜色)调板中出现一个中间有感叹号的黄色三角形,表示这种颜色不可在Web上使用

  6、按住下列哪个键的同时,单击工具箱中的工具图标可切换隐含的工具?D

  7、下列哪种色彩模式定义的颜色可用于印刷?B

  8、关于矩形、椭圆及圆角矩形工具的使用,下列的叙述哪些是正确的?A C D(应为A D)

  A. 在绘制矩形时,起始点为右下角,鼠标只需向左上角拖移,便可绘制一个矩形

  B. 如果以鼠标击点为中心绘制矩形、椭圆及圆角矩形,使用工具的同时按Shift键就可实现

  C. 在绘制圆角矩形时,如果希望长方形的两边呈对称的半圆形,可在Rounded Rectangle(圆角矩形)对话框中使圆角半径值大于高度的一半

  D. 如果欲显示图形的中心点,首先确定图形处于选择状态,然后在Attributes(属性)调板上单击Show Center(显示中心)按钮

  9、下列关于各种选择工具的描述,哪个是对的?A B

  A. 使用选择工具(注:工具箱中的黑色箭头)在路径上任何处单击就可选中整个图形或整个群组

  B. 使用直接选择工具(注:工具箱中的白色箭头)可以选择路径上的单个锚点及部分路径,并且可显示锚点的方向线

  C. 使用群组选择工具(注:工具箱中带加号的白色箭头)可选择成组对象中任何路径上的单个锚点,并且可显示锚点的方向线

  D. 使用选择工具(注:工具箱中的黑色箭头)可选择路径上的单个锚点或部份路径,并且可显示锚点的方向线

  10、下列有关旋转工具(Rotate Tool)的使用哪些是不正确的?B

  A. 如果要精确控制旋转的角度,可以打开旋转工具(Rotate Tool)对话框,在Angle(角度)后面的数字框中输入旋转的角度值即可

  B. 使用旋转工具(Rotate Tool)旋转图形时,旋转基准点就是图形的中心点,是不可以改变的

  C. 使用旋转工具(Rotate Tool)旋转图形时,旋转基准点的位置是可以改变的

  11、下列有关缩放工具(Scale Tool)的叙述哪些是不正确的? A B

  A. 缩放工具只可以对矢量图形进行缩放,不能对Illustrator中置入的像素图进行缩放

  B. 缩放工具和旋转工具不同的是,旋转工具需要先确定基准点,缩放工具不需要确定基准点

  C. 缩放工具和旋转工具都需要先确定基准点,并且基准点的位置可用鼠标任意移动

  D. 如果想调出Scale(缩放)对话框,按住Option(Mac OS)/Alt(Windows)键的同时单击鼠标即可,鼠标的击点将成为缩放的基准点

  12、下列有关镜像对称工具(Reflect Tool)的叙述哪些是不正确的?C

  A. 通过打开镜像对称工具对话框的方式来精确定义对称轴的角度

  B. 在使用镜像对称工具时,需要先确定轴心

  C. 对称轴的轴心位置必须在图形内部

  D. 对称轴可以是水平的、垂直的也可以是任意角度的

  13、下列有关倾斜工具(Shear Tool)的叙述哪些是不正确的?C

  A. 利用倾斜工具使图形发生倾斜前,应先确定倾斜的基准点

  B. 用鼠标拖拽倾斜一个矩形的过程中,按住Option(Mac OS)/Alt(Windows)键,原来的矩形保持位置不变,新复制的矩形相对于原来的矩形倾斜了一个角度

  C. 在倾斜工具的对话框中,Shear Angle(倾斜角度)和Axis(轴)中的Angle(角度)定义的角度必须完全相同

  D. 精确定义倾斜的角度,需打开倾斜工具的对话框,设定Shear Angle(倾斜角度)及Axis(倾斜轴)的Angle(角度)

  A. 变形工具(Reshape Tool)可在保持图形形状的同时移动锚点

  D. 整形工具(Reshape Tool)和自由变换工具(Free Transform Tool)虽然使用方法不同,但本质相同,都是用来使图形发生扭曲变形

  15、下列有关Transform(变换)调板的叙述哪些是不正确的?B C

  A. 通过Transform(变换)调板可以移动、缩放、旋转和倾斜图形

  B. Transform(变换)调板最下面的两个数值框的数值分别表示旋转的角度值和缩放的比例

  C. 通过Transform(变换)调板移动、缩放、旋转和倾斜图形时,只能以图形的中心点为基准点

  D. 在Transform(变换)调板中X和Y后面的数值分别代表图形在页面上的横坐标和纵坐标的数值

  A. “再次变换”命令可以完成物体的多次固定距离的移动(Move)及复制

  B. “再次变换”命令可以完成物体的多次固定数值的旋转(Rotate)及复制

  C. “再次变换”命令可以完成物体的多次固定数值的倾斜(Shear)及复制

  D. “再次变换”命令可以完成物体的多次固定数值的涡形旋转(Twirl)及复制

  17、下面有关路径操作的描述哪些是不正确的?A B

  A. 边线只能以单一的路径形式出现,不可能转化为图形

  18、下列哪些操作可用来进行图形的精确移动?B D

  A. 使用鼠标拖动页面上的图形使之移动

  B. 选中图形后,用键盘上的上下左右箭头键进行移动

  C. 通过Info(信息)调板对图形进行精确的移动

  D. 通过Move(移动)对话框对图形进行精确的移动

  19、下列有关图形的前后关系描述不正确的是:C D

  A. 在默认情况下,同一图层上先绘制的图形在后绘制的图形的后面

  B. Bring To Front(置前)命令可将所选图形放到同一图层上所有图形的最上面

  C. Send Backward(置后一层)命令可将所选图形放到同一图层上所有图形的最下面

  D. 在同一图层上先绘制的图形一般在后绘制的图形的前面

  20、关于图形的Group(组合)与Lock(锁定)操作,下列描述不正确的是:A B C

  A. 多个图形一旦成组,要选择其中一个图形,必须先执行Ungroup(解组)命令才能进行选择

  B. Lock(锁定)命令只是固定图形的位置,并不影响对图形进行其它的操作,例如,改变填充色

  C. 锁定后的成组图形一旦执行UnLock(解锁)命令,成组图形也自动解组

  D. 对于成组的图形,通过选择工具(工具箱中的黑色箭头),单击其中的任何图形,都可选中整个群组

  21、下列有关PathFinder(路径寻找器)的描述不正确的是:C

  A. Pathfinder(路径寻找器)命令执行后产生的路径可能是复合形状或由多个对象组成的群组

  B. 含有渐变网格的对象不能执行Pathfinder(路径寻找器)命令

  C. Pathfinder(路径寻找器)可根据属性查找组成选中对象的各条路径

  22、当使用圆角矩形工具时,在何处设定圆角半径(Corner Radius)?A B

  B. 使用圆角矩形工具在页面上单击,弹出Rounded Rectangle(圆角矩形)对话框,其中可设置圆角半径

  C. 圆角半径是固定的,不可以修改

  D. 使用矩形工具在页面上单击,弹出Rectangle(矩形)对话框,其中可设置圆角半径

  23、当使用“星形工具”(Star Tool)时,按住下列哪个键就可在绘制的过程中进行移动?C

  24、当使用“多边形工具”(Polygon Tool)时,按住下列哪个键就可以使某一边在拖拉鼠标绘制的过程中始终保持水平状态?A

  25、两个部分重叠、具有不同填充色和边线色的圆形执行“路径寻找器”(Pathfinder)中的拆分(Divide)命令后,下列描述不正确的是:A B D

  A. 两个圆形的填充色都变成原来位于前面的圆形的填充色

  B. 两个圆形的填充色都变成原来位于后面的圆形的填充色

  C. 两个圆形变成了复合路径

  D. 两个圆形不能同时被移动

  26、具有不同填充色和边线色的两个圆形部分重叠,执行PathFinder(路径寻找器)中的Divide(拆分)命令后,下列描述不正确的是:A B D

  A. 两个圆形的填充色都变成原来位于前面的圆形的填充色

  B. 两个圆形的填充色都变成原来位于后面的圆形的填充色

  C. 执行“Divide(拆分)”命令后的对象是一个群组对象

  A. 选择画笔工具绘制一条路径时,画笔工具右下角显示小的x,表示正在绘制一条任意形状路径

  B. 双击工具箱中的画笔工具,在Paintbrush Tool Preference(画笔工具预置)对话框中,Fidelity(精确度)值越大,所画曲线上的锚点越多

  C. 在Paintbrush Tool Preference(画笔工具预置)对话框中,Smoothness(平滑度)值越大,所画曲线与画笔移动的方向差别越大,值越小,所画曲线与画笔移动的方向差别越小

  28、下列有关画笔(Brushes)调板描述不正确的是:B C

  B. 在新建Scatter Brushes(散点画笔)之前,必须在页面上选择一个图形,此图形中可以包含使用画笔效果的路径,渐变色以及渐变网格等图形

  C. 艺术画笔(Art Brushes)在新建之前,工作页面上必须有选中的图形,且此图形中不包含使用画笔设置的路径

  D. 在图案画笔(Pattern Brushes)的对话框中,需要设定五部分图案,分别为:图案周边、外拐角、内拐角、开头和结尾

  29、下列有关渐变色的描述正确的是:A B C

  A. 定义好的渐变色可直接拖到Swatches(储色)调板中供取用

  B. 通过移动Gradient(渐变)调板上菱形的位置可以控制渐变颜色的组成比例,菱形的缺省的位置位于两种颜色的中间位置,即颜色为均匀混合

  C. Gradient(渐变)调板上颜色滑块的颜色改变是通过Color(颜色)调板来实现的。颜色可以为CMYK模式的颜色、RGB模式的颜色或者任意一种专色

  D. 渐变色是指两种或者两种以上的颜色之间混合形成的一种填色方式。不但能用于图形内部的填充,而且还能用于边线填充

  30、关于渐变工具(Gradient Tool)的使用,下列哪些说法是正确的? A D

  A. 渐变工具不但可以改变渐变的方向也可以改变图形中渐变颜色的分布

  B. 放射状渐变是以一点为圆心向外扩散的一种渐变方式,扩散方式可以通过修改Gradient(渐变)面板上的Angle(角度)来控制

  C. 使用渐变工具拖曳渐变色时,如果要让渐变的方向为水平、垂直或者45°角的倍数的方向,在拖拽鼠标的同时需要按住Command(Mac)/Ctrl(Win)键

  D. 如果渐变类型为放射状渐变,使用渐变工具确定渐变的中心点,该方法可以非常方便地制作高光球体

  31、设定渐变色时,在渐变色条下方单击鼠标,可增加一个表示新颜色的滑块,一个表示中间色的'菱形,滑块和菱形的数量关系是:A

  A. 滑块的数量比菱形的数量始终多1

  B. 滑块的数量比菱形的数量始终少1

  C. 滑块的数量和菱形的数量相同

  D. 滑块的数量和菱形的数量是成倍关系

  32、设定好的渐变色可存储在下列哪个浮动调板中?A

  33、若要改变渐变色的色彩渐变方向可通过下列哪些途径?A C

  B. 在Gradient(渐变)调板中调整滑块的位置

  D. 在Gradient(渐变)调板中调整菱形的位置

  35、下列关于画笔工具(Brush Tool)的描述哪个是不正确的?A C D

  A. 画笔工具绘出的一定是可编辑的封闭路径

  B. 画笔工具绘出的是可编辑的路径

  C. 画笔工具绘出的路径上锚点的数量是固定的

  D. 画笔工具绘出的路径上的锚点都是直线点

  36、在Stroke(边线)调板中,设定虚线时,最多可设定几个数据?C

  37、Adobe Illustrator中Blend Tool(混合工具)对两个具有相同描边色,不同填充色的封闭图形进行混合,下列描述不正确的是:A B D

  A. 两个填充色必须都是CMYK模式定义的颜色

  B. 两个填充色必须都是RGB模式定义的颜色

  C. 两个填充色可以任意是CMYK、RGB或HSB模式定义的颜色

  D. 两个填充色必须都是HSB模式定义的颜色

  38、Adobe Illustrator中Blend Tool(混合工具)对两个具有相同描边色,不同填充色的封闭图形进行混合,下列哪种描述正确?A B D

  A. 当两个图形的填充色都是CMYK模式定义的颜色时,颜色和图形的形状都发生混合

  B. 当两个图形的填充色都是渐变色时,颜色和图形的形状都发生混合

  C. 当两个图形的填充色都是图案时,图案和图形的形状都发生混合

  D. 当两个图形的填充色都是图案时,图案不发生混合,只有图形的形状发生混合

  39、当通过Transparency(透明)调板对图形施加透明效果时,下面的描述正确的是:A C

  A. 在缺省状态下,当对一个具有填充色和边线色的图形施加透明效果时,物体的填充色、边线色的透明度都同时发生变化

  B. 只能同时对图形的填充色和边线色施加透明效果

  C. 可对图形的填充色和边线色分别施加透明效果

  D. 透明效果一旦施加就不能更改

  40、下列有关文字工具描述正确的是:A C D

  A. Illustrator CS在工具箱中提供了六个文字工具,分别是:常规文字输入工具、区域文字输入工具、路径文字输入工具、竖排文字输入工具、竖排区域文字输入工具以及竖排路径文字输入工具

  B. 如果有大量的文字输入,必须使用区域文字输入工具,使用其他文字工具无效

  C. 当使用沿路径排布的文字输入工具时,该路径可以是闭合路径,也可以是开放路径

  41、下列哪些不是Character(文字规格)调板中的设定项?C

  A. 文字大小的设定

  B. 文字基线的设定

  C. 首行缩排的设定

  D. 文字行距的设定

  42、下列哪两种中文字体不能被转换为图形?B C

  A. 可将某些文字转换为图形

  B. 文字可沿路径进行水平或垂直排列

  C. 文字是不能执行绕图操作的

  D. 文字可在封闭区域内进行排列

  44、使用沿路径排布的文字输入工具时,应在何种路径上进行操作?C

  A. 必须是闭合路径

  B. 必须是开放路径

  C. 可以是开放路径,也可以是闭合路径

  D. 可以是开放路径,也可以是闭合路径,但其填充色必须为无色

  A. 柱状图表(Column Graph)是以坐标轴的方式,逐栏显示输入的资料,柱的高度代表比较的数值,数值越大,柱的高度就越高

  B. 图表类型一旦确定,就不能做任何改动

  C. 叠加条状图表(Stacked Bar Graph)用点来表示一组或者多组数据,以不同颜色的折线连接不同组的所有点,而且形成面积区域

  D. 点状图表(Scatter Graph)的X轴和Y轴都为数据坐标轴,在两组数据的交汇处形成坐标点,有直线在这些点之间连接,使用这种图表可反映数据的变化趋势

  46、通过Graph Type(图表类型)对话框可以对图表进行多种改变,下列描述正确的是:B C D

  A. 如果给图表加阴影,只能通过Copy(拷贝)、Paste in Back(粘贴到后面)命令来增加阴影

  D. 当选择柱状图表(Column Graph)时,坐标轴可在左边或右边,也可以两边都显示

  A. 对于柱状图表,用选择工具将其选中后,可直接选择渐变色对其进行填充色的改变,但改变成渐变色后,图表数据就不可以修改了

  B. 用户可以自定义图表元素

  C. 图表生成以后是自动成组的,可通过Ungroup(解组)命令对图表解组,但解组后的图表不可以再更改图表类型

  D. 填充色含有渐变色、图案的图形不可以被定义为图表图案

  48、绘制作为图表图案蒙版的矩形时,应注意什么问题? A B C

  A. 矩形的填充色必须设定为无色

  B. 矩形的边线色必须设定为无色

  C. 矩形必须放置在图案之后

  D. 矩形必须放置在图案之前

  49、在Illustrator当中可以将光栅图马赛克化,下面的描述哪些是不正确的:A C D

  A. 马赛克后的光栅图依旧保持光栅图的特性

  B. 执行马赛克命令的图像被转化为由马赛克的小格子组成的图形

  C. 马赛克的小格子的颜色是不可以改变的

  D. 马赛克的小格子的尺寸是不可以改变的

  50、下面有关Illustrator滤镜变形命令描述正确的是:B C D

  A. 执行Roughen(粗糙化)命令可使图形的边缘变得粗糙,同时图形的锚点减少

  B. Free Distort(自由变形)命令可对图形进行自由变形

  C. Punk & Bloat(尖角和圆角变形)可以改变图形的形状,但是不改变图形的锚点数量

  D. Twirl(涡形旋转)命令可通过围绕中心旋转来改变物体外形

  A. Add Arrowheads(添加箭头)命令主要用于对开放路径加箭头,但对于封闭的路径也可以执行此命令

  C. Drop Shadow(投影)命令只能对矢量图形建立投影

  D. 使用Drop Shadow(投影)命令可对任何图形建立投影,并可以改变阴影和下面图形的混合模式,以及阴影的位移量

  52、下列有关滤镜的描述不正确的是:A C D

  53、文件存储成PDF格式好处在于:B C

  A. 大多数的排版软件和文字处理软件都可识别PDF格式

  B. 可以跨平台浏览

  C. 许多文件特征不会丢失

  54、Illustrator的文件可以通过Save(存储)命令直接存储为下列哪种格式?B D

  B. 可以打开Photoshop文件,但是不能保留Photoshop文件的图层、蒙板、透明和可编辑的文字

  C. 可以指定专色和原色,但不可以指定Web颜色

  D. 可将透明特性赋予任何物体

  A. 启动Adobe Illustrator CS后,软件就会自动建立一个大小为A4,色彩模式为RGB的新文件

  B. 创建新文件时,在New Document(新文件)对话框中只有RGB和CMYK两种色彩模式可以设定

  C. 创建新文件时,在New Document(新文件)对话框中可任意设定文件的大小,并且输入的时候数字及度量单位可以同时输入,如可直接输入12cm

  D. 如果工具箱中某工具图标的右下角有黑色小三角,表示还有隐含的工具

  57、Adobe Illustrator和Photoshop之间可互相交流,但两个软件有本质的不同,下列哪种叙述是正确的?A D

  A. Illustrator是以处理矢量图形为主的图形绘制软件,而Photoshop是以处理像素图为主的图像处理软件

  D. Illustrator也可以对图形进行像素化处理,但同样的文件均存储为EPS格式后,Photoshop存储的文件要小很多,原因是它们描述信息的方式不同

  58、一个开放的路径,两个端点距离较近,通过下列哪种方式可以将两个端点连接起来使之成为封闭的路径?B

  59、下面的快捷键的使用哪些是无效的?D

  A. 选择Polygon(多边形)工具后,在按住鼠标进行拖拽的过程中,敲击键盘上向上的箭头键可增加多边形的边数,每敲击一次,可增加一个边数

  B. 选中Star(星形)工具后,在按住鼠标进行拖拽的过程中,按住键盘上的Command(Mac OS)/Ctrl(Windows)键可保持星形的内部半径

  C. 选择Spirl(螺旋线)工具后,直接用鼠标在页面上拖拽,在按住鼠标进行拖拽的过程中,按住键盘上的空格键,就可随鼠标拖拽移动涡形的位置

  D. 选择Polygon(多边形)工具后,在拖拽旋转鼠标的过程中,可按住Shift键,此时,可移动多边形,多边形的移动方向为水平、垂直或者45°的倍数

  60、下列有关图形复制操作的描述哪些是正确的?A D

  B. 系统的剪贴板(Clipboard)所能存储的拷贝内容和内存没有关系

  C. 系统的剪贴板(Clipboard)可以同时保留两次不同的复制信息

  61、下列有关文本编辑描述不正确的是:B C D

  A. 当在文字框的右下角出现带加号的方块时,表示有些文字被隐含了

  B. 如果要拷贝文字段中的一部分,可直接使用选择工具(工具箱中的黑色箭头)在文字段中的拖拉,选中欲拷贝的文字

  C. 文字块的形状只能是矩形

  D. 文字可以围绕图形排列,但不可以围绕路径进行排列

  62、下面有关将矢量图光栅化的叙述不正确的是:A B C

  A. 如果Adobe Illustrator中绘制的矢量对象转化为光栅图,在Adobe Photoshop打开该AI文件时就不需要再将其转化为光栅图了

  C. 在Adobe Illustrator中将矢量对象光栅化时,色彩模式只能转化为RGB和CMYK,因为Illustrator新建文档时只支持这两种色彩模式

  D. 在Adobe Illustrator中可以将矢量对象光栅化,并且可以根据发布媒体的不同,设定不同的分辨率和不同的色彩模式

  63、下列有关Styles(样式)描述正确的是:A C

  A. Styles(样式)是被命名的一系列外观属性的集合

  B. Styles(样式)包括颜色、透明、填充图案、效果以及图层

  C. 对一个物体施加Styles(样式)效果,其本身结构不发生变化

  D. 不可以对文字物体(不包括文字规格)施加Styles(样式)效果

  64、下列有关图层的描述正确的是:A B C

  A. 通过Layers(图层)调板可以显示或者隐藏单个的图层

  B. 在Layer Options(图层选项)对话框中,选择Print(打印)选项,该图层不但在屏幕中显示,还可以在打印稿中出现

  D. 在Layer Options(图层选项)对话框中选择Template(模板)选项,可令该图层不能输出但是可以打印

  65、当对处于不同图层上的两个图形执行成组命令后,两个图形会:D

  A. 两个图形仍在各自的图层上

  B. 两个图形在一个新建的图层上

  C. 两个图形在原来位于下面的图层上

  D. 两个图形在原来位于上面的图层上

  66、下列关于铅笔工具的描述,哪些是不正确的?A B C

  A. 铅笔工具不可以绘制封闭路径

  C. 使用铅笔工具绘制路径的过程中,当终点和起点重合的时候,路径会自动封闭

  D. 使用铅笔工具可将封闭路径变成开放路径,也可以使开放路径变成封闭路径

  67、两个部分重叠、具有不同填充色和边线色的圆形执行“路径寻找器”(Pathfinder)中的拆分(Divide)命令后,下列描述不正确的是:A D

  A. 重叠部分可用选择工具(黑色箭头工具)单独选中

  B. 重叠部分可用直接选择工具(白色箭头工具)单独选中

  C. 重叠部分的填充色和边线色与位于前面的圆形相同

  D. 拆分后的每个部分不可以单独旋转

  68、在Adobe Illustrator CS中,若要改变标尺的单位,可将鼠标放在标尺处,按住下列哪个快捷键的同时单击鼠标就可弹出标尺单位菜单?C

  71、Adobe Illustrator 中当使用“椭圆工具”时,按住键盘上的哪个键就可绘制出正圆形? A

  A. 渐变网格工具和混合工具(Blend Tool)的功能相同

  B. 渐变网格工具形成的渐变是不可以进行再调整的

  C. 不仅封闭路径可以使用渐变网格工具,而且开放路径也可以使用渐变网格工具

  D. 渐变网格工具形成渐变时,两个颜色必须都是CMYK的色彩模式

  73、当使用旋转工具(Rotate Tool)时,按住下列哪个键的同时单击鼠标,就可弹出其设定对话框? C

  74、双击工具箱中的旋转工具,在弹出的Rotate(旋转)设定对话框中,Options(选项)一栏中有Objects(图形)和Patterns(图案)两个选项,关于它们的描述不正确的是: A C

  A. Patterns(图案)这个选项始终是灰色不可选的

  B. 当封闭路径填充有图案时,若选择Objects(图形),不选择Patterns(图案),执行命令的结果是封闭路径被旋转,而图案保持原来的方向

  C. 若同时选中Objects(图形)和Patterns(图案),执行命令的结果是保持原来的状态不变

  D. 当封闭路径的填充有图案时,若不选择Objects(图形),选择Patterns(图案),执行命令的结果是图案被旋转,而封闭路径保持原来的方向

  A. Illustrator CS的文件置入的图像分为嵌入和链接两种方式

  C. Illustrator CS的文件置入的图像只能是链接的方式

  76、如图所示图A为原图,图B是经过调整Stroke调板有关参数的结果,必须调整哪些选项可以实现图B虚线效:A B

  B. 在Cap端头类型后面选择圆端

  C. 在Join连接后面选择圆形连接

  D. 在Cap端头类型后面选择突出平端

  77、图A为原图,图B、C、D 为原图经过一定操作以后的图。则原图执行Object〉Path〉Offset Path(对象)路径)偏移路径)命令,在弹出的对话框中Join(连接)后面的选项设定为Miter(斜角)时,最终得到的结果是:A

  78、在如图所示的渐变色背景上,图形A、B、C、D 中,哪一个图形是一个复合路径(Compound Ptah):B

  79、如图所示,图A为原图,在预置对话框中选中Transform Pattern Tiles选项后,默认情况下,对原图进行变换操作后可能出现的效果是:C

  A. 只能是图形C

  B. 只能是图形B

  C. 图形B或图形C

  80、关于贝塞尔曲线的规则,下面哪些选项是正确的:A D

  A. 绘制贝塞尔曲线后,其方向线的长度与角度可以预测曲线的形状

  B. 绘制贝塞尔曲线后,其方向线的长度约等于曲线长度的1/2

  C. 确保曲线光滑应将节点放置在弧的一侧,而不是两边

  D. 节点数越少,曲线看上去越光滑,打印的速度也越快

}

我要回帖

更多关于 镜像中的钟表题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信