如下代码:
1 | a = [[]] * 3 |
从上面结果看,[[]] * 3确实是创建了一个 [[], [], []]的空列表,但是我们在赋值的时候就会出现以下出乎意料的情况:
1 | a[0].append(1) |
探究其原因是因为使用乘号*复制时,只是复制了索引,即复制的n个索引都指向同一个物理地址,所以在操作其中任何一个时,都会同时修改其他内容。同理列表中多个空字典也是同样的问题。
优雅的解决这个问题(借助列表推导式):
1 | >>> a = [[] for i in range(3)] |
如下代码:
1 | >>> a = [[]] * 3 |
从上面结果看,[[]] * 3确实是创建了一个 [[], [], []]的空列表,但是我们在赋值的时候就会出现以下出乎意料的情况:
1 | >>> a[0].append(1) |
探究其原因是因为使用乘号*复制时,只是复制了索引,即复制的n个索引都指向同一个物理地址,所以在操作其中任何一个时,都会同时修改其他内容。同理列表中多个空字典也是同样的问题。
优雅的解决这个问题(借助列表推导式):
1 | >>> a = [[] for i in range(3)] |
以下是步骤:
1、下载中文字体(黑体,看准系统版本)http://www.fontpalace.com/font-details/SimHei/
2、安装字体
1 | sudo mv SimHei.ttf /usr/share/fonts/ |
3、在~/.config/matplotlib/下创建 matplotlibrc添加以下三行:
1 | font.family : sans-serif |
或者 修改配置文件 matplotlibrc 同样在matplotlib/mpl-data/fonts目录下面添加三行(原配置文件这是三个配置项应该是被注释掉的)
如果还不行
删除matplotlib的缓存:
1 | sudo rm ~/.cache/matplotlib |
使用pyenv和pyenv-virtualenv可以轻松的管理不同版本的Python,而且各个版本的环境完全独立,互不干扰,在Linux下结合shell,是十分推荐的。
这里记录Ubuntu系统下的安装、使用的一些步骤,同时也记录一些使用Pyenv的一些比较复杂的问题的解决方案。
为了避免一些不必要的麻烦,这里建议是提前安装一些依赖:
1 | sudo apt install -y git make wget curl build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncurses5-dev libncursesw5-dev llvm |
1 | git clone https://github.com/pyenv/pyenv.git ~/.pyenv |
注:如果使用zsh则将下面 ~/.bash_profile 改为 ~/.zshrc
添加环境环境变量
1 | echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile |
添加 pyenv init 到shell中
1 | echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile |
重启shell
1 | exec "$SHELL" |
查看pyenv安装版本,可以查看本机安装Python版本
1 | pyenv verson |
ZeroMQ 是基于消息队列的多线程网络库,其对套接字类型、连续处理、帧甚至路由的底层细节抽象,提供跨域多种传输协议的套接字。
1 创建上下文。ZMQ 的context上下文是线程安全,可以在多线程中使用,不需要主动为其加锁或解锁。
2 创建和销毁套接字。ZMQ套接字是在后台I/O操作的,无论是发送还是接受消息,它都会先传送到一个本地的缓存队列。
3 配置和读取套接字选项。ZMQ套接字不是线程安全的,在 bind 之前不能使用。
4 为套接字连接。常用的四种协议:机器间(tcp://)、进程间(ipc://)、进程内(inproce://)、广播(pgm://)。bind()连接的节点称之为服务器,有固定的地址,connect()连接的节点成为客户端,其地址一般不固定。
5 发送和接收信息。
请求-应答模式,将一组服务端和一组客户端相连,用于远程过程调用或任务分发。(REQ-REP)

入职新公司,同事让帮忙写一个Python脚本,实现每天定时获取生产环境的数据生成excel表格,推送到指定邮箱。想了想,不难实现,就答应下来了。但是等写完了才被通知到,邮件携带的excel表格,要设置指定密码,进行保护,顿时懵逼,貌似Python暂时不能实现吧?然后各种资料源码查看,然后确定了确实不能实现,先通知同事一声,说Python实现不了设置密码的功能,然后就只能放弃了。
但是哥不是那种容易放弃的人!旁边坐的朱同学说,我看看Java能否实现。果不其然,Java才是万能的!(拍一下各位Java看官大佬们的马屁)。
于是,才有了这个文章,以下简单整理一下实现的过程,虽然都是从网上参考过来的,但是这个功能点是能够实现的,再次记录分享一下,以供下次参考。准确的说,本文应该是“实战Python通过调用Java的第三方jar包完成对excel表格的密码设置”。下面开始正文。
Python的环境和JDK的环境就不用说了,我这里使用的是Python3.6和JDK8。重点是以下的一个Python库和一个Java的jar包。
more >>Confluence是一个适用于团队协作的文档管理软件,使用java开发的,功能方面类似Wiki,但是功能比Wiki强大。在安全性方面,Confluence 具有完善和精细的权限控制,可以很好地控制用户在 Wiki 中创建、编辑内容和添加注释。Confluence 直观易于使用,您不需要学习任何新的语言就可以使用它,用所见即所得的方式在 Confluence 中添加内容。
虽然Confluence是收费的,但是Atlassian公司将其使用门槛降低了,最低设置了10人版每年10$的授权费,企业可以根据具体的使用人数进行购买授权。
个人学习使用,这里根据网上的资源提供了一个破解的方法,仅供学习参考。
去官网下载最新的安装包(传送门)。官网下载可能比较慢,可以通过下面的链接下载(6.15.2 Linux版本),顺带下载破解的工具包。
破解包: https://pan.baidu.com/s/1SYJ_nWfNkH0AlgBjqcVBsA (提取码: pava)
more >>Jenkins新版本已经不支持jdk7及以下版本,这里安装jdk8。
更新软件包列表
1 | sudo apt update |
1 | sudo apt install openjdk-8-jdk |
查看Java版本,看看是否安装成功
1 | java -version |
经过惊心动魄的两个小时,终于完成了对约车系统的数据库热备份(主从备份)。其实来说热备份并不难实现,在本地模拟的时候,不到十分钟就解决了,但是生产环境上的MySQL版本为5.5,从MySQL版本为5.7 不同的版本之间出了一些问题,不得不升级生产环境上的MySQL,然后的然后,收获最大的经验就是:在生产环境上,不管干什么操作,多备份几份数据库,多在不同的地方备份数据库!!可能某个误操作,让你惊了一身冷汗!但是还好,我有多个备份!!
后来冷静的发现,其实备份丢失了也没有什么大的问题,毕竟机智的我开启了log-bin,有我需要的日志就可以了。
下面记录一下本次实战MySQL双机热备份的过程,供以后参考。
参考:
more >>4月1日

大体来说是可以分为server层和存储引擎层两个部分。
Server 层包括连接器、分析器、查询缓存、优化器、执行器等,涵盖了MySQL 大多数核心服务,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器和视图等。
more >>tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true