直击应聘现场,程序员笔试,有苦不能说

金九银十已通过去,可是也不能阻挡程序猿们跳槽,寻找一份本身满意的工做。 本人收到一位程序员前两天面试中碰到的笔试问题,整理出一份本身的看法跟答案,具体内容以下:
现场照片java

持续关注:logic_楚阳,持续输出各大公司iOS面试系列文章,欢迎广大程序猿找我投稿面试中碰到的面试题,我会给你一份个人看法和答案,我前面已经分享100道我招聘的面试题,加入下方iOS技术交流群624212887直接获取;

图片描述

第一题:请举例至少三条以上会形成UITableView卡顿的状况

一、上方这个注释咱们能够翻译为。只加载缓冲好的图片,新的下载直到scrolling end,就是上拉下拉结束之后才去进行下载图片而后刷新程序员

 

二、 使用不透明视图。面试

 

三、 重复建立没必要要的table cell。sql

 

四、 视图的数目过多数据库

 

五、 多余的绘制工做。数组

 

六、 没有预渲染图像。缓存

 

七、 阻塞主线程。安全

 

tableView卡顿解决方案:网络

 

1.最经常使用的就是cell的重用,注册重用标识符(每当须要显示cell的时候,都会先去缓冲池中寻找可循环利用的cell,若是没有再从新建立cell)数据结构

 

2.减小cell中控件的数量(view是很大的对象,建立它会消耗较多资源,而且也影响渲染的性能。因此不用的不要加上去,不适用的能够先隐藏)

 

3.少使用addView 给cell动态添加view.

 

4.使用不透明视图(半透明状况下app须要消耗性能去渲染,不透明的视图能够极大地提升渲染的速度)。

 

5.使用局部更新(若是只是更新某组的话,使用reloadSection进行局部更新)

 

6.加载网络数据,下载图片,使用异步加载,并缓存.

 

7.不要实现无用的代理方法,tableView只遵照两个协议.

 

8.使用正确的数据结构来存储数据。

 

9.当处理一些全屏大图一类的耗资源的操做,能够用预渲染图像,在bitmap context里先将其画一遍,导出成UIImage对象,而后再绘制到屏幕。

第二题:ID类型的delegate属性究竟是用assign仍是weak,请简述缘由

@property (nonatomic, assign, readwrite) id delegate;

 

声明一个delegate,那么即使delegate指向的对象销毁了,delegate中依然会保存以前对象的地址

即,delegate成为了一个野指针...

 

而使用weak,则不会有上述问题,当delegate指向的对象销毁后,delegate = nil,

因此答案就是,使用weak。

第三题:为何IBOutlet修饰的UIView也适用weak关键词

由于当咱们将控件拖到Storyboard上,至关于新建立了一个对象,而这个对象是加到视图控制器的view上,view有一个subViews属性,这个属性是一个数组,里面是这个view的全部子view,而咱们加的控件就位于这个数组中,那么说明,实际上咱们的控件对象是属于view的,也就是说view对加到它上面的控件是强引用。当咱们使用Outlet属性的时候,咱们是在viewController里面使用,而这个Outlet属性是有view来进行强引用的,咱们在viewController里面仅仅是对其使用,并无必要拥有它,因此是weak的。

 

若是将weak改成strong,也是没有问题的,并不会形成强引用循环。当viewController的指针指向其余对象或者为nil,这个viewController销毁,那么对控件就少了一个强引用指针。而后它的view也随之销毁,那么subViews也不存在了,那么控件就又少了一个强引用指针,若是没有其余强引用,那么这个控件也会随之销毁。

 

不过,既然没有必将Outlet属性设置为strong,那么用weak就行了

第四题:题目:iOS通常有几种缓存方式,请一一举例

iOS本地缓存数据方式有六种:

 

1.直接写文件方式:能够存储的对象有NSString、NSArray、NSDictionary、NSData、NSNumber,数据所有存放在一个属性列表文件(*.plist文件)中。

 

2.NSUserDefaults(偏好设置),用来存储应用设置信息,文件放在perference目录下。

 

3.归档操做(NSkeyedArchiver),不一样于前面两种,它能够把自定义对象存放在文件中。

 

4.coreData:coreData是苹果官方iOS5以后推出的综合型数据库,其使用了ORM(Object

Relational Mapping)对象关系映射技术,将对象转换成数据,存储在本地数据库中。coreData为了提升效率,甚至将数据存储在不一样的数据库中,且在使用的时候将本地数据放到内存中使得访问速度更快。咱们能够选择coreData的数据存储方式,包括sqlite、xml等格式。但也正是coreData是彻底面向对象的,其在执行效率上比不上原生的数据库。除此以外,coreData拥有数据验证、undo等其余功能,在功能上是几种持久化方案最多的。

 

5.FMDB:FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了不少麻烦、冗余的C语言代码,对比苹果自带的Core

 

Data框架,更加轻量级和灵活,提供了多线程安全的数据库操做方法,有效地防止数据混乱。

 

6.Realm:跨平台的,底层实现核心是C++写的, FMDB是基于SQLite的封装. 因此他们的实现原理就不同. Realm直接能够保存模型对象. 

第五题:题目:请任意一个面向对象的语言简要实现一个抽象工厂模式

如下实现用的java来实现的抽象工厂

 

图片描述

 

图片描述

 

图片描述

 

图片描述

第六题:题目:假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,及上述字符串处理以后的输出结果为:aabcd

图片描述

相关文章
相关标签/搜索