iOS知识结构

栏目: IOS · 发布时间: 6年前

内容简介:计算机三大知识结构:数据结构和算法,网络,操作系统。这里陈硕在知乎上有个补充:本文不会讲的很详细,只是简单罗列一些知识点及其应用场景,具体怎么做不会展开。

计算机三大知识结构:数据结构和算法,网络,操作系统。

这里陈硕在知乎上有个补充: https://www.zhihu.com/question/21405835 ,主要是谈到了计算机体系结构,这一块涉及到各个层面知识的串联和整合。

本文不会讲的很详细,只是简单罗列一些知识点及其应用场景,具体怎么做不会展开。

主要分几块的内容:iOS开发相关,计算机知识结构,软实力和职业规划。

一、iOS相关

1.iOS基础知识

OC语法,类别(系统类与自定义类的函数覆盖),协议与多重继承的关系,继承是用什么数据结构实现的(C++和OC)

引用计数与内存管理,ARC下什么情况需要自己管理内存

atomic的含义与内部实现,block是否必须用copy修饰?

数据库基础操作(sqlite)

NSThread/NSOperation/GCD使用

事件响应链与事件派发传递流程

H5与OC的交互

2.iOS进阶知识

UI方面:CALayer与CoreAnimation做动画,CoreGraphic绘图,TextKit/CoreText图文混排。

正则表达式

图层混合,离屏渲染的原因及解决方案

UITableView卡顿及其解决方法

OC对象模型,isa与super指向图(可以增加函数和isa混写的基础)

KVC/KVO实现原理,ARC,weak的实现原理,关联对象的原理,自动释放池的实现原理,(可变)数组和字典的实现原理

method swizzle和 isa swizzle

Block的实现原理与破解参数(方法签名),循环引用与解决方案

runtime的应用

runloop的原理与应用(对应安卓的looper以及前端的event loop),与线程的关系,子线程如何保活与销毁

GCD原理(线程池实现原理)

消息转发的流程,如何避免不能识别的方法崩溃

内存泄漏的常见场景及其解决方法,如何查找内存泄漏

Xcode如何调试EXC_BAD_ACCESS,常用LLDB调试命令有哪些

如何保证线程安全,比如数据库/文件/变量

NSProxy,NSHashTable与NSMapTable的应用场景

3.高阶

从HTTP请求到UIView渲染的流程和原理

JavascriptCore的原理

runtime的原理

崩溃库的原理,PLCrashreporter/KSCrash

卡顿监控和抓堆栈的原理

崩溃日志解析流程

APP与extension是如何共享数据的,Macport底层是用哪一种进程间通信方式来实现的

4.开源库

AFNetworking

SDWebImage/FastImageCache

YYCache

MJExtension/YYModel

ASDK

5.技术专项

安装包size

启动时间

流畅性/帧率

稳定性与主线程卡顿

内存消耗与内存泄漏

CPU使用率

网络优化(含弱网)

长连接心跳策略(参考微信)

6.质量相关

代码规范

持续集成

自动化测试

7.其他

直播几种协议的优缺点,如何性能调优,

直播是如何拿到第一帧开始显示的,直播的四大性能指标(直播的四大指标:画质、卡顿率、延时、秒开。画质和卡顿率要看传说的码率,码率高画质高,卡顿率也可能增大。延时跟直播协议直接相关。秒开则主要是减少GOP,即减少 I 帧在视频流的间隔。)

逆向

下拉刷新原理

数据安全(沙盒,HTTPS/二次加密,单次登录token)

代码安全(混淆加固)

音视频处理等特定领域,OpenGL,FFmpeg

二、计算机基础知识

1.网络知识

HTTP/HTTPS(握手流程)

DNS(劫持)

TCP三次握手四次挥手/慢启动/滑动窗口/流量控制/拥塞控制/快速重传/延迟应答/捎带应答,Dos攻击与防护

第三次握手或第四次挥手如果丢包会如何处理?

UDP及其应用

IP(IPV4与IPV6)与数据链路

cookie与session的区别和联系

公钥加密算法,证书信任链和数字签名

HTTP短连接和长连接的区别和联系

从浏览器输入一个字符串后发生了什么?

2.数据结构和算法

数组,链表,哈希表的实现原理

串和KMP

二叉树,二叉 排序 树,AVL二叉平衡树,红黑树,B数和B+树

队列,栈和堆及其应用

图的最小连接路径(最小生成图),广度遍历与深度遍历

排序和查找算法,不同 排序算法 的适用场景,如何选择

递归与分治,动态规划和贪心算法

3.操作系统

进程和线程,进程间通信和线程间通信的方式

进程的内存分布区域:代码区,常量区,数据区(已初始化和未初始化),堆和栈

不同锁的区别,什么情况下会死锁,怎么解决

存储管理与置换/淘汰算法

文件系统、数据库索引和B树B+树的关联

多处理机,多计算机和分布式系统的概念

用户态和内核态,用户线程和内核线程的关系/如何切换/映射关系

BSD层和Mach层

4.设计模式和面向对象设计原则

MVC,MVVM,单例,代理,观察者,中介者,组合模式

工厂模式/简单工厂

单一原则,依赖倒置原则,接口隔离原则,迪米特原则(最小知识原则),

无环依赖原则,开闭原则,里氏替换原则

时序图,流程图,UML类图,框架图

三、软实力

沟通与表达

总结复盘与提炼/升华

支撑业务与个人成长/团队成长

个人与团队影响力(技术总结,SDK,培训等给其他团队带来价值)

四、职业规划

技术专家 or 技术管理

全栈 or 架构师

目前看到的国内的现象是,技术管理并不见得核心竞争力有多强,而且换公司之后的可复用性和可落地性,比走技术深度路线似乎更难。

另外全栈工程师的确很厉害,无论在创业公司还是大厂都很喜欢,但是全栈一定要有自己特别擅长的领域,就是说还是T型人才的路子,如果一个领域的技术都不深入,成为每个都会一点每个都不精的万金油,也很尴尬。

架构师的价值主要体现在服务器端,客户端来说,除非产品的DAU在百万以上,否则架构设计真正在推动项目往前走所体现的价值,并没有多大,也就是说,如果业务做不起来,架构设计的再精妙再先进,都没办法创造价值。而往往架构师又是脱离一线业务的,所以你会发现基本架构师都是在大厂的基础架构组做支撑,或者在某个明星项目里成为核心主力,但是在一般的创业公司,或者中小型的公司,则不见得都设有该岗位。。

整体上,技术方向也有风口这一说法,比如大数据在2013年那会儿就很火,千人千面的推荐算法很受欢迎,大厂招人给的溢价也高。现在则是人工智能的子分支,比如计算机视觉里的人脸识别,声音识别,或者自动驾驶等比较火爆。基本上要获得溢价,都是要在某个技术受欢迎,大厂愿意投资,而市场上人才比较紧缺的时候才行。一旦人才供需平衡了,或者技术的风口过了,溢价也容易往下掉。对于普通人来说,如果能抓住某次溢价,把身价往上走一个两个台阶,那还是很爽的,不过现在技术发展越来越成熟,往后的技术风口上的技术,门槛越来越高,像人工智能/自动驾驶这种,已经不是普通本科生能够靠自学学会的了,也不是普通智商的人能玩的转的。平常心吧~

网上看到的一个大神

iOS知识结构

从图中的描述里,可以看出大神的过人之处,可以以此为榜样去学习和进步~

写在最后

技术能力的提升不是一个线性增长的过程,当你各方面的基础知识基本过关了之后,如果之后不知道如何深入可以尝试去做一些技术专项,最好是跟自己公司的项目有关联的技术专项,既能提升自己在某一块的技术水平,也能对公司有帮助,这是一个互惠互利的过程。

抛开音/视频,AR/VR这种特定领域的技术来说,在通用的技术栈上,如果不知道怎么继续深入了,那就去学习操作系统吧,深挖操作系统的原理和实现,会有很大的好处。目前本菜鸡也在往这个方向深入学习,希望跟大家共勉~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP Cookbook

PHP Cookbook

Adam Trachtenberg、David Sklar / O'Reilly Media / 2006-08-01 / USD 44.99

When it comes to creating dynamic web sites, the open source PHP language is red-hot property: used on more than 20 million web sites today, PHP is now more popular than Microsoft's ASP.NET technology......一起来看看 《PHP Cookbook》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具