2016暑期实习总结

实习总结

在来电中心度过了两个月的实习期。总结一下实习过程中的一些所感所受与技术上的内容提升。

关于团队合作

1,代码管理工具,团队主要使用的代码管理工具是SVN,加上分支开发的模式。

相比较之前使用的git,svn不是分布式的,所以没有本地仓库一说。等于说是大家所有提交的代码都保存在服务器上,需要查看提交记录的话,需要联网查看实时的全部记录,而不是类似git可以现在本地进行提交,然后再统一的push操作。

另外,对于一些需要忽略的文件,git是通过添加.gitignore文件来实现的,而svn,则是通过一些管理软件来实现的提交文件忽略,例如cornerstone就提供了这个功能。

svn上开出新的分支,则会将所有的文件拷贝出一份新文件,如果项目较大,并且有较多分支在存在的话,占用的硬盘空间是很可观的。例如tim的svn服务器上大概有5,6个分支和几个release的分支,每个工程大概占用里2G的空间。这些合起来,最后总共占用了接近20个G的空间。其中有相当一部分的文件都是完全一致的。

2,关于分支开发。大的需求开新分支操作,并且会保留一个开关。通过一个变量或者宏来控制新功能的开启与否。
或者如果考虑到一些临时性的功能开发,可以使用宏的形式,在后续需要删除的时候可以通过这些宏来快速定位代码位置。

3,新需求开发的主要流程,需求定制,宣讲,开发,产品体验,测试,合流。

4,关于一些开源库的使用。总的来说还是会在研究过源码的基础上,根据自己项目的一些业务需求进行一些个性化的定制,删除不必要的模块。

这个可能还是说需要仁者见仁智者见智了。

将开源库植入自己的应用中,主要原因就是因为需要使用到这个库所提供的功能。如果人手足够的话,抽空根据自己的项目进行一些个性化功能的订制优化,去除一些其他功能,对项目安装包或者性能都会有所帮助。可以直接下载源码后运行。

不过,如果没有时间进行一些源码级别的优化之类的话,可能使用cocoapods来管理第三方的库比较方便,因为开发者也会对自己的库进行一些优化。

5,内存泄露检测,动态与静态。

ios中的内存检测,主要还是简单分为了两类,

一个是动态内存检测,在应用运行过程中,根据控制器来检测。相对于Instruments,在debug环境下,如果产生内存泄露,可以直接弹框说明出现了内存泄露。主要检测原理是,判断依据是,认为当某个控制器被pop之后,其持有的变量与视图应该会被销毁。不过这样也会出现误报的情况。假设我们需要对某个控制器的视图进行缓存的话,就会出现误报的情况。

二是,通过静态代码扫描来检测。主要判断原理是mrc环境下的代码编写原则,在alloc或者new的下方,则同时应该配有一个release或者autorelease,在retain操作的下方也应该有一个release操作。

不过当我们编写程序的时候,没有根据这个原则来编写,则也会出现误报的情况。

扫描出来的问题主要有如下问题,

  1. bad release,即出现了二次释放,在该方法中的对一个不是通过new,copy,alloc出来的对象进行了release操作,则判断为bad release。
  2. memory leak,通过alloc或者copy出来的对象在该方法的下方没有release操作。或者在方法中在if语句中提前return,而没有释放之前创建的对象。
  3. nil parameter。创建了一个指针指向空对象,然后赋值。但是最后没有做边界判断,导致如果需要将这个指针的对象传入一个array或者dict中的话,就会出现传入一个空指针的情况。

6,ipv6适配相关,会出现的问题与解决思路

7,安装包裁剪的主要思路。

  1. 将工程中不需要的图片资源删除。
  2. 然后根据业务逻辑删除一些不再使用的功能。
  3. 重构重复的代码
  4. 将arc文件转换为mrc文件,可以稍微减少一点安装包的增量。
  5. 不要为了一点小功能就引入一个大的开源库。

9,热修复注意事项。JS-Patch,通过加密算法来实现脚本传输过程中的安全事项。