艾莉亚的猫 Time is limited, To be a better man

越南之行,花费概要

1

之前出去玩的很多次,花费多少自己也没有在意去记着。这次出国因为要用外币,自然的更多留心。记录这次越南之行的花费,哪里做得好,哪里花费了不该多花得钱,总结起来,为以后更好的出行旅游做借鉴。

总共花费约4200¥,其中的2400¥是团费,另外1800¥全部是在越南的开销。

2

团费是2400¥,包含了来回的机票(都是Vietnam Airlines)和海滨别墅(Ocean Villas)的费用。

越南这1800¥的开销如下:机场免税店,香烟322¥,会安古镇上买了一个包包38万VND,折合人民币128¥,买了很多特产和零食,大约花费540¥,吃饭、打车、景区门票花费加起来800¥(最后一晚吃的岘港海鲜大排档,一只大龙虾1000多块,那一顿人均300¥,一般人均200¥左右就可以吃的很爽了)。

结论:直接在国内银行换外币(换越南盾即可,我自己换了300美金,只在越南的机场免税店用了),这是最划算的。自己的招行金卡,国内跨行取现免费,在越南外贸银行取款每次会收取10¥的手续费,自己取了200多万VND,陆陆续续的取了5次,多花费了50¥。

免税店只买了一条中华烟,价格是49$,折合人民币322¥,本来要给朋友带dior唇彩,没有就作罢。

脚步

学做人,学做事

做一个有能力、可依靠、有责任感的人

学习个人理财

学会节流,做好开源

学摄影,学吉他

提高自己审美

多读书,学做菜

定期旅行,看外面的世界

给自己定个五年、十年的计划

踏踏实实一步一步走下去

不管怎样,都要活成自己喜欢的样子


1

Linux系统core文件设置

运行时错误

任何人写程序都会出错,正如《C++编程规范》所说,真正可怕的错误不是编译时的错误,而是运行时错误。

有的程序可以通过编译, 但在运行时会出现Segment fault(段错误)

这通常都是指针错误(一般就是空指针)引起的,或者访问了不能访问的内存(数组越界,系统保护)

core文件

我们不可能用GDB一句一句的去找,真正的英雄都善于使用手中的武器。这就是core file

所谓core,就是当程序down掉的时候,操作系统把程序的内存内容dump下来,这个动作就是core dump,动作的结果就是core文件

产生:

1.程序挂了,操作系统产生

2.通过gcore $pid命令直接导出相应进程的core文件,此命令运行后, 会恢复程序的执行, 不影响程序的运行

3.通过另一个进程发送SIGABRT信号给当前进程, 虽然也能产生core文件,但是程序随着一起终止掉

C++单例模式的简单实现

将Singleton类的构造函数定义为private,这样就不能实例化为一个对象(抽象类),用户访问唯一实例的方法只有通过getInstance()成员函数。

加入Garbo做为Singleton的内嵌类,程序运行结束时,系统会调用Singleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。

/*
 * Copyright (c) 2016 xxxx Inc, All rights reserved.
 * Created: 2016-02-21
 */
#include <iostream>

class Singleton{

class Garbo{
public:
	Garbo(){std::cout << "Garbo" << std::endl;}
	~Garbo(){
		if(Singleton::m_instance != NULL)
		{
			std::cout << "delete m_instance" << std::endl;
			delete m_instance;
		}
	}
};

public:
	static Singleton *getInstance()
	{
		if(m_instance == NULL){
			std::cout << "m_instance = new Singleton();" <<std::endl;
			m_instance = new Singleton();
		}
	}

private:
	Singleton(){}

private:
	static Singleton *m_instance;
	static Garbo m_garbo;
};

Singleton *Singleton::m_instance = NULL;

int main()
{
	std::cout << "getInstance first" << std::endl;
	Singleton *p = Singleton::getInstance();
	std::cout << "address: " << static_cast<const void *>(p) << std::endl;

	std::cout << "getInstance second" << std::endl;
	Singleton *q = Singleton::getInstance();
	std::cout << "address: " << static_cast<const void *>(q) << std::endl;

	return 0;
}

快速排序

快速排序由 C.A.R.Hoare(东尼霍尔,Charles Antony Richard Hoare)在1960年提出,之后又有许多人做了进一步的优化。如果你对快速排序感兴趣可以去看看东尼霍尔1962年在Computer Journal发表的论文“Quicksort”以及《算法导论》的第七章,东尼霍尔在计算机领域的贡献还有很多很多,他在1980年获得了图灵奖。

高快省的排序算法

假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:

3 1 2 5 4 6 9 7 10 8

在初始状态下,数字6在序列的第1位。我们的目标是将6挪到序列中间的某个位置,假设这个位置是k。现在就需要寻找这个k,并且以第k位为分界点,左边的数都小于等于6,右边的数都大于等于6。想一想,你有办法可以做到这点吗?