本文主要介绍 Python 的概念与特性、环境部署、基本语法、标准库、第三方库、科学分析工具、Python 工程工具、实战技巧和踩过的一些坑。

阅读全文 »

介绍 Linux 相关的命令、Shell 编程、实用技巧、优化实战和系统架构相关知识。

阅读全文 »

什么是 Golang?

 Go™ is a programming language built to resemble a simplified version of the C programming language.

特性

类别

  • 静态语言
  • 编译型语言

优点

  • 语言层面支持并发
  • 无依赖,直译机器码
  • 内置 runtime,支持 GC
  • 可跨平台编译
  • 支持内嵌 C
  • 丰富的标准库
  • 学习曲线低

缺点

  • 接口是枚举类型
  • import 包不支持版本
  • goroutine 一旦启动,切换将不受程序控制

环境配置

安装

 根据操作系统(这里以 MacOS 为例),在 Download 页面下载对应的安装包,进行安装

1
2
3
# 安装完成后,iTerm 中看到可以执行 go 命令了
$ which go
/usr/local/go/bin/go

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 环境变量
$ vim ~/.bashrc
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

# 工作目录
# bin: 存放可执行文件
# pkg: 存放编译好的库文件
# src: 存放 go 的源文件
$ mkdir -p /code/gopath
$ vim ~/.bashrc
export GOPATH=/code/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

$ source ~/.bashrc
阅读全文 »

关于本文

 虽然接触 Java 已经 8 年之久,可惜学习之初的笔记文档没能很好地保存下来。本文是近几年工作学习中遇到的一些零散的知识点,包括了 基础概念、实用的编程技巧、代码可读性、设计模式、性能优化(工具 & 编码)、测试相关、JVM 相关、常用的工具和常见问题。本着好记性不如烂笔头的初衷,在不断地踩坑和爬坑的过程中,慢慢地记录成文。期待着本文能起到抛砖引玉的作用,以看到大家的真知灼见。

基础知识

注解

GuardedBy

 @GuardedBy 注解可以作用于某一个属性或者方法,约定在访问这些被注解标记的资源时,能被同步代码块保护着。简单的使用案例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@GuardedBy("obj")
private ConcurrentMap<String, String> map = new ConcurrentHashMap<>();
private final Object obj = new Object();

public void put(String k, String v) {
synchronized (obj) {
map.put(k, v);
}
}

/**
* If you use `error prone` tool to check this, this annotation should be `@SuppressWarnings("GuardedBy")`
* {@see https://errorprone.info/bugpattern/GuardedBy}
* {@see https://github.com/apache/druid/pull/6868#discussion_r249639199}
*/
@SuppressWarnings("FieldAccessNotGuarded")
public void remove(String k) {
map.remove(k);
}

@Override
public String toString() {
synchronized (obj) {
return "GuardedByExample{" +
"map=" + map +
'}';
}
}

Tips: Code Example from Apache Druid;另外,error-prone 工具支持对多种版本@GuardedBy 进行检查

阅读全文 »

离散数学是什么?

离散数学(Discrete mathematics)是数学的几个分支的总称,研究基于离散空间而不是连续的数学结构。与连续变化的实数不同,离散数学的研究对象 —— 例如整数、图和数学逻辑中的命题 —— 不是连续变化的,而是拥有不等、分立的值。因此离散数学不包含微积分和分析等连续数学的内容。离散对象经常可以用整数来枚举。更一般地,离散数学被视为处理可数集合(与整数子集基数相同的集合,包括有理数集但不包括实数集)的数学分支。但是,离散数学不存在准确且普遍认可的定义。实际上,离散数学经常被定义为不包含连续变化量及相关概念的数学,甚少被定义为包含什么内容的数学。

基础知识

逻辑符号

原子命题

 $p,\, q,\, r,\, \ldots$ 表示原子命题(简单命题)

 1 表示命题的真值为真

 0 表示命题的真值为假

联结词

否定联结词

 $\neg$ 称为否定联结词

 $\neg p$ 称为 $p$ 的否定式

$p$ $\neg p$
0 1
1 0
阅读全文 »