自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一叶不知秋

谁家今夜扁舟子, 何处相思明月楼?

原创 Python datetime 处理时区信息

在Python 常用日期处理 -- 内置模块 datetime探讨了 Python 如何使用 datetime, 如果是一个跨时区的应用(Web 应用都是),就不能只存储一个时间而不带时区,如此,全球用户将会看到一个相同的时间字符串,白天黑夜就错乱了。比说用户信息的更新时间存储为 2020-07-...

2020-07-08 06:45:10 19 0

原创 Flask, Vue.js 中集成 Bootstrap/BootstrapVue

紧接上一篇Flask 和 Vue.js 开发及整合部署实例,来体验一下它们与 Bootstrap/BootstrapVue 的集成。漂亮的网站少不得一个好的 CSS 框架,现在有许许多的 CSS 框架可选,纯 CSS 的, 轻量级的, 含 JS 的 CSS 框架,如Pure,Bulma,Spect...

2020-07-08 06:44:38 15 0

原创 Flask 和 Vue.js 开发及整合部署实例

想做些简单的 Web 工具,首先想到的是 Flask + Vue.js, 当然可以完全用 Flask 自己的页面模板 Jinja2, 但一个网站项目不能享受到像 Vue.js, React 类似框架的灵活性真是太可惜了。于是 Flask 只专注于 API, 页面逻辑全用 Vue.js 的组合就成了...

2020-07-08 06:43:45 37 0

原创 Docker attach 后断开时不退出容器

docker attach可以连接上 Docker 容器的标准输入,输出和错误输出。比如docker attach连接后就能显示容器中用 ENTRYPOINT/CMD 启动进程的输出内容内容。想要断开会话连接怎么做呢?ctrl - c, 控制台是不再显示了,可以容器也被终止了,显然这是一个危险的操...

2020-06-30 10:18:58 48 0

原创 Mockito 的 anyString(), any(Foo.class) 等不能匹配 null 值

使用 Mockito Mock 方法式,一直以为可以用anyString(),any(Foo.class)等匹配null值,其实不行,null值必须显式的用null, 或eq(null)来匹配。anyString(),anyInt()等只能匹配非null值,查看它们的返回值实际是 "&q...

2020-06-30 10:17:42 58 0

原创 Python 列表的排序 - sort/sorted

Python 集合的遍历,推导及 filter/map/reduce 操作中讲了对集合的 filter, map 和 reduce 操作,那还有 sort 排序呢?像 Java 一样,Python 也提供了 sort() 和 sorted() 方法。 sort() 是 list 的实例方法, s...

2020-06-30 10:17:04 23 0

原创 创建 Python 的 list, set, tuple 和 dict

本文主要探讨一下在 Python 各种创建 list, set, tuple 和 dictionary 的方式。首先看 最常用的创建方式 1 2 3 4 alist = [1, 2] # type(alist) <class ...

2020-06-30 10:16:25 22 0

原创 归并排序算法解析

对于基本的排序算法,前面介绍了冒泡,选择,插入和希尔(增强版本的插入), 还有快速排序,现在还剩下最后一种基本的排序算法,那就是归并排序。归并排序像快速排序一样采用递归算法对列表进行分而治之,每次平均一分为二,分到只有一个元素为止。如果列表为空或只有一个元素时,那么从定义上来说它就是有序的; 当然...

2020-05-22 01:03:15 50 0

原创 希尔(Shell) 排序 - 增强版插入排序算法

前面讲过的几种排序多是以排序逻辑来命名的,例如冒泡,选择和插入排序,以及其他如归并排序,当然还有觉得自己足够牛 X 快速排序命名。而本文要学习的排序算法叫做希尔排序是以其设计者 Donlad Shell 命令的排序算法,该算法在 1959 年公布,能以作者来命名的算法应该是很不错的,令设计者引以为...

2020-05-05 09:00:55 62 0

原创 插入排序算法解析

前面说过最原始的复杂度为 O(n2) 的冒泡和选择排序,也跳跃到了复杂度为 O(n log n) 的快速排序,现在又再看一个复杂度同样为 O(n2) 的插入排序。从排序名称结合代码我们理解了为什么叫做冒泡或是选择,快速排序自认高名,那么何以这又谓之插入排序呢?是怎么插入,从左边往右边插,还是从右边...

2020-05-05 09:00:19 69 0

原创 理解 Python 类的变量,方法与属性

熟悉了传统的 C++/Java类定义的风格,来感受一下 Python是如何定义类的。本篇是阅读 《The Quick Python Book》第二版关于类定义的笔记,由原书内容进一步引申,不过是依照本人的思考顺序来组织的。在理解Python类定义的同时头脑中应该闪现出JavaScript/Java...

2020-05-05 08:58:57 77 0

原创 真正有些水准的排序算法 - 快速排序

冒泡和选择排序的简单粗暴也许在某些人眼里都不能称作算法,现在要进入一种更优雅的排序算法,快速排序。它使用分而治之(Divide and Conquer, D&G) 的策略,要应用到递归调用。快速排序敢说自己快速,也确实比选择排序快很多很多。冒泡和选择排序,尤其是选择排序是非常自然的排序算法...

2020-04-20 03:24:20 58 0

原创 两种最基本的排序算法: 冒泡和选择

因 COVID-19 漫延各自居家,也更有闲时,便拣起一本关于算法的书籍来研究。本不是科班出身,算法方面自然是自己的薄弱环节。平时用各种 SDK,只大概听说了些算法,仅能就自己如何选择哪种实现而作为参考。 如今阅读的是一本入门的书籍,名为 《算法图解》,英文版书名是 《Grokking Algo...

2020-04-16 01:53:34 95 0

原创 Kubernetes 学习笔记(二) - 部署和访问应用

前边折腾了各种安装 Kubernetes 集群的操作,还跑到 AWS 上撸了一把 EKS,也在 Kubernetes 上部署过服务。继续更深一步的学习如何部署应用和怎么通过 Service 去访问 Pod 中的应用,顺带看看内部的网络是怎么流转的。 测试平台还是以本地启动的三个 Vagrant ...

2020-04-13 01:38:26 30 0

原创 Kubernetes 集群中节点的 INTERNAL-IP 问题

用自己Kubernetes 学习笔记(一) - 初上手一文中的方法用 Vagrant 虚拟机安装的 Kubernetes 集群,部署应用什么的都没问题,然而却在用 $ kubectl exec -it <pod-name> -- sh 试图登陆 docker 容器时出问题了,总...

2020-04-13 01:37:32 301 0

原创 Java 普通线程池与 ForkJoinPool 的效果对比

Java 多线程编程常用的一个接口是ExecutorService, 其实就一个线程池的接口,一般由两种方式创建线程池,一为 Executors 的工厂方法,二则创建 ForkJoinPool 实例,当然也有直接使用 ThreadPoolExecutor 的。 关于什么时候用ForkJoinPo...

2020-04-13 01:36:36 266 0

原创 AWS EKS 执行 kubectl 时 error: You must be logged in to the server (Unauthorized)

在 AWS 上创建好 EKS 后,想要在本地用 kubectl 来管理 EKS,必须用aws eks update-kubeconfig来更新本地的~/.kube/config文件或者KUBECONFIG环境变量指向的别的配置文件。 比如说你创建 EKS 的用户在本地~/.aws/credent...

2020-04-13 01:35:55 691 0

原创 搭建使用 AWS 的 Kubernetes EKS 服务

前面从无到有或是分别以 Docker Desktop, Minikube, kind 来搭建过 Kubernetes 集群。而如今各大云服务提供商基本都推出了各自的 Kubernetes 服务,例如: Google GKE - Google Kubernetes Engine Amazon E...

2020-04-06 11:21:29 227 0

原创 几种简单安装 Kubernetes 集群的方法

在Kubernetes 学习笔记(一) - 初上手中一上手就尝试了最原始级的安装 Kubernetes 的方式,花了不少时间,好处是能更好的理解 Kubernete 的组成以及各节点是如何协同工作的。从《Kubernetes in Action》第二版中了解了几种简单的方法,为什么要把以下几种方式...

2020-04-06 11:20:10 91 0

原创 Docker 容器内进程与 Namespace

原本是继续阅读《每天5分钟玩转Kubernetes》一书的,发现该书所用的 Kubernetes 版本着实有点老旧( 1.7), 当前版本是 1.18。操作起来有些不同,所以找来了最新的 《Kubernetes in Action》第二版 来看,该书还在写作当中。第二章全是讲 Docker 的内容...

2020-04-06 11:19:38 41 0

原创 Kubernetes 学习笔记(一) - 初上手

经过前几天从 Docker Swarm 到 Docker Compose 的历练之后,终于踏上了 Kubernetes 的学习征程了。虽说前两者并非必要的学习 Kubernetes 的基础,但了解它们之后与 Kubernetes 中的一些概念可以进行对比理解。 本系列是阅读 《每天5分钟玩转Ku...

2020-04-06 11:18:56 33 0

原创 Docker Compose 实践

继续向 Kubernetes 进发,上一篇Docker Swarm 集群模式实操了解完 Swarm 后,有必要对 Docker Compose 了解一番。Docker Swarm 是把 Docker 宿主机组成集群,部署服务时只要告知 Manager 节点,它就会自动找到相应节点去运行相应的容器。...

2020-04-06 11:18:25 30 0

原创 Docker Swarm 集群模式实操

在正式进入 Kubernetes 之前希望能对早先的 Docker Swarm 有所了解,虽然它目前基本上没什么用处。Swarm 提供的是 Docker 宿主机的集群,集群中至少有一个 Manager(或多个), 再加上 0 或多个 Worker。它的大意是有个 Docker 服务(容器)通过 M...

2020-03-23 13:03:23 44 0

原创 记录自己常用的一些 Linux Shell 脚本

常要在 Linux 下分析日志或其他类型的文件,基本用的命令也就 grep, awk, sed, cut, vim, cat, find, xargs, tail, more 或 less。本人工作平台为 Mac OS X, 而 Mac 下的 grep, sed, awk 的行为与 Linux 下...

2020-03-23 10:25:10 55 0

原创 运行时动态创建 Spring Bean

通常我们注册 Spring Bean 是通过像 @Named, @Bean, @Component, @Service 这样的注解来注册的,或者用更为古老的 XML 配置文件的方式。难免有时候要根据实际业务需求在 Spring 运行期间动态注册 Spring Bean, 比如基本某种形式的配置文件...

2020-03-21 11:14:32 250 0

原创 Python print 立即打印内容到重定向的文件

看到本文标题也许要奇怪了,Python 的 print 难道不是也上可以看到结果的吗?在 Python shell 下只要 >> print('Hello world!') Hello world! 不就立马能看到控制台输出的 "Hello wor...

2020-03-21 11:13:36 135 0

原创 体验一下 Python 3.8 带来的主要新特性

学习理解一个软件非常好的方法就是跟随每一个版本演进的新特性,好比一个人被别人看着长大的,知子莫若父。因此每个版本的 Changelogs 或 What's New 是非常值得一读的,见What's New In Python 3.8。因为接触 Python 比较晚,没能即时的重...

2020-03-21 11:12:54 151 0

原创 Kafka Connect 介绍和使用

继续把 Kafka 捋一捋,还剩两个主要的组件了,分别为 Kafka Connect 和 Kafka Streams。而其中的 Kafka Connect 是在 Kafka 0.9.0.0 开始加入的我,Connect 的出现让 Kafka 与外部世界更紧密连接起来了,进而可以让其他外围组件通过 ...

2019-11-27 00:49:36 198 0

原创 启用并测试 Kafka 的 SASL + ACL 认证授权

Kafka 默认情况下是没有启用安全机制,这让能连接到 Broker 的客户端可以为所欲为,自 Kafka 0.9.0.0 版本引入了安全配置,但是需要进行一些配置来开启它。Kafka 安全主要包含三个方面:认证(authentication),授权(authorization), 和信道加密(e...

2019-11-27 00:49:01 78 0

原创 Kafka 集群间数据镜像实测

由于数据安全,网速等要求,许多公司都会建立多个数据中心,每个数据中心有独立的 Kafka 集群。为保持不同中心间的数据同步,就有必要在 Kafka 集群间进行数据镜像。kafka-mirror-maker命令或应用 Kafka Connect 可用于在多个 Kafka 集群相同的 Topic之间互...

2019-10-30 09:51:01 161 0

原创 Redis 知识点乱记

以下内容完全毫无章序,是阅读一本 Redis 相关书籍所划的一些自己助记用的重点。本不访放到博客上来,只称放在个人 Evernote 当中,于此纯粹为了自己往后查阅,所以请不要读它。 OBJECT ENCODING key 可以查数据存储的底层结构类型 如 redis> SADD ...

2019-10-30 09:48:17 39 0

原创 用 Java 把内存中的表格数据合并到 SQL Server 表中

承接近两年前的用 PreparedStatement 向 SqlServer 中一次性插入多条记录,其文后用 User-Defined Type 可用下面简单的代码把 Java 本地内存中表格数据一股脑的刷入到 SQL Server数据库表格中 String sql = "INSER...

2019-10-29 11:00:20 91 0

原创 等待所有的 CompletableFuture 完成

现实中有这样的用法,创建一批在线程池中运行的 CompletableFuture 实例,然后等待它们全部执行完再继续后面的操作。比如说 AWS 的 Lambda, 单单提交任务到线程池,不等待所有任务全部完成便退出主线程的话,AWS 便认为 Lambda 执行完毕,无视线程池中正在执行的任务而强行...

2019-10-29 10:59:43 1755 0

原创 Redis 中使用服务端 Lua 脚本

Redis 自 2.6 版本起加入了服务端的 Lua 脚本支持,即增添了EVAL,EVALSHA,SCRIPT相关命令。Lua 为何物,Lua 是一个非常轻量级,强大,高效,可内嵌的脚本语言; 产自于巴西,源码和二进制包都只有 200 多 KB。当前版本的 Redis 5.0.5 中 Lua 引擎...

2019-10-29 10:58:28 63 0

原创 Python 执行系统命令 - subprocess 模块的使用

Python 可信手拈来写系统脚本,那么在 Python 中调用系统命令应该会比较便捷。所以本文来看看 Python 有几种方式调用系统命令,以及与回味一下其他几种脚本语言的类似操作。简单说来,Python 执行系统命令的方式有四种方式,即 os.system(cmd) (建议用 subproc...

2019-10-29 10:57:46 17 0

原创 Python 函数声明先后顺序的问题

在 Python 中如果把函数定义写在调用的下方可能会出错,例如下面的代码 foo() def foo(): print("hello") 执行时会报出错误 NameError: name 'foo' is not defined 这时...

2019-10-29 10:57:06 768 0

原创 AWS Python Lambda 使用 Layer

使用 Python 书写 AWS Lambda 的一个好处就是能够在控制台中直接编辑源代码,非常方便进行快速验证测试 AWS 环境相关的。这只限于使用 AWS 为 Python Lambda 运行时提供的默认组件(比如 boto3),尚若需要在自己的 Python Lambda 中使用其他的组件(...

2019-10-24 05:13:30 192 0

原创 开启 Python 组件 Boto3 在 IDE 中的智能提示

在用 Python 编写 AWS 服务时,要用到 Boto 3 组件,而像 boto3.client('s3') 获得的对象只能被 IDE 识别为一个 BaseClient, 具体包含什么操作方法是在运行时由参数s3指示的基于 JSON 文件所描述的。因此 IDE 对s3 = ...

2019-10-24 05:12:55 53 0

原创 转换 Iterator 为 Java 8 的 Stream

Java 中有关抽象的可遍历的对象有 Iterator, Iterable 和 Java 8 的 Stream, Iterable 可简单的用如下代码转换为Stream StreamSupport.stream(iterable.spliterator(), false) 再回过头来,为什...

2019-10-24 05:12:19 204 0

原创 试手 RxJava 2.x 及对线程的初步理解

在进行数据流处理过程中,需要一个高效苗条的流处理组件,比如对输入流能进行分组(窗口),能进行流量控制(Back Pressure - 背压),这也就涉及到响应式编程,流处理框架。这方面如果直接基于 Akka actor 来构建 Akka ActorSystem 也是比较复杂,依赖的组件也不少。还有...

2019-10-24 05:11:48 32 0

提示
确定要删除当前文章?
取消 删除