作为今年开年最火热的一男(战神)带一女(拖油瓶)打僵尸的游戏,甚至现在在别的领域也有了不少的热度,那么他当然不是李三光进村记和偷盘侠,而是美末游戏和美剧了

游戏

在通关游戏之后不得不感叹顽皮狗的技术力,作为一个PS3末代的游戏哪怕在PS5上玩,也没有任何的旧世代的感觉,如果玩上最新的重制版可能就完全是次世代游戏了,这也侧面说明gameplay在这几年的衰落 bushi(包括另一个一男一女打僵尸游戏的重制版也获得了大火)。

放在2023年的今天,在经历了精神变态事件之后来第一次玩这个游戏似乎很难再所谓客观公正的评价这个游戏,但是个人感觉美末1并不是那么令我满意—-这个结局显得过于急促了,当然其实按照这个走向后面也没什么好讲的了,但是其带给我的印象甚至不如山姆亨利和艾莉离家出走的桥段。

以下是一些个人想法:

电影化叙事游戏个人来说其最大的问题在于游戏难度剧情合理性的冲突,相对另一个一男一女打僵尸的游戏的李三光可以大杀特杀来说,我感觉在末世一个老头带着一个小女孩能够这么多次突破许多壮年男性的包围圈是有点出戏的。当然可以理解的是这是其作为一个游戏必然需要的gameplay内容。然而最后火萤大楼的那场决战,从旁观者的角度来说一个老头能干掉这么多全副武装的军人还是有点离谱的(当然全被干掉也说明火萤混到这个地步一点都不怨)。

美剧

然而其实电视剧很好的解决了游戏需要gameplay的部分,在删减了大量的战斗之后这个剧本确实展现了其作为电影化叙事游戏剧本巅峰的实力。加上剧组对末世氛围的渲染和对场景道具的还原程度,个人可以给一个高分好评。

而且电视剧还对很多游戏中不能很好展现的内容做了补充,包括艾莉被咬之前的生活和怎么被咬的故事,还有某种程度上来说官方对艾莉免疫虫草菌原因的补全,都是十分值得好评的部分。

当然我最不能理解的还是花了一整集的时间来讲一个南通故事对整个剧情有什么影响。

而在看电视剧期间发现最有意思的还是在末世不同团体的人发展出的各种不同的社会形态和最后的结局了。

主要包括:

  • 原政府统治(高压统治,阶级分化腐败,部分被反抗人民推翻)
  • 军政府统治(推翻政府统治而来,结局是因为暴力仇杀被僵尸团灭)
  • 宗教统治(牧师领导,喜欢小女孩(很符合对宗教的刻板印象),最后也因为没管住吊而分崩离析)
  • 共产主义(活的最滋润的群体,滋润到腐化了乔儿被高尔夫打死)

只能说国外编剧确实敢写敢拍,当然对他们来说可能很正常罢。

总结

总的来说游戏和美剧都是值得一玩和一刷的,过段时间也会再玩一下美末的重制和高尔夫2,到时候再来锐评罢。

为什么放弃inoreader

在经过漫长的鸽期之后吾辈又回到了博客上,也只有慢节奏的生活享受得起写博客这么奢侈的消遣了。秉持着高效摸鱼(bushi)获取信息的原则一直在使用RSS订阅各种新闻源和博客,从Feedly到TTRSS再到Inoreader再到Yarr也算是经过了许多番的折腾。在订阅了Inoreader一年的基础会员快到期的时候为什么又换用(折腾)了Yarr,下面是吾辈的理由(借口 bushi)。

到期了

这是一个很现实的问题,特别是放在降本增效,开源节流大行其道的今天。虽然inoreader基础版的会员并不贵但是由于薅了腾讯云3年服务器的羊毛,作为一个高级self hosted OPS工程师,还是更倾向于使用一个能够自建的RSS工具。

基础版功能有点弱

虽然说吾辈对于RSS工具的要求没有那么高,但是在Inoreader订阅即将到期的时候却被其狠狠的伤害了一通。

惰性加载的RSS源

lazy load作为一个经典技术一直被大家所使用,但是却被inoreader用在了不应该出现的地方,因为吾辈订阅了淘宝的数据库内核月报但是却许久没有收到,在一个神秘的午后受到RSS之神的号召点开订阅源看了一下更新频率竟然是0/周,当我以为是淘宝也鸽了的时候inoreader却像感受到了什么一样一口气把之前遗漏的内容一口气全都推了过来。啊,这。。

信任危机

当信任危机出现之后就很难弥补了,毕竟我也不知道还有哪些应该在更新的内容被你lazy load了。而看了一眼PRO会员之后我就决定开始再次背上行囊寻找新的RSS工具了。

为什么放弃TTRSS

TTRSS作为一个自建RSS领域不得不提的工具,确实久经考验。在inoreader之前吾辈也是他的忠实用户,而当时抛弃他的原因有以下两个:

自建使用子路径反代有问题

当时作为一个初级self hosted OPS工程师对Nginx并没有那么的熟练,而且大学的时候TLS证书还是一个稀罕玩意儿,所以当时只签了www这一个二级域名的证书放在服务器上,于是便尝试把TTRSS放在/ttrss的子路径之上,期间历经波折甚至还fix了一波Awesome TTRSS文档错误。不过最终也没有能够完美的解决这个问题,还是有许多请求会404(比如点标题不能去原网页)。

CF 5秒盾

虽然折腾了很久的反代而且问题没有完美解决,但是也勉强能用。而真正让我放弃TTRSS转投inoreader并给他打钱的原因是某个新闻源加上了CF的5秒盾,这一下就导致了内容完全没办法看。于是在遍历了许多其他的RSS工具之后还是凉心发现投入了inoreader的怀抱。

Yarr - 简单才是最好的

第一次看到这个工具的时候觉得其过于的简单了,但是在看到作者的这个issue-yarr is feature complete之后,便勾起了我的好奇心。我倒要试试是不是complete了。

启动,导入,刷新订阅源。

虽然界面简洁,但是确实包含了全部需要的功能。

并且还有read here这么杀手级的feature,直接就给我拿下了。

沉浸式翻译插件

在ChatGPT风靡的这段时间,无意中看到了这个沉浸式双语网页翻译扩展的插件。当使用PPAP法则对这两者进行操作之后,我意识到,革命确实到了。

GPT3.5

之前很少看英文网页的原因无非是英文水平太差(queshi),而谷歌翻译也是非常的拉胯,作为翻译日常信息源来说。但是GPT3.5的翻译质量不能说原地踏步吧只能说是突飞猛击了,在整合上这个网页内翻译的插件,对于阅读英文信息源来说,只能是,诶,起飞,怎么说

革命的见证者

当然眼见为实,在read here配合上沉浸式翻译插件之后,我的阅读体验提升了九倍甚至十倍有余。

总结

当然,折腾之路永不停止,这也只是可能今年最好的方案。如inoreader的pro会员可以整合GPT翻译甚至量子速读功能的话,我也必然会继续乖乖交钱。因为GPT确实是这几年以来令我最激动并且能够带给我最多实质性收益的科技进步了。

00

不存在完美的GC

GC停顿时间比较

关注点

衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”。

找到垃圾

引用计数

  • 循环引用问题
    • C++ 智能指针

可达性分析

  • GC Root

    • 在虚拟机栈(栈帧中的本地变量表)中引用的对象
    • 在方法区中类静态属性引用的对象
    • 在方法区中常量引用的对象
    • 在本地方法栈中JNI引用的对象
    • Java虚拟机内部的引用,如基本数据类型对应的Class对象
    • 所有被同步锁(synchronized关键字)持有的对象
    • 反映Java虚拟机内部情况的JM XBean、JVM TI中注册的回调、本地代码缓存等
  • 非死不可

    • finalize()
    • 虽然有但是不推荐使用
  • 并发可达性分析:三色标记

    • 并发扫描时的对象消失问题
      • 增量更新(Incremental Update)
      • 原始快照(Snapshot At The Beginning, SATB)
    • 浮动垃圾

如何回收

分代收集理论

  • 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。
  • 强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
  • 跨代引用假说(Intergenerational Reference Hypothesis):跨代引用相对于同代引用来说仅占极少数。

但是也有反例或者说不使用这个理论的对象:缓存(LRU)

算法

  • 标记-清除算法
  • 标记-复制算法
  • 标记-整理算法

流程

  • 根结点枚举
    • 必须STW
    • 安全点
      • 抢先式中断
      • 主动式中断
    • 安全区域:安全点的扩展

记忆集与卡表

为解决对象跨代引用所带来的问题,垃圾收集器在新生代中建立了名为记忆集(Remembered Set)的数据结构,用以避免把整个老年代加进GC Roots扫描范围

  • 如何维护
    • 写屏障

垃圾收集器

  • Serial收集器
    • 单线程
  • Serial Old收集器
    • 老年代版本
  • ParNew收集器
    • Serial的多线程版本
  • Parallel Old收集器
    • 老年代版本
  • Parallel Scavenge收集器
    • 关注吞吐量
    • 自适应调节策略
  • CMS收集器
    • 以获取最短回收停顿时间为目标的收集器
    • CMS收集器对处理器资源非常敏感
    • CMS收集器无法处理“浮动垃圾”
    • 大量空间碎片产生
  • Garbage First收集器
    • 基于Region的内存布局形式
    • 能够建立起“停顿时间模型”(Pause Prediction M odel)的收集器
    • 追求能够应付应用的内存分配速率(吞吐率优先)
  • Shenandoah收集器
    • 在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器
  • ZGC收集器
    • 在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟

G1GC

  • 极易调整,只需要设定最大停顿时间(默认200ms)
  • 混合GC(Mixed GC)
  • 在满足吞吐量的情况下尽可能少的GC
  • 写屏障,脏卡队列,使用细分线程来更新记忆集(remember set)
  • 避免full gc
  • 避免大对象分配
  • eden区会因为混合GC缩小,需要关注应用程序线程利用率

Shenandoah GC

SATB屏障(buffer)和两段并发标记

实现并发拷贝的技术点:指针引用转发

ZGC

ZGC设计:

指针染色(colored pointers)

GC阶段STW过程:

堆外表维护引用 like 指针引用转发

线程本地握手

0%