暂时未有相关云产品技术能力~
大厂程序员,专注分享硬核后端开发技术。
上篇文章介绍了环境搭建,并完成了学习 Go 的第一个程序 Hello World。这篇文章继续学习 Go 的基础知识,来看看变量,常量的声明与赋值。
Go 专栏的第一篇,想学 Go 的同学们,走起~
获取 Django 项目下全部 URL,一个函数轻松搞定
连 QPS,TPS,RT,PV,UV 这些指标都不知道是什么意思,还敢说自己懂高并发?
社区曾有人开玩笑地说:「Python 企图用字典装载整个世界。」 可见其有多重要,不用多说,我平时用的也很多,索性总结一下,把一些常用的方法写下来,分享给大家。
写 Python 代码,列表的出镜率是相当高的,伴随列表一起出现的往往就是一大堆 for 循环,这样的代码多了看起来非常不简洁。作为一名 Python 程序员,怎么能忍受呢?
使用 Docker 部署 RabbitMQ 没有日志?添加这两条配置,轻松搞定
使用 Docker 部署完 RabbitMQ 服务,到 /var/log/rabbitmq 目录下一看,空空如也,并没有日志文件生成。 是没有日志吗?并非如此,日志都打在了标准输出上。
上一篇已经介绍了使用 Docker 部署 canal 服务,实现 MySQL 数据库 binlog 日志解析,并且用官方提供的客户端程序成功读到了消息。但在生产环境下还不能这么用,更好的做法是将消息发送到消息队列,然后再从消息队列消费。
canal 是阿里巴巴开源的一个项目,主要用途是基于 MySQL 数据库 binlog 日志解析,提供增量数据订阅和消费。
在 Python 中,求两个列表的交集,并集和差集是经常会遇到的需求,而且也比较简单。
项目 Docker 化部署的最后一步,就差 Redis 了。本来以为是一件很简单的事,没想到折腾了我大半天的时间,下面就来分享分享我的采坑经历。
本文介绍 RabbitMQ 集群的 Docker 化部署,最开始是想通过 DockerSwarm 方式来部署的,但是 RabbitMQ 节点加入集群时一直失败,在网上找了很多办法,始终没有解决这个问题,无奈只能放弃。所以最终采用配置 hosts 文件方式来保证节点之间的通信,下面来进行详细说明。
点击 VS Code 左下角设置,然后选择 Keyboard Shortcuts。 打开之后找到 Copy Line Down,可以看到默认的快捷键是 「shift + Alt + ↓」。
事情是这样的,我有一个守护进程,不停地从 RabbitMQ 消费数据,然后保存到 MySQL。操作数据库使用的是 Django 的 ORM 语法。
在实际业务中,数据导出应该算是一个强需求了,很多场景都用得到。 如果是 MySQL 的话,则无需多言,支持导出的工具一大堆,根据自己需求选择即可。
Python 多线程之间共享变量很简单,直接定义全局 global 变量即可。而多进程之间是相互独立的执行单元,这种方法就不可行了。
前一段时间重装了系统,然后我还没有备份,导致电脑里的开发环境全都没有了。 一想到又要装 Python 环境,还要装数据库,然后安装过程中还可能报一堆错就头疼。
经过周末两天回血,今天早早来到公司,准备把上周遗留的 BUG 修了,然后再多写几个 BUG。 还没等我把双肩包放好,就看见群里有同事反馈,有一个表的数据没了。
之前写镜像的时候说到创建镜像最常用的方式是使用 Dockerfile,这篇就来重点说一下,到底是怎么使用 Dockerfile 来创建的。
众所周知,容器是随时创建随时删除的,那删除时容器里的数据怎么办呢?每次手动备份出来?当然不需要,Docker 非常贴心的提供了数据持久化方案,叫数据卷 volume。
有了镜像的基础,下面就开始创建容器吧。Docker 容器非常轻量级,随时都可以创建和删除,非常方便。
今天来说说镜像,镜像是 Docker 中特别重要的概念,是容器运行的基础,没有镜像,后面的一切都不成立。
如果想要快速持续开发和部署应用,那么对 Docker 这个词肯定不陌生,2015 年的时候我研究过一段时间,但后来由于工作内容的变更,就没有再关注过了。
之前写过一篇文章 Django 中如何优雅的记录日志,本以为代码上线之后,就可以愉快的看日志,通过日志来分析问题了,但现实总是跟想象不同,两个异常现象纷纷挥起大手,啪啪地打在我的脸上。
上篇文章介绍了 如何在 Django 中优雅的记录日志,这篇来谈谈怎么管理以及查看日志。 说到查看日志,这么简单的事情还值得写篇文章吗?文件已经有了,直接 vim 打开不就完了。话虽如此,但有时候这样做却并不可行。
日志是个好东西,但却并不是所有人都愿意记,直到出了问题才追悔莫及,长叹一声,当初要是记日志就好了。 但记日志却是个技术活,不能什么都不记,但也不能什么都记。如果记了很多没用的信息,反而给查日志排错的过程增加很多困难。
上两篇文章介绍了: Mac 环境下 RabbitMQ 的安装 RabbitMQ 的六种工作模式(附 Python 代码)
上一篇介绍了在 Mac 环境下,RabbitMQ 的安装,这篇来详细介绍一下 RabbitMQ 的六种工作模式。
几个月之前,手上的一个项目开始使用 RabbitMQ,没错,就是跟兔子跑得一样快的一个消息队列。 之前并没有做系统的学习,只是了解一些简单用法,网上找一些例子,加上自己的加工,基本也可以满足常规的使用需求。
引用官方说法:ZMQ(以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。
最近,团队又来了几个小伙伴,经过一段时间磨合之后,发现彼此之间还是比较默契的,但有一个很大的问题是,每个人的编程风格和习惯都不同,导致现在代码看起来非常混乱。 所以,有一个统一的开发编码规范还是很重要的。我在网上搜索了一些资料,在 PEP8 的基础上,同时结合目前代码的特点,总结出下文,分享给大家。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出更好的要求,rsync 在高端业务系统中也逐渐暴露出了很多不足。
Index:Elasticsearch用来存储数据的逻辑区域,它类似于关系型数据库中的database 概念。一个index可以在一个或者多个shard上面,同时一个shard也可能会有多个replicas。 Document:Elasticsearch里面存储的实体数据,类似于关系数据中一个table里面的一行数据。
关于哈夫曼树的定义、构建以及哈夫曼编码,可以参考《大话数据结构》这本书,也可以看这篇博客( www.cnblogs.com/kubixueshen… ),写的也很清楚。
开源软件到底受不受美国政府管制?会不会应美国政府的要求禁运?最近这个话题成了热点。遗憾的是,到现在中文文章里我没看到能把这个事情说清楚的文章,这让我非常惊讶。中国科技和互联网行业从开源软件中受益极大,也有无数直接和间接参与者,但是这些基本事实还是糊涂的,比较遗憾。
树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
元素域 data 用来存放具体的数据。 链接域 prev 用来存放上一个节点的位置。 链接域 next 用来存放下一个节点的位置。 变量 p 指向链表的头节点(首节点)的位置,从 p 出发能找到表中的任意节点。
在 0.9.0.0 之后的 Kafka,出现了几个新变动,一个是在 Server 端增加了 GroupCoordinator 这个角色,另一个较大的变动是将 topic 的 offset 信息由之前存储在 zookeeper 上改为存储到一个特殊的 topic(__consumer_offsets)中。 本文测试版本:kafka_2.11-2.2.0
工作中经常遇到一类需求,根据 IP 地址段来查找 IP 对应的归属地信息。如果把查询过程放到关系型数据库中,会带来很大的 IO 消耗,速度也不能满足,显然是不合适的。
json 模块提供了一个类似于 pickle 的 API,将内存中的 Python 对象转换为 JSON 序列。与 pickle 不同,JSON 具有以多种语言(尤其是 JavaScript)实现的优点。它在 REST API 中 Web 服务端和客户端之间的通信被广泛应用,同时对于应用程序间通信需求也很有用。
从文件或导入的 Python 模块中检索文本行,保存结果缓存,以便更高效地从同一文件中读取多行。 linecache 在处理 Python 源文件时,该模块用于 Python 标准库的其他部分。缓存实现在内存中将文件内容分解为单独的行。API 通过索引请求的行到一个列表中,节省了重复读取文件和解析行以找到所需行的时间。这在查找同一文件中的多行时尤其有用,例如在为错误报告生成回溯时。
用于创建和使用上下文管理器的实用程序。 contextlib 模块包含用于处理上下文管理器和 with 语句的实用程序。
fnmatch 模块主要用于文件名的比较,使用 Unix shell 使用的 glob 样式模式。
使用面向对象的 API 而不是低级字符串操作来解析,构建,测试和以其他方式处理文件名和路径。
hashlib 模块定义了用于访问不同加密散列算法的 API。要使用特定的哈希算法,需要先用适当的构造函数或new()创建哈希对象。然后,无论使用何种算法,对象都使用相同的 API。
使用 Unix shell 规则查找与模式匹配的文件名。 尽管 glob API 不多,但该模块具有很强的功能。当程序需要通过名称与模式匹配的方式查找文件列表时,它很有用。要创建一个文件列表,这些文件名具有特定的扩展名,前缀或中间的任何公共字符串,这个时候,使用glob而不是编写自定义代码来扫描目录内容。
本文基于 Python3 编写测试。 os.path 模块是跨平台的,即使不打算在平台之间移植自己的程序也应该用 os.path,好处多多。
目的:包含用于处理文本的常量和类。 string 模块可以追溯到最早的 Python 版本。先前在此模块中实现的许多功能已移至 str 对象方法。string 模块保留了几个有用的常量和类来处理 str 对象。