实习记录

2020年7月15日

今日开始是税期,流动性开始紧张,同事说这两天央行就会放水。

2020年7月17日

除了大办公室,旁边的两个小房间,一个是交易室,另一个是结算室。交易室做交易拿出来成交单,然后将成交单交给结算室,结算室拿出来审批单、划款单等交给运营管理部做审批和划账。

今天银保监突然接管6家保险公司,办公室里突然说那些二级资本债完蛋了。主要是因为一旦被接管,他们的债就会没人要,就很难出手了。

Read More

C++|用Visual Studio配置GTest

第一步.下载源代码

Google Test的Github下载最新的Release的zip。解压。

第二步.cmake创建工程

打开Developer Prompt For VS 2019,cd进解压出来的文件夹(见上图)里的googletest子目录,执行:

1
cmake .

会自动侦测出是在VS环境,生成sln文件。打开sln。

第三步.生成lib文件

gtest实际上就两个lib文件,一个用于Debug,一个用于Release。打开sln之后,下图里的Debug生成一次,改成Release再生成一次:

Read More

纪念|买了个新键盘

抛弃以前的键盘的原因:服役了很久的罗技键鼠套装,甚至鼠标都不知道飞到哪里去了。服役年龄长带来的问题:

  1. 键面有点黏,粘了一些尘,手感很差
  2. 按下去的时候很硬,反弹的时候又黏滞,导致错漏很多;最严重的是尾指控制的键,由于尾指的力量本来就弱,按z和ctrl的时候手掌也没办法辅助给力,经常漏按这两个键。

所以看知乎的建议,买了个达尔优的87键茶轴。初步体验感觉不错:

  1. 87键没有了数字区,刚好适合面积有限的桌面,鼠标再也不需要和键盘抢位置了
  2. 有背光,虽然是无法更改颜色的普通背光,但是至少照明效果有了(可以调亮度,多级)
  3. 茶轴的两段式手感没特别的感觉,但是比起原来的键盘实在是好太多了,打起来带劲
  4. 声音还是有点出乎意料的(大)
  5. 有Fn键,可以控制媒体播放(这条出乎意料,解决了听歌的各种问题)

总而言之,109块买到一个这样的键盘,确实是小确幸。

Read More

C++|copy-and-swap idiom

copy-and-swap是为了赋值操作符和move构造器能够更优雅(而且稳定)地完成工作而出现的。**Rule Of Three**要求自己定义的类如果提供了以下其中之一,就要提供全部:

  1. 析构器
  2. 复制构造器
  3. 复制赋值操作符

C++11就成了**Rule Of Five**:

  1. 复制构造器
  2. 复制赋值操作符
  3. 析构器
  4. 移动构造器
  5. 移动赋值操作符

废话不多说,直接写比较成熟的方案,来自于Stack Overflow

1
2
3
4
5
6
7
8
9
10
11
class AClass{
int length_;
int * array;
public:
...
friend void swap(AClass & dest, AClass& src) noexcept {
using std::swap;
swap(dest.length_, src.length_);
swap(dest.array, src.array);
}
};

核心就是这个swap方法,用到了ADL——为了满足ADL所以要写成friend,更深入的原因看这个

有了swap之后,就可以把移动构造器写成这样:

1
2
3
AClass::AClass(AClass&& another) noexcept : AClass() {
swap(*this,another);
}

需要调用默认构造器来先把this给设置好,再swap。

Read More

vscode使用clangd(Makefile)

clangd最大的特点是需要一个json格式的compilation database,通过这个文件才能让其他的lint、智能补全之类的功能正常运作。关于如何生成“compilation_database.json”,官方有针对不同的build工具对应的文档

类似CMake这类的高级工具自然是不需要其他插件,它内置了这个功能。对于其他类型的构建工具,比如Makefile,就要借助额外的工具来生成这个文件了。

这里使用的是scan-build工具来辅助,这东西是用python来写的,所以要用pip安装:

1
pip install scan-build

而调用的命令的名字是intercept-build,结合make的调用方法是:

1
intercept-build make

其实就是在正常的make命令前面加个intercept-build就可以了。

Read More

vscode的libstdc++的debug问题

今天用linux下的vscode,通过gdb和lldb做debug,在单点调试的时候总是会在new一个对象的时候报错,表示找不到libstdc+±v3之类的文件在哪,没法debug。解决这个问题的办法之一是把/usr/lib/libstdc++.so.6的debug symbol给strip了,debug的时候就不会尝试去解析标准库了,问题就解决。

由于strip会导致很多应用崩掉,所以建议在tty下面做这个:

1
sudo strip /usr/lib/libstdc++.so.6

解决方案来源于stackexchange。第二种方法没有成功,不知为何。

Read More

CMake的一些基础写法

不要想着骚操作。基本参考维基教科书:CMake入门。然而因为这个教科书已经停止更新了,所以参考CMake官方网站的教程CMake Tutorial

最简单的编译一个源文件的CMakeLists.txt

天才第一步,“Hello world”。写一个输出hello world的main.cc (这里用的是谷歌代码规范的命名规则)。然后同目录放一个包含以下内容的CMakeLists.txt:

1
2
3
4
5
6
7
# 指示要求的cmake最低版本
cmake_minimum_required (VERSION 2.6)

# project名字
project(helloworld)
# 新增target,类型为可执行文件,输出文件名helloworld,源代码文件main.cc
add_executable(helloworld main.cc)
1
2
3
./
`-- CMakeLists.txt
`-- main.cc

warning

在这个目录下 cmake .,cmake就会输出一个包含makefile的build文件夹,在build文件夹里make,就会输出可执行文件helloworld。这种叫做In-source build(虽然实际上已经有点out-source的感觉了)。

不建议直接 cmake .,这样会导致与源代码无关的编译文件污染源代码目录。无论什么时候都应该新建目录用于编译。

Out-Source Build

为了不污染源代码,应该新建build目录再编译。

1
2
3
4
./
|-- build
`-- CMakeLists.txt
`-- main.cc

Read More

markdown页面内跳转

今天想看看markdown怎么实现在页面内跳来跳去。虽然是没有onenote那么方便可以在不同笔记本之间跳来跳去,但是页面内跳转也是很切实的需要。

其实这是基于html的特性,来源于stackoverflow。首先要用a标签来设置一个anchor(锚点):

1
<a name="后面要用到的名字">可能是一些要显示的文字</a>

然后就可以在后文中使用markdown语法来跳回来了:

1
[回到上边](#后面要用到的名字)

评论里说用id=也可以,尽可以试试。

Read More