2024 美团技术团队热门技术文章汇总

01 基本功 | 一文讲清多线程和多线程同步

基本功 | 一文讲清多线程和多线程同步

多线程编程是现代软件开发中的一项关键技术,在多线程编程中,开发者可以将复杂的任务分解为多个独立的线程,使其并行执行,从而充分利用多核处理器的优势。然而,多线程编程也带来了挑战,例如线程同步、死锁和竞态条件等问题。本篇文章将深入探讨多线程编程的基本概念(原子操作、CAS、Lock-free、内存屏障、伪共享、乱序执行等)、常见模式和最佳实践。通过具体的代码示例,希望能够帮助大家掌握多线程编程的核心技术,并在实际开发中应用这些知识,提升软件的性能和稳定性。

02 DDD在大众点评交易系统演进中的应用

DDD在大众点评交易系统演进中的应用

本文整理自美团技术沙龙第73期《基于领域驱动设计(DDD)的架构演进和实践》(B站视频),主要介绍了DDD的核心概念、常见的设计思路,并结合DDD介绍大众点评交易系统的演进过程,最后做了一些总结和思考。

03 美团大规模KV存储挑战与架构实践

美团大规模KV存储挑战与架构实践

KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量,并且保持着 99.995% 的服务可用性。文章主要分为四个部分:第一部分介绍了美团 KV 存储发展历程;第二部分分享了内存 KV Squirrel 挑战和架构实践;第三部分阐述了持久化 KV Cellar 挑战和架构实践;最后一部分介绍了未来的发展规划。

04 领域驱动设计DDD在B端营销系统的实践

领域驱动设计DDD在B端营销系统的实践

本文整理自美团技术沙龙第73期《基于领域驱动设计(DDD)的架构演进和实践》(B站视频),系统复杂性根源于隐晦(难理解),耦合(难改动)和变化(难扩展),DDD正是应对系统复杂性的重要方法。本文针对B端营销系统设计中的复杂性,从战略设计,战术设计到代码架构,详细介绍了DDD在各个阶段的实践,期望为大家提供一些可供参考和借鉴的思路。

05 美团外卖基于GPU的向量检索系统实践

美团外卖基于GPU的向量检索系统实践

搜索业务具有数据量大、过滤比高等特点,为了在保证高召回率的同时进一步提高检索性能,美团技术团队基于GPU实现了支持向量+标量混合检索的通用检索系统,召回率与检索性能均有较大提升。本文介绍了在GPU向量检索系统建设中遇到的挑战及解决思路。

06 分布式因果推断在美团履约平台的探索与实践

分布式因果推断在美团履约平台的探索与实践

美团履约平台技术部在因果推断领域持续的探索和实践中,自研了一系列分布式的工具。本文重点介绍了分布式因果树算法的实现,并系统地阐述如何设计实现一种分布式因果树算法,以及因果效应评估方面qini_curve/qini_score的不足与应对技巧。

07 搜索广告召回技术在美团的实践

搜索广告召回技术在美团的实践

内容整理自美团技术沙龙第81期《美团在广告算法领域的探索及实践》(B站视频)。本文首先介绍了美团搜索广告的三个阶段:多策略关键词挖掘、分层召回体系、生成式召回;然后重点介绍了生成式关键词召回、多模态生成式向量召回、生成式相关性判断在美团的实践。最后是一些经验分享及总结。

08 Spark向量化计算在美团生产环境的实践

Spark向量化计算在美团生产环境的实践

Apache Spark是一个优秀的计算引擎,广泛应用于数据工程、机器学习等领域。向量化执行技术在不升级硬件的情况下,既可获得资源节省,又能加速作业执行。Gluten+Velox解决方案为Spark换上了向量化执行引擎,本文阐述了美团在这一方向的实践和思考。

09 基于多模态信息抽取的菜品知识图谱构建

基于多模态信息抽取的菜品知识图谱构建

菜品作为到店餐饮各相关业务的基石,提供了更细粒度的视角理解餐饮供给,为到餐精细化运营提供了抓手。美团技术团队与天津大学刘安安教授团队展开了“基于多模态信息抽取的菜品知识图谱构建”的科研合作,利用多模态检索实现图文食材的识别,扩展了多模态菜品食材识别的范围,提升了食材识别的准确性。该项工作提出了一个跨模态食材级数据集,该数据集提供食材及其关系有助于增强对中国烹饪的理解。

10 AutoConsis:UI内容一致性智能检测

AutoConsis:UI内容一致性智能检测

美团技术团队与复旦大学计算机学院周扬帆教授团队展开了大前端智能化测试领域的科研合作,从UI界面内容一致性校验入手,实现了一套自动化智能检测流程,相关论文被软件工程领域具有国际影响力的会议ICSE 2024(CCF-A类会议)的Software In Practice Track(软件工程实践应用)收录。

背景

目前LeetCode已经刷了不少题目,开始关心起这样一个问题:面试时候手撕代码怎么撕?口述、txt还是牛客平台?笔试是点入各家的链接吗?跟力扣的代码平台有什么很大区别吗?

手撕代码

咨询身边好友得到的回复是:区别很大,不能Debug。

  • 牛客平台:哔哩哔哩

  • 本地环境:京东(提供题目描述,自己用开发环境写代码,没有类名,函数名、参数返回值)

  • 第三方平台:字节用飞书面试,给代码沙盒环境(极少量类似vc++能提供的那种提示)

  • 手写

乌龙

我尝试了VSCode + LeetCode插件,不习惯VSCode的提示和运行方式,毕竟只是编辑器,显得不是那么专业和趁手,于是转向挚爱的IDEA。

以LeetCode 203.移除链表元素为例

我在IDEA中编写了以下类

  • Solution
  • Test
    • DataStruct.ListNode
    • Utils.ListUtils:用于输入样例数组转链表、打印链表方便调试

遇到的问题

理应正常,实际正常的输出如下:

理应正常,实际不正常的输出如下:

按照Solution#removeElements的返回结果不应该有错:

发现的乌龙Bug

乌龙在于一个有参构造方法的参数名笔误了!!!

总结

  1. 学以致用,善用Junit。不要自己写Test,怪麻烦的。
  2. 即使你不会Junit也要会Debug,这次的bug就是通过Step Into (F7) 看到了控制台才发现的。

1、谁是”神豪“大哥?

“神豪大哥”是直播平台中非常特殊的一类用户。他们不仅是某位主播的“榜一大哥”,还往往是平台的 VIP 用户。这类用户在直播平台中有着独特的地位和标志,甚至会在整个社区内形成一种独特的英雄主义与魔幻主义氛围。

工作人员描述,这类人群占平台总用户的比例极小,甚至不到1%。这些“神豪大哥”的基本特征为

  • 时间与金钱富足:20到40岁之间,许多来自二三四线城市,尤其是北方地区的男性。很多是公务员、企业主或地方富豪
  • 生活单调,寻求刺激:他们往往在经济条件上优越,但生活中缺乏有效的社交或娱乐方式。根据某直播平台的

2、做神豪大哥的舔狗

2.1、平台

对于平台,这群神豪大哥的价值不言而喻,这也是为什么平台内部会专门设置一个运营团队来维系大哥们,「花费比较少的运营人力,获得更高的价值」

  1. 大客户运营的规模在 20-30 人左右。他们一半的工作时间都是在做 24 小时客服,也就是「实时关注大客户在平台的体验以及他们反馈的问题,并帮他们跟进解决」
  2. 在平台之外,大客户运营还要和大哥们维持好线下关系。比如说最基本的逢年过节、客户生日,要送去礼物;再比如说大客户来公司附近玩了,「我们带他去这个城市转一圈」
  3. 而各种各样的线下运营招数中,最有效也最受大哥欢迎的是直播平台发起的年度庆典活动。但无论是盛装出席的主播,还是娱乐圈堪称前辈的表演嘉宾,其实都不是真正的主角,大哥才是

大哥能重要到什么程度?富贵记得有一次庆典,平台为了等一个人在澳洲、飞机晚点的顶级大哥入场,甚至推迟了整场活动的开始时间,「这个大哥贡献了平台至少几个月的盈利,换我是组织者,我也等,我专门给他办一场都行。」

2.2、主播

但神豪大哥们真的会在乎平台的这些小恩小惠吗?

  • 大哥的情感诉求:运营小张认为,无论是 24 小时的客户服务,还是思虑周全的日常关怀,还是为了答谢大哥的线下庆典活动,都属于「次一点的手段」。平台更愿意用的手段,是拿主播来留住大哥,「大客户一般有他固定打赏的一个或几个主播,他很爱这几个主播。这几个主播在,大哥才会在。」主播小乐透露,部分大哥来直播平台的目的比较简单直接,「就是为了给自己找情人,说实话大部分的主播和自己的榜一都是恋爱关系」。

  • 主播的金钱诉求:这层情爱的关系也意味着,平台只要留得住头部主播,就能留住那些神豪大哥。那主播喜欢什么呢?小张说,自然是来自平台的让利,「就给她们更高的签约费,以及更高的直播打赏分成」。这种手段在实际的操作中屡试不爽。小张的团队就曾经以更高的收益为诱饵,把一个酷狗音乐的主播挖到了自己的平台,然后「她的大哥就全过来了,平台就是想用这个主播来赚钱」。

3、困在情绪变现的闭环里

3.1、直播的本质在于情绪变现

在娱乐直播平台,很难说你真的是通过自己的歌声留住人。相反,平台的一个玩法就是要刺激所有人的情绪,你不能光唱歌,而是要能带动情绪在这个平台上传递,最终这个情绪转化成钱才行。怎么刺激用户的情绪?一个完美的例子就是直播平台设计的直播间 PK 活动。直播间 PK :也就是两个直播间连线,在 10-15 分钟内,哪个主播粉丝打赏的钱更多,谁就是赢家。输的一方要接受一个提前约定好的惩罚。

3.2、大哥的保护欲和虚荣心

小乐回忆,她曾经在一次 PK 中遇到过一个非常不想接受的惩罚。「我连 PK 的对象是一个跨性别人士,他直播间的尺度非常大。他跟我说,小姑娘,咱俩谁 PK 输了就给大家表演一个生孩子。」平时走文艺范儿的小乐心里打起了退堂鼓,「我没做过这种在我看来比较低俗的表演。」直播间里的大哥仿佛看穿了小乐的心思,在短短十几分钟之内不断疯狂地上票,「然后他说,我看出来你非常不想做这个表演,你脸皮太薄,如果输了的话肯定 hold 不住,那就帮你打赢。」

情感刺激最终转化成了真金白银。而对于大哥来说,付出也是有回报的。怡霖发现,在大哥的概念里,打赢一场 PK 赛,意味着可以在短时间里提高自己的等级和地位。

3.3、直播抽奖是变相的灰色赌场

这种带有赌徒色彩的心态体现在玩法上,就是每个平台都会有的抽奖礼物。比如怡霖入驻的陌陌直播设计的抽奖转盘,「欢乐盘 10 元/次,黄金盘 100 元/次。玩家就会不断地想花 10 元去抽到 1000 元的东西。最后发现自己可能充了 2 万元,才抽了 2000 元的东西。」

这种玩法虽然听起来像是赔本的买卖,但大哥们似乎不这么想。怡霖发现,正是这种类似赌博的玩法让用户更有动力充值刷礼物。怡霖举例,这就好比你在现实中花 1 万元买了一个包,「然后你把这个包送出去,它就是值 1 万。但如果他花 10 万才得到这个 1 万的包,他心里想的这个东西就值 10 万。

4、神豪大哥的算盘

4.1、大哥到底是谁?

怡霖怀疑,这些深藏不露的人或许并不是真实的,「有多少人在一个平台上能消费上千万?这上千万中又有多少是他自己的钱?」尽管怡霖对这些神豪大哥的身份存疑,但「无论是平台、公会还是主播,这都是他们不愿意让外界知晓的」

那么他们到底是谁?

富贵提供了一个思路,「大哥也不是大哥,就是个运营的号。」在做了榜一大哥后,富贵以好朋友的身份帮几个主播管理过直播间。他发现,一些平台会和运营主播的 MCN 公司进行所谓的合作,也就是平台会以一个折扣价向 MCN 公司出售虚拟货币,MCN 公司的号购买后,货币只能在自家主播的直播间里才生效,「相当于是演给其他人看的」

4.2、到底谁是傻子

那其他人又是谁?

在怡霖的研究中,除了极少数的“顶级大哥”,平台中还有一类被称为“腰部大哥”的用户。这些腰部大哥虽然打赏金额通常不到百万,但他们依然在几个月内花费数十万。他们是平台上的“傻子”,但怡霖认为,他们只是“有钱的傻子”,而非真正意义上的最有钱的用户,因为这些用户的钱财并不持久。

许多腰部大哥来自中小型企业,尤其是工程施工和装修行业的老板。由于业务周期性,他们往往会在短期内获得较大一笔资金,而这些资金会迅速转化为消费。这些用户并不珍惜财富,更多的是想要即时享受。此外,一些用户通过互联网发展机会获取财富,成为“风口浪尖上的猪”

尽管这些“腰部大哥”在外界看起来阔气大方,深入了解后却发现,他们的身份和社交关系都相对脆弱。许多腰部大哥并非大城市人,他们在城市中虽有财富,但无法真正融入,缺乏归属感,生活在一定的孤独与不安全感中。

思考

  1. 消费主义的极端体现。“神豪大哥”这一现象反映了现代消费主义的一种极端形态,尤其是在直播平台这种高度娱乐化和虚拟化的环境中,极少数人通过巨额的资金投入在社会中展现存在感和身份认同。这种行为引发了关于消费主义、财富分配与社会结构的广泛讨论。

  2. 媒体与平台责任。直播平台作为这些现象的“温床”,在吸引这类用户时是否应当承担起更多的社会责任?平台是否应该设立更多的监管机制,避免这种行为造成社会的负面影响,尤其是对其他年轻群体的价值观形成潜在影响?

    • 平台、主播、大哥:不禁让我想到maiyin,只不过用了一种让人挑不出毛病的方式,一种falv之内的灰色地带。

    • 魔化的直播的抽奖机制:更容易联想到dubo,利用简单的经济学原理,可以欺骗更多有钱无脑的冲动人士入局。

  3. 贫富差距与虚拟消费的交织。从经济学的角度看,神豪现象反映了当今社会贫富差距的进一步拉大。大量的虚拟消费并不意味着实体经济的增长,反而可能加剧社会的不公平感。人们在虚拟空间中的消费方式与现实经济环境之间的脱节,可能成为未来社会治理的新挑战。

  4. 心理需求和自我认同感、存在感的空缺。“神豪大哥”背后的消费行为,暴露了现代人心理需求的空缺,尤其是关于自我认同感和存在感的需求。这种虚拟世界的行为可能会促使更多人寻求在数字世界中通过消费获得满足,而不是通过实际的社会交往或物质创造。

引言

随着个体需求的多样化和社会关系的复杂化,越来越多的人开始寻求非传统的情感满足方式。其中,“一日男友”这一现象逐渐浮出水面,成为探讨现代情感需求与消费文化交织的一个重要窗口。

一日男友现象概述

“一日男友”指的是通过线下委托或线上平台,雇佣他人扮演一天的男朋友角色,以满足个人的情感需求。这一现象在年轻女性群体中特别普遍,尤其是在那些渴望与虚拟角色或理想化伴侣建立情感联系的“梦女”群体中。

委托人的心理需求

委托人通过金钱购买爱人的方式,寻求一种完全的情感依赖和安全感。这种需求源自于对稳定关系的渴望,但却难以在现实生活中实现。通过“一日男友”的服务,委托人可以获得:

  1. 占有欲的满足:通过拥有一个随时可以控制和依赖的伴侣,委托人获得心理上的满足。
  2. 绝对的确定性和安全感:无需担心关系中的不确定性和风险。

然而,这种通过金钱购买的关系缺乏真正的情感交流,容易导致情感上的空虚和依赖性。有时甚至会引发和带来对这种情感的配得感的怀疑。

被委托人的角色与挑战

被委托人扮演“一日男友”的角色,需要具备高度的情感模拟能力和人际交往技巧。他们的工作不仅是表面的陪伴,更涉及深层次的情感交流和关系处理。具体来说:

  1. 角色还原、提供陪伴:准确模仿理想中的男友形象,满足委托人的幻想。在情感上给予委托人支持和安慰,成为其情感上的依靠。
  2. 关系处理:被委托人如何处理好营业和非营业状态下的区别和关系处理是一大挑战。

这种工作模式对被委托人而言,既是一种情感劳动,也可能带来心理压力,尤其是在面对长期依赖的委托人时。

经济因素与行业现状

  • 300r / 天
  • 10w+ / 月

一些思考

1、幻想、沉迷与破灭的循环

“一日男友”现象不仅是个体情感需求的反映,更是现代消费文化情感表达方式的交织。委托人在通过这种服务满足幻想的同时,容易陷入情感上的沉迷。一旦这种依赖无法得到进一步满足,或者服务无法持续提供预期的情感支持,委托人便会经历情感的破灭。这种循环不仅影响个体的心理健康,还可能对现实中的人际关系产生负面影响。长期依赖虚拟或短暂的情感连接,容易导致对真实情感交流的逃避和恐惧,进一步加剧情感上的孤独感。

这让我想到崩坏星穹铁道的匹诺康尼的剧情,如果现实带给你的大部分是痛苦甚至只有痛苦,你会认为一直沉溺在美梦之中不失为一种解脱吗?

2、个人主体性

委托人需要保持主体性,不要沉溺于幻想当中。

被委托人也要保持主体性,不被完全物化。

结论

“一日男友”现象是现代社会情感需求与消费文化交织的产物,反映了个体在复杂社会关系中的情感困境。通过分析其背后的幻想、沉迷与破灭,我们不仅可以更好地理解当代情感需求的多样性,也能反思情感表达方式的健康性与可持续性。未来,随着社会的发展和人际关系的演变,这一现象可能会进一步发展,值得我们持续关注和深入研究。

@[toc]

IDEA使用Tomcat运行Web项目及其常见报错

一、Project Structure

目的:让IDEA知道这是个Web项目

  1. Modules

    目的:加载Web相关的配置和资源

    右键目标模块 - Add - Web

    Web配置窗口

    1. 确认web.xml路径是否正确,不正确需要手动修改

      web.xml即Deployment Descripters下的Path

    2. 确认Web资源目录是否正确,不正确需要手动修改

      web资源目录WEB-INF上级路径(JSP等放置的位置)

      应用程序一般默认为web文件夹,但是我的项目为webapp文件夹,改为正确的webapp

  2. Artifacts

    即编译后的Java类,Web资源等的整合,用以测试、部署等工作

    白话一点,就是说某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式

    某个module有了 Artifacts 就可以部署到应用服务器中了

    - Add - Web Application: Exploded - From Modules... - 选择我们的项目or模块

    1
    2
    3
    4
    5
    6
    区分:
    (1)jar:Java ARchive,通常聚合Java类文件、相关数据和资源(文本、图片等)到一个文件,以便分发Java平台应用软件或库;
    (2)war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;
    (3)war exploded:展开,不压缩。直接把文件夹、jsp页面 、classes等移到Tomcat 部署文件夹里面
    因此这种方式支持热部署,建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来
    热部署:对于Java应用程序来说,热部署就是在运行时更新Java类文件。

二、Tomcat配置

  1. 点击IDEA右上方执行的Add Configuration...

  2. 弹出的窗口中点击+,出现的选项中往下滑,选择Tomcat Server - Local

    这步添加Tomcat配置

  3. 点击Deployement页签,点击+,选择Artifact...

    这里IDEA会将刚才的项目artifact放入窗口中

    但也有可能存在其他的artifact,选择我们需要的

  4. 修改Application context,可以只保留一个/

    IDEA会自动为我们生成项目根路径

    如果其他配置没问题结果访问404很可能是因为这个没改

  5. 点击Server页签,检查URL处是否与步骤4中设置的同步

    IDEA会自动同步

三、Tomcat运行

给我点那个绿色的Run!!!!

当你点击运行Tomcat时,IDEA在做什么

  1. 编译

    IDEA在保存后不会做编译,不像Eclipse的保存即编译,

    因此在运行server前会做一次编译,

    编译后class文件存放在指定的项目编译输出目录下;

  2. 根据artifact中的设定对目录结构进行创建

  3. 拷贝web资源的根目录下的所有文件到artifact的目录下(见1.2.3);

  4. 拷贝编译输出目录下的classes目录到artifact下的WEB-INF下(见1.2.2);

  5. 拷贝lib目录下所需的jar包到artifact下的WEB_INF下;

  6. 运行server,运行成功后,如有需要,会自动打开浏览器访问指定url。

四、一些报错及解决

4.1、org.springframework..xxx不存在

4.1.1、情况一:pom.xml中的maven的dependency没加载好(红色version)

  1. 方法一:头铁再试一次

    右击项目 - Maven - Reimport

    IDEA将通过网络自动下载相关依赖,并存放在Maven的本地仓库中

  2. 方法二:换个version罢

    如果还不行,可能的原因及解决:
    原因一:你的maven配置了从aliyun镜像下载,而aliyun仓库中恰好没有对应version
    原因二:版本号version暂时用不了(我也不知道是什么缘故),换个版本号就好了
    解决:访问https://mvnrepository.com/(需要梯子)
    搜索需要的artifact,复制其他versiondependency并粘贴到pom.xml

  3. 方法三:你是不是装过不止一个maven

    检查File - Settings - Build,Execution,Deployment - Maven

    Maven home directory选择你本次项目要用的maven

    User settings filesettings.xml里可能配置了从aliyun下载(自己权衡要不要改)

  4. 方法四:手动下载jar包

    如果上面的你都尝试过了,还是不行(哦,可怜的人儿):
    你需要baidu.com搜索对应版本的jar包并下载
    jar包放到maven本地repository文件夹中的对应位置(这个对应位置要点进一个个小文件夹
    注意删除最里面那个文件夹里以 .lastUpdated为后缀的文件(下载失败的),然后粘贴
    刷新一下maven依赖

1
2
3
将Maven的刷新设置为自动,配置方法为:
(1)打开File-Settings-Maven
(2)勾选Import Maven projects automatically

4.2.2、情况二:pom文件相关的依赖明明都下载好了,但运行还是找不到XXX相关的包

方法一:删除target文件夹下所有文件,重新编译运行。

方法二:File - Settings - Build,Execution,Deployment - Maven - Runner

            勾选`Delegate IDE build/run actions to Maven`

            选择自己安装的`JRE的路径`

4.2、java.io.FileNotFoundException: class path resource [spring/] cannot be resolve

描述:此异常是说找不到spring的配置文件。

原因:为了防止mybatismapper文件被过滤掉,在pom.xmlbuild节点下加入了如下代码

1
2
3
4
5
6
7
8
9
10
11
<!--如果不加如下配置maven打包时不会将mapper文件打包进去-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

解决:maven默认扫描src/main/java中的文件但并不理会src/main/resources中的xml文件,

        因此,添加resource节点,使其扫描`src/main/resources`中的xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--如果不加如下配置maven打包时不会将mapper文件打包进去-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<!--修改后的文件-->
<!--如果不加此节点,resources文件中的spring配置文件将会找不到-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

4.3、maven依赖的多个版本依赖冲突

描述:当出现下面问题异常的时候,如果clean jar包之后还是无法成功启动项目,可以考虑是这个问题

1
2
3
4
1、NoDefClassException
2、ClassNotFoundException
3、NoSuchMethodError
4、NoSuchFieldError

查看:在界面右侧可找到Maven,点开,小图标里找到Show Dependencies

        点击后即可查看当前`maven模块的依赖结构图`,<u>红色的线</u>即为<u>依赖冲突</u>。

解决:

  1. File - Settings - Plugins - 搜索 maven helper - install
  2. 打开pom.xml,在编辑器下方 控制台上方,点击text旁边的Dependency Analyzer
  3. 左侧为冲突的jar包,挨个点开,把右侧红色的挨个右击exclude

五、参考博客

  1. IDEA使用Tomcat运行web项目教程:http://t.csdn.cn/44qjF
  2. idea运行项目 程序包org.springframework..xxx不存在的解决办法:http://t.csdn.cn/kzfyg
  3. 解决idea打开的项目中maven依赖下载失败问题:http://t.csdn.cn/6nNLs
  4. 如何将下载到本地的JAR包手动添加到Maven仓库:http://t.csdn.cn/82XIn
  5. war和war exploded的区别:http://t.csdn.cn/quYCO
  6. IDEA项目运行项目报404错误——org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。:http://t.csdn.cn/CY4WI
  7. IDEA部署项目到tomcat运行成功但是页面404的两种原因:http://t.csdn.cn/E3IBU
  8. java.io.FileNotFoundException: class path resource [spring/] cannot be resolve 《异常信息》:http://t.csdn.cn/5JDz8
  9. idea如何解决jar包冲突:http://t.csdn.cn/qyKTp

@[TOC](新手入门 Git & GitHub)

==零、命令行小抄==

本小抄适用于:远程仓库new了repo、本地有(要上传的)文件夹、SSH已绑定好
供有一定基础、但不常用的同学(包括我自己)查阅

  1. ssh-keygen -t rsa -C "12345678@qq.com",生成rsa(用于本地电脑和远程仓库绑定,详见下文3.3)
  2. 进入要上传的文件夹,git init ,创建本地仓库
  3. git remote add origin git@github.com:xxx/yyy.git,本地仓库连接远程仓库
  4. 做完修改后,git add .,添加到临时缓冲区
  5. git commit -m "添加了/修改了...",提交到本地仓库
  6. git push -u origin master,提交到远程仓库的master分支
  7. git log,查看已有的commitID(为7准备)
  8. git reset --hard commitID,撤销 commit、撤销 git add . 操作、撤销修改代码(在以下情况常用:(1)添加了一个怎么也传不上去的大文件;(2)push时候发生由于commit引起的不知名error)
  9. "ssh:connect to host github.com port 22: Connection timed out"问题的解决
    首先,vim ~/.ssh/config
    其次,添加以下代码
    1
    2
    3
    4
    5
    # Default github user self
    Host github.com
    port 443 # 默认是22端口
    HostName ssh.github.com
    IdentityFile ~/.ssh/id_rsa
    最后,:wq保存并退出vim模式

==一、前言==

学习Git真的是我学习路上的一道“”;
  一方面,不断接触的信息告诉我“学习Git很重要”;
  另一方面,每次找到的教程都有那么几步看不懂,或是看懂了记不住

我前前后后学了三四次了,
或被GitHub英文劝退, (不会翻墙的时候打开还会很慢)
或因安装软件繁琐放弃, (啥是Git??啥是Github??)
或成功按部就班实现了一次demo,但没有实践下去于是忘了

谨以此篇献给想学习并且在学习Git版本控制的小白。
 

==二、原理描述==

2.1 四句话讲明白

Git 狭义上来说是一个版本控制软件,广义上简单理解成代码的仓库
GitHub 一个远程仓库,白话就是程序员专用的“某度网盘”
网盘会用吧? 从本地的一个文件夹上传到网盘,或从网盘下载到本地。
Git你就会了。 从本地仓库(repository)上传(push)到远程仓库,或从远程仓库下载(pull)到本地。
 

2.2 补充说明

(1)本地仓库

  1. 电脑上的一个文件夹就是一个本地仓库
  2. 只是文件夹当然不行(就像没名没证空有房屋和物资,别人怎么知道是仓库)
  3. 下载Git后可以在文件夹下通过命令行输入命令建立仓库(告诉别人,我这个文件夹,是仓库)

(2)远程仓库

  1. GitHub就是一个远程仓库
  2. 一个GitHub账号对应一个专属于你的仓库
  3. 也许你访问GitHub官网会很慢(这需要花点小费翻墙解决)
  4. 也许你读不懂英文,但我相信你可以磕磕碰碰注册成功!

(3)相互绑定

  1. 有了本地和远程仓库还不够(远程仓库怎么知道该不该接收呢,我不认识你)
  2. 我们需要一个SSH安全协议(远程仓库把该本地仓库的名字加入联系人名单,可以接收)

(4)上传下载

  1. 一般该操作在本地仓库进行
  2. 我们通过Git提供的命令行命令实现push和pull
  3. 远程仓库有时也需要做一些操作(仓库收到物资后也需要整理的嘛)
  4. 即对别人提交的修改更新做审核和合并(初学我们不涉及)
     

==三、保姆教程==

我将对步骤进行概述性描述,因为有一位大佬已经发过知乎,
我觉得写的很好,也不多赘述,各位循着我的大纲去他那亲自体验就好~
(链接我放评论区,欢迎大家去瞅瞅!真的很棒很棒!)

3.1 本地仓库(Git)

(1)下载安装git提供命令行工具 [对应知乎文章 第六点]
(2)一个文件夹demo做本地仓库(这个不用教吧??新建文件夹即可)

3.2 远程仓库(GitHub)

(1)如有需要,付费翻墙(白话就是,通过歪果的节点上外网,没有阻碍速度更快)
(2)一个GitHub注册账号 [对应知乎文章 第二点]
(3)新建一个远程仓库repository [对应知乎文章中 第四点]

3.3 相互绑定(SSH)

(1)在本地生成SSH key [对应知乎文章中 第八点]
(2)向GitHub添加SSH key [对应知乎文章中 第八点]

3.4 上传下载(Git命令介绍)

(1)本地仓库的更新与整理 [对应知乎文章中 第七点]
(2)本地仓库通过Git命令行上传下载 [对应知乎文章中 第九点]
(3)远程仓库查看效果[对应知乎文章中 第九点]

==结语==

如果对你有帮助的话给个赞吧,顺带附一张自制的说明图~

Esko Ukkonen: On-line Construction of Suffix Trees

@[toc]

一、后缀树的概念及应用【详见刘方州同学报告】

1.1 字典树 Trie

定义:字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。
用途:用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
核心思想:空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
基本性质:
(1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。
(2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
(3)每个节点的所有子节点包含的字符都不相同。

1.2 后缀树 Suffix Tree

后缀树是一种数据结构,能快速解决很多关于字符串的问题。后缀树的概念最早由Weiner于1973年提出,既而由McCreight在1976年和Ukkonen在1992年和1995年加以改进完善。
给定一长度为n的字符串T=T_1 T_2 〖…T〗n和整数i (1<=i<=n),子串T_i T(i+1) 〖…T〗_n便都是字符串T的后缀。以字符串T=abcabxabcd为例,它的长度为10,所以abcabxabcd、bcabxabcd、cabxabcd、…、d都是T的后缀。规定空字串也是后缀。后缀树,就是包含一则字符串所有后缀的压缩字典树,压缩过程如图1所示。把abcabxabcd的所有后缀加入字典树并压缩后,我们得到如图2的后缀树。

如图2所示,Suffix Tree与Trie的不同在于边不再只代表单个字符,而是每个边可以表示任意的长度,实操过程中用两个指针[from, to]实现,耗费O(1)的空间。

2 后缀树的应用

2.1 最长重复子串
2.2 最长公共子串
2.3 最长回文子串

二、朴素后缀树构造方法及问题

略  

三、线性时间内后缀树在线构造方法

McCreight最初的构造法原则上要按逆序构造,也就是说字符要从末端开始插入。如此一来便不能作为在线算法, 它变得更加难以应用于实际问题,如数据压缩。
20年后,来自赫尔辛基理工大学的Esko Ukkonen把原算法作了一些改动,实现了线性时间内对字符串从左往右的后缀树在线构造方法。
对于所给的文本T,由一棵空树开始逐步构造T的后缀树。以abcabxabcd为例,先由a开始,接着是ab,然后abc,…,不断更新直到构造出abcabxabcd的后缀树。

3.1 概念引入

(1)隐式后缀树 Implicit Suffix Tree

按上述方法在线构造abcabxabcd的后缀树的过程中,我们必然会构造出字符串abcab的后缀树,对其所有后缀枚举如下:abcab、bcab、cab、ab、b。观察发现:后缀ab被包含在abcab中作为其前缀;后缀b被包含在bcab中作为其前缀。
如果为ab或b单独开辟新的分支,则不符合字典树的性质,即每个节点的所有子节点包含的字符都不相同。因此我们选择暂时认为ab、b隐式包含在已有分支里,这样构造出来的后缀树称为隐式后缀树。
在我看来,隐式后缀树是在扫描和构建过程中节省时间的一步操作。因为字符串尚未扫描结束,所以这些操作可以先记录着而暂时不去执行,其代价是需要引入接下来要提及的活动点和剩余后缀数。

(2)终止符 $

问题:如何确定查找后缀树得到的子串是一个后缀还是后缀的一部分?
解决:在文本后添加字母表以外的字符,比如$。这样,当查找到ab$或b$就说明这是一个后缀,避免了二义性。对abcab$的所有后缀重新枚举如下:xabxa$、abxa$、bxa$、xa$、a$、$。观察发现:xa$不再是xabxa$的前缀;a$不再是bcab$的前缀。

(3)活动点active point、剩余后缀数 remainder

问题:我们提到了隐式后缀树,隐式什么时候变为显式?怎么变为显式?
比喻:隐式就像瘦子躲在胖子后面,瘦子露出马脚的时候就是变为显式的时候。
举例:以最终构建abcabx为例。第一阶段,我们从左到右在线构建abc的后缀树,如图3所示。

图3 abc的后缀树
第二阶段,我们需要构建abcab的后缀树,如图4所示。新增字符a新增字符b的情况下,不必大刀阔斧改变树的结构,只要悄悄在每条边后面追加a追加b即可。枚举abcab的后缀集合:abcab、bcab、cab、ab、b。观察发现,abcab、bcab、cab即为三条边,而ab、b隐式地包含其中。

图4 abcab的后缀树
第三阶段,我们需要构建abcabx的后缀树。新增字符x,x就是露出的马脚,因为已有的后缀树的边里没有包含abx的。露出马脚之时就是变为显式之日,通过裂变出新的边变为显式,如图5所示。

图5 abcabx的后缀树

问题:如何确定裂变的位置?
解决:引入活动点active point,用于确定裂变的位置。活动点active point是一个包括(active_node, active_edge, active_length)的三元组。该三元组在每次后缀树的搜索中更新。
根据active_node确定结点,根据active_edge确定结点的某一条边,根据active_length确定边上的某个位置。举例来说,如图6所示,active_node为0,即根节点,active_edge为a,即从根节点出发、字符为a的这条边,active_length为2,即该边索引为2的地方,即符号|所在位置。

图6 active point的含义解释

问题:裂变具体怎么做?
解决:如图7所示,以abcab->abcabx为例,裂变时进行以下操作:
① 根据活动点确定裂变位置(ab|cab),在|处添加节点。
② 在新增的节点后分裂出一个边为x的节点。

图7 裂变的过程
至此由于添加abx后缀引发的裂变完成。
问题:只裂变一次就够了吗?
思考:未必够。以abcab到abcabx为例,abcab的后缀树表示如图8所示。

图8 abcab的后缀树
已知abcabx的后缀集合:abcabx、bcabx、cabx、abx、bx、x。
如果仅在已有的边后面添加x,只能覆盖abcabx、bcabx、cabx,剩下abx、bx、x。由于每次裂变能得到1个新后缀,直觉上来说需要进行3次裂变,事实上也是如此。上述过程只完成了添加abx后缀引发的裂变。
解决:引入剩余后缀数remainder,表示还需要插入多少个新的后缀,即还需要裂变几次。remainder=0时,表示当前新增字符处理完毕,继续扩展下一字符。

根据上述问题思考已经明确了两个事实:
① 活动点active point指向要裂变的位置。
② 要裂变的位置可能不止一个。
问题:每次都重新从根节点搜索下一裂变处吗?
解决:不需要。引入后缀链接Suffix Link,用于快速找到下一裂变处。
问题:后缀链接怎么创建?
规则:每进行一次裂变,会新增非叶节点和新边。后缀链接从该新增的非叶节点出发,指向下一次裂变新增的非叶节点,用虚线连接。
问题:为什么后缀链接可以快速找到下一裂变处?
观察:后缀链接连接的节点存在的关系:如果有一个从A指向B的后缀链接,那么从根节点到A节点表示的子串剔除第首个字符后得到的即为从根节点到B节点表示的子串。
举例:图9中节点4表示字符串ab,节点6表示字符串b,ab剔除掉首个字符a后得到b。实际处理时,每一次裂变意味着一个待添加后缀的成功插入(abx),下一次裂变的工作就是插入下一个待添加后缀(bx),下一个待添加后缀(bx)与当前成功插入的后缀(abx)的关系也是这样。
好处:可以方便地从一个后缀跳到另一个后缀,降低算法的时间复杂度。

3.2 过程演示

注意到已经存在的第一条边前缀中隐式包含了a。隐式包含在实操过程中的做法就是更新活动点active point和剩余后缀数remainder。
单就后缀树而言,这颗后缀树没有准确地描述当前读到的字符串abca。如何保证最后扫描结束的时候后缀树可以准确表示呢?回扣前文终结符的引入:在遇到$并做完相应操作后,后缀树可以准确地描述abca$。

更新active point:a后面有b,length+1,往后挪;还在同一条边上,node和edge不变;
更新remainder+1=2:表示需要插入两个后缀ab、b。
问题:为什么remainder+1?
因为上一步的a实际上没有被插入树中,所以它被remain了下来,而后我们又继续处理b了,所以上一步没插入的a延长成了ab。加入的1即需要插入新的后缀b。
问题:再看active point和remainder记录信息似乎是缺失的:记录了后缀ab即将添加的位置,记录了2个待添加后缀,却没有记录b即将添加的位置?为什么呢?
先说结论:“既然第一条边有ab|cab,那在第一条边后面(也就是第二条第三条边里)一定存在去掉a以b开头的后缀”。
再详细解释:回顾一下这里第二条边是如何产生的?正是因为后缀树的逐步构建过程中a后接了b,所以我们先在第一条边的a追加成ab,再为b开辟新的边,即第二条边,所以这个第二条边就是显然的以b开头的后缀。换句话说,即使a后面不是紧跟的b,而是紧跟的是个x,那也会新开一条边以x开头的。

remainder=3,表示有3个待添加的后缀:abx、bx、x
我们按之前的逻辑来试图更新active point:ab之后找x,找不到!因此在裂变位置添加新的节点4、新的边x。这一步完成了后缀abx的添加。但是active point怎么更新呢?

Rule 1(活动点更新规则1)

当active_node = root 时遵循:
active_node 保持为 root;
active_edge 被设置为即将被插入的新后缀的首字符;
active_length 减1;

根据Rule 1规则更新active point:
active_node 保持为 root;
active_edge 被设置为即将被插入的新后缀bx的首字符b;
active_length-1=1;
更新remainder:remainder-1=2,表示还有2个后缀待添加:bx、x。

裂变过程与abx的插入相似,不多赘述。依据Rule 1更新active point为 (0, ‘x’, 0)。
更新remainder-1=1,表示还有1个后缀x没有插入。
注:图里的remainder=0,我认为其意思是在扫描到x时回头处理之前的ab,但其实并没有真的扫描x,就像一个人往前走路只是把脚伸过去但没有迈过去踩实,所以默认观察到了x并处理了之前遗留的a和b,但尚未处理x,现在remainder=0说明a和b处理好了,开始处理下一个字符x,直接在根节点加边x。
除此以外,该步骤还需要创建后缀链接。

Rule 2(后缀链接创建规则)

如果我们分裂一条边并且插入一个新的节点,并且如果该新节点不是创建的第一个节点,则将先前插入的节点与该新节点通过一个特殊的指针连接,称为后缀链接,通过一条虚线来表示。
在图18中,因插入bx新裂变出来的节点6,不是扫描到x后创建的第一个节点了(第一个节点是因插入abx新裂变出来的节点4),因此创建后缀链接:4->6。
我的理解是“前人栽树,后人乘凉”,这条后缀链接在下一次碰到ab时会有用。

active point为 (0, x, 0),length=0,所以在根节点创建边x。
remainder-1=0,表示可以处理下一个字符了。

更新active point(4,’c’,1);
更新remainder=3,表示需要插入abc、bc、c三个后缀。

更新remainder = 4,需要插入abcd、bcd、cd、d四个后缀;
更新active point:abc之后找d,找不到!因此在裂变位置添加新的节点9、新的边d。
问题:此时active point如何更新的?

Rule 3(活动点更新规则2)

当从active_node从不为root的节点分裂边时,我们沿着后缀链接的方向寻找节点:
如果存在一个节点,则设置该节点为 active_node;
如果不存在,则设置 active_node 为 root。
上述两种情况的active_edge 和 active_length 保持不变。

根据Rule 3,图23的active point为(6, c, 1)。
更新remainder = 3,并且开始处理下一个剩余后缀bcd。
bc后并没有没出现d,裂变。

裂变创建了节点11和边d。除了更新之外,根据Rule2创建后缀链接:9->11。
此时,我们观察两个后缀链接:
4 (ab) -> 6 (b)
9 (abc) -> 11 (bc)
remainder-1=2,表示还需要插入cd、d;
根据Rule 3更新active point为(root, c, 1)。

更新active point时:由于找不到后续d,因此裂变:新建节点13和边d;
更新remainder-1 = 1;
依据Rule 2创建后缀链接:11 -> 13。

更新active point时:由于找不到后续d,因此裂变,新建边d;
更新remainder-1=0。

对树结构的改变仅需在根节点上插入一条新边$。
整个后缀树构建完成。

3.3 复杂度分析

关于隐式后缀树,如果扫描发现要被插入的字符已经存在于树中,则无需修改树的结构。原因是要被插入的字符实际上已经隐式地被包含在了当前的树中。而active point和remainder的更新记录了这部分信息,确保了在后续的操作中会进行处理。

问题:算法结束时remainder > 0的情况存在吗?
解决: remainder > 0意味着当前仍为隐式后缀树,虽然隐式包含着后缀信息,但是整个树并没有准确表达所有后缀。
我们在字符串末尾添加$以避免这种情况。由于$一定不同于字符串中任一字符的特性,使得在扫描到$时一定将之前所有隐式包含的后缀暴露出来并处理,处理的过程中remainder递减至0,最终完成整个后缀树的构建。
remainder记录了还余下多少后缀需要插入。这些插入操作将逐个的与当前位之前的后缀进行对应,我们需要一个接着一个的处理。每次插入需要O(1)时间。active point记录了插入(裂变)的位置。仅需在该位置新增一个字符,因为其他字符都被隐式地包含了。每次插入后:对于remainder,相应减少;对于active point:如果存在后缀连接的node续接至下一个节点;如果不存在则返回root节点;如果已经是在root节点了,则依据Rule1来修改活动点。无论哪种情况,仅需O(1)时间。
如果这些插入操作中,如果发现要被插入的字符已经存在于树中,则什么也不做,即使 remainder>0。原因是要被插入的字符实际上已经隐式地被包含在了当前的树中。而 remainder>0 则确保了在后续的操作中会进行处理。

整体算法复杂度是多少?
如果输入字符串的长度为n,则有n步需要执行,加上$有n+1步。在每一步中:
要么消耗O(1) 时间更新active point和remainder;
要么消耗O(1) 时间执行裂变插入操作;
因此整体算法复杂度为O(n)。

链表逆置

 

==前言==

链表逆置是初学时有困扰到我的难点.

由于链表头结点可放可不放数据,所以写代码时候 ->next 用的云里雾里。

这里讲解头结点与第一结点区分的情况,即头结点你把它看作这个 链表的“文件名” 就行。
若头结点为L,则第一结点为L->next。

 

==代码==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void listReverse(linkedList &L)
{
node *p,*s;
//1.
p = L->next;
L->next = NULL;

while(p)
{
//2.1
s = p;
p = p->next;
//2.2
s->next = L->next;
L->next = s;
}
}

看不懂别慌。我会把代码拆解成三块为你讲解。
讲解前,先做一个理解工作,以 L->next 为例,按在表达式边or边分,存在两种情况:

情况一(左):L->next = NULL;

重点在next,即L的指针域,该表达式将指针域指向NULL。

情况二(右):p = L->next;

重点在 L->next 整体, 即 L->next 这个结点,->next在这里就是个形式,目的还是为了告诉你是这个结点!该表达式将p指针指向结点L->next。

 

==讲解==

我们先看第一轮循环做了什么:

建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)
 

 
 

第二轮:
 
建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)

第三轮省略(可以自己尝试)。
 
 

==总结==

不难发现:

  • 链表逆置利用了s、p两个指针移动实现

  • 每一轮循环体执行结束后,s指向刚刚逆置成功的结点,p指向下一轮待逆置的结点

  • 为什么需要p?
    因为2.2步骤中s->next会被改写
    若只有s,会丢失剩余的结点
    这时候p起到暂存的作用,等待下一轮2.1步骤中的s=p找到它。

 
 

最后给一份带注释的代码~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void listReverse(linkedList &L)
{
node *p,*s;
//1.准备工作
p = L->next;
L->next = NULL;

while(p)
{
//2.1 s记录正在处理的结点,p记录下一轮待处理的结点
s = p; //s承接上一轮记录的位置
p = p->next; //p为下一轮记录位置
//2.2 把s插入 已逆置的部分 中
s->next = L->next; // L->next代表已逆置的第一结点,s的指针域指向它
L->next = s; //(头结点的指针域,即)第一结点 设置为s
//2.2步骤相当于:
//s 对 队伍(已逆置部分)的队首(已逆置的第一结点)说:你不要排在柜台前了,你排在我后面
//等队伍排在s后面后,s自己排到了柜台前
}
}

 
 
有问题可以评论区交流讨论哈~

认知觉醒:开启自我改变的原动力

周岭

208个笔记

◆ 上篇 内观自己,摆脱焦虑

>> 事实上理智脑很少有主见,大多数时候我们以为自己在思考,其实都是在对自身的行为和欲望进行合理化,这正是人类被称作“自我解释的动物”的原因。

>> 习惯之所以难以改变,就是因为它是自我巩固的——越用越强,越强越用。要想从既有的习惯中跳出来,最好的方法不是依靠自制力,而是依靠知识

◆ 第二节 焦虑:焦虑的根源

>> 读书的“艰难”与买书的“惬意”简直相差十万八千里。

>> 归结起来,焦虑的原因就两条:想同时做很多事,又想立即看到效果。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。

◆ 第三节 耐心:得耐心者得天下

>> 很多人虽然嘴上说要保持耐心,但身体却诚实地游走在即时满足的边缘。他们总是从最简单、最舒适的部分开始一天的工作,然后沉迷于娱乐信息、醉心于周边琐事,就是无力去做重要的事情;

>> 从权重上看,改变量﹥行动量﹥思考量﹥学习量

>> 很多人之所以痛苦焦虑,就是因为只盯着表层的学习量。他们读了很多书、报了很多课,天天打卡、日日坚持,努力到感动自己,但就是没有深入关注过自己的思考、行动和改变,所以总是感到学无所获,甚至会认为是自己不够努力,应该继续加大学习量,结果陷入了“越学越焦虑,越焦虑越学”的恶性循环。

>> 一旦觉察自己开始失去耐心了,就温和地对自己说:“你看,我身体里那个原始人又出来了,让他离开丛林到城市生活,确实挺不容易的,要理解他。”

>> 温和地告诉它们:“该有的享受一点都不会少,只是不是现在享受,而是在完成重要的事情之后。”

>> 这种“后娱乐”的好处是,将享乐的快感建立在完成重要任务后的成就感之上,很放松、踏实,就像一种奖赏;而“先娱乐”虽然刚开始很快活,但精力会无限发散,拖延重要的工作,随着时间的流逝,人会空虚、焦虑。

◆ 第二章 潜意识——生命留给我们的彩蛋

>> 反本能成长

>> ·《思考力》一书的作者上田正仁提示:思考力的本质就是“丢弃所有已经消化的信息,让问题的核心浮出水面”;

·《刻意练习》中的核心方法论是:不要重复练习已经会的,要不断寻找那些稍有难度的部分;

·《原则》一书的作者瑞·达利欧罗列了工作和生活中的原则,用以清晰地指导自己行事;

·《超越感觉》一书告诉我们,想拥有清晰的逻辑,就坚持一点:凡事不要凭模糊的感觉判断,要寻找清晰的证据。

>> 提升思考能力的方法正是不断明确核心困难和心得感悟,并专注于此。

>> 优秀的人更倾向于做高耗能的事,比如“学霸”的秘诀往往在他们的错题本上——他们更愿意花时间明确错误,并集中精力攻克。

>> 多数人为了逃避真正的思考,愿意做任何事情。

>> 具体事件一旦变模糊,其边界就会无限扩大,原本并不困难的小事,也会在模糊的潜意识里变得难以解决。

>> 真正的困难总比想象的要小很多。人们拖延、纠结、畏惧、害怕的根本原因往往不是事情本身有多难,而是内心的想法变得模糊。就像在3 000米跑步考核开始前,那种不知名的恐惧会让人紧张得全身发抖,而我们一旦开跑、不得不与这种恐惧正面交锋时,就会发现3 000米考核也不过如此。如果我们再积极些,学会从一开始就主动正视它、拆解它、看清它,或许那种紧张就不困扰自己了,我们甚至能从容地“享受”比赛。

>> 要想不受其困扰,唯一的办法就是正视它、看清它、拆解它、化解它,不给它进入潜意识的机会,不给它变模糊的机会;即使已经进入潜意识,也要想办法将它挖出来。所以,当你感到心里有说不清、道不明的难受的感觉时,赶紧坐下来,向自己提问。

>> ·到底是什么让自己烦躁不安?是上台演讲、会见某人,还是思绪纷乱?

·具体是什么让自己恐惧担忧?是能力不足、准备不够,还是害怕某事发生?

·面对困境,我能做什么?不能做什么?如果做不到或搞砸了,最坏的结果是什么?

>> 恐惧就是一个欺软怕硬的货色,你躲避它,它就张牙舞爪,你正视它,它就原形毕露。一旦把它看得清清楚楚,情绪就会慢慢从潜意识中消散,你的生活将会舒畅无比。

◆ 第二节 感性:顶级的成长竟然是“凭感觉”

>> 先用感性能力帮助自己选择,再用理性能力帮助自己思考。

>> 那些一眼就能看出答案的题目,不用理它;一眼看过去就头痛、不知道在说什么的题目,也不用理它;只有那种大致能看出点思路,但又要动点脑筋的题目,一定要多做。这个就是中间地带,是你能够进步最快的地方。

>> 只取一个全书最触动自己的点,然后尽可能去实践、改变。这样读书不仅收获更大,而且也不会焦虑。

>> 如果你感受到的总是痛苦和无趣,那十有八九是感觉不对——要么在困难区煎熬,要么在舒适区打转。

>> 我们需要用心去感受什么事情让自己最触动,而不是用脑去思考什么事情最有利。

>> 直视死亡可以简化一切事物

◆ 第三章 元认知——人类的终极能能力

>> 元认知能力就是我们习以为常、见怪不怪的反思能力。

>> 如果说学习和反思是静态的,那处于当下的、动态的自已又该如何主动运用元认知呢?很简单,启用你的“灵魂伴侣”啊!让他时刻监控你,就像电脑系统里的杀毒软件,监控着你的每一次操作,一旦发现可疑文件就立即发出警报。

>> 我们总是这样,一开始只想找一根绳子,最后却牵出一头大象。

>> 这些都是元认知能力不足的表现——顺着自己的本性做喜欢和舒服的事,精力发散,缺乏觉知,任何偶发的干扰都会分散注意力。

>> 这个事情可做可不做,还是先忍一下,等做完重要的事情再说;停下来,先想清楚什么事情是最重要的,不能盲目地做那些容易但不重要的事;再过几年回头看,现在的烦恼不值一提,与其消耗自己,不如把情绪收起来,干点有用的事……

>> 元认知能力总能让你站在高处俯瞰全局,不会让你一头扎进生活的细节,迷失其中。

>> 监控自己的注意力,然后将其集中到自己需要关注的地方

◆ 第二节 自控力:我们生而为人就是为了成为思维舵手

>> 很多人为了获得美好的人生,常常给自己立下早起、跑步、阅读、写作等目标,但是没过几天就放弃了,因为那些目标大多是受大环境影响而跟风设定的——别人说好,自己也想要,但实际上,自己并不需要。

>> 比如,当我们漫步街头时,元认知能力弱的人总会被路边的音乐、屏幕广告、叫卖声或突发事件轻易地吸引,而元认知能力强的人则会花那么一两秒去思考这事值不值得关注。

>> 教育的意义就是教你在遇到一件事的时候如何看待它。

>> 在生活中更是如此。早上醒来时,如果能有几秒的时间用来思考,我们就可能在起床和看手机之间做出更好的选择;看到微信有未读消息提示时,如果能先停留几秒,我们就可能决定先去做重要的事,而不是点击那个小红点

>> 一定要在选择节点上多花“元时间”。

>> “元时间”是我自创的概念。这是一个极好的概念,因为一天24小时看起来每分每秒都一样,但实际上并不相同,有些时间的权重要远远大于其他时间,我把这些权重大的时间叫作“元时间”。

>> 元时间通常分布在“选择的节点”上,比如一件事情、一个阶段或一天开始或结束时。善用这些时间会极大程度地优化后续时间的质量。

>> 同样,早上醒来的那一瞬间、拿起手机的那一瞬间、回到家的那一瞬间……我们都要面临新的选择,要主动消耗脑力去审视它们。虽然这样做会更累,但这正是锻炼元认知能力的最佳时机,就像是在举思想哑铃,让自己的理智脑变得更强大。

>> 元认知能力强的一个突出表现是:对模糊零容忍。

>> 模糊,不仅需要在这些小事上消除,在选择人生目标等大事上也是如此。现实生活中,我们总是想都不想就一头扎进具体事情里,对什么事情更重要、什么事情最重要、做这件事对自己到底意味着什么等长远意义却极不清楚。

>> 焦虑的人很少有“元时间”的意识,他们习惯不动脑子、直接行动,喜欢用饱和的行动来感动自己,想与做的时间配比差距悬殊,他们甚至连一丁点儿深入思考的时间都不愿意花,任由本能欲望让自己迷失在自我满足的行动里。

>> 高尔基曾经说:每一次克制自己,就意味着比以前更强大。

◆ 下篇 外观世界,借力前行

>> 缺少感受的行动,就像失去灵魂的躯壳;缺少感受的人对凡事都心不在焉、视而不见、听而不闻。更准确地说,我们在躯壳内装了一个混乱的灵魂,这个灵魂总是“做A想B”:刷牙的时候走神,走路的时候走神,洗澡的时候走神……无时无刻不在走神。

>> 分心走神的原因无非两个:一是觉得当下太无聊,所以追求更有意思的事情;二是觉得当下太痛苦,于是追求更舒适的事情。因为身体受困于现实,只好让思想天马行空。

>> 生命是由当下的一个个片段组成的,身心合一的片段组成的就是幸福专注的高质量人生,身心分离的片段组成的就是分心走神的低质量人生。

>> 可见,分心走神的本质是逃避,所以,面对困难时,身心分离的人总会不自觉地退回舒适区,而身心合一的人则更容易跳出舒适区,直面困难。

>> 如果一个人从小就养成了全情投入和界限清晰的专注习惯,那他不仅能获得智力上的聪慧,也能获得情绪上的平和。

◆ 第二节 学习专注:深度沉浸是进化双刃剑的安全剑柄

>> 练习时极度专注。谁都知道专注的重要性,但沉浸的关键是要做到“极度”专注,也就是说,在短时间内投入100%的精力比长时间投入70%的精力好,因为专注的真正动力并不是毅力和耐心,而是不断发现技巧上的微妙差异和持续存在的关注点,精力越集中则感知越细微。

>> 先保持极度专注,想不出答案时再将注意力转换到另一件与此毫不相干的事情上。即事前聚精会神,让意识极度投入;事后完全忘记,让意识彻底撒手。这样,灵感和答案就会大概率地出现。

>> 审视自己的注意力——是被动吸引还是主动选择?

·审视自己的沉浸度——是分心走神还是极度专注?

·审视自己的练习量——是浅尝辄止还是大量投入?

◆ 第五章 学习力——学习不是一味地努力

>> 第一件事说的是跑步,她说:“之前我要求自己每天跑步1小时,靠意志力,我坚持了蛮长一段时间,但是最后还是中断了。最近我调整了跑步的时间,改为每次30分钟,最好不要少于一周4次。调整以后发现,我可以不用太靠意志力去做这件事,而且会主动想办法坚持,并且跑完后会很放松,不像之前那样连续跑1小时会很累、很难受。我真的能感觉到现在这种‘主动做’和原先那种‘靠意志力做’完全不一样。”

第二件事说的是学英语,她说:“原来每天学习1小时我会烦躁,但现在改为每天学习30分钟,时间一到就不学了。这样,我反而可以坚持每天学,不厌倦。”

>> 找一个自己能坚持做下去的方式,比单纯按照标准化的时间和方式做更重要。以前一直以为多花时间才能学好、才能达到效果,其实那是因为自己急于求成,想要快速见效,这样反而不容易坚持。现在降低了难度和标准,自己的行动力反而能持续增强,虽然达到目标所需的时间可能会变长,但是我相信这样的坚持最终可以产生复利效应。”

>> 我们只需每次到舒适区的边缘坚持一下,然后回到舒适区停留一下,调整好了再到舒适区边缘……如此反复。

>> 梳理那些“会做但特别容易错或不会做但稍微努力就能懂”的内容,然后在这个区域内努力。

>> 距离我们太远的事物,我们通常无法把握,无论它们是令人痛苦的还是令人享受的。

>> 千万不要认为没有管束的生活很美好,一旦进入完全自由的时间,虽然开始会很舒服,但很快,我们就会迷失在众多选项中——做这个也行,做那个也行。

>> 做选择是一件极为耗能的事情,如果没有与之匹配的清醒和定力,绝大多数人最终都会被强大的天性支配,去选择娱乐消遣。在有约束的环境下我们反而效率更高,生活更充实。

>> 能解释的现象越多,这个概念就越底层。

>> 不管你遇到的是什么问题,其根源都是一样的,那就是:这个问题太大、太模糊。

所以,你只要拆解目标——把大目标拆分为小目标,任务就会立即从困难区转移到拉伸区,这样你就愿意行动了。不信的话,你可以细心观察一下,几乎所有的行动达人都是拆解任务的高手。

>> 学习不只是一味地努力,成长也不只需要“打鸡血”、拼意志力。只要站在舒适区边缘,一点一点往外走,同时和时间做朋友,你肯定会在不经意间发生蜕变。

◆ 第二节 深度:深度学习,人生为数不多的好出路

>> 我隐约看到:一小部分知识精英依旧直面核心困难,努力地进行深度钻研,生产内容;而大多数信息受众始终在享受轻度学习,消费内容。如果我们真的希望在时代潮流中占据一席之地,那就应该尽早抛弃轻松学习的幻想,锤炼深度学习能力,逆流而上,成为稀缺人才,否则人生之路势必会越走越窄。

>> 罗振宇曾提到他是这样学习的:“我每天要求自己写够五篇阅读心得,不用长篇大论,短短几个词就行。因为真正的学习就像是缝扣子,把新知识缝接到原有的知识结构中,每天写五篇阅读心得就是逼迫自己原来的知识结构对新知识做出反应,然后把这些反应用文字固化下来,缝接的过程就完成了。”

>> 专注于深度学习,同时对浅学习保持开放。

>> 选择一些值得关注的人,和他们保持联结。他们释放的一些有价值的信息会引领我们走向更广阔的世界,但无论如何,最终要自己去读、自己去想、自己去做。

◆ 第三节 关联:高手的“暗箱”

>> 这既是有效阅读的三个步骤,也是深度学习的三个层次:

·知道信息点

·关联信息点

·行动和改变

>> 孤立的知识就像沙粒,只有关联才能将其聚沙成塔,形成稳固的知识晶体,最终构建自己的认知体系

>> 绝大多数人习惯以孤立的思维看待事物,喜欢花大量时间收集和占有信息;而另一批先行者则更喜欢拨弄信息之间的关联,从而在不知不觉间变得聪明了起来。

>> 我们在关联时,需要牢牢聚焦自身最迫切的需求,换句话说,就是让一切与自己有关。

>> 知识的获取不在于多少,而在于是否与自己有关联,以及这种关联有多充分。

>> 当然,还有一个更重要的隐蔽条件不能忽视:你需要明确的目标或强烈的需求。

>> 这个道理还能用在什么地方?

◆ 第四节 体系:建立个人认知体系其实很简单

>> 只有当知识能够帮助你做实际决策的时候,它才是你的知识。

>> 在阅读时,我唯一要做的事情就是:寻找触动点。我会在触动自己的地方做标记,在空白处写下大量能联想到的思考,书读完之后,我会放上几天,然后问自己:“这本书最触动自己的是哪个点?”这个点可以是一个理论、一个案例,甚至是一句话,只要它真正触动我,并能让我发生真实的改变,我就认为这本书超值了,至于其他,忘记就忘记了,我一点也不觉得可惜。

>> 这就是搭建个人认知体系的真相:打碎各家的认知体系,只取其中最触动自己的点或块,然后将其拼接成自己的认知网络。

>> 一个触动点若是能转化成一个认知晶体,我们的生命质量和密度将远远超过那些不反思的人。

◆ 第五节 打卡:莫迷恋打卡,打卡打不出未来

>> 时下,学习成长蔚然成风。

>> 不排名不要紧,一排名,有些事就变了。

>> 一开始,人们的行动动机全都出于学习成长本身,一想到自己今后能够轻松早起,享受美好时光;锻炼塑身,拥有美好身材;热爱阅读,成为博识智者……就顿时信心满满,动力十足。出于这种目的,打卡更像是锦上添花,即使不用任何意志力支撑,人们也能持续行动。然而打卡一旦开始,任务心态其实已经锚下了。

>> 一些“中毒”更深的人,他们的学习动机转移了,甚至连学习的目标也转移了。他们起初还记得做某件事的意义,比如知道学英语是为了与外国人流利地交谈,但时间一长,目标就被简化为每天背20个单词,于是他们每天只是机械地完成、打钩,却忘了所学为何,从此陷入为学而学的境地。

>> 一件事若迟迟没有完成,心里就总是记挂,期盼着早点结束;此事一旦完成,做这件事的动机就会立即趋向于零。

>> 这就是打卡心态的特性:学不到,假装一下;学到了,立即停止。

>> 同时,我们在任务设置时要使用新策略:设下限,不设上限。

◆ 第六节 反馈:是时候告诉你什么是真正的学习了

>> 是否有及时、持续的正向反馈,正是产生学习效果差异的关键。

>> 比如一名大二学生“无悔”曾告诉我,他每天从早学到晚,学6天休1天,如此付出,收获的却是无力和疲累;而另一位读者“傅琴”女士也说,为了应对生活危机,她不停地学习瑜伽、写作、肚皮舞、英语口语、绘画、茶道等各种技能,但内心始终得不到满足,感受不到自我价值。

>> 也许是因为在人造的学习体制内待久了,有些人很难相信“跳过原理,直接实操”的方式是有效的,他们认为这种方法不过是奇技淫巧,强大的毅力和认知才是学习的正道。

>> 但它们超强的欲望和情绪力量却是非常宝贵的行动力资源,如果能让它们感受到学习的乐趣,它们同样会展现强大的行动力,让自己像沉迷娱乐一样沉迷于学习。

>> 所以科学的学习策略是产出作品、获取反馈,驱动本能脑和情绪脑去“玩玩玩”,而不是一味地努力坚持,让理智脑苦苦地去“学学学”。

>> 有作品意识才有未来

>> 有了这种认知,人是会迅速改变的——会拥有清晰而强烈的作品意识,会更加重视输出和运用,会倾心打磨作品,主动换取外界的反馈。

>> 比如以前你学习英语可能会选择每日打卡的方式,但现在你可能会选择直接用:直接翻译一段美文、查询英文文档、阅读英文原版书,或者把手机语言设置成英文……这么做当然会造成一些困难,但为了解决问题,你必定会想办法补全相关知识,所以你的学习行为都能得到即时反馈:要么帮自己或他人解决了一个问题,要么产出了一个有价值的作品,这些反馈带给自己的必然是强烈的成就感和继续行动的欲望。

>> :想创造全新的学习动机,就得放弃一味打卡输入的做法,想办法直接运用或产出作品,获取反馈。

>> ·教是最好的学;

·用是最好的学;

·输出倒逼输入;

·请用作品说话……

>> 那些先行者确实都有相同的品质,他们在学习的时候经常不按常理出牌,不管是不是新知识、技能,他们都直接用、直接做。当然,一开始常常用不好、做不好,但他们肯定要“鼓捣”出一个东西,然后抛出去获取反馈,不断打磨迭代。

>> 如果对方除了情绪上的攻击再无其他内容,那你大可哈哈一笑,忽略就好了。这说明对方不但嫉妒你,还不如你,因为他没法拿出更好的作品或观点来回应,只会发泄情绪、肆意谩骂。在鸡蛋里挑骨头,这事谁不会呢?

>> 他们背单词,不是一遍一遍地看,让所有单词都“看着眼熟”,而是合上书测试自己能否精确地说出含义、发音,并拼写出来;他们练听力,不指望每天重复听音频就能毫不费力地“熏耳朵”,而是回过头来对照原文,不断重听没听懂的地方。

>> 对于背记理解类的学习,自我测试就是最好的反馈。哪里会、哪里不会,通过测试便立即掌握得清清楚楚,我们可以精准消灭盲点,让自己始终处在学习舒适区边缘。那种“翻开书全会,合上书全废”的无反馈式努力正是你被动、落后的根源。《学习之道》一书的作者芭芭拉·奥克利也曾明确指出:主动的回想测试是最好的学习方法之一,比坐在那儿被动地重读材料要好得多。

>> 只是很多同学对错题本不以为意,要么不去写,要么写了不去看,要么去看时因为碰到痛苦而回避,转头回到舒适区里转悠。在没有让自己的情绪脑体会到学习的快感之前,我们总得先逼自己一把,对吧?

>> 这印证了古典的跃迁理论:打磨作品—到达一个小山的头部—受到更多关注—移动到一个更大山头的头部—借助系统推力,实现人生跃迁。

>> 反馈的规律是贯穿始终的,无论什么时候,只要能通过产出换取反馈,你就会不自觉地去钻研探索。

◆ 第七节 休息:你没成功,可能是因为太刻苦了

>> 问题就出在这里,那些持续刻苦、争分夺秒、舍不得休息一下的人,他们的精力总量势必呈一条持续下降的曲线

>> 刻苦者看似无比勤奋,可效果却越来越差,过程中感受到的多是痛苦而不是乐趣,精力消耗严重,以致一旦放松就完全不想再次投入,他们更容易沉溺于舒适的娱乐活动。

>> 反观那些轻松的学霸,他们学习时从不过度消耗自己,只要感到精力不足,就停下来主动休息,这反而使他们精力桶的水位得到快速回升。

>> 不难发现,高效学习的关键在于保持极度专注,而不是靠意志力苦苦支撑,谁能保持长时间的专注,谁就能够在竞争中胜出。然而专注这个品质在信息时代已日渐成为稀缺品质。

>> 大多数人只会本能地告诉自己要更刻苦、更努力,却很少有人能意识到,更科学的模式应该是:极度专注+主动休息,如此反复。

>> 有人会反问:现实生活中哪有这么多“刚好的事情”,难道在面对老师和老板时,自己还能挑三拣四?其实这并不难办:要么重新设定学习内容,调整为合适的难度,要么将目标拆解为更具体的小目标,降低工作的难度,总之,想办法把难度控制在拉伸区范围内就对了。不管面对多么棘手的任务,只要我们愿意动脑筋,总能找到主动调整的空间。

>> 也难怪,当我们忙了一整天,精疲力竭地回到家中,第一件事情往往是往沙发上一倒,此时除了看看微信、刷刷抖音,用轻松的信息给自己来个精神按摩,其他事都懒得做,如果经历了情绪上的波动,精力透支的影响可能会持续很久。

>> 所以,一个真正的自控高手,不是一个只知道冲刺的人,而是一个善于主动休息、保持平衡的人。

>> 一个简单又通用的方法正是前文说的主动培养“极度专注+主动休息”的行为模式。具体的做法就是:只要开始学习或工作,就尽量保持极度专注的状态,哪怕保持专注的时间很短也是有意义的;一旦发现自己开始因为精力不足而分心走神,就主动停下来调整片刻。

>> 符合学霸模式的所有特征:极度专注、主动休息、循环往复。

>> 时间一到,我会立即合上书本或让双手马上离开键盘,然后开始5分钟的休息计时。在这5分钟里,我会做与阅读或写作无关的事情,比如:看看窗外、收收衣服、拆拆包裹,等等,但刷手机、玩游戏这些被动使用注意力的事情我不推荐,因为它们仍然是消耗精力的。

>> 刻苦,是一种宏观态度,轻松,是一种微观智慧。在学习这件事上,普通人的策略往往是“天赋不够,刻苦来凑”。好在我们已经知道学习的秘密不完全在于刻苦,还在于“会玩”,希望你在今后的学习成长中也能玩出水平,玩出风格,成为他人眼中的学霸。

◆ 第六章 行动力——没有行动世界只是个概念

>> 行动力——没有行动世界只是个概念

>> 时常有人夸我行动力强,说我在这个年纪,还能克服惰性、抵制诱惑,在大家都熬夜、刷手机的时候坚持早起锻炼、读书写作,甚是难得,并得出结论:周岭是个自制力很强的人。

>> 整个人浑浑噩噩的,就像一条无人掌舵的小船在生活的洪流里随波逐流,根本无力掌控方向。

>> 或许你并没有意识到,每天早上醒来,我们都会收到一份礼物——纯净的注意力。不管你昨天经历了什么,经过一晚的睡眠,你的精力总会得以“重启”。

>> 但反过来,我们也可能进入另外一种状态。如果起床后我们能刻意避开轻松和娱乐的吸引,先去读书、锻炼,或者做些重要的工作,精力就会呈聚合状态,并自动增强。比如起床后先去锻炼,就能让自己头脑清晰、精力充沛,在这种状态下做重要的工作就会非常顺利,工作越顺利,状态就越好,回路逐渐增强;再比如早起后先去阅读,读得越多,脑子里的问题和感触就越多,反过来又会产生更强烈的阅读欲望,回路逐渐增强。

>> 就像你明明准备第二天早起锻炼、读书或是做重要的工作,然而醒来后还是鬼使神差地拿起了手机——群消息、朋友圈、公众号、抖音、今日头条……一眨眼,半个小时过去了,你还躺在床上。实在没什么新鲜事了,还要把App再点开一次,看看有没有什么惊喜,等到刺激消耗殆尽,无聊渗透全身,再漫不经心地起床,此时的你精神萎靡,内心只希望用更多刺激来填补空虚,哪还有心思去做重要的事呢?

>> 知道和做到相差十万八千里,这其中的差距到底在哪里呢?

答案正是前文所说的“模糊”。

>> 行动力最怕模糊

>> 如果我们的头脑中一直有很多模糊的选项存在,我们就需要花心力不断做选择,而做选择是一件非常耗脑力的事情。我们的大脑有可能为了省点力气,而不自觉地选择那个它最熟悉、最确定的选项——做那些轻松、愉快但不重要的事情。

>> 你陷入怠惰、懒散、空虚的情绪中动弹不得时,往往是因为你的大脑处于模糊状态。

>> 大脑要么不清楚自己想要什么;要么同时想做的事太多,无法确定最想实现的目标是什么;要么知道目标,但没想好具体要在什么时候以什么方式去实现。

>> 认知越清晰,行动越坚定。

>> 正如爱因斯坦所说:“如果给我1小时解答一道决定我生死的问题,我会花55分钟弄清楚这道题到底在问什么。一旦清楚它到底在问什么,剩下的5分钟足够回答这个问题。”

◆ 第二节 “傻瓜”:这个世界会奖励那些不计得失的“傻瓜”

>> 我敢打赌,凡是买了一堆书没读、报了一堆课没上、心中有无数欲望的人,几乎没有主动做成过一件事,比如养成早起、跑步、阅读的习惯,练就写作、画画的技能,考个好成绩,开个好公司,有高收入,等等。这个判断是我基于很多人的经历做出的。

>> 一是凡事必须在看到明确的结果后才行动,如果前景不确定、不明朗,即使别人说得再有道理,我也不愿意投入;二是如果一个道理或方法不能让自己快速发生变化,就不是最优的,所以要不断寻找,这样才有希望找到最好的方法。

当时觉得自己能这么想还挺聪明的,现在回头看,发现自己是精明过了头。这种精明让自己在成长的路上遇到了阻碍,就像一道无形的门槛把我挡在了成长的门外,怎么也跨不过去。

>> 按照他“只字不差”的阅读要求,我竟鬼使神差地做了一个决定:把文章全部用键盘重敲一遍,包括文后重要的留言。一年52周,每周4天,每天约2小时,我就这样“读”完了这些内容。

>> 以前的我爱耍一点小聪明,总希望能先看到结果再行动,反而浪费了很多时间。

>> 自己从来没有主动做成过一件事情的时候,总会以为做成一件事很容易,于是生出很多不切实际的欲望和想法,而欲望越多,就越做不成事

>> 如果我想养成一个习惯,通常不会以21天为标准,而是要求自己至少做半年。我相信一件事情要是能被持续做180天,它就会成为习惯。

>> 做一个有理有据的“傻瓜”

之所以在“傻瓜”这两个字上加上引号,说明我并不认为这样的人真的傻,有时反而是一种聪明,这里的“傻”,并不是盲目和冲动,而是有原理、有依据的坚定。

>> 如果你觉得别人讲的道理有理有据,而自己暂时无法反驳,碰巧自己又非常想做这件事,那就相信他们说的是对的,然后笃定地行动

>> 同样的道理摆在面前,有的人觉得那是鸡汤,没什么用,而有的人却觉得那是干货,好用得不得了。如果你能够持续行动,我相信,这个世界一定会特别偏爱你。

◆ 第三节 行动:“道理都懂,就是不做”怎么破解

>> 他们阅读了很多有道理的书,收藏了很多有道理的文章,觉得自己无所不知,却始终不能俯下身子去行动。因为他们总认为自己还没准备好,担心方法不是最优的,贸然行动会走弯路等,殊不知,这样的观望、等待本身就无效率可言。更使人困扰的是,道理知道得越多,行动力反而越弱,因为似乎总有更好的道理等着我们去发现。

>> 很多人因为缺乏耐心、急于求成,总想跳过行动环节,寻求捷径,最后发现:这才是走了弯路,真正的捷径正是那条看起来漫长且低效的行动之路。

>> 当我们领悟“一天不看手机也不会有任何损失”时,头脑一下子就清醒了,对手机信息的危害看得无比通透,然而没过几天,再次碰到这种情况时,我们又会把书放到一边,掏出手机开始玩。

>> 当然,如果你现在就是一个“知而不行”的人,千万不要自责,因为“避难趋易”是人类的天性,这种选择取向深深地刻在了我们的基因里,所以凡是能简单得到的,人就不会选难的;有短的反馈回路,人自然不会选择长的——这就是大脑做选择时的默认逻辑。在缺少觉知的情况下,我们很难察觉这一点。

>> 把认知当成技能,知道或想通一个道理时,不要高兴得太早,想想后面还要做大量的练习,这样就不浮躁了。

>> 当你每次产生一个想法时,带有这个想法的神经通路中的生化电磁阻力就会减少一些,就像在丛林里清出一条小路一样。一开始非常费劲,但是随着你经过这条路次数的增加,这条路也会开辟得越来越彻底,你所遇到的阻力也会慢慢变小。到最后,这条小路会变得平坦而宽阔。

>> 不发生真正改变的学习都是无效的学习。

>> 现实和理论都告诉我们:懂得百点不如改变一点。真正的成长不在于自己懂得了多少道理,而在于自己改变了多少。

>> 对成长来讲,道理都是“空头支票”,改变才是“真金白银”。当你凡事都以改变为标准时,你的成长路径会更加清晰。

◆ 第七章 情绪力——情绪是多角度看问题的智慧

>> 在一定的前提下,贫穷确实会使人变笨,这不是因为贫穷让人能力不足,而是因为贫穷造成的稀缺俘获了人的注意力,进而降低了人的心智带宽。

>> 每个人的头脑配置都差不多,但短缺压力会让人多一个后台运行的隐藏程序,虽看不见却消耗着大量的心智资源,所以有人会将剩菜剩饭留到第二天继续吃,他们认为这样很节俭;有外债压力的人,更容易在辅导孩子写作业的时候对孩子发火;而终日忧心忡忡的人,也很难静下心来学习。这些现象的出现都是因为当事人心智带宽不足,自己无力考虑长远问题,难以保持耐心和专注,在面临选择的时候不自觉地偏向那个最安全、最能快速见效的选项。

>> 事实上,任何能制造压力的事件都会挤占我们的心智带宽,比如明天的演讲、考试的期限、失业的担忧,等等。只要我们的注意力被某一个巨大的事物吸引,我们就有可能进入稀缺状态,进而降低心智带宽,做出不明智的行为。

>> 这么多欲望就像多线程任务同时在电脑中运行,心智带宽被占用殆尽,自然就没有心力支撑自己的远见、耐心、行动力和自控力了,最终只能让自己在痛苦中彷徨,甚至做不好当下的小事。

>> 当一个人同时面临很多任务的时候,他的心智带宽就会降低,反而没有了行动力和自控力。

>> 现代生活虽然缓解了生存压力,却又带来了自控上的压力。抵制诱惑和欲望无一不消耗我们的心智带宽,而那些有着大把时间和金钱的人士,如果没有足够的心智带宽,也会让自己陷入无聊和空虚之中。

>> 第一帖,保持环境觉知,理智选择。

>> 第二帖,保持目标觉知,少即是多。

>> 《见识》的作者吴军曾说:“很多人认为我是个善于利用时间的高手,问我如何才能同时做更多的事情。事实上,我做事的诀窍恰恰和大家想的相反,就是少做事,甚至不做事。我时常站在一生的高度去审视自己真正要做的是什么,然后打破思维定式,拒绝所有那些即使不去做天也不会塌下来的事情。”

>> 知道自己想要什么,才能免于盲目奔波,才能让自己从忙碌中解脱,才有时间使用心智带宽审视自己,把更多的精力集中到最重要的事情上去。

>> 第三帖,保持欲望觉知,审视决策。

>> 脑子里存在大量任务和念头的时候,往往是我们行动力最弱的时候。

>> 真正的行动力高手不是有能耐在同一时间做很多事的人,而是会想办法避免同时做很多事的人。

>> 第四帖,保持情绪觉知,谨慎决定。

>> 第五帖,保持闲余觉知,自我设限。

◆ 第二节 单一视角:你的坏情绪,源于视角单一

>> 我们就很容易以偏概全地对待这个世界,然后产生各种偏误。

>> 只是有的人面对再好的事情时都盯着一点瑕疵不放,而有的人却能从任何一件糟糕的事情中找到闪光点并放大,忽视其他不足之处。

>> 《反本能》一书的作者卫蓝曾这样描述路径依赖:当我们长期进行一种行为的时候,大脑会慢慢形成一个专门处理这个行为的“绿色通道”,所以当自己面临相似的场景时,大脑会对这种行为进行优先选择,并进一步形成自动化反应。

>> 很多人情绪不好,是因为他们把自己做的假设当成了事实,在不确定对方真实想法的情况下,直接把情绪发泄了出来。

>> 五是多运动。适当的有氧运动会提升我们体内多巴胺的水平,而多巴胺对于创造力和多角度思考能力来说都很重要。锻炼不仅能帮我们从负面情绪中快速走出来,也会引导大脑从新的角度看待事物,或者从不同角度观察问题,所以,越是心情不好的时候就越要多运动,越是想不通的时候越要多运动。

>> 这种经历我也经常有,因为我有每日反思的习惯。所以每当自己心情郁闷、无法排解的时候,我就会打开电脑,把心中的烦恼全部倒出来进行复盘,梳理的过程中,自己往往会拨云见日,真的很神奇。

无论什么时候,你的笔或键盘都能帮你跳出单一视角,看到更多维度。

◆ 第三节 游戏心态:幸福的人,总是在做另外一件事

>> 所有人都备感煎熬,每次都是“跑前很紧张、跑时很痛苦、跑后很无奈”。

>> 不要让事情本身束缚了你的情绪和注意力。

>> 一个人如果整天做自己不想做但又必须做的事情,日子就会变得灰暗无趣,然而面对压力,我们真的就只能承受吗?未必。或许我们的情绪和注意力只是被事情本身给占据了,因为困难和压力总能把人的情绪和注意力抓得死死的,让你很难看到其他角度。

>> ·我并不是在做跑步测试,我只是在玩追逐游戏;

·我并不是在写作业,我只是在挑战自己的速度;

·我并不是在洗衣服,我只是在活动自己的手脚;

·我并不是去见领导,我只是和一个普通人聊天;

·我并不是为老板做事,我只是为了提升自己。

>> 事情本身并不重要,我们只是在通过它获取另外一种乐趣,顺便把这件事给做了。在心理学上,这个方法叫作“动机转移”。

>> 胡适先生也说:怕什么真理无穷,进一寸有进一寸的欢喜。

>> 一定有人会对这些方法嗤之以鼻,因为从本质上看,这更像是一种自我欺骗。事实上,人是一种自我解释的动物,世界的意义是人类赋予的。

>> 为自己而做可以解放情绪,为玩而做可以解放注意力。

◆ 第八章 早冥读写跑,人生五件套——成本最低的成长之道

>> 清晰的时间安排、强健的体魄、良好的精神状态、不受干扰的锻炼氛围、专注的学习环境、从容的工作心态、持续的个人成长等。

>> 六、提前准备。除了晚上提前准备好衣物,更重要的是要提前想好起床之后具体要做什么,比如第二天早上要是下雨了(不能外出跑步)应该怎么调整事项,如果晚醒了半个小时又该安排哪些学习内容……总之,要针对各种可能出现的情况做好预案。当脑中有具体清晰的目标、规划和步骤时,第二天起床才不会犹豫,否则很容易临时改变主意再睡一会儿。情绪脑追求舒适的意愿是很强烈的,但如果理智脑提前和它沟通好,行动的阻力就会小很多。

>> 七、明确遇到哪些情况时可以不早起。早起要考虑实际情况。偶尔几次无法早起时不要焦虑或内疚,只要给自己定好原则就行,比如遇到以下几个场景我就允许自己晚起床:

·生理低谷期;

·前一天晚上参加聚会,睡得太晚;

·第二天需要开长途车或做其他需要消耗大量精力的重要活动;

·环境突然变化,不适合早起活动……

>> 成功人士一旦发现别人的好习惯,就会立刻将这个习惯变成自己的。

◆ 第二节 冥想:终有一天,你要解锁这条隐藏赛道

>> 普通人和聪明人最大的能力差异是什么?是长时间保持极度专注的能力。正如《暗时间》一书的作者刘未鹏所说:能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要的习惯。

>> 闭眼静坐,专注于自己的呼吸,每天持续15分钟以上……你会感受到它的效果。

>> 所以人们一旦在现实世界中受困受阻,就会不自觉地去虚拟世界体验舒适与自由,人类避难趋易的天性也正好有了出口。

>> 还有些人会因这种习惯,每天睡觉前不自觉地开启“胡思乱想”模式,杂念丛生,无法安然入睡。他们虽躺在床上,脑子里却像一壶刚烧开的沸水,思绪难以平静,彻夜不眠。

>> 人们既无法赶走它,又不愿去碰它,于是不得不让它长期占据着自己的心智带宽,让人无心做事、郁郁寡欢。

>> 对于那些过轻的小球,保持专注就能给它们加码,让它们稳定下来;对于那些过重的小球,你冥想时必须正视它们、接纳它们,否则你无法做到专注。一旦正视、接纳之后,那些隐性的压力也就不那么让你伤神了,这也是我一直倡导大家把心中的困惑写出来的原因,因为只要写出来,那些紧张、担忧、畏惧、害怕等情绪就会在清晰的观察下无处遁形,小球的重量自然会减轻。只要持续练习,脑中的小球就能保持最佳质量,既稳定,又可控,人们就能把注意力和情绪锁定在一个相对理想的状态下。

◆ 第三节 阅读:如何让自己真正爱上阅读

>> 读书这件事虽然好,但陷阱不少,不是想读就能读的。

>> 想要快速成为一个行业的高手,最好的方法就是和行业专家交流,直接向他们请教

>> 我们每天花费在阅读上的时间越多,花在无意义的娱乐活动上的时间就会越少,思维密度就会越来越大。

>> 只要紧紧盯住“改变”这个根本目标,很多阅读障碍就会立即消失。

>> 第一个是要特别注意自己在阅读时产生的关联。如果一个知识点让你想起了其他的知识、引发了关联,一定要留意,并把它记下来。知识产生关联说明知识网络正在形成或加固,这么做还可能创造新知识,这正是学习的核心方法之一。

◆ 第四节 写作:谢谢你,费曼先生

>> 比如有一次他给小费曼读《大英百科全书》中关于恐龙的知识:“恐龙的身高有25英尺[1],头有6英尺宽。”读到这儿,他没有继续念下去,而是停下来对费曼说:“我们来看看这句话是什么意思。也就是说,假如那东西站在我们家的前院,它那么高,足以把头伸进楼上的窗户。不过呢,由于它的脑袋比窗户稍微大了些,它要是硬把头挤进来,就会弄坏窗户。”这样一解释,原本陌生的概念就有了熟悉的事物作为参照物。

>> 无论学习什么东西,都要努力琢磨它们究竟在讲什么,它们的实际意义是什么,然后用自己的话将其重新讲出来。

>> 所谓费曼技巧就是通过自己的语言,用最简单的话把一件事情讲清楚,最好让外行人也能听懂。

>> 你不能自己站在11层,然后假设你的读者站在第10层,指望着只要告诉他第11层有哪些内容就让他明白。你的读者站在第一层,你必须知道你脚下踩着的另外10层到底是怎么构造的。这就迫使你对所掌握的,或之前认为正确的那些东西做彻彻底底的、深刻的反思,你的受众越是不懂,你需要反思的就越深刻。

>> 又一次,读者“晴天”问我:前额皮质、元认知、理智脑这三个概念是什么关系?我突发灵感,想到了一个类比:前额皮质就是理智脑和元认知的“肉身”。这次算我扳回一局,因为想到一个合适的类比是一件非常难得和宝贵的事。

>> 用自己的语言重新表达就是在调动自己的千军万马。

>> 所以,一个人想要真正成长,一定要学会写作,因为“只读不写”的学习是不完整的,是低效的。而写作时如果不学会用自己的语言转述,则是无用的。

◆ 第五节 运动:灵魂想要走得远,身体必须在路上

>> 所以运动不是关键,运动之后的活动安排及环境刺激才是关键。有效的模式是这样的:在运动后的1~2小时内进行高强度、高难度的脑力活动,比如阅读、解题、背记、写作、编程,等等,或是一些需要复杂技巧的体力活动,诸如舞蹈、钢琴,以及参加不同于以往的社交活动,如接触新的环境、人物或事物,这么做可以让新的神经元受到刺激,不断生长。换句话说,运动之后,脑子需要充分接受考验或挑战,才能让自己不断地变“聪明”。

>> 让自己保持做有氧运动时有些气喘的状态。比如跑步时,保持足够快的速度直到有些气喘,持续1~2分钟,然后改为快走,调整呼吸,重复即可,这个活动量几乎每个人都可以达到。

◆ 结语 一流的生活不是富有,而是觉知

>> 眼前就像出现了一个真空地带,我竟想不起自己这几年到底做了什么,甚至说不出一两件印象深刻的事。虽然我每天按部就班地生活,但好像什么也没做,生活就像无声的溪水,每天从身边流过,但定睛一看,什么也没有留下。那一瞬间,我产生了一种深深的失重感,第一次体会到了焦虑。

>> 记录日程虽然没有让我成为像柳比歇夫那样厉害的人,但提高了我对时间的敏感度。因为我每记录一笔浪费掉的时间,比如因看手机荒废了2小时,心里就会有一种愧疚感,进而就会不自觉地希望自己减少这种浪费,毕竟记录这样的日志并不光彩,谁愿意自己的生命都是由这些无聊的事情组成的呢?当然我有时候也过得异常忙碌,常常忙得晕头转向,看着密密麻麻的日志,也不禁会想:“自己到底在忙什么?”因为这些忙碌往往都是在被动应付外界的压力,而非自己主动在追求什么。于是我问自己:如果一直被外界的安排牵着走,即便每天过得很“充实”,又有什么意义呢?

>> 比如有一次开车后我觉得很累,在当天的反思中,我发现自己在开车时,身体的一些部位会不自觉地保持紧张和僵硬,从那以后,我便刻意提醒自己保持放松,用最小的力气去完成动作,尽量让汽车在启动和停止时柔和顺畅。不久后,开车成了我的一种享受,家人也反馈坐在车里非常舒适,没有之前的急停、急刹了。

比如有一次被领导批评。他用词刻薄,让我当场就想回击。在当天的反思中,我认真分析了他的批评,觉得他指出的问题还是很到位的,虽然他情绪不好,但出发点是好的,而且他对大多数人都是这样的脾气,并非单独针对我。想到这里,我当即就释然了

>> 无论何时,都要把对方的情绪和意见分开对待,这样,即使在最糟糕的事情中也能学到有用的东西。

>> 好的反思是感知生活中最触动自己的点,难受的、欣喜的、念念不忘的……这些点正是处在自己成长的舒适区边缘的感悟,人在舒适区边缘学习,成长是最快的。

>> 反思天然有正视痛苦的力量。去反思,去记录,你就会发现,痛苦哪里是什么坏事,那简直是上天给我们的成长信号与提示!

>> 反思的最终目的是改变,而不是形式的完美

>> 对自己极度坦诚。

>> 我一直很想知道,一个人觉醒的起点到底在哪儿?现在大致有了一个答案,那就是:觉知。当一个人能够觉知到什么是好,什么是不好的时候,就必然会主动做出新的选择。

◆ 后记 共同改变,一起前行

>> 封面中的蓝色和红色是本书的两种主题颜色,它们分别代表大脑的理性力量和感性力量,中间的留白隐约构成了人的大脑,寓意是一个人若是学会了用知识和智慧驱动理性和感性这两种力量,就可以获得认知觉醒。希望本书能帮助人们走出混沌,通过思考获得清醒的认知、清楚的目标、清晰的路径和清爽的情绪。