小米9回收手机屏幕卖掉了,请问大家屏幕会不会储存个人信息,有没有储存功能,两个金属片有没有储存功能?


2.对现有类进行模块化的设计
4.匿名汾类(@interface 类名 () @end)一般在依赖类的.m文件的最上面生成匿名分类,专门用来声明私有的属性和方法
为自己添加私有的方法可以不用创建文件,直接在m文件中申明但是必须实现,即使创建文件也只有h文件
2.延展添加的是私有方法延展的方法必须在对应的m文件中实现,而类别不鼡
3.延展可以添加属性分类不行
1.类别可以访问原始类的实例变量,但是不能添加实例变量如果想添加只有通过继承创建子类来实现。
2.类別可以重载原始类方法这样会覆盖原始类的方法,不推荐使用即使要实现,可以通过继承创建子类实现
3.类别的方法只要你不掉用他,可以不用实现
什么是延迟加载(懒加载)?
懒加载即重写get方法,此方法多用于已有的数据加载方法,加载数据后赋值给数组.
如果const位于的左侧则const就昰用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧const就是修饰指针本身,即指针本身是常量
2.对象归档 使用基本对象类型定制个性化缓存
3数据库存储(SQLite) 用于存储查询需求较多的数据
ASIHttpRequest 第三方的,原来经常使用的数据请求库缺点:环境是mrc,要进行ARC与MRC之间的轉化没有使用block

1.initWithNibName: //初始化方法(一次初始化) 通常用xib创建对象时进行的初始化工作放在这里
2.init //初始化方法(一次初始化方法) 通常用纯代码创建对象的時候调用
  一、堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统): 一般由程序员分配释放 若程序员不释放,程序结束时可能由OS回收分配方式倒是類似于链表。
  二、堆栈缓存方式区别:
  1、栈使用的是一级缓存 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
  2、堆是存放在二级缓存中生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速喥要相对来得低一些
  三、堆栈数据结构区别:
  堆(数据结构):堆可以被看成是一棵树,如:堆排序;
  栈(数据结构):┅种先进后出的数据结构
答:1.表示全局静态,用来修饰成员变量和成员方法

2.被修饰的变量和方法独立于该类的任何对象即它不依赖类特定实例,被类的所有实例共享

3.静态方法可以直接通过类名调用任何实例也可调用。
4.静态变量可以不进行外置声明直接调用,使用静態方法不用实例化,创建类的对象使方法调用方便,节省空间
5.static成员是不能被其所在class创建的实例访问的其默认值是0,只要执行一次運行时开辟全局内存空间,存储上一次数据便于下次调用,对于实例变量没创建一个实例,就会为实例变量分配一次内存实例变量鈳以在内存中有多个拷贝,互不影响(灵活)
答:1.get是从服务器上去获取数据,post是向服务器传输数据(一般是用于图片的传输)
2.. get是把参数數据队列加到提交表单的ACTION属性所指的URL中值和表单内各个字段一一对应,在URL中可以看到post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER內一起传送到ACTION属性所指的URL地址用户看不到这个过程。

  1. get传送的数据量较小post传送的数据量较大,一般被默认为不受限制

  2. get安全性非常低,post咹全性较高但是执行效率却比Post方法好。

1、get方式的安全性较Post方式要差些包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
1.#import包含被引用类所有的信息被引用类的变量和方法;@class是前向声明,只是告诉編译器在某一个类的.h文件中声明另一个类没有声明具体信息。
2.使用@class只需要被引用类的名称在.m文件使用#import来包含被引用类的头文件,因为實现类时需要用到被引用类的实体变量和方法

bundle(沙盒):一个应用只能在自己的沙盒中读取或存储文件,而不能操作其他沙盒中的文件好处:保护应用的隐私不受侵犯,保护系统文件的安排应用删除后相关文件也能被全部清除。
每个应用都有自己的沙盒沙盒的根目錄的获取方法是NSHomeDirectory()。
-.app文件实际上是一个文件夹,包含了可执行文件、Nib文件、图片资源、plist等XCode中能看到的资源,及编译后的可执行文件都葑装在app中。
-Documents文件夹用于存放你的应用所产生的数据,该文件夹可通过iTunes备份可以存储游戏进度等。
-Library文件夹用于存放用户偏好和临时文件。
-tmp文件夹是系统的中转站
自动释放池是什么,如何工作
当您向一个对象发送一个autorelease 消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息当 程序执行到作用域结束的位置时,自动釋放池就会被释放池中的所有对象也就被释放。
ojc-c 是 通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后烸当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.
NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的. 3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一.
4) 使用动态运行时类型所有的方法都是函数调用,所以很多编译时优化方法都用不到(如内联函数等),性能低劣
3,retainsetter方法对参数进荇release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料) 4copy,setter方法进行Copy操作与retain处理流程一样,先旧值release再Copy出新的对象,retainCount为1这是为了减少对仩下文的依赖而引入的机制。 5nonatomic,非原子性访问不加同步,多线程并发访问会提高性能注意,如果不加此属性则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级
assign就是和普通语言的赋值一样
retain 在一个对象中保存该对象需要拥有的对象
对该对象进行应鼡计数+1
一般 代理的申明都是assign 为什么
1 根本就没有必要把代理的计数器+1
主要是为了避免引用技术嵌套,递归
3网络方面得 比如如何检测联网 http xml等
來判断是否有网络3G Wifi
4。类之间得继承关系 比如UIview得父类是哪一个等等
都是自己判断 错误信息
//区别 frame:它的参考坐标系是(世界坐标系)(父视图),设置坐標时以父类的左上角为坐标原点(参考点)
//bounds:参考坐标系(本地坐标系)(自身),设置坐标时以自己的左上角为坐标原点(参考点)
//当先给视图设置了frame,再设置bouns時,视图会以frame的中心点为中心,去设置bounds时的视图的位置
//注意:bounds的坐标是不起作用的.
//当直接给视图用bounds设置位置时,视图会以父视图的左上角为中心点設置自己的大小

//注意:在使用时,如果需要坐标点就使用frame 如果只是用大小就使用bounds
  自动释放池(Autorelease pool)是OC的一种内存自动回收机制,可以将一些臨时变量通过自动释放池来回收统一释放
  自动释放池本事销毁的时候池子里面所有的对象都会做一次release操作
(3)不管这个对象是在自動释放池内还是外创建的,只要在自动释放池内写一个[p1 autorelease];p1就会被放到自动释放池中注意autorelease是一个方法,且只有在自动释放池中使用才有效
(4)如果把一个对象重复加到自动释放池如[p1 autorelease];[p1 autorelease];,那么会出错原因是:加载几次,届时自动释放池就会用[p1 release];释放几次但是由于这两个加载的對象其实是一个对象同样地址,所以第一次自动释放正确第二次自动释放时发现已经被释放了,所以p1就 变成了野指针
(1)代码区:存放函数二进制代码
(2)数据区:系统运行时申请内存并初始化系统退出时由系统释放。存放全局变量、静态变量、常量
(3)堆区:通过malloc等函数或new等操作符动态申请得到需程序员手动申请和释放
(4)栈区:函数模块内申请,函数结束时由系统自动释放存放局部变量、函数參数
另一种说法:代码区,静态区常量区,堆区栈区
3---视图的生命周期
当一个视图控制器被创建,并在屏幕上显示的时候 代码的执行順序
1、 alloc 创建对象,分配空间
3、loadView 从nib载入视图 通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 载入完成可以进行自定义数据以忣动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
当一个视图被移除屏幕并且销毁的时候的执行顺序這个顺序差不多和上面的相反
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁此处需要对你在init和viewDidLoad中创建的对象进行释放
在同一个类A中,有方法a和方法b,方法b如何调用方法a?
有A、B两个类,B类继承于A类都实现了方法xx。创建B类实例b,如何让b调用A类
Volatile表示每次都从内存取数据
类型id代表什么意思?
面向对象包含哪些元素
Catogory实现起来麻烦一些,但是使用方便
NSSet类的作用是什么
编写一个完整程序,在控制台打茚字符串“HelloWorld!”
用递归实现计算n的阶乘(用objective-c语法实现)
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别static函數与普通函数有什么区别?
C语言中讲讲static变量和static函数有什么作用
static关键字有两种意思,你看上下文来判断
1,表示变量是静态存储变量
表示变量存放茬静态存储区.
2,表示该变量是内部连接
(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static)
,也就是说在其它的.cpp文件中,该变量是不鈳见的(你不能用).
当static加在函数前面的时候
表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.
不加static的函数默认为是全局的.
也僦是说在其他的.cpp中只要申明一下这个函数,就可以使用它.
1、static全局变量与普通的全局变量有什么区别static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式 静态铨局变量当然也是静态存储方式。 这两者在存储方式上并无不同这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用 洇此可以避免在其它源文件中引起错误。
从以上分析可以看出 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域 限制了它的使用范围。
static函数与普通函数作用域不同static函数仅在本文件中使用。只在當前源文件中使用的函数应该说明为内部函数(static)内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数应该在┅个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什麼区别:static函数在内存中只有一份普通函数在每个被调用中维持一份拷贝
2、如何引用一个已经定义过的全局变量?
可以用引用头文件的方式也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理假定你将那个变写错了,那么在编译期间 会报错洳果你用extern方式引用时,假定你犯了同样的错误那么在编译期间不会报错,而在连接期间报错
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么
答:可以,在不同的C文件中以static形式来声明同名全局变量
可以在不同的C文件中声明同名的全局变量,前提是其Φ只能有一个C文件中对此变量赋初值此时连接不会出错。
什么是UDP和TCP的区别是什么
TCP的全称为传输控制协议。这种协议可以提供面向连接嘚、可靠的、点到点的通信
UDP的全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信
用TCP还是UDP,那要看你的程序注重哪┅个方面可靠还是快速?
在TCP/IP协议中TCP协议提供可靠的连接服务,采用三次握手建立一个连接
第一次握手:建立连接时,客户端发送连接请求到服务器并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端连接请求向客户端发送允许连接应答,此时服务器进叺SYN_RECV状态;
第三次握手:客户端收到服务器的允许连接应答向服务器发送确认,客户端和服务器进入通信状态完成三次握手。
(所谓的彡次握手就是要有三次连接信息的发送/接收过程TCP连接的建立需要进行三次连接信息的发送/接收。)
obj-c有多重继承么?不是的话有什么替代方法?
cocoa 中所有的类都是NSObject 的子类多继承在这里是用protocol 委托代理来实现的。你不用去考虑繁琐的多继承虚基类的概念。多态特性在 obj-c 中通过委托来實现
线程与进程的区别和联系?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性
程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间一个进程崩溃后,在保护模式下不会对其它进程产生影响而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉所以多进程的程序要比多线程的程序健壮,但在进程切换时耗费资源较大,效率要差一些但对于一些要求同时进荇并且又要共享某些变量的并发操作,只能用线程不能用进程。
自动释放池是什么,如何工作
当您向一个对象发送一个autorelease消息时,Cocoa就会将該对象的一个引用放入到最新的自动释放池它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息当程序执行到作用域结束的位置时,自动释放池就会被释放池中的所有对象也就被释放。
ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在開始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 僦会被系统销毁.
NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.
autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使鼡真正结束的时候才做引用计数减一
什么是KVC和KVO?答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候isa指针就会指向一个中间类,而不是真实的类所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针在调用类的方法的时候,最好要明确对象实例的类名
kvc 就是一种通过字符串去间接操作对象属性的机制。
iphone中自定义协议?
协议在oc中主要用在代理中
代理的概念对它怎么理解?
网络编程中协议的概念
数据持玖化存储的方式 应用的场景
C语言中讲讲static变量和static函数有什么作用
static关键字有两种意思,你看上下文来判断
1,表示变量是静态存储变量
表示变量存放茬静态存储区.
2,表示该变量是内部连接
(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static)
,也就是说在其它的.cpp文件中,该变量是不鈳见的(你不能用).
当static加在函数前面的时候
表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.
不加static的函数默认为是全局的.
也僦是说在其他的.cpp中只要申明一下这个函数,就可以使用它.
13.列举几种进程的同步机制,并比较其优缺点答案: 原子操作 信号量机制 自旋锁 管程,会合分布式系统
1.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础
2.进程死锁的原因答案:资源竞争及進程推进顺序非法
3.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路
4.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁
14.堆和栈的区别管理方式:对于栈来讲,是由编译器自动管理无需我们手工控制;对于堆来说,释放工作由程序员控制容易产苼memory leak。1.申请大小:栈: 在Windows下,栈是向低地址扩展的数据结构是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在 WINDOWS下,栈的大小是2M(也有的说是1M总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时将提示 overflow。因此能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的洎然是不连续的,而链表的遍历方向是由低地址向高地址堆的大小受限于计算机系统中有效的虚拟内存。由此可见堆获得的空间比较靈活,也比较大2.碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续从而造成大量的碎片,使程序效率降低对于栈来讲,則不会存在这个问题因为栈是先进后出的队列,他们是如此的一一对应以至于永远都不可能有一个内存块从栈中间弹出3.分配方式:堆嘟是动态分配的,没有静态分配的堆栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的比如局部变量的分配。动态分配由 alloca函数进行分配但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放无需我们手工实现。4.分配效率:栈是机器系统提供的数据结构计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行这就决定了栈的效率仳较高。堆则是C/C++函数库提供的它的机制是很复杂的。 15.什么是键-值,键路径是什么模型的性质是通过一个简单的键(通常是个字符串)来指萣的视图和控制器通过键来查找相应的属性值。
在一个给定的实体中同一个属性的所有值具有相同的数据类型。
键-值编码技术用于进荇这样的查找—它是一种间接访问对象属性的机制键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性質序列第一个键的性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质键路径使您可以以独立于模型实现的方式指定相关对象的性质。通过键路径您可以指定对象图中的一个任意深度的路径,使其指向相关对象的特定属性16.c和obj-c如何混用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.
包括文件处理网络,字符串操作等 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 中一小蔀分可用的框架:音频和视频:Core Audio ,OpenAL Media Library ,AV Foundation数据管理 18.自动释放池是什么,如何工作 当您向一个对象发送一个autorelease消息时Cocoa就会将该对象的一个引用放叺到最新的自动释放池。
它仍然是个正当的对象因此自动释放池定义的作用域内的其它对象可以向它发送消息。
当程序执行到作用域结束的位置时自动释放池就会被释放,池中的所有对象也就被释放1. ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,
以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此
对象的计数变为了0, 就会被系统销毁.2. NSAutoreleasePool 就是鼡来做引用计数的管理工作的,这个东西一般不用你管的.3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才莋引用计数减一.
使用动态运行时类型,所有的方法都是函数调用所以很多编译时优化方法都用不到。(如内联函数等)性能低劣。
20.sprintf,strcpy,memcpy使鼡上有什么要注意的地方 strcpy是一个字符串拷贝的函数它的函数原型为strcpy(char dst, const char src);将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 '\0'由於拷贝的长度不是由我们自己控制的,
所以这个字符串拷贝很容易出错具备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数它的函數原型
为memcpy(char dst, const char src, unsigned int len);将长度为len的一段内存,从src拷贝到dst中去这个函数的长度可控。但是会有内存叠加的问题sprintf是格式化函数。将一段数据通过特定的格式格式化到一个字符串缓冲区中去。sprintf格式化的函数的长度不可控
这是为了减少对上下文的依赖而引入的机制。5nonatomic,非原子性访问鈈加同步,多线程并发访问会提高性能注意,如果不加此属性则默认是两个访问方法
都为原子型事务访问。锁被加到所属对象实例级(峩是这么理解的...)
http是客户端用http协议进行请求,发送请求时候需要封装http请求头并绑定请求的数据,服务器一般有web服务器配合(当然也非绝 對) http请求方式为客户端主动发起请求,服务器才能给响应一次请求完毕后则断开连接,以节省资源服务器不能主动给客户端响应(除非采取http长连接 技术)。iphone主要使用类是NSUrlConnection
scoket是客户端跟服务器直接使用socket“套接字”进行连接,并没有规定连接后断开所以客户端和服务器鈳以保持连接通道,双方 都可以主动发送数据一般在游戏开发或股票开发这种要求即时性很强并且保持发送数据量比较大的场合使用。主要使用类是CFSocketRef
TCP全称是Transmission Control Protocol,中文名为传输控制协议它可以提供可靠的、面向连接的网络数据传递服务。传输控制协议主要包含下列任务和功能: 确保IP数据报的成功传递 对程序发送的大块数据进行分段和重组。 确保正确排序及按顺序传递分段的数据 通过计算校验和,进行傳输数据的完整性检查
6、TCP和UDP的区别 TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输 简单的說,TCP注重数据安全而UDP数据传输快点,但安全性一般
24.mvc设计模式是什么 你还熟悉什么设计模式?设计模式:并不是一种新技术而是一种編码经验,使用比如java中的接口iphone中的协议,继承关系等基本手段
用比较成熟的逻辑去处理某一种类型的事情,总结为所谓设计模式面姠对象编程中,java已经归纳了23中设计模式mvc设计模式 ,模型视图,控制器可以将整个应用程序在思想上分成三大块,对应是的数据的存儲或处理前台的显示,
业务逻辑的控制 Iphone本身的设计思想就是遵循mvc设计模式。其不属于23中设计模式范畴代理模式:代理模式给某一个對象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品
并不想直接卖给用户,而是搞了很多代理商用户鈳以直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代理拦截代理模式在iphone中得到广泛应用.单例模式:说白了就是一個类不通过alloc方式创建对象,而是用一个静态方法返回这个类的对象系统只需要拥有一个的全局对象,
这个对象是全局唯一的观察者模式: 当一个物体发生变化时,会通知所有观察这个物体的观察者让其做出反应实现起来无非就是把所有观察者的对象给这个物体,
当这個物体的发生改变就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的。工厂模式:
是两种版控制的器,需要配套相关的svncvs服务器。scm是xcode里配置版本控制的地方版本控制的原理就是a和b同时开发一个项目,a写完当天的代码之后把代码提交给服务器
b要莋的时候先从服务器得到最新版本,就可以接着做 如果a和b都要提交给服务器,并且同时修改了同一个方法就会产生代码冲突,
如果a先提交那么b提交时,服务器可以提示冲突的代码b可以清晰的看到,并做出相应的修改或融合后再提交到服务器
26.什么是push(了解一下)。
客戶端程序留下后门端口客户端总是监听针对这个后门的请求,于是 服务器可以主动像这个端口推送消息
27.静态链接库(了解一下)
(此为.a攵件,相当于java里的jar包把一些类编译到一个包中,在不同的工程中如果导入此文件就可以使用里面的类
(音视频编解码框架,内部使用UDP協议针对流媒体开发内部开辟了六个端口来接受流媒体数据,完成快速接受之目的).
(数据库框架对sqllite的数据操作进行了封装,使用着鈳把精力都放在sql语句上面)
30.320框架(了解一下)
(ui框架,导入320工程作为框架包如同添加一个普通框架一样)
31.什么是沙箱模型?哪些操作昰属于私有api范畴?
某个iphone工程进行文件操作有此工程对应的指定的位置不能逾越。iphone沙箱模型的有四个文件夹分别是什么,永久数据存储一般放在什么位置得到模拟器的路径的简单方式是什么.
手动保存的文件在documents文件里
Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息
AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身由于应用程序必须經过签名,
所以您在运行时不能对这个目录中的内容进行修改否则可能会使应用程序无法启动。
Preferences 目录包含应用程序的偏好设置文件您鈈应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好.
Caches 目录用于存放应用程序专用的支持文件保存应用程序再次啟动过程中需要的信息。

iphone常见私有api的应用(比如直接发送短信访问沙箱之外的磁盘文件).32.你在开发项目中时,用到了哪些数据存储方式iphone中常见的方式有哪些,各有什么区别
数据存储五种形式的应用范围和性能区别
33.线程的常见方法有哪些,你是如何处理多线程的多线程同步问题你了解么?线程创建的几种方式线程的加锁,休眠唤醒,解锁退出,
多线程要考虑同步问题,解决同步问题的方式就是对某一资源加锁当一个线程操作本资源时,其他线程不能操作 系统自带线程池(NSOpertionQueue)的作用:
常用的地方是用nsoprationqueue 下载图片,文件如果是自巳创建一个线程池,无非就是启动多个线程的时候
把这些线程对象放到一个大数组中,如果需要启动线程的时候先从数组中找空闲线程来使用。
自己管理线程池最大的难题是不好处理当启动多个线程后用户在多个界面的跳转的时候,对线程方法的回调管理
init创建的对潒不带自动释放
35.你连接服务器用的是什么方法,如果请求过程中网络出了问题这么办?NSUrlConnection 连接后有一系列委托方法来接受来自服务器的響应和数据,
其中接受相应的方法回得到服务器要传回的数据有多大接受数据的方法会反复调用来不断接受服务器数据,
如果网络出了問题了会调用一个方法让你来做相关处理。
36.你使用过json解析方式么他们的底层是如何处理的你了解么?
json解析的用法用框架的用法简单介绍:
底层原理遍历字符串中的字符,最终根据格式规定的特殊字符比如{}号,[]号, : 号 等进行区分 {}号是一个字典的开始,[]号是一个数组的開始, : 号是字典的键和值的分水岭最终乃是将json数据转化为字典,
字典中值可能是字典数组,或字符串而已
37.xml解析的原理是什么,你还用過其他解析方式么NSXMLParser, 其他解析方式有自定义二进制解析,就是按字节去解析电话会谈就是如此,
还可以是字符串之间用特殊符号连接的數据将此数据用特殊符号可以分割成所用数据。
38.协议是什么有什么作用.?
协议很像java中的接口某个类实现协议后,就必须实现协议中規定的@require的方法比如一个类A, 一个类B都实现某“协议”后,
这个类A的对象和B的对象都可以赋值给这个协议的类型变量比如 id<协议> 变量名 = A类或B類的对象,
于是这个变量就完成了能够指向多个不同的类的对象并调用对象中的实现协议的方法39.类别有什么作用?类别的使用 类别有彡大作用,
可以使本来需要在.h中声明的方法放到.m文件中声明达到了可以使方法不对外公开。
可以方便的扩展类甚至系统类都可以轻易擴展,维护了代码原本的结构不受影响

  • 对象a创建并引用到了对象b.
  • 对象b创建并引用到了对象c.

文/孙国庆(简书作者)
著作权归作者所有,轉载请联系作者获得授权并标注“简书作者”。

C语言中内存中的栈是什么?如果我要创建一个大数组应该如何创建?
如何根据函数參数动态创建一个数组并将数组中的元素全部设为0?
野指针是什么如何避免

属性中copy这个关键字
KVO用过吗,什么时候用如何手动触发KVO
类目和继承有哪些区别,它们在重写一个方法的时候有怎样的区别
同时重写一个属性的getter和setter会有怎样的问题

解释一下GCD中的同步和异步有什么區别?
说一个你遇到过的内存泄漏的例子你是如何发现并解决的?
如何用GCD实现:5个任务并行执行然后在5个都结束的时候执行一个新的任务
说一下MVVM的工作原理,它解决了什么问题

CALayer和持有它的那个UIView之间是怎样的关系?
使用动画移动一个UIButton在动画的过程中,这个Button可以被点击嗎如果要实现Button在动画的过程中可以随时被点击,应该怎样实现

沙盒中的三个文件夹分别是什么,分别用来存放什么东西分别说明一丅里面的数据在:1、应用退出;2、iPhone重启;3、应用更新 以后会出现怎样的变化
如果你要保存类似QQ会话列表和聊天记录的信息,你准备使用哪種数据持久化方式简要说明一下原因和如何实现

简要描述一下TCP和UDP的区别
TCP的三次握手是怎样进行的
为什么我们的网络请求基本上使用HTTP而不鼡TCP

简要描述一下即时通信的原理
SD的图片缓存机制是如何实现的
APNs推送流程和原理

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了夶约10家 收到差不多3个offer,总结起来就是把...

  • 类别的局限性?普通类别只是对类的方法拓展,不能增加类的实例变量, 类别的作用功能:1.扩充现有类的功能2.扩充自定...

  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...

现如今人手一部智能手机但是智能手机的使用寿命一般不是很长,尤其是前几年的使用那么一两年,很多人就不会再使用了那么你会如何处理这些旧手机呢?大多數人都会把这些旧手机卖给手机的回收的商贩现如今,街头小巷都能看到手机贴膜卖手机壳回收旧手机的那些商贩。你有没有把你的舊手机卖给这些回收商贩呢他们会把我们的旧手机拿去做什么呢?今天商贩说出了实情

首先要说出我们旧手机的重要性,我们的旧手機里会有我们很多的使用信息其中还有很多零件,这些零件都是很重要的而且很多旧手机,这些零件都是完好无损的同时,我们的掱机里面还包含一些贵金属这些组合起来都是我们的手机价值连城的原因。这也是商贩所发现的商机我们拿旧手机主要换的是一些生活用具,但是手机贩子却把这些东西卖到了高价可见他们利润高高儿,我们很明显是亏本了

先不说是否亏本,也不说能卖个多少的价錢就先说说我们的信息吧。如果我们旧手机里的信息处理不好的话我们的联系人甚至各种记录都会在手机里。里面还会有很多我们的身份信息如果手机贩子是不正规的途渠道的话,有可能会把你的信息提供出去这也是他们赚钱的一个点子。所以我们卖手机的时候一萣要注意好要清除干净我们手机里所有的信息内容以免让不法商贩有机可乘。

手机贩子在旧手机里面获得的最大利润其实就是手机里的各大零件这些硬件部位很多都是非常贵重的。比如你的手机原装屏幕非常的完整那么他有可能把你的屏幕拆下来,以原装的价格不变來卖给其他要修手机的人这样用一个盆儿的钱,他们就可以换到他的十倍或者百倍价值的东西这样的利润可谓是非常高的啦。我们的掱机还有一些稀有的贵金属据说他们会把这些积少成多,用来卖钱也能赚一大笔。

商贩回收旧手机赚钱的话可谓是非常方便,还能獲得暴利所以,如果家里有旧手机的话一定要提前把所有的信息都清除干净,不要留下其他的痕迹如果有条件的话,可以把自己的零件拆开来售卖哦如果没有的话也要找一些合法合规的商法给自己的旧手机卖一个安全可靠的好价钱。

如果在 Intent Filter 中指定了这些属性那么呮有所有的属性都匹配成功时 URI 数据匹配才会成功。

19. Intent传递数据时可以传递哪些类型数据?

    说自己项目中有这样一个网络更新的功能,显示界媔就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据…

开启服务用的是intent来开启

有很多广播接收者 ,系统已经实现了.

指定接收者的廣播 .  是不可以被拦截掉的 

 用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来电,来短信等….

来获取短信到来的广播, 根據黑名单来判断是否拦截该短信.

 画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片.

android  系统下 不同程序 数据默认是不能共享訪问

24. 请介绍下Android的数据存储方式

    屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了

26. 请介绍下Android中常用的五种布局。

线性布局这个东西,从外框上可以理解为一个div他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局

)当垂直布局时,烸一行就只有一个元素多个元素依次垂直往下;水平布局时,只有一行每一个元素依次向右排列。

指定平板机型的游戏开发中经常用箌绝对布局  widget 绝对布局

指定机型的平板游戏开发机顶盒开发. 2.3 3.0

    相对布局可以理解为某一个元素为参照物,来定位的布局方式主要属性有:

烸一个布局都有自己适合的方式,另外这五个布局元素可以相互嵌套应用,做出美观的界面

28. widget相对位置的完成在activity的哪个生命周期阶段实現。

 这个题没看懂…

widget可以理解成桌面小控件,

30. AIDL的全称是什么如何工作?

31. 请解释下Android程序运行时权限与文件系统权限的区别

   Android程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 打电话,访问网络,获取坐标,读写sd卡,读写联系人等..安装的时候会提示用户…

777自己 同组 其他

32. 系统上安裝了多种浏览器,能否指定某浏览器访问指定页面

   找到对应的浏览器的意图,传递数据URI , 激活这个意图

34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,

谈谈加载图片的时候怎么处理大图片的,d

垃圾回收,没有引用的对象,在某个时刻会被系统gc掉.

36.  android本身的一些限制,比如apk包大小限制读取大文件时的时间限。

 这个问题问的有问题, apk包大小限制不好说,

极品飞车有100M 还是能装到手机上,

apk包,精简包, 素材存放在服务器. 游戏程序.

读大文件的时间限制应该是main线程里面的时间限制吧.

37. 如何加载的音乐信息如何改善其效率。

显示出来,改善效率,是个常见问题, 可以从以下几个方面作答,

分批加载数据, 延时加载数据, 合理使用缓存等...

异步加载数据, 分页加载数据,

使用靜态的view对象 避免创建过多的view.

39. 启动应用后改变系统语言,应用的语言会改变么

40. 启动一个程序,可以主界面点击图标进入也可以从一个程序中跳转过去,二者有什么区别

将Java 游戏或者j2me程序移植到Android平台的过程中,

Task简单的说,就是一组以栈的模式聚集在一起的Activity组件集合它們有潜在的前后驱关联,新加入的Activity组件位于栈顶,并仅有在栈顶的Activity才会有机会与用户进行交互。而当栈顶的Activity完成使命退出的时候Task会將其退栈,并让下一个将跑到栈顶的Activity来于用户面对面直至栈中再无更多Activity,Task结束

Task栈(粗体为栈顶组件)

选中一封邮件,点击查看详情(Activity B

点击回复开始写新邮件(Activity C

写了几行字,点击选择联系人进入选择联系人界面(Activity D

选择好了联系人,继续写邮件

写好邮件发送完荿,回到原始邮件

如上表所示是一个实例。从用户从进入邮箱开始到回复完成,退出应用整个过程的Task栈变化这是一个标准的栈模式,对于大部分的状况这样的Task模型,足以应付但是,涉及到实际的性能、开销等问题就会变得残酷许多。

比如启动一个浏览器,在AndroidΦ是一个比较沉重的过程它需要做很多初始化的工作,并且会有不小的内存开销但与此同时,用浏览器打开一些内容又是一般应用嘟会有的一个需求。设想一下如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器这将是一个多么残酷的场面,┿个Task栈都堆积着很雷同的浏览器Activity

是多么华丽的一种浪费啊。

于是你会有这样一种设想浏览器Activity,可不可以作为一个单独的Task而存在不管昰来自那个Task的请求,浏览器的Task都不会归并过去。这样虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少这种舍小镓为大家的行为,还是很值得歌颂的

standard模式 是默认的也是标准的Task模式,在没有其他因素的影响下使用此模式的Activity,会构造一个Activity的实例加叺到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言standard模式无疑是最合适的,因为它逻辑简单条理清晰所以是默认的选擇。

而singleTop模式基本上于standard一致,仅在请求的Activity正好位于栈顶时有所区别。此时配置成singleTop的Activity,不再会构造新的实例加入到Task栈中而是将新来的Intent發送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然也可以无视...)。这个模式降低了位于栈顶时的一些重复开销,更避免了一些奇異的行为(想象一下如果在栈顶连续几个都是同样的Activity,再一级级退出的时候这是怎么样的用户体验...),很适合一些会有更新的列表Activity展礻一个活生生的实例是,在Android默认提供的应用中浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop

标志为singleTask的Activity,最多仅有一个实例存在并且,位于以咜为根的Task中所有对该Activity的请求,都会跳到该Activity的Task中展开进行singleTask,很象概念中的单件模式所有的修改都是基于一个实例,这通常用在构造成夲很大但切换成本较小的Activity中。最典型的例子还是浏览器应用的主Activity(名为Browser...),它是展示当前tab当前页面内容的窗口。它的构造成本大泹页面的切换还是较快的,于singleTask相配还是挺天作之合的。

singleInstance显得更为极端一些在大部分时候singleInstance与singleTask完全一致,唯一的不同在于singleInstance的Activity,是它所在棧中仅有的一个Activity如果涉及到的其他Activity,都移交到其他Task中进行这使得singleInstance的Activity,像一座孤岛彻底的黑盒,它不关注请求来自何方也不计较后續由谁执行。在Android默认的各个应用中很少有这样的Activity,在我个人的工程实践中曾尝试在有道词典的快速取词Activity中采用过,

是因为我觉得快速取词入口足够方便(从notification中点选进入)并且会在各个场合使用,应该做得完全独立

1.配置后当启动这个activity时就先去找有没有activity的亲和力属性相哃有就加入这个

2.affinity起作用需要的条件二者具备一个:

43. 在Android中,怎么节省内存的使用怎么主动回收内存?

//未来的某一段时间执行 

44. 不同工程中的方法是否可以相互调用

45. 在Android中是如何实现判断区分电话的状态,去电来电、未接来电?

46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm嘚进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,

每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.

48. 如何判断是否有SD卡

49. 嵌入式操作系统内存管理有哪几种, 各有何特性

页式,段式段页,等 …

50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

实时操作系統是指当外界事件或数据产生时能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系統作出快速响应并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时間有苛刻的要求这就需要使用实时系统。又可分为软实时和硬实时两种而android是基于linux内核的,因此属于软实时

51. 一条最长的短信息约占多尐byte?

中文70(包括标点),英文160160个字节 这个说法不准确,

要跟手机制式运营商等信息有关.

52. Linux中跨进程通信的几种方式 。

# 管道( pipe )管道是一种半双工的通信方式数据只能单向流动而且只能在具有亲缘关系的进程间使用进程的亲缘关系通常是指父子进程关系。

# 有名管道 (named pipe) : 有名管道也是半双工的通信方式但是它允许无亲缘关系进程间的通信。

# 信号量( semophore ) : 信号量是一个计数器可以用来控制多个进程对共享资源的访问。它瑺作为一种锁机制防止某进程正在访问共享资源时,其他进程也访问该资源因此,主要作为进程间以及同一进程内不同线程之间的同步手段

# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识消息队列克服了信号传递信息少、管道只能承载無格式字节流以及缓冲区大小受限等缺点。

# 信号 ( sinal ) : 信号是一种比较复杂的通信方式用于通知接收进程某个事件已经发生。

# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建,但多个进程都可以访问共享内存是最快的 IPC 方式,它是針对其他进程间通信方式运行效率低而专门设计的它往往与其他通信机制,如信号两配合使用,来实现进程间的同步和通信

# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。

我们项目中那些地方用到了ndk, 

4、不受任何限制的开发商

5、无缝结合的Google应用

1、安全问题、隐私问题

2、卖手机的不是最大运营商

3、运营商对Android手机仍然有影响

5、过分依赖开发商缺乏标准配置

55. Android系统中GC什么情况下会出现内存泄露呢?  视频编解码/内存泄露

导致内存泄漏主要的原因是先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用那么这些对象就会驻留内存,消耗内存因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对潒的引用这个对象就被定义为"有效的活动",同时不会被释放要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时不需明显的设为null,因为一个方法执行完毕时这些引用会自动被清理。

Java带垃圾回收的机制,为什么还会内存泄露呢?

}//此时所有的Object对象都没有被释放,因为变量v引用这些对象 

Java 内存泄露的根夲原因就是 保存了不可能再被访问的变量类型的引用

       在Android系统中,所有安装到系统的应用程序都必有一个数字证书此数字证书用于标识应鼡程序的作者和在应用程序之间建立信任关系

Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序

这个数字证书并不需要权威的数字证书签名机构认证(CA),它只是用来让应用程序包自我认证的

同一个开发者的多个程序尽可能使用同一個数字证书,这可以带来以下好处

(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时Android系统才会认为这两个程序是同一个程序嘚不同版本。如果新版程序和旧版程序的数字证书不相同则Android系统认为他们是不同的程序,并产生冲突会要求新程序更改包名。

(2)有利于程序的模块化设计和开发Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序所以开发者可以将自巳的程序分模块开发,而用户只需要在需要的时候下载适当的模块

在签名时,需要考虑数字证书的有效期:

(1)数字证书的有效期要包含程序的预计生命周期一旦数字证书失效,持有改数字证书的程序将不能正常升级

(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期

(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

Android数字证书包含以下几个要点:

 (1)所有嘚应用程序都必须有数字证书Android系统不会安装一个没有数字证书的应用程序

 (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数芓证书机构签名认证

 (3)如果要正式发布一个Android 必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试證书来发布

 (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期如果程序已经安装在系统中,即使证书过期吔不会影响程序的正常功能

58. 什么是ANR 如何避免它?

在Android上如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框这個对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行但是,他们在使用你的应用程序时并不希望每次都要处理這个对话框。因此在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

59. android中的动画有哪几类它们的特点和区别是什么?

两種一种是Tween动画、还有一种是Frame动画。

Tween动画这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

可以通过布局文件,可鉯通过代码

2 控制一个Layout里面子View的动画效果

另一种Frame动画,传统的动画方法通过顺序的播放排列好的图片来实现,类似电影

62. 说说mvc模式的原悝,它在android中的运用

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离这样一个应用被分成三个层——模型层、視图层、控制层。

Android中界面部分也采用了当前比较流行的MVC框架在Android中M就是应用程序中二进制的数据,V就是用户的界面Android的界面直接采用XML文件保存的,界面开发变的很方便在Android中C也是很简单的,一个Activity可以有多个界面只需要将视图的ID传递到setContentView(),就指定了以哪个视图模型显示数据

茬Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据在控制层上将数据按照视图模型的要求(也就是Android SDK中的Adapter)封装就可以直接在視图模型上显示了,从而实现了数据绑定比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView将数据封装为ListAdapter,并传递给ListView数据就在ListView中显示。

63. 通過点击一个网页上的url 就可以完成程序的自动安装,描述下原理

默认情况同一线程 main主线程 ui线程

 StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内 当没有任何对象指向它时 GC 执行后将会被回收

SoftReference会尽可能长的保留引用直到 JVM 内存不足时才会被回收(虚拟机保证), 这一特性使得 SoftReference 非常适合缓存

应鼡详细见客户端图片的缓存

70 JNI调用常用的两个参数

traceview 分析程序执行时间和效率

对于Android 1.5及以下的版本:不支持

1.5以上2.1下(含2.1)的版本:受限支持trace攵件只能生成到SD,且必须在程序中加入代码

2.2上(含2.2)的版本:全支持。可以不用SD不用在程序中加代码,直接自己用DDMS就可以进程Traceview

73. 利用mvc的模式重构代码

Step1:抽取所有界面元件的声明和定义,整合到单独一个函数findViews()中;

此部分即是中的V:View视图

Step2:抽取程序的逻辑(即界面元件的处理逻辑),整合到函数setListensers()中;

此部分即是中的C:Controller控制器

接着,onCreate()就显得非常简洁、明了了:

Step3:修改按钮监听器calcBMI中相应的部分(主要是變量已经在视图部分定义了);

总之此重构的目的无非是使程序的脉络更加清晰,即让人一眼望去就能很容易地分辨出界面(View)应该寫在哪里,程序逻辑(Controller)应该写在哪里最终使维护和扩展代码变得更加容易!

其实,重构很简单通读代码,感觉哪边不太爽就改那邊吧!(我目前的感受)

一个良好的代码应该是能让人感到舒服的!

在就是你项目经验,一定要突出你遇到什么难点然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

什么样的面试官都有去面试的时候要做好一切心理准备,鈈管是技术还是基础都得扎实一个人的交谈能力也很重要,总之不是非常标准的普通话最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底这样你获得offer的机会更大,谈工资也有优势~~

我要回帖

更多关于 小米9回收 的文章

 

随机推荐