最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。 根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。 于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

  • 系统支持:Ubuntu 12+
  • 虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
  • 内存要求:≥128M
  • 日期:2018 年 03 月 20 日

关于本脚本

  1. 本脚本已在 digitalocean 上的 VPS 全部测试通过。
  2. 当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
  3. 脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
  4. 由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

使用方法

  1. 使用root用户登录,运行以下命令:

    1
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

    安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。

  2. 重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:

    1
    uname -r

    查看内核版本,显示为最新版就表示 OK 了

  3. 检查点1

    1
    sysctl net.ipv4.tcp_available_congestion_control

    返回值一般为:

    1
    net.ipv4.tcp_available_congestion_control = bbr cubic reno
  4. 检查点2

    1
    sysctl net.ipv4.tcp_congestion_control

    返回值一般为:

    1
    net.ipv4.tcp_congestion_control = bbr
  5. 检查点3

    1
    sysctl net.core.default_qdisc

    返回值一般为:

    1
    net.core.default_qdisc = fq
  6. 检查点4

    1
    lsmod | grep bbr

    返回值有 tcp_bbr 模块即说明 bbr 已启动。注意:并不是所有的 VPS 都会有此返回值,若没有也属正常。

LaTeX介绍

LaTex是一种基于TeX的排版系统,最初由美国计算机学家Leslie Lamport在20四级80年代初开发,在对于生成包含复杂表格和数学公式的书籍质量的印刷品TeX发挥着强大功能。

TeX在不同的系统下有不同的实现版本(MiKTeX、pdfTeX、xelaTeX、CTeX),有时一种操作系统中也会有几种TeX系统。目前系统对应推荐关系如下:

Unix(mac) 类Unix(Linux) windows
MacTex Texlive MikTex

CTeX指的是CTeX中文套装的简称,是把MiKTeX和一些常用的相关工具,如GSview,WinEdt 等包装在一起制作的一个简易安装程序,并对其中的中文支持部分进行了配置,使得安装后马上就可以使用中文。

TeXLive 是由国际 TeX 用户组织 TUG 开发的 TeX 系统,支持不同的操作系统平台。其 Windows 版本又称 fpTeX , Unix/Linux 版本即著名的 teTeX 。

linux环境下LaTeX配置

总体方案介绍

TexLive + Atom编译器(3个Atom插件) + 添加win字体

LaTeX基础环境配置

  • 在有apt包管理的Linux发行版本上,如(ubuntu,deepin,debian),其安装相对容易。命令如下:
1
2
sudo apt-get update
sudo apt-get install texlive-full

其中,-full注明安装所有扩展组件(xelaTeX、语言字体包等),建议直接安装-full版本,虽然硬盘空间占用较大,但免去了单个配置的苦恼。

  • apt的Linux发行版本可能需要自行texlive官网下载最发行版本并安装。

atom(IDE)相关配置

Atom 是github专门为程序员推出的一个跨平台文本编译器。具有简洁和直观的图形用户界面,经过简单的配置,足够胜任各类语言的IDE(集成开发环境)

因为atom在大多数的linux发行版本中均未有收录,需要自行添加仓库源,或者去官网下载安装,这里为了便于更新,提供添加apt源,以及apt安装方式介绍:

1
2
3
sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update
sudo apt-get install atom

atom若作为latex的开发环境,需要配合以下插件使用(直接在atom中安装):

  • atom-latex
  • language-latex
  • pdf-view

另外建议安装simplified-chinese-menu插件,对atom菜单进行汉化。

因对兼容性的设置,若对一般latex编写,建议Latex编译器使用xelatex,在atom-latex插件中设置如下:

  • Toolchain to use 选择 custom Toolchain
  • LaTeX compiler to use 修改为 xelatex
  • bibTeX compiler to use 修改为 xelatex
  • Preview PDF after building process 选择 Do nothng

将win下字库迁移到linux下

因为win下大多字体均是微软公司授权或其他公司向用户授权,大多是非开源字体,因此在LinuxTeX发型版本中均不自带。但在发型书籍时候,使用的大多字体:英文下的新罗马字体(Times New Roman),中文下宋体(SimSun),楷体(KaiTi)均为非开源字体。若在Linux下使用,需要自行移植安装。

注意:不能直接安装,直接安装后会存在于本用户的目录下,texlive仅仅调用系统共有字体文件夹下所有字体步骤如下

复制win字体到Linux字体文件夹

windows字体文件夹位置:C://WINDOWS/Fonts

Linux下字体文件夹位置:/usr/share/fonts

建议将windows下所有字体复制到/usr/share/fonts/windows-fonts下,使用cp命令。

例如在windows字体文件夹下打开终端

1
2
sudo mkdir /usr/share/fonts/windows-fonts
sudo cp * /usr/share/fonts/windows-fonts

刷新字体缓存,使字体生效

1
sudo fc-cache -f -v

Win环境下LaTeX配置

windows环境下方案很多,这里推荐直接安装相同的Texlive套件,其直接包含MiKTeXCTeX

点击转至Texlive国内清华源

下载文件类型为ios,请解压或挂载后安装。

针对前端的IDE仍建议使用Atom,有了能力者可以使用WinEdt。

  • Atom 配置见2.2,但注意:请从官网直接下载atom并安装,其余配置一致;
  • 因为不存在字体缺失问题,直接使用即可。

引用调用方式

类型名 &引用名 (变量名) 或 类型名 &引用名 = 变量名

  • 引用是别名,建立引用时必须初始化
  • 形参是引用,实参是变量

内联函数

inline 类型说明符 被调用函数名(形参表)

  1. 必须提前声明和定义
  2. 内联函数不交换控制权
  3. 不支持递归、循环、switch选择等复杂语句

面向对象三大特性

  • 继承性
  • 封装性
  • 多态性

类特性

抽象性 隐藏性 封装性 多态性

类是对象的抽象, 对象是类的实例

  • public 权限开放
  • private 仅成员和友元
  • protected 成员、友元、派生
继承方式 public protected private
public public protected private
protected protected protected private
private private private private

复制构造函数

类名 (const 类名 &对象名);

const 为保护实参对象可读,可省略 对象名是本类对象的引用,根据需求确定

1
2
3
4
5
6
7
8
9
class A
{
public:
A(int a);
A(const A &a);
};
A a(1);
A b(a); // 方式1
A c = b; // 方式2

静态成员(static)

静态数据成员

  • 静态数据成员必须初始化,且必须单独初始化
  • 定义时候不加 private/public/protected
  • 静态数据成员也可以定义为私有的静态数据成员

数据类型 类名:: 静态数据成员 = 值;

静态成员函数

  • 静态成员函数可以引用静态成员,不能直接引用非静态

类名::静态成员函数(参数表)

友元

友元函数 可放在类中任意位置,效果相同

friend 返回类型 函数名(参数表)

友元类

派生类构造函数

1
2
3
4
派生类名(派生类构造函数总参数表):<基类构造函数>(<参数表1>),<子对象名>(<参表2>)  
{
<派生类中数据成员初始化>
}

派生类的析构函数

  • 先执行派生类的析构函数,再执行基类的析构函数
  • 各个基类构造函数的执行顺序取决于定义派生类时所指定的各个基类的顺序,而与派生类构造函数的成员初始化列表中给定的基类顺序无关。

动态联编

三条件

  1. 虚函数
  2. 满足复制兼容规则
  3. 成员函数/指针/引用调用虚函数

抽象类

  • 至少含一个纯虚函数

virtual <返回值类型> <函数名> (<参数表>)=0;

  • 不能建立对象

运算符重载

1
2
3
4
5
6
7
8
9
10
//成员函数
<返回值类型> operator<运算符>(<参数表>)
{
……
}
//友元函数
friend <返回值类型> operator<运算符>(<参数表>)
{
……
}

C

= [ ] () -> 这四个运算符只能被重载为类的非静态成员函数

赋值兼容规则

  • 派生类对象可以赋值给基类对象
  • 派生类对象可以初始化基类引用
  • 基类对象可以指向派生类对象

其他

  • 代码复用的三种方式:继承、模板、组合
  • 提取运算符>> ,插入运算符<<
  • 运算符重载要求保持其原来的操作数个数、优先级、结合性和语法结构

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

无序列表

  • 项目一
  • 项目二
  • 项目三
    • 子项目
    • 子项目

有序列表

  1. 项目一
  2. 项目二
  3. 项目三
    1. 二级项目
    2. 二级项目
      1. 三级项目
      2. 三级项目
  4. 项目四

一级引用

二级引用

三级引用


粗体:Markdown
斜体:Markdown
粗体+斜体:Markdown
删除线:MarkDown
网址:liuchang.men
使用脚注1


TODOLIST


关于 latex 公式

行内公式:\(E=mc^2\)

单行公式:

\(x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\)


来张图片吧


这是表格

Tables(左对齐) Are(居中对齐) Cool(右对齐)
1 right-aligned $1600
2 centered $12
3 are neat $1

代码测试

行内代码 nano

代码块

1
2
import math
print("hello world!")
1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("hello world!\n");
return 0;
}
1
2
3
4
5
6
7
#include <iostream>
using namespace std;

int main() {
cout << "hello world!" << endl;
return 0;
}

  1. Hi 这是一个注脚,会自动拉到最后排版↩︎

0%