🎮 PS5选购心路历程作为一名电子产品发烧友，在资金相对宽裕后终于入手了国行光驱版PS5。京东叠加国家补贴后2889元到手，主要基于以下考量：国行版优缺点✅ 优势❎ 局限价格优势明显商城游戏匮乏官方保修服务需通过港版用户备份解锁港服🔧 开箱体验与硬件生态会员策略首日即开通PSN二档会员（85元/月），其游戏库堪称「数字博物馆」：经典阵容：《恶魔之魂重制版》《GTA5》《死亡搁浅》惊喜小品：《潜水员戴夫》基本没有最新大作，但就库里的游戏来说85块一个月也是相当划算Sual Sense手柄让我感到惊讶的是它把手柄的说明说做成了一款叫做“宇宙机器人手柄操作指南”的游戏，这款游戏可以完美感受自适应扳机，以及各种手柄音效（不愧是地球最强手柄），所以当即斥巨资又购买了一款宇宙机器人光碟。以后就基本可以买实体游戏然后再出手卖掉回血。当场加购实体版宇宙机器人，践行「买盘-通关-回血」的可持续游玩主义。💡 硬件拓展光驱版ps5还具有很好的拓展功能，它预留了一个m2 2248的固态盘位，留给玩家拓展，同时它的光驱也具有快拆设计插上去就能用，所以数字版，可以加装光驱变成光驱版，所以理论上你可以这样回血，“全新光驱999， 499游戏手柄”，相当于1300块买了个ps5生态闭环我惊讶的发现最然ps5的手柄采用外设连接，但是它关闭了第三方设备的匹配，就比如不能用漫步者的耳机使用蓝牙连接ps5，从正面考虑是为了不占用手柄的链接带宽，从侧面考虑则是为了增加自我的营收（索尼真是罪大恶极）。所以我还打算购入一个耳机目前的带选项是hypex cloud3无线版，出于以下考量：1.通过2.4g无线适配器链接，兼容御三家 2.续航时间长120h 3.可以拆卸的耳麦，所以理论上也可以带出去听歌 3.价格适中，759相比索尼动辄上千简直性价比太高当我凝视着装备齐全的电竞房，突然陷入存在主义危机："曾经渴望的万元PC、PS5、精英手柄、游戏自由都已实现，但为何再难寻少年时的纯粹快乐？"GPT的心理学解构1. “目标幻灭效应”或“登顶失落”高中大学时对高性能电脑、PS5这些设备有强烈的渴望，它们代表了自由、掌控感、逃离现实的方式和理想中的快乐。但当你真的拥有这些之后，却发现那种期待中的幸福感并没有持久出现。这是因为我们的大脑对“追求的过程”往往比“拥有之后”更敏感——就像登上山顶，真正站在那里那一刻反而是空虚的。2. 多巴胺与奖励系统的适应心理学上有个概念叫“享乐适应”，你的大脑会对重复的刺激逐渐适应。也就是说：第一次玩3A大作时可能惊艳不已；但越玩越多，越容易觉得“也就那样”。这不是你错了，而是大脑的多巴胺反馈机制在“保护你”：不能永远高强度刺激，否则会疲劳乃至失控。3. 生活节奏改变：时间与心境你以前玩游戏是在“有限资源”中寻找乐趣，现在却可能：每天要工作、担责任，脑子里有很多现实琐事；拥有了时间和金钱，却没有了心无旁骛的心境。游戏本身没变，但你的状态变了。4. 成长带来的审美和意义转变你可能正在经历一个“心理断层期”——过去你是被动获取快乐（比如打游戏），现在你更想寻找更深层的意义和成就感。这不一定来自于玩游戏本身，而可能来自：创造（写作、做项目、学技能）；探索未知（旅行、阅读、户外）；分享与连接（和朋友、家人、宠物、社群）。或许真正的次世代主机，是我们永远在升级却永不满足的欲望处理器。
人生是一场旷野，不是马拉松刷抖音时看到一个有趣的比喻："人生就是一场大型MMORPG。前十八年我们都在为'高考BOSS战'刷经验值，学习是唯一的武器，任务单一线条。而通关后，基本段位被定级，主线任务突然消失——大学毕业后的道路变得无比开放，仿佛做什么都可以。"这个比喻让我深有感触。就像《艾尔登法环》这类开放世界游戏，人生后半程的走向完全取决于我们自己的选择。曾经我也以为本科毕业后唯一的"正统结局"就是读研，但现实给了我更丰富的可能性。贫穷给想象力设下的牢笼当我开始工作，获得经济独立后，世界突然变得广阔起来。我开始认真考虑买车、买房、养宠物、玩音乐、去日本旅行...虽然大多数计划还在进行中，但仅仅是"能够考虑"这件事本身，就让我感受到了一种前所未有的自由。这让我意识到，"知识改变命运"这句箴言曾像一道金箍般限制了我的想象力。在我十七八岁时，根本无法想象二十多岁的自己能够养一只柴犬。记得小时候，家里曾有一只特别聪明的小狗，即使被送到十几公里外也能自己找回家。但最终父母还是把它送走了，那句"人都养不活，还养什么狗"不是玩笑，而是赤裸的现实——贫穷确实会让人连一只狗都养不起。圆梦"吉米"如今，我决定养一只柴犬，并给它取名"吉米"。这个名字来源于《孤独摇滚》中主角后藤一里家的小柴犬"吉米亨"（ジミヘン）。这个可爱的名字其实暗藏玄机——它是对吉他之神Jimi Hendrix（吉米·亨德里克斯）的致敬，完美契合了这部音乐题材动漫的精神内核。养狗的过程远比想象中复杂：初期准备：准备好狗粮等必需品等待第三针疫苗期间暂时寄养在犬舍健康危机：接回家后出现咳嗽症状使用阿奇霉素和双黄连治疗，三天后痊愈发现频繁抓挠脖子，起初误判为跳蚤最终确诊为耳朵流脓发炎求医过程：错误使用双氧水清理（后知不妥）紧急送医，确诊马拉色菌和链球菌感染治疗费用：首日500元持续治疗一个多星期后好转后续计划：停药一周后接种6联疫苗（原疫苗防护不足）补种狂犬疫苗知识确实改变了我的命运这段经历让我深刻体会到：知识确实改变了我的命运。一份体面的工作不仅带来了经济独立，更重要的是给了我选择的自由和承担责任的底气。现在的我，终于可以守护那些曾经遥不可及的梦想——比如给一只叫吉米的小柴犬一个温暖的家。在这个没有固定攻略的人生RPG里，我们都在书写自己独特的故事线。而最美好的部分莫过于：当我们积累足够的"经验值"后，终于可以自由选择想要完成的任务，去探索那些曾被贫穷限制的支线剧情。
新变化，新机遇今年是我第一次写年终总结。其实本来打算过年前就写好，但由于新住所的网络和电脑还没就位，加上过年期间的事情一大堆，结果总结就一直搁置到现在。不过也不急，反正已经过了年，慢慢写也不迟。工作今年最大的变化，就是我从学生身份正式踏入了社会，找到了一个相对稳定、收入也不错的工作。记得在V2EX上看到过一句话，让我受益匪浅：“发现错了马上改，是最重要的人生法则。”其中提到：做对的事情，把事情作对，当然非常重要， 在执行层面我发现发现错了马上改，才是最重要的人生法则。 我发现，通常情况下，犯一次错是不会造成太大的代价的， 真正造成致命打击的是一错再错，错上加错，一错到底 如果能遵循“发现错了马上改”，通常结局都不会太差。 例子太多了， 健康问题，发现身体毛病及时看医生及时处理， 别等到小病变成大病再处理 感情问题，在谈恋爱阶段发现对方 不合适及时分手，别拖到进入婚姻有了孩子再离婚 工作问题， 发现工作不适合自己马上跳槽，别耗上几年青春再追悔莫及 股票投资问题，发现买错股票马上抛，别等未来能不能回本 遇到骗子朋友/亲戚，马上拉黑不来往 。。。都是如此。 最好是能建立一个条件反射，让自己毫不犹豫的执行“发现错了马上改”的指令。刚入职场时，我加入了一家比较小的公司。人少事多，工资也低，而且离家挺远，但当时苦于没有其他选择，只能先干着。不过，看到了V友的建议后，我决定勇敢一点，选择了辞职回乡考编。虽然这一步有很大的风险，但幸运的是，最后的结果证明是正确的。感谢那时敢于做出改变的自己。现在的工作离家近，对我来说收入也算不错，工作强度适中，基本上能保持一定的私人时间。短期内，我应该不会再轻易跳槽了。旅行家里条件一般，除了上大学时离开家，基本上没什么像样的旅行。直到这一年，手头稍微宽裕了一些，我才终于有了几次真正的旅行经历，弥补了这些年未曾实现的“旅行梦”。上海这次上海之行，我和我的伙伴God一起去了上海天文馆、世博园和中华艺术宫。行程充实，收获颇多。在静安区看完Eva雕塑后，我们因坐公车坐多了一站，准备下车返程时，发现附近竟然是四行仓库，于是决定去转一转。没想到，恰巧遇到了一位热情的老爷子，他是海军退役的，和我们聊起了上海的历史。他聊得兴致勃勃，还主动带我们沿着苏州河畔走了一圈，一直走到外白渡桥、陈毅广场、南浦大桥。要不是这位“老上海”，我可能多次来上海也分不清浦东和浦西的位置。最后，我们和这位老先生挥手告别，感觉就像是刚刚认识的一场奇妙相遇。真是不可思议的缘分，走到哪儿都能碰到有趣的人和故事。苏州我们逛了苏州博物馆、拙政园和平江路，最让我印象深刻的还是那块海棠糕，简直好吃到让人忘返。古城墙上的宁静氛围让我陶醉其中，恍若进入了时光隧道。在古城墙上，我们偶遇了两位身着汉服的小姐姐，热情地请我们帮她们拍照。于是，我毫不犹豫地把摄影任务交给了擅长拍照的God，效果自然不言而喻。在宁静的街道上，我们参观了丝绸店，感受到了古老的丝绸文化。随后，我们坐上了摇橹船，正好遇到了一家来自上海的家庭。爷爷奶奶带着小孙女来苏州游玩，期间他们聊起了现在上海人讲上海话的情况。听说如今上海的学校已经开设了专门的上海话课程，小女孩正在上课，和我们分享了她的“牙牙学语”。在船上，伴随着她的稚嫩发音，我们也体验了一把江南水乡的独特韵味。第二天，我们前往虎丘，站在虎丘顶上时，我们遇到了一位老艺术家，他在卖精美的手工剪纸。老先生耐心地跟我们讲述着剪纸这门手艺的传承，他感慨如今学习这门手艺的人越来越少，听得我们不禁感到一阵唏嘘。手工艺的传承似乎正面临着不少挑战，让我们更深刻地意识到，珍惜和保护这些传统文化是多么重要。同时我和god每人买了一幅剪纸充当给家人的伴手礼。张家界印象最深刻的还是米多客栈老板所描绘的狐仙传说，详情见我的张家界之旅。也许我一直都是一个喜欢旅行的人，只是以前的困顿生活让我没有机会去真正发现这些美好。到了2025年，我有了自己的工作，生活逐渐走上正轨，我相信我的旅行故事才刚刚开始。希望未来能够去更多的地方，遇见更多的人，看到更多不一样的风景，也让自己的心灵更加开阔。买了什么有趣的东西一辆摩托车今年，我的“小海豚”——济南铃木 Let's 小海豚也成为了我的日常伙伴。它是深蓝配色，110排量的摩托车，灵活又省油，简直是城市间小旅行的最佳伴侣。每两周加50块油，经济划算，这让我想起了《摇曳露营》中志摩凛的那种自由自在旅行的感觉。像角色们骑着摩托车穿梭在大自然中一样，我也能骑着这辆“小海豚”来回穿梭在工作城市和家之间，不仅省时又省力，还能随时停下享受路上的风景。这其实是早有预谋的，去年我就趁着假期考到了摩托车的驾驶证。一间电竞房今年，我终于给自己做了一间“电竞房”。其实，说是电竞房，其实也没那么高大上——我去旧货市场淘了两张桌子，一共花了300块。接着，为了在“战斗”时能有点“舒适感”，我又狠下心来，花了500块买了一把转椅。人生的第一双NIKE拿到工资的那天，我决定给自己一个小奖励——人生中的第一双钩子鞋。原本打算在得物上买，结果鞋子到货后发现尺寸太小，我顿时有点小失望，但也没气馁。于是，下班后我毫不犹豫地去了NIKE专卖店，终于拿下了一双Air Force 1。穿上那双鞋的瞬间，仿佛自己也成了街头的“潮人”。虽然这个小小的冲动消费看起来不算什么大事，但对我来说，这是对自己参加工作的一个小小庆祝，也是一种“走得更远”的象征。也许以后可以每个月买一双钩子鞋。电脑配置组件规格显卡RTX 4060CPUAMD Ryzen 5 5600G散热器玄冰400网卡intel ax210内存金百达 8GB DDR4 3200mhz *4电源Segotep GP700G 650W 金牌认证固态硬盘海力士p41 1t 铠侠rc20 500g 西数1t固态硬盘显示器PANDA S27Q2主板华硕 tuf gaming b550m-plus重炮手音响联想鼠标VGN蜻蜓f1pro键盘VGN V98机箱SAMA破坏神X7豪华版这一套配置下来，我基本上可以在这台机器上玩《赛博朋克2077》，同时运行视频编辑软件、虚拟机，甚至开几个网页都不怕卡。感觉自己是个“技术大佬”了，随便开个任务都能轻松应对。既能满足我的游戏需求又能满足编程，机器学习的需要。安装电脑的时候也许是今年最快乐的时候，一种努力有了回报的感觉，同时也享受这种自己鼓捣技术的感觉。阅读以前因为没有做书籍阅读记录，导致对过去读过的书印象模糊，所以这次只写了两本（书读得少，脑袋也显得有点空）。不过，从今年开始，我打算做一个阅读清单，记录下每一本读过的书，这样以后就能回顾自己走过的阅读旅程。《置身事内-中国政府与经济发展》让我对于政府和经济的关系有了一定的认识，同时让我产生了理财的想法，印象深刻的是书中提到第二类方式是“量化宽松”，即央行增发货币来买入各类资产， 把货币注入经济，这是金融危机后发达国家的主流做法。在危机中， 很多人变卖资产偿债，资产市价大跌，连锁反应后果严重。 央行出手买入这些资产，可以托住资产价格，同时为经济注入流动性， 让大家有钱还债，缓解债务压力。从记账角度看，增发的货币算央行负债， 所以“量化宽松”不过是把其他部门的负债转移到了央行身上，央行自身的资 产负债规模会迅速膨胀。但只要这些债务以本国货币计价，理论上央行可以无 限印钱，想接手多少就接手多少。这种做法不一定会推高通货膨胀，因为其 他经济部门受债务所困，有了钱都在还债，没有增加支出，也就没给物价造 成压力。欧美日在2008年全球金融危机之后都搞了大规模“量化宽松”，都没 有出现通货膨胀。“量化宽松”的主要问题是难以把增发的货币转到穷人手 中，因此难以刺激消费支出，还会拉大贫富差距。央行“发钱”的方式是购买 各种金融资产，所以会推高资产价格，受益的是资产所有者，也就是相对富裕的人。 这让我突然对国家对于电子设备和家电购买补贴政策有了一定的理解，其实就是量化宽松，债务转移到央行，同时补贴对象都是制造业，有利于产业脱虚向实，穷人能够确实受到好处避免继续扩大贫富差距，达到提振中国经济的目的。我对于经济学的理解还很粗浅，说的也许不对，需要不断在这方面学习。《天龙八部》金庸先生的才子名号享誉天下，但说来惭愧，我以前从来没有读过他的作品。反倒是工作以后，我才开始阅读，才深刻体会到老爷子那博大的胸怀和非凡的文笔。其实，《天龙八部》这本书我还没有读完，三联书社97年版本的五本书，每本大约1000页左右，我读到第二本，但即便如此，也让我受益匪浅。书中的段誉，身份高贵，出身武功世家，却偏偏不学武功，生性乐观开朗。即使在身中剧毒、跌入悬崖的困境下，他也能以“神仙姊姊”为伴，消解一切痛苦。段誉的乐观豁达让我深有感触。正如他所体现的那种“人间万事塞翁马”，他始终以一种积极的心态面对困境，最终总能化险为夷。这种乐观的人生态度，值得我好好学习。最近的经历和段誉某种程度上也有些相似，真是应了那句“塞翁失马，焉知非福”。生活中的挑战，往往蕴含着意想不到的机遇，只要保持乐观，事情总能向好的方向发展。2025年新的展望建立读书笔记，读书目标，观影笔记减肥到65kg学习python和js到熟练的程度存钱买一辆汽车
张家界之行：自然与文化的壮美交织
前言五月的张家界，山川叠翠，云雾缭绕。这是一场值得铭记的旅行，带着探索与憧憬，我们从天门山到武陵源，感受大自然鬼斧神工的奇妙。这次游记不仅记录风景，更是记录心情，留住那些令人怀念的瞬间。出行从武汉启程，我们选择了深夜火车，既省了时间又节约了住宿费用。然而，未曾预料到的是，卧铺车厢里此起彼伏的鼾声让这一夜变得格外难忘。如果有机会重来，一副耳塞必定是行李清单上的第一名。住宿张家界以前叫大庸市，改名叫张家界，在市中心的景区是天门山，而真正意义上的张家界应该是指武陵源的张家界国家森林公园，里面包含了众多景区。我们一共玩了3天，1天半在天门山，后面的时间在武陵源区。所以第一天酒店定的酒店在张家界市区，结束了第一天的天门山之旅后，后面我们订在了靠近武陵源东门的一家叫米多客栈的酒店。这家酒店没有电梯，价格便宜,搬运行李稍微麻烦些，但却是我住过体验最好的酒店之一。我们一到酒店，酒店老板就已经在前台等候，并且直接念出了我的名字，这还是第一次。老板热情地帮我们把行李放到了房间，之后老板竟成了我们的导游，他跟我们说，他爬过来张家界200多次，问我们这次打算游玩的时间是多久，我们告诉他只有2天半之后，他拿出了一张精致的手绘地图上面包含了老板自己绘制的所有景区，并且根据时间对我们的行程做出了规划，我想这就是这家酒店评分最高的原因。用自己的热情和服务来弥补了酒店硬件短板的不足。地图上面不仅有地点标注，还有所需时间，其中红笔标画部分是我们第一天旅游的线路，蓝笔是第二天的线路，大致玩遍了张家界，但还剩地图左上角的空中走廊部分没有旅行。第一天路线[武陵源东门] ----> [百龙天梯] ----> [迷魂台]----> [袁家界风景区]----> [天子山风景区]----> [贺龙公园] ----> [天子山索道]----> [米多客栈]首先从东门进入景区，然后乘坐景区摆渡车到达水绕四门，博物馆就在旁边博物馆了解一个地方最快的方式就是去菜市场或者博物馆，这里也有一个博物馆，里面大致描述了张家界景区的开发历史，对我们国家做出的贡献，还有如何形成的这种特殊地貌。百龙天梯百龙天梯号称“世界最高户外电梯”，从山中凿石修成，但由于人很多，所以没办法很好地观看风景，同时这样地修建也引起了我的担心会不会破坏了生态环境，从电梯上去以后有一个益禾堂，我虽然不喝奶茶，但玩了一会后还是买了一杯补充能量，居然还是平价的，难能可贵。（坐这个电梯和园区里面的索道不包含在门票在内，可以根据自己的体力和预算合理选择是否购买联票套餐，由于有学生优惠算了一下是坐一次买一次划算）袁家界风景区这里被称为“阿凡达世界”的现实原型，悬浮山般的奇异地貌让人恍若置身科幻电影。不过这里的猴子可不科幻，反而有点“街头霸王”的气势，在这里朋友的面包遭到了猴子的抢劫，猴子身手敏捷，一个龙爪手划破了透明塑料袋，后面的猴子帮手，犹如探囊取物般夺走了朋友掉在地上的面包。但好在我背了书包，猴哥看不到，我们的午餐才幸免于难。这里有很多外国旅客，其中韩国人最多。关于韩国人多的原因本地人有两种说法：张家界是韩国人的发源地，他们的祖先在这里（不靠谱，但很多本地人这样说，看说法二）韩国人喜欢爬山，但韩国多丘陵地貌，并且张家界有直达韩国首尔的机票而且很便宜，可能比在韩国国内旅行都便宜，再加上“爱爸妈，就送父母爬张家界”的娱乐文化输出。但不乏也有其他外国友人，在贺龙公园附近的山顶上居然还有一家麦当劳，可惜当时还没有装修好索道风景坐在索道车厢内，所有人都默然无声，眼中只剩下连绵不绝的山峰和茫茫的云海。那一刻，仿佛所有语言都显得多余。晚餐在一天的劳累之后，我们在酒店附近找了一家餐厅，其中很多外国友人就餐，环境不错，很多土家特色菜，两个人一共花了98RMB.第二天路线[米多客栈]----> [十里画廊] ----> [金鞭溪] ----> [氧吧广场]----> [黄石寨]----> [金鞭溪]----> [回家]由于今天徒步路线较多所以我们起了个大早就出门，张家界国家森林公园买了门票后可以免费坐里面的摆渡车，所以我们还是从东门进入金鞭溪金鞭溪的起点在水绕四门附近，还有一座张良墓，终点在氧吧广场，被誉为“地球上最美丽的峡谷”，全长7公里，一路潺潺溪水伴随，两岸奇峰异石叠立，同时也是西游记的取景地。在中间的长寿泉附件遇到了一位天津大爷，他给我们讲了这次开车自驾前往贵州的旅行计划，还给我们分享了他拍的猴哥以及“卧槽峰”。期间我们谈天说地，一路聊到了黄石寨。因为像一只手竖中指，所以叫“卧槽峰”黄石寨黄石寨是猴子的天下，这些活泼的小家伙随处可见，但同时也提醒游客要格外小心，避免被抓伤或咬伤。山上甚至设有专门的疫苗接种点，想来是因为不少人出于好奇逗弄猴子而受伤的缘故。在这里，我偶遇了一位独自旅行的外国小哥。起初他正专注地拍照，我主动上前帮他拍了一张，没想到这成为我们一段愉快交流的开端。他是一位地道的“中国通”，曾去过武汉，这次因为张家界即将降雨，正计划前往西安和北京继续旅程。他告诉我，独自旅行是一种难得的自由，不受时间和行程束缚，可以随心所欲地探索每一个地方。他还提到，就比如你去到伦敦、巴黎这样的城市（我心想自己是否有机会去），游客都能拿到详尽的导览手册，独自一人也完全可以享受旅途的乐趣。与他简单却深入的交流，让我对旅行的意义有了全新的思考。或许，旅行不仅仅是风景的欣赏，更是心灵的放飞与自己对话的机会。小哥的旅行路线与我们的恰好相反，临别时，我们交换了联系方式，为这一段偶然的相遇画上了圆满句号。离开黄石寨后，我念念不忘金鞭溪的美景，决定再次徒步探索。这一趟暴走14公里虽然体力消耗不少，但每一步都充满满足与喜悦。当我返回水绕四门时，时机刚好，仿佛这段旅程的每一刻都在与我默契配合，写下了一段难忘的回忆。趣事金鞭溪和狐仙晚饭过后，我们回到酒店稍作休息，等待返程火车的间隙，与热情的米多客栈老板聊起了天。闲谈间，老板为我们讲述了一个关于金鞭溪的传奇故事，这段记忆深深镌刻在他童年的岁月里。他说，小时候的金鞭溪水清澈见底，溪中常能见到大鲵的身影。某个雨雾弥漫的黄昏，他和小伙伴行走在溪边，忽然在前方的薄雾中看见一个飘逸如仙的身影。那道身影轻盈灵动，像一位出尘的仙女。兴奋与好奇驱使他们拼命追逐，可无论如何加快脚步，那身影始终保持着神秘的距离，渐行渐远，最终消失在迷蒙的水雾中。这个故事听得我们如痴如醉，仿佛眼前也升腾起了金鞭溪那日的雾气。不知不觉间，我们竟忘了时间，错过了末班车。好在金鞭溪的狐仙虽未现身，老板的传说却点缀了我们的旅程，即使最后不得不打车赶往火车站，这段传奇依然为旅途增添了一抹神秘与浪漫。朋友和蝌蚪第一天途经天门山寺时，我们偶然在寺庙门口的石阶旁发现了一汪浅水，里面竟有几只小蝌蚪在欢快游动。朋友见状兴奋不已，随即拿出随身携带的塑料瓶，小心翼翼地舀起几只，说是想带回家养着看它们变成青蛙。这场“蝌蚪救援行动”虽然充满童趣，却在返程时遭遇了意外的结局。在火车站安检时，那瓶蝌蚪被发现了，因违反携带活体生物的规定而被扣了下来。朋友虽有些失落，但这段关于“蝌蚪梦想”的插曲却给我们的旅程增添了不少笑料，也成为了日后提起张家界旅行时最特别的回忆之一。总结这次张家界之行，带给我的不仅是视觉的震撼，更是内心的沉淀。在巍峨山峰间，我感受到自然的恢弘与永恒，那些奇石怪峰像是时光雕刻的艺术品，记录着地球亿万年的故事。而在静谧的金鞭溪旁，我也深刻体会到大自然的包容与柔情，潺潺溪水洗去旅途的疲惫，仿佛在告诉我，生活中总有平和的一面值得细品。同时，旅行中遇到的热心的客栈老板、分享故事的天津大爷、独行的外国游客，每一个人与我短暂的交集都仿佛是一束束温暖的光，让我意识到，旅途的意义不仅在于“看见”，更在于“遇见”。山水与人情交织，让我对旅行的定义有了更深刻的理解：它不是简单的打卡风景，而是一场心灵的对话，一次与世界和自我的深度连接。
逆行人生最近看了一部电影《逆行人生》，影片讲述了年近四十的大龄程序员高志磊在公司裁员浪潮中被无情淘汰，失去了原本看似体面的精英生活，迫不得已转行成为一名外卖骑手的故事。在论坛 (V2EX) 上，大家对这部电影的讨论也非常热烈。有人认为以高志磊的技术水平，不至于落到如此地步；而更多人则认为，大龄程序员的出路与存款密切相关。对那些有些积蓄的人来说，即使被裁员，也可以尝试跑滴滴或开个小店铺，而不会一下子陷入生活困境。然而，电影中的高志磊面临的是各种沉重的压力：P2P投资爆雷导致资金受损、每月房贷高达1.5万、女儿每年学费20万、妻子是全职太太，甚至父亲生病住院花费30多万，加上被中介坑骗了3万……一连串的变故让他陷入窘境，最终走上了送外卖的道路。真可谓“屋漏偏逢连夜雨”，每一步都充满艰辛和无奈。职业思考这部电影让我不禁想起了自己实习时的经历，也开始思考互联网行业是否真的适合我。程序员其实并不是一个“不可替代”的职业。如今，编程学习资源丰富，任何人都可以学编程；如果只是热爱技术，也可以选择不进入互联网公司。而且，程序员的工作强度普遍很大，长期不规律的生活作息也让人身心俱疲。尤其是想到去年 陈皓 的离世，我更体会到“身体才是革命的本钱”。曾读到陈皓自传中提到自己在其他同事休息时还留在公司学习，然而过度拼命的代价便是健康亮红灯。就在今年，我因健康问题住院治疗，费用接近万元，幸好有学生医保才得以支撑。这一经历让我重新思考自己对程序员工作的吸引力，逐渐意识到要把健康放在首位。健康警钟此前，我一直认为80公斤的体重并不严重，甚至觉得瘦一些不健康。然而，单位体检时查出我患有重度脂肪肝，肝功能ALT指标竟然飙升至159（正常值50以内）。体检被卡后，在医院挂号时，一位消化科主任严肃地告诉我：“小伙子，年纪轻轻就把身体搞成这样，将来很难找到理想的工作，即使找到单位也不敢要你。”这句话给我敲响了警钟，于是我住院治疗，经历了三天一小抽、五天一大抽的日子。期间进行了一系列检查，医生确认是脂肪肝引起的肝损伤，初期采取还原型谷胱甘肽和维生素C注射治疗，ALT降至115，但后续却停滞不前。医生建议出院后通过饮食控制和运动减肥来改善状况。智能饮食管理与推荐因为剧烈运动可能会对肝功能造成更大负担，我选择通过控制饮食热量的方式来实现减重目标。AI在这方面帮了我很多，可以根据我的基础代谢率制定饮食方案，为每周合理设定摄入热量。朋友们有时会担心我减少饮食会导致营养不良，但结合自身情况，我适度维持热量赤字，确保饮食结构均衡、富含蛋白质、维生素和膳食纤维等。饮食上尽量选择蒸煮的食物，减少油脂摄入，同时尽量使用橄榄油炒菜，这也有助于肝脏健康。在此推荐一款叫“薄荷健康”的App，它能够精确标注食物的热量，免费功能就已足够使用。在《逆行人生》中，高志磊开发了一款“路路通”小程序，而我也开发了一个叫“Health-care”的饮食记录软件，能够帮助记录每日的热量摄入，并支持将数据导出成CSV格式，便于进一步分析饮食结构。（有需要的小伙伴也可以联系我）总结经过两个月的努力，复查结果显示我的脂肪肝已减轻为轻度，ALT恢复到了标准范围内，体重也减到了65公斤。看到这些变化，内心充满了欣慰，同时也更加意识到健康的宝贵。回想大学四年不爱运动，实习期间熬夜加班、饮食不规律，甚至租房在没有厨房的地方，这些不良习惯让健康出现了问题。所幸我及时调整过来，也更加坚定了自己当初离开互联网行业的决定。
问题的产生我的health-care健康饮食管理系统在使用过程中逐渐产生了一个问题,那就是随着用户摄入食物项目的添加,食物数目会变得更多用户需要寻找很久才能找到匹配的食物选项。同时由于页面简约性的要求，以及对于移动端设备支持的友好性方面考虑我想应该可以用一个类似计算机cpu调度方面的简单算法来解决这个问题。为了实现这一目标，我设计了一个基于频次和时间间隔的排序算法，使得推荐系统不仅了解用户的即时需求，也能通过历史选择为用户提供合理的推荐。算法的需求基于频次的考虑：如果你经常选择某个食物，系统会优先推荐它，因为频繁的选择暗示了你对这个食物的偏好。基于时间间隔的考虑：如果某个食物已经很久没有被你选中了，系统会降低它的推荐优先级，避免向你推荐那些你可能已经不感兴趣的食物。于是可以设计一个这样的函数：$$ \text{priority\_score} = \text{frequency} \times \left(1 + \frac{\text{time\_weight\_factor}}{\text{days\_since\_last\_selected} + 1}\right) $$公式的组成部分frequency（频次）：这是用户选择某个食物的次数。假设你频繁选择某个食物，它的频次就会较高。频次越高，意味着这个食物更符合用户的长期偏好，因此它对最终优先级的贡献也会越大。days_since_last_selected（自上次选择以来的天数）：这是当前日期与用户最后一次选择该食物的日期之间的天数差。这个数值越大，意味着食物越久未被选中。一般来说，如果一个食物长时间未被选择，我们可能希望它的优先级会降低（除非用户有意想要重新尝试的需求）。time_weight_factor（时间权重因子）：这个值决定了时间因素在最终优先级中的影响力。它是一个调整系数，影响时间间隔对食物优先级的贡献。数值越大，表示时间的影响越大，即食物选择的时间间隔对优先级的影响会更强。公式的逻辑:$$ 1 + \frac{\text{time\ weight\ factor}}{\text{days\ since\ last\ selected} + 1} $$这一部分是计算时间间隔对优先级的影响。假设食物的选择频次是固定的，这一项会根据食物的上次选择时间进行调整。$$ \text{days\ since\ last\ selected} + 1 $$确保即使食物的选择频次是近期的，也不会造成除零错误。time_weight_factor 放大了时间间隔的影响，使得长期未被选择的食物得分明显降低。乘以 frequency：最后，我们将频次与时间因子相乘，最终的优先级分数既考虑了食物的选择频次，也考虑了其历史选择的时间间隔。设置合适的 time_weight_factor 取决于你的应用场景以及用户的行为特征。以下是不同情境下的建议：注重近期行为的场景如果你希望系统更重视用户近期的选择习惯，并且优先推荐用户最近选择的食物，那么可以选择较小的 time_weight_factor。例如：适合值：5-15 效果：时间间隔对优先级的影响较小，频次的影响占主导地位，推荐频繁选择的食物。用户的历史选择不久的食物将优先推荐，忽略较久未选择的食物。注重长期偏好的场景如果你希望推荐系统更注重用户的长期偏好（例如，帮助用户重新开始选择长期未选过的食物），可以将 time_weight_factor 设置得较大。这样，时间间隔的影响会显著地增加，较久未选择的食物将得到更多的优先推荐。适合值：20-50。效果：时间间隔对优先级的影响增大，推荐系统会更倾向于推荐久未选择的食物，即使频次较低。平衡近期和长期行为的场景如果你希望在推荐中平衡近期选择与长期偏好的影响，可以选择一个中等的 time_weight_factor，例如 10-20。这样既能考虑用户最近的选择行为，也不会忽略那些久未选择的食物。适合值：10-20。效果：推荐系统在近期行为与长期偏好之间找到一个平衡，频次和时间间隔的影响都得到合理的考虑。例子：优先级得分计算假设我们有两个食物项 A 和 B，我们将根据以下公式来计算它们的优先级得分：食物 A：frequency = 10days_since_last_selected = 5time_weight_factor = 10计算公式：$$ \text{priority\_score\_A} = 10 \times \left(1 + \frac{10}{5 + 1}\right) = 10 \times \left(1 + \frac{10}{6}\right) = 10 \times 2.6667 = 26.67 $$食物 B：frequency = 5days_since_last_selected = 30time_weight_factor = 10计算公式：$$ \text{priority\_score\_B} = 5 \times \left(1 + \frac{10}{30 + 1}\right) = 5 \times \left(1 + \frac{10}{31}\right) = 5 \times 1.3226 = 6.61 $$结果分析：食物 A 的优先级得分为 26.67，食物 B 的优先级得分为 6.61。尽管食物 B 的选择时间间隔较长，但因为食物 A 的选择频次较高，所以它的优先级得分更大。通过这个例子，我们可以看到，优先级得分不仅考虑了用户过去的选择频次，还考虑了时间因素，从而可以更好地平衡用户的长期偏好和即时需求。总结用户偏好动态调整饮食偏好会随着时间变化，但用户对特定食物的频繁选择也反映了偏好。基于时间和频次的优先级算法可以结合用户的选择频次和时间衰减，更贴近他们当前的饮食习惯。在该算法下，用户最近选择的食物优先级更高，但不会完全忽视过去的偏好记录。避免频次累积带来的偏好失真简单的频次统计会导致一些被高频次选择过的食物始终在推荐前列，即使用户不再偏爱它们。时间加权可以很好地解决此问题，因为每次用户选择食物时，都会根据距离上次选择时间的远近动态调整优先级，从而更加灵活。兼顾用户的饮食多样性当用户尝试新食物或一段时间未选择某食物时，优先级会自动下调，让用户有机会接触到更多不同的食物。这种机制有助于引导用户保持均衡饮食。实现难度适中基于时间和频次的优先级算法实现起来相对简单，只需在数据库中多存储一个“上次选择日期”，并在推荐时加权计算。相比LRU缓存算法等实现逻辑更简单，对系统的性能要求也不会过高。实现代码# user_item_frequency表 CREATE TABLE IF NOT EXISTS user_item_frequency ( user_id INTEGER, item_id INTEGER, frequency INTEGER DEFAULT 1, last_selected DATE, PRIMARY KEY (user_id, item_id), FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES intake_items(id)) # intake_items CREATE TABLE IF NOT EXISTS intake_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, calories_per_unit REAL NOT NULL, pending_name TEXT, pending_calories_per_unit REAL, is_changed INTEGER NOT NULL DEFAULT 0, is_approved INTEGER NOT NULL DEFAULT 0) # 排序算法获取食物列表 def get_priority_sorted_items(user_id, time_weight_factor=10): conn = get_db_connection() cursor = conn.cursor() # 获取用户的所有食物频次记录 cursor.execute(''' SELECT item_id, frequency, last_selected FROM user_item_frequency WHERE user_id = ? ''', (user_id,)) items = cursor.fetchall() priority_items = [] for item_id, frequency, last_selected in items: # 将 last_selected 从字符串转换为 datetime.date 对象 last_selected_date = datetime.strptime(last_selected, "%Y-%m-%d").date() days_since_last_selected = (datetime.now().date() - last_selected_date).days priority_score = frequency * (1 + time_weight_factor / (days_since_last_selected + 1)) # 防止除零 priority_items.append((item_id, priority_score)) # 按优先级得分从高到低排序 priority_items.sort(key=lambda x: x[1], reverse=True) # 提取排序后的 item_id 列表 sorted_item_ids = [item[0] for item in priority_items] conn.close() return sorted_item_ids
迷茫与复盘：毕业后的人生选择与反思
9月27日的凌晨我又失眠了，其实我的睡眠一直很浅。在我参加面试或者压力很大的时候会因为一点点声音而睡不着觉。明知道熬夜对身体不好但是反正又睡不着，就起来写一点东西。在最近的几个月发生了很多事情。首先是我毕业了，然后我找到了一份工作，2个月后我又辞去工作，从武汉赶飞机去昆明参加烟草集团的考试，参加事业编制的考试，通过了笔试和面试但通知了去参加体检复查，最后一个多月也不知道结果如何。看着身边周围的同学都找到了工作有了自己独立的生活，而反观自己确一事无成，只能整天待在村子里面就很焦虑。对自己的何去何从感到迷茫。一段时间觉得自己得去考研上一所顶好的大学，可转念一想家庭经济条件可能并不支持而且读完研究生回来也是要找工作，这样便觉得考不考研究生又觉得无所谓了。可过了一段时间想到自己处处碰壁到处失败也许还是因为自己的平台不够，自己的学识不足以找到一份能够支撑自己生计的稳定工作还是得去上研究生。就这样这个念头一直消散不去，目前也不知道该怎么办，但可以明确的是现在我确实需要先找到一份能够支撑自己生存的工作而不是在家里啃老，仔细一想三条路：考公，考编；找互联网工作；送外卖，打零工。说实话每条路我都不想走，考公务员就像千军万马过独木桥特别是在这个经济不景气，大学生就业难的时代，互联网工作找不找得到另说，中大厂以我目前的水平来说估计够呛，小厂的话有了武汉光谷两个月的打工经历也是吓得够呛，送外卖打零工也许是短期内的出路但不是长久之路。打游戏经常需要复盘来知道哪里出现了失误以便在下一次游戏中进行改进，我也需要一次复盘。第一次考研经历我大概很久之前就觉得自己要考研究生，要说为什么那就是对于自己高考结果的不满意。可虽是这样想却在该行动的时候没有付诸实践，没有提前了解该准备的时间节点。就比如在大三的时候也还没有对考研有一点认识就比如备考周期，报名时间，专硕学硕区别以及自己感兴趣的专业和院校甚至该考哪些科目都不清楚，只顾着盲目地卷绩点典型的学生思维。我的数学基础很差，高中基础知识不是很扎实而且由于我大一是医学专业没有开设相应的数学知识导致我对于其学科没有合理的认知，当然主要还是怪自己没有花时间去学习，在后面学习运筹学和机器学习之类课程的时候就应该清除的认识到这一点，可是我却还是不以为意。三月份开始我的考研复习，数学课程看得很慢，有一部分是由于自己基础知识不牢靠需要重新学习另一部分是自己盲目得询问同学并且因为别人的进度比自己快而无端的担心，应该是快到了九月我的数学知识才过完了一遍，这个时候我才开始了408的复习这就导致了我到考研之前都没有看完一遍408的课程。其实这段时间也不短，应该就是一个正常的考研周期，但我没有认识到这段时间会对于我未来的影响，所以吊儿郎当没有认真对待，期间每天学习的时间并不长，甚至大部分时间都在刷视频度过焦虑，而且时间分配也是极度的不合理，明明自己的英语水平还行却拿出大段的时间来背那些早就有印象的单词，刷大量的试卷，而政治也是并不需要做很多的题目就能得到一个很可观的分数，看了大量的经验贴，在充满信心和焦虑中来回起伏，等到别人都有了着落这个时候我才慌张了起来，明白了自己浪费了一段大好时光。确实很后悔，别人考咋样复习得咋样和自己有屁的关系整体顾着问别人复习经验，其实谁不是第一次考研哪来那么多经验，还是印证了一句话“书山有路勤为径，学海无涯苦作舟”。问的再多不如自己踏踏实实做几道题，刷完一本题集，而不是别人说什么好就换，说什么不好就丢。现在想想当时的自己还真是幼稚。第一次工作经历我在春招四处碰壁，打算灰溜溜的回老家的时候，我的本科毕设导师给了我一个机会，推荐我到了一家公司实习。虽然我很快就离职了但还是感谢我的导师给了我这个机会。在我面试之前我准备了很多可能会问到的知识点，最后Hr并没有问我什么，反倒是给我介绍了公司的一些情况，并且说从事的工作可能和我想象中的开发会有一些出入，我们是属于项目实施部。在去公司之前我非常忐忑，毕竟这是第一次工作所以在boss直聘之类的网站搜了很多信息，发现还不错上面写着有几十人的规模，可实际上公司就是租了一层写字楼并且正式员工很少只有几个，还有几个是实习生，在我工作的期间基本没看到工位坐满过，其实最多也就十来个人。公司在光谷距离我的学校有差不多2个小时的通勤时间，所以第一天到公司我起了个大早6点我就起床从学校出发，甚至楼下阿姨都还没有起床开门。到公司之后没有什么培训而是安排一个同事来让我熟悉软件也就是公司开发的一款低代码平台，其实也是另一位实习生，当时她说你既然有自己的博客，一定是从985大学毕业的吧，我苦笑了一下说不是，博客只是自己搞来玩的。她说那你应该找一家更厉害的公司的，这里你学不到什么东西。我心想反正暂时也没有着落不如先干着，反正有两个月工资拿。事实证明自己还是太天真了，从学校到公司有2个小时通勤时间，所以我租了3个月十多平米的房间，是一个loft的类型，楼下是房东的公公在住，二楼隔成了四个小房间我选择了靠窗的一边，楼下正对一个小湖，月租1100块不包电费，没有厨房。而实际上我的头两个月属于实习期每个月只有4000的薪水，再加上没有厨房，工业区里面没有食堂只有一些店铺，吃饭是一笔不小的开支大约需要1500~2000块，所以最后我离职的时候基本没赚什么钱，反倒是退房的时候还付了470块的电费。一开始我以为可以搞一点和代码相关的内容，可实际却不是，我整天的工作是ctrl + c , ctrl + v复制一堆文档，和写软著，接触最多的软件就是word，过了一段时间之后leader看到了我在使用python写脚本来搞一些自动统计excel的活，他就说可以考虑一下可以让我从事代码开发。过了几天还是周末我和同学在搞毕业之前的聚会，leader给我发微信说有一个小项目可以让试试。这个时候在我之前招进来的实习生其实都已经离职了，公司只剩下我一个实习生。去了公司的第二天，leader就让我写写看。项目是一个某某地的档案管理系统，公司开发了一个低代码平台用来创建前端和后台数据库以及一些接口的实现。本来说好给我一周的时间来写后端的接口，可最后项目经理不断地改需求该页面，改数据库，也不明确我具体需要写出来的功能接口，而我只有一份技术总监发的以前项目的代码参考，最后到我手里就剩一天半时间，而客户要在一天半之后看项目演示，由于leader说我表现好的话可以转开发升职加薪，所以我干的很卖力，有几天加班到凌晨为了赶接口。最后我把写好的接口给技术总监看，他看了直摇头，改了一会之后直接放弃了。说我为什么没有看参考文档，为什么没有遵循restful风格。我技术有限是事实，没有写过什么正式的项目。但却没有培训，也没有给我时间，我确实努力了，但我只能做到这个水平。公司实行的是双休，早上8点半上班，下午6点下班中午两个小时双休，但实际上我没有几天下午六点走过，八九点是常态，甚至回去以后还写代码，用户改了需求还得改接口，这都是为了好好表现好早日转开发。有一天leader说要开民主生活会，让我们准备一下。我不知道什么是民主生活会，没放在心上。第二天leader问谁写了笔记并且表扬了谁，然后让我们总结了一些自己当下的缺点，感觉每个人都没什么想说的但必须要说些什么，而后来leader甚至让我们去读他推荐的毛选文章并且发表了一些他的高论，这个时候我知道了民主生活会其实一点也不"民主"。再有一次，可能是员工把标书写出错了，而他也没有检查，说是什么串标会让老板"进去"，还说了网上临时工背锅其实有一定道理，多半是手下员工的问题，老板能有什么错的论调，以及之前招实习生来直接上项目，用完就走，利益最大化的运营模式，我心生厌恶。在一周的周五leader和我说下周你就可以转正了（但其实这个时候还没有跟我谈具体的待遇），在周末的时候，我思考了很久，并且在v2ex上问了下大家的意见之后我决定离职了。总的说来还是自己没有社会经验，认为自己努力就有回报，其实我应该更多关注自己获得了什么.是学到了技术还是收获了金钱，我应该就像我后来带的那个实习生一样到点就下班"leader,我学校比较远，再不回去就锁宿舍门了"，人家照样拿5k工资（因为他是研究生所以比我高1k）。考公考编经历我第一次考公是我考研之后报名的省考，当时觉得要离家近然后还算繁华，就报了昆明的一个审计局。之后却没有好好准备反倒是快到考试看了有170多个人报名招3个人觉得肯定考不上于是就没有去参加笔试，第二次是参加烟草考试，但当时还在上班所以是报名之后，边上班边复习，只复习了一周不到的时间，然后考试在昆明考，所以我得在周五下班后赶凌晨的飞机飞往昆明，周六在酒店复习了一天烟草专卖法，周日考完试再坐凌晨的飞机第二天上班。这还不说，结果复习到的题目几乎没有考到，最后好像距离进面试差了几分。第三次是我报名事业单位的考试，准确来说也不是我报名，而是我姐帮我报的名，那天因为他说不能在武汉这边上班，等到那边考上后再离职，所以我就放弃了报名，而我姐因为有我的信息，在最后那天我去上班的下午帮我报了名，结果我周末就离了职。然后就顺理成章地回来参加了这个比赛，幸运的是我还通过了笔试，记得是有2000多人来参加考试的，考试的前一晚我还不抱希望在打艾尔登法环，第二天早上出酒店门准备去考场看到好几个考试手里攥着和我一样的准考证，我还跟送我去考场的滴滴司机打趣道"这么多人考这个试，我还不如回酒店睡大觉呢"，后来我不抱有任何希望的时候我姐打了电话过来，说最下面没看到我名字，往上滑结果还通过了笔试位居第二（如果不是我姐帮我查分，我早把这事忘了），后来就报了个面试班，本来报的粉笔先交2750考过之后交1.5w，后来说是人数凑不齐，开班时间一拖再拖，而且老师也极度不专业去年明明考的是无领导面试，她却说是考结构化。又过了一天还是开不了班，我就退了。去报了华图的它的价格便宜了只要考过之后交1w(其实我觉得还是很贵)，后来就按部就班地上课，之后居然还考了个面试第一，但后面体检的时候出了幺蛾子，通知我复检了。而且快一个月了也不知道结果如何。这也是我最近的一个压力来源之一，因为家里人很看重这个，祖上三代贫农特别希望出一个体制内的成员。我能理解，但确实压力很大，希望结果是好的吧。
正向代理（Forward Proxy）定义正向代理是一种位于客户端和目标服务器之间的代理，代表客户端向目标服务器发出请求，并将服务器的响应转发给客户端。[客户端] ----> [正向代理服务器] ----> [目标服务器]特点作用于客户端：客户端通过代理访问目标服务器，服务器不知道客户端的真实IP。隐藏客户端信息：可以帮助客户端隐藏其真实IP地址。突破访问限制：常用于访问被限制的网站（如翻墙）。典型应用场景绕过网络审查或防火墙。提升客户端隐私，隐藏其真实IP地址。提供缓存功能，加快客户端的访问速度。Nginx 正向代理配置示例server { listen 8888; # Nginx 监听的端口 location / { # 代理客户端请求到目标服务器 proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }在该配置中，Nginx 代理客户端的请求到目标服务器。客户端可以通过代理访问任何目标地址。反向代理（Reverse Proxy）定义反向代理是位于客户端和服务器之间的代理，代表服务器接收客户端的请求，并将其转发给内部真实服务器。对客户端而言，反向代理就是目标服务器。[客户端] ----> [反向代理服务器] ----> [后端服务器1] [后端服务器2] [后端服务器3]特点作用于服务器端：客户端只知道代理服务器，并不知道后端真实服务器。隐藏服务器信息：可以隐藏后端服务器的IP地址和架构，提升安全性。负载均衡：可以将请求分发给多个后端服务器，提升系统的性能和可用性。缓存功能：反向代理可以缓存后端服务器的响应，提高访问速度。典型应用场景负载均衡：分发流量到多个后端服务器。安全性：隐藏真实服务器，防止直接攻击。SSL 卸载：处理 SSL 加密，并将明文请求发送给后端服务器。静态内容缓存：缓存静态资源，减少后端压力。server { listen 80; server_name example.com; location / { # 代理请求到后端服务器 proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }在该配置中，客户端请求 example.com，Nginx 将该请求代理到后端服务器 backend_server。客户端并不知道 backend_server 的真实信息。正向代理 vs 反向代理特性正向代理反向代理代理对象客户端服务器隐藏对象隐藏客户端信息隐藏服务器信息客户端角色知道自己在使用代理，主动选择代理服务器不知道自己在与代理服务器交互主要用途翻墙、访问受限资源、隐藏IP负载均衡、缓存、SSL卸载、安全性提升典型应用场景绕过防火墙，访问受限资源，隐藏客户端IP负载均衡、隐藏服务器、SSL卸载、缓存静态资源
值此中秋之际，我也进入了厨房大展了一下身手，决定做一道色香味俱全的清蒸鲈鱼食材准备鲈鱼一条（2斤）生姜（若干）大葱（若干）蒸鱼豉油（一瓶）植物油（若干）制作过程买一条好鱼在市场上一条鲈鱼大概38块钱一斤，买活的最好，买不到的话冷链也可以，俗话说的好眼睛是通向心灵的窗户，鱼也一样。鱼的眼睛越混浊代表死的越久，就不要买这种鱼了，嫌杀鱼麻烦的朋友也可以让热心摊主帮忙，但是不要剁成小块了，毕竟咱是要做清蒸。拿回家之后还需要做一些处理，顺着鱼的脊椎两边各划一刀，同时肉最后的地方也划一下但是注意不要划穿了，不然鱼蒸熟后会烂掉不好凹造型，同时外面也划几刀同样注意不要划穿，最后鱼的造型是这样刚好趴在碗里。把鲈鱼淹死把半个生姜切成片，再把大葱切成段，最好揉两下，放到一盆水中，同时把处理好的鲈鱼放到葱姜水中浸泡15-30mins，这一步的目的是把鱼淹死，同时去除鱼的腥味，让鱼的味道更加鲜美。准备葱姜丝在泡鱼的同时我们来准备其他调料把一根大葱从头到尾卷起之后从侧面把它切成葱丝准备一点姜丝之后把葱丝放到一碗水中，这样可以让他卷起来更好看准备蒸鱼找一个大一点的碗，把刚刚泡鱼的部分姜片垫在盘子地下，同时把一些剩下姜片和葱段塞到鱼肚子里更加入味，为了防止鱼不熟，在鱼肉最厚的地方用两根筷子交叉垫起，把鱼架在上面，最后在鱼的表面抹一层植物园，这样可以让鱼更加具有色泽和香气蒸鱼把鱼放在锅里蒸7-10mins不要整太久不然鱼肉会烂掉出锅调味把鱼端出来后会有部分鱼汁在盘底觉得腥的朋友可以把它倒掉，当然鲈鱼本身腥味不是很大，同时这汁水也是营养最丰富的部分，所以我没有倒掉，接下来把刚刚泡好的葱丝和姜丝放在鱼的表面，同时准备一勺滚烫的热油，倒在鱼背上，最后再在鱼上倒入适量的蒸鱼豉油，这样一道美味的清蒸鲈鱼就做好了总结清蒸鲈鱼是一道健康美味的菜肴，富含营养，带来多种健康好处，特别适合需要低脂饮食的人群。以下是食用清蒸鲈鱼的主要好处：高蛋白质：鲈鱼富含优质蛋白质，能够帮助身体修复组织、维持肌肉和增强免疫系统。蛋白质也是人体必需的营养素，适合健身或需要补充蛋白质的人。低脂肪、低热量：清蒸鲈鱼的脂肪含量相对较低，尤其是相比于红肉。对于需要控制脂肪摄入或者减肥的人，清蒸鲈鱼是一个不错的选择。富含欧米伽-3 脂肪酸：鲈鱼中含有欧米伽-3 脂肪酸，这种脂肪酸有助于降低胆固醇水平，促进心血管健康，减少心脏病的风险。富含维生素和矿物质：鲈鱼中含有丰富的维生素B群（如维生素B12）和矿物质（如磷、镁、锌）。这些营养素对维持神经系统、骨骼健康和细胞功能非常重要。促进消化：清蒸是一种温和的烹饪方式，不需要加入过多油脂，保持了鲈鱼原有的营养和口感，同时容易消化，适合消化功能较弱或需要清淡饮食的人。肝脏健康：对于有肝脏问题的人，如脂肪肝，清蒸鲈鱼是一种低脂肪且富含优质蛋白质的食物，有助于减少肝脏负担，促进肝功能的恢复。增强免疫力：鲈鱼中的矿物质和维生素有助于提高免疫力，帮助身体对抗感染和疾病。最重要一点：做法简单
写这篇文章之时恰逢中秋佳节之际，祝各位朋友中秋快乐！我的博客自从2022年就已经建好，但是基本没有写很多东西在上面，搭建之初只是为了方便而使用了gitalk来作为评论系统。但这个开源项目的评论是基于github的issue来实现，虽然数据也是存储在自己的仓库并且免费。但是由于github在国内的网络环境下时好时坏，大部分情况下无法正常加载。而从个人博客评论功能的需求出发我主要归结为以下两点：加载迅速，不因为没有科学上网工具而无法使用数据安全，也即数据自己可以操控在自己的存储系统里面最好支持匿名评论，因为我不想让别人看个blog还要进行繁琐的登录这个时候刚好看到了一个叫做Artalk的开源项目，使用go语言编写号称轻量便捷并且它还在正常更新，拓展性高，可以本地化部署，正好满足我的需求。部署环境:Ubuntu 22.04正确部署姿势artalk/artalk-go#### **域名解析** 到你域名解析供应商处添加Artalk的域名解析记录如 ```comment.example.cn```指向你的服务器地址 #### **nginx配置和安装ssl证书** 在nginx.conf里面添加如下server块:server { listen 443 ssl; server_name comment.nighterdream.cn; ssl_certificate /etc/letsencrypt/live/comment.nighterdream.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/comment.nighterdream.cn/privkey.pem; # managed by Certbot ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'HIGH:!aNULL:!MD5'; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8081; # Artalk 运行的地址和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }其中证书由Cerbot生成， 至于为什么要反向代理请看下面[曲折经历](#曲折经历) 1. 安装 Certbot 和 Nginx 插件 首先，需要安装 Certbot 和它的 Nginx 插件。如果你使用的是 Ubuntu 或其他基于 Debian 的系统，使用以下命令： sudo apt updatesudo apt install certbot python3-certbot-nginx2. 运行 Certbot 自动化命令 运行以下命令，Certbot 将自动为你的域名生成证书，并更新 Nginx 配置以启用 SSL： sudo certbot --nginx根据提示进行输入信息 3. 测试 Nginx 配置 证书生成并配置完成后，重新加载 Nginx 以应用更改：sudo nginx -tsudo systemctl reload nginx #### **Hexo配置** 以butterfly主题配置为例，打来主题配置文件_config.butterfly.yml找到评论配置部分修改以下内容artalk: server: https://comment.example.cn # 你设置的Artalk服务端域名 site: example # 在Artalk配置中设置 visitor: false option:记得把评论功能打开，并且切换成Artalk Comments System--------------------------------------comments: # Up to two comments system, the first will be shown as default # Choose: Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo/Giscus/Remark42/Artalk use: # Valine,Disqus- Artalktext: true # Display the comment name next to the button # lazyload: The comment system will be load when comment element enters the browser's viewport. # If you set it to true, the comment count will be invalid lazyload: true count: false # Display comment count in post's top_img card_post_count: false # Display comment count in Home Page #### **Artalk配置** 这个使用就可以通过```https://comment.example.cn```访问Artalk的后台评论管理系统了 1. 设置Artalk后台管理员账号 虽然能够访问了却需要账号和密码，在Artalk容器部署端执行：docker exec -it artalk artalk admin[Artalk文档](https://artalk.js.org/guide/deploy.html) 2. 设置可信域 添加以下内容,实际就是设置请求头内容防止跨域问题产生 http://comment.example.cn 防止国产浏览器无法加载，请参看[国产浏览器的坑](#国产浏览器的坑) https://comment.example.cn 3. 配置站点 这里的站点要和docker run 里面的yoursite对应，同时也要和你的hexo 主题配置文件里的site对应 4. 根据自己配置灵活进行，建议开启验证码，防止匿名评论轰炸消耗服务器资源，[参考官方配置文档](https://artalk.js.org/guide/deploy.html) #### **总结** 完成以上操作之后就可以```hexo clean; hexo g; hexo d```来推送博文了 在配置Artalk过程中自己也是踩了很多的坑，局域网内证书注册，还有就是[国产浏览器的坑](#国产浏览器的坑),很多问题都是一开始没有发现，实际操作中才能认识到，特别是国产浏览器无法重定向，估计又是[C2C](https://en.wikipedia.org/wiki/Copy_to_China)(copy to China)的锅，希望官方能够改一改。很多问题也都是在官方文档和错误日志中找到答案和解决办法，看日志的能力也是得到了一次提升。 ## **曲折经历** #### **局域网的坑** 我的博客部署在一台阿里云的服务器上，它的容量很小，所以的构想是将Artalk部署在本地的物理主机上，然后通过frp穿透出去。可是这个想法是好的在实际操作过程中却发现了问题。 我的博客为了安全采用了https协议传输数据，但是Artalk默认使用http在我部署好了之后我发现无法正常加载博客评论，打开浏览器终端发现是由于https和http不匹配造成的。之后我仔细查阅了Artalk的官方文档里面写道： 可以开启ssl加密传输 加密传输 sslssl: enabled: true cert_path: '' key_path: ''你可以配置该项，让 HTTP 升级为 HTTPS，通过 SSL 协议加密传输数据。cert_path：SSL 证书公钥文件路径。key_path：SSL 证书私钥文件路径。你也可以直接反向代理 Artalk 本地服务器，然后在例如 Nginx 启用 HTTPS。这时候就存在问题了我的Artalk是通过docker部署的而在docker 容器内安装证书显然不是一个很好的选择，我就剩下了另一个选择就是通过nginx反向代理Artalk服务器，但是这个时候就又存在了一个问题，**本地局域网内的物理机如何申请证书？**因为我是采用frp实现内网穿透的，所以申请证书基本可以宣告破产。 之后我想了一个办法，那就是把我服务器上使用certbot申请的证书给复制到我的局域网内的物理主机上，可结果确是不行，浏览器提示证书和域名不匹配，无法加载远程服务器资源，所以之后我将Artalk又使用docker部署到了我的阿里云服务器，并使用cerbot申请了证书，使用nginx将artalk本来的http反向代理成https,这似乎所有问题都得到了解决了我的博客的评论可以正常加载了，直到我发现了一个国产浏览器的坑。 #### **国产浏览器的坑** **nginx设置了将http请求重定向到https时，国产浏览器无法生效** 我在博客评论系统部署好并测试好没有问题之后就可高枕无忧，专注到内容的书写上。可当我姐来我家，我让她用她手机访问我博客时却发现了问题，她使用手机的夸克浏览器没法加载评论，这个时候我没太放在心上，可能是一个概率问题。但后面我发了一篇博文到微信上，用微信自带的qq浏览器也提示评论加载错误我这个时候才意识到不是偶尔的问题，而确实存在bug，我本人一共使用三款浏览器分别是：firefox, chrome, edge测试都没有发现任何问题，这个时候我下载了一个QQ浏览器，这个时候提示跨域问题了。 这就让我很不解了我在Artalk(Artalk设置了另外的域名，博客的评论是从artalk的网址加载评论数据，所有需要跨站请求)里面设置可信域：```https://www.nighterdraem.cn, https://nighterdream.cn```。 因为只有国产浏览器才无法加载评论所以我询问了chatgpt为什么我的Artalk评论系统在国产浏览器中会遇到跨域问题，在edge和chrome中却能正常使用以下是我的nginx配置server { listen 443 ssl; server_name comment.nighterdream.cn; ssl_certificate /etc/letsencrypt/live/comment.nighterdream.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/comment.nighterdream.cn/privkey.pem; # managed by Certbot ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'HIGH:!aNULL:!MD5'; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8081; # Artalk 运行的地址和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }跨域问题（CORS，Cross-Origin Resource Sharing）在国产浏览器中可能会导致 Artalk 评论系统无法正常使用，而在 Edge 和 Chrome 中可以正常使用，原因可能与不同浏览器处理 CORS 的方式有关。以下是可能的原因和解决方案：可能原因国产浏览器的安全策略差异：国产浏览器（如 QQ 浏览器、360 浏览器等）有时会对跨域请求进行更加严格的处理，而国际浏览器如 Chrome 和 Edge 可能会对开发中的应用更宽容，特别是对于本地服务器或 HTTP 请求。CORS 头缺失：你的 Nginx 配置中没有明确设置 CORS 相关的响应头，这可能导致国产浏览器拒绝跨域请求。代理转发的 Headers 问题：Artalk 的跨域配置可能没有正确传递给浏览器。国产浏览器可能严格要求返回正确的跨域响应头。解决方案在 Nginx 中添加 CORS 头：你可以在 Nginx 的配置中添加允许跨域的响应头，确保浏览器能够正确处理跨域请求。你可以在 location 块中添加如下 CORS 配置location / {proxy_pass http://localhost:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 添加跨域响应头 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; add_header Access-Control-Expose-Headers 'Content-Length,Content-Range';}这将允许所有源对你的服务器进行请求。如果你想限制特定的源，可以将 Access-Control-Allow-Origin 的值替换为特定的域名。确保 Artalk 支持 CORS：检查 Artalk 的配置文件或后端设置，确保它支持跨域请求。Artalk 可能需要配置允许的 Origin，确保它支持通过反向代理的跨域请求。OPTIONS 请求的处理：有时候浏览器会发送预检请求（OPTIONS 请求）以确认服务器是否允许跨域访问。你可以在 Nginx 中为 OPTIONS 请求添加一个单独的处理：if ($request_method = OPTIONS) {add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; return 204;}检查浏览器控制台的错误信息：如果问题依然存在，可以在国产浏览器中打开开发者工具，查看具体的错误信息，确认是哪个请求遇到了 CORS 问题。通过添加这些 CORS 设置，应该可以让国产浏览器与 Edge 和 Chrome 一样正常访问你的 Artalk 评论系统。 我按照他的建议进行了更改，但之后我发现连edge和chrome都无法加载了，查看请求头：HTTP/1.1 200 OKServer: nginx/1.18.0 (Ubuntu)Date: Mon, 16 Sep 2024 09:44:16 GMTContent-Type: application/jsonContent-Length: 731Connection: keep-aliveX-Request-Id: 001151ae-c7f7-4002-945b-748a1af32112Vary: OriginAccess-Control-Allow-Origin: https://www.nighterdream.cnAccess-Control-Allow-Origin: https://www.nighterdream.cnAccess-Control-Allow-Methods: GET, POST, OPTIONSAccess-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,RangeAccess-Control-Expose-Headers: Content-Length,Content-Range问题出在了 **Access-Control-Allow-Origin的值出现了两次**```https://www.nighterdream.cn``` 所以连edge和chrome也无法打开，原因是我在artalk的可信域里面进行了配置（应用层），然后在nginx里面又进行了配置（代理层），所以Access-Control-Allow-Origin 也就重复了导致edge无法打开，但神奇的是国产浏览器又能打开评论了，之后我将nginx配置中恢复了原样取消手动设置请求头。 这个时候我打开了QQ浏览器的开发者控制台发现如下报错： Access to fetch at 'https://comment.nighterdream.cn/api/v2/conf' from origin 'http://nighterdream.cn' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.这就很奇怪了为什么是```http://nighterdream.cn```而不是我设置的可信域```https://nighterdream.cn``` 然后我就在QQ浏览浏览器的导航栏输入：```http://nighterdream.cn```来访问我的网站，正常情况下我设置了nginx的http重定向https,浏览器应该会自动将导航栏上的地址改成```https://nighterdram.cn```，但是QQ浏览器没有。之后我又测试了edge,chrome浏览器发现他们都能重定向到https所以能够加载评论。 而QQ浏览器，夸克浏览器移动端，微信浏览器为代表的国产浏览器没有重定向而是继续使用http来访问，这也就造成了请求头里的Access-Control-Allow-Origin字段值和Artalk后端的```https://nighterdream.cn```不匹配，所以才无法加载评论，而我将Artalk的可信域里面加入```http:nighterdream.cn```后问题也就迎刃而解。 ## **参考资料** [Artalk文档](https://artalk.js.org/guide/deploy.html) [Artalk自托管评论系统搭建与配置](https://www.richarvin.com/artalk-zi-tuo-guan-ping-lun-xi-tong-da-jian-yu-pei-zhi/#artalk%E5%8A%9F%E8%83%BD%E9%85%8D%E7%BD%AE) [跨源资源共享（CORS）](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS)