Skip to content

dreamsxin/example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dc9b0ef · Mar 22, 2025
Feb 22, 2025
Dec 25, 2024
Sep 3, 2020
Aug 9, 2024
Sep 27, 2020
Apr 6, 2019
Nov 22, 2018
Nov 7, 2017
Nov 10, 2017
Jul 10, 2017
Dec 21, 2024
Sep 25, 2018
Aug 2, 2024
Nov 22, 2022
Feb 4, 2024
Jun 15, 2017
Jul 4, 2017
Dec 13, 2023
Nov 27, 2023
Dec 16, 2024
Jan 21, 2024
Aug 23, 2021
Mar 18, 2025
Mar 20, 2025
Jul 9, 2022
Jan 25, 2025
Jul 8, 2017
Sep 14, 2017
Jul 9, 2016
Nov 2, 2017
Jan 6, 2022
Nov 23, 2019
May 19, 2022
Jan 9, 2025
Nov 24, 2022
Nov 28, 2023
Dec 31, 2019
Sep 10, 2024
Nov 6, 2019
Feb 28, 2024
Oct 13, 2017
Oct 14, 2017
Aug 30, 2023
Oct 11, 2017
Dec 10, 2019
Dec 6, 2019
Feb 1, 2024
Mar 2, 2024
Aug 28, 2023
Dec 31, 2019
Jun 19, 2024
Aug 28, 2023
Apr 9, 2018
Nov 20, 2019
Dec 29, 2023
Sep 8, 2020
Dec 21, 2024
Sep 11, 2019
May 16, 2016
Nov 5, 2019
Jul 24, 2017
Nov 17, 2023
Aug 26, 2017
Dec 25, 2017
Apr 6, 2019
Nov 29, 2021
Jul 17, 2024
Mar 20, 2018
Sep 16, 2017
Sep 29, 2020
Jan 9, 2024
Feb 5, 2025
Jan 18, 2025
Jan 24, 2025
Jul 18, 2022
Dec 13, 2017
Aug 30, 2024
Aug 20, 2024
Dec 14, 2018
Mar 22, 2016
Jul 8, 2017
Nov 15, 2016
Jan 28, 2015
Nov 5, 2016
Dec 11, 2023
Nov 20, 2024
Aug 3, 2022
Mar 2, 2021
Nov 20, 2019
Apr 6, 2016
Apr 22, 2019
Mar 22, 2025
Aug 22, 2018
Dec 8, 2023
Nov 1, 2017
Jun 6, 2022
Oct 31, 2024
Apr 19, 2019
Sep 26, 2024
Dec 4, 2019
Dec 7, 2016
Sep 29, 2021
Feb 8, 2025
Jul 4, 2024
Dec 25, 2024
Mar 21, 2025
Nov 25, 2023
Nov 28, 2015
Aug 3, 2018
Aug 8, 2024
Jun 13, 2016
Mar 25, 2015
May 19, 2022
May 15, 2019
Apr 29, 2016
Aug 2, 2024
Oct 10, 2017
Oct 30, 2017
Dec 10, 2021
Aug 1, 2018
Mar 20, 2018
Sep 29, 2019
Aug 8, 2016
Nov 21, 2019
Nov 19, 2019
Apr 25, 2019
Nov 23, 2019
Feb 25, 2025
Nov 20, 2017
Oct 10, 2016
Mar 5, 2025
Nov 24, 2022
Jul 16, 2016
Nov 23, 2022
May 13, 2016
Jan 19, 2017
Nov 10, 2017
Feb 11, 2017
Dec 14, 2015
Nov 21, 2024
Mar 22, 2016
Jun 6, 2024
Apr 8, 2024
Feb 22, 2025
Sep 7, 2016
Dec 10, 2019
Jan 21, 2017
Jul 15, 2021
Mar 29, 2022
Apr 29, 2016
Nov 10, 2017
Nov 6, 2019
Apr 23, 2019
Jun 9, 2017
Apr 24, 2024
Jul 5, 2018
Dec 24, 2024
Apr 12, 2022
Jan 18, 2025
Mar 18, 2025
Sep 2, 2016
Jan 6, 2025
Apr 23, 2019
Jun 9, 2021
Aug 1, 2015
Jan 18, 2017
Dec 4, 2024
May 23, 2016
May 13, 2019
Jan 4, 2024
Jun 17, 2017
Aug 11, 2017
May 27, 2017
Nov 8, 2023
Nov 23, 2017
Apr 1, 2016
Jun 10, 2017
Jul 11, 2022
Aug 20, 2020
Jun 25, 2018
Dec 28, 2023
Oct 17, 2022
Jul 29, 2017
Apr 1, 2015
Feb 17, 2019
Aug 30, 2024
Nov 4, 2017
Dec 24, 2024
May 15, 2019
Jul 14, 2017
Nov 4, 2017
Sep 4, 2023
Feb 17, 2025
May 20, 2021
Jan 15, 2019
May 8, 2023
Jan 11, 2018
Mar 31, 2021
Jul 4, 2017
Aug 17, 2017
Sep 8, 2017

Repository files navigation

团队管理

团队管理

  • 统一思想(目标一致、认知一致:需求分析、任务分解、预估难点与变数)
  • 统一方法(比如统一遵循测试驱动开发,代码注释、日志格式、任务跟踪、开发流程、测试流程、发布流程)
  • 统一工具(开发环境、IDE)
  • 统一代码管理模式(版本、分支)
  • 统一软件架构(从整体到局部)

Git 使用

  1. GitHub flow

GitHub flow 只使用两类分支:master、develop,并依托于 GitHub 的 pull request 功能。 在 GitHub flow 中,master 分支中包含稳定的代码。该分支已经或即将被部署到生产环境。 master 分支的作用是提供一个稳定可靠的代码基础。任何开发人员都不允许把未测试或未审查的代码直接提交到 master 分支。

对代码的任何修改,包括 bug 修复、hotfix、新功能开发等都在单独的分支中进行。 不管是一行代码的小改动,还是需要几个星期开发的新功能,都采用同样的方式来管理。 当需要进行修改时,从 master 分支创建一个新的分支。新分支的名称应该简单清晰地描述该分支的作用。所有相关的代码修改都在新分支中进行。 开发人员可以自由地提交代码和 push 到远程仓库。

  1. git-flow

git-flow 围绕的核心概念是版本发布(release)。因此 git-flow 适用于有较长版本发布周期的项目。 有很大数量的项目的发布周期是几个星期甚至几个月。较长的发布周期可能是由于非技术相关的因素造成的,比如人员限制、管理层决策和市场营销策略等。

git-flow 流程中包含 5 类分支,分别是 master、develop、新功能分支(feature)、发布分支(release)和 紧急 bug 的修复(hotfix)。 这些分支的作用和生命周期各不相同。master 分支中包含的是可以部署到生产环境中的代码,这一点和 GitHub flow 是相同的。develop 分支中包含的是下个版本需要发布的内容。从某种意义上来说,develop 是一个进行代码集成的分支。当 develop 分支集成了足够的新功能和 bug 修复代码之后,通过一个发布流程来完成新版本的发布。发布完成之后,develop分支的代码会被合并到 master 分支中。

其余三类分支的描述如表 1所示。这三类分支只在需要时从 develop 或 master 分支创建。在完成之后合并到 develop 或 master 分支。合并完成之后该分支被删除。这几类分支的名称应该遵循一定的命名规范,以方便开发人员识别。

https://github.com/nvie/gitflow

评估代码质量

度量

  • 圈复杂度

    它可以精确地测量路径复杂度。通过利用某一方法路由不同的路径,这一基于整数的度量可适当地描述方法复杂度。实际上,过去几年的各种研究已经确定:圈复杂度(或 CC)大于 10 的方法存在很大的出错风险。因为 CC 通过某一方法来表示路径,这是用来确定某一方法到达 100% 的覆盖率将需要多少测试用例的一个好方法。

  • 传入耦合 和传出耦合(抽象性、灵活性)

    这些基于整数的度量表示几个相关对象(即相互协调以产生行为的对象)。任一度量中高数值表示架构的维护问题:高传入耦合表示对象具有太多职责,而高传出耦合表示对象不够独立。

什么是重构?

重构就是改进已经改进的代码的行为。重构是个永不停止的代码编写过程,它的目的是通过结构的改进而提高代码体的可维护性,但却不改变代码的整体行为。

主动和被动重构

可以用代码度量很容易地找出可能难以维护的代码。一旦客观地判断出代码中有问题,那么就可以用方便的重构模式改进它。

提取方法模式

提取方法(Extract Method) 模式。在这个模式中,方法的一个逻辑部分被移除,并被赋予自己的方法定义。 提取方法模式提供了两个关键好处:

  • 原来的方法现在更短了,因此也更容易理解。
  • 移走并放在自己方法中的逻辑体现在更容易测试。

降低圈复杂度(Cyclomatic complexity)

如果一段源码中不包含控制流语句(条件或决策点),那么这段代码的圈复杂度为1,因为这段代码中只会有一条路径;如果一段代码中仅包含一个if语句,且if语句仅有一个条件,那么这段代码的圈复杂度为2;包含两个嵌套的if语句,或是一个if语句有两个条件的代码块的圈复杂度为3。

Java 使用 PMD 进行代码分析,获得圈复杂度。 PHP 使用 PHPMD 进行代码分析,获得圈复杂度。

  • onefetch 在终端上显示有关 Git 项目的信息。
sudo add-apt-repository ppa:o2sh/onefetch
sudo apt-get update
sudo apt-get install onefetch
  • cloc / tokei / git_stats 代码统计
cloc --exclude-dir="env,docs," .
git_stats generate
  • gcov 测试代码覆盖率
gcc -fprofile-arcs -ftest-coverage -o test test.c  
./test  
gcov test.c  
  • splint 代码静态测试
splint test.c 
  • valgrind 内存泄漏测试
valgrind --tool=memcheck --leak-check=yes ./test 
  • gprof
gprof test gmon.out -p性能测试

性能测试工具

  • LoadRunner

    可以做录制,业务逻辑复杂的流程

  • Curl-Loader

    更倾向于压力面的扩展,对于虚拟用户数的个数在单个机器上可以上到10000个以上

  • Apache ab

Apache ab判断成功与否只是判断2xx响应代码,不接收服务器的返回值,所以响应以及网络带宽上占有优势,但是Loadrunner要完整接受服务器的返回值,所以在同样的响应时间下,Apache ab测试支持的并发用户数会大于Loadrunner,TPS值也相应的会比Loadrunner大。

流程图工具

https://inkscape.org/

https://pencil.evolus.vn/

https://umbrello.kde.org/

谷歌

1、双引号

把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。 Google 和 Baidu 都支持这个指令。

例如:“seo方法图片”

2、减号

减号代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。 Google 和 Baidu 都支持这个指令。

例如:搜索 -引擎

返回的则是包含“搜索”这个词,却不包含“引擎”这个词的结果

3、星号

星号*是常用的通配符,也可以用在搜索中。

例如:搜索擎 其中的号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。

4、inurl

指令用于搜索查询词出现在 url 中的页面。 Google 和 Baidu 都支持这个指令。

inurl 指令支持中文和英文。

例如:inurl:搜索引擎优化 返回的结果都是网址 url 中包含“搜索引擎优化”的页面。

5、inanchor

指令返回的结果是导入链接锚文字中包含搜索词的页面。

例如:inanchor:点击这里 返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。

6、intitle

intitle: 指令返回的是页面 title 中包含关键词的页面。 Google 和 Baidu 都支持这个指令。

使用 intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在 title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。

7、allintitle

搜索返回的是页面标题中包含多组关键词的文件。

例如:allintitle:SEO 搜索引擎优化 就相当于:intitle:SEO intitle:搜索引擎优化返回的是标题中中既包含“SEO”,也包含“搜索引擎优化”的页面

8、allinurl

与 allintitle 类似。

例如:allinurl:SEO 搜索引擎优化 就相当于:inurl:SEO inurl:搜索引擎优化

9、filetype

用于搜索特定文件格式。 Google 和 Baidu 都支持这个指令。

例如:filetype:pdf SEO 返回的就是包含SEO 这个关键词的所有 pdf 文件。

10、site

是 SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。

11、linkdomain

指令只适用于雅虎,返回的是某个域名的反向链接。雅虎的反向链接数据还比较准确,是SEO 人员研究竞争对手外部链接情况的重要工具之一。

例如:linkdomain:http://cnseotool.com -site:http://cnseotool.com 得到的就是点石网站的外部链接,因为 -site:http://cnseotool.com 已经排除了点石本身的页面,也就是内部链接,剩下的就都是外部链接了。

12、related

指令只适用于Google,返回的结果是与某个网站有关联的页面。 例如:related:http://cnseotool.com 我们就可以得到 Google 所认为的与点石网站有关联的其他页面。这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。

把这些指令混合起来使用则更强大。 例如:inurl:gov 减肥 返回的就是url 中包含gov,页面中有“减肥”这个词的页面。

GeoIP

https://github.com/Loyalsoldier/geoip

CellId

https://location.services.mozilla.com/downloads