Skip to content

Commit 01edfc2

Browse files
committed
update inline Questions
1 parent 1b8e99e commit 01edfc2

8 files changed

+56
-46
lines changed

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<p align='left'>
44
<img src="https://img.shields.io/github/stars/DevDragonLi/iOSInterviewsAndDevNotes.svg">
55
<img src="https://img.shields.io/github/forks/DevDragonLi/iOSInterviewsAndDevNotes.svg">
6-
<img src="https://img.shields.io/badge/build-passing-brightgreen.svg">
76
<img src="https://img.shields.io/badge/platform-iOS-ff69b4.svg">
87
<img src="https://img.shields.io/badge/PR-welcome%20!-brightgreen.svg?colorA=a0cd34">
98
<img src="https://img.shields.io/packagist/l/doctrine/orm.svg">
@@ -13,17 +12,18 @@
1312
1413
> Stargazers over time
1514
16-
[![Stargazers over time](https://starcharts.herokuapp.com/DevDragonLi/iOSDevNotesAndInterviews.svg)](https://starcharts.herokuapp.com/DevDragonLi/iOSDevNotesAndInterviews)
17-
15+
<img src="https://starcharts.herokuapp.com/DevDragonLi/iOSDevNotesAndInterviews.svg",width="320",height="188">
1816

1917
- **[iOS面试题目(可能是迄今为止东半球收集整理较为全而精的面试题)](#iOSinterview)** `ing`
2018
- **[iOSDevNote](#iOSDevNote)**
2119
- **[通用开发技能已迁移,点此](https://github.com/DevDragonLi/DevelopBaseNote)**
22-
- Git,markdown ...
20+
- Git,markdown ,shell...
2321

2422
## <a name="iOSinterview"></a> iOS面试题目列表
25-
> 温馨提示:可从任意份点击进入,每份文档提供 `上一份``下一份` 超链,方便查阅。
26-
> 大部分文档面试题答案采取`折叠`方式展示。
23+
24+
> ① 温馨提示:可从任意份点击进入,每份文档提供 `上一份``下一份` 超链,方便查阅。
25+
26+
> ② 大部分文档面试题答案采取`折叠`方式展示。
2727
2828
1. [一份"有点难"的iOS面试题MrPeak2016年:参考答案已更新完毕](./interview-iOS/01一份"有点难"的iOS面试题MrPeak2016年.md)
2929
2. [interview-iOS-2:参考答案已更新完毕](./interview-iOS/02interview-iOS-2.md)
@@ -56,6 +56,7 @@
5656
| CATEGORY | FILENAME |
5757
|:----|:----|
5858
|iOS技能图谱/技术栈|[iOS技能图谱-byStuQ](./iOSNote/map-MobileDev-iOSDev.md) <br>[JSPatch作者博客中的技能栈-图](./images/iOS/iOSDev-bang.png)|
59+
|iOS开发相关shell脚本|[DevelopBaseNote/shell](https://github.com/DevDragonLi/DevelopBaseNote#shell)|
5960
|iOSDevNote|[**Dark Mode适配组件及Demo**](https://github.com/DevDragonLi/LFLDarkModeKit)<br>[**ProtocolService组件化简易中间件Demo**](https://github.com/DevDragonLi/ProtocolServiceManger)<br>[**iOS开发架构分享文稿**](./iOSNote/iOS_architecture.pdf)<br>[**掘金客户端体积瘦身**](./iOSNote/iOSAppThin.md)<br>[**iOSDevCodeRepo**](https://github.com/DevDragonLi/iOSDevDemo)<br>[Core Animation框架结构及性能调优11张大图详解](https://github.com/DevDragonLi/Core-AnimationPerformanceOptimization)<br>[iOS_StaticLibrary](./iOSNote/iOS_StaticLibrary.md)<br>[iOS经典Crash分析与总结- QQ`MelonTeam`](https://github.com/DevDragonLi/iOSDevDemo)<br>[iOS核心动画高级技巧阅读笔记(**性能调优**,**高效绘制**,**图像IO**,**图层性能**)](./iOSNote/iOSCoreAnimationNote.md)<br>[单元测试概述](./iOSNote/UnitTesting.md)|
6061
|CocoaPods 相关 |<br>[**cocoapods-plugins**](./iOSNote/CocoaPods/cocoapods-plugins.md)<br>[提交开源框架之流程](./iOSNote/CocoaPods/cocoapods-podspec.md)<br>[管理库的使用技巧](./iOSNote/CocoaPods/cocoapods-podspec.md)<br>[私有源组件化及podfile总结](./iOSNote/CocoaPods/Podfile.md)<br>[私有库参考Demo](https://github.com/DevDragonLi/iOSDevDemo/tree/master/1-DevDemo/PodPrivate_demo)<br>[podspec总结](./iOSNote/CocoaPods/podspec.md)|
6162
|开源框架|**[WiFi显示图片高清图;蜂窝显示图片缩略图解析](./iOSNote/Analyze/SDWebImage/网络网络状态不同加载图片.md)**<br>**[MJRefresh源码解析](./iOSNote/Analyze/MJRefresh/MJRefresh.md)**|

interview-iOS/01一份"有点难"的iOS面试题MrPeak2016年.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# 一份"有点难"的iOS面试题:MrPeak
33

4-
> Facebook · Software engineer
4+
> MrPeak : Facebook Software engineer
55
66
>[题目出处](https://zhuanlan.zhihu.com/p/22834934)
77
@@ -202,6 +202,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
202202
</details>
203203

204204
## iOS下所有的本地持久化方案?
205+
> [相似问题:iOS中常用的数据存储方式有哪些](./06iOS基础问题系列2017年.md)
205206
206207
<details>
207208
<summary> 参考内容 </summary>

interview-iOS/02interview-iOS-2.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
6161
> 通常来说,crash产生来源于两种问题:违反iOS系统规则导致的crash和App代码逻辑BUG导致的crash
6262
63-
### 1.应用逻辑的Bug
63+
### 应用逻辑的Bug
6464

6565
- SEGV:(Segmentation Violation,段违例),无效内存地址,比如空指针,未初始化指针,栈溢出等;
6666
- SIGABRT:收到Abort信号,可能自身调用abort()或者收到外部发送过来的信号;
@@ -70,7 +70,7 @@
7070
- SIGPIPE:管道另一端没有进程接手数据;
7171
常见的崩溃原因基本都是代码逻辑问题或资源问题,比如数组越界,访问野指针或者资源不存在,或资源大小写错误等
7272

73-
### 2.违反iOS系统规则产生crash的三种类型
73+
### 违反iOS系统规则产生crash的三种类型
7474
- 内存报警闪退
7575
- 当iOS检测到内存过低时,它的VM系统会发出低内存警告通知,尝试回收一些内存;如果情况没有得到足够的改善,iOS会终止后台应用以回收更多内存;最后,如果内存还是不足,那么正在运行的应用可能会被终止掉。在Debug模式下,可以主动将客户端执行的动作逻辑写入一个log文件中,这样程序童鞋可以将内存预警的逻辑写入该log文件,当发生如下截图中的内存报警时,就是提醒当前客户端性能内存吃紧,可以通过Instruments工具中的Allocations 和 Leaks模块库来发现内存分配问题和内存泄漏问题。
7676

@@ -83,14 +83,20 @@
8383

8484
</details>
8585

86-
## SDWebImage
86+
## SDWebImage
8787

88+
> [第四份面试题相关点:使用SDWebImage内存爆涨的问题](04interview-iOS-4.md)
89+
90+
> 加载图片的流程
91+
92+
> Cache是怎么做数据管理的?
93+
94+
> 内部做Decoder的原因
8895
8996
<details>
9097
<summary> 参考内容 </summary>
9198

92-
### 1.SDWebImage 加载图片的流程
93-
99+
### 加载图片的流程
94100

95101
1.入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。
96102

@@ -133,14 +139,13 @@
133139
20.SDWebImagePrefetcher 可以预先下载图片,方便后续使用。
134140

135141

136-
### 2. SDImageCache是怎么做数据管理的?
142+
### SDImageCache是怎么做数据管理的?
137143

138144
SDImageCache分两个部分,一个是内存层面的,一个是硬盘层面的。内存层面的相当是个缓存器,以Key-Value的形式存储图片。当内存不够的时候会清除所有缓存图片。用搜索文件系统的方式做管理,文件替换方式是以时间为单位,剔除时间大于一周的图片文件。当SDWebImageManager向SDImageCache要资源时,先搜索内存层面的数据,如果有直接返回,没有的话去访问磁盘,将图片从磁盘读取出来,然后做Decoder,将图片对象放到内存层面做备份,再返回调用层。
139145

140146

141-
### 3.内部做Decoder的原因 (典型的空间换时间)
142-
由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,所以在每次画图的时候,会有一个解压操作,这样效率很低,但是只有瞬时的内存需求。为了提高效率通过SDWebImageDecoder将包装在Data下的资源解压,然后画在另外一张图片上,这样这张新图片就不再需要重复解压了
143-
147+
### 内部做Decoder的原因 (典型的空间换时间)
148+
- 由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,所以在每次绘图的时候,**会有一个解压操作,这样效率很低,但是只有瞬时的内存需求**。为了提高效率通过SDWebImageDecoder将包装在Data下的资源解压,然后画在另外一张图片上,这样这张新图片就不再需要重复解压了
144149

145150
</details>
146151

@@ -175,7 +180,7 @@
175180
176181
```
177182

178-
- 第三方收集crash (比如说集成友盟,使用dSYM分析定位代码)
183+
- 第三方收集crash (比如说集成Bugly/友盟,使用dSYM符号化并定位代码)
179184

180185
- 上报的方式,时机,策略(优缺点)等
181186

interview-iOS/03interview-iOS-3.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11

22
# interview-iOS PartThree (profound understanding)
33

4-
## SEL和Method和IMP分别说下再谈下对IMP的理解?
4+
## SEL和Method和IMP?
5+
> 谈下对IMP的理解?
6+
57
<details>
68
<summary> 参考内容 </summary>
79

interview-iOS/04interview-iOS-4.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@
1414
</details>
1515

1616
## ReactiveCocoa(RAC)如何防止UIButton短时间内多次重复点击,大概思路?
17+
> 背面是这需要有RAC使用经验才可问
1718
1819
<details>
1920
<summary> 参考内容 </summary>
2021

2122
- 建立一个`flag`或者使用 `filter`
2223

23-
2424
- 事件完成 flag重置,否则一直skip或者filter (某个RAC群友抛砖引玉)
2525

26-
2726
</details>
2827

2928
## 倒计时如何实现 ?
@@ -32,6 +31,7 @@
3231

3332
- NSTimer ,精度不一定准确
3433
- GCD
34+
- DisplayLink
3535
- RAC
3636

3737

@@ -83,13 +83,13 @@
8383
<details>
8484
<summary> 参考内容 </summary>
8585

86-
> CocoaPods注意点:CocoaPods在pod install以后会生成一个Podfile.lock的文件,这个文件在多人协作开发的时候就不能加入在.gitignore中,因为这个文件会锁定当前各依赖库的版本,就算之后再pod install也不会更改版本,不提交上去的话就可以防止第三方库升级后造成大家各自的第三方库版本不同
86+
> **Podfile.lock**:在pod install以后会生成一个Podfile.lock的文件,这个文件在多人协作开发的时候就不建议加入在.gitignore中,因为这个文件会锁定当前各依赖库的版本,就算之后再pod install也不会更改版本,不提交上去的话就可以防止第三方库升级后造成大家各自的第三方库版本不同
8787
88-
> **CocoaPods原理**
89-
- > 1.Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可
90-
- > 2.对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方的各种资源文件复制到目标目录中
91-
- > 3.CocoaPods通过一个名为Pods.xcconfig的文件在编译时设置所有的依赖和参数
88+
### **CocoaPods原理**
9289

90+
- Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可
91+
- 对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方的各种资源文件复制到目标目录中
92+
- CocoaPods通过一个名为Pods.xcconfig的文件在编译时设置所有的依赖和参数
9393

9494
</details>
9595

@@ -130,6 +130,7 @@
130130
<summary> 参考内容 </summary>
131131

132132
- 对象的isa指向类,类的isa指向元类(meta class),元类isa指向元类的根类。isa帮助一个对象找到它的方法
133+
133134
- 是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass).根元类的isa指针指向本身,这样形成了一个封闭的内循环。
134135

135136

@@ -140,16 +141,19 @@
140141
<details>
141142
<summary> 参考内容 </summary>
142143

143-
- 联机调试 (需要插线,一般而言适用于开发人员)
144+
- 联机调试 (一般而言适用于开发人员)
145+
- 之前需要插线
146+
- 后期版本可以无线调试!
144147

145148
- 蒲公英等分发平台(就是需要提供参与app测试人员的设备UDID) 缺点:开发者需要将这些设备的UDID添加到开发者中心,每次有新的测试人员加入,需要重新生成profiles
146149

147150
- TestFlight进行App Beta版测试 (apple 官方,iOS8及以上版本的iOS设备才能运行):
148-
> 优点: 无需UUID,**外部测试人员的上限是10000人**(2018年后又扩大了测试上限),只需要参与app测试人员提供一个邮箱
151+
- 优点: 无需UUID,**外部测试人员的上限是10000人**(2018年后又扩大了测试上限),只需要参与app测试人员提供一个邮箱
152+
-
149153

150154
</details>
151155

152-
## Xcode8-自动配置开发证书过程?
156+
## Xcode8开始后自动配置开发证书过程?
153157

154158
<details>
155159
<summary> 参考内容 </summary>

interview-iOS/05iOS宝库iOS开发笔试题2017年.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ dispatch_group_t group = dispatch_group_create();
182182
</details>
183183
184184
## init方法私有化
185+
186+
> SDK或者组件设计API相关
185187
186188
<details>
187189
<summary> 参考内容 </summary>

interview-iOS/06iOS基础问题系列2017年.md

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<details>
4545
<summary> 参考内容 </summary>
4646

47-
```
47+
```
4848
1).swift独有的范围运算符
4949
a…b 表示 [a,b] 如3…5 就是范围取3,4,5
5050
2).swift独有的元组类型
@@ -53,7 +53,7 @@
5353
3).函数的默认参数值
5454
func addStudent (name:string,age:Int = 20) –>string{}
5555
设置了默认的年龄为20 所以再调用时只需要写个名字
56-
addStudent(“zss”)
56+
addStudent("DragonLi")
5757
要注意的是,使用了默认参数值, 系统会自动生成一个外部参数名。
5858
想改名字也就要写外部参数名了 即 addStudent(“zss”,age:18)
5959
4).swift中使用let定义常量,var定义变量
@@ -62,25 +62,28 @@
6262
缩减代码量,安全处理数据逻辑。
6363
......
6464
65-
```
65+
```
6666
</details>
6767

6868
### 如何对iOS设备进行性能测试?
6969
- Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具。这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据
70+
- Profile-> Instruments ->Time Profiler
7071

7172
### 集成三方框架有哪些方法?
7273
- 手动集成
7374
- cocoapods集成
7475
- carthage (iOS8+)
76+
- other
7577

7678
### 如何解决TableView卡的问题?
7779
<details>
7880
<summary> 参考内容 </summary>
7981

80-
* 复用单元格
82+
* 复用`cell`单元格
8183
* 单元格中的视图尽量都使用不透明的,单元格中尽量少使用动画
82-
* 图片加载使用异步加载
84+
* 图片加载或者耗时渲染操作使用异步加载
8385
* 滑动时不加载图片,停止滑动时开始加载(需要处理快速滑动的空白)
86+
* 具体看PM是否接受
8487
* 单元格中的内容可以在自定义cell类中的drawRect方法内自己绘制
8588
* 如非必要,减少reloadData全部cell,只reloadRowsAtIndexPaths
8689
* 如果cell是动态行高,计算出高度后缓存
@@ -113,22 +116,16 @@
113116

114117
</details>
115118

116-
### 说一说你对SQLite的认识?
117-
118-
- [参考](https://zhuanlan.zhihu.com/p/23911987)
119-
120-
- 性能,需求等方面
121-
122119
### runloop和线程有什么关系?
123120
<details>
124121
<summary> 参考内容 </summary>
125122

126-
> runloop和线程是一一对应关系
127-
128-
- 一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出
123+
- runloop和线程是一一对应关系
124+
- key:thread ,value :loop
125+
- 一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出
129126
- 保持程序的持续运行(ios程序为什么能一直活着不会死)
130-
- 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件【选择器·performSelector···】)
131-
- 节省CPU资源,提高程序性能,有事情就做事情,没事情就休息
127+
- 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件【选择器·performSelector···】)
128+
- 节省CPU资源,提高程序性能,有事情就做事情,没事情就休息
132129

133130
- 重要性
134131
- 如果没有Runloop,那么程序一启动就会退出,什么事情都做不了。

interview-iOS/07深圳iOS面试分享2018年4月.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@
7171
- 内存缓存的处理由NSCache对象实现,NSCache类似一个集合的容器,它存储key-value对,类似于nsdictionary类,我们通常使用缓存来临时存储短时间使用但创建昂贵的对象,重用这些对象可以优化新能,同时这些对象对于程序来说不是紧要的,如果内存紧张就会自动释放。
7272
- 先在内存中放置一份缓存,如果需要缓存到磁盘,将磁盘缓存操作作为一个task放到串行队列中处理,会先检查图片格式是jpeg还是png,将其转换为响应的图片数据,最后吧数据写入磁盘中(文件名是对key值做MD5后的串)。
7373

74-
- [官方UML图](https:www.github.com/rs/SDWebImage)
75-
7674
</details>
7775

7876
## Swift题

0 commit comments

Comments
 (0)