0%

本质是讲述:进化的稳定性策略(ess)

教授的观点

每一个生命体都是受基因操纵的生存机器,出于自我保存的目的,基因总是无意识的操纵生命个体做出种种行为,竭尽全力维护自己的基因,甚至不惜赴汤蹈火。在一个种群中,某个突变基因为了保存自己而做出越轨的行为,会对种群的稳定性造成伤害,所以自然选择会对破坏种群稳定性的个体做出惩罚,以使种群再次达到稳定。

“自私” 的意思是:自我保存的强烈的目的性

动物界内有很多动物表现出舍己为人的利他行为,很多科学家认为生命体并不是天生自私,他们会为了种群的利益而采取利他行为,这几乎成为学界认可的常识。但是道金斯教授则澄清了这个误区,
他说生命体的利他行为其实并不是为了种群的利益,而只是基因为了最大限度的保存现有利益而做出的利他行为,其目的仍是自私的。

就比如亲代个体控制生育并不是为了种群的利益,减少对食物等资源的竞争,而是为了最大限度的保存现有的子女成活。因为子女越多,所能享用的食物越来越少,亲代不能保证所有子女都成活,所以控制生育的行为表现为利他,但目的确实是自私的。

颠覆的常识

进犯行为说明每个动物都是赌徒,为了获得最大的好处,他们倾向于坐等良机而不是穷凶极恶

同种群的两个动物为了争夺食物、领地、配偶等资源势必要进行一场搏斗。常识认为这场搏斗越激烈越好,因为狭路相逢勇者胜,战胜者才会赢得资源让自己的基因存活下去。但是从自私的基因这一观点来看,那种破釜沉舟的好斗精神不会带来好处,也会造成损失,而且不仅是时间和精力的损失,因为其他的竞争对手也会抢夺胜利成果,鹬蚌相争渔翁得利,穷凶极恶并不可取。只有暂时克制自己,坐等良机到来,等到对手虚弱的时候再趁机行事,自己方能安全生存,这才是明智之举。看吧,常识往往会使人误入歧途啊。

计划生育这章主要说的是动物的控制生育的行为并不高尚,同样是为了自私的目的

常识上认为一个个体控制生育是为了种群的利益,为了减少资源的竞争,但是实际情况却是个体之所以调节生育的子女数,绝非出自利他性动机,而只是出于自我保存的目的。如果对生育不加控制,生育的子女过多,超过种群可以承受的能力,食物短缺加上亲代精力有限无法照顾好每一个幼儿,导致能存活的子女数少于控制生育所能存活的子女数,这样得不偿失。繁殖是代价昂贵的事情,为了最大限度保证现有子女的存活数,将自身基因延续下去,它们不得不对生育进行控制。

两性战争澄清的误区则是不止雄性容易出轨,雌性也是半斤八两

为了最大限度的使自己的基因存活下去,两性都偏向于减少对于幼儿的投资从而设法同其他配偶生更多的子女。但是,雄性在进化上有更多的优势,因为雄性的精子产生更加容易,而且孕育这件事主要靠雌性,时间和精力耗费不少,已经大伤元气,没有更多的精力去寻找更多的配偶。所以,雄性更偏向于抛弃雌性与子女,而雌性受到剥削。为了减少被抛弃造成的损失,雌性可能采取的方针有四个,一个就是欺骗另一个雄性,或者将胎儿流产并尽快找到新配偶,坚持到底自己抚养子女或者不等雄性抛弃她,她先抛弃雄性。谁先抛弃对方,谁就占便宜,这是个很令人不愉快的事实。为了欺骗对方付出更多的资源在幼儿身上从而和其他配偶生育更多子女,雌性也会做出抛弃行为。所以忠诚才是两性关系中最为重要的品质。我觉得这样的理论也可以用于关照人类社会,为什么出轨的多是男性,因为这是基因决定的。同样的,女性出轨也更加值得关注。

代际战争也很精彩,围绕亲代投资这个概念,说明了基因的自私属性

做母亲的该不该有宠儿,她对待子女该不该一视同仁?从自私的基因角度来看,母亲对每个孩子都投入食物,时间,照料等资源是不明智的,应该选择更能使她的基因生存下去的孩子进行投资。这一章引入了亲代投资概念,意思是说亲代对子女个体进行的任何形式的投资,从而增加了该子女生存的机会,但是却减少了了其他子女生存的机会。这种投资在动物界很广泛,那些身体羸弱的幼儿,和强壮的兄弟姐妹相比,耗费食物而且存活下去的机会也更加渺茫,他从母亲处获得的基因就不能延续下去,所以母亲为了延续基因的目的会对长得强壮或者更加吸引他们注意的孩子投以更多的资源,对那些羸弱的幼儿不加照顾,任其自生自灭或者纵容兄弟姐妹把它吃掉。布谷鸟为了获得更多食物,或大声尖叫以引起养父母注意,为了不招来捕猎者,养父母会把食物喂给叫声最大的布谷鸟;布谷鸟出于自私的目的,还会杀死它的兄弟姐妹,这不是骇人听闻,而是经过动物学家证实的。因为大声尖叫和杀死兄弟姐妹的基因能够保证布谷鸟得到食物从而存活下来,所以这些基因会扩散开来,从而达到进化上的稳定。那些认为母亲会对每个子女一视同仁的观点,看到这样的例子估计也会大跌眼镜。所以,道金斯教授说我们必须把利他主义的美德灌输到子女的头脑中去,因为我们不能指望他们的本性里有利他主义的成分。

好人会有好报这章则说明博弈中背叛并不总是奏效

常识上都认为,在囚徒困境博弈里,不论采取什么样的对策,背叛策略总是最为划算的。但是道金斯教授又介绍了更加复杂的重复性博弈论,用数学加计算机的方式得出结论,只有在一次性的简单博弈中,背叛才是理性的策略,而在重复性博弈里,善良策略总是奏效的,能够带来更大的收益。因此,即使我们都是由自私的基因掌舵,好人终将有好报。
但蝙蝠的好人好报是真的有这个基因和行为。参考蝙蝠的室友被饿,蝙蝠愿意养室友自己的血。

而人这个特殊在哪里?是 自我意识与觅母(meme)

问题是:人类与世间万物并无本质区别,都只是各自基因的运载工具而已,两者岂不是矛盾了?这又该如何理解?

本质是:这里的关键所在就是人类具有自我意识,而依靠自我意识可以摆脱基因的控制。同时,我们还拥有一种人类所特有的复制基因,作者将其命名为觅母(meme)。

什么是觅母?其实,所谓的觅母就是一种“文化基因”,它存在于我们的大脑中,并且也能通过模仿实现自我复制。它可以是一首歌曲、一本书的内容或者某些人的观点。这些觅母通过人类的大脑进行复制传播,就好比基因通过身体复制传播一样。而对于人类而言,觅母比基因更重要。比如孔子的基因到今天可能已经所剩无几,但是孔子的觅母却仍然存在于千千万万个人的大脑之中。

因此,作为拥有自我意识和独特文化的人类,我们完全可以同我们自私基因的本能相抗衡。无论是懒惰也好,逃避痛苦也罢,这些都只是基因控制你的工具而已,你所要做的就是认识它、警惕它并最终摆脱它的控制。

人类我们是作为基因机器而被建造的,是作为觅母机器而被培养的,但我们具备足够的力量去反对我们的缔造者。在这个世界上,只有我们,我们人类,能够反抗自私的复制基因的暴政。

特别的总结:

生物演化过程:原始汤 -> 复制因子 -> 自然选择 -> 基因机器(载体,人,动物植物)

原始汤:
海洋中只有一些简单的化合物,比如水、二氧化碳、甲烷、氨等,它们在闪电或紫外线照射的能量影响下,反应生成了一些有机分子。这些有机物质在某些地方积聚起来,受到能量的进一步影响后,结合成更大一些的分子,就这样,越来越多的分子在原始的海洋中自由地漂浮着。
复制因子:到了某一时刻,一个非凡的分子偶然形成。我们称之为复制基因。它并不见得是那些分子当中最大或最复杂的,但它具有一种特殊的性质——能够复制自己。
自然选择
上述的复制基因产生后,为了更好地生存下去,它需要尽可能地复制自己。但复制无法保证百分百的完全精确,于是随着复制错误的产生和扩散,原始海洋里便充满了由好几个品种的复制分子组成的种群,而不是清一色的全都一样的复制品。这样一来,不同品种的复制基因就形成了竞争关系,互相争夺海洋中用来复制自己的材料。在竞争中,有一些复制基因相比其他基因而言可能寿命更长、复制速度更快或者复制精确度更高,具备这三个特点的复制基因明显更具生存优势。
于是经过一段时间的演化,那些生存时间短、复制速度慢或出错率高的基因就日渐稀少,甚至有一些品种难逃绝种的命运。这便是自然选择,也就是进化的实质。
基因机器
为了能够生存下去,各种复制基因竭尽所能,它们为自己制造容器,即赖以生存的运载工具。最原始的生存机器也许仅仅是一层保护衣,后来随着新的竞争对手陆续出现,它们拥有更优良、更有效的生存机器,因此生存斗争随之逐渐激化。生存机器的体积越来越大,其结构也渐臻复杂,这是一个积累和渐进的过程。

自私基因和人生意义的关系

从自私基因的角度来看,人生确实没有意义。所谓的意义是拥有自我意识的我们自己赋予的。
因此,作为独立的个体,你可以认为人生有意义也可以认为毫无意义,你也可以赋予自己的人生独特的意义,大到改变世界、造福人类,小到享受生活、周游世界,甚至结婚生子抚养孩子长大也能成为意义。
基因是“自私”的,但人生仍然是你自己的。

参考

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

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

https://www.zhihu.com/question/29961944

https://www.zhihu.com/search?type=content&q=%E8%87%AA%E7%A7%81%E7%9A%84%E5%9F%BA%E5%9B%A0

迪士尼提前攻略

目标:玩得开心
拆解:多体验,保持轻松 -> 时间保持充裕,玩好玩的项目和看好玩的演出
计划:安排合理的行程(√) 或者 砸钱

具体计划:

1. 提前准备

  • 证件:身份证
  • App:上海迪士尼度假区 和 注册
  • 随身物品:手机、充电宝、水
  • 衣服:运动装(运动裤和运动鞋)、雨衣、头饰
  • 额外:早享卡
  • 随申码:支付宝上搜索
  • 当日早餐

PS:

  1. 有些攻略提及不带包会有更快进入安检,但充电器手机身份证容易遗失,计划继续带
  2. 住需要在度假区附近,方便早起

2. 游玩路线

行程:(按顺序)

  • 早上:
    1. 早起排队 + 取票 + 关联门票到APP
    2. 飞跃地平线(门口右边)
    3. 米奇欢迎会(演出10.30)
    4. Tron极速光轮
    5. 喷气背包飞行器
    6. 抱抱龙冲天赛车
    7. 冰雪奇缘演出(演出11.30)
  • 中午:
    1. 园区:巴博萨烧烤吃的猪肋排饭
  • 下午:
    1. 风暴来临(演出13.00)
    2. 加勒比海盗-沉落宝藏之战
    3. 雷鸣山漂流
    4. 小矮人矿山车
    5. 爱丽丝梦游仙境
    6. 小熊维尼历险记
    7. 冰雪盛典(18.00 18.30两场)
  • 晚上:
    1. 吃饭:小镇餐厅:丼丼屋-芝乐坊-大食代
    2. 继续玩

推荐项目:

  • 飞跃地平线
  • 加勒比海盗 沉落宝藏之战
  • Tron极速光轮
  • 抱抱龙冲天赛车
  • 小矮人矿山车

推荐演出:

  • 风暴来临剧场
  • 花车巡游
  • 圣诞季冰雪盛典(不一定有)
  • 烟花秀

3. 附:

  1. 园区内借充电宝的餐厅商店位置分别是:m大街购物廊-巴博萨烧烤-皮诺丘餐厅-星露台餐厅
  2. 玩漂流会用到雨衣,现场有购买
  3. 建议不带吃的

参考:

怎么做攻略?

  1. 明确目标 -> 要去的地方、做的事情
  2. 查阅已有攻略,关注下面3-4点 + 攻略个别提示
  3. 安排好时间、路线、方式,注意保持buffer
  4. 安排好衣食住行
  5. 回顾 + 总结(客观情况 + 主观体验 + 成本(时间/金钱)+ 问题和下次优化 )

文档

背景:

用了Hexo作为博客方案后,在多端使用时,要拷贝源文件 & 需要确保已配置好NPM环境。有一部分的维护成本。

原因:

  1. Hexo在Github上的master是编译过的二进制文件,并非源代码
  2. master上的二进制文件,它是不可逆的,所以在其他端上无法直接使用(写博客是不行的)
  3. Hexo需要Node环境

问题优先级:

  1. 寻找一个能把源代码进行多端同步的方案
  2. 解决环境配置问题

多端同步方案:

以下是3个方案的关键成本对比,包括:

  • 维护成本:应尽量低,并能尽量保证使用体验
  • 部署成本:应尽量低,能快速接入
  • 费用成本:(环境)配置应尽量低
方案 维护成本 部署成本 费用成本
硬件同步(硬盘/U盘) 高,需要携带物理介质 一个U盘价格
云服务同步(百度云/腾讯云) 低,下载对应客户端 低,云客户端部署容易 无,不考虑会员
Github 低,搭建Github分支 低,Git环境部分系统集成

因为本地使用了Mac,集成了Git,并且Git命令学习0成本,所以最终使用了Github方案

方案实现:

假设,两台机器,A有相关环境配置&源文件;B是全新环境。
核心:将github.io仓库拆分2个分支,来分别管理二进制文件和源文件

  1. 将github.io拆分2个分支,来分别管理二进制文件和源文件
    • 分支1 master,存放用于展示博客的二进制文件
    • 分支2 hexo,存放hexo源文件
  2. 在A机器中,将hexo相关config文件配置好,达到hexo -g/hexo -d 能直接将二进制文件发布到master分支
  3. 在A机器中,将hexo源文件上传到hexo分支
  4. 在B机器中,配置好环境,通过git拉取仓库,并且切换到hexo分支。
  5. 在B机器中,在hexo分支中new post 正常创建博客写作。
  6. 在B机器中,通过git add/commit 提交新博客在hexo分支
  7. 在B机器中,执行hexo g -d生成。因为hexo config中已经配置过,hexo g后会发布到master分支。所以这步是需要执行后才能发布博客,并且必须执行。

细节:

  1. 当用到了主题,而主题也是git的,提交前直接删到主题文件下的.git文件。

    也可以用submodule同步

  2. 填写gitignore

    1
    2
    3
    4
    5
    6
    7
    8
    .DS_Store
    Thumbs.db
    db.json
    *.log
    node_modules/
    public/
    .deploy*/
    CNAME
  3. 新机器维护方式:

    1
    2
    3
    4
    5
    6
    7
    8
    git pull origin hexo 
    //先pull完成本地与远端的融合
    npm install //注意,这里一定要切换到刚刚clone的文件夹内执行,安装必要的所需组件,不用再init
    hexo new post " new blog name"
    git add source
    git commit -m "XX"
    git push origin hexo
    hexo d -g

    环境配置问题思路:

    统一在私有云服务器上实现生成和发布,客户端不需要关心环境问题。

  4. 私有云服务器上搭建Node环境

  5. 通过协议,讲写好的博客上传到私有云

  6. 私有云直接实现hexo发布

引用:

https://zhuanlan.zhihu.com/p/26625249
https://zomfice.github.io/2018/02/25/Hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA-%E4%B8%89-%E5%A4%9A%E8%AE%BE%E5%A4%87%E5%90%8C%E6%AD%A5/
https://www.zhihu.com/question/21193762/answer/79109280
https://shencai.xyz/2019/05/08/hexo-github%E5%A4%9A%E7%AB%AF%E5%90%8C%E6%AD%A5/

答辩旁听总结

  • 旁听了h、k、s、l、l共五位同学的答辩,记录了一些评委看重的点
  • 结合这次和上次都给过别人做过答辩素材,记录了其中一些通用思路

对上述2点进行一些梳理。

以下会直接结合当前的UI卡顿优化的工作来描述思路,同时也是对当前进度的继续升华、查漏补缺。

一、内容背景

方案、项目、系统的背景,为什么要优化?

简单精炼介绍

UI卡顿:用户体验卡顿反馈数量高

二、核心问题

当前方案、系统核心问题是什么?

优化前的数据、图对比,后面惩戒优化后的对比

UI卡顿:

  • 无法量化卡顿(卡顿原理、卡顿表象(主线程得不到调度、主线程耗时)、定义卡顿、引入流畅度)
  • 无法快速定位卡顿(浩棉ppt:现有流程问题,举例开发者如何慢速定位;没有监控,引入监控)
Read more »

流直播卡顿监控

一、背景

流直播业务中多场大型直播(蔡徐坤、TFBOYS)出现用户投诉直播画面卡顿问题,但客户端在直播时无法更快更直接定位问题,因此针对已知问题增加debug页面,输出关键信息,方便快速响应。

二、问题汇总

在当前业务中,直播视频数据流程是如下:

  • ①直播现场麦克风、摄像头进行音视频数据采集,上传后台
  • ②后台进行编码和封装成HLS(进行TS切片和M3U8更新)
  • ③后台分发到各CDN
  • ④客户端定时请求M3U8文件,并进行播放

因此结合音视频理论和多次直播实践,总结出以后可能会碰到的问题:

  1. 流信息异常(流程①、②出错)
  2. 后台(上游)编码缓慢(流程②耗时长)
  3. 数据请求失败(流程③后台、运维出错;流程④客户端请求逻辑出错)
  4. 播放器读取数据不及时(流程④客户端网络问题)
  5. 播放器音画不同步(流程④客户端性能问题)
Read more »

QQ音乐MV播放杂音问题跟进

问题背景

QQ音乐Android端播放MV视频《凤凰花开的路口》时带有如电流声一般的杂音,影响用户的正常体验。

问题分析

在初步定位中,发现有如下特征:

  • Android端杂音问题必现
  • iOS、PC端能正常播放《凤凰花开的路口》,没有噪音(各端都是统一用hls格式播放)

对于该问题,定位思路如下:

  • 梳理ijkplayer流程
  • 找到切入点排查

(一)ijkplayer流程

结合上图,总结关键步骤(图中内容从左往右,以音频解码播放为例):

Read more »

日本關西隨筆

6月底到日本關西團建,記錄一些見聞和心情

一、目標

此行出遊日本目標為Team Building,但對於我個人來說:

  • 脫離工作
  • 增廣見聞
  • 購物
Read more »

获取CPU情况方法

CPU是性能优化其中一环,对常规的CPU收集手段整理并进行沉淀。
代码:CpuDumper

一、CPU占用

1、proc/stat

  • proc/stat节点记录的是系统进程整体CPU的统计信息
  • 文件中的时间单位,sysconf(_SC_CLK_TCK)一般地定义为jiffies(一般地等于10ms)
  • 总的cpu时间 = 前七个变量(user, nice, system, idle, iowait, irq, softirq)之和
  • 上述时间为一个累计时间,需要在两个时间点分别读一下cpu快照,设为total_time_old 和 total_time_new,则两个值相减即为这段时间内的总CPU时间total_time_delta,然后想办法读一个进程或线程在相同时间段内的cpu时间proc_time_delta, 则该进程或线程的cpu使用率即为( proc_time_delta / total_time_delta )* 100%
  • 项目代码:CpuDumper.dumpSystemRate
Read more »

Android StateMachine分析

状态模式

简介

  • 例子:按钮控制电梯状态:电梯有开门、关门、运行、停止、上升、下降、选择楼层等状态。每种状态改变,都有可能根据其他状态来更新处理,如在上升中不能开门。在实际编码中,考虑遍历完各种情况状态,需要引入大量的if…else if 或者 switch case,对可读性、维护性、扩展性带来挑战。
  • 问题:对象如何在每一种状态下表现出不同的行为?
  • 解决:状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。(第一句话解释:行为会随内部变化而变化,如在电梯停止和上升时,点击选择,将会得到不一样的行为。第二句话解释:从外部角度来看,如果使用的对象能够完全改变它的行为,那么这个对象会是其他类的实例化。但实际上它只是引用了不同状态对象来造成类改变假象)
  • 适用:一个对象的行为取决于它的状态;代码中包含大量与对象状态有关的条件语句。
  • 优缺点:优点:通过将特定状态相关的行为局部化,并且将不同状态的行为分割开来来实现解耦;使得状态转换显式化。缺点:增加系统类和对象的个数,实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  • Read more »

一、业务问题

个人负责维护过的几个业务,都以MVC、MVP模式来设计。随着业务发展,出现以下问题:

  • 改动一处Model牵连数处View,难以测试
  • View的更新时序不一,难以调试
  • View、Model调用源头过多,难以跟踪

二、问题分析

对整体业务进行了熟悉和梳理后,发现架构情况(单以MVC为例)如图:

Read more »