博客

  • 文件系统对比 btrfs vs zfs

    btrfs vs zfs

    btrfs是一个支持写时复制的文件系统,同时zfs是另外一个也被广泛使用的文件系统。

    btrfs使用红黑树,zfs使用另外一套技术,zfs在大型机器上似乎是被广泛使用,处理大型文件的性能上优于btrfs,并且存储文件没有上限,btrfs文件数量上有上限,同时处理小文件更快。

    具体来说优劣势:

    btrfs在Linux内核直接有支持,内存使用更小

    zfs更适合大负载场景,支持数据自动还原,跨平台。

    btrfs vs ext4

    因为btrfs支持COW,所以在写入小文件时效率可能更低。相比ext4,btrfs更适用于需要快照、数据完整性检查和内置RAID等功能的高级用户。

    ext4是使用日志记录,在每次写入都会记录,虽然如此,但是ext4在日常使用效率比btrfs要好。所以如果对于快照和RAID支持没有需求的人应该选择Ext4。

  • 保持优秀的信息摄入

    之前写了一篇关于表达很佩服云峰的内容,他10年期间github的提交以及博客的更新是非常厉害的。今天又多一个让我钦佩的大佬:Erik Wernquist。

    视频《ONE REVOLUTION PER MINUTE – a short film by Erik Wernquist》 https://erikwernquist.com/one-revolution-per-minute。

    我不知道他是谁,但是他这个作品很浪漫,很厉害。

    最近有点复古,开始寻找优秀的个人网站和频道,不太商业化和蹭热度的那种,用feedly去看那些大牛的日常和产出。

    觉得这个是一个不错的思路,跳过平台去关注有意思的内容生产者,进一步的是寻找一些榜样。

    他们的东西会淋我在身上,同时随着雨滴炸裂开的还有源源不断地新鲜灵感。

    还是那句话,保持优秀信息的摄入。

  • 低代码平台和降本增效

    看到低代码平台,心里就开始吐槽,这有啥用啊。

    然后愣了一会

    这平台不是给程序员的,这个就是给普通产品的开发工具。我本能地想从性能上反驳,但是从python的大流行去看,从摩尔定律失效来看,个人设备的计算力早就过剩了,绝大多数的产品需求是不需要那么强大的计算力的,所以性能低又怎么样,降低对程序员的要求是一个不可阻挡的趋势。

    趋势也不是今天才开始,几十年来计算机行业的迭代本身就是降本增效。即降本,也增效。

    没人能用汇编做出来一个原神,开发语言和工具的不断进步,既降低了对开发者的要求,也提高了项目能达到的规模。在开发的过程中也在优化开发过程本身。

    这个时候,AIGC如神降临,而在某个虚空倒计时开始默默转动。

    今天摘抄的一句话:产品是资产,代码是负债。

    你的产品解决了客户的问题,因此是你的资产。代码则是创造资产的成本。你拥有的代码越多,阅读、测试、更改和理解所付出的成本就越高。

    写的有点悲观,虽然趋势不可挡,但是抛开时间去谈趋势就是扯淡,而且落实到我自己身上又是另外一个课题。

  • 主动获取信息

    被动通知的新闻方式让大脑失去选择,迷失在信息里。比较舒适的方式还是像报纸一样,把所有的信息展开,然后主动地选择性的深入了解某些。

  • 始终要有预期

    始终要有预期,比如我认为腾讯300是最低了,那300就可以梭哈;如果我认为会跌倒200,那我就不应该在300满仓。

    包括沪深300也是,我现在开始建仓,我得有一个预期最低的仓位,到那个仓位直接满仓。可以是拍脑袋,也可以是某种计算,过程不重要。

    但是对于仓位和价格的预期很重要。

  • python 源码路径组织

    python源码路径组织:

    • Include: 包含了python提供的头文件,如果需要自己编写扩展python,需要用到这里的头文件;
    • Lib: 包含python自带的标准库,都是用python写的。
    • Modules: 包含所有C语言编写的模块,都是对速度要求比较高的模块。
    • Parser: 包含解释器的Scanner和Parser的部分,对python源代码进行词法分析和语法分析的部分;
    • Objects: 该目录包含了所有Pyhotn的内建对象,包括整数、list、dict等。同时,还包括了python在运行时需要的所有内部使用对象的实现。
    • Python: 包含解释器中Compiler和执行部分,是python运行核心所在。
  • 垃圾回收算法总结

    垃圾回收算法笔记

    一、标记清除:

    分为两个阶段:标记阶段和清除阶段;从根节点标记所有未被引用的垃圾对象,然后清除阶段删除。

    优点:

    • 存活对象较多的情况下高效
    • 适用于年老代
    • 实现简单, 容易和其他算法组合

    缺点:

    • 容易产生内存碎片
    • 分配速度不理想,每次分配都需要遍历空闲列表找到足够大的分块
    • 与写时复制技术不兼容,因为每次都会在活动对象上打上标记
    • 大量的内存碎片会导致大对象分配时可能失败,从而提前触发了另一次垃圾回收动作
    • 具有引用关系的对象可能会被分配在堆中较远的位置,这会增加程序访问所需的时间,即「访问的局部性(Locality)」较差。

    二、复制算法:

    从根节点扫描,标记所有存活对象,并且复制到新的内存,回收旧内存。现在的商业虚拟机都采用这种收集算法来回收新生代。

    优点:

    • 存活对象比较少的情况下高效
    • 良好的局部性
    • 不会发生碎片化
    • 适用于年轻代(即新生代):基本98%的对象都是“朝生夕死”

    缺点:

    • 最多只能使用一半的堆空间,因此堆的使用率不高;
    • 需要一块空的内存空间;需要复制移动对象;

    三、标记压缩

    标记压缩算法是一种老年代的回收算法,它在标记清除算法的基础上做了一些优化。从根节点对所有可达对象做一次标记,然后将存活的对象压缩到内存的一段,之后清理边界空间。

    优点:

    • 这种算法避免了碎片产生
    • 也不需要两块相同的内存空间

    缺点:

    • 压缩的过程需要多次搜索

    四、分代收集算法

    分代收集算法是目前JVM虚拟机使用的回收算法。它将内存分为各个年代。一般情况下将堆区划分为老年代和新生代,在堆区之外还有一个代就是永久代。

    在不同的代使用不同的算法,从而使用最适合的算法。

    • 新生代 = 生成空间 + 2 * 幸存区 复制算法
    • 老年代 标记-清除算法

    五、引用计数

    引用计数,就是记录每个对象被引用的次数,每次新建对象、赋值引用和删除引用的同时更新计数器,如果计数器值为0则直接回收内存。

    优点:

    • 可即可回收垃圾
    • 最大暂停时间短

    缺点:

    • 计数器的增删处理重,除了数量多,而且在删除容器的时候,需要遍历所有的对象修改引用计数。
    • 计数器需要占用很多空间
    • 循环引用无法回收

    六、增量式GC

    将GC的阻塞任务拆分成少量多次,减少暂停用户程序的执行。

    三色标计算法:

    • 白色:还未搜索过的对象
    • 灰色:正在搜索的对象
    • 黑色:搜索完成的对象

    三色过程:

    • 根查找阶段:对能直接引用的对象打上标记,堆放到标记栈里
    • 标记阶段:从标记栈中取出对象,将其子对象涂成灰色;这个阶段不是一下子处理所有的灰色对象;
    • 清除阶段:将没被标记的白色连接到空闲链表,并重置已标记的对象标记。

    读屏障和写屏障

    原因:

    • 多标:在对象被标记为灰色之后,父节点解除了引用关系,那本来应该被删除的对象就会被延迟删除;
    • 漏标:在对象被标记之后,对象断开子节点A同时A被父节点引用,但父节点已经被标记为黑色,不会再重新访问,因此A节点会被标记成白色删除,这是不可接受的。

    漏标的充分必要条件是:

    • 应用线程插入了一个从黑色对象(A)到白色对象(E)的新引用。
    • 应用线程删除了从灰色对象(C)到白色对象(E)的直接或者间接引用。

    避免漏标打破上述任何一个条件即可:

    • 这里在第一个条件触发时增加写屏障,修改黑色或者白色为灰色;并且在渐进式GC里对白色对象触发度屏障。
    • 第二个条件触发写屏障,当删除关系时触发写屏障,将这些关系都记录下来,最后重新扫一次。

    优点:缩短最大暂停时间

    缺点:降低了吞吐量

    JVM垃圾回收有两种类型:Minor GC和Full GC。

    Minor GC

    只回收新生代,这里非常频繁且对象大多数死亡频繁,所以选择速度快效率高的算法。

    Full GC

    对整个堆进行回收,包括新生代和老年代,所以比Minor GC要慢,应该尽可能减少Full GC的次数。

    python垃圾回收

    python分配<512btype的内存时使用内存池,释放时不会还给系统;分配>512字节的对象时会直接使用C的allocate分配和管理。

    标准CPython实现的垃圾收集器有两部分组件构成,一部分为引用计数模块(reference counting collector), 另一部分为分代垃圾回收器(generational garbage collector)。

    引用计数是本意,但是无法处理循环引用,所以补充了分代垃圾回收器。

    有三种情况会触发垃圾回收:

    • 调用gc.collect(),需要先导入gc模块。
    • 当gc模块的计数器达到阀值的时候。
    • 程序退出的时候。

    当循环引用的两个对象都有del时,python不知道先调用哪个导致不会释放,把它们标记为:uncollectable。

      这个方法涉及到之前说过的分代回收的策略。python中默认把所有对象分成三代。第0代包含了最新的对象,第2代则是最早的一些对象。在一次垃圾回收中,所有未被回收的对象会被移到高一代的地方。

    gc.get_threshold()
    这个方法返回的是(700,10,10),这也是gc的默认值。这个值的意思是说,在第0代对象数量达到700个之前,不把未被回收的对象放入第一代;而在第一代对象数量达到10个之前也不把未被回收的对象移到第二代。可以是使用gc.set_threshold(threashold0,threshold1,threshold2)来手动设置这组阈值。

    Unreal GC

    虚幻的GC挺复杂的,因为虚幻本身提供了一套非常复杂且自由的系统。

    只看UObject类的话就会简单一些,它是Unreal的基础类,它使用的是标记-清除算法,而不是传统类似于shared_ptr这样的引用计数。

    学习文档:

    https://aijishu.com/a/1060000000080557

    https://www.jianshu.com/p/a8a04fd00c3c

    https://developer.aliyun.com/article/777750

    https://zhuanlan.zhihu.com/p/83251959

    https://dreamgoing.github.io/Python%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6.html

    https://testerhome.com/topics/16556

  • C++ 继承和虚拟继承的内存分布

    菱形继承

    菱形继承:菱形继承的问题在于数据冗余和二义性。

    将子类转化成爷爷类的时候会报错,因为不知道要转化到哪个类上去,这里需要加入static_cast才行。爷爷类会在两个父类中都被定义,解决的办法是:虚拟继承。

    虚拟继承让被菱形继承的父类只会存在一份,消除数据冗余,那这里就得问一下,内存是如何布局的呢?如何访问内存呢?

    虚拟继承跟普通的继承不一样,普通的继承是通过将父类的内存放在子类的前面来实现,但虚拟继承父类的内存是放在后面的,那菱形继承会让父类和爷爷类的偏移不一致,那如何寻找爷爷类呢?

    虚拟继承依然会前置一个值,只是不再是前置父类而是前置一个虚基表指针,指向的是内存中,父类相对于自己的偏移量。

    虚继承支持基类的常规转换,主要是解决了多个派生类对基类的拷贝问题,并没有解决多重继承的二义性问题。

    然后关于vs和g++的实现是不完全一样的,g++的实现是虚函数和虚基类地址偏移共享一个虚表,类的实例开始处即为所属类的虚指针。因为存在虚基类地址偏移,所以几乎每个类都会有一张独一无二的虚表。

    虽然有一些大概的了解了,但是能不用就别用,这个机制很慢,内存很大,并且很违反直觉。

    继承的内存分布

    然后在实际实验的时候一直有一个不太理解的地方,就是虚函数表似乎总是对不上:

    class A
    {
    public:
        virtual void Test(){return;}
        int _a;
    };
    
    class B
    {
    public:
        virtual int Test2(){return 1;}
        int _b;
    };
    
    class C : public A, public B
    {
    public:
        virtual int Test2(){return 2;}
        virtual void Test(){return;}
        int _c;
    };
    
    int main()
    {
        C *c = new C();
        c->_a = 1;
        c->_b = 2;
        c->_c = 3;
    
        return 0;
    }
    

    然后我打开gdb去分析,去看具体的内存布局:

    (gdb) start
    Temporary breakpoint 1 at 0x400666: file test.cpp, line 25.
    Starting program: /tmp/test
    Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64
    n
    Temporary breakpoint 1, main () at test.cpp:25
    25          C *c = new C();
    Missing separate debuginfos, use: debuginfo-install libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64
    (gdb) n
    26          c->_a = 1;
    (gdb)
    27          c->_b = 2;
    (gdb)
    28          c->_c = 3;
    (gdb)
    30          return 0;
    (gdb) x /16wa c
    0x602010:       0x400830 <_ZTV1C+16>    0x0     0x1     0x0
    0x602020:       0x400850 <_ZTV1C+48>    0x0     0x2     0x3
    (gdb) x /8wa 0x400830
    0x400830 <_ZTV1C+16>:   0x400702 <C::Test()>    0x0     0x4006ec <C::Test2()>   0x0
    0x400840 <_ZTV1C+32>:   0xfffffffffffffff0      0xffffffffffffffff      0x4008a0 <_ZTI1C>       0x0
    (gdb) x /8wa 0x400850
    0x400850 <_ZTV1C+48>:   0x4006fb <_ZThn16_N1C5Test2Ev>  0x0     0x0     0x0
    0x400860 <_ZTV1B>:      0x0     0x0     0x4008e0 <_ZTI1B>       0x0

    其实很好理解的,0x400830是A类的虚函数指针指向虚函数表,虚函数表第一项是A的Test,第二项是B的Test2,那如果转化成A类也能按照同样的规则获取到Test这个虚函数。

    那0x400850是什么呢?它所指向的0x4006fb <_ZThn16_N1C5Test2Ev>是什么意思呢?真的琢磨了很久,然后想起来gdb 的x指令里/i是可以输出汇编指令。

    再进一步查看这个地址的汇编:

    (gdb) x /2wi 0x4006fb
       0x4006fb <_ZThn16_N1C5Test2Ev>:      sub    $0x10,%rdi
       0x4006ff <_ZThn16_N1C5Test2Ev+4>:    jmp    0x4006ec <C::Test2()>

    忽然就理解了,0x400850地址依然是一个虚函数表,第一项仍然是虚函数,并且就是C::Test2,那为什么不是直接指向C::Test2呢?

    因为C::Test2()是C这个类的函数,它的this应该要指向一个C的类,但是使用0x400850虚表的对象偏移是不对的,所以这个函数在实际执行C::Test2()之前要将this向前挪16个字节。

    至此,我觉得我比较深刻的理解了C++的虚函数机制。

    菱形继承的内存分布

    之前没完全看懂的,现在我觉得又可以了,然后再回头看一次。

    class A
    {
    public:
        virtual int Test(){return 1;}
        int _a;
    };
    
    class B: virtual public A
    {
    public:
        virtual int Test(){return 2;}
        int _b;
    };
    
    class C : virtual public A
    {
    public:
        virtual int Test(){return 3;}
        int _c;
    };
    
    class D : public B, public C
    {
    public:
        virtual int Test(){return 4;}
        int _d;
    };
    
    int main()
    {
        D *d = new D();
        d->_a = 1;
        d->_b = 2;
        d->_c = 3;
        d->_d = 4;
    
        return 0;
    }

    这是一个经典的菱形继承,再来看一下内存分布就比较清晰了:

    (gdb) start
    Temporary breakpoint 1 at 0x400666: file test.cpp, line 31.
    Starting program: /tmp/test
    Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64
    
    Temporary breakpoint 1, main () at test.cpp:31
    31          D *d = new D();
    Missing separate debuginfos, use: debuginfo-install libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64
    (gdb) n
    32          d->_a = 1;
    (gdb)
    33          d->_b = 2;
    (gdb)
    34          d->_c = 3;
    (gdb)
    35          d->_d = 4;
    (gdb)
    37          return 0;
    (gdb) p *d
    $1 = {<B> = {<A> = {_vptr.A = 0x400958 <vtable for D+88>, _a = 1}, _vptr.B = 0x400918 <vtable for D+24>, _b = 2}, <C> = {_vptr.C = 0x400938 <vtable for D+56>, _c = 3}, _d = 4}
    (gdb) print sizeof(D)
    $2 = 48
    (gdb) x /16wa d
    0x603010:       0x400918 <_ZTV1D+24>    0x0     0x2     0x0
    0x603020:       0x400938 <_ZTV1D+56>    0x0     0x3     0x4
    0x603030:       0x400958 <_ZTV1D+88>    0x0     0x1     0x0
    (gdb) x /16wa 0x400918
    0x400918 <_ZTV1D+24>:   0x400722 <D::Test()>    0x0     0x10    0x0
    (gdb) x /16wa 0x400938
    0x400938 <_ZTV1D+56>:   0x400731 <_ZThn16_N1D4TestEv>   0x0     0xffffffffffffffe0      0xffffffffffffffff
    (gdb) x /16wi 0x400731
       0x400731 <_ZThn16_N1D4TestEv>:       sub    $0x10,%rdi
       0x400735 <_ZThn16_N1D4TestEv+4>:     jmp    0x400722 <D::Test()>
    (gdb) x /16wa 0x400958
    0x400958 <_ZTV1D+88>:   0x400737 <_ZTv0_n24_N1D4TestEv> 0x0     0x400918 <_ZTV1D+24>    0x0
    (gdb) x /16wi 0x400737
       0x400737 <_ZTv0_n24_N1D4TestEv>:     mov    (%rdi),%r10
       0x40073a <_ZTv0_n24_N1D4TestEv+3>:   add    -0x18(%r10),%rdi
       0x40073e <_ZTv0_n24_N1D4TestEv+7>:   jmp    0x400722 <D::Test()>

    file

    如前文所述,g++的实现是将虚函数表和虚基地址偏移量一起在虚表里,通过虚指针表明,虚基地址偏移量在虚表的最后一项。

    详细内容可以看一下下面引用的百科。

    参考

    https://www.sandordargo.com/blog/2020/12/23/virtual-inheritance
    https://zh.wikipedia.org/zh-sg/%E8%99%9A%E7%BB%A7%E6%89%BF

  • 穷查理宝典笔记

    金句/感悟

    • 巴菲特说股票本质上是公司的部分所有权,股票的价格就是由股票的价值,也就是公司的价值所决定的。而公司的价值又是由公司的盈利情况及净资产决定的。虽然股票价格上上下下的波动在短期内很难预测,但长期而言一定是由公司的价值决定的。而聪明的投资者只要在股票的价格远低于公司实际价值的时候买进,又在价格接近或者高于价值时卖出,就能够在风险很小的情况下赚很多钱。这就是价值投资。
    • 想在股票里挣钱,必须深入了解公司的数据,辨别真假,而不是听旁人随便说,查理无须纠缠于股市沉浮,不断交易,不断做空。相反,我可以把所有的时间都花在对公司的研究和了解上。
    • 查理思考问题总是从逆向开始。如果要明白人生如何得到幸福,查理首先是研究人生如何才能变得痛苦;要研究企业如何做强做大,查理首先研究企业是如何衰败的;大部分人更关心如何在股市投资上成功,查理最关心的是为什么在股市投资上大部分人都失败了。
    • 查理说,如果我要拥有一种观点,如果我不能够比全世界最聪明、最有能力、最有资格反驳这个观点的人更能够证否自己,我就不配拥有这个观点。
    • 投资的本质就是寻找标错赔率的赌局!这就是价值投资。
    • 要怎样才能和狂热的对手竞争呢?唯一的办法是挖一条尽可能好的护城河,然后不断地努力加宽它。
    • 人们总是想要一道公式——但那样是行不通的。你必须估算公司从现在到无限的将来能挣到的所有现金,再把它们折回到现值。像市盈率这样的标尺本身是不够的。
    • 有性格的人才能拿着现金坐在那里什么事也不做。我能有今天,靠的是不去追逐平庸的机会。——查理·芒格
    • 我们赚钱,靠的是记住浅显的,而不是掌握深奥的。我们从来不去试图成为非常聪明的人,而是持续地试图别变成蠢货,久而久之,我们这种人便能获得非常大的优势。
    • 如果你只是坐着,等交易上门,那么你坐的位子就会非常危险。
    • 需要了解每个行业,每个企业的运作模式,来确定是否能挣钱,需要能够模拟经营,因为模拟足够准确很少犯错,所以能挣钱,这就是查理建议利用各个学科的理论,坚持试图确定后果的后果(的后果),建议通过反面论证来分析问题的反推吧。
    • 如果你确有能力,你就会非常清楚你能力圈的边界在哪里。没有边界的能力根本不能称之为能力。如果你问自己是否过了能力圈的范围,那这个问题本身就是答案。
    • 但普通人玩新股很容易遭受重挫,所以你要是觉得你是个天才,那就去玩吧,祝你好运。
    • 债券比股票理性得多。没有人会以为债券的价值会上升到月球去。
    • 开放式基金每年收取2%的费用,然后那些经纪商让人们在不同基金之间转来转去,多付3%到4%的费用。可怜的普通基民们把钱交给专业人士,却得到糟糕的结果。我觉得这很恶心。
    • 美国的法院不够集权,最高法院干预成本高。所以查理说那是个很神经的系统,但由于美国实行的是联邦制,没有办法阻止这样的事情发生。最高法院拒绝干预。
    • 查理说人们计算得太多,思考得太少,我觉得21世纪的现在,人们搜索的太多,思考的太少。
    • 在数百年里,水手害怕看不到陆地,海上航行都紧紧靠着海岸线。因为天圆地方的观点会让人相信海面可能出现大窟窿!!
    • 芒格始终对跨学科知识的掌握推崇备至,掌握更多的学科模型是极其有必要的。
    • 生活和生意上的大多数成功来自你知道应该避免哪些事情:过早死亡、糟糕的婚姻等等。避免染上艾滋病、在路口和火车抢道以及吸毒。培养良好的心理习惯。避免邪恶之人,尤其是那些性感诱人的异性。
    • 关注别人赚钱(比你)更快的想法是一种致命的罪行。妒忌真的是一种愚蠢的罪行,因为它是仅有的一种你不可能得到任何乐趣的罪行。它只会让你痛苦不堪,不会给你带来任何乐趣。你为什么要妒忌呢?
    • 芒格真的很喜欢研究其他人的失败,这也是历史的意义,如果不借鉴过去,那过去的经验有什么意义,历史又有什么意义。
    • 规模扩大之后行业会获得规模优势,更低的价格,更高的市场占有率进而导致垄断,但垄断进一步就会产生官僚主义,官僚主义又会腐坏原本的企业。所以生活就是两种力量之间无休无止的斗争:一边是获得上面提到的那些规模优势,另一边是变得像美国农业部那样人浮于事。
    • 微观经济学的伟大意义在于让人能够辨别什么时候技术将会帮助你,什么时候它将会摧毁你。
    • 这个不同的角度可太有意思了,科技的发展生产力的提高不一定是能挣钱,可能带来的是新的产业革命,也可能不会,但是消费者是既得利益者,并不是生产商品的工厂。
    • 所以你们必须弄清楚你们有什么本领。如果你们要玩那些别人玩得很好而你们一窍不通的游戏,那么你们注定会一败涂地。
    • 我所喜欢的模式——用来把普通股市场的概念简化——是赛马中的彩池投注系统。如果你停下来想一想,会发现彩池投注系统其实就是一个市场。每个人都去下注,赔率则根据赌注而变化。股市的情形也是这样的。
    • 当沃伦在商学院讲课时,他说:“我用一张考勤卡就能改善你最终的财务状况;这张卡片上有20格,所以你只能有20次打卡的机会——这代表你一生中所能拥有的投资次数。当你把卡打完之后,你就再也不能进行投资了。”
    • 制定正确的激励机制是非常、非常重要的教训。
    • 在历史的长河里,那些显而易见的便宜股票消失了。你们要是带着盖格探测器在废墟上寻找,它将不再发出响声。我觉得是因为当没人用估值的办法去选股,那人人都有的赚,当人人都知道这个办法,这个办法便失效了,行为本身也会影响市场。
    • 你们需要的是在头脑里形成一个由各种思维模型构成的框架。然后将你们的实际经验和间接经验(通过阅读等手段得来的经验)悬挂在这个强大的思维模型架上。使用这种方法可以让你们将各种知识融会贯通,加深对现实的认知。
    • 同样,我曾建议你们正反两面都要考虑到。优秀的桥牌庄家会想:“我要怎样才能抓到好牌呢?”但他们也会反过来想。(他们会想:)“犯哪些错误会导致我手里全是烂牌?”这两种思考方式都很有用。所以,要想在人生的赌局中获胜,你们应该掌握各种必要的模型,然后反复地思考。桥牌的哲理在生活中同样有效。
    • 因此,除了要利用来自不同学科的多元思维模型之外,我还想补充的是,你们应该警惕严重的意识形态偏见。
    • 这是一个非常复杂的系统。生活总是环环相扣的。如果综合考虑,你们猜想提高或者降低最低工资会让整个社会变得更加文明,那是没有问题的。这两种想法都对。但如果你们带着强烈的意识形态把自己的观点当作不可动摇的真理,那么我认为你们的想法是很愚蠢的。所以要警惕意识形态造成的思维紊乱。
    • 查理认为心理学对关于痛苦的分支知之甚少,在描述痛苦的心理学中,理论不足并且实验不够,因为对人类做痛苦的心理学实验是不人道的。
    • 没有人有那么聪明能一直一直记住所有的模型,所以当掌握了很多模型之后,在思考和判断时,需要一个检查清单来保证所有模型都验证过,尤其是涉及到重大决定。
    • 每个人都必须根据他自己的资金状况和心理素质来玩这个游戏。如果亏损会让你变得很惨——有些亏损是不可避免的,你最好采用一种非常保守的投资模式,多存点钱。所以你必须根据自己的实际状况和才能来调整投资策略。我并不认为我能给你一种万金油式的投资策略。
    • 查理说:男人的大脑渴望那个他们无法拥有的漂亮女人手里拿着的饮料。我:?????
    • 忽然改变已经在销售的产品或者已经上线的产品,一定会产生剥夺性超级反应综合征。
    • 这些基金会先请一批顾问,然后再让他们来挑选最好的投资顾问,帮忙把资金配置到各个不同的领域。
    • 这个观点有意思,尚未发现的腐败在局部等同于市场上多出了一大笔金钱,进而能刺激消费。>尚未败露的贪污得来的钱对消费的刺激效应更大。
    • 如果你想要说服别人,要诉诸利益,而非诉诸理性。
    • 我的第四点批评是,经济学界太过强调宏观经济学,而对微观经济学的重视程度不够。
    • 他说如果一个学者能够通过少量的工作轻轻松松地去掉自己的一个无知,却不去做,那么这个学者的行为就等于背叛。
    • 有些大型律师事务所用在职员工缴纳的养老金来支付退休员工的养老金,他们明明知道这样做将会造成可怕的后果,但还是这么做了——而且是很高兴地这么做了。
    • 要得到你想要的某样东西,最可靠的办法是让你自己配得起它。
    • 我不断地看到有些人在生活中越过越好。他们不是最聪明的,甚至不是最勤奋的,但他们是学习机器。他们每天夜里睡觉时都比那天早晨聪明一点点。
    • 查理真的是一个很自负,总是在说同样话的老人,千人一面的“顽固”感,推崇读书推崇跨学科,批评大学和政府,日常话语里看似是谦卑实则自大…>我只在15年前浏览过三本心理学教材,我对正式的心理学的了解就这么多,所以后来学院派心理学取得了什么进展我基本上是不了解的。然而,在这篇更长的讲稿中,我将会对学院派心理学提出许多批评。这种班门弄斧的做法肯定会引起许多心理学教授的反感
      1. 别兜售你自己不会购买的东西。2. 别为你不尊敬和钦佩的人工作。3. 只跟你喜欢的人共事。
    • 人生在不同阶段会遇到不同的难题,非常棘手的难题。我认为有三点有助于应付这些困难:·期望别太高;·拥有幽默感;·让自己置身于朋友和家人的爱之中。
    • 查理的分析方法:1. 双轨分析·理性地看,哪些因素真正主导了牵涉到的利益?(例如,宏观的和微观的经济因素。)·当大脑处于潜意识状态时,有哪些潜意识因素会自动以各种方式形成虽然有用但往往失灵的结论?(本能、情绪、贪婪等等的影响)2. 投资和决策检查清单·查理的非正式检查清单,详细地列出了各种值得考虑的因素。3. 超级简单的普通观念·先解决那些答案显而易见的问题。·利用数学运算能力。·逆向思考(反过来考虑问题)。·应用基本的跨学科智慧,永远不要完全依赖他人。·注意多种因素的共同作用——也就是lollapalooza效应。4. 基于心理学的倾向·他那著名的人类误判的25个标准原因。
  • 古诗词里的快意人生:瞧,这才是风流!

    古诗词里的快意人生:瞧,这才是风流!

    • 前言
      • 凡是敢于挑战权威的人都有三个特点:深厚的学识、高超的见识和非凡的胆识。
      • 原来,爱情才是这世界上最无药可解的毒啊!
      • 启蒙,不是因为浅显,而是因为经典。
      • 能在后世人心中留下一席之地的,不一定是多么大名鼎鼎的人物,只要他认真做好了一件有意义的事,他就无愧于这两个字:伟大。
    • 屈原
      • 屈原在文学史上开创了一种新的诗歌体裁——楚辞!
      • 他创造了一个诗歌流派:浪漫主义流派。
      • 文学上两大流派,江湖上人称“北《诗经》,南《离骚》”。
      • 他是第一个在文学史上留下名字的诗人。
      • 屈原可谓是策划“实景演出”的第一人。
      • 屈原这句用秋景来表现惆怅心境的诗,一不小心创造了个世界纪录,被称为:千古言秋之祖。
      • 这作者可太有意思了!!!很热爱生活和有想象力的感觉!>齐宣王的手都拍红了,心想:有机会一定要把屈原挖到我们齐国去。
      • 他是中国历史上第一个爱国主义诗人。
      • “香草”是意象,指贤臣、指人品;“美人”是比喻,指自己、指君王。“香草美人”的象征手法,为屈原首创。
      • 举世皆浊我独清,举世皆醉我独醒。
      • 习以为常的假期,是为了保留一些民族文化和传统,屈原的故事痛哉惜哉>请不要忘了我们为什么要纪念屈原。
      • 纪念他,是因为他骨子里的那份骄傲与浪漫:即使被全世界抛弃,也要在大地上诗意地栖居。纪念他,是因为他对国家有着始终如一的挚爱,矢志不渝的忠诚。纪念他,是因为他为中华民族传承了一种宝贵的精神,这种精神,已经渗入每一个中国人的血脉,这种精神,必将——与天地兮同寿,与日月兮同光!
    • 竹林七贤
      • 就是这组抒发心情的诗,一下子为他创了两个“第一”:第一个大量写五言诗的人,第一个写组诗的人。
      • 阮籍之后,左思、陶渊明、杜甫、温庭筠……都学会了这一招。
      • 余秋雨说:“中国传统文学中最大的抒情主题,不是爱,不是死,而是怀古之情、兴亡之叹。”
      • 庄子在中国文学史上地位的确立,向秀功不可没。
      • 被来访者看见,他反而责备人家:天是我的房子,屋子是我的裤子,你为什么跑到我裤裆里来?
      • 所谓信仰,就是不断去寻找答案的过程。
    • 贺知章
      • 会夸人不等于爱夸人,秘诀在于一个“会”字。
      • 贺知章笑道:“以前您在的时候,他们都不敢叫我‘獠’,您说我沾了您多少年的光呀!”(獠,猎也,也指中国的一个古民族。这里是指对南方人的不尊重的称呼。)
      • 夸人是门艺术,一定要注意场合和火候,否则一不小心就变成了人人烦的马屁精。
      • 这就是大器晚成的好处,没有年少轻狂,亦没有很强的功利心,人生看淡了,名利看淡了,不争,反而得到更多。说实话,是会说话的最高境界。
      • !李白诗仙的名号是贺知章取的吗!>老贺头激动地拍着李白的肩膀,夸道:“你就是天上贬谪下来的仙人哪!走,我们喝酒去!”从此,李白“诗仙”的名号就被传开了。
      • 对酒忆贺监四明有狂客,风流贺季真。长安一相见,呼我谪仙人。昔好杯中物,翻为松下尘。金龟换酒处,却忆泪沾巾。
      • 老贺头夸李白是“诗仙”,这个名号流传了千年;夸李泌一定能做卿相,后来预言成真。老贺头夸人的背后,是他看人看得准,分析判断能力强的表现。
      • 笑到不行,哈哈哈>原来老贺头说的是:“听说宁王李宪也快不行了,你们先回去,下次还有机会啊!”
      • 原来老贺头说的是:“听说宁王李宪也快不行了,你们先回去,下次还有机会啊!”
      • 嘻嘻哈哈看完这一章节,这首诗一出眼睛就红了…>回乡偶书·其一少小离家老大回,乡音无改鬓毛衰。儿童相见不相识,笑问客从何处来。
      • 回乡偶书·其一少小离家老大回,乡音无改鬓毛衰。儿童相见不相识,笑问客从何处来。
      • 在了解完这个嘻嘻哈哈有智慧的人的故事之后,再看这两首诗,鼻子止不住的酸。会夸人是基于对人的洞察,对人的洞察是基于自己的敏感…敏感又温柔的诗人,看诗好能哭啊>离别家乡岁月多,近来人事半消磨。惟有门前镜湖水,春风不改旧时波。
      • 离别家乡岁月多,近来人事半消磨。惟有门前镜湖水,春风不改旧时波。
      • 孝子贺知章,用箩筐前担其母,后担经书,挑行于乡间,故乡人称贺知章为‘贺担僧’,称其母为‘箩婆’。”
    • 孟浩然
      • 人生两件大事,学业和婚姻,他任性得没有一件听从父母的意见。
      • 日暮征帆何处泊,天涯一望断人肠。(《送杜十四之江南》)
      • 望洞庭湖赠张丞相八月湖水平,涵虚混太清。气蒸云梦泽,波撼岳阳城。欲济无舟楫,端居耻圣明。坐观垂钓者,徒有羡鱼情。
      • 移舟泊烟渚,日暮客愁新。野旷天低树,江清月近人。
      • 孟浩然形成了属于他自己独特的写诗风格:淡而有味,风韵天成,词淡而意远。
      • 感性的孟浩然追求自由,理性的孟浩然追求仕途。
      • 一个孩子,终其一生都在渴望得到父母的承认和理解,否则他会选择极端的方式来证明自己。(见“个体心理学”之父奥地利的阿尔弗雷德·阿德勒《理解人性》一书)
    • 李白
      • 在白哥的心目中,他首先是一个为国分忧的政客,然后是一个仗剑走天涯的剑客。写诗?那是业余爱好,写着玩玩而已。
      • “秋风清,秋月明,落叶聚还散,寒鸦栖复惊。相思相见知何日?此时此夜难为情。入我相思门,知我相思苦,长相思兮长相忆,短相思兮无穷极,早知如此绊人心,何如当初莫相识。”早知相思苦,不如不相识,《秋风词》句句戳人心哪!
      • 云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
      • 李白竟然是有子女的人!我竟然觉得李白应该是无子女的仙人!李白应该就是一个浪漫油腻的普通人,在这个时代油腻是贬义词,但在那个时代油腻是一种才华吧>真性情的白哥,酒隐安陆,蹉跎十年。这十年是他生命中最幸福的十年,他的妻子为他生下了一子一女,子曰伯禽,女曰平阳。
      • 娇女字平阳,折花倚桃边。折花不见我,泪下如流泉。小儿名伯禽,与姊亦齐肩。双行桃树下,抚背复谁怜?念此失次第,肝肠日忧煎。
      • 我们心态上可以永远年轻,但身体不行的>白哥老了,尽管他的心一直年轻,但他不能无视镜中的白发。
      • 嫁人不要嫁李白,长相思,摧心肝。
    • 杜甫
      • 幸福的人生是相似的,不幸的人生各有各的不幸。
      • 江南逢李龟年岐王宅里寻常见,崔九堂前几度闻。又是江南好风景,落花时节又逢君。
      • 李白“酒家眠”,那叫醉酒吗?那叫帅!
      • 杜甫真是李白的迷弟!>李白“空度日”,那叫浪费时间吗?那叫生活质量!
      • 李白“空度日”,那叫浪费时间吗?那叫生活质量!
      • 李白被流放,“世人皆欲杀”,那是你们不懂他的心!
      • 天啊,杜甫的人生堪称古代版活着,一生坎坷>杜甫四十四岁时,终于得到一个右卫率府兵曹参军的职位,其实就是兵器库的管理员。杜甫赶紧回奉先县(今陕西蒲城县),准备把一家人接来团聚,结果还没进家门就听到哭声,原来是他的小儿子饿死了。
      • 妻子望着月亮思念爱人,儿女并不知道妈妈在想在长安的父亲,这是她们是不懂母亲的>杜甫在诗中说:此时的妻子,一定和自己一样,也在独自望着这一轮圆月思念爱人吧?
      • 杜甫是一个少有的情感丰富,同时兼具理性的人,他是那个时代的智者。
      • 智者的痛苦就在于:当你清醒的时候,别人还在睡着;当别人清醒的时候,你只能看着。
      • 天啊!句句入骨>生女犹得嫁比邻,生男埋没随百草。君不见,青海头,古来白骨无人收。新鬼烦冤旧鬼哭,天阴雨湿声啾啾!
      • 杜甫的文字并不华丽,却具有打动人心的力量,因为他真实记录了百姓的苦难,他有着一颗“黎民之心”,所以他的诗才会被人们永远铭记,并被后世人称为“诗史”。
      • 英雄,不一定非要金戈铁马,只要心中装有百姓,他就是英雄!
      • 杜甫骄傲的,不仅仅是他“读书破万卷,下笔如有神”的写作技巧,还有他“穷年忧黎元”的心、“济时肯杀身”的魂。
    • 岑参
      • 对生活不满却不知道出路在哪里,方法只有一个:发展人脉,和优秀的人交朋友。
      • 好朋友就是要互相吹捧,共同进步。
      • 一个人也许一辈子只有一次发光的机会,抓住它,你的生命便会熠熠生辉。
      • 一生大笑能几回,斗酒相逢须醉倒。
      • 一个人优秀的程度,和他的交友品位有很大关系。
    • 白居易
      • 会不会有那么一刻,内心忽然被一种巨大而荒凉的孤独吞噬,举目四望却无人可诉?
      • “琵琶”这两个字上面都有两个“玉”,意为二玉相碰发出的悦耳碰击声。“琵”字下面的“比”,是指这些琴弦并列在一起的样子,而“琶”下面的“巴”字,不正是琴附着在演奏者身上的样子吗?
      • 同是天涯沦落人,相逢何必曾相识。
    • 韩愈
      • 对一篇文章而言,语言形成气势,人品决定高度。
      • 韩愈治潮,功在当代,利在千秋。
      • 一生推行儒家学说的韩愈,他的高调是“事业无穷年”的孜孜不倦,他的高调是“业精于勤荒于嬉,行成于思毁于随”的严谨,他的高调就是儒家“修身,齐家,治国,平天下”的一生信念。
    • 柳宗元
      • 年轻时没有经历过挫折的人,如果没有人引路,做大事时很容易栽大跟头。
      • 有时候,一念起,天堂未必就是天堂;一念落,地狱也未必就是地狱。
      • 柳宗元留下来的孩子,据史料记载和专家研究,分别被韩愈、刘禹锡、朋友崔群、表弟卢遵抚养。
    • 杜牧
      • 一个人是不是真的牛,不是看你的外在条件,而是看你的实力,自己牛才是真的牛。
      • 杜牧牛逼!官二代二环一套别墅,风流又有才,跟李商隐并称“小李杜”,研究孙子兵法有产出,写过史书开创政书…还有那么多诗歌文章流传…都是10万+>他二十三岁的时候写了一篇《阿房宫赋》,刚一发表,立刻引起轰动,阅读量一小时之内就破了“10万+”。
      • 书,才是最宝贵的财富。
      • 个人命运再怎么好,总是无法摆脱他所生活的大环境啊!
      • 诗歌,能为你烦恼的人生带来光亮。
      • 还记得他写的哪五类诗吗?开始抢答!女子题材诗、忧国忧民诗、咏史怀古诗、写景抒怀诗、酬答寄赠诗——回答正确!
      • 灰暗压抑的晚唐,因为有了杜牧的诗,绽放出了一丝迷人的光彩。
      • 随便抄吧,你洗稿的速度永远赶不上我创新的脚步!
      • “公道世间唯白发,贵人头上不曾饶。”
      • 人生直做百岁翁,亦是万古一瞬中。
    • 温庭筠
      • 梦江南千万恨,恨极在天涯。山月不知心里事,水风空落眼前花,摇曳碧云斜。
      • 男人最大的魅力不是家财万贯,不是貌比潘安,而是守住一条做人的底线,拥有一颗柔软的心。
    • 鱼玄机
      • 忽然进入第一人称的一段爱情故事,现代视角展示古代的这段浪漫>傻丫头,你是一朵野生的牡丹花。
      • 江陵愁望寄子安枫叶千枝复万枝,江桥掩映暮帆迟。忆君心似西江水,日夜东流无歇时。
    • 欧阳修
      • 生来有趣的人并不多见,有趣的灵魂需要修炼。
      • 浪淘沙把酒祝东风,且共从容。垂杨紫陌洛城东。总是当时携手处,游遍芳丛。聚散苦匆匆,此恨无穷。今年花胜去年红。可惜明年花更好,知与谁同?
      • 有趣的人,一定是有思想、有主见的人,人云亦云,很难做到有趣。
      • 小人,往往比君子显得更聪明。因为君子的脑细胞都用在了事业上,小人的脑细胞都用在了整人上。
      • 有趣的最高境界,是热爱生活,活出自我。
    • 苏轼①
      • 每一个失意的人,都要经历的三重境界“呱!呱!呱!”
      • 看起来就像是现代的人朋友圈发多了,然后被人抓住辫子要排除异己整似的。>此时的苏轼,正在经历人生中最大的一次风浪:乌台诗案。
      • 谁见幽人独往来,缥缈孤鸿影。当一个人的精神备受摧残,物质又极端贫困的时候,他的人生要么就此沉沦,要么触底反弹。
      • 就从此朋友圈三天可见,且再也不发真性情的动态了,生怕再惹祸上身,把自己打磨的不像自己>他也唯恐自己这支笔再闯祸,那么爱写诗的苏轼,基本不再写诗文了,实在憋不住,就写写在当时很不入流的词。
      • 一个经历过苦难的人必须要经历一场脱胎换骨的涅槃,才能真正获得内心的平静。
      • 第一重境界:谁见幽人独往来,飘渺孤鸿影。寂寞不是孤独,孤独可以享受,而寂寞,是无人能诉,更无人能懂的内心的荒凉。第二重境界:谁道人生无再少?门前流水尚能西。没有谁天生豁达,失意时,要学会自己排解,只有自己能帮自己。第三重境界:回首向来萧瑟处,归去,也无风雨也无晴。当真正从痛苦中走出来之后,你才会发现,一切的痛苦甚至包括欢乐,都没有那么浓烈,曾经发生的一切,不过如此。
    • 苏轼②
      • 人似秋鸿来有信,事如春梦了无痕。
      • 人人皆云东坡乐观,唯有朝云能识他满腹辛酸。
      • 墙里秋千墙外道,墙外行人,墙里佳人笑。
      • 世间是非忧乐本来空!
      • 前尘往事断肠诗,侬为君痴君不知。莫道世界真意少,自古人间多情痴。
    • 秦观
      • 说他“娘”的是元好问,就是写下“问世间情为何物?直教生死相许”的那位
      • “自在飞花轻似梦,无边丝雨细如愁。”他不说梦似飞花,愁如丝雨,而说飞花似梦,丝雨如愁。
      • 风流不见秦淮海,寂寞人间五百年。
      • 韶华不为少年留,恨悠悠,几时休。(《江城子·西城杨柳弄春柔》)
      • 惆怅惜花人不见,歌一阕,泪千行。
    • 陆游
      • 陆游白天的时候还盖着毛毡抱着猫烤火呢——“溪柴火软蛮毡暖,我与狸奴不出门”(《十一月四日风雨大作二首·其一》)
    • 袁枚
      • 有官不仕偏寻乐,辞官之后的袁枚,给自己定了一个人生新目标:实现时间自由、思想自由和财务自由。
      • 无论多么卑微的生命,活,就要活出生命的骄傲!