个人简历

陈通 求职意向:iOS开发

个人信息

电话:13058135996 邮箱:1158433594@qq.com
毕业院校:福建师范大学 专业:软件工程 学位:本科
技术博客:https://ctinusdev.github.io
Github:https://github.com/ctinusDev

个人简介

目前就职于深信服科技股份有限公司,主要负责口袋助理App iOS版开发、维护、性能优化等工作。同时也负责配合客服帮助解决客户疑问和线上问题的排查。
自 2014 年开始参与口袋助理项目开发,至今已有 3 年多时间。在此期间熟练掌握Objective-C 代码的编写。熟悉大部分 iOS 开发与调试工具,理解 iOS App 结构与运行机制,注重代码质量与执行效率。
日常开发过程中对代码的整理,总结了一套实用的基础工具库。对在线崩溃问题的整理分析并通过查阅资料和博客,编写了一套可以自动修复App崩溃框架–Crair。对野指针常见的写法进行了整理并提出了相应解决方案,同时实现了一套野指针运行时检测机制。
当前正在学习 Swift 语言,也会写一些简单的javascript和shell。
寻觅一份 iOS 开发的全职正式工作,也可以根据具体情况考虑其它相关岗位。

工作经历

2014-6~至今,深信服科技 口袋科技 职称:高级设计师 负责产品:口袋助理

项目经验

应用热更新方案
工作内容:
自JSPatch被苹果禁止以来,项目就急需要一个能够满足要求的热更新方案,来帮助App实时的解决一些在线问题和一些临时小需求变更。于是打算自己实现一套Objective-C语法解析器,通过直接下发的OC代码替换已有的方法,项目中我主要完成了一下功能点:
1、将OC方法解析成方法调用、表达式运算、循环语句、条件判断等语法节点,然后在运行时利用runtime动态替换方法,将原方法实现替换成这些语法节点构成的新实现,方法被调用时解释执行这些语法节点,从而实现App在线修复。
2、为了避开苹果对热更新的检测,对关键类和方法进行了名称混淆;对runtime的方法替换相关的函数先取到函数指针,然后通过函数指针间接调用相关函数。
3、为了补丁文件的安全,补丁使用了SHA1算法生成hash,再利用RSA算法私钥对hash进行签名,防止热更新文件被修改。客户端请求文件时会使用RSA公钥加密一段随机字符串,服务端会根据这个数据字符串使用AES128算法对文件加密在下发到客户端,做到补丁代码逻辑传输过程中不可见。
该方案自2017年底上线以来,已经帮助App解决了3个在线问题,有效降低了App的发包次数。

App性能相关工作
工作内容:
当项目开发到了一定程度,性能相关的优化工作就显得十分重要了,在此项目中我主要负责了一下几点工作:
1、实现了UI线程的卡顿监控,方便在运行时动态检测App的卡顿点,并将UI线程调用堆栈信息上传到日志系统,帮助发现用户反馈的卡顿问题。
2、优化富文本在列表中的显示,实现了CoreText异步绘制图片和cell高度计算缓存等。通过这两点功能的实现,列表滑动的FPS从之前的20-30fps改善到了50fps左右,明显改善了富文本卡顿的问题。
3、分析崩溃日志,总结崩溃原因分类,并实现了一套app崩溃自动修复方案;
4、对野指针出现的情况进行了分析并提出了相应的解决方案。并实现了一套野指针检测修复方案。从代码编写层面降低了野指针概率,同时崩溃统计中野指针相关的崩溃也从50%左右降低到了20%左右。

企业云盘
工作内容:
主要负责企业云盘的功能,包括文件夹创建、文件的上传下载、文件的在线预览、文件分享等功能。企业云盘的功能并不复杂,但是却包含了比较多的技术点,包括基于AFNetWorking实现了文件后台下载、文件断点续传,实现了文件内存缓存和磁盘缓存双缓存策略和LRU缓存清除策略,基于ImageIO实现了大图片预览异步解码等。通过对这些功能点的实现,加强了对相关技术的认知,同时也对项目的公共组建有所改进。例如,之前的大图片预览使用CGBitmapContextCreate进行原图解码缩放,后面发现使用ImageIO对像素特别大的图片进行解码内存和时间上明显优于CGBitmapContextCreate,所以对于大图片的解码改用了ImageIO。

技能

熟悉Objective-C开发,熟悉CoreData、runtime、NSThread、NSOperation、GCD等系统框架的开发,熟悉实用finshhook、AFNetworking等第三方框架,了解Swift、JavaScript、Shell等开发。

技术文章

为什么不能runtime创建JSExport类型的Protocol?
ARC下野指针常见写法

坚持原创技术分享,您的支持将鼓励我继续创作!