0%

早些天不忙的时候看的入门,从有道云笔记搬过来的

简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景

  1. Web 应用的自动化打包和发布。
  2. 自动化测试和持续集成、发布。
  3. 在服务型环境中部署和调整数据库或其他的后台应用。
  4. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Read more »

昨天在群里看到有人问怎么通过sql在oracle中取微秒

以前没有遇到过,就搜索了一下,找了一会给找到了

1
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss ff') from dual;

输出:年-月-日 时:分:秒 微秒

1
2017-9-24 10:38:27 129368

很少问题是搜索引擎找不到的,学会如何描述问题才是关键

概述

布隆过滤器的作用是加快判定一个元素是否在集合中出现的方法。

因为其主要是过滤掉了大部分元素间的精确匹配,故称为过滤器。


其应用场景为需要频繁在一个海量的集合中查找某个元素是否存在。

并且通常,这个值不在集合中。

比如Google chrome用此方法检查一个url是否在恶意url库中。

简单的例子

假设有一些字符串,假设有一个字符串a,要在集合B中查找其是否在集合B中。最笨的方法是遍历集合B中的每个元素bi,精确匹配a是否等于bi。若集合B中有N个元素,则最坏情况下需要执行N次精确匹配。

一个改进的方法是将a和B中每个字符串按照特定规则映射为数字,称为hash值。规则可以任意设置。比如取各字符串的首字母和尾字母的编码之乘积,取奇数个字符的编码执行异或,等。将比较字符串问题变成一个比较数字的问题。比较字符串需要从头到尾比较,而数字的比较会快很多。

需要注意的是,当两个字符串相同时,采用相同的映射规则得到的数字一定相同。但当两个字符串不同时,得到的字符串不一定不同。所以,当我们发现两个字符串的hash值相同时,两个字符串不一定相同,所以需要进一步去精确匹配两个字符串是否相同。但采用hash值方法已经能够过滤掉一部分以前需要精确匹配的计算量。仅当hash值相同(假设hash值通过字符串首尾字母计算得来,则当两个字符串首尾字母相同时hash值相同)时才去比较字符串本身。若选择hash值合理,则性能将大幅提高。

布隆过滤器通过将一个字符串使用多个不同的hash值计算方法,映射为多个不同的hash值,当所有这些hash值完全相同时,才认为两个字符串相同。从而进一步降低了放生hash值相同的可能性,从而进一步提高了过滤的性能。

Java代码实现

算法使用了md5值来生成n个不同的hash值

Read more »

执行命令:(装完就开机启动)

1
2
3
wget --no-check-certificate -O shadowsocks-libev-debian.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh
chmod +x shadowsocks-libev-debian.sh
./shadowsocks-libev-debian.sh 2>&1 | tee shadowsocks-libev-debian.log

默认设置:

1
2
3
服务器端口:自己设定(如不设定,默认为 8989)
密码:自己设定(如不设定,默认为 teddysun.com)
加密方式:自己设定(如不设定,默认为 aes-256-gcm)

管理命令:

1
2
3
4
启动:/etc/init.d/shadowsocks start
停止:/etc/init.d/shadowsocks stop
重启:/etc/init.d/shadowsocks restart
查看状态:/etc/init.d/shadowsocks status

修改配置文件(端口、密码)

1
2
3
4
5
6
7
8
9
10
11
vi /etc/shadowsocks-libe/config.json
{
"server":"0.0.0.0",
"server_port":9090,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"password",
"timeout":600,
"method":"aes-256-gcm"
}

卸载命令

1
./shadowsocks-libev-debian.sh uninstall

IntelliJ IDEA 调试窗口、帮助窗口、搜索框、底部消息等中文乱码

在使用的过程中发现,搜索框历史、提交svn后的消息提示乱码

最后发现是由于更改了idea界面的字体,字体对中文支持不佳导致

解决办法:更改为支持中文的字体(比如:微软雅黑 Microsoft YaHei)

设置路径:Settings -> Appearance & Behavior -> UI Options -> override default fonts by

选择何时的字体即可,也可以把勾勾去掉,使用默认的。

JWT简介

JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。

JWT生成的token

欲加密的字符:hisen
加密后的字符:(分三段)

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjoiXCJoaXNlblwiIiwiZXhwIjoxNTAyOTY0Mjk2fQ.gzg4JEm8Z-GoU9eNaNll9I1wQQ0cEAbZC9OBUjAAQqI

JWT的构成

Read more »

命令行常用操作,备忘

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
29
30
31
32
33
34
35
36
37
38
39
#开启远程登录
grant all privileges on *.* to 'user'@'%' identified by 'passwd' with grant option;

#创建数据库
create database DB;

#创建用户
insert into mysql.user(Host,User,Password) values("localhost","user",password("passwd"));

#删除用户
DELETE FROM user WHERE user="username" and HOST="localhost";

#修改指定用户密码
update mysql.user set password=password('new passwd') where user="username" and host="localhost";

#用户授权
grant all privileges on DB.* to 'user'@'localhost' identified by 'passwd';
grant select,update on DB.* to 'user'@'localhost' identified by 'passwd';

#刷新权限
flush privileges;

#数据库导出
mysqldump -uUSRENAME -pPASSWD DATABASE > DATABASE.sql

#数据库导出(只导出表结构 -d)
mysqldump -uUSRENAME -pPASSWD -d DATABASE > DATABASE.sql

#数据库导入

#1.切换数据库
use DATABASE;
#2.设置编码
set names utf8;
#3.执行导入操作
source /home/abc/abc.sql;

#直接导入
mysql -uUSERNAME -p DATABASE < DATABASE.sql

apt-get应该debian内核系列的系统都能用:

比如:debian、ubuntu、deepin等

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
apt-cache search package    #搜索包(相当于yum list | grep pkg)
apt-cache show package #显示包的相关信息,如说明、大小、版本等
apt-cache showpg package #显示包的相关信息,如Reverse Depends(反向依赖)、依赖等
apt-get install package #安装包
apt-get reinstall package #重新安装包
apt-get -f install package #强制安装
apt-get remove package #删除包(只是删掉数据和可执行文件,不删除配置文件)
apt-get remove --purge package #删除包,包括删除配置文件等
apt-get autoremove --purge package #删除包及其依赖的软件包+配置文件等
apt-get update #更新源
apt-get upgrade #更新已安装的包
apt-get dist-upgrade #升级系统
apt-get dselect-upgrade #使用 dselect 升级
apt-cache depends package #了解使用依赖
apt-cache rdepends package #查看该包被哪些包依赖
apt-get build-dep package #安装相关的编译环境
apt-get source package #下载该包的源代码
apt-get clean && apt-get autoclean #清理下载文件的存档 && 只清理过时的包
apt-get check #检查是否有损坏的依赖
dpkg -S filename #查找filename属于哪个软件包
apt-file search filename #查找filename属于哪个软件包
apt-file list packagename #列出软件包的内容
apt-file update #更新apt-file的数据库

dpkg -l #列出当前系统中所有的包.可以和参数less一起使用在分屏查看(类似于rpm -qa)
dpkg -l |grep -i "pkg" #查看系统中与"pkg"相关联的包(类似于rpm -qa | grep pkg)
dpkg -s pkg #查询一个已安装的包的详细信息(类似于rpm -qi)
dpkg -L pkg #查询一个已安装的软件包释放了哪些文件(类似于rpm -ql)
dpkg -S file #查询系统中某个文件属于哪个软件包(类似于rpm -qf)
dpkg -c pkg.deb #查询一个未安装的deb包将会释放哪些文件(类似于rpm -qpl)
dpkg -I pkg.deb #查看一个未安装的deb包的详细信息(类似于rpm -qpi)
dpkg -i pkg.deb #手动安装软件包(不能解决软依赖性问题,可以用apt-get -f install解决)
dpkg -r pkg #卸载软件包(不是完全的卸载,它的配置文件还存在)
dpkg -P pkg #全部卸载(不能解决依赖性的问题)
dpkg-reconfigure pkg #重新配置
dpkg -x pkg.deb dir #将一个deb包解开至dir目录
dpkg --pending --remove #移除多余的软件

# 强制安装一个包(忽略依赖及其它问题)
dpkg --force-all -i pkg.deb #可以参考dpkg --force-help

# 强制卸载一个包
dpkg --force-all -P pkg.deb

aptitude update #更新可用的包列表
aptitude upgrade #升级可用的包
aptitude dist-upgrade #将系统升级到新的发行版
aptitude install pkgname #安装包
aptitude remove pkgname #删除包
aptitude purge pkgname #删除包及其配置文件
aptitude search string #搜索包(相当于yum list | grep pkg,重要)
aptitude show pkgname #显示包的详细信息 (相当于yum info pkg,重要)
aptitude clean #删除下载的包文件
aptitude autoclean #仅删除过期的包文件
apt-get install xrdp #安装图形化

计算机程序的思维逻辑

这个系列的文章还不错

目录—微信公众号

目录—掘金(1-6缺失)

相关笔记或者代码

相关笔记或者代码 - github地址

说明

版权归原作者所有

感觉文章不错,一边看一边实践。

有时候从头开始学习也会有另一番风味。

兴趣是最好的老师,唯有坚持才是实现梦想的唯一途径。