linux 系统没有自带 wget 工具。当用到 wget 如果没有安装就会出现 --bash: wget: command not found,需要我们自己安装。

CentOS 安装

yum install wget -y

Ubuntu 安装

apt install wget -y

CentOS 7/8 一键安装 shadowsocks-libev, 本教程仅提供学习,请勿用于商业用途和不法行为。

由于 Google BBR 需要内核版本 4.9 以上,如果安装时内核版本低于 4.9 建议先升级内核版本

提示:CentOS 7 自带内核版本为 3.10,CentOS 8 自带内核版本为 4.18。

查看内核版本命令:

uname -r

1、下载脚本

一键脚本已集成TCP优化、自动开启Google BBR(限 4.9 或更高版本内核)、自动安装 shadowsocks-libev

wget https://down.24kplus.com/linux/shadowsocks/centos-shadowsocks-libev.sh

2、执行脚本进行安装

chmod +x centos-shadowsocks-libev.sh && ./centos-shadowsocks-libev.sh

3、根据shell脚本提示输入相关信息

1、提示设置SS密码,输入自定义密码后按回车,也可以直接按回车使用默认密码

输入SS密码界面

2、接下来选择SS要使用的服务器端口,输入自己喜欢的端口, 也可以直接按回车使用默认端口

输入SS端口号

3、 然后选择加密方式(仅保留相对安全的加密方式),如果选择chacha20的话,就输入对应序号3,按回车继续

选择SS加密方式

4、 安装完成后,会有如下图安装成功的提示,记住各项信息,在客户端连接时需要用到

安装SS成功后提示信息

SS服务端安装成功后,就可以在电脑、手机、路由器等设备上的SS客户端上,按照以上设置的各项参数进行连接了。

最后送上Windows 客户端 Shadowsocks-4.1.7.1.zip

要完成高性能的Web服务功能,通常都是需要用到服务,如:IIS、Apache、Tomcat和Nginx,但是众所周知的Web服务器配置的复杂性,如果我们只是需要一些简单的功能,安装这些组件看起来就没多大必要。我们需要的是一个简单的HTTP类,可以很容易地嵌入到简单的Web请求的服务,加到自己的程序里。

.net 框架下有一个简单但很强大的类 System.Net.HttpListener。这个类几行代码就能完成一个简单的服务器功能。

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8081/");
listener.Start();
Console.WriteLine("Listening...");
Task task = Task.Factory.StartNew(() => {
	while(listener.IsListening)
	{
		HttpListenerContext context = listener.GetContext();
		Console.WriteLine("Http requesting...");
		HttpListenerRequest request = context.Request;
		HttpListenerResponse response = context.Response;
		Console.WriteLine("Http responseting...");
		string responseString = "<html><title>Http server in C#</title><body><p>Hello world!</p></body></html>";
		using (StreamWriter writer = new StreamWriter(response.OutputStream))
		{
			writer.WriteLine(responseString);
		}
	}
});
task.Wait();

结果

http server

MySQL 8.0.18 稳定版(GA)已于14/10正式发布,Hash Join 也如期而至。

快速浏览一下这个版本的亮点!

1.Hash Join

Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。

2.EXPLAIN ANALYZE

EXPLAIN ANALYZE 将运行查询,然后生成 EXPLAIN 输出,以及有关优化程序估计如何与实际执行相匹配的其他信息。

3.创建用户时可以随机生成密码

为 CREATE USERALTER USER和 SET PASSWORD语句添加了语法,以生成强随机密码,并将其作为结果返回给客户端。

添加的语法是:

CREATE USER user IDENTIFIED BY RANDOM PASSWORD;
ALTER USER user IDENTIFIED BY RANDOM PASSWORD;
SET PASSWORD [FOR user] TO RANDOM;

4.群组复制

group_replication_exit_state_action 增加了 OFFLINE_MODE 模式,用于指定当服务器无意离开群组时群组复制的行为。

OFFLINE_MODE 行为将关闭所有连接,并禁止非 CONNECTION_ADMIN 或 SUPER 权限的用户建立新连接,否则它的行为类似于现有 READ_ONLY 模式。

5.innodb 增加一个空闲状态下控制写入 IOPs 的选项

该选项在 InnoDB 空闲时控制写 IOP。目的是减少写 IO,以延长闪存的寿命。

此外,还有很多内部细节的改进,详细请访问:

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html

CentOS / Ubuntu 安装 pip。 解决 -bash: pip: command not found 错误

执行:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py

Successfully installed pip-19.3.1 setuptools-41.4.0 wheel-0.33.6

linux 系统没有自带 zip 的压缩解压工具。当用到 zip 或者 unzip 如果没有安装就会出现 -bash: unzip: Command Not Found-bash: zip: Command Not Found,需要我们自己安装。

CentOS 安装

yum install -y unzip zip

Ubuntu 安装

sudo apt-get install zip

C# 读取 CSV 文件数据到 DataTable。

public static DataTable ReadCSVtoDataTable(string fileName)
{
	DataTable dt = new DataTable();
	Regex regex = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
	using (StreamReader sr = new StreamReader(fileName))
	{
		string[] headers = sr.ReadLine().Split(',');
		foreach (string header in headers)
		{
			dt.Columns.Add(header);
		}
		while (sr.Peek() > 0)
		{
			string[] rows = regex.Split(sr.ReadLine());
			DataRow dr = dt.NewRow();
			for (int i = 0; i < headers.Length; i++)
			{
				dr[i] = rows[i];
			}
			dt.Rows.Add(dr);
		}
	}
	return dt;
}

using (var client = new SftpClient("Host", 22, "UserName", "Password"))
{
	client.Connect();
	try
	{
		var data = File.ReadAllBytes("C:\\test.zip")
		using (SftpFileStream sw = client.OpenWrite("/home/test.zip"))
		{
			sw.Write(data, 0, data.Length);
		}
	}
	catch(Exception ex)
	{
		throw ex;
	}
	finally
	{
		client.Disconnect();
	}
}