《HelloGitHub月刊》第 10 期

前言

这一年感谢大家的支持,小弟这里给大家拜年了!

《HelloGitHub月刊》会一直做下去,欢迎大家加入进来提供更多的好的项目。

最后,祝愿大家:鸡年大吉~

《HelloGitHub》第 10 期

兴趣是最好的老师,《HelloGitHub》就是帮你找到兴趣!

759200-20170128213057487-299336185.jpg

简介

最开始我只是想把自己在浏览 GitHub 过程中,发现的有意思、高质量、容易上手的项目收集起来,这样便于以后查找和学习。后来一想,如果给这些 GitHub 项目都加上简单的效果图和一些通俗易懂的中文介绍。应该能够帮助到我这样的新手激发兴趣去参与、学习这些优秀、好玩的开源项目。

所以,我就做了一个面向编程新手热爱编程对开源社区感兴趣 的人群的月刊,月刊的内容包括:各种编程语言的项目各种让生活变得更美好的工具书籍、学习笔记、教程等。这些项目都是非常容易上手,而且非常 Cool,主要是希望大家能动手用起来,加入到开源社区中。会编程的可以贡献代码,不会编程的可以反馈使用这些工具中的 Bug、帮着宣传你觉得优秀的项目、Star 项目⭐️。同时你将学习到更多编程知识、提高自己的编程技巧、发现自己的兴趣

最后《HelloGitHub》这个项目就诞生了!?


以下为本期内容点击查看往期内容

Python项目

1、saythanks.io:Kennethreitz 写的一个简单的网站(基于Flask),用于向开源项目作者发送感谢邮件的 Web App。该项目结构简单,可以用来学习大神是如何快速开发 Web 项目、方法、代码风格、开发常用库。而且该项目的意义也特别好:感谢开源项目的作者,愿开源社区越来越好,网站地址

759200-20170128213127331-319631584.png

2、locust:模拟用户行为的负载测试工具,包含友好的 Web 页面,如下图:

759200-20170128213140784-333840874.png

3、jumpserver:Jumpserver 是一款由 python 编写开源的跳板机(是一类可作为跳板批量操作远程设备的网络设备)系统,实现了跳板机应有的功能。基于 ssh 协议来管理,客户端无需安装 agent 。支持常见 Linux 系统,效果如下:

759200-20170128213156862-383462711.gif

Go项目

4、kingshard:Kingshard 是一个由 Go 开发高性能 MySQL Proxy 项目,kingshard 在满足基本的读写分离的功能上,致力于简化 MySQL 分库分表操作;能够让 DBA 通过 kingshard 轻松平滑地实现 MySQL 数据库扩容。

PHP项目

5、typecho:PHP的一款博客程序,官网文档

759200-20170128213221175-960216000.png

Javascript项目

6、iview:iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品。特性:

  • 高质量、功能丰富
  • 友好的 API ,自由灵活地使用空间
  • 事无巨细的文档
  • 细致、漂亮的 UI
  • 使用单文件的 Vue 组件化开发模式
  • 基于 npm + webpack + babel 开发,支持 ES2015

7、flv.js:使用纯 JavaScript 写的 HTML5 Flash 视频(flv)播放器,示例代码如下:

<script src="flv.min.js"></script>
<video id="videoElement"></video>
<script>
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: 'http://example.com/flv/video.flv'
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
</script>

8、RAP:阿里妈妈MUX团队出品,企业级 Web 接口管理工具。RAP 通过 GUI 工具帮助 WEB 工程师更高效的管理接口文档,同时通过分析接口结构自动生成 Mock 数据、校验真实接口的正确性,使得接口开发更加规范、自动化。

759200-20170128213240784-408995344.jpg

C#项目

9、Wox:Windows 上的 Alfred、Launchy,使用演示:

759200-20170128213300659-62757229.gif

机器学习

10、MLAlgorithms:常见的机器学习算法,Python实现:

Java项目

11、RocketMQ:RocketMQ 是阿里巴巴在 2012 年开源的第三代分布式消息中间件。
历年双 11,RocketMQ 都承担了阿里巴巴生产系统百分之百的消息流转,在核心交易链路有着稳定和出色的表现,今年双十一,更是创造了万亿级消息精准低延迟投递。

C++项目

12、simhash:此项目用来对中文文档计算出对应的 simhash 值。 simhash 是谷歌用来进行文本去重的算法(详见simhash算法原理及实现),现在广泛应用在文本处理中。特征:

  • 使用 CppJieba 作为分词器和关键词抽取器
  • 使用 jenkins 作为 hash 函数
  • hpp 风格,所有源码都是 .hpp 文件里面,方便使用。 没有链接,就没有伤害。
  • 本项目的副产品项目:simhash_server 提供了简单的 simhash HTTP 服务。
Objective-C项目

13、sequelpro:这是我到目前为止在 Mac 上发现最好用的 MySQL 管理工具。本人一直在使用,并且推荐给了我的小伙伴们,用过都说好?~

759200-20170128213328534-1559852822.png

其它

14、IntelliJ-IDEA-Tutorial:IntelliJ IDEA 简体中文专题教程

15、redisbook:Redis 设计与实现(网络版)

16、Awesome_API:该页收集中国国内可用API

17、Lee-VR-Source:VR 开发者必备资源汇总

18、500 Lines or Less:(英文)用少于 500 行的 Python 代码,你可以写出什么东西?相信你看完这个项目,会学到很多(每个项目的作者都是业内大神写的)。中文翻译版(未翻译完)


声明

如果你发现了好玩、有意义的开源项目,点击这里 分享你觉得有意思的项目。

  • 分享项目格式:项目名称——项目地址:项目描述(中文),追求完美?项目上手 Demo、有图有真相~

或许你分享的项目会让别人由衷的感慨:“原来还有这么有意思的项目!编程可以这么酷!”

欢迎转载,请注明出处和作者,同时保留声明和联系方式。

联系方式

转载于:https://www.cnblogs.com/xueweihan/p/6354534.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。下面是一个简单的杂志订阅管理系统的代码实现: ``` #include <iostream> #include <string> using namespace std; class Magazine { protected: string name; string period; double price; public: static int count; Magazine(string n, string p, double pr) : name(n), period(p), price(pr) { count++; } virtual void display() { cout << "Name: " << name << endl; cout << "Period: " << period << endl; cout << "Price: " << price << endl; } }; class WeeklyMagazine : public Magazine { public: WeeklyMagazine(string n, double pr) : Magazine(n, "weekly", pr) {} void display() { cout << "Weekly Magazine:" << endl; Magazine::display(); } }; class MonthlyMagazine : public Magazine { public: MonthlyMagazine(string n, double pr) : Magazine(n, "monthly", pr) {} void display() { cout << "Monthly Magazine:" << endl; Magazine::display(); } }; int Magazine::count = 0; class MagazineSet { private: Magazine* magazines[100]; public: static int count; MagazineSet() {} MagazineSet(const MagazineSet& other) { for (int i = 0; i < other.count; i++) { if (dynamic_cast<WeeklyMagazine*>(other.magazines[i])) { magazines[i] = new WeeklyMagazine(*dynamic_cast<WeeklyMagazine*>(other.magazines[i])); } else if (dynamic_cast<MonthlyMagazine*>(other.magazines[i])) { magazines[i] = new MonthlyMagazine(*dynamic_cast<MonthlyMagazine*>(other.magazines[i])); } } count = other.count; } MagazineSet& operator=(const MagazineSet& other) { if (this != &other) { for (int i = 0; i < count; i++) { delete magazines[i]; } for (int i = 0; i < other.count; i++) { if (dynamic_cast<WeeklyMagazine*>(other.magazines[i])) { magazines[i] = new WeeklyMagazine(*dynamic_cast<WeeklyMagazine*>(other.magazines[i])); } else if (dynamic_cast<MonthlyMagazine*>(other.magazines[i])) { magazines[i] = new MonthlyMagazine(*dynamic_cast<MonthlyMagazine*>(other.magazines[i])); } } count = other.count; } return *this; } void addMagazine(Magazine* mag) { magazines[count] = mag; count++; } void display() { for (int i = 0; i < count; i++) { magazines[i]->display(); } } }; int MagazineSet::count = 0; int main() { MagazineSet set1; WeeklyMagazine mag1("Magazine1", 5.0); MonthlyMagazine mag2("Magazine2", 10.0); set1.addMagazine(&mag1); set1.addMagazine(&mag2); cout << "MagazineSet1:" << endl; set1.display(); MagazineSet set2 = set1; set2.addMagazine(new WeeklyMagazine("Magazine3", 3.0)); cout << "MagazineSet2:" << endl; set2.display(); return 0; } ``` 在上面的代码中,我们定义了一个Magazine类和两个子类WeeklyMagazine和MonthlyMagazine,分别表示周刊和月刊。MagazineSet类用于管理多个杂志的订阅,其中包含了一个Magazine类型的数组magazines,以及一个静态成员变量count,记录当前订阅的杂志数目。 在Magazine类中,我们定义了一个静态成员变量count,用于记录杂志的总数。同时,我们还定义了一个虚函数display,以实现多态。在子类WeeklyMagazine和MonthlyMagazine中,我们重载了这个函数,以实现不同的输出效果。 在MagazineSet类中,我们重载了复制构造函数和赋值运算符,以便正确地复制一个MagazineSet对象。在addMagazine函数中,我们将要添加的杂志指针存储到数组中,并增加count计数器。在display函数中,我们遍历数组并调用display函数输出每个杂志的信息。 在main函数中,我们创建了一个MagazineSet对象set1,并向其中添加了两个杂志对象。然后,我们复制了set1对象,并向复制的对象set2中添加了一个杂志对象。最后,我们分别输出了set1和set2对象的杂志信息。 希望这个简单的代码示例能帮助你更好地理解继承和多态的概念。如果你还有其他问题或者需要进一步的解释,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值