最近换工作,已经是有所准备的,但是面试过程中还是很多我觉得比较基础的东西答的不够晚上,怪自己没有深入的思考。下面做个总结:

1. 多线程中NSThread 为什么还存在?

其实面试官想问的是NSThread、GCD、NSOperation 的区别吧

答案:

NSThread

优点:NSThread 轻量级,使用简单,一个thread 对应一个线程

缺点:需要自己管理线程的生命周期,线程同步、加锁、睡眠以及唤醒等

NSOperation

自带线程管理的抽象类。
   优点:自带线程周期管理,操作上可更注重自己逻辑。更面向对象,可以自定义,kVO监听     状态
   缺点:面向对象的抽象类,只能实现它或者使用它定义好的两个子类

GCD

优点:基于多核的,最高效,避开并发陷阱。
   缺点:基于C实现。多线程优先级,线程取消等问题处理比较麻烦

2. SQLite 多线程问题

在不考虑效率的情况下SQLite 其实有三种方式实现

1.  多个线程公用一个数据库链接(不合适)

原因:多个线程之间的同步太麻烦。

2. 每个线程管理自己的数据库链接(不合适)

原因:线程数过多(上百左右个线程发起数据操作)会导致数据库压力大,尤其是有事务操作时会发起很多事务请求,这时所有的带事务请求都会卡在beginTransaction,严重影响性能

3. 串行队列异步的管理多线程(FMDB)

通过实现一个FMDatabaseQueue单例串行队列,其实是CGD实现的

更多关于SQLlite 优化参考

www.cnblogs.com/huozhong/p/…

3. initialize 自类没有实现的情况下,父类initialize会调用几次?

答案是2次,原因是

initialize 原理是 ((void(*)(Class, SEL))objc_msgSend)(cls, SEL_initialize) 方式

因为你的子类没有定义 initialize 类方法,所以消息是由父类的 initialize 类方法处理的

还有一个比较常见的考察是和load 方法对比,详细的就不在这儿描述了

blog.csdn.net/fys_0801/ar…

4. 打印[self class] 和 [super class] 为什么一样

由于都没有重写class方法,所以self 和 super都调用的是基类的class方法,所以结果肯定是一样的,然后[self class]必定是当前实例的类对象也就是ClassB;所以[super class]也是一样的结果

那么问题来了?那为什么[super init] 方法却能调用父类的呢?

原因是

super是用来处理运行时消息转发的边界问题;一般的方法调用都回转成运行时c语言方法:objc_msgSend(id self, SEL cmd, ...),然而当遇到super时会调用objc_msgSendSuper来处理消息,也就是去父类的方法表中中找方法

5. 206 状态码是什么意义

这个问题是考察我的http 基本功,可惜基本功太差,没有答上来,惭愧

正确是:客户发送了一个带有Range头的GET请求,服务器完成了它。断点续传的时候用得到

6. JSPatch 当有5个参数的时候如何处理的

其实前面的时候问JSPatch 原理的时候,我答的还是不错的,当问到这个的时候,我就感觉我前面的努力白费了。技不如人认了。

回来特意看了一下源码,就是这样列举的方式。。。

7.关于NSString的retainCount

NSString 不同的方式,调用retainCount 为什么结果差别那么大

1. 常量的方式

NSString *s = @"test";
NSLog(@"s:%d",[s retainCount]); // -1或2147483647(即UINT_MAX ( Maximum value an `unsigned int')复制代码

2. stringWithFormat 方式

NSString *s = [NSString stringWithFormat:@"%s", "test"];
NSLog(@"s:%d",[s retainCount]); // 1
使用stringWithFormat创建的NSString为变量,系统会进行引用计数复制代码

3. stringWithString

stringWithString这个方法比较特别:它的retainCount取决于它后面跟的string对象
NSString *s1 = [NSString stringWithString:@"test"];
NSString *s2 = [NSString stringWithString:[NSString stringWithFormat:@"test,%d",1]];
NSLog(@"s1:%d",[s1 retainCount]); // 2147483647
NSLog(@"s2:%d",[s2 retainCount]); // 2
复制代码

8. performSelector withObject afterDelay

聪明的你们一定是知道,面试官要问为什么这个方法在自线程中调用正常吗?为什么

1、带有afterDelay参数的方式是使用当前线程的定时器在一定时间后调用SEL,而 performSelector withObject 方式是直接调用SEL。

2、子线程中默认是没有定时器的

解决办法

1. 自线程中开启定时器 [[NSRunLoop currentRunLoop] run];

2. 采用 dispatch_after  方式替换

9. category 属性如何加weak方式

我们都知道category 都用OBJC_ASSOCIATION的方式添加属性,但是并没有weak 方式

我们都知道NSObject 属性可以加weak 属性,那我们就利用它包装一层

具体代码实现参考文章

zhuanlan.zhihu.com/p/33428509

10. 如何判断当前的队列是哪个队列

用到了GCD的一个关键方法 dispatch_queue_get_label

如判断当前队列是否是主队列

#define dispatch_main_async_safe(block)\
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0)
{        block();
}
else
{        dispatch_async(dispatch_get_main_queue(), block);\
}
#endif复制代码

iOS 10道细节面试题相关推荐

  1. java builder pool_每周10道Java面试题:String, String Pool, StringBuilder

    每周10道 Java 面试题由 ImportNew 整理编译自网络. 1. 写出下面代码的运行结果. int src = 65536; Integer dst = new Integer(65536) ...

  2. 厉害了,关于String的10道经典面试题

    转载自 厉害了,关于String的10道经典面试题 1.String是基本数据类型吗? 2.String是可变的话? 3.怎么比较两个字符串的值一样,怎么比较两个字符串是否同一对象? 4.switch ...

  3. 稍微有点难度的10道java面试题,你会几道?

    转载自 稍微有点难度的10道java面试题,你会几道? 1.jvm对频繁调用的方法做了哪些优化? 2.常见的攻击手段有哪些?如何防范? 3.restful api有哪些设计原则? 4.hessian是 ...

  4. 10道python面试题,每题10分,你能的多少分!(内附python教程)

    image.png 1.一行代码实现1–100之和 10道python面试题,每题10分,你能的多少分! 2.简述面向对象中new和init区别 init是初始化方法,创建对象后,就立刻被默认调用了, ...

  5. 测试需知的TCP3次握手、4次挥手及10道经典面试题

    ------·今天距2020年95天·------ 这是ITester小栈第41次推文 大家好,我是coco 小 锦鲤 记得从前 大学计算机组成原理老师给coco讲过 最深刻的一课是搭网线 口诀是这样 ...

  6. java xml 面试_Java程序员面试常见的10道XML面试题

    问题1:XML是什么? 答:XML即可扩展标记语言(Extensible Markup language),你可以根据自己的需要扩展XML, ,而不能使用用户定义的标签.使用DTD和XML Schem ...

  7. 后端开发10道经典面试题的剖析, 技术方向如何决定职业方向

    10道经典面试题的剖析, 技术方向如何决定职业方向 1. time_wait, close_wait如何解决? 2. 服务器接入抖动如何解决? 3. malloc的实现原理 视频讲解如下,点击观看: ...

  8. 面试java你最擅长什么_面试官最喜欢问的10道Java面试题

    1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 g ...

  9. 盘点苹果2016WWDC精彩看点, iOS 10官方细节要来了

    4月19日消息,据国外媒体报道,苹果公司表示今年的全球开发者大会(WWDC)将于6月13日在旧金山正式拉开帷幕,活动一直持续至6月17日. 苹果全球市场营销高级副总裁菲利普·席勒(Philip Sch ...

最新文章

  1. 解决ajax获取不到按钮的id
  2. 防止用户将表单重复提交的方法
  3. feignRequest$Options错误
  4. java反射机制原理详解_java反射机制的详细讲解
  5. 树莓派支持uvi协议吗_树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi)...
  6. 口袋操作系统_全自动阀口袋包装机的发展
  7. 基于JavaSwing+mysql的图书管理系统设计和实现
  8. python绘制小狗_用Python画一只有点方的小狗狗——turtle库基础入门
  9. 面试官问:Java 中的锁有哪些?我跪了……
  10. Java 容器源码分析之 ArrayList
  11. 【安装记录】Centos7.6下载安装配置教程(十分详细)
  12. 身份证前6位匹配户籍地址对应的数据地区sql脚本(里面包含json版本的)
  13. 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
  14. 查看oracle归档日志scn,Oracle 归档日志
  15. windows和linux的路径分隔符问题
  16. Joomla建站之幻灯片
  17. 谷歌学术、中国知网生成参考文献
  18. 如何高效录制教学视频?
  19. python与历史专业_python历史与基本类型
  20. 黑苹果更改时间命令_黑苹果Mac系统快捷键修改

热门文章

  1. 入门深度学习,先看看三位顶级大牛Yann LeCun、Yoshua Bengio和Geoffrey Hinton的联合综述
  2. 爱了!Intellij IDEA 自带的 Vim 插件真心不错
  3. TDSQL在微众银行的大规模实践之路
  4. Spring AOP 增强框架 Nepxion Matrix 详解
  5. 数据缺失、混乱、重复怎么办?最全数据清洗指南!
  6. 2020新款笔记本送一台!4核+8G+512固态
  7. 超越BERT的模型有哪些?
  8. 为什么应届生的身份这么值钱?
  9. 一篇文章搞懂人脸识别的十个概念
  10. 女友让我破解植物大战僵尸!我干脆撸了一款一样的....翻身舔狗把歌唱呀