翼飞


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

关于制定团队iOS代码规范以及Code Review的思考

写于 2019-02-08 | 分类于 iOS , 思考 |

引言

如果团队成员的编码规范各不相同,那么你在接收其他人的代码时是不是总会因为无法认同他的代码风格,而想着去重写呢。但是重写这个事儿不只会增加梳理逻辑和开发成本,而且重写后出现问题的风险也会相应增加。那么,这个问题应该如何解决呢?

在我看来,如果出现这种情况,你的团队急需制定出一套适合自己团队的编码规范。有了统一的编码规范, 就能有效避免团队成员由于代码风格不一致而导致的相互认同感缺失问题。

那么,如何制定编码规范呢?在接下来的内容里,我会先说,我认为的好的编码规范。在制定编码规范时,也可以按照这个思路去细化出更多、更适合自己的规范,从而制定出团队的编码规范。然后如何通过Code Review的方式将制定的编码规范进行落地。

好的代码规范

关于好的代码规范,接下来我会从常量、变量、属性、条件语句、循环语句、函数、类,以及分类这8个方面一一说明。

阅读全文 »

大项目,人员多,架构设计的思考

写于 2019-02-04 | 分类于 iOS , 思考 |

大项目、多人、多团队架构思考

粒度模块划分问题

首先,项目规模变大之后,模块划分必须遵循一定的原则。如果模块划分不规范清晰,就很容易导致代码耦合严重的问题,进而加大重构的难度,主要表现在:

  • 业务需求不断,业务开发不能停。重新划分模块的工作量越大成本越高,重构以及技术改进的需求难度也就越大
  • 老业务代码年久失修,没有注释,修改起来需要重新梳理的逻辑关系就会越冗长复杂,耗时长

所以需要搞清楚模块的粒度划分原则,定一个标准出来

针对iOS这种面向对象编程开发模式来说,应该遵循以下五个原则,即是SOLID原则

  • 单一功能原则:对象功能要单一,不要在一个对象添加很多的功能
  • 开闭原则:扩展是开放的,修改是封闭的
  • 里式替换原则:子类对象是可以代替基类对象的
  • 接口隔离原则:接口的用途要单一,不要在一个接口上根据不同的入参实现多个功能
  • 依赖翻转原则:方法依赖应该抽象,不要依赖实例。
    阅读全文 »

R语言下的pheatmap绘制热图

写于 2018-06-06 | 分类于 R |

Mac系统下R语言下利用pheatmap绘制热图的教程

heatmap在很多领域都有应用,当然绘制heatmap也有很多种方法,MATLAB,PS,Excel以及各种脚本语言,比如Python,JavaScript,R语言。

今天我就要说一说Mac开发环境下利用R语言的pheatmap,读取excel的数据,或者生成数据绘制heatmap。

首先来看看热图长什么样。

准备工作

下载R语言的安装包

点击进入R语言下载界面

  • 点击download R。download R
  • 然后选择适合自己的CDN,在中国就选择清华的 清华CDN下载界面
  • 选择适合你系统的R语言安装包。Linux.Windows.Mac
  • 如果上面的看不懂就点击这里查看w3c的教程w3c的教程
    阅读全文 »

push anything

写于 2018-06-04 | 分类于 iOS |

准备写一个能随时显示另一个页面的工具

首先是想写点什么,然后就想到了解耦相关,就突然冒出一个想法

能不能在任意界面push另一个界面呢?字典传参,再写一个push的方法

最终目的就是在一个界面执行如下

1
[YFPushViewID:@"mainView" params:@{"id":@"12" , @"title":@"Main"}];

就能显示另一个界面了

永远拿到最上面的控制器,然后显示一个界面

我觉得还是有实用价值的

其实这个想法就是想路由方法,通过URL的方式来传值

开始做一下试试

Aho-Corasick automaton trash Word tools

写于 2018-05-28 | 分类于 iOS |

基于trie树的AC自动机实现脏字过滤

需求分析

之前有一个用户发言的功能,然后需要进行敏感词的筛选,因为实时弹幕的量比较大,放到服务端来做数据太多处理起来耗时,所以决定在客户端来做一下。

什么是Trie wikipedia

trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

trie树常用于搜索提示。如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。

什么是AC自动机算法 wikipedia

在计算机科学中,Aho–Corasick算法是由Alfred V. Aho和Margaret J.Corasick 发明的字符串搜索算法,用于在输入的一串字符串中匹配有限组“字典”中的子串。它与普通字符串匹配的不同点在于同时与所有字典串进行匹配。算法均摊情况下具有近似于线性的时间复杂度,约为字符串的长度加所有匹配的数量。然而由于需要找到所有匹配数,如果每个子串互相匹配(如字典为a,aa,aaa,aaaa,输入的字符串为aaaa),算法的时间复杂度会近似于匹配的二次函数。
该算法主要依靠构造一个有限状态机(类似于在一个trie树中添加失配指针)来实现。这些额外的失配指针允许在查找字符串失败时进行回退(例如设Trie树的单词cat匹配失败,但是在Trie树中存在另一个单词cart,失配指针就会指向前缀ca),转向某前缀的其他分支,免于重复匹配前缀,提高算法效率。

阅读全文 »

52 Special Ways to Improve Your iOS Programs 读书笔记

写于 2018-05-28 | 分类于 iOS |

本文只整理了对自己觉得有帮助的知识点

第一章 熟悉Objective-C

了解OC的起源

  • OC使用“消息结构”是有Smalltalk演化而来
  • OC与函数调用的语言区别是“OC运行时代码由环境决定,函数语言由编译器决定”

多用类型常量,少用#define预处理指令

  • #define没有指定变量类型,最好使用static const [变量类型] [变量名] [变量值]
  • 如果定义的常量要在全局使用在前面加extern并且命名的时候要遵循规则,防止命名冲突

枚举表示状态、选项、状态码

  • 枚举加switch表示不同状态,最好不要实现default方法,防止新加的switch分支漏掉实现方法

第二章 对象、消息、runtime

阅读全文 »

Docker 学习笔记(上)

写于 2018-05-09 | 分类于 全栈 |

Docker 学习笔记


为什么要用Docker

环境配置的难题


软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。如果某些老旧的模块与当前环境不兼容,那就麻烦了。环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

虚拟机 解决办法


虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,不需要了就删掉,对电脑本身环境没有影响,但是有以下缺点。

  • 资源占用多
  • 麻烦
  • 启动慢
  • 过于重
    阅读全文 »

比特币白皮书学习笔记

写于 2018-05-01 | 分类于 blockchain |

前言

索引

地址

比特币地址(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串字符和数字组成,以阿拉伯数字“1”开头。就像别人向你的email地址发送电子邮件一样,他可以通过你的比特币地址向你发送比特币。

BIP

比特币改进提议 (Bitcoin Improvement Proposals 的缩写),指比特币社区成员所提交的一系列改进比特币的提议。例如,BIP0021是一项改进比特币统一资源标识符(URI)计划的提议。

比特币

“比特币”既可以指这种虚拟货币单位,也指比特币网络或者网络节点使用的比特币软件。

阅读全文 »

IDE的选择和配置

写于 2016-09-13 | 分类于 WEEX |

ide的选择

ide这方面我还是比较推荐Sublime Text按需求下载(失效后自行搜索)
激活步骤
以上都是在Mac开发环境下的配置,Windows的就不贴了

SublimeText语法高亮

  1. 首先下载—>配置文件 密码: d8k8
  2. 导航栏里选择Tools->Developer->New Syntax
  3. 打开下载的文件,复制到New Syntax新创建的文件当中,然后保存(保存的名字为Plain we.sublime-syntax)
  4. 打开.we文件,这时候应该就有语法高亮了

idea或者WebStrom

下面是激活码

阅读全文 »

了解工程

写于 2016-09-13 | 分类于 WEEX |

了解工程

目前基于npm的程序越来越多,那么package.json就显得十分必要了。所以说对于weex项目的开发npm和webpack的使用还是很重要的。

需要了解什么

如果是单一职责的工程师,比如单纯的前端工程师。那么他在开发的时候需要了解什么?这个对于项目的开发者而言,比较重要。因为,一个比较的好界限可以快速上手工作。当然,我还是提倡都要有所了解,毕竟,了解三端,才能更加高效的开发优质移动应用,技多不压身嘛。 这里简单谈一下单纯的某一职责的工程师,建议应该了解些什么。

  • 前端工程师
    我认为web工程师应该最好上手了,大部分都应该是分内知识,例如盒子模型、Flexbox布局等;webpack工程构建也已经是普遍情况了。那么前端工程师应该去了解XCode安装及如何运行项目、了解CocoaPods。了解Android环境的搭建和工程的构建。
  • iOS工程师
    对于iOS工程师,大体需要了解的是web的样式和布局。还有前面提到的webpack.config.js和package.json。
  • Android工程师
    布局和样式这块,Android和前端有一定的相通之处,但是盒子模型有些差异。这一块是需要补充了解的。当然,了解webpack.config.js和package.json也是十分重要的。

协同合作

Weex是集三端的一个技术产品,因此三端都不可或缺。很多时候Weex不可能满足海量的需求,也无法去给每一位开发者定制。因此,自己动手风衣足食。

  • 扩展iOS组件:http://alibaba.github.io/weex/doc/advanced/extend-to-ios.html

  • 扩展Android组件:http://alibaba.github.io/weex/doc/advanced/extend-to-android.html

  • 扩展Web组件: http://alibaba.github.io/weex/doc/advanced/extend-to-html5.html
  • 与iOS集成: http://alibaba.github.io/weex/doc/advanced/integrate-to-ios.html
  • 与Android集成:http://alibaba.github.io/weex/doc/advanced/extend-to-android.html
  • 与Web集成:http://alibaba.github.io/weex/doc/advanced/integrate-to-html5.html
12
yifeeeee

yifeeeee

blog挂在GitHub上,速度有些慢,改天迁移到自己的服务器上

15 日志
6 分类
18 标签
RSS
GitHub Weibo
© 2013 - 2020 yifeeeee
Hexo
Theme - NexT.Pisces