注册
环信即时通讯云

环信即时通讯云

单聊、群聊、聊天室...
环信开发文档

环信开发文档

Demo体验

Demo体验

场景Demo,开箱即用
RTE开发者社区

RTE开发者社区

汇聚音视频领域技术干货,分享行业资讯
技术讨论区

技术讨论区

技术交流、答疑
资源下载

资源下载

收集了海量宝藏开发资源
iOS Library

iOS Library

不需要辛辛苦苦的去找轮子, 这里都有
Android Library

Android Library

不需要辛辛苦苦的去找轮子, 这里都有

反转反转再反转,揭秘人心深处的“恶意”

“……真是过分,我每天可是难过得要死。有个爱管闲事的邻居,每天都来找我,我没办法,只好去上学,都快给他烦死了。” “老师和学生的关系建立在一种错觉上。老师错以为自己可以教学生什么,而学生错以为能从老师那里学到什么。重要的是,维持这种错觉对双方而言都是件幸福的...
继续阅读 »

“……真是过分,我每天可是难过得要死。有个爱管闲事的邻居,每天都来找我,我没办法,只好去上学,都快给他烦死了。”


“老师和学生的关系建立在一种错觉上。老师错以为自己可以教学生什么,而学生错以为能从老师那里学到什么。重要的是,维持这种错觉对双方而言都是件幸福的事。因为若看清了真相,反而一点好处都没有。我们在做的事,不过是教育的扮家家酒而已。”


是什么样的经历让他说出这样的话呢?我不明白。


大家好,我是杰哥


昨天晚上凌晨三点,我终于第三次翻完了《恶意》。这本书,真的让我欲罢不能!每次阅读都像是一次心灵的冒险,让我惊叹不已。


作者东野圭吾巧妙地运用手记的方式,将故事的发展娓娓道来。那些看似简单平实的文字,却隐藏着令人震撼的真相。他对复杂人性抽丝剥茧的深刻描画,简直让我眼花缭乱,哑口无言。


故事围绕着一起谋杀案展开:畅销书作家在出国的前一晚于家中被杀,凶手很快便落网了。但别以为这只是个简单的“谁是凶手”的故事,其实更多的是”我为什么要杀他“的故事。


凶手对作案动机语焉不详,倒是引起了著名侦探”加贺“的兴趣,他凭借自己一贯对于人性觉察比较敏锐的”直觉“,以及自己曾经作为老师所亲身经历过的“校园暴力”事件,对”作案动机“展开了缜密的分析与调查。经过层层曲折的调查,终于将真实的动机呈现在我们的面前(此处故意不剧透,以免影响了大家的阅读体验)。我只能说,得知真相的你,一定会被震撼到,从而陷入深思。


我是一个悬疑推理类书籍的书迷,看过很多悬疑推理类的书籍,而这本则是一本题材与故事都很新颖且富有创造力,结局也会很让人意外的其中之一。


读这本书的过程中,我就像是坐过山车一样,情绪起伏不定。每当我以为抓到了真相的尾巴,作者就会巧妙地用一个新的情节把我甩回去。反转再反转,直到最后,我才恍然大悟:哦,原来真相是这样的!大概真正优秀的悬疑推理类小说的作家的仅有的几部作品中,才可以与读者的互动达到这样的效果吧。


这本书不仅仅是悬疑,它更深刻地探讨了人性。恶意,这个看似抽象的概念,在书中被具象化,变得触手可及。它让我不禁深思,人心的黑暗面到底能有多深,我们又该如何面对和控制自己内心的恶意。


东野圭吾的笔下,每个人物都有自己的秘密,每个线索都可能是个陷阱。他的作品,让人读起来往往感觉惊险又刺激,恨不得一口气读完,甚至连旁边的手机也被冷落了。


总之,如果你喜欢心理悬疑,喜欢深度剖析人性的作品,那《恶意》绝对不容错过。它会让你在紧张刺激的阅读中,体验到心灵的震撼!


作者:舒米勒
来源:mdnice.com/writing/924e74e14de748d3b72493d7224aba0d
收起阅读 »

跳舞的人

跳舞的人 从我们大学的老校区南院门口进入,迎面便能看到庄严的主楼。 河北大学主楼 主楼后面是一段有花草树木的路,旁边是多功能馆。在主楼和多功能馆中间,有一块空旷的场地,人们清晨、傍晚常常在那里嬉戏玩耍。 大学一年级下半年、...
继续阅读 »

跳舞的人


从我们大学的老校区南院门口进入,迎面便能看到庄严的主楼。



河北大学主楼

河北大学主楼


主楼后面是一段有花草树木的路,旁边是多功能馆。在主楼和多功能馆中间,有一块空旷的场地,人们清晨、傍晚常常在那里嬉戏玩耍。


大学一年级下半年、大学二年纪一整学年我都是在主楼内的我们学院的机房里值班的。所谓值班就是,我晚上需要在机房对面的小屋里睡觉,白天需要管理好机房的日常使用工作。


因为早晨经常需要帮在机房上课的老师学生开门,所以在主楼住的时候,我会醒的比较早。


醒来后,我会先去食堂吃饭,然后在主楼后面散散步,转一圈。


有天在散步的过程中,听到了主楼前的方向有音乐的声音,我对这音乐比较好奇,便循着声音来到了主楼和多功能馆旁的空旷场地。这里放着一个看起来又大又重的音响,音乐便是从这个音箱里传出来的。在大音箱旁边,一个男生在跟随着音乐跳着舞。


早晨的时间是比较充分的,我便在这站了一会,发现跳舞的男生,每个舞蹈都会重复很多遍。我并不懂跳舞,只是能够感觉出来每一遍舞蹈,都是那么认真、那么投入,我猜他很热爱跳舞吧。


后面每每有时间,我都会走到那块空旷的地方,也经常能够看到他在这里跳舞。我想,这块空旷的场地就是他的舞台吧。


有天早晨,雨下得很大,我很早便被雨声吵醒了,我突然想看看「那个跳舞的人,下雨天会不会来练习跳舞呢?」


我便穿好衣服、鞋子,来到主楼不会被雨淋到的台子上。不一会,我便看到一个打着大伞的男生,拉着音箱走了过来。随着男生越来越近,我看清了,就是他——那个跳舞的人


他把音箱拉离地面,一步一步地走上台阶。我心里想,这么大的音箱,拉到台子上,不重吗?


他慢慢近了,来到了我旁边,我和他互相说了声你好,他便打开了音箱,放起了音乐,跳起了舞来,依旧那么认真、那么投入。


外面很冷,看到他来了,心里的疑问算是解开了,我便向主楼里面走去,回到了机房。


在回机房的路上,我便想,因为热爱,音箱便不会重了吧。


作者:随机的未知
来源:mdnice.com/writing/6882be2b53a04567a77d7be826eef49c
收起阅读 »

Redis不再 “开源”

Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始,...
继续阅读 »

Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。


具体来说,Redis 将不再遵循 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始,Redis 采用 SSPLv1 和 RSALv2 双重许可证。Redis 源代码将通过 Redis 社区版免费提供给开发者、客户和合作伙伴。

SSPL:Server Side Public License

RSAL:Redis Source Available License Redis 产品家族的具体许可证如下:


根据新许可证的条款,托管 Redis 产品的云服务提供商将不再允许免费使用 Redis 的源代码。例如,云服务提供商只有在与 Redis(Redis 代码的维护者)达成许可条款后,才能向用户交付 Redis 7.4。

Redis 官方表示:

实际上,Redis 开发者社区不会发生任何变化,他们将继续拥有双重许可证下的宽松许可。同时,Redis 负责的所有 Redis 客户端库将保持采用开源许可证。 Redis 将继续支持其庞大的合作伙伴生态系统(包括托管服务提供商和系统集成商),并独家访问 Redis 通过其合作伙伴计划开发和提供的所有未来版本、更新和功能。 现有 Redis Enterprise 客户没有变化。 总的来说,对于使用 Redis 开源版本和新版本的 Redis 的最终用户(使用双重许可证进行内部或个人使用),没有任何变化。

对于使用 Redis 构建客户端库或其他集成的集成合作伙伴,同样没有任何变化。 Redis 对这次修改开源协议的举措十分坦诚,他们承认 Redis 不再是 OSI 定义下的“开源”项目。但他们仍是开源理念的支持者,并会继续维护开源项目。


原文:https://mp.weixin.qq.com/s/9_-w6lF7ffiu49WbEORPtQ

收起阅读 »

我不敢把水烧的太开

我不敢把水烧开,那样家里会有两个沸物。我也不敢把房间打扫的很干净,我怕太干净,垃圾只剩下我。我常坐在窗口看着窗外发呆,这悲伤来的没有油头。床上有两个枕头,一个是我的,另一个也是我的,因为我裂开了。我也经常熬夜,因为天冷了,时间就不说了。白天面对的是生活,夜晚面...
继续阅读 »

我不敢把水烧开,那样家里会有两个沸物。我也不敢把房间打扫的很干净,我怕太干净,垃圾只剩下我。我常坐在窗口看着窗外发呆,这悲伤来的没有油头。床上有两个枕头,一个是我的,另一个也是我的,因为我裂开了。我也经常熬夜,因为天冷了,时间就不说了。白天面对的是生活,夜晚面对的是灵魂,一半的时间来生存,剩下的时间拿来滋养灵魂!我熬的不是夜,是我短暂的自由。青春献给了梦想,梦想败给了现实。小时候无忧无虑,倒头就睡,长大后忙于生计,失眠怎么常态。背井离乡的颠沛流离,不过是为了碎银几两。习惯了一个人的独处,也慢慢接受了自己的平庸。我们不是故事里的主角,也没有主角光环!我们只是茫茫人海中的渺小一个。不曾坐过飞机,也没喝过星巴克,更没有用过奢侈品。小时候的自由人,长大后的笼中鸟。以前叫醒你的是父母,现在叫醒你的是生活。我们变得好像是机器人,每天起床的意义就是重复的工作。 我似乎感受到那袭来的风划过,渴望度图欣赏,但更吹醒了我的意识,要继续生存下去,夜深人静是自由醒来清晨是生活,朋友人间自由身,却非人间自由人,看似自由自在,实则身不由己。


我不敢轻易点燃热情,以免世界再添两个燃烧的灵魂。我也不敢让心扉过于透彻明亮,只怕纯净得只剩下自我孤独。我常常倚在窗前凝望星空,那份寂寥悄无声息地蔓延。床榻上有两个梦乡,一个属于清醒时的我,另一个属于深夜里破碎的我。我时常与黑夜为伴,仿佛只有此刻,才握住了片刻的宁静。白昼应对的是繁杂尘世,夜晚则是对内心世界的对话,一半的生命为了生存而奋斗,另一半则用来沉淀和丰盈心灵。我熬的不只是夜,更是那一份难能可贵的自我空间。青春曾向理想倾注所有,而理想最终却在现实中折戟沉沙。儿时懵懂无知,酣然入梦,成人后疲于奔命,反倒是失眠成了常态。远离故土、四海为家,无非是为了那些散落各处的铜板。渐渐习惯独自行走,也逐渐接纳了自己的平凡无奇。我们并非小说里的主人公,身上也没有主角光环庇佑,我们只是芸芸众生中的一员。未曾体验云端飞翔,亦未尝品鉴星巴克的香醇,更谈不上拥有奢侈品牌的光环。曾经那个随性率真的孩子,如今已变成囚禁在生活牢笼中的飞鸟。过去的黎明由父母唤醒,现在的黎明却是生活的催促。我们如同被设定程序的机器,日复一日只是为了重复的工作奔波。


我恍若感受到那阵疾风吹过,虽有心去追逐欣赏,但它更像是一记警钟,提醒我要坚韧地活下去,深夜的清醒是对自由的领悟,破晓的苏醒则是对生活的担当,身边的朋友皆似世间自由行者,却非人人能真正活得洒脱。表面看似悠然自得,实则都身陷无形的生活枷锁之中。


作者:Young_
来源:mdnice.com/writing/ac9b73a2a7f84f1eb843a6c404a82701
收起阅读 »

《健听女孩》——一部感人的电影

故事 《健听女孩》的主人公是一个听力正常爱唱歌的女孩鲁比。这里为什么强调听力正常呢?因为她的父母和哥哥都是聋哑人,家里只有她自己一个人具有听力。这个家庭以捕鱼为生,渔船通知响应,渔获交易,与人沟通等事情都是由她进行翻译来进行的。这个家庭很需要她。 她有去伯...
继续阅读 »

故事


《健听女孩》的主人公是一个听力正常爱唱歌的女孩鲁比。这里为什么强调听力正常呢?因为她的父母和哥哥都是聋哑人,家里只有她自己一个人具有听力。这个家庭以捕鱼为生,渔船通知响应,渔获交易,与人沟通等事情都是由她进行翻译来进行的。这个家庭很需要她。


她有去伯克利音乐学院面试的机会,这是她的梦想,本片就是主要讲述了她在梦想与家庭进行抉择的过程和家庭成员的看法、处理方式等。


被“嘲笑”


鲁比出生在聋哑家庭,可想而知,她的家人没有办法教她讲话,她的发声很难听,这遭到了她的同学们的嘲笑、欺凌。她每天凌晨三点便起床与家人一起捕鱼,有时会来不及换衣服,同学也会嫌弃她身上的鱼腥味,进行讥讽。


种种这些,让她幼小的心灵受到了很大打击,所以她害怕面对她们,同时也造成了她的自卑、敏感。


师生情


在报课程的时候,她选择了合唱课,因为她热爱唱歌。但是第一节课,老师让大家开唱的时候,她却逃避得跑出去了。后来和老师讲明因为自己得经历,不敢在同学面前唱歌,害怕被嘲笑。老师给了她鼓励,让她有了自信。


老师发现她的天赋,推荐她去伯克利面试,同时教她唱歌。


在家庭不同意她去伯克利学院时,对她进行惋惜。


友情和爱情


鲁比得闺蜜是她参加合唱团前唯一的好友,闺蜜帮她分担心事,支持她唱歌。


参加合唱团后,她又有了一个男性朋友,是她的二重唱的搭档,当然也发生了一些小插曲。这位朋友家庭也存在一些问题,他的爸妈关系不和,他选择唱歌也并不是自己本意。后来她俩互相了解,互谈心事。 成为了男女朋友。


亲情


这部电影主要还是讲解亲情的。


在得知鲁比想去读大学时,她的妈妈特别反对,她说,“她不能离开我,她是我的宝宝”,爸爸说,“可是她从来没有当过宝宝”。是啊,她从小就帮家里进行翻译,是这个家与外界沟通的桥梁。她这么小就承担了这么多。她的爸爸希望她去,但是这个家庭没有她是没办法运作的。她的哥哥在看到父母把鲁比当成最重要的沟通媒介时,他心事重重,他认为他是哥哥,这些事情他也是能做好的。


虽说她的妈妈开始不支持唱歌,但是在她要进行表演的时候还是送了她一条红色裙子。她俩谈心过程中,妈妈在生孩子时希望鲁比是聋哑人,因为妈妈怕如果是正常儿童的话,自己的聋哑会成为一个“坏妈妈”。 在闺蜜和鲁比哥哥讲述了鲁比唱歌方面的天赋后,他很希望她去参加面试。


她还是没有选择去面试。这是她想成全家庭,因为她知道家庭对她的需要。


一家人一起去看了她的表演,看着台下人的感动,鼓掌,落泪等行为,爸爸心事重重,回到家后爸爸让她为她又唱了一遍,在星空下,他摸着她的振动,感受歌曲。


后来一家人一起去参加了伯克利的面试。这是家庭成员对鲁比的成全。


总结


这是一部很感人的电影,故事的讲述行云流水,每一个转折恰到好处。能够让我们聆听到悦耳的声音。


作者:随机的未知
来源:mdnice.com/writing/4a81248164b4409f8be55c27575fbf3b
收起阅读 »

勇闯天涯-程序员小哥哥,来婚介所试一下嘛(七千字长文预警!)

前言 今天技术博主不聊技术,聊聊生活聊聊情感。先叠个甲,我纯纯乐子人,对婚介所无任何恶意,可能后面还得用上,本次纯纯试探下婚介所是个什么路数!事件源于上周五的一通红娘电话,我一听要给我介绍有钱有颜的小姐姐,直接挂断,这天底下哪有这样的好事。当天下午的时候,又给...
继续阅读 »

前言


今天技术博主不聊技术,聊聊生活聊聊情感。先叠个甲,我纯纯乐子人,对婚介所无任何恶意,可能后面还得用上,本次纯纯试探下婚介所是个什么路数!事件源于上周五的一通红娘电话,我一听要给我介绍有钱有颜的小姐姐,直接挂断,这天底下哪有这样的好事。当天下午的时候,又给我来了一通电话,仿佛不知道我给她挂断了一样,基于一些奇妙的想法,我想尝试以及找找素材,我决定让她微信跟我聊。然后因为博主工作比较忙,打了招呼后,就没理她,最关键是到晚上下班后,我也忘了这档子事。周六的下午四点左右,一通电话开启了本次的故事,即使315曝光了相关产业,但是博主依然要冲,就是头铁。


阳光下午的微醺时光


接到电话的时候,我挺疑惑的,这次上来就问我现在是不是有空,出于礼貌,并且我也听出了她是昨天那个红娘,我就没有挂断电话。上来就说,弟弟,我是XX老师,今天来电话主要是聊一下,看能不能进一步推荐小姐姐。说她那里看资料我是97年的程序员,年收入XX,对吗?然后我说是,她就跟我说这里有个小姐姐挺合适的,北京XX工作的,身高165身高,本地的,收入XX。哥们一听就懵了,本地的,心里OS是,那咋遭得住,咱也不是高富帅,纯纯普男。红娘一听就问我有没有考虑常驻北京,然后就问我老家哪里的,我说四川的,她就在资料库里找了找,说真有个四川在北京的,快速给我念了一遍女生的资料。


接着就离谱了,问我怎么称呼?我说姓王,哪里工作,海淀XX公司?红娘直接薄纱,诶,没听过耶( •̀ ω •́ )y,咱们一般服务百度、阿里和字节的比较多。好好好,北京人中龙凤就是多,哥们就是菜中菜,脸都绿了。接着问我加班如何,公司福利啥的,然后说我这个181cm的身高在四川挺高的,她知道的四川男生都不太高来着。然后聊到了哥们的毕业学校,说前两天有个大连理工的女孩,真绝了,大家都这么爱走婚介所吗?我感觉聊到啥,都有女孩能配上,后面说到工作,又聊到一个大二的姑娘还没工作就来找对象了,好好好,走上了人生快车道。


然后聊到了我父母的职业,就说哥们的条件在当地不错,怎么没找上对象?我当时就说到了我的前对象,网恋的,就在掘金找的,一说到这个,好兄弟们,掘金真的能找对象的,不骗人。我的失败不是网恋的问题,纯属我自己的问题,第一次谈吧,不知道咋谈,自己也是摸不准进度,达不到对象的期待,慢慢地就淡了。我也是无脑纯爱战士,这是红娘听了之后的评价,哈哈,不过我觉得前对象确实挺不错的,当时要是硬扛着也能继续,但是我感觉可能是热情燃尽了,她也算是太忙了太累了,无论是生活还是工作,我都挺佩服,主动退出,我感觉应该是我被甩了。不后悔,男人就该当断即断,她也不小了,继续耗着,对她不公平。说远了啊,核心意思就是,网恋也有靠谱的,掘金这质量高的离谱,大家多去相亲角看看。


说着说着,突然红娘聊到了星座,说我应该了解了解星座,也说到了一些星座的小知识。然后顺嘴提到了应该门当户对,不只是能力,还有三观,阶层之类的。接着说道,我条件还行,为啥这么晚谈恋爱,是不是打游戏了?我说姐,没毛病,游戏真好玩!又接着问我单身多久了,身边还有没有介绍的呀,同事父母啥的资源。接着就进入正题了,就说小弟弟你呀,身边没有资源,姐姐这里有呀,你又有点慢热,男人花期这么短,这不得抓紧时间。你没谈就是没有遇到合适的人,圈子太小,北京这边初婚太晚了,25岁才准备开始,你想想四川重庆那边20左右就开始准备结婚了,你回去那就是大龄青年了,不是市场上最合适的那一批了。姐姐之前认识一个大哥,一年给女生花了七八万,环球影城去哈尔滨各种礼物砸下去结果手都没牵上。我???这不是大冤种嘛,移动ATM。红娘就跟我说,弟弟你啊,现在这恋爱能力,跟女生比划比划半年结果嘴都亲不上,咱们也不要浪费时间,选对人比胡乱去试强多了。姐姐我这啊,适合你的资源还蛮多的呀,你是B站来的资源,这种比较少,一般只占15%,我们婚介所大部分都是线下和国企政府合作的,所以需要你提供一定的身份和征信资料,因为我们这的姑娘都是认证过的,要对大家负责。接着又说觉得我性格比较好,很坦诚,就问我对女生有没有什么要求,我说年龄上不超过我三岁吧,不抽烟不去酒吧夜店,然后红娘跟我说,你这就没别的要求啦,那还挺低的,然后就问我三观、家庭情况之类的要求,问的很细。然后谈笑间,红娘给我猛推三个女生,嘎嘎读资料,听得哥们心里发慌,动不动就是大厂,家里有矿,问女生条件是否符合我的要求.......我真蚌埠住了,哥们真的配嘛,这条件谷歌,父母地方小领导或者开公司,问我符不符合,好好好,我能傍富婆不?


有一说一,专业红娘就是能聊,我俩聊了得有一小时,最后说让我去线下谈,给我预约了她明早10点半的时间。她想要了解下我这个人的衣着品位、谈吐举止、再做下深度的了解,以及一些信息的认证,同时也给我一些情感上的建议,让我少走些弯路。哥们听到情感上的建议,真的心动了,教练,俺就缺这个,确认了下这次聊天不收钱,就是个单纯的信息认证,我就决定去了。


小雨霖霖的春日午前


因为约好的时间是10点半,我住在石景山,婚介所在朝外SOHO那里,差不多一小时十几分钟的路程,我就九点出发了。到了地方之后,周围有好几个SOHO,没有明显指示牌,而且感觉周日早上那里人也少,当时就觉得奇怪了。因为事前的时候,跟亲友和群里的小伙伴下过军令状,不掏一分钱,实时播报进度,没消息就赶紧救我,所以我倒也没有特别慌。我的想法就很纯粹,想通过红娘的眼睛来认识我在相亲市场中是什么样的,因为我接触的人相对少嘛,所以也算是练练胆,特别是这种情感上的,多积累积累经验总没错。没找到地方,我就拍了个附件的标识给红娘老师,她就指挥我上了楼,上楼之后还蛮吓人的,左边黑的,右边就她家灯亮的。


进门之后有个助理来接待,给了我一张表单去填,相对详细哈,但是身-份-证这敏感信息可以选择不填,其实这会儿我觉得还挺不错,放下了防备,但是打开了录音,哈哈。把我领到一个逼仄的会议室,大概两平米吧,首先给我拍了一张坐着的照片,然后在我填表的时候,说要看下我的征信,简单点的就看芝麻信用就行,看了我的八百多分吧,就说你这还蛮高的。又试探性的问了能不能看下花呗借呗之类的,我寻思着也没多少额度,那就看呗,他一看就挺奇怪的,就说按你这个分数应该有好几万才对呀,你是自己调了吗?我说是呀,没事搞那么多干啥,又问我有没有信用卡,我说就拿花呗当信用卡。又说想看我支付宝里的资产,我寻思着没几个钱,那就看呗。他一看就说,你没炒基金股票啥的嘛,我说没,他就顺着话说,昨天有个姑娘和你一样,也是这样的,她就喜欢这种稳赚不赔的。浅聊了一下就说,去给我叫红娘老师,说红娘老师特别看重我,昨天周六来了好多姑娘,很多都不错的,让我跟红娘老师好好学学。哥们一听这个就来劲了,好啊,就是要这个,我不就缺这套恋爱情商嘛。


热情似火的夏日狂欢


红娘老师进来首先点评了我的头发,有点长还有点凌乱,说怎么还没理发呀。这一点说的挺对,我快一个月没理了,因为头发烫过,又有点长,显得乱。然后又说我好白呀,南方人皮肤就是好,因为我有痘痘嘛,就聊了聊油性皮肤。然后就跟我说想看看我短发的照片,说比较难想象我短发的照片,又说我这个是不是渣男锡纸烫,认出来了我这是前刺发型,感谢我的四川托尼,摩根前刺音容犹在。然后又说我字写的还不错,我说着就没必要硬夸了吧,她说跟其他人对比算是工整了。因为看到我手机壳了,就问我是个什么图案,我给她看了是二次元,她就问我是不是老爱玩B站,是不是博主,我说我哪是啊,只是喜欢看。她就说你声音还蛮好听的有点像肖战,可以整点视频啥的,说不定还能火。我说没那颜值,哈哈,谈笑间我就给她发了几张我的生活照,还有全身照片。她就说没有很胖呀,看着还好,而且家里还蛮干净的,弟弟习惯不错。


我也比较能说嘛,我就说红娘老师怎么不开个号啥的,吐吐槽啥的,比如B站上的XX说媒啥的。她跟我说她们上班很忙的,周一周二休息,平时都是快九点才下班,哪有时间开视频吐槽,都是朋友之间聊聊。然后她就很好奇我之前电话里说的前对象嘛,就聊了聊我前对象的事。因为我是抱着想要咨询的目的来的,所以我也说的相对比较详细,红娘比较在意的点是各阶段时间点、怎么认识的、告白怎么做的、准备了什么样的礼物和GG的理由。大致说了一遍,我觉得我前女友挺好的,无奈博主高攀不上,也没有达到人家的期望,就选择了默默退出。前女友说实话很不错的,情侣头像是我先换她才换的,我说话她也会回我,是我感觉被甩了,也是她有点冷吧,就放弃了。说这些呢,也是跟前面一样,说一下兄弟们要勇敢冲,掘金相亲角也靠谱,哪有那么多渣女,大部分还是好女孩,希望大家都把握得住,找到合适的另一半!


红娘老师跟我说了几个之前来聊的哥们,就说谈恋爱不能太晚,有一些大哥因为圈子比较小,导致来婚介所就想找个合适的姑娘一步到位。但是哪有这么合适的呀,一点攻略和目标都没有,怎么可能一口吃个胖子!我也附和老师说,对啊,心急吃不了热豆腐。然后就跟我说,昨天来了两哥们,一个京东一个百度的,还有00年来找对象的,我一听都懵了,这不都是人中龙凤嘛,这还愁对象,有没有大厂哥们来现身说法的,让小弟我长长见识。聊着聊着,就跟我看了个小姐姐,大四左右吧,想找个大五岁左右工作稳定的哥们,本身条件很优秀的,北交大硕士进国企,所以想要个稳定的生活。反正红娘老师意识就是说,现在女生吧,恋商普遍比男生多个三五年,现在这么卷,考虑得都比较现实。然后就说现在女生都是要求有钱有颜,小弟弟你也没钱,正在发展期嘛,颜的话还算周正,需要打理打理。然后就说想看看我之前的照片,要看我手机,emmm,这时候我没发现这是个套路,应该之前有哥们也做过这事儿。我有开录音嘛,左上角有小标,很烦,红娘应该是特意盯了这个地方,一开始问我怎么不给她看手机,而是直接发给她。我也没在意,她就老找理由看我手机,然后我也不小心被她看见了,她就问我是不是忘了关导航,哈哈,我打了个马虎眼就过了,然后后面过了一阵又看到了,就直接问我是不是录音。我非常坦诚的告诉她就是在录音,有顾虑,然后我也当着她面关了,我俩嘻嘻哈哈也就把这事过了。


想要摸一下秋天的老虎


聊了聊我的家庭,跟我聊了聊她最近咨询过的男生,有成功也有失败案例,反正都是会员。比较隐晦地指出了我这个水平在北京不够看,在成都也不算特别优秀地类型,但是结合家庭和年龄来讲,也算是还不错,至少还有操作空间。我一开始就想知道我在婚恋市场是个什么档次,以及从红娘视角来看我是什么样的,所以我就直球问她了。或许是基于职业素养,或者我问的有点子收费味道了,她顿了一下,从两方面给了我建议,一是从我初恋这段历程总结出来的,说我就是没有技巧的纯爱战士,需要提高情商,反正套话居多。二是不要乱撒网,要精准定位,选择自己合适的人,基于星座啥的跟我聊了半天,我这金牛座适合什么样的人。然后就说我这个改是来不及了,27也不小了,没救了,就从选对人开始,然后就开始围绕她们的服务开始聊。


总共聊了得有三小时左右吧,前一个半小时唠家常,根据你的资料聊细节,时不时说说女生的资料。后面就开始猛攻,围绕中介所的两项核心服务,一是心动女生匹配筛选,二是全程跟踪指导,结合真实案例开始跟我介绍。比如女生这个,真的是拿了五六份女生的资料,就跟简历似的,问我有没有眼缘,又跟我说这几天来了什么什么姑娘,有还没毕业的,有点子真实案例掺点焦虑的感觉。比如全程指导,给我看了她手下成功的案例,放了点截图和视频啥的,让我看效果。


中间插一下哈,聊聊我对红娘的看法,真的很强。能干这行的都是社牛,还有很强的气场,我确实能感觉出来她是很快乐地在撮合,觉得是在做正确的事,收的钱理所应当。说真的,要不是我去之前就抱着分文不出的想法,她一顿吹我真给了,业务能力太强了。她聊天的话,目的性很强,总是往婚介服务,这个筛选方向去带,会弱化你的劣势,不会很明显地贬低你,但也不会特别夸耀你的长处,就把你当作一个朋友一样,所有都是围绕我们能给你找一个天造地设的对象这一核心点展开。说实在的,动不动认个亲弟弟这操作也太骚了,见面第一次,这社交强度直接拉满,很热情。


聊聊收费啥的,好像每个人都不一样,给我的标准是1年49990,半年29990,3个月19990,后面我说不用了,拉扯半小时,认我做亲弟弟,然后给我亲属价对赌协议,先交10100等成功了再补9890或者给她介绍2个就不用给尾款了。最后博主一是领导在催干活,嘎嘎电话,朋友在催吃饭,也微信电话不停,就想润了,红娘就说要不先交500定金,不行再退,我确实没这想法,就发了50红包给姐买奶茶。反正这吃相一出来就有点尬住了,我这确实是很好说话,没有一甩脸子直接走了,就这么耗着。说实在的,我确实觉得人家说了3小时,这总得有点收益,50块钱在北京不是什么大钱,但是我本来也是抱着聊聊的想法,没想到上来就这么狠,直接2W起步,真恐怖,润了润了。


又到了白色相簿的季节


最后聊聊博主的收获,有用信息不多哈,大部分是一些套话,这大概就是免费内容吧。她给我看了客户的跟踪记录,红娘会全程指导男生的行为,会推一些书或者情感内容啥的,当然,这都是收费内容。怎么说呢,这一次三小时的激烈battle,我也能感觉出来,我还是该在情商上做一些提升,红娘有提到男女之间的情商和朋友之间的情商是两码事,说我上一次挂了就是技巧不足,竟然半年连嘴都没亲,这还是人???跟我说她们那里的都是一个月速通,我这样的已经没救了,好好好,这年头纯爱战士就是鲨BEE。


我其实对这家婚介所没啥意见,我也是想着既然聊上了那就去看看呗,没想到第一次这强度就这么大,哈哈,离谱。我看了下女生资源都很不错,男生也很厉害,都是人中龙凤,不知真假。XX爱恋,她跟我说主要还是线下,我的资料是从B站过去的,就离谱,不知道我填啥了,一开始就知道我的性别年龄和手机号,其他一概不知,可能是我资料被卖了吧,根据年龄给我推送的。喔,对了,说是每周给政府或者国企办公益相亲会,我之前倒是没怎么了解,不知道她家是不是在北京属于厉害的了,还是纯诈骗,摸不清楚,这也是我没交钱的理由之一。因为我在B站上看过XX说媒嘛,我就问她,怎么不开个自媒体号吐吐槽,还能挣点外快。哈哈,这姐非常真实,说剪辑、化妆、文案太累了,线下就够赚了,没必要混线上。


写着写着,突然想起来这姐还说过我一个坏毛病,说我没有底线,有点舔狗,女生一般不喜欢姿态放低的男生,希望我有点神秘感,或者说装一点。哈哈,下一个更好,咱们有的是资源,看得出姐是相当洒脱,成年人不改变只选择这话倒是诠释的清清楚楚。还说我应该有个底,不要一上来就跟人托底,比如她一看我就是个逗比的人,结果跟我一聊还真是个嘻嘻哈哈的乐天派,这样就没有神秘感,她说女生一般不太喜欢这种。


最后的最后,她把经理叫来了,做个回访,我是很欣赏红娘老师的,因为我这次没谈成业绩我也是相当抱歉,所以当着经理面说了很多红娘的好话,没有谈成也确实是我的问题。哈哈,经理直接问我,免费给我介绍同意不,我都懵了,这太狠了,我也没答应,这种形式还是太超前了。相亲说实话还是摆条件,看见女生资料搁面前一遍遍刷,人中龙凤太多啦,哈哈,不由得想起了我初恋也就是我前对象,我也得好好努力呀!


锵锵!我闪亮登场!


今天突然想到,好像真是在B站一个UP那里填过资料的,是我错怪人家了。红娘这姐姐挺有意思的,我是真的觉得她干这行很快乐,她还问我对这行有没有兴趣,哈哈。这种撮合有情人就能收钱的事可太行了,我也蛮喜欢这种做好事的感觉。不过骗人的也不少,315曝光过了,大家也长个心眼吧,学会识人。


最后做个总结吧,博主从昨年开始琢磨男女大事,经历了人生第一次相亲会、初恋、婚介所,虽然都只有一次,但都是挺有意思的。哎,母胎SOLO真的太难了,不会谈啊,盲目冲锋的纯爱战士真的不是版本答案了,红娘老师也跟我说,女生感情上比男生早熟三四年以上,难难难,但是博主依旧对生活抱有期望,哈哈,毕竟我是个乐子人。


我的人生信条是,我要让这痛苦压抑的世界绽放幸福快乐之花,向美好的世界献上祝福!!!


作者:云雨雪
来源:juejin.cn/post/7350123500936986674
收起阅读 »

祖传屎山代码平时不优化,一重构就翻天覆地

写作背景 写背景之前先放一张网图,侵删。 有一个活跃应用包含了2个相似业务场景,所以共用了底层模型。 前期在开发过程中,强行将两波研发组正在研发的产品底层模型和能力统一。底层能力统一遇到了挺多问题,比如数据库字段适配、转换、冗余;repo 层 SQL...
继续阅读 »



写作背景



写背景之前先放一张网图,侵删。



image.png


有一个活跃应用包含了2个相似业务场景,所以共用了底层模型。




  1. 前期在开发过程中,强行将两波研发组正在研发的产品底层模型和能力统一。底层能力统一遇到了挺多问题,比如数据库字段适配、转换、冗余;repo 层 SQL 条件拼接用了大量 if else,导致建索引困难…等等。

  2. 一些历史原因,该应用经手了十多个研发,代码是垒了又垒,出现一个很有规律的现象,大家都是只增代码不减代码。

  3. 代码性能随着数据规模增加不断降低,靠着优化补丁缝缝补补支撑着,业务高峰期经常被运维同学拿着 SQL 光顾。



重构该项目想法不止10次,想逮着机会拉着各方大佬商讨重构事项,因为重构对业务是没有收益的,并且重构难度相当大,所以迟迟没有下定决心。


最近刚好产品需要打磨下一个版本,需要挺长时间,几个后端研发商讨要不重构吧。嗯,我想可以,于是我找上前端负责人沟通拉他入伙,找上前端之前测试已经同意了。


于是一场重构拉开序幕了。




  1. A 同学负责梳理和收敛模型、数据订正、向上提供能力。

  2. B 同学负责梳理前端接口,编排底层能力,提供原子接口给前端(最复杂,直接面向Web端业务,接口有很多特殊逻辑)。

  3. C 同学负责引擎层,和一些计算类逻辑,另外就是打打杂。



重构


大型重构耗时不说还费人力,搞不好重构完你拿不到业务结果,所以重构前你要明确收益是啥?无非就是下面几种




  1. 性能提升产品体验更好;

  2. 简化架构并提升架构扩展性(后面迭代基于重构后架构能快速开发上线);

  3. 历史债清理,历史代码可读性差维护费劲(大部分程序员看别人代码都是这样吧)。



我们是三种情况都中,下面简单总结重构的思路吧。


模型梳理和能力收敛


底层模型我认为最重要,要可靠、稳定且变动少,如果在迭代中你的模型变来变去,上层业务根本开发不了或者边开发边改,到项目收尾就是另一坨屎山。


上层业务是根据底层模型长出来的,所以一定要跟产品讨论确定最终模型,若有好的竞品参考更好了,你的设计可能会看的更远,以防过度设计,架构设计满足未来1-2年迭代即可。


模型设计需要预估数据规模,数据规模决定是否采用分库分表/分区表。如果不好预估采用简单原则先上线看看业务效果,但基础框架这些能力一定要预留好,上量后能快速开发上线。


底层模型和能力收敛了,上层业务编排对能力的复用性更高。ps:这次模型梳理我们干掉了 2 张千万级表。


数据订正


模型梳理和收敛一般会涉及数据订正,特指线上模型对应的数据割接在新模型。一般会有下面几种方式




  1. 写脚本从数据库捞数据订正数据,一般会先 select 查询到内存中,重新组装数据再 insert 新模型。数据量小场景完全可行,但数据量大是跑不动(已踩过坑,线上数据几天没跑完最后发布失败)。

  2. 写 SQL 直接操作数据表,简单的数据处理场景、数据量小场景可行,数据量大场景不可靠,容易超时并且会有数据库稳定性风险,另外订正逻辑复杂是搞不定的(已踩过坑,线上跑数据失败导致发布失败)。

  3. oplog、binlog.... 日志采集同步到消息队列(kafka、pulsar 等),启消费组消费订正数据(我最常用也是最可靠的),数据量大的场景特别爽,处理存量数据的同时还能保证增量数据同步处理。



数据订正是清理过期数据最佳时期。假若平台过期数据体量大,这部分数据不迁移新表,留在历史表中当备份就行,亦可快速恢复。ps:本次重构过期数据预估是千万级别。


API 接口


接口是你对外的门面,应该提前规划明确,不能新增需求就干一个接口,需求迭代到后期,大大小小接口加起来几十上百个维护成本是很高的。


我们一般会按照下面几个原则:




  1. 按操作分类比如:增、删、改、查是一类,只会定义4个接口上游业务方调用需传入 source 区分调用源。

  2. 接口保持简洁,不耦合非当前业务的复杂数据。比如业务上需要回显组织架构数据(员工名称、部门、员工上级等),这类数据需要业务方自行编排组织架构 byids 接口。

  3. 接口具备降级能力,不能因为接口内部编排的非重要接口、逻辑报错导致整个接口不可用。
    降级指将某些业务或者接口的功能降低,可以是只提供部分功能,也可以是完全停掉所有功能。



这次重构 B 同学和前端面临了巨大压力,接口多、混乱、逻辑不清晰,决定梳理业务逻辑按照上面 3 个原则重写接口。


代码重构技巧


代码重构也是本次重构重点,经过长时间迭代已经闻到了坏代码味道。怎么重构早就心中有数,很早就盘点和推演了,下面是我常用的一些重构技巧,这些技巧都是非常经典的,如果看过「重构改善既有代码设计」应该都不陌生。


内联临时变量

项目里有一些临时变量,只被简单赋值了一次。将这些临时变量的赋值语句直接嵌入到使用它们的地方,而不是创建一个新的变量来存储这个临时值。


func Publish() error {
// ... 省略一部分代码
err = Producer(context.TODO()).ProducerOne(&obj)
if err != nil {
return err
}
return nil
}

临时变量内联改造后👇👇👇


func Publish() error {
// ... 省略一部分代码
return Producer(context.TODO()).ProducerOne(&obj)
}

魔幻数字"(Magic Number)

指代码中使用未经解释或定义的常数值,这些值通常没有命名并且没有给出其含义或用途。这样的数字使代码难理解和维护,项目里面很多魔幻数字使用。


func Update(ids []string, nodeID string) {
// ... 省略一部分代码
Report(context.TODO(), nodeID, "6", ids)
}

要解决魔幻数字比较简单,只需你把业务逻辑理解定义成枚举就可以了,这个数字6表示朋友圈类型,魔幻数字改造后👇👇👇


type TargetType int

const (
QWMoment TargetType = 6
)

func Update(ids []string, nodeID string) {
// ... 省略一部分代码
Report(context.TODO(), nodeID, QWMoment, ids)
}

删除注释、未引用代码「俗称死代码」

根据我 review 代码的经验,不少研发同学会把已注释、未引用代码保留,这部分代码是非常影响后面维护者思路的,我们在重构过程中遇到不少这类代码,来来回回找测试和研发确认为什么会保留,哪些业务常用在用?带来了不小负担。(尤其是越上层的死代码引用了一堆下层代码,比如controller 引用 service,service 再引用 repo ,若重写 repo 非常上头)


所以我强烈建议,一旦代码不用了,应该立刻删除。若删除这部分代码后面迭代可能会使用,我建议重新开发。我列一些删除代码后的收益。




  1. 清晰度和简洁性;

  2. 减少维护成本;

  3. 减少冗余和混乱;

  4. 避免误导。



卫语句取代条件表达式

卫语是用来提前结束方法执行的结构。通常情况下,卫语句用来检查某些前置条件是否满足,如果条件不满足,则立即退出方法执行,以避免进入后续的代码块。有助于减少代码嵌套深度,增加代码的可读性和可维护性。


按照我的经验,卫语句应该有下面 2 种情况:




  1. 两个条件分支都属于正常行为;

  2. 有一个条件分支是正常行为,另一个分支则是异常的情况。



我们review过的代码一般是第二种情况比较严重。


func Recall(exclusion constant.ExclusionType)error  {
if exclusion == constant.OnlyOneExec {
if detail.TargetID == "" {
return nil
}
_, err := repo.Update(ctx,....)
if err != nil {
return xerrors.Wrapf(err, "Update")
}
}
return nil
}

调整后代码👇👇👇


func Recall(exclusion constant.ExclusionType)error  {
if exclusion != constant.OnlyOneExec {
return nil
}

if detail.TargetID == "" {
return nil
}
_, err := repo.Update(ctx,....)
return err
}

变量改名

好的命名能让读者一目了然,变量名可以很好的解释一段代码干了什么。我发现项目里面很多字段名、类名、包名很模糊,很难理解具体的业务(包括我自己也经常命名错)。


下段代码是我整理的坏的命名


TaskCommand 是 Kafka 消费者依赖的实体,收到消息后根据 Type 和 Status 撤回数据。但你看 struct 名 跟撤回没有任何关系。


// TaskCommand 任务相关命令
type TaskCommand struct {
Type   int8 `json:"type"`   // 执行类型
Status int8 `json:"status"` 
}

所以我选择把 TaskCommand 替换成跟业务更贴切的名称👇👇👇


type RecallDataParam struct {
Type   int8 `json:"type"` // 执行类型
Status int8 `json:"status"`
}

引入参数对象

以一个对象取代一些参数,可以改善代码的可读性和维护性,尤其是在函数参数列表较长或者参数之间存在复杂关系的情况下。将一组相关的参数封装到一个对象中,将该对象作为函数的参数传递,简化函数签名并提高代码的清晰度。


在一些历史比较久的代码里过长参数真的很常见,从 controller 透传到 service 再透传到 repo 层,代码复用性也非常低。


type AppImpl struct {
}

func (app *AppImpl) List(tp []int, status, page, pageSize int, keyword string, domain string) ([]interface{}, error) {
// .... 省略业务逻辑
return nil, nil
}

上段代码我一般会在 controller 和 service 中间抽一个 dto 实体。👇👇👇


type AppImpl struct {
}

func (app *AppImpl) List(listDTO *ListDTO) ([]interface{}, error) {
// .... 省略业务逻辑
return nil, nil
}

type ListDTO struct {
tp []int
status, page, pageSize int
keyword, domain string
}

提炼类

一个类应该是一个明确的抽象,它的职责是单一的,只处理一些明确的职责。


提炼类一般是下面两种情况




  1. 需求是在不停变化和累加,你会这儿加一个函数,那儿加一个方法。导致某些文件或者类非常臃肿。

  2. 相似的能力,散落在不同的业务板块,涉及的开发都在重复建设,有一个需求建一个烟囱。



典型案例是项目中事件上报能力,本应该是一个通用能力集中收敛上报代码,据我梳理代码散落在多处,上报触点有 10 来个,每个触点都在写同样的上报代码,假设某一天上报逻辑变化必须在这 10 多处做出许多小修改。


所以我决定把上报能力收敛在一个类,将复杂逻辑封装到该类,定义有限参数露出给使用方。


上报通用能力封装在 EventTracking。👇👇👇


// Tracker 埋点上报接口
type Tracker[T any] interface {
EventTracking(in T) error
}

type CMSReachDTO struct {
}

type CMSReachTracking[T any] struct {
ctx context.Context
}

func NewCMSReachTracking[T any](ctx context.Context) Tracker[*CMSReachDTO] {
return &CMSReachTracking[T]{ctx: ctx}
}

func (t *CMSReachTracking[T]) EventTracking(in *CMSReachDTO) error {
// ....逻辑省略

return nil
}

提炼超类

如果两个类在做相似的事,可以利用基本的继承/组合(GO 只有组合)机制把它们的相似之处提炼到超类。一般会把字段、方法都搬移过去。


我遇到的 case 在 entity 上会多一些,比如下面这两个 struct。


type Task struct {
ID string `gorm:"column:id"`
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
// ... 省略其他字段
}

type TaskDetail struct {
ID string `gorm:"column:id"`
TargetID string `gorm:"column:target_id"`
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
// ... 省略其他字段
}

上面这段代码他们都有共性的代码,并且我非常熟悉业务是不可能更改的,所以我会提炼一个超类。👇👇👇


type SuperParty struct {
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
}

type Task struct {
ID string `gorm:"column:id"`
SuperParty
// ... 省略其他字段
}

type TaskDetail struct {
ID string `gorm:"column:id"`
TargetID string `gorm:"column:target_id"`
SuperParty
// ... 省略其他字段
}

当然某些场景还有一些配套的方法,也可以一并搬迁到 SuperParty 里面。


提炼方法/函数

提炼函数/方法是我常用的一种手段,我不喜欢长函数/方法。我看过一个说法,一个函数/方法应该能在一屏中显示,我一直奉为经典语录(我写的代码函数/方法基本不会超过一百行);另外只要有一段代码不止被用一次,我就会把他们单独放进一个函数。


有这样一个场景,调用外部 byids 查询员工信息获取 externalId 执行业务逻辑,封装外部接口调用。


type Client struct {
ctx context.Context
}

func (c *Client) GetByIDs(id []string) ([]*User, error) {
// ....省略业务逻辑
return []*User{}, nil
}

type User struct {
ID         string `json:"id"`
ExternalID string `json:"externalId"`
}

下面是业务方使用 GetByIDs() 方法


func TestGetUserByIDs(t *testing.T) {
ids := []string{"1""2"}

client := &Client{}
users, err := client.GetByIDs(ids)
if err != nil {
panic(err)
}

l := make([]string0len(users))
for _, v := range users {
l = append(l, v.ExternalID)
}

// ...执行业务逻辑
}

 业务方调用 GetByIDs() 方法,遍历 users 获取 ExternalID 执行业务逻辑。在业务上这种操作还真不少,所以决定优化复用一部分代码。👇👇👇




  1. 定义 Users 切片。

  2. GetByIDs() 方法返回 Users。

  3. Users 提供 GetExternalIDs 方法。



type Client struct {
ctx context.Context
}

func (c *Client) GetByIDs(id []string) (Users, error) {
// .... 省略业务逻辑
return Users{}, nil
}

type Users []*User

func (u Users) GetExternalIDs() []string {
out := make([]string0len(u))
for _, v := range u {
out = append(out, v.ExternalID)
}

return out
}

type User struct {
ID         string `json:"id"`
ExternalID string `json:"externalId"`
}

下面是业务方使用 GetByIDs() 方法


func TestGetUserByIDs(t *testing.T) {
ids := []string{"1""2"}

client := &Client{}
users, err := client.GetByIDs(ids)
if err != nil {
panic(err)
}

l := users.GetExternalIDs()
// 执行业务逻辑
   // ....
}

代码空行

我非常非常不喜欢代码从头到尾写下来没有任何空行,难以阅读让读者很难提起兴趣。空行在我看来是必不可少的,在代码中使用空行来分隔不同功能或逻辑块之间的代码,空行使得代码更易读。


下面段代码是没有任何空行的,代码比较短阅读起来可能并不费劲。
image.png


适当进行空行优化后👇👇👇
企业微信截图_25861264-b69d-48eb-bd5c-eb2e4e9f87aa.png


上段代码先不关注逻辑,优化后可读性更强了,代码分为3段逻辑,每段逻辑都有各自的职责。


空行是用来区分不同逻辑块的,过度空行也会影响代码阅读,如下:
image.png


引入设计模式

设计模式是被大佬们验证过的、开发经验的总结,可以帮助我们更好地组织和管理代码,并提高代码的可维护性、可读性、可扩展性和可重用性。下面链接是我最常用的设计模式,也在这次重构过程中全部用上了,有兴趣可以看看。


最后总结




  1. 如果你的项目不是外包项目(交付了就完事儿),一定要多回头看看自己写的代码,跟着版本迭代持续优化和改进,你才能进步。另外对代码一定要有洁癖。

  2. 重构是持续的过程,如果是重要项目,每个版本我们都会推进代码优化,保证代码可维护性、可扩展性、另外就是高性能。千万别堆积最后,那可是大工程到后面很多人是没有决心干这个事儿的,所以大家应该平时迭代中不断优化和完善,才可持续性。

  3. 大型重构时,一定要明确收益并且是可量化的,比如重构后 qps 提升了10%,应用消耗资源降低了…等等,你才有跟老板谈判的筹码。



作者:彭亚川Allen
来源:juejin.cn/post/7344290391989485578
收起阅读 »

业务开发做到零 bug 有多难?

大家好,我是树哥,好久不见啦。 作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。 大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务...
继续阅读 »

大家好,我是树哥,好久不见啦。


作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。


大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务需求做到零 bug。不试不知道,一试吓一跳,原来零 bug 还真的还不容易。今天,树哥就跟大家分享关于「业务开发零 bug」的一些思考。


要做到业务开发零 bug,其实挺难的。这涉及到非常多方面,有些方面可能还不只是你能控制的,例如:产品 PRD 详尽程度,产研组织的稳定性等等。经过一段时间的思考与摸索,我自己总结出一些影响因素,分别是:



  1. 产品需求文档的清晰程度

  2. 需求的复杂程度

  3. 开发人员的细心程度

  4. 开发人员是否详细自测过

  5. 开发人员对项目的熟悉程度

  6. 开发人员开发时间是否充足


针对上面说到的影响因素,我们一个个详细聊聊。


需求文档清晰程度


对于研发、测试人员来说,他们获取信息的源头就是产品的 PRD 文档。因此,需求文档是否写得清晰、明确,就显得非常重要。


如果产品自己对功能都不了解,那么输出的需求文档肯定「缺斤少两」,到时候就是边开发边补充需求,甚至是在测试过程中补充需求。遇到这种情况,想要做到零 bug 真的非常难。


因此,清晰明确的需求文档,是我们实现业务开发零 bug 的重要前提。如果这个前提保证不了,那要做到零 bug 真的很难。毕竟想做成啥样都不知道,程序员又不是神仙,咋能猜出你想要什么。但这块内容,更多是对于产品人员专业能力的要求,开发人员无法控制。


在一些公司,会再需求评审之前先对需求文档进行一次初审,筛除那些有明显重大问题的需求,这样可以减少一部分劣质需求。


但初审的作用还是有限的,它没办法对功能的细节做较多的判断。很多时候恰恰就是一些功能细节的缺失,导致了一些 bug 的诞生。


需求的复杂程度


需求的复杂程度,对于实现业务开发零 bug 也有很大的影响。举个简单地例子:一个改文案的需求,和一个完全重新做的功能。


这样的两个需求,其复杂程度差别很大,肯定是改文案的需求实现业务开发零 bug 的难度低很多。对于一个完全重新做的功能,要做到完全零 bug,对于开发人员的要求非常高。


对于越复杂的项目,零 bug 的可能性就越低。因此,很多项目为了追求产出功能的高质量,会采用将功能点拆得非常细的方式,来减少单个需求的复杂度。


笔者公司在去年做过这个尝试,确实是可以较大地提高产出功能的质量。


细心程度


前面说到需求文档的清晰程度很重要,这取决于产品人员对于业务的理解程度,以及对于对于功能的熟悉程度。开发人员的细心,就像是一个质检关卡一样,在开发之前就对产品的需求内容进行详尽的思考与提问。


对于粗心的开发人员来说,其可能不看需求文档就直接参加需求评审,等到开发的时候边写代码边看需求文档,其写得代码也是一边熟悉需求一边改。这样写出来的系统功能是比较差的,没有一个统一、全局的设计与思考,很容易在细节处发生问题。


一个细心的开发人员,其会在评审之前就详细阅读需求文档,甚至会前前后后翻阅好几次。他甚至会逐字逐句地阅读,弄懂每个文字、句子的意思,甚至有时候会让你觉得他是在玩文字游戏(但不得不说,确实有必要细致一些)。


最后会联系上下文思考功能的合理性。如果发现一些不合理的地方,他会积极与产品沟通反馈,以确保其对于需求的理解,与产品经理对于需求的理解是一致的。


通过对比,我们知道细心的开发人员对于产品经理来说,是一个莫大的帮助,可以帮助他查漏补缺,让其对于功能的考虑更加细致、严谨。


这里的开发人员不仅仅指的是后端开发人员,也包括前端开发、移动端开发,他们都会从不同角度提出问题。


对于后端开发人员来说,他们可能会提出性能问题。对于前端开发以及移动端开发同学,他们可能会提出交互问题、样式统一等问题。


简单地说,细心的开发人员可以弥补需求文档的缺陷,从而让大家对于需求的理解更趋于一致,从而减少 bug 的发生。因此,开发人员的细心程度也是决定业务开发能否实现零 bug 的关键因素!


是否详细自测过


即使写过 10 多年代码的开发人员,刷 Leetcode 也不敢说 bug free 一把过,对于更加复杂的业务代码更是如此。因此,要做到业务开发零 bug,其中一个很重要的操作便是 —— 自测。


自测可以帮你再次检查可能出现的问题,从而提高零 bug 的概率。对于我而言,我习惯性在自测的时候再次对照一遍需求文档,从而避免自己遗漏一些功能的细节点。


对于自测而言,业界有很多种自测方法,包括:单测、集成测试、功能测试。一般情况,建议自己选择适合自己的自测方法。


很多时候,功能测试是相对来说性价比较高的方式。除此之外,自测的详细程度也根据实际情况有所不同,例如有些人只会测试正常情况,但有些老手会测试一些边界情况、异常情况。


毫无疑问,你越能像测试人员一样测试,你的提测质量肯定就越高,bug 当然也就越少。


对项目的熟悉程度


这里说的项目熟悉程度,既指技术层面的熟悉程度,也指业务功能层面的熟悉程度。


技术层面的熟悉程度,指的是项目之间是用什么技术栈搭建的,你对这些技术是否都熟悉。举个很简单的例子,项目中采用了微服务的方式进行调用,那么你是否清楚是什么微服务调用?


如果采用了 ElasticSearch 进行搜索,那么你是否对 ElasticSearch 有一些了解,知道一些基本使用及最佳实践?等等。


这些算是技术层面的熟悉程度,你对这些越熟悉,你在技术层面发生问题的可能性就越小。


业务功能层面的熟悉程度,指的是你对项目其他模块的业务是否熟悉。例如你经常负责 A 模块的功能,你对 A 模块肯定很熟悉。


但下个迭代你就要去做 B 迭代的需求了,这时候你肯定不是很熟,相对来说出错的可能性就更大一些。


无论是技术层面,还是业务层面的熟悉程度,都会随着你做了更多的需求,变得更加熟悉。到了后面某个阶段,你基本上就不存在踩坑的问题了,也为你业务开发零 bug 奠定了基础。如果你是一个刚刚进入公司的新手,那么做到零 bug 还是很难的。


开发时间是否充足


开发时间是否充足,决定了你是否有充足的时间去熟悉需求,去和产品经理确定细节。有了充足的时间,你也才能有一定时间去进行更详细的自测。更为关键的一点,有充足的时间,你写代码才能写得更好。因此,开发时间是否充足是很重要的。


在实际的开发过程中,会因为各种各样的原因,其实并没有办法给你留出特别理想的开发时间。这时候该怎么办?有些人选择接受,去压缩自己的时间。


有些人则会选择去沟通,或者协调资源,保证自己有充足的时间。其实,正确的做法还是第二种,这样会更好一些。


这需要开发人员有更强的综合能力(沟通、协调能力),但并不是每个开发人员都具备的。关于这点,又是可以聊的一个话题 —— 当你的需求被压缩工时的时候,你应该怎么做?这里暂不展开,后续有时间可以聊聊。


简单来说,开发时间是基础,没有合理、充足的时间保障的话,要做到业务开发零 bug 是不可能的事情。


总结


要做到业务开发零 bug,其实就是要消除功能开发过程中的所有不确定性,包括:需求功能的不确定性、自己写错代码的不确定性等等。而发生这些不确定性的地方,可能就有:



  1. 产品需求文档的清晰程度

  2. 需求的复杂程度

  3. 开发人员的细心程度

  4. 开发人员是否详细自测过

  5. 开发人员对项目的熟悉程度

  6. 开发人员开发时间是否充足


除了上面说到的 6 个影响业务开发零 bug 的因素之外,肯定还有其他影响因素。


你能想到什么影响业务开发零 bug 的因素吗?欢迎在评论区留言与大家分享。


好了,今天的分享就到此为止,希望大家都能做到业务开发零 bug,业务开发代码一把过!


如果你觉得今天的文章对你有帮助,欢迎点赞转发评论,你的转发对于我很重要,感谢大家!


作者:树哥聊编程
来源:juejin.cn/post/7347668702029971475
收起阅读 »

职场上的人情世故 - 初入公司的第一个项目

说下背景 来公司的第二周,上面下发了新需求,也是我参与公司的第一个项目。 我先说下公司一个项目的大体配置 产品经理 1~2人 一般中小版本就1人 UI 1~2人 研发前端 1~3人 研发后端 1~5人(包含协同团队) ps:其中后端中1...
继续阅读 »

说下背景


来公司的第二周,上面下发了新需求,也是我参与公司的第一个项目。


我先说下公司一个项目的大体配置


产品经理 1~2人  一般中小版本就1人
UI 1~2人
研发前端 1~3人
研发后端 1~5人(包含协同团队)
ps:其中后端中1人为项目负责人,负责整体项目进度和协调资源
测试 1~2人

好的,故事由此开始。先铺垫下,该项目是我从业以来最无力最绝望最想扯呼的一个。


需求评审


周一刚来公司,就被公司给我安排的导师L 叫到身边


导师L:「一会儿有个需求评审,我文档先发你,你先抓紧时间看看」


懵懂的我:「好的,我先熟悉下任务」


说实话文档看起来真的有点头疼,主要是上面的一行字我真的无语至极【与线上保持一致】。公司的项目还是比较大的,我上哪儿去了解保持一致是个啥意思......问下导师吧,他也在排查线上问题;问下其他同事吧,也刚来没多久不了解这块业务....


好吧时间应该够,我先打开系统,看看这功能到底在哪里。


「走,A2评审会」 导师L给了我一个眼神


大哥,我才看了不到20分钟,功能我都没看完......


我的情况稍微有点特殊,一般来说,大家跟随导师的节奏,问题都不大
看不懂的需求,一定要整懂了在动手,否则返工风险很大
时间不允许?那要再考虑下该公司是不是适合你了哦!!!总不能说能跑起来就行吧

过程我全程梦游,大家都在提问题:各种数据的兼容方案、功能冲突怎么兼容、有类似功能是否能套用、数据权限是否考虑、特殊逻辑的兜底方案.......


开始还能记一下笔记,后面发现 跟不上,根本跟不上 直接 弃笔,从容 面对现实了


从会议室走出来,嗯~~ 怎么形容心情呢。我高考语文作文那一页名字忘了写出考场都没这么忧虑过(当然作文最后还是有得分)。


分配任务


直接上对话详情,后端加上我一共3人


导师L:「任务我这边大概分配了下,你们先选吧」


我内心很慌,我一个都看不明白要怎么做


不知所措的我:「要不我拿剩下的」


同事P:「那把这个、这个、这个给我吧,剩下的你们分?」


导师L看着我:「那就这样分,你做那个、那个、那个,有问题随时找我」


不知所措的我:「好的,我主要是不熟悉这块业务,有问题我先整理出来再一起问下你呗」


这里有个关键点,整理完问题再一起咨询,切记遇到一个问一个
态度摆正,表现得自信点,第一次在同事面前“刷脸”,印象要留好一些

研发阶段


我的任务主要是客户群统计模块


导师给我开了两个服务的权限,让我先看看代码


懵逼的我:「L哥,要不大概说下在那部分写的统计数据?我应该从哪些表出结果?」


导师L:「你先看代码,里面都有逻辑,你看得懂」


无语的我:「好的」 内心(这么玩儿是吧)


知道那代码有多难懂吗?全都是A队列推到B队列,判断后再推C队列,并且还有了很多观察者模式。可能有兄弟姐妹问:「看不懂注释?」。注释少得可怜,也就一些字段含义,不过看单词也能看出来。


队列和队列之间很难看懂,并且很多跨服务的队列,给我开的两个服务根本不够,前后一共加上4个服务才把统计的逻辑串起来,我还专门画了个流程图出来


不管代码设计和质量如何,作为新人别公开喷前辈的代码
前期不要加入太多个性化的代码和设计,每个公司的要求不一致,最好的方式还是模仿
逻辑复杂的话,建议画一个流程图or时序图,架构图的话还是问下老同事,自己画可能不准确
不要轻易下手编码,确保自己很明确整体逻辑了再跟熟悉的同事复述一遍先

好吧,我终于找到逻辑线了(花了1天半时间,留给我开发的时间很近很近),但我发现,结果表很多很多,有AAA_statistics、BBB_statistics、CCC_statistics...... 我拿不定主意,刚好我也对这几个服务熟悉得差不多了,于是我拿着这些成果去问导师L


诚恳的我:「L哥,帮忙看看这几张表,我感觉有一些数据是重复的,还对不上数,帮忙看看呢?」


导师L:「逻辑都捋清楚了吗?」


我直接掏出了我的流程图


导师L:「这是JW(我们组的TL)给你的吗?」


求知的我:「我自己画的,不晓得准确性怎么样,帮忙check下呢」


导师L:「主要是我这还有点事,你再看看吧,晚点我们过一下」


前期难免会有很多问题,但自己也要有点准备,否则被问成麻瓜,印象分直接拉低
不知道的不要说"不知道",可以说"我还不太熟悉,我先去看看逻辑,X哥要不跟我说下大概位置或则有啥文档?"

到了晚上7:00左右,我发现L哥不见了,后来才晓得那天他溜得挺早的。只剩我原地爆炸,明天要联调了,我关键的数据组装service还只有一行//TODO。没招了,我按照我的想法和数据指标,找了几张最合适的表,把数据产出了。


第二天


我早早地来公司,重新check了下代码并又调试了几次,除了数据对不上没啥其他问题。导师L带着早饭来到公司,我还等到吃完早饭再去问了下。


疲惫的我:「L哥,你看我用这张统计表去输出功能有问题没?」


导师L:「就那么几张表,你造几条数据不就看出来了」


疲惫的我:「我造了几条数据,但是昨天的数据我看今天才过来,昨天忘了记录过程」


导师L:「怎么可能,你怎么造的数据,算了等会儿我看一下」


......


过程就不细讲了,总之,不好受...... 最后问题也定位到了,是导师L当初做测试,把定时任务往后延了1天。好吧,这还有定时任务的事儿?我只能看代码看到一堆数据同步的接口,真的是应征了那句话:【最怕的是:我不知道我'不知道'】。


时间允许的话,着手开工前还是留一份概要设计的存档,别把坑都留给后面的人了
流程图、时序图、架构图等,前期多花时间,少走弯路
心态摆好,我们是来打工挣钱的,交不交朋友是其次而已,关系不恶化怎么着都行

而后,比较顺利地进行到提测阶段,bug真的是多得要命,主要是以下几点:


1、数据权限没加(就是prd文档上写的跟xxx模块保持一致逻辑)


2、数据同步时好时坏,排查后发现是定时任务不稳定,大家都在一个环境提测版本,都在修改功能


3、未做改造的功能点测出历史bug(功能类似,故测试同学也纳入了测试范围)


4、服务被其他版本覆盖


导致最终版本交付时,我个人产生了大概20+个bug。周五下午TL专门找我谈话,约谈此事,大概意思是版本复杂度不高,但bug数过多,对我的版本质量不满意。对此,我也阐述了我的解释,这里我就不细说解释的话,大概从以下几点去阐述


不要丢锅,先把由自己粗心产生的bug讲一下,记得提一下数据,因自身代码质量产生了X个bug,后续会加强编码质量,多自测
也不要背锅,说下由于环境问题导致了X个bug的产生,并给出自己的建议,是否能做环境隔离,一个环境只能容纳服务不冲突的1~2个版本
注意下,TL直接对话的机会并不是很多,可以结合自身入职以来的经历,提一些建议(不用管是否重要)
总之,事事多总结,否则像这种情况下TL突然找咱们约谈,说不出个123,印象分会很差

项目总结


在项目研发中,不一定能得到公司前辈们的"关照",这时候就需要先自己憋一下(注意合理安排时间),怎么着也能憋出点内容,那这这些内容再去咨询,效果会好很多。像我这种被孤立的情况,我也不好说是不是常态,我个人还是认为好同事还是居多的。总之还是与同事搞好关系,或者关系一般遇事能帮忙也行,不要跟任何同事把关系闹僵(哪怕脾气差、技术菜、背后勾心斗角)。


还是那句话,遇事不要慌,先调整好心态(道理都看得懂,但希望大家都能做得到),尽力吃透项目再开始施工,否则返工或者低质量产出不好避免。


多做总结,不甩锅不背锅,不管是项目总结还是转正答辩还是晋升答辩,都能有个有条理有依据的总结出来。这点在职场中至关重要。


作者:snowlover
来源:juejin.cn/post/7347542133610364980
收起阅读 »

低谷期可能是在救你

怎么来定义低谷期? 我觉得真正的低谷期是迷茫,挫败,痛苦,自我怀疑等等,反正一定是比肉体上的痛苦更煎熬! 可能你会觉得暂时性找不到工作,面试受挫,分手等是你的低谷期,实则不然,这大概是一个不敢面对自己的借口。 因为多数人找到工作后,只要能在温饱线上,那么90%...
继续阅读 »

怎么来定义低谷期?


我觉得真正的低谷期是迷茫,挫败,痛苦,自我怀疑等等,反正一定是比肉体上的痛苦更煎熬!


可能你会觉得暂时性找不到工作,面试受挫,分手等是你的低谷期,实则不然,这大概是一个不敢面对自己的借口。


因为多数人找到工作后,只要能在温饱线上,那么90%的人就会心安理得摆烂,和男女朋友复合后,依然是维持原样,不会被爱情去刺激自己成长。


如果用工作和分手这两件事情来描述真正的低谷期,那么我觉得应该是这样描述的:


自己付出了很多,每天都像一条疯狗干,工作和学习的时长维持在18个小时左右,坚持了很久,但是没有收获自己想要的东西,希望还是如此渺茫,于是产生严重的自我怀疑,挫败,深圳绝望!


自己一直在努力,在慢慢成长,目标越来越近,但是自己爱得死去活来的女朋友实在等不了自己成长,自己变强,所以无情的选择离开。


经过上面的描述,成为了毋庸置疑的低谷期。


因为没经过描述之前其实你是没有任何斗志的,目的就是能安心混日子,可以用摆烂来形容,和女朋友在一起,自己也不需要啥成本,她也没有啥诉求,所以算得上是互相将就。


但是经过描述后,实际上你的努力近乎疯狂,对于成功是无比的渴望,但是迟迟没降临到你的身上,而女朋友是在你身上压了筹码的,而你又非常爱她,但是迟迟不能让她压的筹码赚个翻倍,所以离开成了定局。


这下就一目了然了吧。


所以这时候你再去回想一下自己所谓的低谷期,是否真的是低谷期?还是自己矫情?


从上面的场景我们能看到深刻二字,第一个是根本谈不上深刻,而第二个是无比的深刻,如果你经历过,那么你自然能理解!


只有让自己刻骨铭心和痛苦的事情才能让自己成长,其他的基本不能。


就像你比较肥胖,三高找上你,家里人叫你不要再吃垃圾食品,不要喝饮料,但是这时候你还没真正躺在病床上,你基本上不会去听。


但是如果此刻你躺在病床上,插着呼吸管,医生给你说,如果你再不注意饮食,那么你很快就会死掉。你看你还会不会再去吃垃圾食品,喝饮料。


所以说,只有让自己脱一层皮,自己才会意识到问题的所在。


那么低谷期里,也自然会脱一层皮,甚至还会换骨头,那么你觉得这难道不是最佳的成长期吗?


所以一个人能遇上真正的低谷期,其实是一种幸运,应该要感谢这个遭遇。


就像一个朋友,因为一些原因导致自己不能再继续读书,家里为了自己的事情而负债累累,自己承受巨大的压力,想死的心都有了。


但是在这段堪称被恶魔惩罚的时期,他没有一蹶不振,反而置之死地而后生,最后无论是财富还是个人能力,阅历都有很大的提升!


后面和他聊天的时候,他说那是自己最痛苦,最无助的时候,但是自己庆幸没有放弃,才造就了一身钢筋铁骨?


所以你说这个低谷期是不幸的吗?


不是,这算的上是恩赐,因为并不是谁都有这种机会。


所以我们在低谷期的时候,如果能有把它作为翻盘的机会的思想,那么它一定是很难得的机会!


但是如果把它作为上天对自己的惩罚,从而一蹶不振,那么其实是错失一次很好的机会,并且也学让自己越陷越深!


作者:苏格拉的底牌
来源:juejin.cn/post/7349750846900125748
收起阅读 »

探索个人IP&副业第三个月的思考:未经审视的人生不值得过

前言 Hi 你好,我是东东拿铁,一个正在探索个人IP&副业的后端程序员。 个人IP探索的第三个月,不再是一往无前的埋头苦干,一腔热血之余,对自己的能力探索与兴趣挖掘,成为了日常生活的主线。 为了更好的坚持下去,希望自己能够找到自己最擅长、做起来最愉悦、...
继续阅读 »

前言


Hi 你好,我是东东拿铁,一个正在探索个人IP&副业的后端程序员。


个人IP探索的第三个月,不再是一往无前的埋头苦干,一腔热血之余,对自己的能力探索与兴趣挖掘,成为了日常生活的主线。


为了更好的坚持下去,希望自己能够找到自己最擅长、做起来最愉悦、自身价值观又认可的事情。但最近一段时间,我意识到,我其实并不了解我自己。想认识自己,也不是一件简单的事情。



古希腊哲学家苏格拉底曾说:“未经审视的人生不值得过。“



话不多说,看看最近一段时间,我身边发生的事情与思考吧。


经历AI的诱惑,坚定内心的方向


其实在23年年底刚开始写作的时候,自己就对自己列了几个方向


其中,AI一直是我自己认为一个很重要的方向,时代大趋势下,所有行业只要加上AI,似乎都变得有些不一样。


image.png


24年年初,我第一次试着去了解AI的工具,是因为那时看到一个圈友,做了一个AI艺术二维码。于是我也下载下了stable-diffusion,准备大展身手一把。


本来是这样想的,发个朋友圈,如果有想要做艺术二维码的,我5块钱给他生成一个,怎么着也算开启了副业收入对吧。


结果人家做出来的是这样的,蛮好看。


image.png


我生成出来的,丑就不说了,问题是扫都扫不出来,就很搞笑。


苦于周边暂时没有大佬支持,也有着别的事情需要做,就暂时被我搁置了。


我的内心其实对AI感兴趣,但实际上,还是以一个程序员思维来考虑的。举一个例子,就想现在.NET的就业环境已经逐渐减少,如果我毕业时选择了一份.NET的工作,那么市场需求一定是很小的。


所以我才会对AI感兴趣,我的思路还是,或许5年后,Java已经不行了,但是算法开发、模型开发可能成为市场需求主流,为了找到工作,不得不去学习AI相关。


这件事情埋在我心里,虽没干成,但毕竟没有搞出来,心里还是有点不甘心的。


从过年伊始,就通过各种渠道,了解到了AI破局社群,即将迎来拉新。那时候我了解到,原来搞AI类应用,其实是有一个专门的社群的,里面也有各种各样的项目让你去落地,还有专业的人给你指导,我之前没跑出来的AI二维码,只要加入,遇到的问题肯定就能解决。


面对着铺天盖地的宣传,自己内心也逐渐有些动摇,一边是追求热点,迅速满足。一边是继续学习写作,延迟满足,看着许多圈友入局,内心还是挺焦虑的。


最终还是克服了自己短期尝试AI的想法,两个原因:



  1. 自己在尝试副业的伊始,就决定2024上半年,我不会思考变现问题,主业还能养活自己。

  2. 既然决定先好好锻炼写作能力,那就应该持续内化基本功,不追求短期目标。


人的精力有限,需要放在有用的地方。


关于写作


上了热榜,占据首页


经过一周时间的打磨,之前经历的一篇文章,竟然上了热榜第一,6000多字的碎碎念能被大家看到,不少朋友给我说能够感同深受,一切的努力都值得了。


image.png


被更多的人看到,固然是好事,但在写这篇文章的过程中,也发现了不少问题,其中低效、内耗的问题,最为严重。


首先,6000多字的文章,完全是个人经历与思考,纯手写的话,如何组织语言,安排好顺序,就是一个最大的问题。


其次,如何把结构梳理好,能够更有连贯性,才能让大家在看的过程中,不枯燥乏味,我花费了非常多的时间。


最后,因为事情涉及到不少真实经历,受限于篇幅,不能完全的呈现给大家,如何选择最能让大家共鸣,最能给大家带来价值的地方,也蛮头疼的。


与现在利用AI工具,一天能够四五篇文章的作者比起来,效率简直低的可怕,虽然带来的价值不一样,但是流量就是这么多,想让更多人看到,效率如何提高,是我接下来要重点思考的事情。


关于输出的“困扰”


经过3个月的输出,我不出意外的遇到了“缺少话题”的情况,这也是最近更新频率变低的最主要的原因。


在这段时间,虽然输出频率降低,但话题的收集没有落下,每当有一些小点子,我就会先记录下来,每天翻一翻,去看看哪些是最想写的。


但实际上,即使收集了很多素材,如果你没有太多想说的话,无疑也只是罗列旧知识,没有新观点,我只想说点新颖的,所以迟迟没有动笔。


为了解决这个问题,两个方法和大家分享下


先立后破


先立后破,虽然话题素材减少,但强制要求自己,每周都要有所输出。


为了达成这个任务,我被迫搜集很多素材,先丰富自己的素材库,然后选择自己最有表达欲的主题,详细去写。


为什么要先立后破


任何事情都有一个逻辑,就是先别管技巧或者合理性,也别管效果如何,先给它规定一个数量,把数量做到了,慢慢的,你就会因为数量而倒逼自己去琢磨如何研究质量。


写作这件事也一样,即使我不知道写什么,也要强迫自己动笔去写,自己在输出这件事上,依然坚信着一句话。



数量不一定能决定质量,但一定能决定重量。



定扩联思维


先确定


能输出的点有很多,技术、副业、写作、复盘,先把内容方向定下来,比如我今天选择的方向就是复盘。


后扩展


扩展的话就好说了,既然是复盘,每一件事情都可以展开来讲,AI的一些经历。关于输出的困扰,输出一些方法论。


再联想


根据自己阅读、学习过的内容,进行发散。比如我深入思考的个人定位问题,最近的所学所想,都可以随着复盘输出出来。


个人定位


这个月花费最多的时间,就是在思考如何有一个清晰的定位。思考过程中问自己的几个问题,也在此罗列出来,如果你也想找到个人定位,也不妨对着这几个问题问一下自己。


职业与专业知识


7年后端研发工程师,北漂回二线城市的大厂程序员。毕业半年裸辞北漂,但经过几年北漂后,为了追求内心、照顾家庭,6年后回到二线城市发展。


北漂阶段,从30人小公司,最终进入大厂。大厂期间面试人数50+,对于求职面试、职业规划有着不少宝贵经验。


完成北漂回归二线城市,完成了城市选择,公司判断,薪资谈判,心里建设等一系列流程,各种有些许挫折,但都一一完成拆解。


善于在复杂项目中抽丝剥茧,但缺乏创造力。经手的项目无论难度多大,都可以极快的完成梳理与上手。但每当新业务开展,思路总会比较局限。


喜欢的博主


个人非常喜欢的博主是,半佛仙人,18年从公众号关注至今,文章几乎一篇不落。


image.png


为什么喜欢?我简单的想了下,有一下几个原因。



  1. 有一定的专业性,瑞幸等一些文章,业内出名,如果大家听说过半佛,大概也看过那些非常出名的文章。

  2. 够肝。热点时事跟踪及时,比较重要的热点新闻,时事动向,他一定参与进来。虽然从作者的角度来说,肯定是要跟着热点和流量走,但对于我这种几乎不看微博和新闻的人来说,能让我省下很多无效时间,还能了解到很多最新的新闻。

  3. 够骚,从他的ID就看出来了:banfoSB,他的文风是我关注的所有博主里,最有特点的。


以上,羡慕。在我眼中,能毫无顾及的表达出自己的看法,让这么多人看到,对于一个爱写东西的人来讲,无疑是一件幸福的事情了。如果这件事情还能赚到钱,那更是锦上添花。


业余爱好


大学业余时间除了打游戏,就是谈恋爱,一上高数就睡觉,下课铃响就起床,


直到看了一本书《皮囊》之后,开始热爱上了阅读。虽然自己生在城市,完全没有农村经历,但对《皮囊》《活着》《兄弟》等很多农村作品,阅读的时候却有着特别大的感触,文中主人工经历越苦难,我的感受越心酸。


后来发现,老读这种文章,人都快看emo了(许多穷苦的事情,自己又没有能力改变什么)。


后来大学期间看了《嫌疑人x的现身》(短篇小说,非常精彩),了解了东野圭吾,对悬疑类作品有了极大兴趣,花了半年的时间就把他大多数重要的作品都看了一遍。印象最深的是《白夜行》,从第一次打开《白夜行》到最终看完,几乎过去了半年的时间,但是《嫌疑人x的现身》只需花了2天时间我就看完了。


但最终读完《白夜行》后,其中的精彩程度让我认为这是东野圭吾小说系列在我心中的No.1。这本书也让我意识到长篇小说的精彩之处,前面之前认为的枯燥的铺垫,到最后都是拍手称绝的伏笔。让我对延时满足这四个字,有个更深的体会。


image.png


后来又听说了村上春树,《挪威的森林》目前为止读了四遍,闲下来仍然会打开翻一翻。里面一些句子,一直在潜移默化的影响着我



不要同情自己,同情自己是卑劣懦夫干的勾当。


所谓绅士,就是做自己该做之事,而不是想做之事。



擅长的事情


我的盖洛普第二名和第五名,是和谐和体谅,遇见冲突解决冲突,并能够设身处地的体会他人的感受。所以之前有很多朋友和我说过,和我聊天,即使问题解决不了,心理上也能舒服很多。


image.png


或许你想找对象,我能帮你发现一些你潜在的问题,帮你去想应该怎么做,才能得到妹妹。


或许你面临裁员、换工作,我能根据你现有的能力与过往的经验,帮你规划提升方向。


或许你面临职场困惑,我也可以根据过往经验给出一些意见。


如果你有类似的问题,也欢迎你来找我聊聊。


说在最后


这次的复盘就先聊到这里了,有小的高光时刻,也有阻碍和自己的思考,感谢你能看到这里。




作者:东东拿铁
来源:juejin.cn/post/7349856694996074550
收起阅读 »

宏观经济的一些判断

估计谁都没想到2023年,疫情恢复的第一年竟然如此:大厂裁员、楼市继续下跌、年底股市暴跌等。 这篇文章说下笔者对宏观经济的一些理解和判断,以试图解释过去一年发生的一些事情。 宏观经济周期 笔者看来,由于美元具备全球货币属性,美元加息是全球的麻烦。所以总体而言,...
继续阅读 »

估计谁都没想到2023年,疫情恢复的第一年竟然如此:大厂裁员、楼市继续下跌、年底股市暴跌等。


这篇文章说下笔者对宏观经济的一些理解和判断,以试图解释过去一年发生的一些事情。


宏观经济周期


笔者看来,由于美元具备全球货币属性,美元加息是全球的麻烦。所以总体而言,全球经济处于美元加息影响下的结果中,也就是处于美元回流,全球货币紧缩,全球经济处于下行周期中


但每个主要经济体又有其自身的宏观经济周期,比如说我们国家,疫情三年为了人民的生命健康,我们国家没有像西方打开方便之门,大肆放水,而是选择严守死防。


三年疫情,我们国家保护了人民的生命健康,但我们也封闭了三年,紧缩了三年。我们国家处于疫情恢复周期中,处于上行周期中。但始作俑者的美国因为超发货币,自身经济过热,所以需要降低过热经济,所以宏观经济也处于下行周期中。


这里说一个题外话,宏观经济是通缩好还是通货膨胀好呢?实际上,过分的通缩和过分的通货膨胀都不好,适度的通胀最好,一般来说维持在2%左右是比较好的,这也就是美国一直想通过加息实现的通胀水平。


不管是通缩还是通胀代表的都是一种趋势,通缩经济逐渐下行,规模逐渐减小,反之通胀经济处于上行,规模逐渐扩大,这样才能实现GDP的增长,实现经济的发展。


回来继续说宏观经济周期,当下国家要做的就是让经济处于扩张区间,或者说实现经济的适度通胀。


2023年CPI和PPI一直不温不火,其实有一点通缩的迹象,所以国家在出台各种手段改善这种迹象:



  1. 对楼市逐渐降低首付比例,逐渐放开楼市,逐渐降息,逐渐降低存款准备金等

  2. 对股市降低印花税,转融通暂停,加大逆回购力度,证监会新管理层上任等


但改变趋势谈何容易,同时还要考虑美国的加息节奏。所以出台的手段并不是那么尽如人意,也因为受到美国加息节奏的影响,为了维持外汇的稳定性,出台的时机也并未尽如人意。


笔者觉得正因为上述原因:美元加息周期、国内降息周期导致2023大厂裁员、楼市继续下跌、年底股市暴跌。


2024年宏观经济


目前美国已经暂停加息半年,加息周期已经到顶,预期5、6月份后降息。也正因为暂停加息,加息到顶我国央行今天进一步降低5年期贷款利率。


2024年的国内的宏观经济依然是将经济恢复为适度通胀的水平。笔者的判断是在汇率稳定的前提下,稳定楼市,因为楼市涉及的面太大。稳定了楼市才能稳定经济稳定预期,才能稳定股市。


完全有可能的是央行在美国降息后选择再一次降息贷款利息的方式,加强人们的信心,加强人们对国家进一步搞活经济的决心,给人们信心。


稳定楼市而不是大力发展楼市。笔者认为未来国家的发展会逐渐向高科技产业倾斜,从依靠楼市带动GDP增长改为依靠科技带动。


综上,一些配套的改革一定也会有:比如真正支持优秀公司发展的证券市场,比如政府职能转变为服务好企业,比如更加开放的区域市场(现在的浦东新区)等等。


而笔者比较关心的股票市场,隶属于证券市场,笔者觉得未来中国的股市一定会越来越好,尤其优秀的科技公司。


(本文完)


作者:通往自由之路
来源:juejin.cn/post/7337227407365963803
收起阅读 »

打工人应避免被过度体制化

《肖申克的救赎》是一部令人震撼的电影。其给我留下深刻印象的不止男主的筹谋,还有终获假释,却选择上吊自杀的老布。老布是一个悲剧人物。 老布被关押监狱五十年。半个多世纪,老布从青年变为白发苍苍的老头,他最终熟悉了监狱的一切,适应了监狱的一切,也和监狱捆绑在了一起。...
继续阅读 »

《肖申克的救赎》是一部令人震撼的电影。其给我留下深刻印象的不止男主的筹谋,还有终获假释,却选择上吊自杀的老布。老布是一个悲剧人物。


老布被关押监狱五十年。半个多世纪,老布从青年变为白发苍苍的老头,他最终熟悉了监狱的一切,适应了监狱的一切,也和监狱捆绑在了一起。用电影中的话来说,老布被监狱“体制化”了,包括他的自我认同,自我习惯。他依赖这个监狱。


也正因为此,出狱后的老布因为无法适应、融入发生巨变的社会环境,选择结束自己的一生。


体制化是指是个人或群体在某种环境中逐渐适应并接受其中的规则、习惯、意识和氛围,以至于这些成为其思考和行为的一部分。比如说销售人员更会自我激励,司机师傅更容易记下位置路线,财务人员更细致……


现代社会高度发展,每个人都不可避免的依赖某个组织或企业。为了融入组织或企业,被体制化是必然。但过度被体制化,比如长期生活在农村的老人,长期在高速口收费的收费员,长期无法晋升的公司老白兔……不利于人的发展,应该主动避免。


分工


现代企业建立的基础之一是大规模生产下的分工,分工可以提高生产效率,但分工也让人失去独立性。就拿上面长期在高速口收费的收费员举例,几年前河北高速一个收费员被辞退,就闹了起来,原因是他别的什么都不会了。


长期单一职责一旦被离职很容易陷入困境,轻者生活质量下降;重者长期失业;更重者,如老布一般选择终结自己的生命,事实上前几年就发生了这种事……


企业机会狼多肉少


几年前读过一句话:我们的社会实际是一个精英筛选系统,大多数人存在的意义是辅助筛选。这句话套用在企业也适用,企业是一个小型的精英筛选系统。


这些年互联网行业流行的所谓35岁职场危机,背后实际是部分企业认定35岁没能成为精英,也就不具人力性价比,选择不再对其招聘。


35岁大部分都有了家庭,要是35岁没有成为精英,相关企业招聘的意愿又不强,只能等着被辞退。要是在被过度体制化,被拴在一家企业,那无疑是雪上加霜。


体制化是放弃整个森林


我对企业有很多定义,其中之一企业是社会当中满足一系列特定需求的组织。一系列特定需求实际是局部市场。在局部市场里,企业注定机会有限。而市场本身比企业拥有更多机会,被过度体制化会被动放弃拥有更多机会的可能。


积极培养第二曲线甚至第三曲线


随着技术的提高,经济的发展,现代职业的生命周期在缩短。我认为每个人应该积极培养第二甚至第三职业。第二职业可以是自媒体,比如写作、比如up主、再比如小红书博主……可以是其他擅长的,可以利用下班时间去做的事业。


第三职业可以是投资人,投资是坐顺风车的学问,重要的是识别顺风车。做投资可以先从二级市场,也就是股票市场开始(投资需谨慎)。要能够借国家发展的大势,享受国家发展带来的红利。


我之前写过一篇关于宏观经济的文章《宏观经济的一些判断》。目前,我国经济处于上行周期中,受房地产拖累,经济爬坡有些缓慢。上个月CPI同比上涨0.7%,消费意愿在加强;上个月社融处于增长态势,经济活动相对活跃,上个月规模以上企业工业增加值显著增长……


种种迹象表明经济在好转,我也相信经济一定会好起来,经济好起来叠加国家对证券市场的进一步规范,不久以后股市完全有可能成为新的国民财富蓄水池。


结尾


总之,在工作过程中要识别哪些规则、习惯、意识和氛围,长期来讲是真正的机会,哪些不是。到了一定年龄,看不到成为公司精英的希望,应发展更多社会生存技能,在社会这个更大市场中生根发芽,创造财富,获取财富。


也希望能够直接借到国家发展大势,直接享受国家发展红利。


作者:通往自由之路pro
来源:juejin.cn/post/7348013957732941876
收起阅读 »

💀填好个税,一年多给几千块 ~ 聊聊个人所得税,你该退税还是补税?写一个个税的计算器(退税、补税、个税)

前言 一年一度个税年度综合汇算清缴的时间又到了,作为开发者的你,肯定过了起征点了吧。🫤 去年退税退了 5676 ,今年看这个估计得补好几千,但是个税年度汇算清缴还没有预约到,抓紧提前算算金额,做做心理建设。\同时,了解个税都扣在哪了,才可以让我们合理避税~ 下...
继续阅读 »

前言


一年一度个税年度综合汇算清缴的时间又到了,作为开发者的你,肯定过了起征点了吧。🫤


去年退税退了 5676 ,今年看这个估计得补好几千,但是个税年度汇算清缴还没有预约到,抓紧提前算算金额,做做心理建设。\同时,了解个税都扣在哪了,才可以让我们合理避税~


下面我们简单聊聊 补税预缴 ,顺便讲讲专项附加扣除应该怎么填。


以及带大家写一个个税计算器。你可以通过码上掘金查看 在线 svelte(无UI) 版 ,后续也会推出其他框架版。


为什么你需要补税?


大多数情况下,公司发工资会替你把税交了,这个行为叫预缴。


为什么预缴呢?因为国家规定:



《个人所得税扣缴申报管理办法(试行)》(国家税务总局公告2018年第61号发布)

第六条:扣缴义务人向居民个人支付工资、薪金所得时,应当按照累计预扣法计算预扣税款,并按月办理扣缴申报。



这也就是我们每个月发工资都会扣税的原因。


那为什么需要补税呢?因为预缴是根据你在当前公司的收入进行缴税,公司会计算你的累进税率,你会发现每到年底税交的越来越高了,这是累进预缴导致的。


有些人在年中换了工作了,新公司不知道你之前已经交到哪个阶段的个税了,因此预缴时计税金额会重新累计。


因此补税的原因不外乎:



  • 工作变更

  • 公司主体变更(如:公司拆分)


为什么说预缴是天才发明?


预缴制简直是个天才发明,不但会大大减少逃税人数,而且能减轻税务工作量(转移至各公司),且可以让缴税的人对税率的感知没有那么强烈。


达成这种效果主要原因有两点,分别是 损失厌恶心理账户


损失厌恶


人们对损失的敏感程度通常远远大于对同等价值的收益的敏感程度

人们对损失的敏感程度通常远远大于对同等价值的收益的敏感程度

人们对损失的敏感程度通常远远大于对同等价值的收益的敏感程度


牢记这句话。


一个最简单的例子,短视频中经常会出现的 最有效的 6 条学习方式,最后一条最重要 。这种放大损失的语言,常常能诱发更高的完播率。



虽然我很讨厌以这种方式留住用户,但常常在刷到这类视频时,也忍不住多看一样,虽然知道它最终可能也没什么实质内容。



还有一种就是我们常常刷掉一个视频,又返回去看一眼,又刷掉又返回去。我常常会有这种心理,这个视频我是不是应该看一看的纠结。


个税也是同理,个税预缴是减少我们的收益,而个税年终汇算则是直接让我们从口袋中掏钱。


就算汇算综合到月度计算,同样也是,一种是公司扣完发给你,另一种是发给你之后你再掏出来一部分。大家感受一下这其中的区别。


心理账户


人们可能会将个税缴纳视作开销,而且是意外开销,意外开销总是让人痛苦的。


比如我每个月 1w 块,其中 3k 拿来租房,3k 拿来吃饭, 2k 拿来娱乐,2k 拿来缴五险一金。


这时候到年终汇算时,人们则容易苦不堪言。


且这种带来的直接后果是,我想把税留到最后一天交,同时最后一天也很容易忘记交,因为大脑也不想要这种意外支出。


最终则导致 漏交、拒交 个税的人数大大增加。


专项附加扣除严谨度



  • 子女教育(未婚,无接触)

  • 赡养老人(容易被查)

  • 继续教育 - 学历提升(基本不查)

    • 学历提升可以选择一个对应学历,每个学历 4 年,共 16 年左右抵税



  • 继续教育 - 证书获取(基本不查)

    • 证书获取有人一个证书可以一直抵税,建议: 营养师证、焊工证等



  • 租房买房(基本不查)

  • 大病医疗(未填过,未知)


开发


首先咱们先写个个税计算器的 class ,个人所得税英文简称 IIT (Individual Income Tas)


class IITCalulator {}

添加需要计算的内容


众所周知,

个税计算法:应缴税款 * 对应税率 - 速算扣除

应缴税款计算法:工资 - 五险一金缴纳额 - 专项附加扣除


因此我们先添加 工资 、 五险一金 、 专项附加扣除 的属性。


工资


我们工资有两个组成部分,分别是 固定工资 和 年终奖(如果有的话)。


class IITCalulator {
private salary: {
monthlySalary: number;
yearEnd: number;
} = {
monthlySalary: 0,
yearEnd: 0,
};

/**
* @description 添加工资(通过工资计算年薪)
*/

addSalary(
monthlySalary,
yearEnd?: { value: number; type: "month" | "amount" }
) {
this.salary.monthlySalary = monthlySalary;
if (yearEnd) {
this.salary.yearEnd =
yearEnd.type === "amount"
? yearEnd.value
: monthlySalary * yearEnd.value;
}
}
}

五险一金


这里直接给了固定金额,可以通过查看每月扣除得知。



考虑到有人不太清楚自己的五险一金缴纳基数,这里直接用了固定金额,后续可以扩展出通过缴纳比例自动计算



class IITCalulator {
private socialInsuranceMonthlyAmount = 0;

/**
* @description 添加五险一金,计算年五险一金缴纳额
* @param {number} monthlyAmount 月度缴纳金额
*/

addSocialInsurance(monthlyAmount) {
this.socialInsuranceMonthlyAmount = monthlyAmount;
}
}

专项附加扣除


专项附加扣除通过数组的方式存储扣除项。



  1. 子女教育

  2. 赡养老人

  3. 继续教育(学校)

  4. 继续教育(证书)

  5. 住房贷款

  6. 大病医疗


// 专项附加扣除类型
type SpecialDeductionType =
| "children"
| "elder"
| "education-school"
| "education-certificate"
| "housing"
| "medical";

class IITCalulator {
private specialDeductionTypes: Array<SpecialDeductionType> = [];
private medicalAmount = 0;

/**
* @description 添加专项附加扣除
* @param {string} type 专项附加扣除类型
*/

addSpecialDeduction(
SpecialDeductionType: SpecialDeductionType,
medicalAmount?: number
) {
this.specialDeductionTypes.some((t) => t !== SpecialDeductionType) &&
this.specialDeductionTypes.push(SpecialDeductionType);

if (medicalAmount) {
this.medicalAmount = medicalAmount;
}
}
}

计算 工资 、 五险一金 、 专项附加扣除


我们添加了基础属性,可以根据基础属性计算出对应金额。


工资


工资 = 月薪 * 12 + 年终奖


getYearSalary() {
return this.salary.monthlySalary * 12 + this.salary.yearEnd;
}

五险一金


五险一金 = 月缴纳额 * 12


getYearSocialInsurance() {
return this.socialInsuranceMonthlyAmount * 12;
}

专项附加扣除


专项附加扣除 = 扣除项的扣除金额合集



需要注意的是:大病扣除项是固定金额的



这里直接采用 reduce 进行累加。


/**
* @description 计算专项附加扣除
*/

private getSpecialDeduction() {
return this.specialDeductionTypes.reduce((r, v) => {
switch (v) {
case "children":
return r + 2000 * 12;
case "elder":
return r + 3000 * 12;
case "education-school":
return r + 400 * 12;
case "education-certificate":
return r + 3600;
case "housing":
return r + 1500 * 12;
case "medical":
return r + this.medicalAmount;
default:
return r;
}
}, 0);
}

计算纳税金额


我们基础数据都有了,就只差计算了。先通过基础数据计算应纳税所得额,再通过应纳税所得额计算个税。


计算应纳税所得额


calcIIT() {
// 计算年薪
const yearSalary = this.getYearSalary();
// 五险一金缴纳金额
const yearSocialInsurance = this.getYearSocialInsurance();
// 专项附加扣除金额
const specialDeduction = this.getSpecialDeduction();
// 计算需要缴纳个税的金额
let taxableAmount =
yearSalary - yearSocialInsurance - specialDeduction - 60000;
// 计算个税
return this.calcTaxableAmount(taxableAmount);
}

计算应缴个税


个税计算参考:


image.png


// 计算个税(金额 * 税率 - 速算扣除)
private calcTaxableAmount(taxableAmount: number) {
if (taxableAmount <= 36000) {
return taxableAmount * 0.03;
} else if (taxableAmount <= 144000) {
return taxableAmount * 0.1 - 2520;
} else if (taxableAmount <= 300000) {
return taxableAmount * 0.2 - 16920;
} else if (taxableAmount <= 420000) {
return taxableAmount * 0.25 - 31920;
} else if (taxableAmount <= 660000) {
return taxableAmount * 0.3 - 52920;
} else if (taxableAmount <= 960000) {
return taxableAmount * 0.35 - 85920;
} else {
return taxableAmount * 0.45 - 181920;
}
}

完整代码:


// 专项附加扣除类型
// 1. 子女教育
// 2. 赡养老人
// 3. 继续教育(学校)
// 4. 继续教育(证书)
// 5. 住房贷款
// 6. 大病医疗
type SpecialDeductionType =
| "children"
| "elder"
| "education-school"
| "education-certificate"
| "housing"
| "medical";

class IITCalculator {
private salary: {
monthlySalary: number;
yearEnd: number;
} = {
monthlySalary: 0,
yearEnd: 0,
};
private socialInsuranceMonthlyAmount = 0;

private specialDeductionTypes: Array<SpecialDeductionType> = [];
private medicalAmount = 0;

constructor() {}

/**
* @description 添加工资(通过工资计算年薪)
*/

addSalary(
monthlySalary,
yearEnd?: { value: number; type: "month" | "amount" }
) {
this.salary.monthlySalary = monthlySalary;
if (yearEnd) {
this.salary.yearEnd =
yearEnd.type === "amount"
? yearEnd.value
: monthlySalary * yearEnd.value;
}
}

getYearSalary() {
return this.salary.monthlySalary * 12 + this.salary.yearEnd;
}

/**
* @description 添加五险一金,计算年五险一金缴纳额
* @param {number} monthlyAmount 月度缴纳金额
*/

addSocialInsurance(monthlyAmount) {
this.socialInsuranceMonthlyAmount = monthlyAmount;
}

getYearSocialInsurance() {
return this.socialInsuranceMonthlyAmount * 12;
}

/**
* @description 添加专项附加扣除
* @param {string} type 专项附加扣除类型
*/

addSpecialDeduction(
SpecialDeductionType: SpecialDeductionType,
medicalAmount?: number
) {
this.specialDeductionTypes.some((t) => t !== SpecialDeductionType) &&
this.specialDeductionTypes.push(SpecialDeductionType);

if (medicalAmount) {
this.medicalAmount = medicalAmount;
}
}

/**
* @description 计算专项附加扣除
*/

private getSpecialDeduction() {
return this.specialDeductionTypes.reduce((r, v) => {
switch (v) {
case "children":
return r + 2000 * 12;
case "elder":
return r + 3000 * 12;
case "education-school":
return r + 400 * 12;
case "education-certificate":
return r + 3600;
case "housing":
return r + 1500 * 12;
case "medical":
return r + this.medicalAmount;
default:
return r;
}
}, 0);
}

calcIIT() {
// 计算年薪
const yearSalary = this.getYearSalary();
// 年终奖是否单独计税

// 五险一金缴纳金额
const yearSocialInsurance = this.getYearSocialInsurance();
// 专项附加扣除金额
const specialDeduction = this.getSpecialDeduction();
// 计算需要缴纳个税的金额
let taxableAmount =
yearSalary - yearSocialInsurance - specialDeduction - 60000;
// 计算个税
return this.calcTaxableAmount(taxableAmount);
}

// 计算个税(金额 * 税率 - 速算扣除)
private calcTaxableAmount(taxableAmount: number) {
if (taxableAmount <= 36000) {
return taxableAmount * 0.03;
} else if (taxableAmount <= 144000) {
return taxableAmount * 0.1 - 2520;
} else if (taxableAmount <= 300000) {
return taxableAmount * 0.2 - 16920;
} else if (taxableAmount <= 420000) {
return taxableAmount * 0.25 - 31920;
} else if (taxableAmount <= 660000) {
return taxableAmount * 0.3 - 52920;
} else if (taxableAmount <= 960000) {
return taxableAmount * 0.35 - 85920;
} else {
return taxableAmount * 0.45 - 181920;
}
}
}

最后


我最开始尝试写一个 UI 版。但后续感觉,UI 版对于不同语言的用户,会看起来很痛苦。

因此我通过纯 JS 实现,大家可以通过不同的 UI 调用该类,可以在各个框架中使用。

同时也通过 svelte 做了一个简略 UI 版,大家可以直接尝试。


最后,点赞、关注、收藏 ,祝大家多多退税~~


作者:sincenir
来源:juejin.cn/post/7342511044290789430
收起阅读 »

如果我贷款买一套 400W 的房子,我要给银行多送几辆迈巴赫?

买房攻略 2023 年至今,上海房价一跌再跌。俺已经蠢蠢欲动了,磨刀霍霍向"买房"。但是奈何手里钞票不够,只能向天再借 500 年打工赚钱。但是作为倔强的互联网打工人,想知道自己会被银行割多少韭菜。于是就写了个程序,用于计算我贷款买房需要多给银行还多少钱。这样...
继续阅读 »

买房攻略


2023 年至今,上海房价一跌再跌。俺已经蠢蠢欲动了,磨刀霍霍向"买房"。但是奈何手里钞票不够,只能向天再借 500 年打工赚钱。但是作为倔强的互联网打工人,想知道自己会被银行割多少韭菜。于是就写了个程序,用于计算我贷款买房需要多给银行还多少钱。这样我就能知道银行割我的韭菜,能省下几辆迈巴赫的钱了。


贷款利率



  • 公积金的贷款利率



    • 首房:贷款时间 <=5 年,利率为 2.6% ;贷款时间 >= 5 年,利率为 3.1%

    • 非首房:贷款时间 <=5 年,利率为 3.025% ;贷款时间 >= 5 年,利率为 3.575%




image.png



  • 商业险贷款利率



    • 贷款时间 <=5 年,利率为 3.45% ;贷款时间 >= 5 年,利率为 3.95%




image.png


代码实现



  • 以下代码,实现了:我贷款买房需要多给银行还多少钱


public class LoanAmountCalculation {

   //首套住房5年以内公积金贷款利率
   private static final double FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS = 2.6;
   //首套住房5年以上公积金款利率
   private static final double FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS = 3.1;
   //二房5年以内公积金贷款利率
   private static final double NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS = 3.025;
   //二房5年以上公积金款利率
   private static final double NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS = 3.575;
   //5年以内商业贷款利率
   private static final double COMMERCIAL_LOAN_RATE_WITHIN_FIVE_YEARS = 3.45;
   //5年以上商业贷款利率
   private static final double COMMERCIAL_LOAN_RATE_MORE_FIVE_YEARS = 3.95;

   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);

       double houseAmount = getInputValue(scanner, "请输入预计买房金额(单位:W):", "请输出正确的买房金额(>0)!");
       double principal = getInputValue(scanner, "请输入您的本金(单位:W):", "请输出正确的买房金额(>0)!");
       if (principal >= houseAmount) {
           System.out.println("全款买房,崇拜大佬!");
           return;
      }

       double accumulationFundLoanAmount = getInputValue(scanner, "请输入公积金贷款金额(单位:W):", "请输出正确的公积金贷款金额(>0)!");

       double commercialLoanAmount = houseAmount - principal - accumulationFundLoanAmount;
       if(commercialLoanAmount <= 0){
           System.out.println("您的本金+公积金贷款已经够买房啦,恭喜大佬!");
           return;
      }else{
           System.out.println("您的本金+公积金贷款还不够买房哦,需要商业贷款金额为(单位:W):" + commercialLoanAmount + "\n");
      }

       int accumulationFundLoanYears = getInputIntValue(scanner, "请输入公积金贷款年份(单位:年):");
       int commercialLoanAmountYears = getInputIntValue(scanner, "请输入商业贷款年份(单位:年):");

       int isFirstHouse = getInputIntValue(scanner, "请输入是否首房(0:否,1:是):");

       LoanAmount loanAmount = calculateLoanAmount(
               accumulationFundLoanAmount, accumulationFundLoanYears,
               commercialLoanAmount, commercialLoanAmountYears, isFirstHouse);
       System.out.println("详细贷款信息如下:" + "\n" + loanAmount);
  }

   /**
    * 获取double类型的输入
    * @param scanner:Java输入类
    * @param prompt:提示信息
    * @param errorMessage:输入错误的提示信息
    * @return 一个double类型的输入
    */

   private static double getInputValue(Scanner scanner, String prompt, String errorMessage) {
       double value;
       while (true) {
           System.out.println(prompt);
           if (scanner.hasNextDouble()) {
               value = scanner.nextDouble();
               if (value > 0) {
                   break;
              } else {
                   System.out.println(errorMessage);
              }
          } else {
               scanner.next();
               System.out.println(errorMessage);
          }
      }
       return value;
  }

   /**
    * 获取int类型的输入
    * @param scanner:Java输入类
    * @param prompt:提示信息
    * @return 一个int类型的输入
    */

   private static int getInputIntValue(Scanner scanner, String prompt) {
       int value;
       while (true) {
           System.out.println(prompt);
           if (scanner.hasNextInt()) {
               value = scanner.nextInt();
               if (value > 0) {
                   break;
              } else {
                   System.out.println("请输入正确的年份(>0)!");
              }
          } else {
               scanner.next();
               System.out.println("请输入正确的年份(>0)!");
          }
      }
       return value;
  }

   /**
    * 功能:贷款金额计算
    * 入参:
    * 1.accumulationFundLoanAmount:公积金贷款金额 2.accumulationFundLoanYears:公积金贷款年份;
    * 3.commercialLoanAmount:商业贷款金额;       4.commercialLoanAmountYears:商业贷款年份
    * 5.isFirstHouse:是否首房
    */

   private static LoanAmount calculateLoanAmount(double accumulationFundLoanAmount, int accumulationFundLoanYears,
                                                          double commercialLoanAmount, int commercialLoanAmountYears, int isFirstHouse)
{
       LoanAmount loanAmount = new LoanAmount();
       //公积金贷款还款金额
       double accumulationFundRepaymentAmount;
       if(isFirstHouse == 1){
           accumulationFundRepaymentAmount = accumulationFundLoanYears <= 5 ?
                   accumulationFundLoanAmount * Math.pow((100 + FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, accumulationFundLoanYears)
                  : accumulationFundLoanAmount * Math.pow((100 + FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS) / 100, accumulationFundLoanYears);
      }else{
           accumulationFundRepaymentAmount = accumulationFundLoanYears <= 5 ?
                   accumulationFundLoanAmount * Math.pow((100 + NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, accumulationFundLoanYears)
                  : accumulationFundLoanAmount * Math.pow((100 + NOT_FIRST_HOUSE_ACCUMULATION_FUND_LOAN_RATE_MORE_FIVE_YEARS) / 100, accumulationFundLoanYears);
      }
       loanAmount.setAccumulationFundRepaymentAmount(String.format("%.2f", accumulationFundRepaymentAmount));

       //公积金贷款每年还款金额
       loanAmount.setAccumulationFundAnnualRepaymentAmount(String.format("%.2f", accumulationFundRepaymentAmount / accumulationFundLoanYears));

       //商业贷款还款金额
       double commercialRepaymentAmount = commercialLoanAmountYears <= 5 ?
               commercialLoanAmount * Math.pow((100 + COMMERCIAL_LOAN_RATE_WITHIN_FIVE_YEARS) / 100, commercialLoanAmountYears)
              : commercialLoanAmount * Math.pow((100 + COMMERCIAL_LOAN_RATE_MORE_FIVE_YEARS) / 100, commercialLoanAmountYears);
       loanAmount.setCommercialRepaymentAmount(String.format("%.2f", commercialRepaymentAmount));

       //商业贷款每年还款金额
       loanAmount.setCommercialAnnualRepaymentAmount(String.format("%.2f", commercialRepaymentAmount / commercialLoanAmountYears));

       //公积金贷款超出金额
       loanAmount.setAccumulationFundLoanExceedAmount(String.format("%.2f", accumulationFundRepaymentAmount - accumulationFundLoanAmount));

       //商业贷款超出金额
       loanAmount.setCommercialLoanExceedAmount(String.format("%.2f", commercialRepaymentAmount - commercialLoanAmount));

       loanAmount.setTotalExceedLoanAmount(String.format("%.2f", accumulationFundRepaymentAmount - accumulationFundLoanAmount + commercialRepaymentAmount - commercialLoanAmount));
       return loanAmount;
  }
   @Data
   static class LoanAmount{
       /**
        * 公积金贷款还款金额
        */

       private String accumulationFundRepaymentAmount;
       /**
        * 公积金贷款每年还款金额
        */

       private String accumulationFundAnnualRepaymentAmount;
       /**
        * 商业贷款还款金额
        */

       private String commercialRepaymentAmount;
       /**
        * 商业贷款每年还款金额
        */

       private String commercialAnnualRepaymentAmount;
       /**
        * 公积金贷款超出金额 = 公积金贷款还款金额 - 公积金贷款金额
        */

       private String accumulationFundLoanExceedAmount;
       /**
        * 商业贷款超出金额 = 商业贷款还款金额 - 商业贷款金额
        */

       private String commercialLoanExceedAmount;

       /**
        * 总共贷款超出金额
        */

       private String totalExceedLoanAmount;

       @Override
       public String toString() {
           return "1.公积金贷款还款金额=" + accumulationFundRepaymentAmount + "万元\n" +
                   "2.商业贷款还款金额=" + commercialRepaymentAmount + "万元\n" +
                   "3.公积金贷款每年还款金额=" + accumulationFundAnnualRepaymentAmount + "万元\n" +
                   "4.商业贷款每年还款金额=" + commercialAnnualRepaymentAmount + "万元\n" +
                   "5.公积金贷款超出金额=" + accumulationFundLoanExceedAmount + "万元\n" +
                   "6.商业贷款超出金额=" + commercialLoanExceedAmount + "万元\n" +
                   "7.总共贷款超出金额=" + totalExceedLoanAmount + "万元\n";
      }
  }
}

代码输入,输出示例


6f9e90ab10c92d0a673777569a64f75.png


由上图可知,我要贷款买一套 400w 的房子,本金只有 120w,使用组合贷:公积金贷款 120w(10年),商业贷款 160w(20年)。最终我需要多还银行 230.07w,相当于买两辆迈巴赫的钱了,巨亏!


以上就是全部内容了,如果涉及到真实场景,还是需要根据具体的情况计算的!


作者:一只野生的八哥
来源:juejin.cn/post/7346385551366684722
收起阅读 »

用马斯克五步工作法重构支付宝商家账单

本文作者是蚂蚁集团数据研发工程师惠勒,将马斯克五步工作法应用在了实际项目中,实现了支付宝商家账单的重构,希望本文对想要降低系统复杂度的同学或者项目有所帮助。0. 概述支付宝中国数据团队在过去的一年里应用马斯克的五步工作法重构了有 10 年历史之久的支付宝商家账...
继续阅读 »

本文作者是蚂蚁集团数据研发工程师惠勒,将马斯克五步工作法应用在了实际项目中,实现了支付宝商家账单的重构,希望本文对想要降低系统复杂度的同学或者项目有所帮助。

0. 概述

支付宝中国数据团队在过去的一年里应用马斯克的五步工作法重构了有 10 年历史之久的支付宝商家账单,整体复杂度减少 60%,时效性提升 1 小时,计存成本降低 30%,理解和运维成本大幅下降。复杂度是很多问题的根源,既会增加运维的成本,又降低了支撑业务的效率。 账单重构的经验表明,相当大比例的复杂度是没有必要的,我们应该致力于把复杂的事情变简单,而不是倒过来做“防御性编程”。希望本文对想要降低系统复杂度的同学或者项目有所帮助。

1. 重构背景

1.1 什么是商家账单

商家通过支付宝发生业务,我们对他们提供相应的流水单或者凭证,这就是商家账单。商户可以到B站下载账单和他们自己的业务记录及资金变动期望逐一比对,确认所有业务和资金都按正确的期望的方式完成了处置,这个过程称为商家对账

支付宝目前提供了丰富账单类型,包括资金流水,交易订单,资产凭证,营销动账,费用账单以及一些列个性化定制账单。实现方式上则有在线实时账单以及基于 odps 的离线的日/月账单,其中在线账单主要用于业务查询,而离线账单则主要用于商家对账,本文所指商家账单主要指离线账单

图1:B站里的商家账单

1.2 为什么要重构

一句话概括:历时 10 年,积重难返

商家账单作为支付宝收单业务配套的基础产品,主要的服务对象是商家。和所有 To B 产品一样,其面临着“千人千面的个性化诉求和成本可控的快速支撑”的核心矛盾。在实现过程中,要么在原有逻辑上打个补丁,更多的时候是出于稳定性等因素考虑,不敢动原有的逻辑,于是就新起炉灶搞个新的字段。历时 10 年,资金流水账单搞出了上百个字段,很多字段的加工链路极其复杂。目前整个账单大概有几千个任务,近万的依赖关系,平均加工深度 20 多层,各种横向域之间的耦合,纵向层之间的调用层出不强,用一团乱麻来形容也不为过!

图 2:真实的账单血缘图

image.png

图 3:账单架构混乱的示意图

1.3 为什么是现在

主要是因为逻辑过于复杂,当前用于保障账单准确出账时效的成本已经过于高昂。

离线账单是拿去对账的,这就像有上百万商家拿着放大镜在找问题一样,不仅像金额,时间等字段不能有问题,各种订单号,门店 ID 等字段也偏差不得。而当前账单过于复杂,经常出现变更了这里漏了那里,或者是改了上游影响了好几层以外的下游。目前每年流转到二线研发同学的咨询就有几百例,一线外包和马力等同学接到的账单类问题更是以万计。

时效性方面的压力则有过之而无不及。由于需要对标竞对 T+1 10 点的出账时效,支付宝目前对客承诺 T+1 9 点出账,扣减掉在线账单文件生成和预留的异常处理时间,基本上要求离线账单需要 T+1 5 点 30 产出。作为蚂蚁唯二的两条最高级基线之一,运维同学承担了极大的压力,从 2023 年 9 月-12 月,运维同学在夜间共计响应 150+ 起电话告警,涉及天数 67 天,值班起夜比例为 67/122=54.9%。虽然引发起夜的因素有集群计算资源以及 odps 软件等外部因素,但根子上还是因为加工链路太长,给基线预留的余量不够。

为了彻底解决上述问题,我们决心重构支付宝商家账单,通过降低复杂度的方式,既提升用户体验又降低运维成本。

2. 重构目标

通过降低 50% 的复杂度,达到以下 5 点业务效果

  • 准确的

每个字段的含义是明确的,账单数据内部是一致的

  • 高时效的

    账单产出提前 1 小时
  • 好运维的

    重大问题能够快速一键重跑的(72h 降低到 12h 以内),日常的异常情况能够快速处理(1h以内),代码结构是好理解的(模块化的分层架构)
  • 易扩展的

    可扩展性强,对于各种业务需求的响应速度较快,不需要对代码逻辑大幅改动。有灰度环境的全链路回归链路,减少变更风险
  • 低成本的

    在保证回刷要求的前提下尽可能降低存储成本(降低 1/3 的存储成本),减少任务数量,降低计算成本(降低 1/3 的计算成本)

3. 应用五步工作法重构账单

马斯克在特斯拉和 spaceX 的成功经验告诉我们,应用五步工作法可以把复杂的事情变得简单,把高昂的成本打下来。所谓五步工作法,主要是

  1. 质疑,推敲需求,不要有愚蠢的需求;
  2. 删减,简化流程,精简部件或工艺流程;
  3. 优化,在前面两步的基础上做优化;
  4. 加速,在前三步的基础上加快迭代时间;
  5. 替换,在完成前四步之后做自动化替换。 商家账单的重构工作也或多或少借鉴了五步工作法。

3.1 质疑

第一步是质疑:为什么有那么多字段,为什么每个字段有那么多逻辑,为什么加工链路需要那么长。 带着这几个为什么,我们开始做字段梳理工作,核心工作是两项

  1. 梳理这些字段哪些是有人用的,哪些是没人用的。有人用的话有多少人在用,都是哪些商户
  2. 从末端表的字段出发,自下而上的梳理加工链路,穿透到最上游,看字段最终来源于哪些领域。

以最多商户使用的资金流水账单为例,上百个字段中仅有不到三分之一是核心字段,一半左右是个性化字段(使用商户数 100 以下),剩余大几十个都是无人使用字段;字段来源方面则集中在账务,交易,支付,计收费,结算,充转提等几个领域。从这些数字中我们得出以下两个观点

  1. 不需要那么多字段,可以先集中攻克核心字段
  2. 我们可以分域处理信息,再拼起来集中加工使用

3.2 删减

带着第一步质疑的观点,我们开始做删减,以核心字段为目标,落地如下架构设计 image.png

图4:重构的账单架构图

核心的工作有那么几项

  1. 把最终的一个对客账单字段,拆解为几个不同领域的字段加工。 如账单字段商户订单号,可以简化为如下规则:如果有交易号的话,则取交易号,否则使用账务域的外部流水号兜底。这样一来,一个账单字段就拆解为了一个交易域的字段和一个账务域的字段。对其余核心账单字段如法炮制,最终可以归到账务,交易,支付,计收费,结算,充转提等6-7个领域中去。
  2. 每个领域按照面向领域建模的方式进行中间层的构建,把需要的领域内的字段提前加工处理好
  3. 把(2)的结果拼接起来变成账单因子层宽表,再根据每个出账字段的加工规则,清洗出最后的账单字段
  4. 清洗出账规则,过滤(3)的结果,产出最终的日明细账单。日汇总,月账单等都基于日明细账单加工。

    特别需要注意的是,在这个阶段并不需要特别拘泥于细节,因为后面还会把删多的逻辑补回来,按照五步工作法的说法,如果最后没有补回来 10% 的逻辑,说明这个阶段删减的不够。

3.3 优化

在整个账单重构过程中,有几个难点我们专门提出来成立了专项进行优化

  1. 出账范围
  2. 商家账单中最基本的一个问题是给谁出账。老账单里起了好几十个任务在处理这个问题,经常会出现商户来问为什么没有出账,往往需要查半天才解释的清楚。重构时优化了该问题,明确了必须是签约了指定产品才能出账单,任务数相应减少到 10 个以下。
  3. 关联 jar 包

    商家账单中经常出现一笔昨日的流水需要关联多日之前的商品信息或者交易信息的诉求。这种跨天关联在离线odps的批处理框架下是比较麻烦且性价比很低的,在需要关联多日数据时面临着需要申请大量资源导致任务无法调起的问题。商家账单当前是使用一种jar包的方案来实现的,它的本质还是离线跨天关联,只是优化了并发逻辑,把一个大任务拆分成多个子任务发到 odps 跑。

    这次重构,我们提出离在线融合方案,利用在线可以笔笔查,性能好速度快的优势,使用 udf 调用在线http接口进行查询。考虑到在线查询可能会有失败的可能,对于失败的少数数据再用离线跨天关联的方式进行查漏补缺。

    目前这个方案还在研发中,预计可以大幅降低相关任务的计算成本,进一步提高出账的时效性。

  4. 离线灰度方案

    作为一个面客类产品,如何在离线实现像在线一样的变更三板斧从而减少对客影响,是一直困扰着所有离线同学的一个难题。本次重构中,我们做了一点尝试。我们的核心思想是:离线任务只跑一次但算两套值,并通过一个控制模块来控制哪些账号取原始值,哪些账号取灰度值。

    如下图所示,我们跑一次任务,把线上值记录在因子宽表的强字段收入金额和指出金额中,把灰度值记录在灰度扩展字段中,不同的值经过相同或者不同的加工规则,产出两个账单对客值净收入金额和灰度扩展字段中的净收入金额,最后通过一个控制模块来决定哪些账号要用灰度值。

    image.png

图5:离线灰度方案

  1. 稳定性自愈方案

    商家账单有几千个任务,但我们依赖的这套离线批处理的模式里又有很多不确定的因素:odps 的软件问题,底层计算集群的机器抖动,槽位占用,在线压制等,所以每个月总有那么几十个报错或者变慢的任务需要人工处理。在本次重构过程中,我们联合蚂蚁大数据部相关团队上线了报错自动重跑和变慢自愈恢复等两个稳定性自愈方案。

    报错自动重跑方案的核心是系统自动识别运行日志中的关键词,除非是明确不可重跑的报错(如数据质量问题,权限问题等),都会由调度系统拉起来重跑,实际运行过程中还需要综合考虑基线余量等要素。目前报错自动重跑方案每个月可以减少商家账单几十次的报错处理,减少 4-5 天的起夜值班。

    变慢自愈方案的核心思想是识别相关变慢任务并自动 copy 到双跑链路执行。若双跑任务执行期间原链路恢复,则不做处理;若双跑链路执行完成,原链路仍未完成,则杀死原链路任务,将双跑结果注入原表,将任务置成功。

图 6:变慢自愈方案

3.4 加速

在第二步删减模块我们只关注于核心字段的核心逻辑,一方面存在核心字段逻辑删多了的问题,另外一方面需要把其余个性化字段也补上。在第四步加速中,我们需要通过一定的方式开始回补,并且这种回补相比第二步而言要高效的多。

我们的办法是找一个牵引指标,小步快跑,快速迭代。当主逻辑搭建的差不多了以后尽快把脚本发布上线,并起一个新老账单对比任务,通过对比来发现新账单逻辑上存在的问题,对于缺失的部分快速补上。这里面的核心是要有一个牵引指标,在账单重构过程中,我们引入了商户可切流比例这样一个指标,计算公式如下

商户可切流比例=所有流水的所有字段都比对通过的商户数/总商户数*100%

以资金账单为例,商户可切流比例从第一版的 41% 经过大概 10 次迭代上升到了 85%,后又经过一段时间的精细化调整,目前为 99.3%。在这个过程中,我们一方面修复了代码中的 bug,另外也基本上把删多了的有用逻辑进行了回补。这种目标驱动的针对性查漏补缺的做法相比第二步的正向推进要高效的多。

图 7:资金账单的迭代次数和商户可切流比例

3.5 替换

五步工作法的最后一步是自动化替换人工,在账单场景中我们姑且取替换之意。在商户可切流比例高于 95%,且新账单的时效性等问题基本优化完全之后,我们就开启了新老账单的替换工作。优先切换核对通过且经常有下载使用的商户,这样做一方面可以得到商户的反馈,另一方面不因为长尾的逻辑优化影响切流。

4. 重构效果

重构的效果总的来说是满足预期的。以下为几个方面的效果

  • 复杂度

我们用任务数来衡量复杂度,资金流水账单的复杂度下降了 60% 以上,交易订单的复杂度也下降了47%

  • 时效性

资金流水账单时效性较老账单提升 1.5 小时,交易订单提升 1 小时

  • 成本

    存储和计算成本较老账单下降 1/3 左右,每年节省上百万的计存成本

  • 准确性

汇总,月,历史等账单均从日明细加工而得,不再会有内部不统一的问题

  • 运维/理解成本

代码耦合度大幅降低,账单整体的理解成本从半年到1年下降到 1 个月左右

5. 总结反思

站在现在这个时间点,我们认为有那么几点是值得总结的

1) 复杂度是各种问题的源泉

商家账单的各种准确性,时效性以及高可用问题,归根到底是因为业务逻辑过多,架构腐化,导致整体复杂度急剧飙升,造成今日想改也改不动,想维持也维持不了的尴尬局面。我们必须在日常迭代中高度重视复杂度控制问题,不图一时之快,尽量不给后人留坑。

2) 很多复杂度是没有必要的

账单重构的经验表明,对于一个发展了多年的系统,很多复杂度是没有必要的。今日之所以可以降低复杂度,一方面是因为过去很多逻辑现在已经失效了,另一方面是因为后人对于业务的理解有了新的认知,可以用新的方法来复现来重做相关功能。

复杂度的降低带来的好处是方方面面的,就商家账单而言,最直观的就是时效性的提升,从而带来基线稳定性的提升,降低起夜压力。其次复杂度的减少降低了运维和编码成本,可以进一步减少准确性问题。当然,用现在流行的话讲,这不是一种“防御性编程”,不再需要半年到1年的时间才能熟悉账单的工作,一个略有经验的同学,可能1个月左右就能上手账单业务。那是否要担心因此工作就会被替代呢?我们想是没有必要杞人忧天的,如果一个工作要通过刻意把事情变复杂才能形成壁垒和核心竞争力,那么这样的工作是不值得为之奉献的。

3) 拆解事情很重要,节奏感更重要

重构商家账单是一件有些复杂的事情,面对这样一团乱麻般的代码,从何处下手,要拆解出哪几件事情来,每件事件的交付物应该是什么,这样的拆解固然很重要。但更重要的是节奏感的把握,同样是做这些事情,哪个阶段先重点做什么工作,是细致做还是粗略做,这种节奏感的把握更为重要。因为如果节奏不对,就会在某个阶段发现事情无法快速推进下去,时间一久就会受到一线同学以及主管等质疑。要是节奏对了,每个阶段都能看到一些希望,那么一件复杂的事情便会推行的比较顺利。

4) 需要进一步降低重构这件事的成本

尽管如此,我们还是耗费了几百人日来做账单的重构。我们有那么多的场景值得重构,整个社会上也有非常多的公司有这种重构降本增效的诉求。是否有可能把重构的过程流程化,甚至是产品化,从而大幅降低重构这件事的成本?这是重构这件事给我们的遗留命题。

5) 数仓同学未来的两个发展方向

在转岗到支付宝数据部门的时候,有一位高年级的同学曾经问我如何看待数仓同学的上升空间/发展路径问题。经过这一年多在商家账单的一线工作,尤其是这大半年来专职投入重构工作的经历,我想可能有如下两个方向

a) 专业的数据技术专家

数据技术专家主要专注于通过代码优化,架构优化等方法,降低一套数仓任务的复杂度,获取时效,准确,计存成本等方面的收益。商家账单重构就是典型这类场景,这个发展方向的价值收益比较好衡量。未来的核心竞争力在于是否可以借助AI的力量把重构优化这件事的成本降低,提升效率。

b) 全局的数据架构师

全局的数据架构师更关注的是信息架构的问题,要解决的是数据生产者和数据消费者之间的信息差问题。我们常常可以听到业务同学抱怨数据不准,不好用,听到算法同学说没有优质的数据供给。殊不知其实要做一份好的数据资产其实是有比较高的门槛,需要对业务,架构,信息流转的方式等都有比较深入的理解,才有可能做出一份好的数据。但在实践中我们发现,造成这种门槛的一个重要原因是因为作为数据生产者的系统研发同学并不了解作为数据消费者的数仓同学的痛点,有些问题其实在数据生产者略作改动就可以给数据消费者减少极大的成本。数据架构师就需要致力于解决这样的问题。我们很难具象的衡量这样的改动带来的收益,但可以肯定的是这些细小的改动会润物细无声的降低做一份好的数据资产的门槛,进而真正的发挥数据要素乘数效应,助力业务发展。


作者:支付宝体验科技
来源:juejin.cn/post/7347912334700789779
收起阅读 »

10 天的开发量,老板让我 1 天完成,怎么办?

大家好,我是树哥! 昨天,我在文章《业务开发做到零 bug 有多难?》和大家聊了下影响零 bug 的一些因素。其中,我提到了开发时被压缩工时,应该怎么做。今天,我们就来聊聊这个话题。 只要工作过几年的小伙伴,必然会遇到过背压工时的情况。面对这种情况,不同的工作...
继续阅读 »

大家好,我是树哥!


昨天,我在文章《业务开发做到零 bug 有多难?》和大家聊了下影响零 bug 的一些因素。其中,我提到了开发时被压缩工时,应该怎么做。今天,我们就来聊聊这个话题。


只要工作过几年的小伙伴,必然会遇到过背压工时的情况。面对这种情况,不同的工作年限、在不同的公司、不同的团队氛围下,都会有不同的反应。如果你是一个刚刚毕业的萌新开发,很大情况下你会选择自己加班服从。甚至加班都完不成的情况下,你还吭哧吭哧不出声。


最后等待你的结果就是 —— 成为被复盘的对象,被批评。那么如果遇到了开发时间被压缩,或者被质疑的情况下,我们除了默默加班接受之外,还能做些什么来让自己没那么苦逼吗?


在我看来,自己一个人傻傻加班是下下签,是最后实在没办法才做的无奈之举。一旦有其他选择,你都不应该提出自己加班加点做完。那么,到底有什么办法可以解决工时被压缩这一问题呢?


解释工时构成


如果你的开发时间被压缩,那么较大可能是 leader 质疑你评估出的工时。假设你的工时评估并没有问题,那么就是你考虑到了一些风险点,而你的 leader 并没有考虑到。毕竟这也很正常,对于一个很久没有写代码的管理者来说,其会习惯性地忽略一些细节性的东西。


这个时候,你要做的不是胆怯地接受。而是要主动去找 leader ,跟他解释工时是怎么评估出来的。你考虑到了某些风险点,为什么是这么多工时。如果你的 leader 不是傻子,那么相信他会接受你的解释。但这里要注意的是,解释的时候记得要语气好些,不要怒气冲冲地找别人,不然话没说然就吵起来了。


减少需求内容


假设你和 leader 已经进行了友好地沟通, leader 也认可了你的评估时间。但是他说:没办法,老板就要求那个时间点做完,没办法给你更多时间了!


这时候,萌新小白就会老老实实回去座位上加班,最后还是干不完被批斗。但对于职场老油条来说,他就学会与 leader 以及产品沟通 —— 能不能少点需求内容。例如:我们要做一个员工列表,那是不是只做列表就可以,不用做筛选和搜索了?员工详情是不是也可以先不走了?


老板可以指定最终完成的时间,但是他基本不会干涉到具体的细节上面。这时候就给我们留下了沟通的空间,这也就是作为开发的你可以争取的东西。对于一个有经验的产品经理来说,如果研发给他提出了减少非核心功能的诉求,他一般也会答应的。


申请更多资源


如果产品说:不行,我们每个功能点都得做,一点需求都少不了!


这时候你可以再向你的老板提出诉求 —— 申请更多资源。


前面你也解释过工时的构成,做这么多功能确实需要这么多时间。如果最终上线时间不能推迟,那么就只能投入更多的资源了。


在这种情况下,如果公司还有富裕的研发资源,那自然会优先考虑你这边的诉求。对于你来说,你的研发压力也自然变小了。


分摊开发压力


如果实在又申请不到更多资源,这个项目又只能由你们团队 5 个人来完成,怎么办?


很多时候,不同开发人员的开发压力不一样。可能你开发压力比较大,其他人开发压力比较小,这时候你可以提出 —— 是否可以让其他小伙伴帮忙做点工作,这样可以减少一些压力?


我想,如果你的 leader 也应该会考虑你的诉求。千万不要自己明明完成不了,还要硬抗。到最后加班干了几个星期,需求还是完成不了,不仅辛苦的付出得不到理解,还被批斗。那可就真的是赔了夫人又折兵啊!


千万不要觉得这种情况不会发生,在我去年工作的时候,就发生了这样一个事情,我也是很同情那位同学的。如果那位同学能看到这篇文章,那么或许他后面就不会踩坑了吧。


推迟上线时间


上面说得是最终上线时间无法变更的情况,但很多时候并没有这种倒排需求。很多需求的上线时间并不是一成不变的,你只要给出足够合理的解释,也都是可以沟通的。


因此,如果在上面的沟通方法都行不通的情况下,你也可以沟通看看是否可以推迟上线时间。毕竟相对于研发速度来说,研发质量肯定更加重要。


终极绝招


大多数情况下,如果你能合理应用上面提到的几种沟通方式,被压缩工时的问题一般都能解决。但有些小伙伴会问:那如果真的所有办法都失效了呢?那怎么办?


其实,大多数情况下,不太可能到了需要使用绝招的地步。但如果真的到了这一步,那你就做好「殊死一搏」的准备,用上这个绝招吧 —— 调预期、表态度。


调预期,就是给你的 leader 打预防针,提前告诉他这样做的后果就是 —— 质量差、很难做得完。如果他还是这么坚定地推进,那么如果真的做不完,相信他也理解,不会太过于责怪你。


表态度,就是得加加班。如果你之前已经说了压力很大,甚至加班都做不完。那么你至少还是得表表态度,不能像往常一样早早下班,这样即使最后搞砸了。由于你态度还算端正,还不至于被责怪得太狠。但如果你要是又说做不完,又每天早早下班,那别人就觉得是你态度问题了。


走到这一步,实属是无奈,但这也是最后的保命之举了,除非你不想在这干了。


总结


今天分享了几种沟通解决「被压缩工时」的方法,包括:



  • 解释工时构成

  • 减少需求内容

  • 申请更多资源

  • 分摊开发压力

  • 推迟上线时间


本质上来说,就是不要自己一个人傻傻地抗压力,不要让自己背负着太大压力。我们要明白自己能做到什么程度,而且不要早早把「自己加班」这一最后的保命、卖惨利器祭出。他应该是自己的保命技能,而不是为别人锦上添花的技能。


特别是,不要因为赶进度、赶工时,而去牺牲开发质量。因为如果你这么做了,后果就是你付出了很多时间和精力,最后你会在项目复盘会上检讨 —— 为什么你的功能代码质量这么差。这是另一个话题了,后续有时间我们继续聊。


希望大家都能够活学活用,下次在和 leader 以及产品沟通的时候,用上这些沟通技巧吧!希望大家都不要加班,准时下班!


如果你觉得今天的文章对你有帮助,欢迎点赞转发评论支持树哥,你的支持对于我很重要,感谢大家!


作者:树哥聊编程
来源:juejin.cn/post/7348289379055140903
收起阅读 »

业务开发做到零 bug 有多难?

大家好,我是树哥,好久不见啦。作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务需求...
继续阅读 »

大家好,我是树哥,好久不见啦。

作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。

大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务需求做到零 bug。不试不知道,一试吓一跳,原来零 bug 还真的还不容易。今天,树哥就跟大家分享关于「业务开发零 bug」的一些思考。

要做到业务开发零 bug,其实挺难的。这涉及到非常多方面,有些方面可能还不只是你能控制的,例如:产品 PRD 详尽程度,产研组织的稳定性等等。经过一段时间的思考与摸索,我自己总结出一些影响因素,分别是:

  1. 产品需求文档的清晰程度
  2. 需求的复杂程度
  3. 开发人员的细心程度
  4. 开发人员是否详细自测过
  5. 开发人员对项目的熟悉程度
  6. 开发人员开发时间是否充足

针对上面说到的影响因素,我们一个个详细聊聊。

需求文档清晰程度

对于研发、测试人员来说,他们获取信息的源头就是产品的 PRD 文档。因此,需求文档是否写得清晰、明确,就显得非常重要。

如果产品自己对功能都不了解,那么输出的需求文档肯定「缺斤少两」,到时候就是边开发边补充需求,甚至是在测试过程中补充需求。遇到这种情况,想要做到零 bug 真的非常难。

因此,清晰明确的需求文档,是我们实现业务开发零 bug 的重要前提。如果这个前提保证不了,那要做到零 bug 真的很难。毕竟想做成啥样都不知道,程序员又不是神仙,咋能猜出你想要什么。但这块内容,更多是对于产品人员专业能力的要求,开发人员无法控制。

在一些公司,会再需求评审之前先对需求文档进行一次初审,筛除那些有明显重大问题的需求,这样可以减少一部分劣质需求。

但初审的作用还是有限的,它没办法对功能的细节做较多的判断。很多时候恰恰就是一些功能细节的缺失,导致了一些 bug 的诞生。

需求的复杂程度

需求的复杂程度,对于实现业务开发零 bug 也有很大的影响。举个简单地例子:一个改文案的需求,和一个完全重新做的功能。

这样的两个需求,其复杂程度差别很大,肯定是改文案的需求实现业务开发零 bug 的难度低很多。对于一个完全重新做的功能,要做到完全零 bug,对于开发人员的要求非常高。

对于越复杂的项目,零 bug 的可能性就越低。因此,很多项目为了追求产出功能的高质量,会采用将功能点拆得非常细的方式,来减少单个需求的复杂度。

笔者公司在去年做过这个尝试,确实是可以较大地提高产出功能的质量。

细心程度

前面说到需求文档的清晰程度很重要,这取决于产品人员对于业务的理解程度,以及对于对于功能的熟悉程度。开发人员的细心,就像是一个质检关卡一样,在开发之前就对产品的需求内容进行详尽的思考与提问。

对于粗心的开发人员来说,其可能不看需求文档就直接参加需求评审,等到开发的时候边写代码边看需求文档,其写得代码也是一边熟悉需求一边改。这样写出来的系统功能是比较差的,没有一个统一、全局的设计与思考,很容易在细节处发生问题。

一个细心的开发人员,其会在评审之前就详细阅读需求文档,甚至会前前后后翻阅好几次。他甚至会逐字逐句地阅读,弄懂每个文字、句子的意思,甚至有时候会让你觉得他是在玩文字游戏(但不得不说,确实有必要细致一些)。

最后会联系上下文思考功能的合理性。如果发现一些不合理的地方,他会积极与产品沟通反馈,以确保其对于需求的理解,与产品经理对于需求的理解是一致的。

通过对比,我们知道细心的开发人员对于产品经理来说,是一个莫大的帮助,可以帮助他查漏补缺,让其对于功能的考虑更加细致、严谨。

这里的开发人员不仅仅指的是后端开发人员,也包括前端开发、移动端开发,他们都会从不同角度提出问题。

对于后端开发人员来说,他们可能会提出性能问题。对于前端开发以及移动端开发同学,他们可能会提出交互问题、样式统一等问题。

简单地说,细心的开发人员可以弥补需求文档的缺陷,从而让大家对于需求的理解更趋于一致,从而减少 bug 的发生。因此,开发人员的细心程度也是决定业务开发能否实现零 bug 的关键因素!

是否详细自测过

即使写过 10 多年代码的开发人员,刷 Leetcode 也不敢说 bug free 一把过,对于更加复杂的业务代码更是如此。因此,要做到业务开发零 bug,其中一个很重要的操作便是 —— 自测。

自测可以帮你再次检查可能出现的问题,从而提高零 bug 的概率。对于我而言,我习惯性在自测的时候再次对照一遍需求文档,从而避免自己遗漏一些功能的细节点。

对于自测而言,业界有很多种自测方法,包括:单测、集成测试、功能测试。一般情况,建议自己选择适合自己的自测方法。

很多时候,功能测试是相对来说性价比较高的方式。除此之外,自测的详细程度也根据实际情况有所不同,例如有些人只会测试正常情况,但有些老手会测试一些边界情况、异常情况。

毫无疑问,你越能像测试人员一样测试,你的提测质量肯定就越高,bug 当然也就越少。

对项目的熟悉程度

这里说的项目熟悉程度,既指技术层面的熟悉程度,也指业务功能层面的熟悉程度。

技术层面的熟悉程度,指的是项目之间是用什么技术栈搭建的,你对这些技术是否都熟悉。举个很简单的例子,项目中采用了微服务的方式进行调用,那么你是否清楚是什么微服务调用?

如果采用了 ElasticSearch 进行搜索,那么你是否对 ElasticSearch 有一些了解,知道一些基本使用及最佳实践?等等。

这些算是技术层面的熟悉程度,你对这些越熟悉,你在技术层面发生问题的可能性就越小。

业务功能层面的熟悉程度,指的是你对项目其他模块的业务是否熟悉。例如你经常负责 A 模块的功能,你对 A 模块肯定很熟悉。

但下个迭代你就要去做 B 迭代的需求了,这时候你肯定不是很熟,相对来说出错的可能性就更大一些。

无论是技术层面,还是业务层面的熟悉程度,都会随着你做了更多的需求,变得更加熟悉。到了后面某个阶段,你基本上就不存在踩坑的问题了,也为你业务开发零 bug 奠定了基础。如果你是一个刚刚进入公司的新手,那么做到零 bug 还是很难的。

开发时间是否充足

开发时间是否充足,决定了你是否有充足的时间去熟悉需求,去和产品经理确定细节。有了充足的时间,你也才能有一定时间去进行更详细的自测。更为关键的一点,有充足的时间,你写代码才能写得更好。因此,开发时间是否充足是很重要的。

在实际的开发过程中,会因为各种各样的原因,其实并没有办法给你留出特别理想的开发时间。这时候该怎么办?有些人选择接受,去压缩自己的时间。

有些人则会选择去沟通,或者协调资源,保证自己有充足的时间。其实,正确的做法还是第二种,这样会更好一些。

这需要开发人员有更强的综合能力(沟通、协调能力),但并不是每个开发人员都具备的。关于这点,又是可以聊的一个话题 —— 当你的需求被压缩工时的时候,你应该怎么做?这里暂不展开,后续有时间可以聊聊。

简单来说,开发时间是基础,没有合理、充足的时间保障的话,要做到业务开发零 bug 是不可能的事情。

总结

要做到业务开发零 bug,其实就是要消除功能开发过程中的所有不确定性,包括:需求功能的不确定性、自己写错代码的不确定性等等。而发生这些不确定性的地方,可能就有:

  1. 产品需求文档的清晰程度
  2. 需求的复杂程度
  3. 开发人员的细心程度
  4. 开发人员是否详细自测过
  5. 开发人员对项目的熟悉程度
  6. 开发人员开发时间是否充足

除了上面说到的 6 个影响业务开发零 bug 的因素之外,肯定还有其他影响因素。

你能想到什么影响业务开发零 bug 的因素吗?

欢迎在评论区留言与大家分享。

好了,今天的分享就到此为止。如果你觉得今天的文章对你有帮助,欢迎点赞转发评论,你的转发对于我很重要,感谢大家!


作者:树哥聊编程
来源:mp.weixin.qq.com/s/XqCD9-epYHstWD3CS7hLEg
收起阅读 »

做好离职管理,享受非凡人生

近年来,职场竞争越来越激烈,每个员工都希望通过努力工作,赢得领导的认可和提拔机会。 然后,不可否认的是,有人粉墨登场,就有人卸妆离场。离职是职业生涯中一个重要的转折点,它不仅是结束一段工作关系,也是展示个人素质和职业态度的重要时刻。 人们常说“离职见人品”,这...
继续阅读 »

近年来,职场竞争越来越激烈,每个员工都希望通过努力工作,赢得领导的认可和提拔机会。


然后,不可否认的是,有人粉墨登场,就有人卸妆离场。离职是职业生涯中一个重要的转折点,它不仅是结束一段工作关系,也是展示个人素质和职业态度的重要时刻。


人们常说“离职见人品”,这句话凸显了离职时人品的重要性。而对于某些管理岗位,往往在招聘时,都是会背调的。


离职时的表现往往能够反映出一个人的职业素养和道德水准。


在离职过程中,一个有良好人品的人会以积极、负责的态度对待工作交接,尽力确保工作流程的顺畅进行,不给公司和团队带来不必要的麻烦。


他们会与上级和同事进行充分的沟通,表达对公司的感激之情,并保持良好的合作关系。


相反,一些人在离职时可能会表现出不良的行为。


他们可能会消极对待工作交接,甚至故意隐瞒重要信息或破坏工作进度,给公司和团队带来困扰。不要认为你在这家公司做的不爽,你就也想让公司不爽,这样的行为不仅缺乏职业道德,也可能对个人的声誉和未来的职业发展产生负面影响。


我身边一个真实的案例,我的前同事(主管级别)因为不服空降领导,在持续了三个月与领导发生冲突和争吵后,愤然离职甩脸色,再其离职后,仍发邮件给公司高层打报告。现在他基本在杭州很难混下去,因为背调基本上打电话过来给目前的领导,询问其人品,结果可想而知了。上个月还听到领导跟我交流,说某某公司找他背调前同事。


那么,在离职时如何展现良好的人品呢?我们如何体面的告别自己的工作呢?


01. 提前通知


在离职前,提前向上级和同事发出离职通知是一种负责任的行为。


这样做可以给予公司足够的时间来安排工作交接,确保工作流程的顺畅进行。


通过提前通知,公司可以有足够的时间找到合适的人选来接替你的职位,避免因你的离职而导致工作的中断或延误。


同时,这也为你的同事提供了准备和适应的时间,以便他们能够顺利接手你的工作职责。这样的做法不仅展现了你的职业素养,也有助于维护良好的人际关系。


2. 积极配合


在工作交接期间,积极配合同事和上级,确保工作流程的顺畅进行。比如:
1、制定详细的交接计划:与上级和同事一起制定详细的交接计划,明确交接的内容、时间和责任人。这样可以确保交接工作有条不紊地进行。
2、分享工作文档和资料:将你的工作文档、资料和相关信息整理好,并与同事和上级分享。这将帮助他们更好地了解工作的细节和进展,以便顺利接手。
3、提供培训和指导:如果同事需要,你可以提供培训和指导,帮助他们熟悉工作流程和项目。这将有助于他们更快地适应新的工作职责。
4、积极回答问题:在同事和上级有疑问或需要帮助时,积极回答问题并提供支持。保持沟通畅通,确保他们能够顺利进行工作。
5、参与重要会议和项目:如果可能的话,参与一些重要的会议和项目,以便更好地了解工作的最新情况,并在必要时提供帮助。


3. 保持联系


离职时,你要向公司领导和同事表达感激之情,感谢他们在工作中给予的支持和帮助。不要因为工作的事情,搞得自己不开心。
还有你一定要清楚,离职了不是永别了,在你工作中积累的同事和领导关系,都是你日后在这个社会中的潜在资源,离职时把关系维护好,说不定哪天,他们能在某个地方帮助到你。


离职后,与前同事和上级保持联系,建立良好的人际关系。


edc24cf0a4794418a044541d72cb2cc4_3.png


4. 不抱怨不诋毁


静坐当思己过,闲谈莫论人非。在离职过程中,不要抱怨公司或同事,也不要在背后诋毁他们。抱怨和诋毁只会让自己显得狭隘和小气,对于未来的职业发展也没有任何好处。即使在离职过程中存在一些不愉快的事情,我们也应该以成熟的方式处理,保持良好的沟通和合作。


5.结语


总之,“离职见人品”这句话提醒我们,在职业生涯中,我们的行为和态度不仅影响着当前的工作环境,也会对未来的发展产生深远的影响。在离职过程中,我们应该保持积极的态度,不要抱怨或诋毁公司或同事。学会感恩,以成熟的方式处理事情,保持良好的人际关系,这些都是我们未来职业发展的宝贵财富。因此,无论离职与否,我们都应该始终保持良好的职业素养和道德标准,以展现自己的优秀品质。


676153ad0a7146a796cc55819a5999bd_1.png


作者:陆理手记
来源:juejin.cn/post/7347910130711035913
收起阅读 »

号外:小程序获取手机号要付费了 0.03元/次 !😒

前言 今天无意中得知了 v2ex.com 打不开的原因,原来规则判断走的是国内线路,需要启用全局连接,切换后就第一次成功访问该站点,没想到就在头条发现了这么一条吐槽微信小程序的消息 获取手机号要收费了,一度以为是假消息,经过验证,发现竟然是真的。 从微信开发...
继续阅读 »

前言


今天无意中得知了 v2ex.com 打不开的原因,原来规则判断走的是国内线路,需要启用全局连接,切换后就第一次成功访问该站点,没想到就在头条发现了这么一条吐槽微信小程序的消息 获取手机号要收费了,一度以为是假消息,经过验证,发现竟然是真的。


截屏2023-06-26 21.59.04.png


从微信开发文档中确实发现了这条收费信息,貌似是今天刚更新的,然后就在刚刚,收到了官方消息通知。


截屏2023-06-26 19.53.48.png


关键信息


目前的获取手机号组件,将从 8月26号 开始,以 0.03元/条 的价格收费,每调用成功计数一次。


每个小程序总共赠送 1000 次免费额度(不是每月送一次哦),注意这 1000 次是包含开发版、体验版、正式版的。


除了现在的获取手机号组件外,腾讯又推出了一个新的组件,也是用来获取手机号的,区别在于是实时获取用户最新的,可能之前的组件过去的是有一段时间内的缓存数据?这个组件价格为 0.04元/次


以上两个组件具体收费,貌似是可以按照套餐来购买的,具体方案可以在小程序后台的付费模块查看。


充值或者购买后,可以在小程序后台付费菜单模块,查看额度,以及每日的使用情况,当费用达到临界值时候,也会通过消息提醒你充值续费的。nnd真贴心


截屏2023-06-26 19.49.30.png


截屏2023-06-26 19.51.38.png


总结下


还有两个月时间,可以开始梳理自己公司的小程序了,然后找老板讨论方案,该掏钱掏钱,该改方案就改方案吧;


其实想想,企业项目的话公司花钱,自己也不用心疼,个人项目的话,估计也没几个用户,更花不了几个钱,对程序员来说,没啥影响;


不过腾讯这波操作,感觉像缴人头税一样,难道是经济不好,开始拓展创收渠道了?会不会以后每一个微信生态 api 都要单独给钱才能用呢 😒?


据说现在全网小程序已经突破 700万个了,假设每个先充值 1000 块,那就是70亿啊!!这波操作,属实做到了我曾经想做而做不到的事,全国人民给我1块钱,我立马成亿万富翁了,只能说 666, 服了。




作者:Ethan_Zhou
来源:juejin.cn/post/7248909699961634853
收起阅读 »

4年零4天,我从毕业后的第一家公司离职了

写在前面 从上家公司离职已经有一段时间了,当我打开备忘录翻看以前每天的todolist,成长历程历历在目,也觉得有必要写一篇文章对我毕业后的第一份工作做一个阶段性的总结。 离职原因 我的第一家公司是杭州某大型车企旗下的一家网约车公司,19年11月份拿到校招o...
继续阅读 »

写在前面


从上家公司离职已经有一段时间了,当我打开备忘录翻看以前每天的todolist,成长历程历历在目,也觉得有必要写一篇文章对我毕业后的第一份工作做一个阶段性的总结。


image-20240224093538751.png


离职原因


我的第一家公司是杭州某大型车企旗下的一家网约车公司,19年11月份拿到校招offer就开始进入公司实习了,2020年6月份正式转正,在2023年11月底离职,所以满打满算应该在这家公司呆了有四年的时间。


至于为什么离职,有以下几点原因:



  1. 首先是感觉到个人成长受限。不知道大家有没有同感,在一家公司时间呆久了之后,就有一种温水煮青蛙的感觉,看到一些老青蛙,就像看到了未来的自己,会有危机感。

  2. 其次是我个人原因,想进大厂。由于自己的学历在市场上不是很有竞争力,希望通过大厂经历能够稍微弥补一下,方便为自己以后长远的职业生涯做打算。

  3. 当然公司的原因也有,首先是公司的管理层和公司文化发生了变化。简单来说,就是从之前的车企文化变成了"福报文化",就让我有一种“在哪儿卷不是卷?”的想法。


    其次,公司的战略也让我感觉到一种危机感,从各方面的信息来看,现在是一种破釜沉舟的心态,但是破釜沉舟了这么久,也没有看到成效,反而是公司的一部分员工因为所谓的战略,需要将办公地点迁到苏州。虽然还没有轮到我们部门,那么如果真的有那么一天,我还是得准备离职,还不如早做打算。



成长历程


在这家公司一共有过两次晋升,一次是在2022年,一次是在2023年,算上普调,应该是有过三次涨薪。


刚开始进入公司的时候,是以实习生的身份,那时候我刚从一家几百人的小公司实习结束,也是我第一次亲身经历了比较正规的研发流程和研发规范。刚开始的时候,每天都有很多低级问题要问,和测试、产品同学沟通起来也是十分的不流畅,加上当时刚好赶上了疫情,在家办公了一段时间,好在实习的表现还算满意,我的4个月实习让我免去了试用期,拿到毕-业-证以后直接转正了。


毕业后分配到了营销小组,这是我第一次做To C的业务,经常会出一些线上问题,收到用户的投诉,当时的老板对于线上问题的忍耐程度很低,很小的问题都会被无限放大,导致我当时在做需求,需求的上线都是处于一种极度紧张的状态,一旦出现线上问题,都会默默的打开Boss 直聘,做好找下一份工作的准备。


在之后的1 ~ 3的工作经历中,我渐渐找到了工作的节奏,以及如何应对一些人际关系,处理起线上问题也比以前镇定多了。第二年和第三三的绩效都比较好,而且后来的某一段时间内,公司优化掉了大部分的测试同学,我们研发写的代码需要研发进行自测,我们的需求研发周期变成了研发时间 + 自测时间,我觉得这给了我们研发更多的Buffer,能把一个需求做的更好,甚至我经常能留出多余的时间来做一些okr相关的项目。


在离开公司的前半年时间,我的工作又发生了很大的变化,在完成日常的工作之外,我还积极参与了公司的游泳社团、羽毛球社团、篮球社团。分别在周二、周四、周五跟着公司的小伙伴一起参加体育运动,这对我的身体状况有了很大的改善。


这三年半有什么成长?



  1. 技术上的成长:技术上的成长当然是首位的。刚来实习的时候,这会写一些简单的jsx语法,后来在能完成公司的正常业务迭代之外,还参与了公司脚手架的建设,帮助解决一些框架上带来的问题。同时还有机会接触到APM监控系统的核心流程,对APM这个功能进行迭代。另外还有一些简单的BFF开发、低代码平台的开发、埋点核心链路的监控、微信/支付宝小程序...

  2. 心态上的成长:刚毕业的时候,心态是很脆弱的,经常会因为一些小事情,心里就默念:“不干了!”。现在的心态是:“挣钱嘛,受点委屈怎么了?”

  3. 时间管理上的成长:由于要在工作之外还要保证自己的健康状态、和个人成长。所以在时间管理上,我渐渐有了一套自己的管理模式。比如每周要锻炼多少次,最近一段时间要把这个知识点复习完毕,这个年度要去几个城市旅游,今年要学会游泳,等等。


    我甚至学会了利用地铁的通勤时间做一些知识点的复习、阅读书籍、做一些今天的时间规划之类的事情,我觉得是一个很大的成长。


  4. 学习能力的成长:毕业之前,我只会通过看视频来学习,看文字,看文档,我都很难学习到知识,经常遗漏一些关键点。现在我甚至很排斥看视频这种方式,觉得很浪费时间,很啰嗦...


健康状况


除了我的胃,其他都没有什么大毛病,这里要告诫一下大家一定要注意保护自己的胃,胃病真的想象的那么简单。


由于疫情期间在家里没怎么活动,加上暴饮暴食,饱腹后继续喝茶... 以及后来复工之后在公司天天吃外卖,导致我的胃经常胀气。中午午睡的时候顶的难受睡不着觉,晚上睡觉的时候肚子也胀胀的,需要起身好几次打几个嗝才能睡得着,对我的睡眠造成了很大的困扰。


期间也去医院看过,做过胃镜,吃过中药,但是效果不是那么明显。后来很长一段时间没有吃辣的,也按时吃饭,不吃夜宵,经常跳绳锻炼一下,渐渐有所好转。


面试历程


其实跳槽这件事情是我在一两年前就计划好的。在22年底的时候,其实就出去面试过,不过当时没有准备的特别充分,加上当时太天真,还是一副刚毕业时年轻气盛的样子,导致很多面试官对我的印象都不是特别好。




一些感谢的人


首先感谢一下我上家公司的几位直系上司。我呆过两个组,两个组长都对我十分不错,一位在我实习期间给了我很多引导,帮我快速熟悉公司的业务。另外一位则是在我成为正式员工之后,帮我担下了很多的责任,并且帮助我快速的成长,成功获得了两次晋升的机会,并且都顺利通过。


另外感谢一下我的专家,真的是一位特别好的人,从来不会PUA下属,总是会以过来人的角度给你一些很好的建议。


有没有什么要吐槽的


如果非有什么需要吐槽的,还是公司的文化吧。并不是说现在的文化有什么问题,我想吐槽的是变化。因为曾经美好过,所以当注入新鲜血液之后的变化,其实让很多经历过美好的人会有一些失望😂😂😂


写在最后


感觉这四年时间过的很快,从一个职场新人变成了拥有三年多经验的打工人。昨天晚上还在家里翻出之前入职培训时的一些合影,当时我记得校招入职的时候有54人,算上被优化和自己主动离职的,目前应该还剩下不到10人。


希望老东家越来越好,早点实现盈利上市!!!


也希望自己在下一份工作中能够快速适应,能够给N年后的自己也交上一张满意的答卷。


作者:枣仁
来源:juejin.cn/post/7339042131468697640
收起阅读 »

春天的痛与爱,教会了我善良

看了看天气预报,从明天开始天气就变暖了,路两旁的花也开了,有些树也冒出了新芽,再过一段时间,就可以真正意义上感受春天的气息了。昨晚做了一个梦,梦到了好多小伙伴,大家一起去爬山,因为还有几个妹子一起,所以我就像孙悟空一样这棵树爬一下,那棵树吊一下,以至于今天早上...
继续阅读 »

看了看天气预报,从明天开始天气就变暖了,路两旁的花也开了,有些树也冒出了新芽,再过一段时间,就可以真正意义上感受春天的气息了。图片昨晚做了一个梦,梦到了好多小伙伴,大家一起去爬山,因为还有几个妹子一起,所以我就像孙悟空一样这棵树爬一下,那棵树吊一下,以至于今天早上醒来后,全身酸痛,差点班都不想去上,此刻,打着字,手依然是酸痛的。


我感到有点后悔,因为现实中,我算是已经很少去装X了,但是梦里居然还是那个德行,不过想一想,这怪我了?梦啥我能决定吗?瞬间心里好受了一点,就当锻炼了吧,平时很少锻炼,梦里能锻炼一下也不错。


大概从明天开始后就不会再有多过分冷的天气了,所以这个梦就当做真正意义上春天的开场曲了,春夏秋冬这四个季节,我最喜欢春天,因为这个季节里有美好的回忆,也有令人痛苦的回忆。


我爷爷家门口有一片竹林,春天的时候,竹林里面会长很多竹蛋,竹蛋开花后就是竹荪,是很不错的美味,竹林下面是一条小沟,整个村子农作物灌溉的水都需要从这里过,而那会我们经常要去堵水,堵水的意思就是去几公里外的源头抢一点水,然后让水流向往村子里的小沟,途中不断有支流,直到流到自己家的田里。


从源头到我家田里大概有四五公里的路程,那会我经常顺着小沟走到田里,因为是丘陵地带,所以一直在半山腰上走,而山腰下面全是农田,到处都是一片绿油油的,那时候家里养了一只小狗,因为比较贪吃,名字叫做馋瓢,我偶尔还会带着它顺着小狗走,它经常还会捉到一些小野生动物。


那会对外界没有什么概念,连乡镇都没去过,只是在我爷爷家墙上的报纸上能了解一点,所以每当看到田野,高山的时候,心中都会产生一些幻想。


三年级是在乡镇上读书,那会拳皇97和三国战记2007特别风靡,于是那会我经常在游戏厅里打上几个小时,三国经常一个币打到通关,那会父母在浙江打工,后面他们回来直到我经常去打游戏,于是经常被骂,后面就很少去了。


不过狗改不了吃屎,虚拟的我玩不了就不玩,但但是现实中我可不放过,于是和一个比我小几级的同村小伙伴,两个用木棒自己做武器,我喜欢孔明,于是做了一把剑,他喜欢赵云,于是搞了一杆长枪。


那时候正是春天,我们两个每天都去别人家地里将菜和秸秆当作小兵,疯狂冲杀,于是经常被别人骂上好几个小时,现在回想起来,看着别人心疼的捡起碎了的蔬菜,真的觉得自己做了好大的孽了。


四年级的时候,捡到了一个类似于MP3那种小玩意,可以收音,于是我在租房子过去的坟头上收音,那会信号是很弱的,需要来回走动才能收到信号,就听了一些什么国际形势的东西,但是啥也不懂,只是觉得能够收入来自于外面的声音,就觉得很幸福,因为小镇上没有网吧,每次都会在坟头来回走几百次,坟头草都给别人踩没了,不过还好,春天里的生命力是无比顽强的,没了又会快速长出来。


我只在小镇待了一年半,但是那段发生在春天里的故事至今无法忘怀,因为都有点作孽,所以教学了以后我要善良一点。


到了县城读书后,因为南方的雨水比较多,春天和夏天经常水淹县城,那会我妈在街上买水果,每当下大雨的时候,我都赶快去给她收摊,记得有一次雨特别大,我给她收完摊子,看到路上好多被雨淋着的背篼(贵州的一种职业)。


于是回到家里,我搞了两把雨伞,冒着大雨就出门了,在街上遇到一个六十多岁的背篼,我就主动给他伞,然后送他回家,送他到家后,我就原路返回回家了,一路上水淹到了膝盖,还有电闪雷鸣,特别吓人。


回到家后,我全身湿透了,被骂了一顿,我记得我妈说:关你什么事,这么危险,你要是被水淹死了怎么办。


我当时哭着说:我还不是希望有一天你们遇到这种事情的事情,有人也能帮助你们,我有错吗?


那会特别委屈,多年后我才意识到,父母不是反对你做这种事情,而是太危险了,要是真的运气不好,被水冲走了怎么办。并且在我说出那句话时,她明显带有微笑。


后面她继续卖了四五年的水果,后面又卖烧饼,不知道在我没看到的时候,有没有人帮她推过三轮车,不过这一切都不重要了。


在后来初高中岁月里,我遇上了第一个喜欢的女孩子,并且也谈恋爱了,也是在春天,凌晨六点我家在她家门口等她,然后拉着她在东山下面跑步,呐喊,不过相处的时光依然很短,后面她辍学了,打了一个电话给我爸,叫我去她家,于是分手了。


那天夜里,我在东山下面转了很多圈才回去,后面的几个月里,也比较颓废,不过在那个年纪一切都情有可原。


几年后,我顺着火车路跑步到她家,然后做了一碗面条给我吃,瞎聊了很久,过了一年她就结婚,也是在春天,我不再顺着火车路跑步去她老家,而是骑着摩托车过去了,从那会起,我才算真正的放下。


后面,就没有再联系过了,东山的春天依然没变,只是那片土地变成了一个风景区,那些小路与菜地已经楼阁挺立,迎接了来自外地的游客,越来越多的人进来跑步,我刻在那颗核桃树上的字现在应该已经结痂了。


春是那么让人着谜,不单单是因为气候,更多的是因为它能带给我许多东西,让我从中反思,收获!


作者:苏格拉的底牌
来源:juejin.cn/post/7341282461203365922
收起阅读 »

中年程序员写给37岁的自己

笔者是一名程序员老司机,局限于笔者文笔一般,想到哪写到哪,胡乱写一通,希望通过文章的方式简单的回顾过去、总结现在和展望未来,顺便记录一下,方便以后总结。 你好,37岁👇 37岁的自己你好,接下来的几个“重要”是36岁的自己在过去一年中所得到的感悟,希望能够帮助...
继续阅读 »


笔者是一名程序员老司机,局限于笔者文笔一般,想到哪写到哪,胡乱写一通,希望通过文章的方式简单的回顾过去、总结现在和展望未来,顺便记录一下,方便以后总结。


你好,37岁👇


37岁的自己你好,接下来的几个“重要”是36岁的自己在过去一年中所得到的感悟,希望能够帮助37岁的自己更好的前行。


人生就是不停的打怪升级的过程,从2009年到今天,已经是第15个年头了,如果说程序员的职业生涯有20年的话,从现在算起至少还有5个年头可以继续拼搏。


春节快乐


在这里先祝各位春节快乐!


还有2天就到春节了,和前两年一样,还是一直在公司坚守到最后一天,也是利用最后比较清闲的时间,总结一下自己过去一年,把感想写下来,希望能够帮助自己更好的看清内心。


说真的每一年总结的时候,都会有不一样的收获。


运气很重要



再回头看自己15年成长的过程,运气和努力其实是各占一半,5分是不断努力的提升自己生存的技能,5分是在每个阶段也是很幸运遇到了能够帮助自己的贵人。但是这几年也很有感触,随着年龄的不断增长,运气很有可能是往后几年职业生涯是否能顺利的决定性因素。那什么是运气?比如你是否进入了一个没有被社会抛弃的行业,你是否正处于公司的重要赛道,你是否能和你的领导惺惺相惜,你正在做的事情是否能够发挥你的自身价值等等,以上这些当然和前期的努力是有关系的,通过你的努力让你有可能接受这一份运气的可能性,但是最终做决定的并不是自己。加入正好某个政策出现拯救了行业、正好公司的战略调整让你们部门还能招人、正好你领导看你顺眼并委以重任...那么请珍惜眼前,走好眼前每一步,努力付出,不辜负这一份运气!


写这篇文章的时候,正好在这家厂干满3年,这三年真是各种心酸,经历了整个公司业务的缩编裁撤,跌宕起伏,经历了团队连换3个领导,在最艰难,最焦虑的时候,选择了放下焦虑,在团队动荡的时候,更需要努力找机会向隔级领导证明自己,努力寻找过程中的那点不起眼的运气成分,同时做好准备,最坏的情况无非就是拿大礼包。但是如果就此躺平,那运气只会飘向其他人。终于在第三个领导的时候,运气来了,惺惺相惜的感觉出现了,逐渐被委以重任,这个时候就只管抱紧大腿往前冲就行了。


谨言慎行很重要


懂得在什么场合说什么样的话,以及能够听得懂别人的话外话,分得清对什么样的人应该说什么样的话,做到不给自己惹麻烦,不给领导惹麻烦。


程序员都是比较单纯的,和机器打交道最多,有一说一,不会拐弯抹角,这也使得我们在沟通或者有利用冲突的时候,经常是处于弱势的那一方,一不小心就会被别人当枪使,但我遇到的大部分同事都很nice的,也会有一些个卧龙凤雏,目前公司里确实遇到了一两个,有时候因为想用真心换真心,换来的却是冷枪暗箭,但俗话说吃一见长一智,以后和他们说话多留个心眼,不能被同一个坑埋两次吧。


这里举个例子,有一次我们有个研发主动去找产品同学,希望他们能够在下个需求时能从用户体验优化一些体验差的产品逻辑,我们可以加人优化,这个时候如果是靠谱的产品肯定是会一起配合梳理,但是我们的这个产品的领导真是个卧龙,这件事情传到他耳朵里,就变成了我们有资源也不给他们排期某某需求,反手就向上面老板投诉我们研发工作不饱和,真是能给人气死。这里并不是说我们同学没有情商,而是因为程序员所处的环境造就了我们,直面目标和结果的推进方式,容易全盘托出。我们喜欢沉浸在技术的世界里,这里所见即所得,绝对的平等,没有小人得志,没有尔虞我诈。


所以这里需要做到对人下菜,踩过的坑要记得,该设防的时候得设防,不能啥都说,拿不定主意时,少说多做。


身体健康很重要


作为家里的顶梁柱,可不能倒下,拼归拼,但身体健康还是要放在首位。35岁以后注意养生吧,现在发量真的比之前少了很多,头皮明显暴露在阳光下了,都是上有老下有小,没天的睡眠质量真的是大不如前。这个时候保持心情愉悦很重要,如果一只处于焦虑烦躁的状态,很容易导致身心疲惫,各种毛病就会接踵而至。由于睡眠不足,导致眼睛血丝严重,眼角膜出现问题,去年有大半年的时候都是往医院跑,在医生的叮嘱下,及时调整作息时间,工作生活保持适当躺平,保持心情愉悦,总算是没有往恶化的方面发展,以后只需要注意养生即可。


还是要保证适当的锻炼,但是不能过量,比如跳绳、跑步,对于我来说过量会膝盖疼,所以也不是很适合,每天适当的散散步是个不错的选择。


家庭和睦很重要


我们每天努力工作,就是为了多挣钱,为了给家人一个幸福美满的生活。在工作中难免会遇到很多委屈,心中自然会有很多不满,这时就需要自己找到发泄不满的方式,如果说家里人可以倾听,那可以和家里倾诉,如果不希望让家里知道,那可以通过刷剧、钓鱼、打球等方式,非常管用。


在过去这两三年,我媳妇是我很大的精神支柱,在21、22年团队业务动荡的时候,作为家里的顶梁柱,那时候压力山大,但她成为了我的坚强后盾,她鼓励我坚持学习充实自己,事情并没有到最坏的时候,只要时刻做好准备,其他的看运气,大不了就是失业,或许年纪大了可能会经历很长一段时间的空窗期,但慢慢找总能再找到工作的。她真正做到了陪伴、倾听、鼓励,没有不满、没有抱怨,这就是夫妻同心,其利断金。没有了后顾之忧,少了很多自身的精神内耗,学习效率、工作效率都会有很大的提升,随着公司业务的回暖,目前至少也算是在不断的稳步前进中。


现在媳妇有了、娃有了、房子有了、车子有了,这不就是人生最好的运气么,接下来我的目标其实就是努力经营好这个家,为他们遮风挡雨,家庭健康和睦比啥都重要。


适当旅游很重要


我们每天生活在高度紧张、快节奏的环境里,很容易把自己搞得紧张兮兮的,这个时候需要定期找时间出去放松一下,带上家人来一趟说走就走的旅行。慢节奏的旅行,不仅不累,还能促进家庭和睦,千万不要吝啬,该花钱的地方就得大胆的花。


今年一直想着找时间去一趟海南,所以等老大考试完第二天,立马就出发了。不过也许是许久没坐飞机了,竟然还忘记了45分钟不让值机的事情,也没有提前值机,一直排队托运,结果过时了没有完成托运和值机搞得还改签加钱体验了一把头等舱,但说实话北京坐飞机一路躺着去海南也是挺舒服的,空姐真的是服务周到。



1月初去海南温度刚刚好,完美的体验了一把反季节的旅行。


夕阳下的美好,这感觉又回到了十几年前弹恋爱的感觉:)。




作者:冲_破
来源:juejin.cn/post/7332381790341136384
收起阅读 »

外行转码农,焦虑到躺平

介绍自己 本人女,16年本科毕业,学的机械自动化专业,和大部分人一样,选专业的时候是拍大腿决定的。 恍恍惚惚度过大学四年,考研时心比天高选了本专业top5学校,考研失败,又不愿调剂,然后就参加校招大军。可能外貌+绩点优势,很顺利拿到了很多工厂offer,然后欢...
继续阅读 »

介绍自己


本人女,16年本科毕业,学的机械自动化专业,和大部分人一样,选专业的时候是拍大腿决定的。


恍恍惚惚度过大学四年,考研时心比天高选了本专业top5学校,考研失败,又不愿调剂,然后就参加校招大军。可能外貌+绩点优势,很顺利拿到了很多工厂offer,然后欢欢喜喜拖箱带桶进厂。


每天两点一线生活,住宿吃饭娱乐全在厂区,工资很低但是也没啥消费,住宿吃饭免费、四套厂服覆盖春夏秋冬。


我的岗位是 inplan软件维护 岗位,属于生产资料处理部门,在我来之前6年该岗位一直只有我师傅一个人,岗位主要是二次开发一款外购的软件,软件提供的api是基于perl语言,现在很少有人听过这个perl吧。该岗位可能是无数人眼里的神仙岗位吧,我在这呆了快两年,硬是没写过一段代码...


inplan软件维护 岗位的诞生就是我的师傅开创的,他原本只是负责生产资料处理,当大家只顾着用软件时,他翻到了说明书上的API一栏,然后写了一段代码,将大家每日手工一顿操作的事情用一个脚本解决了,此后更是停不下来,将部门各种excel数据处理也写成了脚本,引起了部门经理的注意,然后就设定了该岗位。


然而,将我一个对部门工作都不了解的新人丢在这个岗位,可想我的迷茫。开始半年师傅给我一本厚厚的《perl入门到精通》英文书籍,让我先学会 perl 语言。(ps:当时公司网络不连外网,而我也没有上网查资料的习惯,甚至那时候对电脑操作都不熟练...泪目)


师傅还是心地很善良很单纯的人,他隔一段时间会检查我的学习进度,然而当他激情澎拜给我讲着代码时,我竟控制不住打起了瞌睡,然后他就不管我了~~此后我便成了部门透明人物,要是一直透明下去就好了。我懒散的工作态度引起了部门主管的关注,于是我成了他重点关注的对象,我的工位更是移到了他身后~~这便是我的噩梦,一不小心神游时,主管的脸不知啥时凑到了我的电脑屏幕上~~~😱


偶然发现我的师傅在学习 php+html+css+js,他打算给部门构建一个网站,传统的脚本语言还是太简陋了。我在网上翻到了 w3scool离线文档 ,这一下子打开了我的 代码人生。后面我的师傅跳槽了,我在厂里呆了两年觉得什么都没学到,也考虑跳槽了。


后面的经历也很魔幻,误打误撞成为了一名前端开发工程师。此时是2018年,算是前端的鼎盛之年吧,各种新框架 vue/react/angular 都火起来了,各种网站/手机端应用如雨后春笋。我的前端之路还算顺利吧,下面讲讲我的经验吧


如何入门


对于外行转码农还是有一定成本的,省心的方式就是报班吧,但是个人觉得不省钱呀。培训班快则3个月,多的几年,不仅要交上万的培训费用,这段时间0收入,对于家境一般的同学,个人不建议报班。


但是现在市场环境不好,企业对你的容忍度不像之前那么高。之前几年行业缺人,身边很多只懂皮毛的人都可以进入,很多人在岗位半年也只能写出简单的页面,逻辑复杂一点就搞不定~~即使被裁了,也可以快速找到下家。这样的日子应该一去不复返了,所以我们还是要具备的实力,企业不是做慈善的,我们入职后还是要对的起自己的一份工资。


讲讲具体怎么入门吧


看视频:


b站上有很多很多免费的视频,空闲之余少刷点段子,去看看这些视频。不要问我看哪个,点击量大的就进去看看,看看过来人的经验,看看对这个行业的介绍。提高你的信息量,普通人的差距最大就在信息量的多少


还是看视频:


找一个系统的课程,系统的学习 html+css+js+vue/react,我们要动手写一些demo出来


做笔记:


对于新人来说,就是看了视频感觉自己会了,但是写起来很是费力。为啥呢?因为你不知道也记不住有哪些api,所以我们在看视频学习中,有不知道的语法就记下来。

我之前的经验就是手动抄写,最初几年抄了8个笔记本,但是后面觉得不是很方便,因为笔记没有归纳,后续整理笔记困难,所以我们完全可以用电子档的形式,这方便后面的归纳修改。我更多是将它当成一个手册吧,我自己也经常遗忘一些API,所以时不时会去翻翻。


回顾:


我们的笔记做了就要经常的翻阅,温故而知新,经常翻阅我们的笔记,经常去总结,突然有一天你的思维就上升了一个高度。



  • 慢慢你发现写代码就是不停调用api的过程

  • 慢慢你会发现程序里的美感,一个设计模式、一种新思维。我身边很多人都曾经深深沉迷过写代码,那种成就感带来的心流,这是物质享受带来不了的


输出:


就是写文章啦,写文章让我们总结回顾知识点,发现知识的盲区,在这个过程中进行了深度思考。更重要的是,对于不严谨的同学来说,研究一个知识点很容易浅尝则止,写文章驱动自己去更深层系统挖掘。不管对于刚入行的还是资深人士,我觉得输出都是很重要的。


持续提升


先谈谈学历歧视吧,现在很多大厂招聘基本条件就是211、985,对此很是无奈,但是我内心还是认可这种要求的,我对身边的本科985是由衷的佩服的。我觉得他们高考能考上985,身上都是有过人之处的,学习能力差不了。


见过很多工作多年的程序员,但是他们的编码能力无法描述,不管是逻辑能力、代码习惯、责任感都是很差的,写代码完全是应付式的,他们开发的代码如同屎山。额,但是我们也不要一味贬低他人,后面我也学会了尊重每一个人,每个人擅长的东西不一样,他可能不擅长写代码,但是可能他乐观的心态是很多人不及的、可能他十分擅长交际...


但是可能的话,我们还是要不断提高代码素养



  • 广度:我们实践中,很多场景没遇到,但是我们要提前去了解,不要等需要用、出了问题才去研究。我们要具备一定的知识面覆盖,机会是给有准备的人的。

  • 深度:对于现在面试动不动问源码的情况,很多人是深恶痛绝的,曾经我也是,但是当我沉下心去研究的时候,才发现这是有道理的。阅读源码不仅挺高知识的广度,更多让我们了解代码的美感


具体咋做呢,我觉得几下几点吧。(ps:我自己也做的不好,道理都懂,很难做到优秀呀~~~)



  • 扩展广度:抽空多看看别人的文章,留意行业前沿技术。对于我们前端同学,我觉得对整个web开发的架构都要了解,后端同学的mvc/高并发/数据库调优啥的,运维同学的服务器/容器/流水线啥的都要有一定的了解,这样可以方便的与他们协作

  • 提升深度:首先半路出家的同学,前几年不要松懈,计算机相关知识《操作系统》《计算机网络》《计算机组成原理》《数据结构》《编译原理》还是要恶补一下,这是最基础的。然后我们列出自己想要深入研究的知识点,比如vue/react源码、编译器、低代码、前端调试啥啥的,然后就沉下心去研究吧。


职业规划


现在整个大环境不好了,程序员行业亦是如此,身边很多人曾经的模式就是不停的卷,卷去大厂,跳一跳年薪涨50%不是梦,然而现在不同了。寒风凌凌,大家只想保住自己的饭碗(ps:不同层次情况不同呀,很多大厂的同学身边的同事还是整天打了鸡血一般)


曾经我满心只有工作,不停的卷,背面经刷算法。22年下半年市场明显冷下来,大厂面试机会都没有了,年过30,对大厂的执念慢慢放下。


我慢慢承认并接受了自己的平庸,然后慢慢意识到,工作只是生活的一部分。不一定要担任ceo,才算走上人生巅峰。最近几年,我爱上了读书,以前只觉得学理工科还是实用的,后面慢慢发现每个行业有它的美感~


最后引用最近的读书笔记结尾吧,大家好好体会一下论语的“知天命”一词,想通了就不容易焦虑了~~~



自由就是 坦然面对生活,看清了世界的真相依然热爱生活。宠辱不惊,闲看庭前花开花落。去留无意,漫随天外云卷云舒。



image.png




作者:chengliu0508
来源:juejin.cn/post/7343138429860347945
收起阅读 »

电话背调,我给他打了8分

前段时间招聘的一位开发,待了两三周,拿到了京东的offer,离职了。在离职的后一天,接到了他新公司的背调电话,几乎每项都给他打了8分。这个分数打的有点虚,单纯只是为了不影响他下家的入职。 离职之前,收到他在飞书上查看电话号码的消息,大概也猜到是在填写背调人信息...
继续阅读 »

前段时间招聘的一位开发,待了两三周,拿到了京东的offer,离职了。在离职的后一天,接到了他新公司的背调电话,几乎每项都给他打了8分。这个分数打的有点虚,单纯只是为了不影响他下家的入职。


离职之前,收到他在飞书上查看电话号码的消息,大概也猜到是在填写背调人信息,但自始至终,他也没打一声招呼,让给个好评。


离职最后一天,办完手续,没跟任何人打一个招呼,不知什么时候就消失了。


当初他刚入职一周时,其实大家都已经看出他在沟通上有很大问题,还想着如何对他有针对性的安排工作和调整,发挥他的长处,避免他的短处。但没想到这么快就离职了。在他提离职时,虽没过多挽留,但给了一些过来人的建议,很明显也听不进去。


站在旁观者的角度来看,他的职业生涯或即将面临到的事几乎能看得清清楚楚,但他有自己的坚持,别人是没办法的。


就着这事,聊聊最近对职场上关于沟通的一些思考:


第一,忌固执己见


职场中最怕遇到的一种人就是固执己见的人。大多数聪明人,在遇到固执己见的人时,基本上都会在三言两语之后停止与其争辩。因为,人一旦在自己的思维层次形成思维闭环,是很难被说服的。


而对于固执己见的人,失去的是新的思维、新的思想、纠错学习的机会,甚至是贵人的相助。试想一下,本来别人好像给你提建议,指出一条更好的路,结果换来的是争辩,是抬杠,聪明人都会敬而远之,然后默默地在旁边看着你掉坑里。


真正牛的人,基本上都是兼听则明,在获得各类信息、建议之后,综合分析,为己所用。


第二,不必说服,尊重就好


站在另外一个方面,如果一件事与己无关,别人有不同的意见,或者这事本身就是别人负责,那么尊重就好,不必强行说服对方,不必表现自己。


曾看到两个都很有想法的人,为一件事争论好几天,谁也无法说服谁。一方想用权力压另一方,另一方也不care,把简单的事情激化,急赤白脸的。


其实争论的核心只是展现形式不同而已,最终只是在争情绪、争控制感、争存在感而已,大可不必。


对于成年人,想说服谁都非常难的。而工作中的事,本身就没有对错,只有优劣,大多数时候试一下就知道了。


有句话说的非常好,“成年人的世界只做筛选,不做教育”。如果说还能做点什么,那就是潜移默化的影响别人而已。


第三,不懂的领域多听少说


如果自己对一个领域不懂,最好少发表意见,多虚心学习、请教即可。任正非辞退写《万言书》的员工的底层逻辑就是这个,不懂,不了解情况,还草率提建议,只是哗众取宠、浪费别人时间。


如果你不懂一个领域,没有丰富的背景知识和基础理论支撑,在与别人沟通的过程中,强行提建议,不仅露怯,还会惹人烦。即便是懂,也需要先听听别人的看法和视角解读。


站在另一个角度,如果一个不懂的人来挑战你的权威,质疑你的决定,笑一笑就好,不必与其争辩。


郭德纲的一段相声说的好:如果你跟火箭专家说,发射火箭得先抱一捆柴,然后用打火机把柴点着,发射火箭。如果火箭专家看你一眼,就算他输。


第四,没事多夸夸别人


在新公司,学到的最牛的一招就是夸人。之前大略知道夸人的效果,但没有太多的去实践。而在新公司,团队中的几个大佬,身体力行的在夸人。


当你完成一件事时,夸“XXX,真牛逼!”,当你解决一个问题时,夸“还得是XXX,不亏是这块的专家”。总之,每当别人有好的表现时,总是伴随着夸赞和正面响应。于是整个团队的氛围就非常好。


这事本身也不需要花费什么成本,就是随口一句话的事,而效果却非常棒。与懂得“人捧人,互相成就彼此,和气生财”的人相处,是一种非常愉悦的体验。


前两天看到一条视频,一位六七岁的小姑娘指派正在玩游戏的父亲去做饭,父亲答应了。她妈妈问:你是怎么做到的?她说:夸他呀。


看看,这么小的小孩儿都深谙的人性,我们很多成人却不懂,或不愿。曾经以为开玩笑很好,现在发现“夸”才是利器,同时一定不要开贬低性的玩笑。


其实,职场中还有很多基本的沟通规则,比如:分清无效沟通并且及时终止谈话、适当示弱、认真倾听,积极反馈、少用反问等等。


当你留意和思考这些成型的规则时,你会发现它们都是基于社会学和心理学的外在呈现。很有意思,也很有用。


作者:程序新视界
来源:juejin.cn/post/7265978883123298363
收起阅读 »

你的年终奖怎么算个税?你的算法对吗?

又到了一年一度的报税阶段。相信现在很多人都是把年终奖分出来单独计税的,但是最近在计算年终奖交税的时候,突然觉得有些怪怪的,网上一查,不止我一个人发现有问题,这里记录一下,也听听大伙有什么看法。 前置工作,我们先来看看个税是怎么计算的。 单独计算 应纳税额 = ...
继续阅读 »

又到了一年一度的报税阶段。相信现在很多人都是把年终奖分出来单独计税的,但是最近在计算年终奖交税的时候,突然觉得有些怪怪的,网上一查,不止我一个人发现有问题,这里记录一下,也听听大伙有什么看法。


前置工作,我们先来看看个税是怎么计算的。


单独计算


应纳税额 = 年终奖金额 × 适用税率 - 速算扣除数



出处:财政部税务总局公告2023年第30号,自己百度



假设我拿了 40000 年终奖,而且设置单独计算,按照 2023 年税法规定,年终奖适用的七档分阶段税率以及速算扣除数如下(税表三):



全年一次性奖金单独计税的优惠政策曾在2021年12月延续2年,原本将于2023年年底到期。23年发布的《关于延续实施全年一次性奖金个人所得税政策的公告》将该政策再延4年



image.png



来源:http://www.gerensuodeshui.cn/index_gsslb…



适用税率使用的是年终奖总额除以12,分摊到12个月里的均值:40000 / 12 = 3333.33..., 查表后显示我在第 2 档,速算扣除数是 210,税率 10%.


按照计算公式,我的应交税额是:40000 * 10% - 210 = 3790.


合并计算


综合所得应纳税额 = {累计综合所得收入(含全年一次性奖金)-累计减除费用-累计专项扣除-累计专项附加扣除-累计依法确定的其他扣除-捐赠} × 适用税率-速算扣除数


顾名思义,就是将年终奖并入工资计算,这就适合税率表一了:


image.png


比如你每月工资 10000,允许扣除的三险一金每月为 2000 元,专项附加每月扣除 2000 元。并入以后全年收入所得:10000 * 12 + 40000 = 160000,查表可得在第三档。税率 20%:(160000 - 2000×12 - 2000×12)* 20% - 16920 = 5480.


交的税明显多多了,你会想,只有傻子才会合并计算啊!


单独 or 合并 ?


但是也有例外,比如你一个工资 5000,年终奖 500000,允许扣除的三险一金每月为 2000 元,专项附加每月扣除2000元,没有其他扣除项目。则单独计税时,年终奖缴纳:500000 * 30% - 4410 = 145590,若是合并计算(全年 56w 收入,在表一的第五档)需缴纳:560000 - 2000 × 12 - 2000 × 12)× 30% - 52920 = 100680,这时候合并计算反而划算了。


大多数情况,当你工资比较多,年终奖相对较少时选择单独计算会更好;当你的年终奖在全年收入中占大头时,合并计算更有利。


临界点问题


你以为这就完了?问题才刚开始,看一下知乎有人的帖子:为什么年终奖个税会存在BUG?


讲的是在现行的税法和相关文件中,年终奖(全年一次性奖金)的个人所得税存在人为设计的「临界点问题」。这个问题新华网也证实了:新华网关于税费计算,即:高收入者的税后收入反而会比低收入者的税后收入还要低的问题


我们以单独计算为例,假设我年终奖拿了 36000,那么交税:36000 * 3% - 0 = 1080,那么我到手 34920. 假设老板发了善心,给我长了一块的工资,现在是 36001,那么查表可得,在表三中我跨档了,要交税:36001 * 10% - 210 = 3390.1, 此时我到手:32610.9,反而到手还低了!?


网上说是计算公式”弄错“了速算扣除数。速算扣除数并非税法规定,而是根据税法推算出来的一个方便计算的系数。至于速算扣除数怎么来的,可以看这篇知乎文章,写的很详细。我这里总结一下,就是速算扣除数是反推计算的:



  • 税率3%对应速算扣除数为0

  • 税率10%对应速算扣除数为3000*(10%-3%)+0=210

  • 税率20%对应速算扣除数为12000*(20%-10%)+210=1410

  • 税率35%对应速算扣除数为25000*(25%-20%)+555=2660

  • ...


按我们这个例子:


36,000元,除以12得3000.0000,对应税率3%,速算扣除数0,


税金: 1080 元;


36,001元,除以12得3000.0833,对应税率10%,速算扣除数210,


税金: 1590.1;


据那篇文章所说,问题出现在速算扣除数上,这里的速算扣除数应该用年的,而公式只用了月的


如果你还是不清楚,我们不用速算扣除数计算,我们按照税法规定的:



  • 不超过1500元的 3

  • 超过1500元至4500元的部分 10

  • 超过4500元至9000元的部分 20

  • 超过9000元至35000元的部分 25

  • ...


按照税法规定,36,000 年终奖,月平均是 3000,按照他“修订”的公式,应该缴纳:(3000 * 3% + 0 * 10%) * 12 = 1080,36,001 年终奖,月平均 3000.0833, 按照他“修订”的公式,应该缴纳:(3000 * 3% + 0.0833 * 10%) * 12 = 1080.1,等价于现行算法 (3000.0833 * 10% - 210) * 12 相对合理?


文章指出现行算法是这样的: 36001 * 10% - 210 = 3390.1。只减了一个210,就是说每个月都多算了 7%。


总结


按照推论,现有的速算扣除数 * 12 才是真正的速算扣除数。所以计算公式应该是:


应纳税额 = (年终奖金额 / 12 × 适用税率 - 速算扣除数) * 12


按照这个公式,上面36,000 年终奖,月平均是 3000,应该缴纳 (36000 / 12 * 3% - 0) * 12 = 1080,36,000 年终奖,月平均是 3000,应该缴纳 (36001 / 12 * 10% - 210) * 12 = 1080.1



依据: 财政部税务总局公告2023年第30号





所以,写到这里,我也糊涂了,年终奖交税到底要怎么算?谁能告诉我😓


作者:小肚肚肚肚肚哦
来源:juejin.cn/post/7346720393414492199
收起阅读 »

身在职场,必须面对的两点焦虑

今天听到了堂弟考编上岸的消息,挺为他感到高兴的,因为准备了很久,也失败了多次,最终取得了胜利的果实,真的可以用苦尽甘来来形容。 对于小县城家境一般的孩子,如果不去职场历练,那么唯一的路就是就是考编,但是这条路是充满艰辛的。 去年和一30几岁的同事聊天,他说很羡...
继续阅读 »

今天听到了堂弟考编上岸的消息,挺为他感到高兴的,因为准备了很久,也失败了多次,最终取得了胜利的果实,真的可以用苦尽甘来来形容。


对于小县城家境一般的孩子,如果不去职场历练,那么唯一的路就是就是考编,但是这条路是充满艰辛的。


去年和一30几岁的同事聊天,他说很羡慕那些考上编制的,即使编制内的工作强度和职场上的工作强度不相上下,但是也是让人望尘莫及。


我思考了下,在职场中为什么感觉累?其实就是两点。



1.对未来的不确定而感动担忧。




2.对当下的不稳定性而焦虑。



对未来的不确定而感动担忧


对于大多数人而言,在职场中就是充当一颗螺丝钉,没有啥核心竞争力,工作所获得的报酬也不可观,面对职场上越来越高的要求,而自己的能力却在原地踏步,坑位越来越少,但是新人却不断在涌入。


这时候就会产生对未来的担忧,这种担忧是对未来是否能在职场里混下去,如果混不下去,那自己又能做什么?


如果现在自己尚未成家立业,那么这种担忧可能不会很强烈,但是如果已经成家,并且身上的担子也不轻,那么这种担忧就会愈加强烈。


这个担忧里面还可以剖解出两个点,职业是否有第二曲线接受现实的能力


第一,如果自己已经想好,并且规划好了路线,也有收获了,那么其实是不会有太大的担忧,充其量就是离开平台,换到一个自己有利用价值得平台,或者自己干,这就是职业得第二曲线。


比如年龄大了写不了代码了,那么是否具备做销售的能力,或者是否具有跨行业去做和现在收入不相上下的能力。


第二,是否具有接受现实的能力,比如离开当前的行业,是否愿意跨行去做其它行业并且收入会下降很多,这也和个人消费情况有关。


比如之前的一个同事,因为快40岁了,在职场上已经没有竞争力了,于是他就跨行业去做建材销售,收入肯定比之前的行业低了不少,但是我和他聊的时候,他说其实自己早就意识到这个问题,所以今天走到这一步,其实是在自己的预料里,所以是能坦然接受,不会有很大的心理负担。


那么这种情况其实也不会过于焦虑,就像我们读书的时候,有些同学每天都在玩,你问他如果考不上好的大学怎么办,他会说:我已经准备好去读专科了。那么最后去读专科已经在他的意料中,所以当下自然不会焦虑。


但是有的人又不想学,但是又想考一本,那么当下自然就会焦虑,因为自己希望变好,但是又不去行动。


对当下的不稳定性而焦虑


对于当下的不稳定在我们这个时代其实更加明显,因为到处都在裁员,找工作的人大把。


如果自己所在的公司效益不好,一段时间就会裁员一波人,而自己对于目前的市场又不太了解,那么就会焦虑。


因为今天自己没有拿大礼包,不代表明天不拿,明天不拿,不代表后天不拿,只要效益一日不变好,那么就会提心吊胆的。


所以这就是为什么那些多人击破头脑去考公务员的原因,其实就是不敢面对不稳定性,不敢面对市场的跌宕起伏,并且也意识到自己能力很平庸,没有啥竞争力。


因为就目前来说,考上编制,即使工资不如自己之前,但是他是确定性的,只要你不犯大的错误,那么呆一辈子其实是可能的。


只要你没有太大的支出,并且没有太大的消费欲望,那么其实是可以安安稳稳过日子的,这就是体制的魔力。




以上两点,基本就能概括职场中感到累的原因。


但是我们多数人是考不上编制的,你可以去报一个名试试,相信你会怀疑人生。


那么面对职场的焦虑,这是就需要去做一些实质上的行动和心态上的调整。


实质上的行动就是深耕领域,提升竞争力,或者发展第二曲线,俗话说得好,闲时养兵,战时亮剑,有些现在看似没有用的东西,实际上会在某个时间点发挥作用。


前段时间和几个朋友聊的时候,一朋友说自己还在医院上班的时候,虽然只是个小护士,但是医院里面的机器总是会坏,每次坏的时候,都要等好几天别人才来修,并且也要花费几万块钱,于是在别人修的时候自己就偷学,后面机器坏了,自己就悄悄修好,自己也不说,后面领导发现是他修的,于是对他更加器重。


那么这样的人,即使不做这一行,到了别的行业,他也能从中找到自己的竞争力,也会发光发亮,事实也是如此,他现在转行了,估计也是做得不错。


心态上的调整就是避免去想很多还没有发生的东西,即使知道这一天早晚要来,心态上也要若无其事,因为总是去想那么暂时还没有发生的事情一点卵用都没有,只会把心态搞崩。


其实如果我们仔细观察,我们会发现那些厉害的人,都比较乐观。


因为只有拥有乐观的心态,自己做事情的时候效率才会更高,才不会去想这想那,专注才是进步最好的基石,而专注的前提是乐观。



今天的分享就到这里,感谢你的观看。



作者:苏格拉的底牌
来源:juejin.cn/post/7345071716680679424
收起阅读 »

吾辈楷模!国人开源的Redis客户端被Redis官方收购了!

不久前开源圈子里的一则消息在网上引起了一阵关注和讨论。 一个由国人开发者所打造的开源项目被 Redis 公司官方给收购了,作者自己也发了动态,表示感谢项目9年以来的陪伴,同时也希望她未来一切都好。 这个开源项目的名字叫做:ioredis,相信不少小伙伴也用过...
继续阅读 »

不久前开源圈子里的一则消息在网上引起了一阵关注和讨论。


一个由国人开发者所打造的开源项目被 Redis 公司官方给收购了,作者自己也发了动态,表示感谢项目9年以来的陪伴,同时也希望她未来一切都好。



这个开源项目的名字叫做:ioredis,相信不少小伙伴也用过。



目前在GitHub上我们可以看到,ioredis项目的开源地址已经被迁移至 Redis 官方旗下了。



iosredis是国人开发者所打造的一个Redis客户端,基于TypeScript所编写,以健壮性、高性能以及功能强大为特色,并且被很多大公司所使用。



截止到目前,该项目在GitHub上已累计获得超过 13000 个 Star标星和 1000+ Fork。


作者自己曾表示,自己创建这个开源项目的初衷也很简单,那就是当年在这方面并没有找到一个令自己满意的开源库,于是决定自己动手来打造一个,于是就利用闲暇时间,自己从零开发并开源了 ioredis 。


直到2022 年 8 月 30 日,历时整整7年,ioredis 成为了 Node.js 最流行的 Redis 客户端。



而直到如今,这个项目从个人的 side project 到被开源公司官方收购,作者9 年的坚持属实令人佩服,吾辈楷模啊!


而拜访了这位开发者的GitHub后我们会发现,作者非常热衷于创造工具,除了刚被收购的名作ioredis之外,主页还有非常多的开源项目,并且关注量都不低。



而且从作者发的一些动态来看,这也是一个热爱生活的有趣灵魂。



有一说一,个人开源作者真的挺不容易的,像上面这样的个人开源项目被官方收购的毕竟是个例,其实好多个人的开源项目到后期由于各种主客观原因,渐渐都停止更新和维护了。


大家都知道,伴随着这两年互联网行业的寒意,软件产业里的不少环节也受到了波动。行业不景气,连开源项目的主动维护也变得越来越少了。


毕竟连企业也要降本增效,而开源往往并不能带来快速直接的实际效益。付出了如果没有回报,便会很难坚持下去。


而对于一名学习者而言,参与开源项目的意义是不言而喻的,之前咱们这里也曾多次提及。


参与开源项目除了可以提升自身技术能力,收获项目开发经验之外,还可以让自己保持与开源社区其他优秀开发者之间的联系与沟通,并建立自己的技术影响力,另外参与优秀开源项目的经历也会成为自己求职简历上的一大亮点。


所以如果精力允许,利用业余时间来参与或维护一些开源项目,这对技术开发者来说,也是一段难得的经历!


作者:CodeSheep
来源:juejin.cn/post/7345746216150876198
收起阅读 »

保守点,90%的程序员不适合做独立开发

近两年互联网行业不景气,很多程序员都在寻找新出路。很自然的,独立开发成为一个充满吸引力的选择 —— 背靠自己的开发技能,不用看老板脸色,靠产品养活自己,想想就很美好。 但恕我直言,保守点说,90%的程序员不适合做独立开发。 这篇文章全是大实话,虽然会打破一些人...
继续阅读 »

近两年互联网行业不景气,很多程序员都在寻找新出路。很自然的,独立开发成为一个充满吸引力的选择 —— 背靠自己的开发技能,不用看老板脸色,靠产品养活自己,想想就很美好。


但恕我直言,保守点说,90%的程序员不适合做独立开发。


这篇文章全是大实话,虽然会打破一些人的幻想,但也提供解决方案,希望对迷茫的同学有些帮助。


独立开发赚钱么?


如果你满足如下画像:



  • 程序员工作多年,编程水平不错

  • 收入完全来源于工资

  • 日常学习的目的是提升技术


那对你来说,独立开发是不赚钱的。不赚钱并不是说做这事儿一分钱赚不到,满足以上画像的大部分独立开发者在持续经营半年到一年产品后,还是能稳定获得几刀~几十刀收益的。只是相比于付出的心血来说,这点收益实在是低。


以至于出海独立开发圈儿在谈收益时的语境都不是我开发了1年,现在每月能赚50刀,而是我开发了1年,现在拥有了等效于3w刀年化2%的货基(3w * 2% / 12 = 50)


这么一换算,欣慰了许多。


为什么不赚钱?因为独立开发的重点并不在于开发,叫独立产品会更准确些。


对于一款形成稳定变现闭环的产品,有3个最重要的环节:



  • 流量获取

  • 运营转化

  • 产品交付


程序员只是产品交付环节下的一个工种,与你同处产品交付环节的工种还包括产品经理、QA、项目经理、运维......


独立开发的本质就是你一个人抗下上述所有工种。


话又说回来,如果你即会编程又会流量获取,会运营转化,这样的复合人才在公司根本不用担心被裁,也没必要做独立开发。


所以,对于满足以上画像的同学,我劝你不要把独立开发当作失业后的救命稻草。


认识真实的商业世界


虽然我不建议你all in独立开发,但我建议有空闲时间的同学都去尝试下独立开发。


尝试的目的并不是赚钱,而是更具象的感知流量获取 -> 运营转化 -> 产品交付的路径。


大部分互联网产品往简单了说,都是表格 + 表单的形式,比如推特就是2个大表单(推荐流、关注流)以及描述用户之间关系的表格。


既然如此,当我们有了独立开发的想法时,首先考虑的应该是 —— 我的产品能不能用表格 + 表单 + 高效沟通实现,比如腾讯/飞书文档 + 微信群交流


像多抓鱼(做二手书业务)早期验证需求时,就是几个用户群 + 保存二手书信息的excel表组成。


如果你发现需求靠微信群交流就能解决,付款靠微信转账就能解决,那还有必要写代码开发项目,对接微信支付API么?


当聊到微信交流时,其实就触碰到另一个工种的工作范围了 —— 私域运营。在私域运营看来,通过微信(或其他社交软件)成交是再正常不过的商业模式,但很多程序员是不知道的。


这就是为什么我不建议你把独立开发当作被裁后的救命稻草,但建议有空闲时间的同学都去尝试下独立开发 —— 涉猎其他工种的工作范围,认识真实的商业世界。


当达到这一步后,我们再考虑下一步 —— 发掘你的长处。


发掘你的长处


当我们认识到一款完整的产品有3个最重要的环节:



  • 流量获取

  • 运营转化

  • 产品交付


就应该明白 —— 如果我们想显著提高独立开发的成功率,最好的方式是找到自己最擅长的环节,再和擅长其他环节的人合作。


这里很多程序员有个误区,会认为程序员擅长的肯定就是产品交付下的开发。


实际上,就我交流过的,或者亲自带出来的跑通变现闭环的程序员中,很多人有编程之外的天赋,只是他们没有意识到罢了。


举几个非常厉害的能力(或者说天赋):



  1. 向上突破的能力


有一类同学敢于把自己放到当前可能还不胜任的位置,然后通过不断学习让自己完成挑战。举几个例子:



  • 在不懂地推的时候,参与到校园外卖团队做地推,学习市场和推广的知识

  • 在只看了一本HTML书的情况下,敢直接接下学校建设国际会议网站的任务

  • 在不懂做运营的时候,有老板找他当公司运营负责人,他也接下来,并也做得很好


这类同学很容易跑出有自己特色的非标服务,再包装成产品售卖。



  1. 源源不断的心力支持


有位同学看短视频趋势不错,正好大学也玩过一段时间单反,就买了一套专业的影视设备,准备一边学做饭一边拍短视频,想做一名美食博主。


每天下班拍视频、剪辑加后期的,每个视频都需要花 10+ 个小时。熬了半年多,数据一直不行,就放弃了。


虽然他失败了,但很少有人能在没有正反馈的事上坚持半年,这种源源不断的心力支持其实是一种天赋。


靠这个天赋,只要踩到合适的赛道,成功是迟早的事儿。



  1. 链接人的能力


有些同学特别喜欢在群里唠嗑,与大佬聊天也不犯怵。这就是链接人的天赋


在如今的时代,有价值的信息通常是在小圈子中传播,再慢慢破圈到大众视野中。这类同学靠链接人的天赋,可以:



  1. 从小圈子获得有价值的信息,做信息差生意

  2. 做中间人整合资源


假设你探寻一圈后发现 —— 自己最拿得出手的就是编程能力,那你的当务之急不是发掘需求


以咱们普通程序员的产品sense,也就能想出笔记应用Todo List应用这类点子了......


你需要做的,是多认识其他圈子的人,向他们展示你的编程能力,寻找潜在的需求方


以我在运营的Symbol社区举例,这是个帮程序员发展第二曲线的社群。


之前社群有个痛点:每天社群会产生大量有价值的碎片知识,但这些知识分散在大量聊天消息中,爬楼看消息很辛苦。


基于这个痛点出发,我作为产品经理和群里两位小伙伴合作开发了识别、总结、打标签、分发有价值聊天记录的社群机器人



作为回报,这两位小伙伴将获得付费社群的收入分成。


总结


对于满足如下画像的程序员:



  • 程序员工作多年,编程水平不错

  • 收入完全来源于工资

  • 日常学习的目的是提升技术


不要把独立开发当作被裁后的救命稻草,而应该将其作为认识真实商业世界分工的途径,以及发掘自身优势的手段。


拍脑袋想没有用,只有真正在事儿上修,才能知道自己喜欢什么、擅长什么。


当认清自身优势后,与有其他优势的个体合作,一起构建有稳定收益闭环的产品。




作者:魔术师卡颂
来源:juejin.cn/post/7345756317557047306
收起阅读 »

从MariaDB衰败思考国产数据库品牌力建设

前文 10年前我非常好奇这个长得和MySQL一模一样的东西的发展,直到今天有了答案,MariaDB股价大跌,陷入财务危机,没有营收,砍产品,裁员,更换管理层,借债等等。 MariaDB曾经有一个InnoDB加强版的说法,但是从开发者的视角,没有必要关心里面是什...
继续阅读 »

前文


10年前我非常好奇这个长得和MySQL一模一样的东西的发展,直到今天有了答案,MariaDB股价大跌,陷入财务危机,没有营收,砍产品,裁员,更换管理层,借债等等。


MariaDB曾经有一个InnoDB加强版的说法,但是从开发者的视角,没有必要关心里面是什么。 即使page head加强、page tail优化,page directory综合做了完善的更改开发者只关心它在应用业务性能上有没有体现,使用是不是与MySQL一模一样。


从WEB应用体验,MariaDB与MySQL做比较,MariaDB的使用与MySQL的外模式和内模式一样。外模式指MySQL常用的SQL语句【等值查询、范围查询、聚合查询、窗口查询、两表关联、多表关联】,内模式指MySQL内部的元数据信息【数据字典、动态视图、静态视图】。


几乎可以把MariaDB当成套壳的MySQL,以此为镜, 300多个国产数据库可以感受到自由市场的竞争残酷。截至2月份, dbegines排行13名的MariaDB处于分崩瓦解的边缘。它给国产数据库的启迪是什么?我们怎么去发展建设国产数据库品牌。


image.png


千年前,明太祖朱元璋征求学士朱升对他平定天下战略方针的意见,朱升说:高筑墙,广积粮,缓称王。国产数据库可以遵从此道 ,高筑墙建立自己的品牌壁垒,广积粮营造自己的商业生态 。


从数据库的本质为应用服务、目标人群是商业实体,使用者多是开发者、DBA,我想到的三点有助于数据库品牌的建设。


协助建设应用


从目标利用的角度,天下应用分为以下三种系统建设,数据库作为系统中的核心服务,始终是为应用服务,应用是最终的变现。


信息系统建设方案: 传统的应用建设,主要是将现象生活反映到电子流,往往是单条业务流程整合,包括企业流程制度、企业控制管理、员工权限授权访问,常说的烟囱系统建设以及企业信息系统以及ERP、CRM、OA、交易系统、分析系统都属于这个范畴。此处数据架构较简单。


大数据系统建设方案: 此不仅仅包括我们常说的大数据建设,该应用建设表现往往高并发、高吞吐、低延迟、快响应,有时候需要整合较多的数据源,将集成较多的数据集,主要与业务系统联通或者其它设备的数据汲取过来,通过清洗、整合、编排后,输出一个错落有致、规范得体的数据指标,再反哺业务系统。用户跟踪、业务监控管理、实时需求预测都属于大数据系统的建设方案范围,主要它是能整合不同的数据,此处数据架构较复杂。


智能系统建设方案: 该系统建设属于高端信息应用范畴,需要智能算法以及更有效率的计算框架,包括音、视频、 边缘计算 、AI、 大模型AIGC等等,同时也包括基本的信息系统建设方案大数据系统建设方案,智能系统建设是应用优化的永无止境的追求。主要表现是提供更加友好验证手段,以及更加便利的识别方法提供相应的服务,一般智能系统会搭承其它技术手段完成客户端需求的闭环。


目前信创改造以及国家信息发展项目,大部分以信息系统建设方案大数据系统建设方案居多,所有的国内厂商创收盈利来自此处。因为有逐利的目的性,厂商有目标奔向这些项目。


但是对一些开源信息系统的适配,没有厂商愿意接入,因为没有任何利润可言。例如wordpress目前只支持MySQL,从技术上的改造,这个是简单的,但是没有人愿意做这样的事。大部分国内数据库厂商已经完成国内头部ERP厂商的适配兼容,数据库兼容wordpress是轻而易举的事情。


数据库厂商可以试着从基于利润创收的目的性适配应用,切换到主动适配发展应用创新的模式


信息系统建设方案来看,目前国内大多的开源系统底层使用MySQL,这个在侧面反映在中国MySQL为什么比postgreSQL火的原因,postgreSQL在世界很流行,但是在中国普及不如MySQL。


大数据系统建设方案较复杂,单一的数据库无法解决所有的问题,但是可以作为方案其中的一个实力支撑点,目前许多厂商都与上下游产品已经完成适配兼容, 但是没有脍炙人口的成熟的技术栈自成一套的解决方案。


例如某管理系统平台的技术栈如下, Hadoop +Hive +Kafka +Zookeeper + HBase +Sqoop +Flume + 国产厂商产品,国产厂商产品的位置也许随便用国际主流数据库产品就可以替代。为什么还用不熟悉的国产厂商产品?


这里需要宣传,需要推广,需要实践使用,需要生根发芽,了解国际的现状,认清与国际的差距,他们能做的,我们也能做。


这是文化使用习惯的问题,同样是碳酸水,可口可乐和百事可乐已经是有口皆碑,国内的炭酸水的味道和质量不比可乐差,为什么销量比不过这两家。其中一个原因,可乐不仅在饮料行业生根发展,而且在食谱行业也有建树。例 如可乐鸡翅,可乐不仅可以用于消暑解渴,而且可以用于烹饪食物。


严格科学上来说,可乐是越喝越渴的,根本不能够解渴,但是可乐的口感还不错,价格还可以,人们就建立喝可乐可以解渴的信仰。这信仰一时三刻撼动不了。国产可乐要摇动 可口可乐和百事可乐的位置,长期宣传推广是必不可少,多搞点可乐鸡翅、可乐鸭掌是根本,可乐应用于烹饪,可乐应用于清洁用途,可乐应用于除味。


智能系统建设方案这里比较特别,传统数据库与智能应用的依赖相对弱,一些数据库厂为了加强核心能力,已经推出向量型数据库。标准的现代化的数据库的基本能力,无论是结构化数据、半结构化数据、全结构化数据都可以在库中进行处理。


事实上智能系统建设方案更偏重应用端的处理能力,识别特征、应用模型、计算方式非常重要,这些都不是数据库能够兜底的,真正的智能系统建设方案可以不靠虑数据库产品选型,但是数据持久化落地,必定要选择其一款数据库。


智能系统建设方案应用场景比 信息系统建设方案大数据系统建设方案更加变幻莫测。


信息系统建设方案建设重点,数据库作为数字基座提供能力如下,包括系统稳定、高并发访问性能、交易查询请求功能、各种业务函数、友好的使用方式 , 满足项目级、部门级应用发展的需求。


大数据系统建设方案方面,数据库原有的基础能力新增,包括分布式处理能力、多模型构建能力、事务交易同体能力、内外数据集成能力 、动态伸缩能力 ,满足跨部门的集团级应用发展的需求。


信息系统建设方案大数据系统建设方案的对比区别,一个是简单,一个复杂,而智能系统建设方案则是强调应用端的建设,服务端获取特征参数,在后端联调大量的模型,连接不同的数据库、知识库、文件系统做特征识别匹配,返回给客户。


那么智能系统建设方案 普及的应该如何建设?数据库厂商大力投入,带头组织活动,鼓励应用创新,推动金融智能应用、电信智能应用、制造业智能应用的发展,有助于提高厂商的品牌力,暴光厂商在智能系统建设方案 方面的实践经验,增强厂商的威望值。


笔者看来,信创及国产化大多属于信息系统建设方案和大数据系统建设方案智能系统建设方案则是未来社会发展的应用硬性需求,厂商可以大力投入。


建设产品的长宽高壁垒


产品品牌力犹如一个盒子,由长宽高组成, 长度不够、宽度不及、高度不深都会造成品牌力的短板,无法把客户的信心牢牢装在里面。


下面列出产品长度、产品宽度、产品深度相关的指标来量化一个国产数据库的综合实力,努力往这三方面发展应该是没有错的。知己知彼,百战百胜,产品长宽高是知己,知道自己已经做的事和即将要做的事。


产品长度重点考察应用案例



  • 确定行业头部企业覆盖范围【金融行业、通信行业、制造业】

  • 确定行业相关企业覆盖面积【企业个数】

  • 确定行业主流应用场景【生产、经营、交易、办公】

  • 确定应用场景影响范围【核心业务、辅助业务 、边缘业务】

  • 确定产品基于生产环境运行的稳定性【精确到年】

  • 确定产品具备满足未来业务几年的性能【数据量增长】

  • 确定产品利于业务展开运行的功能【产品功能与业务需求匹配度】


产品宽度重点考察生态适配



  • 软件上游 CPU、芯片、操作系统、文件系统

  • 软件下游 BI软件、数据集成软件、ORM框架、数据可视化

  • 与Oracle、Postgresql、MySQL的适配兼容

  • 基于产品基础上的二次github技术开源

  • 同类软件的适配兼容调度集成

  • 行业标准接口JDBC\ODBC的适配兼容

  • 建立合作伙伴战略关系

  • 打造用户的社区【成熟度评估】

  • 高校教育培养使用人群


产品深度重点考察产品是否与时俱进



  • 行业主流技术【向量化计算、向量化数据类型、边缘计算】

  • 社会趋势【区块链】

  • serverless平台

  • 云计算系列

  • 内置支持人工智能、机器学习、数据分析、业务函数

  • 高校实验室底层研究


构建购买者和使用者的体验闭环


知己知彼,百战百胜,构建体验是知彼,知道对方对产品的感受以及使用者的反馈。


数据库作为一个商品,处处展现着生产者、购买者、使用者的关系。 生产者【厂商 】根据市场上的需求,丈量自家的研发实力开发了这么一个商品,当务之急就是要找到客户【购买者】,客户选择商品的背后有1000个原因。成交之后,使用者进场。购买者与使用者之间是甲方与乙方的关系,乙方根据产品的使用说明,使用相关解决解业务中的一系列问题。


厂商做的事情,包括引起购买者的兴趣,千方百计使用各种营销方式或者推广手段使购买者甘心付费成单,并且使用使用者的产品使用,包括质量反馈和功能缺点


购买者体验


商品列入购买者的采购清单范围 ,可能原因是是产品的【协助建设应用】和【长宽高壁垒】做了大量铺垫,举例某产品应用于人工手势智能系统中,XX商品充当核心服务存储,XX商品应用于同行业的用户画像分析业务场景,或者XX商品联同BI软件已经在驾驶舱系统运行中。


在商品已经得到购买者的侧目,下一步是实践得到客户的肯定。下面的POC以及持久的技术支持将证明产品具备满足客户业务需求的功能和性能。


厂商对客户的进一步输出,可以量化为以下三个指标。依次为服务响应时间、竞品对应亮点、应用迁移经验


服务响应时间,包括解决具体问题花的时间,到达现场花的时间,响应客户问题花的时间,原则上客户提出的问题 和疑问都要第一时间解答, 为此企业会有相应的知识库储备 ,针对问题可以马上解答。


竞品对应亮点, 建立同类相关产品对标,并突出本产品优势、亮点,数据库产品大同小异,全部产品都有数据存储、管理、使用的功能,但是单机产品与分布式无法100%进行匹配度。可以参考**【协助建设应用】和【长宽高壁垒】。**


应用迁移经验,客户关心第数据底座搬迁后的稳定性,基于数据库的应用迁移工作包括 具体数据迁移、数据结构迁移、SQL相关迁移,保障迁移后是无缝迁移状态。


具体数据迁移主要包括数据一致性、数据数量是否同、数据内容是否同等、数据是否转换等等。


数据结构迁移主要包括表结构、数据类型、数据长度、存储过程、函数、同义词等等,基于新底座转换后运行逻辑流程是否与原来相同 。


SQL相关迁移主要指SQL语句以及SQL相关的SHELLl调用、ETL语句,ORM框架内置SQL,基于新底座转换后运行逻辑流程是否与原来相同。


使用者反馈


在客户正式成为购买者后,使用者成为高级产品反馈者,厂商收集使用者和项目的相关信息,同时也是在进行**【协助建设应用】【产品长宽高壁垒】**。


厂商对客户的进一步输出,可以量化为以下三个指标,包括项目业务背景,技术套件、文件使用、产品使用状况


业务背景,包括项目驱动因素,领导愿景、发展目标、立项初衷等等,根据这些已知信息,掌握项目的痛点和痒点,评估项目预期可以做到的效果。


技术套件,记录包括项目中原来的和准备用上的技术套件,包括前端、UI、ORM框架构、中间件、数据库等相关解决方案一切用上的技术工具。


文档使用,建立用户对文档使用过程中的体验,根据厂商的提供的资料,是否足够工程师独力完成任务,不需要与厂商 互动。


产品使用状况,构建用户与研发互动和反馈的平台系统和制度流程, 包括API使用、DEMO操作、无法解决的问题。


总结


总的来说,品牌力不可能一蹴而就。围绕三点协助建设应用、建设长宽高壁垒、构建购买者和使用者的体验闭环进行数据库品牌力建设,笔者也是泛泛而谈展开铺叙,细节方面可以有更多补充。


最后概括以协助建设应用、建设长宽高壁垒为基本点,以此为线,赋能项目成单,增进客户的信心,交付项目使用。同时从购买者体验、使用者反馈搜集信息和数据,促进产品良性发展以及项目拿下订单,周而复始,不断循环。


作者:大数据模型
来源:juejin.cn/post/7343557616332767266
收起阅读 »

AI编程已有公司纳入绩效,你的AI编程工具是什么?

自从ChatGPT带动全球AI热潮,AI席卷着各行各业。编程界也不例外,最出名的摸过OpenAI与GitHub联合开发的Github Copilot。Github Copilot带动了一大堆AI编程工具的出现。后来Github Copilot付费了,再加上网络...
继续阅读 »

自从ChatGPT带动全球AI热潮,AI席卷着各行各业。编程界也不例外,最出名的摸过OpenAI与GitHub联合开发的Github Copilot。Github Copilot带动了一大堆AI编程工具的出现。后来Github Copilot付费了,再加上网络方面的问题,在国内使用Github Copilot还是有一定门槛的。那么在国内有没有适合国内程序员使用的类Github Copilot产品呢?下面分享一下个人安装使用的一些AI编程插件:



p.s.以上的下载量与评分均只是plugins.jetbrains的marketplace数据,仅供参考。


基本AI编程工具的功能都差不多:



  • 代码补全:根据当前代码上下文自动补全代码。

  • 根据注释生成代码:根据注释描述生成相应的代码。

  • 方法和函数生成:根据方法名或函数名自动生成该方法或函数的代码。

  • 生成测试代码:生成测试代码。

  • ....


具体选择可以自己体验一下,国内用户可能试用下codegeex、aixcoder。


1、Github Copilot



GitHub Copilot是一款由GitHub和OpenAI共同开发的基于云的人工智能工具,它可以帮助开发者自动生成代码、分析代码、调试代码以及进行安全检测等。Copilot是基于OpenAI的GPT-4模型开发的,可以通过文本问答的方式与开发者进行交互。



  • 效果



生成代码文档



当然大家可能比较关心的是如果不花钱,免费使用Github Copilot。除了官方试用,另外在国内自然是有大神


去破解它。如果你破解过idea的话,再关注下那个大神的博客基本就可能以找到这个了。



国内到国外访问Copilot Chat,会时不时的会抽风。




  • 评分(3.0)




  • 下载量(7,476,947)



2、Codeium



Codeium是一款免费的智能编程助手,由美国一家公司开发。它提供了超过40种编程语言的代码完成工具。这个工具支持几乎所有主流的编程语言和IDE,特别适合个人用户使用。Codeium的主要功能包括自动完成代码,从样板文件到单元测试节省时间,以及使用自然语言问题搜索存储库。此外,它还提供了一个Playground体验,可以直接在浏览器上试用Codeium的功能。



  • 界面截图


安装后需要登录,不过国内打不了。我登录后使用的效果很一般,估计网络太差。。。




  • 评分(4.7)




  • 下载量(328,213)




  • 小结





    • 国内不怎么好用,登录不了




3、CodeGeeX(开源)



CodeGeeX是一个强大的基于LLM的智能编程助手。提供代码生成/补全、注释生成、代码翻译、AI聊天等功能,帮助开发人员大幅提升工作效率。CodeGeeX是由清华大学知识工程实验室研发。它支持20多种编程语言,并适配多种主流IDE。




  • 效果




  • 评分(3.6)




  • 下载量(258,540)



4、Amazon CodeWhisperer


亚马逊CodeWhisperer是AWS提供的一种AI驱动的工具,它帮助开发者更高效地编写代码。它提供实时代码建议,支持自然语言到bash的翻译,并能进行安全扫描。此外,它还包含了Amazon Q,这是一个交互式AI助手,能在IDE中提供专家指导和代码解释。CodeWhisperer设计用于多种编程语言和集成开发环境(IDE),并且可以定制以更好地理解您的内部库和API。


由于idea版本的问题没有安装上



不过下载量还是比较高,但评分就相当的低



  • 下载量(6,213,740)




  • 评分



5、Tabnine


Tabnine是一款AI编程助手,它通过实时代码补全、聊天和代码生成功能,帮助开发者提高编码效率。


Tabnine是由以色列的开发者创建的,它是一款基于人工智能的编程助手,旨在提高代码编写的效率和质量。


自2018年推出以来,Tabnine已经成为软件开发领域生成式AI技术的先驱,并且在全球范围内拥有超过一百万的月活跃用户。Tabnine支持所有流行的编程语言和IDE,能够根据您的代码和模式提供个性化的建议。它还提供私有部署选项,确保代码的安全性和合规性。



  • 效果



免费版只提供自动补全代码,别的功能需要付费



Tabnine Pro提供全线和全功能代码完成,这是免费版本中不包括的



  • 评分(3.9)




  • 下载量(3,528,356)



6、aiXcoder


aiXcoder是一款基于人工智能的软件开发助手,它通过深度学习技术提供代码自动生成、代码自动补全、代码智能搜索等功能,旨在提升开发者的开发效率和代码质量。



  • 效果




  • 评分(4.1)




  • 下载量(455,879)



7、ChatGTP-EasyCode


EasyCode是一个基于IntelliJ IDEA开发的代码生成插件,它通过自定义模板来快速生成Java、HTML、JS、XML等代码。这个工具特别适合Java程序员进行CRUD操作,因为它可以自动搭建MVC三层架构,从而减少重复性工作,提高开发效率。EasyCode支持与数据库相关的代码生成,并允许用户根据个人需求定制模板。



  • 效果


没有自己补全,但可以使用右键把机器人对话窗口调出来




  • 评分(4.0)




  • 下载量(727,619)



8、TONGYI Lingma(通义灵码)



通义灵码是阿里云推出的一款智能编码助手,它基于通义大模型,提供了一系列编程辅助功能,包括代码智能生成、研发智能问答、代码注释生成等。它能够根据当前代码文件及跨文件的上下文,为开发者生成行级或函数级的代码、单元测试和代码注释,从而提高编码效率和质量。通义灵码还支持自然语言生成代码,即开发者可以用自然语言描述想要的功能,通义灵码会根据描述生成相应的代码和注释。



  • 效果



右键效果




  • 评分(3.3)




  • 下载量(961,347)



作者:栈江湖
来源:juejin.cn/post/7344625552667476002
收起阅读 »

程序员的这10个坏习惯,你中了几个?超过一半要小心了

前言 一些持续关注过我的朋友大部分都来源于我的一些资源分享和一篇万字泣血斩副业的劝诫文,但今年年后开始我有将近4个月没有再更新过。 有加过我好友的朋友私聊我问过,有些回复了有些没回复。 想通过这篇文章顺便说明一下个人的情况,主要是给大家的一些中肯的建...
继续阅读 »

前言



一些持续关注过我的朋友大部分都来源于我的一些资源分享和一篇万字泣血斩副业的劝诫文,但今年年后开始我有将近4个月没有再更新过。




有加过我好友的朋友私聊我问过,有些回复了有些没回复。




想通过这篇文章顺便说明一下个人的情况,主要是给大家的一些中肯的建议。



我的身体



今年年前公司福利发放的每人一次免费体检,我查出了高密度脂蛋白偏低,因为其他项大体正常,当时也没有太在意。




但过完年后的第一个月,我有一次下午上班忽然眩晕,然后犯恶心,浑身发软冒冷汗,持续了好一阵才消停。




当时我第一感觉就是颈椎出问题了?毕竟这是程序员常见的职业病。




然后在妻子陪伴下去医院的神经内科检查了,结果一切正常。




然后又去拍了片子看颈椎什么问题,显示第三节和第四节有轻微的增生,医生说其实没什么,不少从事电脑工作的人都有,不算是颈椎有大问题。




我人傻了,那我这症状是什么意思。




医生又建议我去查下血,查完后诊断出是血脂偏高,医生说要赶紧开始调理身体了,否则会引发更多如冠心病、动脉粥样硬化、心脑血管疾病等等。




我听的心惊胆战,没想到我才34岁就会得上老年病。




接下来我开始调理自己的作息和生活,放弃一些不该强求的,也包括工作之余更新博客,分享代码样例等等。




4个月的时间,我在没有刻意减肥的情况下体重从原先152减到了140,整个人也清爽了许多,精力恢复了不少。




所以最近又开始主动更新了,本来是总结了程序员的10个工作中的不良习惯。




但想到自己的情况,决定缩减成5个,另外5个改为程序员生活中的不良习惯,希望能对大家有警示的作用。



不良习惯


1、工作


1)、拖延症


不到最后一天交差,我没有压力,绝不提前完成任务,从上学时完成作业就是这样,现在上班了,还是这样,我就是我,改不了了。



2)、忽视代码可读性


别跟我谈代码注释,多写一个字我认你做die,别跟我谈命名规范,就用汉语拼音,怎样?其他人读不懂,关我什么事?



3)、忽视测试


我写一个单元测试就给我以后涨100退休金,那我就写,否则免谈。接口有问题你前端跟我说就行了发什么脾气,前后端联调不就这样吗?!



4)、孤立自己


团队合作不存在的,我就是不合群的那个,那年我双手插兜,全公司没有一个对手。



5)、盲目追求技术新潮


晚上下班了,吃完饭打开了某某网,看着课程列表中十几个没学完的课程陷入了沉默,但是首页又出现了一门新课,看起来好流行好厉害耶,嗯,先买下来,徐徐图之。



2、生活


1)、缺乏锻炼和运动


工作了一天,还加班,好累,但还是得锻炼,先吃完饭吧,嗯,看看综艺节目吧,嗯,再看看动漫吧,嗯,还得学习一下新技术吧,嗯,是手是得洗澡了,嗯,还要洗衣服,咦,好像忘记了什么重要的事情?算了,躺床上看看《我家娘子不对劲》慢慢入睡。



2)、加班依赖症


看看头条,翻翻掘金,瞅瞅星球,点点订阅号,好了,开始工作吧,好累,喝口水,上个厕所,去外面走走,回来了继续,好像十一点半了,快中午了,待会儿吃什么呢?


午睡醒了,继续干吧,看看头条,翻翻掘金,瞅瞅星球,点点订阅号,好了,开始工作吧,好累,喝口水,上个厕所,去外面走走,回来了继续,好像5点半了,快下班了,任务没完成。


算了,加加班,争取8点之前搞定。


呼~搞定了,走人,咦,10点了。



3)、忽视饮食健康


早上外卖,中午外卖,晚上外卖,哇好丰富耶,美团在手,简直就是舌尖上的中国,晚上再来个韩式炸鸡?嗯,来个韩式甜辣酱+奶香芝士酱,今晚战个痛快!



4)、缺乏社交活动


好烦啊,又要参加公司聚会,聚什么餐,还不是高级外卖,说不定帮厨今天被大厨叼了心情不好吐了不少唾沫在里面,还用上完厕所摸了那里没洗的手索性搅了一遍,最后在角落里默默看着你们吃。


吃完饭还要去KTV?继续喝,喝不死你们,另外你们唱得很好听吗?还不是看谁嗷的厉害!


谁都别跟我说话,尤其是领导,离我越远越好,唉,好想回去,这个点B站该更新了吧,真想早点看up主们嘲讽EDG。



5)、没有女朋友


张三:我不是不想谈恋爱,是没人看得上我啊,我也不好意思硬追,我也要点脸啊,现在的女孩都肿么了?一点暗示都不给了?成天猜猜猜,我猜你MLGB的。


李四:家里又打电话了,问在外面有女朋友了没,我好烦啊,我怎么有啊,我SpringCloudAlibaba都没学会,我怎么有?现在刚毕业的都会k8s了,我不学习了?不学习怎么跳槽,不跳槽工资怎么翻倍,不翻倍怎么买房,不买房怎么找媳妇?


王五:亲朋好友介绍好多个了,都能凑两桌麻将了,我还是没谈好,眼看着要30了,我能咋整啊,我瞅她啊。破罐破摔吧,大不了一个人过呗,多攒点钱以后养老,年轻玩个痛快,老了早点死也不亏,又不用买房买车结婚受气还得养娃,多好啊,以后两脚一蹬我还管谁是谁?



总结



5个工作坏习惯,5个生活坏习惯,送给我亲爱的程序员们,如果你占了一半,真得注意点了,别给自己找借口,你不会对不起别人,只是对不起自己。





喜欢的小伙伴们,麻烦点个赞,点个关注,也可以收藏下,以后没事儿翻出来看看哈。


作者:程序员济癫
来源:juejin.cn/post/7269375465319415867
收起阅读 »

当了程序员之后?(真心话)

有什么事是你当了程序员之后才知道的? 地铁上刷到一个话题,觉得挺有意思的,如下。 看到很多朋友在下面吐槽,有说加班是真的多,有说找对象是真的难,有说程序员爱穿格子衫是假爱背电脑是真的等等,大家吐槽得都挺欢乐的。 老猫也开始复盘这些年的经历,更多想聊的可能还...
继续阅读 »

有什么事是你当了程序员之后才知道的?

地铁上刷到一个话题,觉得挺有意思的,如下。


1709213979295.png


看到很多朋友在下面吐槽,有说加班是真的多,有说找对象是真的难,有说程序员爱穿格子衫是假爱背电脑是真的等等,大家吐槽得都挺欢乐的。


1709824704115.png


老猫也开始复盘这些年的经历,更多想聊的可能还是一个后端程序员的真实感悟。


入行


俗话说“男怕入错行,女怕嫁错郎。”相信很多朋友在进入一个行业之前都是深思熟虑的,亦或者是咨询过一些人,亦或者是查阅了挺多资料。然而老猫入行则相当奇葩,不是蓄谋已久,而是心血来潮。


一切都得从一部电视剧开始,不晓得大家有没有看过这部电视剧,佟丽娅主演的“我的经济适用男”。


1709215705556.png


12年的一部电视剧,挺老了,主要女主放弃富二代的追求和"成熟稳重老实巴交的IT男"好上了的桥段。当时心智单纯的老猫可谓看的是热血沸腾啊。一拍桌子,“发可油,劳资今后就要当那个男主,这结局多好啊,抱得美人归啊这是,我要学IT!”。当时老猫的专业是电子信息类的专业,后来基本就放弃了本专业,大学基本逃课就跑去学软件去了。


就这么上了贼船,一晃十年过去了。多年前,躲在实验室里,开发了一个简单的坦克大战的游戏,感觉自己是最牛逼的,子弹爱怎么飞怎么飞,坦克能开多块就开多快,那时候觉得自己就是这个IT世界的主角,“control evety thing”。在这样一个程序的世界里,所有的事儿都是自己说了算。


踏上社会后,遭遇社会惨无人道地毒打之后,发现要做的就是提升造火箭吹牛逼的能力,工作中是个crud-boy。键盘上磨损最严重的那几个键是“ctrl”,“c”,“v”,“x”。当年那个意气风发的少年已经不复存在,我是一个弱鸡螺丝钉。


1709217726156.png


工作十年


大部分后端程序员也主要是围绕着业务在转,所以crud可能占了大部分时间。


话虽如此,但还是有点除此以外的收获,这些收获甚至潜移默化地影响着我的生活。


技术日新月异,今天这个框架,明天那个架构,今天这种实现牛逼,明天那种部署更6等等,到头来发现自己一直都是在追着技术跑。也确实如果不奔跑的话,可能就会被淘汰。作为程序员来说适应变化也是程序员的一种品质,但是老猫觉得具备下面这些可能会更加重要一些,这些可能也是唯一不变的。


抽象思维很重要


第一次听到“架构师”这个职位的时候,觉得那一定是一个需要超强技术能力的人才能胜任的岗位。


后来才发现原来架构师也分种类,“业务架构”,“技术架构”等等。再后来发现无论哪种架构,其实他们身上会有一种共同的东西,那就是优秀的抽象思维。


啥是抽象思维?百度百科上是这么说的:


抽象思维,又称词的思维或者逻辑思维,是指用词进行判断、推理并得出结论的过程。
抽象思维以词为中介来反映现实。这是思维的最本质特征,也是人的思维和动物心理的根本区别。

说的比较官方,甚至有点不好懂。


大家以前上语文课的时候,有没有做过阅读理解,老师在讲课的时候常常我们概述一下这段文字到底讲了什么东西,越精简越好,可能要求20个字以内。其实这个过程就是在锻炼咱们的抽象思维能力以及概括能力。


在软件后端领域,当业务传达某一个需求的时候,往往需要产品去提炼一道,那么此时就是产品抽象,继而产品又将需求传达给相关的研发负责人,研发负责人设计出相关的实现模型,那么这又是技术抽象,这些抽象的过程就是将复杂的业务流程和逻辑转化为可管理和可重用的组件的过程。它的目的是简化系统的实现,聚焦于应用程序的核心功能,同时隐藏不必要的细节。抽象后设计出各种基础能力,通过对基础能力的组合和拼接,支持复杂多变的业务逻辑和业务形态。


gw1.png


具备抽象思维,能够让我们从复杂的业务中迅速切入业务关键点。在生活中可能表现在透过现象看到本质,或者碰到问题能够快速给出有效解决方案或思路。例如老猫上次遇到的“真-丢包事件”。


分层思维很重要


说到分层思维,应该准确地来说是建立在能够清晰的抽象出事务本质的基础上,而后再去做分层。


很多地方都会存在分层思想。生活中就有,大家双休日没事的时候估计会逛商场,商城的模式一般就是底层停车场,一层超市,二层卖服装的,三层儿童乐园,卖玩具的,四层吃饭看电影娱乐的等等。


再去聊到技术上的分层思想,例如OSI七层模型,大家在面试的时候甚至都碰到过。


gw2.png


抛开这些,其实我们对自己当前负责的一些业务,一些系统也需要去做一些分层划分,这些分层可以让我们更好地看清业务系统之间的关系。例如老猫之前梳理的一张图。


gw3.png


通过这样的分层梳理,我们可能更好地理解当前的系统组成以及层级关系。(备注一下,老猫这里画图工具用的还是wps绘制的)。


结构化思维很重要


结构化思维又是咋回事儿?
不着急,打个比方,咱们看下面一组数据:
213421790346567560889
现在有个要求,咱们需要记下这些数字,以及出现的次数。短时间内想要记住可能比较困难
如果我们把这些数字的内容调整下,变成下面这样:
00112233445566778899
是不是清晰了很多?


所谓的结构化思维,就是从无序到有序的一种思考过程,将搜集到的信息、数据、知识等素材按一定的逻辑进行分析、整理,呈现出有序的结构,继而化繁为简。有结构的信息更适合大脑记忆和理解。


人类大脑在处理信息的时候,有两个特点:


第一,不能一次太多,太多信息会让我们的大脑觉得负荷过大;乔治·米勒在他的论文《奇妙的数字7±2》中提出,人类大脑短期记忆无法一次容纳7个以上的记忆项目,比较容易记住的是3个项目,当然最容易的是1个。


第二,喜欢有规律的信息。有规律的信息能减少复杂度,Mitchell Waldrop在《复杂》一书中,提出一种用信息熵来进行复杂性度量的方法,所谓信息熵就是一条信息包含信息量的大小。举个例子,假设一条消息由符号A、C、G和T组成。如果序列高度有序,很容易描述,例如“A A A A A A A … A”,则熵为零。而完全随机的序列则有最大熵值。


ccfc037aa9b4e852ef2a16f8e58c4a86.png


老猫在写文章的时候喜欢先列一下要写的提纲,然后再跟着提纲一点一点的往下写,写定义,写实现,写流程。


虽然本文偷了个懒,没有写思维导图,老猫一般再聊到干货的时候都会和大家先列一下提纲。这种提纲其实也是结构化的一种。当我们遇到复杂系统需求的时候,咱们不妨先列个提纲,将需要做的按照自己定义好的顺序罗列好,这样解决起来会更加容易一些。


太过理性可能也不好


程序员做久了,做一件事情的时候都会去想着先做什么然后做什么一步一步,有时候会显得过于机械,不知变通,
有时候可能也会太过较真,大直男显得情商比较低,会多多少少给别人带去一些不便,记得在银行办理业务的时候会指出业务员说话的逻辑漏洞,然后不停地追问,最终可能导致业务员尴尬地叫来业务经理解释等等。


程序员思维做事情,可能在日常生活中比较严谨,但是很多时候还是会显得比较死板。


总结


以上是老猫觉得除了技术以外,觉得一个后端程序员应该具备的一些思考方式以及工作方式,当然也可能只是老猫的方法论,如果大家有其他的工作领悟,也欢迎大家留言,大家一起分享一下经验。


作者:程序员老猫
来源:juejin.cn/post/7343493283073507379
收起阅读 »

不服气,川大数学博士吐槽华为招聘

数学博士吐槽华为招聘 今天刷到一篇帖子: 文中来自川大的数学博士吐槽了华为对数学博士的招聘。 作者强调自己是川大的本硕博(算子分析方向),有论文,也拿过国家一等奖。 但自己投的华为简历,却石沉大海,了无音讯。 还直言道:自己在数学系待了 10 年,没有任何一...
继续阅读 »

数学博士吐槽华为招聘


今天刷到一篇帖子:


文中来自川大的数学博士吐槽了华为对数学博士的招聘。


作者强调自己是川大的本硕博(算子分析方向),有论文,也拿过国家一等奖。


但自己投的华为简历,却石沉大海,了无音讯。


还直言道:自己在数学系待了 10 年,没有任何一个数学博士能够满足华为招聘三条要求中的两条,如果数学博士干的是华为招聘上的事情,毕业都难。


这事儿,怎么说呢,从不同角度,会有不同的理解。


首先,在企业招聘中,学历往往是起点门槛要求,而非唯一要求。


因此肯定不是说满足数学博士要求,就必然入面试,这一点和「本科/硕士」一样。


其次,企业招聘中,往往是「应用类」人才占比要比「科研类」人才占比更高。


因此在学历(数学博士)要求上,往往还会有企业所期望的技能要求,例如文中说的「熟练使用计算机编程语言」,也算是常规操作。


至于原帖作者说的,因为「华为招聘中有很多不是数学博士专业领域知识要求」,就得出「华为觉得不到这个水平就不算是博士」的结论,多少有点偏激了。


...


回归主线。


来一道不是数学博士也能做出来的算法题。


这道题曾经还是华为的校招机试原题。


题目描述


平台:LeetCode


题号:172


给定一个整数 nn ,返回 n!n! 结果中尾随零的数量。


提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1


示例 1:


输入:n = 3

输出:0

解释:3! = 6 ,不含尾随 0

示例 2:


输入:n = 5

输出:1

解释:5! = 120 ,有一个尾随 0

提示:



  • 0<=n<=1040 <= n <= 10^4


进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?


数学


对于任意一个 n!n! 而言,其尾随零的个数取决于展开式中 1010 的个数,而 1010 可由质因数 252 * 5 而来,因此 n!n! 的尾随零个数为展开式中各项分解质因数后 22 的数量和 55 的数量中的较小值。


即问题转换为对 [1,n][1, n] 中的各项进行分解质因数,能够分解出来的 22 的个数和 55 的个数分别为多少。


为了更具一般性,我们分析对 [1,n][1, n] 中各数进行分解质因数,能够分解出质因数 pp 的个数为多少。根据每个数能够分解出 pp 的个数进行分情况讨论:



  • 能够分解出至少一个 pp 的个数为 pp 的倍数,在 [1,n][1, n] 范围内此类数的个数为 c1=npc_1 = \left \lfloor \frac{n}{p} \right \rfloor

  • 能够分解出至少两个 pp 的个数为 p2p^2 的倍数,在 [1,n][1, n] 范围内此类数的个数为 c2=np2c_2 = \left \lfloor \frac{n}{p^2} \right \rfloor

  • ...

  • 能够分解出至少 kkpp 的个数为 pkp^k 的倍数,在 [1,n][1, n] 范围内此类数的个数为 ck=npkc_k = \left \lfloor \frac{n}{p^k} \right \rfloor


我们定义一个合法的 kk 需要满足 pknp^k \leqslant n,上述的每一类数均是前一类数的「子集」(一个数如果是 pkp^k 的倍数,必然是 pk1p^{k-1} 的倍数),因此如果一个数是 pkp^k 的倍数,其出现在的集合数量为 kk,与其最终贡献的 pp 的数量相等。


回到本题,n!n! 中质因数 22 的数量为 :


i=1k1n2i=n2+n22+...+n2k1\sum_{i = 1}^{k_1}\left \lfloor \frac{n}{2^i} \right \rfloor = \left \lfloor \frac{n}{2} \right \rfloor + \left \lfloor \frac{n}{2^2} \right \rfloor + ... + \left \lfloor \frac{n}{2^{k_1}} \right \rfloor

n!n! 中质因数 55 的数量为 :


i=1k2n5i=n5+n52+...+n5k2\sum_{i = 1}^{k_2}\left \lfloor \frac{n}{5^i} \right \rfloor = \left \lfloor \frac{n}{5} \right \rfloor + \left \lfloor \frac{n}{5^2} \right \rfloor + ... + \left \lfloor \frac{n}{5^{k_2}} \right \rfloor

2<52 < 5,可知 k2k1k_2 \leqslant k_1,同时 ii 相同的每一项满足 n5in2i\left \lfloor \frac{n}{5^i} \right \rfloor \leqslant \left \lfloor \frac{n}{2^i} \right \rfloor,可知最终 i=1k2n5ii=1k1n2i\sum_{i = 1}^{k_2}\left \lfloor \frac{n}{5^i} \right \rfloor \leqslant \sum_{i = 1}^{k_1}\left \lfloor \frac{n}{2^i} \right \rfloor,即质因数 55 的个数必然不会超过质因数 22 的个数。我们只需要统计质因数 55 的个数即可。


Java 代码:


class Solution {
public int trailingZeroes(int n) {
return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
}
}

Python 代码:


class Solution:
def trailingZeroes(self, n: int) -> int:
return n // 5 + self.trailingZeroes(n // 5) if n else 0


  • 时间复杂度:O(logn)O(\log{n})

  • 空间复杂度:忽略递归带来的额外空间开销,复杂度为 O(1)O(1)



作者:宫水三叶的刷题日记
来源:juejin.cn/post/7332027975862730761
收起阅读 »

谈谈雷军造车

相信大家都听过雷总的一句鸡汤:“我干了30多年,回头一望,全是漫长的挫折和煎熬,和大家一样,我也迷茫,我也曾经动摇甚至放弃过,我想跟大家说我们不要逃避,你经历的所有的挫折和失败,甚至那些看似毫无意义,消磨时间的事情,都将成为你最重要的,最宝贵的财富,人生很长,...
继续阅读 »

相信大家都听过雷总的一句鸡汤:“我干了30多年,回头一望,全是漫长的挫折和煎熬,和大家一样,我也迷茫,我也曾经动摇甚至放弃过,我想跟大家说我们不要逃避,你经历的所有的挫折和失败,甚至那些看似毫无意义,消磨时间的事情,都将成为你最重要的,最宝贵的财富,人生很长,永远相信美好的事情即将发生。”这段话治愈了很多人,熬不住的时候回头想想这句话也让我受益良多。生活,就像一条曲折的河流,有时平静,有时汹涌。每个人都会遇到各自的艰难困苦,那些看似寻常的日子,也许背后隐藏着不为人知的挣扎。这就是生活,这就是人生。

都说十年磨一剑,雷总三年就出成果,从当年的PPT造车到实际落地,中间的困难与挫折可想而知。我们都知道小米是造手机、电视、智能家居等电子产品的,当3年前官宣造车的时候,很多人都不看好它,甚至还有人冷嘲热讽,那么今天小米用实际行动证明了自己。前些日子比亚迪掀桌子了,比亚迪秦起售价直接干到7.98万,这也让不少网约车车主感到痛心,2年跑的滴滴全白干,而且新款秦配置还更好;去年都在吐槽特斯拉降价,甚至有的人还去维权,最终也无功而返,今年国产车掀起降价潮,导致整个新能源汽车市场受到影响。不过这波降价主要原因还是今年的经济不景气,大家都在缩减开销,但其实也有一部分原因是因为小米迟迟不敢公布售价,而从外表来看SU7又很好看,肯定是一个大卖点,所以不少厂家先于小米一步降价为求站稳脚跟,不少网友也调侃说电车降价小米功不可没。
造车压力大,下面给大家看下雷总最近参加人大的照片,以及以前的招聘,对比起来真的很明显憔悴了不少,也老了不少:


微信图片_20240308164101.jpg


微信图片_20240308164109.jpg


微信图片_20240308164114.jpg


谈谈雷军带队小米造车


小米的生态链中可以说车是必不可少的一环,雷军常说,人、车、家形成一个生态链的闭环,雷军也说了这次将是他最后一次创业,如果这次成功可以说是给自己的人生画上了圆满的句号,下面我从几个方面看来谈谈造车的这个事情。


创新理念


雷军一直以来都是创新的倡导者和实践者,在智能手机领域取得了巨大成功。他带领小米进军造车领域,是对传统汽车行业的一次颠覆性挑战,展现了他对未来出行方式的前瞻性思考和勇于尝试的精神。不过有一说一,现在小米手机可是越卖越贵啊,1999的那个时代再也回不去了。


技术实力


小米作为一家科技公司,拥有雄厚的技术实力和研发能力。结合小米在智能硬件、人工智能等领域的优势,可以为汽车行业注入新的活力和创新,打造更加智能、互联的汽车产品。


生态系统优势


小米不仅仅是一家手机制造商,更是建立了庞大的生态系统,涵盖了智能家居、智能穿戴、智能健康等多个领域。雷军希望通过造车项目,将小米的生态系统拓展到汽车领域,实现智能设备之间的无缝连接和互联互通。不知道小米还会不会在车上用上小爱同学。


用户体验


雷军一直以来都非常注重用户体验,他认为用户是一切创新的源泉和动力。在造车项目中,他致力于打造用户体验一流的智能汽车,通过人性化设计和智能科技,为用户提供更加便捷、安全、舒适的出行体验。


挑战与机遇


进军汽车行业是一项充满挑战的任务,雷军清楚地意识到这一点。但与挑战相伴随的是巨大的机遇,随着智能化、电动化、共享化的趋势不断加速,汽车行业正经历着前所未有的变革,雷军带领小米造车正是抓住了这个机遇,努力走在行业的前沿。


作者:MrDong先生
来源:juejin.cn/post/7343842933990817832
收起阅读 »

2024年大龄程序员不得不面对的尴尬,也算是过来人的经验

被裁员 先说下本人情况,38,坐标杭州,具备后端架构和大数据架构能力。待过大厂,带过团队,落地过大型项目。 近几年被裁员也不算什么稀奇古怪的事情,我记得2022年下半年面试那会行情远比现在好,那会还会有猎头、企业主动找,我2022年的工作就是猎头推进去的。 然...
继续阅读 »

被裁员


先说下本人情况,38,坐标杭州,具备后端架构和大数据架构能力。待过大厂,带过团队,落地过大型项目。


近几年被裁员也不算什么稀奇古怪的事情,我记得2022年下半年面试那会行情远比现在好,那会还会有猎头、企业主动找,我2022年的工作就是猎头推进去的。


然而公司运营不善,2023年底裁撤了,因为融资问题,被迫出局。


本想着年后再看工作,也想休息一段时间,于是年前就没理工作这个事。


狗不理


因为信息差,也可能因为行业这种趋势本身就是没法感知的,年后投简历发现了几个情况:



  1. 无论是猎聘、BOSS、智联,好像岗位都比之前少了很多,并且很多都是钉子户,我2022年找工作那会看他们挂的JD,2024年了仍然还在。

  2. 很多JD都要求的时间就在两个段,一个是1—3年,一个是5—10年。那么从23岁毕业来看,现在只要33岁以下的了。

  3. 从跟一些猎头的沟通来看,现在很多好点的岗位是需要本硕985,211都不一定看了,并且很多事明确要求硕士。这其实一刀切,放十几年前,考大学比现在难。

  4. 很多简历发出去直接被拒,要么是未读。基本上已经有去无回了。


一些感悟


面对这种突如其来的颠覆认知的行情,我有点措手不及,没预想自己可能就此失业了。现在的世界变化太快了,也可能我待在舒适区太久了,根本对外部世界的变化钝感迟缓。


我也没去问招聘方是什么原因,本身就个人从业经历和技能能来说,自认为还OK,但是问人家也未必会告诉你实话,在这个存量市场,势必是僧多肉少,刺刀见红,现实残酷,朝不保夕。


但是反思下十几年的职场生涯,其实多多少少还是有个人原因的,总结出来,留给后来人吧:



  1. 不要迷信技术,我以前以为只要技术好就是核心竞争力,就有护城河。现在发现这种信仰只有在一个崇尚技术、尊重技术的环境中才有效。但是目前看下,这个环境越来越不是,今后肯定是越来越人情社会,越来越丛林化。所以,得有综合全面的“技术”才能混,至于我说的综合全面,懂的都懂。

  2. IT行业不适合深耕,只适合扩展。就是你得把他当工具,千万别代入,不然你会陷入很深的工具人思维。就是你总得想着有朝一日假如你被裁员了,你是否有利用这个工具单干的能力。尤其是现在AI技术日新月异,很有可能程序员一夜之间就变成土木。

  3. 一个要打造个人IP,要清醒地培养自己独立赚钱的能力,跳出自己的舒适区。很可能你目前的舒适生活是由行业或平台的红利带来的,你也很可能就是那个被圈养的巨婴。想想《肖申克的救赎》那几个经典片段:坐牢越久越是离不开监狱的,到最后极度依赖,没有自己。

  4. 认知越早扭转越好,不要等到35岁别人不要你了才幡然醒悟,我就是反例,到这个时候怀着空杯心态再从零开始,代价不得不说有点太大了。


个人期望


最后说点自己的个人期望和未深思的规划:
1、后面还是要自己单干的,可以是独立开发、或者其他。
2、还是会热爱技术,即使如果干不了这行了,也会把它当做一个兴趣培养。


作者:数据智能老司机
来源:juejin.cn/post/7343902139821785124
收起阅读 »

一夜之间,3.0万 Star,全部清零!

这是开源圈不久前发生的一件事情。 不知道大家有没有听说过NeteaseCloudMusicApi这个项目,从项目名字大家也能猜出,这是一个和网易云音乐API有关的开源项目。 该项目之前由开发者Binaryify所打造,是网易云音乐API的一个非官方封装库。 该...
继续阅读 »

这是开源圈不久前发生的一件事情。


不知道大家有没有听说过NeteaseCloudMusicApi这个项目,从项目名字大家也能猜出,这是一个和网易云音乐API有关的开源项目。


该项目之前由开发者Binaryify所打造,是网易云音乐API的一个非官方封装库。


该项目采用Node.js编写,可以实现非官方的网易云音乐API调用,从而可以让其他开发者可以基于该项目来获取网易云音乐平台上的一些歌曲、歌单、歌词、专辑、电台等信息,方便开发者构建基于网易云音乐服务的应用程序。



这个项目曾经在GitHub上非常火热,也因此一度获得了超过3.0w的Star标星,以及1.5w+的Fork。



不过就在最近,该项目的作者彻底清零了这个项目,包括其所有的代码、文档,以及commit提交信息,并在项目的主页README中更新了动态:



保护版权,此仓库不再维护




原因很简单,原来是作者收到了来自网易云音乐官方发送的法务通知函。


网易云音乐声明该项目侵犯了其公司的相关版权,并且要求开发者立即下线该项目中盗链网易云音乐的方法及内容。


具体的通知如下:



网易云音乐由杭州网易云音乐有限公司独立开发运营,网易云音乐作为国内知名的在线音乐平台,致力于为用户提供优质的音乐内容服务,我司以高额的成本采购了海量音乐作品的内容,在未我司合法授权的任何第三方均没有权利播放由我司享有版权的音乐作品,我司有权以自己的名义或授权第三方进行维权。




我司收到用户的举报,您开发的 NeteaseCloudMusicApi 或存在涉嫌通过非法破解网易云音乐内容接口的方式获取网易云音乐享有版权的歌曲内容。




贵司未经我司授权,通过技术手段破解绕开限制直接提供网易云音乐享有版权的音乐作品内容,该行为不仅侵犯了我司享有的音乐作品版权,亦非法攫取了网易云音乐的用户流量构成不正当竞争,损害了我司作为权利人的合法权益。




同时贵方通过非法技术手段破解网站获取大量歌曲内容的行为,涉嫌构成侵犯著作权罪,破坏 / 非法入侵计算机信息系统罪及 / 或提供破坏 / 非法入侵计算机信息系统工具罪。




针对上述侵权行为,根据中华人民共和国《著作权法》、《刑法》等相关法律法规规定,我司现郑重致函:




1、立即下线 NeteaseCloudMusicApi 上盗链网易云音乐的方法及内容;




2、在未获得我方授权的前提下,停止一切侵犯我司合法权益的行为。




请贵方充分认识到该行为的违法性和严重性,按照本函要求立即处理侵权行为,并将处理结果及时告知我方。若贵方怠于履行该项义务,为维护自身合法权益,我司将采取包括诉讼、投诉、举报等在内的一切必要的法律措施确保合法权利得到有效保护。



从这个项目的维护历史可以看出,曾经作者对于该项目还是花了不少心血的,包括维护的活跃度以及项目文档这块,都做了不少工作。



而且也有不少开发者来基于该项目进行二开,从而实现开发者自己的不同想法和需求。


然而面对这样一封告知函,项目作者也不得不做出清空仓库并将其进行永久归档的处理,毕竟这类项目确实存在版权方面的问题。


而尊重版权和合规开源也确实是每一位开源作者的基本职责。


其实像这类项目在GitHub上还是有不少的,在之前官方没有明确追责的情况下,其实大家对于一些非盈利性的小众开源项目基本也会睁一只眼闭一只眼,但是官方一旦追责起来,这类项目生存的概率就微乎其微了。


所以这件事也提醒我们,后续大家如果要经营和维护自己的开源项目,也是要多关注和留意一下版权方面的问题,从而避免后续可能会出现的一些不必要的麻烦。


作者:CodeSheep
来源:juejin.cn/post/7343137522069995529
收起阅读 »

职场上的人情世故-初入新公司的第一天

写在前面 想必很多同学在步入新公司的时候,不仅仅带有激动的心情(毕竟大概率涨了点薪资)的同时,也会有点点紧张的心情,也没熟悉的人,也可能不太清楚要做的事儿。4年前刚步入目前所在公司时,也是面临着不少挑战,下面结合我的亲身经历,给大家分享下我是如何快速融入新公司...
继续阅读 »

写在前面


想必很多同学在步入新公司的时候,不仅仅带有激动的心情(毕竟大概率涨了点薪资)的同时,也会有点点紧张的心情,也没熟悉的人,也可能不太清楚要做的事儿。4年前刚步入目前所在公司时,也是面临着不少挑战,下面结合我的亲身经历,给大家分享下我是如何快速融入新公司,如何面对各种挑战。


入职第一天


办理好入职手续后,hr将我带到TL面前,安排好座位后,我尴尬地说了句:”大家好大家好“,更尴尬的是没一个人看向我,好在TL给我解了围:”会有时间给你做自我介绍的,我先发你个文档,搭建好开发环境“。


解锁了第一个任务:【搭建开发环境】


一小时后到了午餐的时间


这里画下重点了,不是每一个公司的同事都会主动拉上新同事吃午饭。这时候又被TL看出我的尴尬:”一会儿还有一批同事去吃饭,你跟他们一起去吧“。


入职新公司后,午餐要跟着同团队的同事一起,主动点跟团
平时有带饭习惯的也先别带了
午餐时间是最好地了解团队信息贺快速融入团队的好机会

下午搭建环境时,发现一处命令始终报错(时间太久实在想不起详情来了),查到正确的命令后找TL报告了下情况,更新了文档。


千万别一来就直接问
先自己思考一段时间
实在解决不了,也要带着自己查询资料后的结论去问下(不要管自己查的对不对,至少有解决问题的态度)

不知不觉时间来到了晚上6:45,下班时间已到,甚至还多加了15分钟班~~
环顾四周,没一个人有走的意思
好吧,接下来要说的我估计会被喷.... 但老夫该说还得说


如果是初创公司建议多留一会儿,毕竟刚来公司,尽快熟悉下公司情况
虽然有点那啥...,但摆一下态度还是能留下一些好印象的
毕竟在试用期,公司与自身是否合拍,还是早点看清楚好些,多花时间调研下
最不济,实在没事儿做,看看群里的同事名字,多记几个总是好的吧

晚上7点过群里发起了投票,问过后才得知加班到20:30可以点加班餐,群里直接投票就行。那还走啥,吃个饭再说。有一说一,这顿晚饭还是挺值的。可不是说省下多少多少晚餐费,而是跟其他同事边吃边聊,更深入的了解了下当前团队的人员配置、当前版本进度以及后续版本安排。对公司产品和研发配置有了更好的理解,这也侧面坚定了我想留下来的信念。


很多时候,吃饭和来根小快乐(不会的别学)的时候,最能拉进同事关系
闲聊的时候多问多了解,老同事在感到被你需要的时候,也很容易拉进同事关系

结束新公司的第一天


总的来说,来公司第一天的表现还是差点意思。事事不够主动,虽说上班的主要目的是挣银子,但对我来说舒适的上班环境和良好的同事氛围还是挺重要的。第一天比较顺利地度过了,公司规模也不小,后面要做什么版本功能也不得而知,还是有点忐忑,毕竟第一天早上TL就直接告知:”我们的试用期不会是常规的三个月,一共三个阶段,会给你安排导师带你,如果某个阶段不合格也会直接劝退“。


我想说,无论做什么版本功能,我相信始终能做出来,只是质量的区别
所以新环境中不用过于紧张,总有水到桥头自然直的时候

后续


试用期的几个月也相当不顺利,做功能的时候也相当痛苦,也有过好几次返工的时候。既然说是后续了,那就后面再细聊。


作者:snowlover
来源:juejin.cn/post/7342750487873257491
收起阅读 »

一年前端经验的我,开始带队开发了!

关于刚开始接触带队开发 时间:2023年3月5日 这篇文章不是工具型文章,单纯聊一聊我工作生活中的心得体会。经历是非常非常勇敢的行为和非常非常有意义的。很多书其实也是一个一个的经历和经历总结。经历总是迷人的。 前言 先简单介绍一下我自己。我是一名前端程序员...
继续阅读 »

关于刚开始接触带队开发


时间:2023年3月5日



这篇文章不是工具型文章,单纯聊一聊我工作生活中的心得体会。经历是非常非常勇敢的行为和非常非常有意义的。很多书其实也是一个一个的经历和经历总结。经历总是迷人的。



前言


先简单介绍一下我自己。我是一名前端程序员,2022年毕业的,但是当时我并没有立即进入程序员的行列。我首先参与了考研考公大军。不过正如我大学时的一位任课老师所说,我并不像个考研的人。我想补充一下,我或许也不是一个考公的人。



哈哈哈,不好意思,我这么久了还记得您这句话。只是印象深刻,因为我当时听到这句话的时候好像我的内心并不排斥,还隐隐觉得是对的🤣。不过老师应该看不到,她是教我们供应链管理的老师,她应该关注不到这儿。



考研我没过初试,考公我没过面试。可以说那段时日我是凄凄惨惨戚戚,严重精神内耗。在生活和内心的重压之下,我准备先到省会找一份工作,先自己养活自己。


22年11月15日,我深刻的记得这天,这是我回到IT的第一天,这天起,我开始了前端开发。我其实入职的是一家小公司,不算大,研发部一开始也就20来号人,所以总有人员不足的时候。特别是我手上的项目,是公司自研项目,但是公司投入的人不多,就我一个前端开发,外加部门经理直接领导我。于是乎我是前端,但不只是前端。


时至今日,我经历了不止前端开发。还有 electron 的桌面端开发、网络安全漏洞复现、漏洞收集分析、视频制作。这些是我在23年夏天开始经常出去做售前的基础。后来我一方面做售前技术支持,一方面收集需求,在经理的指导下做系统优化。后面还做过对产品部分功能模块的原型设计。这也是后来我第一次懵懵懂懂的开始带人一起开发的第一个功能。当时有两个人和我一起开发,我负责前端部分需求实现和 nodejs 后端功能实现,并做总开发进度监督汇报。


这一年的时间中,不乏各位同事对我热情的帮助、经理对我的容忍和耐心指导、还有老板对我的肯定。



1、遥想当初,“package.json”我都会说错🤣,不过那都是过去式。


2、有关的经历我会慢慢通过文字或者视频的形式输出,欢迎持续关注。



又是一次带队协作开发


1 和“队友”打配合的体会


今天我已经不是第一次带队开发了。但是我还是觉得我要把这次真正当成初次。为什么这么说?


这次的开发从调研到设计到整合人马,以及后续我都参与,并且我主要负责。相对而言,这次是更为完整的带队经验。而上一次原型是我画的,针对需求的技术方案调研我也是做过,但是当时我并没有以我是带头人的角度去思考问题,就是简单的,领导要我做啥我做啥,他提出需求,告诉我可以考虑用哪些去做,我就想办法去实现就好了。而这次不一样。我没有完全参与调研,因为这个时候我手上还有很多任务要做,不能完全把时间堆在上面。所以更多的我是让我的“队友”(其实也就只有一个,从公司结构来说她是我的下属)去做主要调研工作,我告诉她我需要她调研什么,结果以什么格式呈现给我。完成后我就她给我的信息做开发计划。



小体会:


要安排下属做一件事情的时候,告诉她“主体是什么”、“我需要的是什么”、“呈现形式是什么”,这将能带来更好的收益。


因为下属也是实习生刚转正,她其实还有很多在汇报或者其他工作上考虑不完善的地方。那这个时候就需要有这样的模式,能够让她快速知道自己要做什么,怎么做。她就不会胡乱给你信息,增大你信息检索的压力。我也明白了,为什么说领导更多时候就是在乎结果。因为直接使用结果对领导是更高效的。



2 开发计划书


开发计划我之前从未写过。我也好久没有一个 word 文档是自己从头到尾一个字一个字码出来的。我也更深刻的感受到了之前大学时期参与 “互联网+” 创新创业比赛中写项目计划书给我带来的思路优势了。我的开发计划书也更有了一点逻辑性。


从市场环境出发,到产品涉及的目标客户的需求共性,来作为开发计划的大背景,也是梳理需求的重要依据。再到需求点分析,需求特征分析。通过需求分析找到实现需求的重要做法。有句话说的好,问题的答案往往要从问题本身去寻找。(不用查了,这是我编的🤪)然后依据需求点要实现什么样的功能。最后是做前端的页面划分、功能描述、后端的数据库设计等。



小体会:


软考除了能帮我们减税、落户加分,还可以帮助我们有系统意识以及设计思想。


23年下半年我参与过一次软考中级考试,备考的经历不长,只有一个月,但是针对“软件设计师”的学习真的让我更好的理解了工作中的一些事情还有项目、电脑上的一些思想。有些计算机的思想甚至能帮助我在生活中拥有更为清晰的思路。



3 动工!小组会议


开会前我可担心了。因为产品所面对的是能懂开发的开发者,产品相对而言更有一些开发的专业性。本身我就是开发者,很容易就会去用我熟悉的词汇去讲,然而这未必是 UI 或者 测试 他们能接受的信息。


有之前和其他部门同事的交流以及和客户交流的经验,我非常明白这点的重要性,所以我本来可以在上午直接开完的会议我硬生生拖到了下午来开。为什么?我做了我能想到的各种情形的回答备案,以及整个会议的把控大纲。和UI我要说明什么,和测试我要强调什么。


但是我还是考虑不周😂。



  1. 对UI,我没有做到更为简单易懂的沟通。我的开发计划书中有对各个页面的功能描述,但是那只是文字。根据文字大家能想想到的情形是不一定相同的。后来我用纸笔给她边说边画,毫无疑问这是低效的,但在当时这是没办法的办法。会议结束前,UI 也告知我,如果没有原型或者草图的情况下,可以考虑给一些竞品的页面和她说,然后说自己需求,这样会更容易理解我想做什么事情。

  2. 我考虑了UI、测试,但是我没有考虑开发。因为我和我的“队友”是负责前后端开发的主要人员,我给她的定位就是前端开发,我习惯了,所以我没有想过会议上要和她说明她要做什么。以至于她会议结束的时候立马问我她要做什么。



当场我也立即意识到了自己疏忽了😂。考虑的还是不够周全。希望我今后不会再发生这样的事情。




小体会:


组织者真是个不好当的角色,他应该尽可能考虑周全,不管是在事务说明上要让所有成员都明白、还要在工作安排上有明确完整的分工,即使对方知道了也应该在会议上明确说明。


幸好我们都是一群年轻人,互相都很好理解。



4 向上汇报——我是怎么避免被压工时


通过小组会议,我不仅要对各个成员的工作做安排,同时也要对任务的工期要有把控。而这个工期的情况,也是需要向上汇报的,这是告诉他什么时候来验收。


这个时候也有一些学问。相信有很多同学被压过工时。我也被压过。我还有过因为自己过少的考虑到工作情况的复杂性,没有给自己留够时间,周末还免费加班过一次。(当时年轻,也是不懂事,不好意思去提加班)。


而这次要开发的内容我之前也没有开发过,而且其中存在很多变数。这个时候是非常难和领导谈判的。因为在领导看来,这些任务就是非常简单的。就比如这个场景:“这个需求,我分分钟就写完了,哪里还需要这么久?你这个时间我不接受,今天下班前一定要出来!”


大学的时候我也学过IT项目管理,我也知道要有工期预计,这也是对成本的估计。但是我这个时候真觉得是扯淡。因为没办法预估啊,太难了,我都不知道会有什么样奇奇怪怪的情况等着我。所以我这次学乖了,我要多估计一些时间,要给领导说清楚我需要这么多时间的原因(就是表明可能存在一些未知的困难,或者手头上的事情还有很多,强压我赶不过来等等)。


我也开始觉得我需要学一学怎么“讨价还价”了。



小体会:


要量力而行,稳妥行事,切忌冲动吹牛夸海口,学会“讨价还价”。





目前能总结出的就是这么多,我犯的错误希望大家可以引以为戒。另外,我也想更多的学习有关领导力的知识还有技巧,欢迎交流。




去经历,不去后悔。保持热爱,奔赴山海!


持续更新中 ... ...


作者:LisEcho
来源:juejin.cn/post/7342793007937552394
收起阅读 »

普通二本一路打怪升级入职腾讯

2016 年初开始北漂工作,距今刚好 7 年了,做个简单的总结 考研败北,不再二战 聊工作不得不先说下考研失败的经历 大三和大四一直备战考研,没有为找工作做一点准备工作,可以说就没给自己留任何的退路,起早贪黑的备考,皇天不负有心人---落榜 当年真没少刷张宇、...
继续阅读 »

2016 年初开始北漂工作,距今刚好 7 年了,做个简单的总结


考研败北,不再二战


聊工作不得不先说下考研失败的经历 大三和大四一直备战考研,没有为找工作做一点准备工作,可以说就没给自己留任何的退路,起早贪黑的备考,皇天不负有心人---落榜


当年真没少刷张宇、李永乐、肖秀荣的题,但翻看当年的一条动态,这个结果在意料之中,得知结果后,当时纠结是否要二战,二战真的需要极大的勇气和毅力,我是经历过高考复读的,11年高考过了线,但志愿没报好【报志愿是非常重要的事儿,我这是错误示范】,脱靶了,这个没有别的选择了,再战,复读那一年压力,可能只有经历过的人能懂,所以这次考研我没有选择二战,再战一年考上的概率多大呢?自己心里是没底的,可能尽早步入社会于我而言是个不错的选择


图片


考研倒计时


第一次步入社会的实习


因为大学最后的时光备战考研,没有准备工作的面试,过年放假在家里那段时间也是蛮焦虑的,当时拿到了一个网优工程师的机会,但说白了是探测信号的,感觉与自己期望的不一样,虽说当时自己真的不知道要啥,但还是放弃了这个机会


图片


就业焦虑


高中同学在卓望公司实习,人力资源方向,找人帮我推荐了下,1 月来北京面试,面试那天和老七,李雪琪一起吃的饭,与他们见面确实挺开心的,那晚在老七那儿住的,第一次吃羊蝎子【没吃过之前以为羊蝎子是蝎子】,现在回首,依然感慨有同学真好,要珍惜呀


图片


同学情


面试完很快就出了结果-通过了,自己确实技能远远不够,大家都很忙,带我的师傅没空带我,我就自学点东西,实习工资 2100,带薪学习,也还行吧,但我更渴望的是接触真实的工作,但直到我最后离开,也没体验到,那段时间蛮焦虑的,明耀哥和我说可以转正,但可能在这里并非特别适合我,我也认同,当时还找组内大龄程序猿郭哥聊,最后我选择了离开


图片


实习迷茫


3 个月的实习时间,赶上了公司的一次团建和一次聚餐,蛮开心的


反思



没有人有义务带你即使是你的师傅,一切要靠自己,切记!



短暂的实习知道了自己的不足,开始集中学习,毕业后又开始了社招面试之旅,没有工作经验的社招的难度,经历过的都懂,下面开始了崎岖之旅


社招曲折之旅


第一次给了外包,且只做了一天


第一个 offer 是一个外包,外派到中国移动,本来面试时是做 Java 开发,入职第一天,记得非常清楚,那天下雨了,仿佛暗示着什么


刚到公司,要先做移动的安全检测题,耗费了我洪荒之力,终于通过了,然后左拐右拐终于到了我的办公区,一间狭小的会议室,几个人在会议室里,一看就不正规,然后负责人也是我当时的面试官说,先看看安卓测试的知识吧,然后巴拉巴拉一堆,最后得到的信息是让我先干测试,我内心万马奔腾,感觉受到了欺骗


这里做的事和我的短期规划不符,我当时依然没有任何退路,但因为刚开始嘛,试错成本很低 所以我坚定了选择了辞职,第二天跑到海淀西北旺那边的联想总部园区办离职,期间路过百度大厦,仰望着发了会儿呆,继续朝目的地走去,就这样结束了一天的外包生涯


下面这个截图大概率是入职当天下班后发的动态,现在看我也有点懵,瞎BB这么多字,到底想表达啥?人生不是选择就是循环,也可能嵌套,我用了 do-while 先做再校验的循环,接受这个机会,发现并不适合自己,那就果断跳出循环体了,没有遗憾了


图片


第一次外包第一天下班感想


反思



面试一定要聊清楚进去做什么,是否和自己的规划匹配,如果不,最好果断做决定。如果确定不了,不妨再试错成本低的前提下尝试一下,然后再做选择



第二次选择了第三方支付


外包离职后做了简单的调整,又开始了忙碌的找工作,投了不少简历,大多石沉大海,庆幸被几家公司捞起来邀请了面试,拿了三个 offer,有一个忘记公司名字了,面试通过了但让我先去工作几天,然后再签合同,大概是想先检查下我是否能干活儿,这种要求没听说过,果断拒绝


另两个 offer 是一家做互联网医疗的公司和第三方支付,互联网医疗那个面试流程走的很快,且催的比较急,我先接了 offer,也定了入职时间。同时一直在催第三方支付的走流程,还好在医疗那家公司入职日期前走完了流程。然后告诉 hr 说不去了,这是第一次拒绝 offer,当时非常的愧疚,所以从那以后一直到现在,在不确定的接 offer 的情况下,从没有答应过,不想给别人找麻烦


在这两个 offer 之间做选择时几乎没怎么犹豫,因为在 16 年时,支付业务还是可以的,而且这家公司还有支付牌照,一个支付牌照很贵的,而且不增发了,所以很多大公司通过收购有支付牌照的小公司来开展自己的支付业务 这家支付公司也是一样,被亿利资源集团收购了,估计也是看重了支付牌照


这家公司挺有意思的,地点在大望路,北京电视台大裤衩旁边,这个位置价格可不便宜,可以看出亿利资源这家集团还是很强的,国企范儿,下面我必须要聊聊在这家公司的一些事儿


你听说过程序猿要穿西装,白衬衫,打领带,穿皮鞋吗?这个集团就这个要求,不管啥职位,不管男女,都这要求,中午我们几个出去溜达,不知有多少人投来异样的眼光,估计我们要么是卖保险的,要么是中介。而且更离谱的是每天都有检查的,要是被发现不符合规范,可是真的要扣钱的,我一共被扣了两次,每次 500 元。一次是说我皮鞋颜色不符合规范,一次是没有戴工卡,当天检查当天就通报呀,会立马在下次发工资中扣除掉,办事特迅速


这真的是我职业生涯中挺有意思的一个插曲


我们这个支付公司比较小,主要做的业务有批量代付、批量代收、网银支付、快捷支付等,一般客户都是集团内部的,使用的比较少 说说技术,基础服务用的 Dubbo + Zookeeper,数据库用的 Oracle,MQ  用的 RabbitMQ,这些还行,尤其是 Dubbo,这可是我第一次接触,还是有点兴奋的 Web 服务相对有点 low 了,还用了 JSP,我是写过 JSP 的人,我敢打赌,现在看这篇文章的人,一定有没写过 JSP 的人,如果写过 JSP 的请留言告诉我


上线采用人肉上线法,替换 class,对,你没看错,上线前开发要写好上线文档,替换哪些 JSP 文件以及 class 文件,然后由运维手动替换,再重启服务,现在都记忆犹新


但是,但是了,这家公司有 2 点特别好吧 1.管早饭和午饭,是伙食非常好的那种,真的可以用非常好来形容,总之从那家公司出来后,我是没见过哪家公司的食堂这么给力 2.不加班,但严格卡打卡时间,早 8 点到晚 6 点,迟到要扣 500 块的,迟到 1 s 也要扣,但大家真的是 6 点准时下班呀,是真的不加班,当然上线除外


图片


西装皮鞋程序猿上线


在这家公司待的挺开心的,即使有穿西装皮鞋的规则,不过最后选择离开还是考虑自身成长,活儿很少,用户也少,成长相对慢一些,而且加上 18 年央妈出手要让各个支付公司对接银联,支付公司也不好过,所以在 18 年我选择了离开,后面得知我离开后没多久,公司就开始了裁员了,稳定后人就很少了,然后大家也都陆续选择了离开


画外音



17 年,18 年是我疯狂关注技术公众号的时间,可以说看到一个技术公众号就关注,也是那个时候有幸加了很多号主的微信,很多已经是大佬了。那个时候也喜欢参加线下技术沙龙,也有幸亲眼见到过很多技术大佬。虽然没有变成我的人脉,毕竟彼此差距大,不奢求,但也会有一丝丝联系



反思



准时上下班,但有一些奇怪的规定的公司,要根据自己当前看重什么来做选择,如果不想加班还可以承受一些奇怪的规定,也挺好的,做到 wlb



第三次是我最不愿提起的经历


这次跳槽面试的公司很少,因为还在上一家公司上班时面的,当年都是现场面,一般几轮面试顺利的话,当天就知道结果了。所以这次几乎不涉及到选择,我是通过海峰总的朋友圈投的饿了么。饿了么北京研发中心是海峰总带,很快收到了面试邀请,面试的是新零售的无人货架业务 当时无人货架的业务还挺多的,很多公司在搞,属于抢市场的阶段吧,我没有选择继续做支付业务,原因是我在支付业务的知识储备还是比较少的,还是前面提到的,试错成本低,所以没有继续找支付业务


下午去的,面试还算顺利,3 轮技术面 + 1 轮 HR  面通过了,大约第二天就发了 offer,我也很爽快的接了 offer 当时最后一轮技术面试是海峰总面的,印象深的是问我的职业规划,我说当架构师,说实话,那个时候我连架构师是啥都不知道,不过海峰总应该是和我说了些啥,但我已经记不清了,对不起海峰总


说不愿提起这段经历的原因是,我待的很不开心,从第一天进去到最后离开,我感觉一直都没有融入进去 先说结果,饿了么试用期我没有通过,但具体原因我真的到现在都不知道,也许只有他们几个做决定的人最清楚了


那里工作节奏还是很快的,刚去半个月吧,我就上了一次线,那上线流程确实丝滑,点点就上线了,和上家公司替换 class 文件对比还是很明显的 后面做第二个需求时有点吃力,业务逻辑还没整明白,然后给了排期后,确实遇到了一些问题,但我没有主动找师傅请教,这是我的问题,我不好意思打扰他,也可能和没融入进去有关,说不清楚了,总之结果是我没有主动找他,他也没主动问我是否有问题,到要求的提测时间,代码虽然提交了一版,但 CR 时被嫌弃了,我也从其他地方听到了一些议论我的声音,大概就是说我写代码不行吧 然后小组长把我代码重构了,说实话,我也看他写的了,真没觉得比我写的好多少,但这个行为确实伤害到了我


最后师傅找我聊,大概就是告诉我,大概试用期过不了了,他也被领导批了,从和师傅的谈话中,学到了遇到问题要及时沟通的,别一个人憋着死扛


然后就是组长找我谈话嘛,说过不了试用期啥的,我当时竟然还求给我次机会,现在想想,真的挺后悔的


领导和 hr 找我谈话时已经是最后了,他和我说我不适合这个团队,离开可能是当时最好的选择,这点我是承认的 然后我就开始新一轮的找工作了


图片


饿厂


这段经历最不愿提起就是试用期没过嘛,感觉是自己职业的污点,但真正不过的原因,到现在我也不清楚,当时代码写的不好是一个原因,但应该不止这个。后面离开后,从其他离职的同事那听到我是被人搞走的,至于真实情况是啥,我也不在乎了,算是职场上了一课


反思



1.有卡点一定要及时找师傅或组长沟通求助,不要一个人憋着死扛,等到最后再开口


2.不适合不要强求,要体面的分手,有尊严的离开


3.打铁还需自身硬



第四次选择了程序化广告


再次出来求职,内心是有一点自卑的,毕竟结果是这样的,但路还得继续走 这次也面了好几家公司,再拿到两家的 offer 后,其他未走完流程的面试也都主动取消了,主要就是做选择了 一个 offer 是首汽约车的派单系统开发,工资比 58 的月 base 高 5k,领导比较欣赏我,很想要我 一个是 58 同城的程序化广告开发,高并发 低延时系统,工资是饿了么平移过来的 这俩 offer 都是当天面试完,当天出结果


当时纠结的点是首汽约车的领导很想要我,给我打了两次电话吧,而且工资比 58 的也高 5k,当时工资本来就没多少,高 5k,真的很多了,而且派单系统很核心,应该也不错 58同城的那个工作机会更吸引我,做联盟 DSP 开发,真的是高并发,低延时系统,我是从未接触过的,听到后真的就差流哈喇子了,而且公司相对比首汽约车大一些,但工资低,而且低的挺多,所以我陷入了纠结


我后面从个人成长的角度做了选择,选择了 58同城,因为做的事儿我更喜欢,工资低点就低点吧,做选择工资确实是一个很重要的因素,但不是全部,在钱和成长之间,我选择了成长。当然这里并不是说首汽约车的派单没成长,这个判断只属于我个人的判断。我内心的天平更倾向 58


现在回看在 58 同城 3 年的时光,确实成长很多,这个选择我是很满意的。而且团队氛围很好,大家年龄都相仿,很能聊的来,那里有太多回忆了


从 58 选择离开的原因还挺多 1.当时据说可能要组织架构调整,我们领导可能要走了,当时我们部门很多人都在看机会,算是动荡吧 2.没啥新增业务了,主要维护系统正常运转 3.工资低


再继续待下去,成长和成事都不太满足了,而且工资还低,也挺难受,所以选择了离开


图片


初到58


图片


离开58


反思



1.从成长和成事的维度做选择,早期钱的权重可以低一些


2.选择一个好的平台和业务很重要,你学的那些技术点要有使用的地方很重要



第五次选择了大厂


21 年出来看机会,感觉是 58 的经历给自己做了一些背书,这次拿了挺多 offer,也挺纠结的


offer



  1. 腾讯广告,偏内部系统

  2. 小红书广告检索,直属领导挺欣赏我,做的方向是我想做的

  3. 美团外卖广告检索,做的方向是我想做的

  4. 猿辅导用户增长,现金+期权,总包最高,当时还没出教育政策,发展向好

  5. 爱奇艺广告投放平台

  6. 滴滴电商

  7. 去哪儿网客服平台


这几个 offer,我当时主要的纠结点是前 4 个 腾讯是大厂,我没在大厂干过,很想去体验一下,面试时我做了预期,可能做的业务不是我想做的,但大厂光环实在诱人


小红书做的业务是我想做的,而且小红书发展势头正猛呢,直属领导也挺欣赏我,还帮我争取工资,我和他沟通是最多的,电话了几次,而且我还去了小红书公司一趟,他还请我吃饭了,但我最后没去,感觉很对不起他,这也是我一直没敢再联系他的原因。但不好的一点是大小周


美团做的方向是我想做的,而且我对一面面试官的印象特别好,加上美团的 Java 也很好。不足是这个 offer 算是我后面争取的,因为面美团是比较早的,3 面和 HR 面完后,一直没接到进一步的通知,这种大概率是作为备选中或 pass 了。后面我拿到了腾讯的 offer,又找当时的二面也就是直属领导聊了下,他又帮忙推进了流程,那个时候 58 很多做广告的去面美团这个岗位,所以卡薪资卡的挺死的,说白了,候选人很多嘛,选择权在手,硬气一些。而且美团福利相对差一些,就没福利


猿辅导当时上市谣言四起,给的薪资是最高的,那月 base 高不说,还给了期权,而且猿辅导不卷


当时真的很纠结 从成长角度看,美团和小红书应该是更好的选择 从成事角度看,小红书和猿辅导应该是更好的选择 但腾讯有大厂光环,没待过大厂,机会摆在眼前,不心动很难 小红书的直属领导都请我吃饭了,而且做的事儿也是自己想做的,且符合成长和成事,但架不住大小周呀,有娃了,想分出一些时间陪娃 美团做的事儿也是自己想做的,加上这个机会还是自己主动争取的,但美团没啥福利呀,薪资卡的还那么死 猿辅导可是前景一片看好呀,上市概率这么大,一旦上市,不敢想了,但做的事儿相比其他,可能不是那么有吸引力


怎么办?这次选择没有从成长和成事的角度选,而是遵从了内心,我内心是想弥补大厂的空缺,所以最后选了腾讯


这个选择的 2 年后,也就是现在,回看下当时的选择 猿辅导,后面双减政策一出,猿辅导开始裁员,上市更是无望,没去对了 滴滴电商,滴滴 app 下架,滴滴橙心优选应该是黄了吧,滴滴的电商应该是没做起来,没去对了 爱奇艺,后面也经历了裁员,没去就对了 去哪儿网,这个在我选择的最后 小红书,小红书广告业务还算不错,但没有其他的信息 美团,据我观察,那个团队发展的应该也不错,在美团技术公众号上看到过那个团队的文章 腾讯,面试时说做 cs,但因为组织架构调整以及人员分配,我做了其他的系统,现在看这个系统是我能团队最重要的项目了,虽说是内部系统,但现在看是符合成事的。不足的是,最近两年腾讯广告业绩不太好,年终奖折损很多。然后就是感觉个人成长较少


总结下来,还算满意,毕竟现在工作是相对稳定的,就是成长少了些,成长嘛,可以自己主动学习,从别的地方补补。但小红书和美团那个也算是自己的小遗憾,没能做自己想做的方向。哪有那么十全十美,既要又要,总得舍弃些什么


图片


鹅厂新员工培训


反思



优先考虑成长和成事,但如果有些事儿不确定,以及内心有个强烈的遗憾需要弥补,稍微遵从下内心吧,不然错过就不在了



虽说社招与 5 家公司产生过关系,但真正我想承认的经历只有 3 家,一天外包不算很正常,饿了么 2 个月简短的时间也可以忽略不计


这就是我从毕业到现在,做的和工作相关的选择,出身不好的我,靠着点滴的进步,一步步走到现在,过程确实曲折些,不过还算满意吧


作者:每天晒白牙
来源:juejin.cn/post/7220793382020743223
收起阅读 »

为什么前端开发变得越来越复杂了?这可能是我们的错

Hello,大家好,我是 Sunday。 最近有很多同学来问我:“Sunday 老师,前端学起来好多的东西啊。各种框架、各种库、各种语法、各种标准,弄得我完全懵逼了。Sunday 老师,你之前是怎么学的,好厉害啊!” 这不禁让我开始反思:“我厉害吗?我可不这么...
继续阅读 »

Hello,大家好,我是 Sunday。


最近有很多同学来问我:“Sunday 老师,前端学起来好多的东西啊。各种框架、各种库、各种语法、各种标准,弄得我完全懵逼了。Sunday 老师,你之前是怎么学的,好厉害啊!”


这不禁让我开始反思:“我厉害吗?我可不这么觉得!” 那我之前是怎么学习这些东西的呢?


我只是占了时间的便利而已~~


背景


如今可用的大量框架和工具给人的印象是 Web 开发可能已经变得过于复杂。如果是一个新人,有这么多要考虑的东西确实会令人感到“恐惧”。好像每一个框架都需要学习,如果不学习给人的感觉就是 “就是没有办法工作” 的样子。更何况还有各种新的热门框架教程和课程增加我们的焦虑感。


但是,大家有没有想过一点,或许前端开发远没有那么负责,这一切也只是一种所谓的 “夸张” 而已。




我记得最初在我学习前端的时候,Angular 还是 1 的版本。Vue 也才刚刚出现。那个时候前端开发好像很简单。标准网站主要由 HTML 和 CSS 组成的静态页面组成,并添加少量 JavaScript 和 jQuery。


快进到今天,看起来就像一个平行宇宙正在发生,有大量的选择。新项目应该使用哪个框架?也许是更成熟的产品,如 React、Angular、Vue、Svelte,或者可能是上个月推出的热门新产品?每个框架都有其独特的生态系统。你还需要决定是否使用 TypeScript 而不是 “普通的” JavaScript,并选择如何使用Next、Nuxt 或 Gatsby 等框架进行服务器端渲染(或静态站点生成) 。如果你想要一个没有错误的应用程序,还不能忘记单元和端到端测试。不过哪怕做到了这些,我们也仅仅知识触及了前端生态系统的表面!


但建立网站真的变得更加复杂了吗?我们今天使用的许多框架和工具最初都是为大型项目而设计的。作为一个新人,真的有这么多要考虑的东西吗?一些新的课程(可能是上周刚刚发布的新框架)没有了它们真的会影响你的工作(找工作)吗?显然不会的!


最初的前端开发状态


作为 2013 年开始工作,2015 后进入 Web 开发的人,那个时候的前端开发真的是非常简单,至少对我来说是这样的。


我记得我可以只使用静态 HTML 页面、最少的 CSS 样式以及少量的 JavaScript(或许还有一点 jQuery)来添加交互功能(这是应用在一个 最高有百万日活 的项目中的技术栈)。你看,哪怕是这样的一个大型项目,它的开发方案依然非常简单。



不过,当时也确实存在一些大型的框架,比如:angular 1。有部分团队也在尝试使用这种全新的技术方案,不过随着 angular 2 的推出,这埋葬了一大批的项目(经历过那个年代的同学应该有对应的感受)。



在当时,我们更关注与 SEO 和页面的优化,但是也仅限于一些标记和关键字之类的东西。与现在的标准相比,可访问性、用户体验和响应式布局 等其他因素几乎在当时都是被忽略的。


不过,随着原生(android || IOS)开发褪去,web 逐渐占据主流。越来越多的功能添加,以及越来越多的人开始依赖于 web 项目。我们开始逐渐在原有的基础之上创建出:新的解决方案、新工具、新工作流程、新功能以及满足更大网络和更大需求所需的任何其他新功能。


JavaScript 框架


越来越多的 JavaScript 框架开始出现,比如大家所熟知的:Vue、React、Angular,通过它们又延伸出了各种生态,如:Element、AntD、Pinia、Redux 等等。


现在,哪怕是一个很小的项目(比如我前几天所做的 运气模拟器依赖了 vue)也会依赖这些框架完成。我好像已经失去了 不依赖框架,完成项目独立开发的能力


但是我们好像忘记了:JavaScript 框架最初应该是为了支持大型项目而不是小型项目而创建的。 学习框架的成本很高,虽然它使用起来确实很简单。但是这是一个增加了我们学习复杂度的来源。


不是所有的项目都必须要依赖框架


JavaScript 框架最适合用于较大的应用程序。如果你正在处理较小的项目,基于组件的框架只会使事情变得复杂,将网站拆分为组件层次结构,这对于小型项目来说很多时候是多余的。


就像 vuex 中犹大所说的一样:



请记住,框架的目的是:简化你的开发并节省你的时间。 不要被框架所绑架。


大家的期望正在变得越来越大


项目的规模随着时间的推移而增长,这是合乎情理的。但是反过来 先构建一个巨型的架构,来应对小型的功能 显得就 不合情理 了。



Web 开发变得过于复杂的想法源于:我们相信我们都拥有与大型企业相同的需求和资源。



这是一个很可怕的事情!


这意味着每个新项目可能需要独特的架构来满足其要求。大公司的所有项目都需要庞大的架构,并且他们的结构经过 “精心设计(至少相对来说是这样)”,以确保可扩展性和维护。他们还拥有庞大的客户群,因此,通过更多的收入、更多的工程师和更清晰的问题了解,维护大型代码库将变得更加容易。


但是对于小公司来说。为了最大程度地减少浪费,小公司的项目应该最小化,不仅要满足其需求的规模,还要满足团队中开发人员的能力。试图模仿大公司的巨型代码架构是毫无意义的


有些人可能会说:“这是我们为了未来的可扩展性和维护而必须做出的牺牲!” 相信我,如果你这么做的话,那么你们肯定撑不到那个时候。


模仿大公司的巨型架构只有一个价值,那就是 增加你简历中的亮点。 如果你从这一点进行考虑,那么你这样做是 “正确的”。


每个解决方案都会引入一个新的问题


每个新框架或库都会出现一个新问题。缺少时间的开发人员花费几个月时间开发出来一个新的工具来解决该问题。如果没有问题呢?那么请放心——我们会创建一个问题,就像多年前的 中、前 台分离一样。


不过世界上任何的行业好像都是想通的,这个事情并不仅仅存在于开发行业。UG 克里希那穆提(印度哲学家)说过:显而易见的事实是,如果你没有问题,你就会制造问题。如果你没有问题,你就不会觉得自己还活着。



我们可以随意以 React 为例(因为我更喜欢 Vue ,所以我不想以 Vue 为例)。它最初是由Facebook创建的,旨在为Facebook开发更多动态功能,同时改善 Facebook 的开发者体验。


自从 React 在 2013 年开源,已经创建了数百个依赖库来解决各种特定于 React 的问题。



  • 如何启动 React 项目?有 Create React App 和 Vite

  • 如何进行状态管理?有 Redux,还有 Mobx

  • 需要创建表单吗?有一个 React Hook 表单

  • 需要服务器端渲染吗?有 Next、Remix 或 Gatsby 等


每个解决方案都有自己的注意事项,开发人员将为它们创建自己的解决方案。


React 可能会认为自己很委屈,因为它认为自己是一个库,而不是一个框架。但是它不可避免地会被社区扩展。同时,Angular 和 Vue 都是拥有自己社区生态系统的框架。并且这只是冰山一角,因为存在许多 JavaScript 框架,每个框架都有自己独特的意识形态和依赖关系。


如何简化我们的代码


在刚才我们已经讨论了很多代码变得复杂的原因。那么接下来我们就要思考 如何才能简化我们的代码


想象一下,你正在开发一个项目、评论和评价其所在地区的餐厅(类似于大众点评)。该项目有关每家餐厅的信息、以及评论的功能。但是在很多情况下,项目最终都会被 延迟发布,因为我们总会添加很多不必要的功能。比如:SSR、通知、离线模式和动画等等。我们在做这些的时候 甚至还没有任何一个用户


我们要知道:完成比完美要重要的多


思考的越多会让我们真正陷入到 过渡设计 的怪圈之中:



所以 简化你的项目吧。去掉那些暂时不需要的功能,去掉那些暂时不需要的框架。 为目标选择合适的工具,而不要为工具选择合适的目标!


作者:程序员Sunday
来源:juejin.cn/post/7338702103882121216
收起阅读 »

独立开发的 APP 卖不好恐怕不是价格的问题

分享一下我对独立 App 定价的一些个人经验。 新人独立开发最大的误区是产品购买率差是价格定的高了。有可能是价格高了,但是大概率不是这个问题。我看到很多人降价、促销、限免,这种没有后手的非策略型降价其实帮助不大。 从付费角度我粗暴的把用户分为三类:一种是有付费...
继续阅读 »

分享一下我对独立 App 定价的一些个人经验。


新人独立开发最大的误区是产品购买率差是价格定的高了。有可能是价格高了,但是大概率不是这个问题。我看到很多人降价、促销、限免,这种没有后手的非策略型降价其实帮助不大。


从付费角度我粗暴的把用户分为三类:一种是有付费习惯的用户,这类用户你产品满足他的点,他就付钱。一种是无论如何都不愿意为这种 app 付钱的,他们宁愿看 30 秒广告,宁愿连续签到 30 天,不收费不给用马上就去下其他免费 app 了。只有一小部分是观望用户,有可能觉得贵了,有可能现在没付费意愿,但是有点想买。


对于优质付费用户,app 的价格浮动 20% 没感知的。关键在于你给他的价格锚点是多少。这就很看你的产品定位和产品的质感传达。一瓶水在便利店和在五星级酒店价格不一样,关键在于价格的感知。所以如果你的产品的商业模式主要是高质量的付费用户,重点不是便宜,重点是让他们觉得值。


对于铁了心的不花钱的用户,如果你没有广告,那么这些用户只有传播价值。所以给到最低使用门槛后,找到一个产品机制让他们产生传播可能。否则这些用户应该果断无视。


对于摇摆观望类,如果能做到定向优惠是很好的手段。但是我没搞这种精细化运营,我一般的做法是画饼和吃定心丸。我会说未来半年我还要做这么多功能,我保证未来价格不打折,我保证明年这个时候涨价。一般观望里真的有购买动机的,这么一说之后 50% 的就会说那我现在买吧。


降价促销其实是一个双刃剑,很多人看到了他的好处,却没有看到他的伤害。伤害的是原价买的老用户,伤害的是本来就会买的人的收入减损,伤害的是产品的价格锚。只要一次促销,用户知道了以后,你的原价就再也没说服力了。因此降价促销只在你能确保这个带来的销量增长远大于这些折损的商誉价格。如果做不到,那最好就是定向优惠。你的促销价就不能公开给已经买了的人和已经是用户的人知道。


作者:独立开花卓富贵
来源:juejin.cn/post/7343132617967976500
收起阅读 »

想进国企,跳槽真的不要太频繁

想进国企,跳槽真的不要太频繁 去年内推的一个学弟,面试兜兜转转一个月,最终北京的领导还是把他挂了,因为觉得他跳槽是在太频繁了,担心稳定性不行。 其实这个学弟本身是非常优秀的,本科和研究生都毕业于985大学,学校期间实习的地方也都是腾讯、阿里、字节这样的大公司...
继续阅读 »

想进国企,跳槽真的不要太频繁


image.png


去年内推的一个学弟,面试兜兜转转一个月,最终北京的领导还是把他挂了,因为觉得他跳槽是在太频繁了,担心稳定性不行。


其实这个学弟本身是非常优秀的,本科和研究生都毕业于985大学,学校期间实习的地方也都是腾讯、阿里、字节这样的大公司,毕业后的第一份工作也是大家耳熟能详的某国有大银行的软开岗。


简历和履历都非常不错,但是不知道什么原因他却选择了毕业刚工作半年就裸辞,当我刚认识他的时候他以及在成都到处投简历找工作快一个月了。


虽然这种履历也不至于颗粒无收,但是比起他上一份工作的档次还是差了很多,并且也可能是在银行的科技岗被卷怕了,所以总跟我说想找一个稳定的地方呆上一段时间。


然而,遗憾的是我们这边北京的领导觉得他半年就离职十分不稳定,也对他关上了大门。


想要了解更多成都央国企招聘、内推、简历辅导、面试辅导等信息,欢迎关注知识星球【成都央国企指南】,帮助应届生、社会人士等了解成都央国企信息,可进行一对一简历辅导、职业规面试辅导等。


为什么国企这么在乎稳定性?


我记得当时面试来到这家公司的时候,招聘我的主任心里还很虚,因为我也是呆了一年就跳槽的,所以担心我过来心里落差大,呆不了多久。


好在当时我没有离职,所以心态很平和然后才跟这边把offer谈下来了,所以我想想如果当时我已经离职了的话,作为社招我可能就拿不到这个offer了吧。


那么国企为什么这么在乎稳定性呢,国企其实和私企不同(这里我说的是真国企,像什么科技子公司,有末尾淘汰还真的搞的不在我的讨论范围之内),不需要你作为个人有太大的能力和产出,更不需要把你压榨到极致。


本质上国企的项目是通过领导层的关系运作来的,不需要去市场是厮杀来抢一个项目,有些垄断行业这项目就得你们公司做,哪怕是拿到项目后外包出去,都得你们集团来牵头。


并且国企的领导和你一样,都是给国家打工,而且国企的升迁也不是唯业绩论成败,所以事情即使你干得没那么好对领导的影响也没那么大,不会搞你搞得太难看,除非你这个领导有精神疾病。


所以,一般垄断国企的稳定性还行,很多员工都是呆上好几年甚至数十年的,一方面是工作环境确实不错,没人难为你,另一方面就是在国企呆久了就确实失去了去外面厮杀的能力,也不敢跳槽。


工作的节奏也会比较慢,在国企你呆了半年可能项目方面才上手,在这种环境下,由于待遇也没有外面私企那么高,领导招一个人实际上是非常慎重的。


像这个学弟的半年一跳的情况,在国企领导眼里看起来可能觉得你都还没开始上手,怎么就跳槽了,那我招你进来会不会是瞎折腾,所以就选择敬而远之了。


如何在招聘的时候展示你的稳定性?


上面说了那么多,在国企的招聘当中,如果你能够恰到好处的展示你的稳定性的话,那么国企的领导可能会更加青睐你。主要可以从以下几个方面来展示你的稳定性:


第一、在当前城市已经定居或者有定居打算,如果你买了房子有了生存压力,并且打算扎根在这里的话,肯定就是一个加分项了,因为这样的人一般是不敢轻易跳槽的,所以领导很放心。


第二、能力其实不需要太强,在互联网、私企混了很久的人其实有一个误区,能力越强越好。其实国企的领导心里有数的,第一这里不需要什么高精尖技术,第二,能力太强的呆不了多久就跑了。所以,包括我在内面试的时候也不需要能力太强,或者那种觉得自己能力强就沾沾自喜的人。这些人有更好的去处,我们这小庙就不供这座大佛了,所以如果是真国企的岗位其实像什么阿里P8的还真不愿意要,除非是集团领导直接招进来,普通岗位招进来真怕你卷我。


第三、有女朋友在这边,我同时就是典型的为了女朋友从杭州跳槽到成都来的,所以有这个理由也会很放心,觉得你过来就跑不掉了。


第三、年龄还不大或者年龄稍大从一线城市回来,这样的人一般都会选择在当前的城市定居的,面试的时候如果表现出定居的意图那么也会有一定优势。


想进国企,真的不要随便跳槽


其实现在很多私企都很在乎稳定性,什么五年三跳、三年两跳的都会成为简历上的劣势而被无情拒绝。


虽然我觉得这不是一个好的事情,尤其是私企本身人员变动就频繁你还要求人家有稳定性,这不闹着玩吗?


但是如果你未来想着跳槽进入一个不卷的国企平稳降落,那么一定跳槽就不要太平凡,国企这方面的逻辑和私企完全不同,私企是无理取闹,但是国企是真的希望人员稳定一点儿。


无论什么情况都坚持一些,保证自己的简历不要花掉,不然像这位学弟一样被拒绝就是一件很难受的事情了。


The End


其实这个学弟还是拿到了四川九洲的offer,但是他拿不准到底要不要去,怕又是一个很卷的军工国企。


我是这样劝他的,其实哪里工作都差不多,重点是你要能扛住工作的压力不要因为一些莫名其妙的小问题,玻璃心就离职。


哪怕你等着公司裁你还能拿一波n+1赔偿呢,所以有地方去就先呆着,先找到工作结束失业状态再说,先上岸再考虑其他的。


最后,也衷心希望他可以找到合适的工作。




作者:浣熊say
来源:juejin.cn/post/7338721296866656296
收起阅读 »

从裁员到加入腾讯架构组,愿大家都能走出低谷

不知不觉已经加入腾讯某事业线的架构部门工作快半年了,今天来分享一下自己去年的裁员经历,希望能对大家有所启发和激励。 加入直播部门 我是2022年年初加入了公司的直播事业部,从事直播这块的后台开发内容。当时主要是想多些接触到直播这块的业务,运用自己学过的一些技术...
继续阅读 »

不知不觉已经加入腾讯某事业线的架构部门工作快半年了,今天来分享一下自己去年的裁员经历,希望能对大家有所启发和激励。


加入直播部门


我是2022年年初加入了公司的直播事业部,从事直播这块的后台开发内容。当时主要是想多些接触到直播这块的业务,运用自己学过的一些技术手段去解决高并发场景的一些问题。可以说在这个组里头学习到了很多有用的实战技巧,微服务拆分,分库分表,服务限流,降级,推荐系统,自研im系统,还有各种自研中间件,花了大概大半年的时间,把这块都自己吭哧吭哧地造了遍轮子,实践了一番,收获非常之大。


部门裁员


去年的2月底,通过一些小道消息得知,我所在的直播部门开始了裁员计划,并且自己因为只是刚加入这个项目组,于是便被列入了裁员的名单中了。不过其实离开也算是一种解脱,因为直播组的工作压力是非常大的,当时我们有10个产品经理,而后台开发只有5个人手。每个产品为了冲各自的kpi,每周都会出2-3个需求,拍下来一个人一周大概要并行做3-4个需求,做不完的就只好往后排期。小需求还好,有时候是一些大需求,流程复杂,还容易出错。


裁员通知


大概在2022年3月10号左右,当时我被喊到了“小黑屋”,人事和leader正式告知了我裁员的事情,然后也按照规定签署了N+1。


被裁员那天下午,当时在公司的窗台边上看着窗外的风景,感觉有一种久久不能释怀的解脱感和不舍感。自己从毕业就进到这家公司,如今正好满了4年,不知后边的路该如何是好。


8141708351261_.pic.jpg


同事离别


最后离别搬东西的那天,我和公司所有认识的同事都打了声招呼,尤其是之前带过我的两任领导,由衷感谢他们之前对我的照顾和提拔,能让我这几年学习到了许多。


当时和当初一起进公司的应届生伙伴们一起喝了一杯奈雪,聊起了当初一起加入公司,最后居然还能一起离开,真是有缘份,哈哈哈。(大家都在名单当中)也和几个关系很好的开发同事吃了一顿椰子鸡,聊了聊以前工作的趣事和一些技术话题(程序员的爱好,哈哈哈哈)。


几乎所有熟人都告别了一轮后,晚上便离开了公司大楼。


离职后生活调整


当时公司离职的同事有不少,所以大家也就一起组建了一个离职同事交流群。有些人在离职后去了旅游,有些人选择了回老家陪家人。当时我给自己放了一周的假,放空了思绪。经常晚上一个人到海边公园去跑步,多锻炼下身体,先把精神状态调整好。当时还买了乐刻健身一个月的会员,时不时到健身房撸撸铁。后边我把离职的事情告诉关系不错的几个同学,大伙时不时约几顿烧烤,爬山,跑步,各种活动安排了起来。


新的规划


刚离职的前几周,那会确实很舒服,每天都过得无忧无虑的。但是刚到四月初的时候,开始感觉不能再这么躺下去了,于是便开始新的规划。


早在2021年的时候,就已经开始尝试做各种副业赚取一些其他收入,到2023年的时候已经基本成型了,于是当时是尝试去继续做自己的副业工作。副业之一就是技术讲师,当时和好几个平台有签约合作。于是当时便萌生了一个idea,如果花几个月时间投入到副业的话,会有多大的收益。


于是当时的4,5,6月份几乎都把精力投入到了几门课程的研发当中,然后还报名了一个做运营的课程,学习了一些不同自媒体平台的运营手段。(现在回看,感觉当时的尝试是非常有意义的)
下边是当时那几个月在飞书的日程表记录记录图,因为怕自己忘记每天要做什么事情,所以每天早上都会提前规划好:


image.png


image.png


image.png


每天大概会花4-5个小时在课程录制上,然后剩余时间可能会看看电影,上上b站刷刷八股文面试题或者出门运动下啥的。


记得当时5,6月份的时候,在boss上简单投了一下,约到了几家小公司的面试。当时只是抱着一个试一试的心态去练练手。


开始海投求职


真正的海投应该是在7月份开始,当时动用了各种渠道,内推,boss直聘,前后投递了大概500份简历。前期先投小公司开始,一边投简历,一边优化简历的内容以及对技术知识的查漏补缺。前边面了大概3-4家小公司,基本都能面到2-3轮,大概就熟悉了面试的感觉后,后期便开始面一些中大型公司了。



  • 顺丰科技(压薪,谈薪挂)

  • 华润电商(二面没去)

  • 华润物业(后台开发,offer)

  • 跨越速运(后台开发,offer)

  • 迅雷网络(风控中台,二面挂)

  • tcl(基础架构组,二面没去)

  • 360(基础架构组,二面没去)

  • 大疆(简历挂)

  • 平安(业务开发,二面没去)

  • 乐信(简历挂)

  • 某证券交易所 (业务开发,二面没去)

  • 货拉拉(简历挂)

  • 某跨界电商独角兽公司(后台开发,offer)


前前后后面试了十几家公司,这么多家公司面下来发现,大部分问的内容都差不多,人渐渐会有一种面试的疲倦感。


当时拿到的三个offer,其中华润那边的福利和待遇是比较好的,但是也存在问题就是项目组是比较传统的,担心自己进去学不到太多东西。当时大概是八月初,有点纠结。


面试准备


光是一个7月,就面了有十余家,最高的频率有试过一天面五家公司。是的,你没看错,我也没编造,那段时间运气好,确实能约到很多面试,然后基本所有面试都是约了线上视频或者语音沟通。



  • 八股文


当时是在5,6月的时候,花了一些时间,专门重温了一份八股文笔记(b站上一些培训机构发的,大概10w字,确实有些帮助,能帮你很好地把不同技术点给系统化起来)。



  • 项目


然后简历这块主要是写了一个直播的项目,加了一些“三高”字眼的词藻去修饰了下。也在简历上写了自己的博客,开源项目,公众号这些东西。(在简历筛选中应该会有些帮助)



  • 算法


leecode也时不时刷一刷,保持下手感,我只刷了100道左右,一般面试都是从easy或者normal中挑选,hard就看运气了。



  • 心态


多运动,与朋友交流,心态健康,面试的时候发挥就会正常很多。


腾讯面试


记得那会是刚拿到三个offer还在纠结的第二天,当时把三个offer和几个认识的大佬聊了下 要如何选择,大佬们大多是建议去华润,毕竟大环境下求稳会更重要。原本是要下决定的了,然而在一天晚上,自己正在做饭的时候,忽然打开了一个电话☎️。


我接听了,对面是腾讯的hr,说有人推了我的简历,想约一轮面试看看有没有时间。我当时是有点懵的,因为自己前两天刚好在boss上投了腾讯的岗位,于是边爽快的答应了。


腾讯的面试jd上写的其实是比较含糊的,当我面完了一面的时候,问了下面试官这个岗位的职责才知道是腾讯的基础架构组。(内心有点意外和开心)


一面面试官不怎么问八股文 上来就是聊项目,然后问了很多直播里面的高并发处理方案(后来进去后才知道,这个面试官之前是腾讯那边的直播业务负责人,难怪直播这块的技术方案那么了解)。一面也问了些架构设计的问题,例如四百亿的聊天信息要如何设计存储架构,最后给了一道算法题要求电脑上写出来,好在以前有刷leecode的习惯,那天正常地写了出来。


二面大概是一面后的第三天,二面的面试官问了很多中间件的原理,以及自己以前做基础组件的开发经验,重点问了下im架构是如何实现的。因为之前有过十几家公司的面试经验,所以大部分回答起来都比较顺利。


三面是部门的副总经理面,这一轮的面试压力会比较大,对方会不断的否定你,然后让你现场优化设计方案。不过一切都好在有所准备,流程还算正常。最后还和我介绍了一下基础架构组的工作职责,以及大概定级。


四面是hr面了,大概问了下个人职业规划 ,学习方法,还有一些其他内容记不太清了,大概唠了半个小时吧。


前前后后腾讯这边的面试持续了两周左右时间,一共四轮,最后也谈了定级和薪资,并且顺利发了offer。


offer比对


可能会有朋友好奇,八月初拿了其他几家的offer,可以持有到腾讯面试结束吗?


不行的,当时其他几家公司的offer最久的也得在一周内回复,所以当时是放弃了已有的几个offer, 打算搏一搏,好在最后搏上了。


其实当时腾讯在面试过程中的时候,还有tcl,360,某证券公司,平安等在准备二面,也给自己留了几家其他公司面试机会的后路。


其他大厂有试过不


类似阿里,京东,美团,快手,字节,oppo,vivo这些大公司,之前也有尝试投过,但是简历基本都挂了,不过也可能和自己学历有关,三本软件工程。


从离职到后边重新步入职场工作,中间gap了大概五个月(正好也和之前的赔偿金顶上了),三月中旬离职,九月初入职tx。中间四五六月在忙副业,赚了一些些,然后七八月开始不停约面试,算是比较幸运地过渡下来了。


干副业会影响面试准备吗


这里我做的副业的内容是和主业相关的,当时是讲了一门直播相关的技术课程,这门课程的内容正好就是我在简历上所写的内容,所以其实所谓的给人讲课,就是变相的面试复习,同时还能锻炼自己表达能力。(视频授课)


没有工作后会焦虑吗


其实是会的,尤其是面试屡屡挫败的时候,一开始会打击人自信心,不过后边多试几次就感觉还好。


另外也好在副业帮我打发了大部分的时间,所以4,5,6月份的生活,生活节奏和上班差不多,所以整体感觉还好。


新环境工作感受



  • 卷:经常要加班到晚上九点后,好在是双休,所以一般周末会选择去运动,保证身体健康。

  • 技术收获很大:小组是专门做技术方向的,如监控 ,数仓,中台,自研组件,还有一些运维的活也要干,对自己的技术成长这块有着很巨大的帮助。

  • 程序员不能只懂技术,打交道的能力也是很重要的,尤其是跨部门协作,技术宣讲这些东西,都需要靠口才和个人魅力去达成。


作者:DannyIdea
来源:juejin.cn/post/7337489263877111842
收起阅读 »

2023年给一位团队成员绩效“打c”的经历

2023年作为疫情开放的第一个年份,国家整体的经济形势还处于低迷阶段。IT行业同样如此,各公司都保持着降本增效的节奏,企业招聘人才的需求明显放缓,有人力缺口的岗位都优先考虑内部人才的转岗。在这样的大环境下,IT行业的从业者们想要离职会更加谨慎,不会再如以前那样...
继续阅读 »

2023年作为疫情开放的第一个年份,国家整体的经济形势还处于低迷阶段。IT行业同样如此,各公司都保持着降本增效的节奏,企业招聘人才的需求明显放缓,有人力缺口的岗位都优先考虑内部人才的转岗。在这样的大环境下,IT行业的从业者们想要离职会更加谨慎,不会再如以前那样“老子干的不爽,就离职换个公司”。


即便如此,每个公司依然还会有一些人,总过得浑浑噩噩,需要别人踢一脚就走一步,不去主动承担和思考事情,只能做一些确定性很强和设计好的工作。2023年,我们团队就有这样的一名成员,最终不好的绩效,也只能落到他头上。


然而,最终和他进行绩效约谈的时候,他却完全不认可,表现出非常激烈的逆反情绪,认为他的职级不需要去承担过多的事情。而我作为他的直接管理者,这次约谈的过程显然不够成功,现在整体再复盘一下这个过程。


前提背景


员工背景: 进入公司已经超过三年,近一年由于部门变动转入我的团队。本身的职级较低,由于之前工作平平没有太多起色,所以一直也没有得到过晋升,而年龄却已经越来越大。


进入我的团队后,团队内年龄与其不相上下的成员,职级已比他高出较多。从而,也引起了他心态的失衡,总觉得公司亏欠他的,他的能力不应该得不到晋升。所以在工作时,只愿做自己职级内的事情,也不愿意承担更多。


过程管控


我作为他的直接管理者,发现问题后私下跟他聊过。跟他说过几次,他做事情太被动,工作时对外沟通经常带着个人情绪,需要更加积极正面的去承担事情。为了打消他的顾虑,也跟他说明了,只要你的工作能力有所提升,对团队有所帮助,我会尽量帮助你晋升。


然而,一个人心态的问题,是一个历史长期积累的过程。他并没有因为和我的几次沟通,就打破了自己的认知,对外依旧较封闭,对内能力又显得不足。而他自己却认识不到,总认为他在当前的职级上,已经足够了,除非公司让其晋升,不然他也不会付出更多。


为了打破这种僵硬的局面,作为管理者我安排了一项稍有困难的任务给他,这既是机会也是挑战。第一、让其认识到自身的不足;第二、如果他能够较好的完成任务,也就为后面的晋升提供了保障。


也就是这么一次任务,不但目的没有达到,最后还惹得双方都陷入了僵局。



这项任务还未开始3个月前,我就跟他说:要开始熟悉相关的业务和代码了,后面会有大的项目变更,需要提前做好准备。


前期我并没有明确说明,要交付什么产物。更多的是,给他自己空间,让他在一个相对宽松的时间内,把整体的业务和细节都了解清楚,能够在组内进行一次分享。


任务我已经给出去了,在项目开始前将近3个月的时间, 他并没有给到我任何反馈,也没有交付任何相关的文档。


随着时间的推移,项目开始启动了,基于这样的工作态度和结果,我本不打算让他再负责这个项目。但是上级管理者,也希望能够给予他一次机会,做好了能够为后面的晋升,提供较好的铺垫。


就是这样的安排,由于他前期没有较好的准备,后面在落地方案评审时漏洞百出,导致项目出现了延期的风险。所以最终不得不由我直接来接管项目,重新分配和协调各个研发人员,最终确保了项目的质量和进度。



约谈结果


对于这样的团队成员,既不能给团队带来正向的帮助,也不能让其自身得到成长。这是一个双输的局面,管理者要让团队保持正向的发展,就必须要勇于去解决这样的问题。


所以年度的绩效考核,就必须亮明你的态度,即使公司没有淘汰的指标,你也要去做那个坏人,把不合适的人从团队清除掉。只是,我没有想到这个过程如此艰难。


下面从他的视角,来反驳这个结果的几个观点:



  • 他的职级,只需要配合做好相应的开发任务就可以,不需要去主导事情。

  • 那个有挑战的项目,不管过程怎样,结果是好的,项目按时按质的上线了。

  • 给他不好的绩效,需要参照公司的标准,给出明确的原因。


然后,带着强烈的情绪说要去投诉,甚至要上升到CTO、CEO 那边。 投诉没有问题,我也表明了态度, 你可以向上申请表达自己的诉求, 但是我也会持有自己的观点和建议。


最终,当然也不会因为他的申诉就改变结果。只是,这个现状本应该在管理的过程中,就应该让其感知到,不要等到最后的环节,才让双方都陷入难堪的局面。


反思总结


作为一个管理者,要面对各式各样的研发人员。有的人优秀,上来就能够跟你站在一个视角看问题;有的人有潜力,需要你给出机会和试错空间,让其成长;有的人就该辞退,针对这些人,你尤其要做好备战。作为管理者,既要有开放和怀柔的心态去留住人才,也要有铁血的手腕去清退团队的毒瘤。


清退毒瘤,是一项艰难但必要的任务,如何去做呢?



  1. 评估情况: 评估对团队的影响,是否对团队的合作和效率产生负面影响,是否违反了团队的价值观和行为准则。要确保有足够的证据来支持你的决定。

  2. 沟通和反馈: 与他进行一对一沟通,明确表达你对他们行为的关注,并提供具体的例子。给予他们改进的机会,并讨论如何改变。

  3. 制定行动计划: 如果没有改善他们的行为,你需要制定一个行动计划。包括培训和指导。

  4. 寻求支持: 寻求其他团队成员和上级的支持。


作者:云游者
来源:juejin.cn/post/7341368001203699747
收起阅读 »

运维打工人,周末兼职送外卖的一天

运维打工人,周末兼职送外卖的一天 在那个不经意的周末,我决定尝试一份新的工作——为美团外卖做兼职配送员。这份工作对于一向规律生活的我来说,既是突破也是挑战。 早晨,城市的喧嚣还未完全苏醒,空气中带着几分凉意和宁静。准备好出发时,线上生产环境出现问题,协助处理。...
继续阅读 »

运维打工人,周末兼职送外卖的一天


在那个不经意的周末,我决定尝试一份新的工作——为美团外卖做兼职配送员。这份工作对于一向规律生活的我来说,既是突破也是挑战。


早晨,城市的喧嚣还未完全苏醒,空气中带着几分凉意和宁静。准备好出发时,线上生产环境出现问题,协助处理。


收拾好后,戴上头盔,骑上踏板车,开始了自己的第一次外卖配送之旅。


刚开始,我的心情既紧张又兴奋。手机里的订单提示声是今日的任务号角。第一份订单来自一公里外的一家外卖便利店。我快速地在地图上规划路线,开启高德导航,发动踏板车,朝着目的地出发。


123.jpg


由于便利店在园区里面,转了两圈没找到,这是就慌张了,这找不到店咋办了,没办法赶紧问下旁边的老手骑手,也就顺利找到了,便利店,进门问老板,美团104号好了嘛?老板手一指,在架子上自己看。核对没问题,点击已达到店,然后在点击已取货。


然后在导航去收获目的地,找到C栋,找到107门牌号,紧接敲门,说您好,美团外卖到了,并顺利的送达,然后点击已送达,第一单顺利完成,4.8元顺利到手。


其中的小插曲,送给一个顾客时,手机导航提示目的地,结果一看,周围都拆了。没办法给顾客打电话,加微信确认位置具体在哪里,送达时,还差三分钟,这单就要超时了。


1.jpg


配送过程中,我遇到了第一个难题:找不到店家在哪里,我的内心不禁生出些许焦虑。但很快,我调整心态,不懂不知道的地方,需要多多问人。


紧接着,第二份、第三份订单接踵而至。每一次出发和到达,每一条街道和巷弄,我开始逐渐熟悉。


7.jpg


6.jpg


日落时分,我结束了一天的工作。虽然身体有些疲惫,但内心充满了前所未有的充实感。这份工作让我体验到了不一样的人生角色,感受到了城市节奏背后的种种辛劳与甘甜


周末的兼职跑美团外卖,对我来说不仅是一份简单的工作,更是一段特别的人生经历。它教会了我坚持与责任,让我在忙碌中找到了属于自己的节奏,在逆风中学会了更加珍惜每一次到达。


最后实际周六跑了4个小时,周天跑了7个小时,一共跑了71公里,合计收获了137.80,已提现到账。


5.jpg


2.png


作者:平凡的运维之路
来源:juejin.cn/post/7341669201010425893
收起阅读 »

30岁之前透支,30岁之后还债。

前言 看到不少私信问我为啥没有更新了,我没有一一回复,实在是身体抱恙,心情沉重,加上应付于工作,周旋于家庭,自然挤压了自我空间。 今天思来想去,重新执键,决定久违地又一次写点分享,奉劝大家珍惜身体,愉悦生活。 愉悦二字说来容易,但各位都一样,奔波于现实,劳累于...
继续阅读 »

前言


看到不少私信问我为啥没有更新了,我没有一一回复,实在是身体抱恙,心情沉重,加上应付于工作,周旋于家庭,自然挤压了自我空间。


今天思来想去,重新执键,决定久违地又一次写点分享,奉劝大家珍惜身体,愉悦生活。


愉悦二字说来容易,但各位都一样,奔波于现实,劳累于生活,岂是三言两语就能改变的。


病来如山倒


我又病了,有些意外和突然的,令我措手不及。


一天早上我起来,脖子有些酸,就伸手揉揉捏捏,忽然发现脖颈左侧有一个肿块,仔细拿捏,发现竟然是在里面,而且硬邦邦的,伴有轻微的疼痛感。


当时早上对着镜子拍下来的肿块,我还保留了照片。


1.jpg


立马便一身冷汗冒出,我从未经历过这样的事情,去年身体毕竟出过问题,两相叠加之下,内心更是难以描述。


因为是周一,怀着忐忑的心情去上班了,接下来一直都有些神经兮兮,觉得自己身体出了大问题。


之前我有文章讲过自己去年其实已经检查出血脂的问题,停更半年之久,调养了一番,才真正感觉到身体有所恢复,根据我发文的日期可见一二。


恢复更新的这段时间,报复式地写作和分享,一度不知不觉地排到榜单第二,今天登录看了一下,居然还在月榜前三没下来,也是意外。


话说回来,人一旦身体冒出点病痛,整个心情都显得低沉萎靡,很快就能在方方面面反应出来。


我是硬着头皮上班的,抽空网上查了下好让自己有个心理准备。



百度一搜便是绝症,这是很多年前就知道的,但病急乱投医果然是人之本性,我毅然决然还是搜了。


然后,各种甲状腺之类的就来了,再搜,淋巴瘤也来了,再搜,好家伙,直接恶性肿瘤十有八九了。



面对未知而产生的接近绝望的心情,想必不少人有类似经验。


比如我,下意识先想到的竟然不是我是不是要完蛋了,而是想到自己是家中独子,父母年迈身体有恙,妻子操劳,孩子尚小,家中主要经济来源也是我。


我一旦倒下,实在不敢想,往深了一想各种负面因子都蜂拥而来。


我不知道有多少人和我的性格相似,就是身体出了这种未知的问题,一面觉得应该去医院看看,一面又怕折腾来去最后拿到最不可接受的结果,可能不知道反而能活久一点,大概就是这种心情了。


是的,我大体是个胆子还算大的人,也猛然间抗拒去医院了。


不去医院的结果,就是你每天都在意这个肿块,每天都要摸摸它是不是变小了,是不是消失了,每天都小心呵护着它,甚至还想对它说说话倾诉一下,像是自己偷养的小情人一样。


只盼着某天睡觉醒来,用手一摸,哈哈没有了这样。


我就是差不多一个月都这样惶惶不可终日地度过,直到这周六才被妻子赶去医院做了检查。


透支和还债



30岁之前透支,30岁之后还债。



说来好笑,摸到肿块的第二天吧,还有朋友私信找我合作,换做平时,我肯定欣然接受,并开始设计文稿。


但身体有问题,一切都索然无味了,再次真切地体会到这种被现实打碎一切欲望的撕裂感。


2.png


为什么我30岁之后身体慢慢开始出现各种问题,这两年我有静下心来思考过。


到底还是30岁之前透支太多了,30岁之后你依然养成30岁之前的生活习惯,无异于自杀行为。



我把身体比作一根橡皮筋,它大概只能扯那么长,我长期将它扯那么那么长,我以为它没事,直到有一次我将它扯那么那么那么长,砰的一声它就断了。


我们都无法知道自己的这根橡皮筋到底能扯多长,只要它没断,我们都觉得它还能扯很长,代价就是,只需断一次,你再也无法重来了。



30岁之前,我努力学习各种知识,熬夜那是家常便饭,睡一觉便生龙活虎。


我就像以前上学的三好学生一样,在学校我扎扎实实,放学了我还进补习班,补习班回来了我还上网学知识。


回头想想,真特么离谱啊,我上学都没这样,走上社会了竟然付出了之前在学校几倍的努力。


早知如此,我好好上学读书最后进入一个更优质的圈子,不就少走很多弯路了吗,但是谁又会听当年的老师和父母一番肺腑之言呢。


埋怨过去没有什么意义,只能偶尔借着都市小说幻想一下带着记忆重生回校园的自己。


细数下来,我30岁之前熬过的夜比我加的班还多,我不是天天加班,但好像真的天天熬夜。


可我身体一点问题都没有,我觉得自己不是那种被命运抛弃的人,内心一直这么侥幸,你是不是也和我一样呢。


30岁之后,该来的还是来了,32岁那年,我有一次咳嗽入院,反复高烧,退了又发烧,医生一度以为是新冠,或结核,或白血病什么的,后来全部检查了都不是,发现就是普通的肺部感染。


每天两瓶抗病毒的点滴,大概半个月才逐渐恢复,人都瘦脱相了,这是我人生头一次住院,躺在病床上像废人一样。


等到33岁也就是去年,偶然头晕了一次,那种眩晕,天旋地转,犯恶心,怎么站怎么坐怎么躺都不行,真正要死的感觉。


后面我一度以为是年纪轻轻得了高血压,结果查了下是血脂的问题,还不算严重,但继续下去很可能会变成一些心脑血管疾病。


我难以置信,这可都是老年病啊,我一个30几岁的程序员说来就来了?


调养半年多,肉眼可见身体有好转,我又开始没忍住熬夜了,想做自己的课题,想分享更多的东西,这些都要花时间,而且包括一些其他领域的内容,想得太多,自然花的时间就多。


一不小心就连续熬了一个多月,平均每晚都是2点左右躺下,有时中午还不午休,刷手机找素材。


终于,脖子上起了肿块,让我整个人都蒙圈了,觉得一切努力都是在玩弄自己,忽然间什么都没意思了。


我尽量把这种感受描述出来,希望你们能看明白,真切体会一二。


为什么30岁之后我一熬夜就有问题出现,说白了,30岁之前透支了已经,一来是身体负荷达到临界,二来养成了多年的坏习惯,一时想改还改不过来。



30岁之前真别玩弄自己的身体了xdm,橡皮筋断了就真断了,接不上了,接上了也没以前的弹性了。



健康取决于自律和心情



对于程序员来说,健康取决于两点:自律和心情。



30岁之前,请学会自律,学习时间自律,生活作息自律,一日三餐自律,养成这样的习惯,30岁之后的你会受益匪浅。


自律真的很难,我就是一个很难做到的人,我有倔强地适应过,却又悲哀地失败了。


就像你是一个歇斯底里的人,忽然让你温文尔雅,你又能坚持多久呢。


我用很多鸡汤说服过自己,对于已经30几岁的我来说,也只能维持一段时间。


想看的多,想玩的多,想学的也多,时间是真不够啊,真想向天再借五百年。


我应该算是幸运的那一类,至少我这般透支身体,我还活着,也没用余生去直面绝望。



我用这两年的身体故障给自己上了重要的一课,人死如灯灭。



如果能重来,我一定会学习时间规划,我一定会把每天的时间安排的好好的。


我一定会保证一日三餐不落下,少吃外卖,多吃水果蔬菜。


我一定会保证每晚充足的睡眠,早睡早起,绝不熬夜。


我一定会每天下班和放假抽出一些时间运动和锻炼。


我不是说给自己听的,因为我已经透支了。


我是说给在看文章的你们听的,还年轻点的,还没透支的,请用我的现在当做你可能更坏的未来,早点醒悟,为时不晚。


自律很难,但不自律可能等死,这个选择一点也不难。



工作压力大,作为程序员是避免不了的,所以我以前有劝过大家,薪水的重要性只占一半,你应该追寻一份薪水尚可,但压力一定在承受范围内的工作,这是我认为在国内对于程序员来说相对友好的途径。



我进入IT行业目前为止的整个生涯中,学习阶段听到过传智播客张孝祥老师的猝死,工作阶段听说过附近的4396游戏公司里面30多岁程序员猝死,今年又听到了左耳朵耗子先生的离世。


我想着,那一天,离我和你还有多远。


心情真的很重要,至少能快速反应在身体上。


当我这周六被妻子劝说去检查的时候,我内心一直是紧张的,妻子没去,就在家陪着孩子,跟我说你自己去吧,如果有坏消息就别回复了,等回来再说,如果没什么事那就发个微信。


我想我理解她的意思了,点了点头就骑车去了医院。


医院真不是什么好地方,我就是给医院干活的,我全身上下都讨厌这里。


最煎熬的时间是做彩超前的一个多小时,因为人太多,我得排队,盯着大屏上的号序,我脑子里想了很多事情,甚至连最坏的打算都想好了。


人就很奇怪,越是接近黑暗,越是能回忆起非常多的往事,连高中打篮球挥洒汗水的模样和搞笑的投篮姿势都能想起来。


喊到我的时候,我心跳了一下,然后麻木地进去了,躺下的时候,医生拿着仪器对着我的脖子扫描,此时的我是近一个月以来第一次内心平静,当真好奇怪的感觉。


随着医生一句:没什么事,就一个淋巴结。


犹如审判一般,我感觉一下无罪释放了。


当时听到这句话简直犹如天籁,这会儿想起来还感觉毛孔都在欢快地愉悦。


我问她不是什么肿瘤或甲状腺吧,她说不是,就一个正常的淋巴结,可能是炎症导致了增生,这种一般3个多月至半年才会完全消掉。


这是当时拍的结果


3.jpg


拿给主任医师看了之后,对方也说一点事没有,只是告诫我别再熬夜了。


我不知道人生还会给我几次机会,但我从20几岁到30几岁,都没有重视过这个问题,也没有认真思考过。


直到最近,我才发现,活着真好。


当晚是睡得最踏实的一晚,一点梦都没做,中途也没醒,一觉到天亮。


更离谱的是,早上我摸了一下脖子,竟然真的小了点,这才短短一天,说了都没人信。


我头一次相信,心情真的会影响身体,你心情好了,身体的器官和血液仿佛都欢腾了起来。


如何保持一个好心情,原来这般重要,我拿自己的身体给大家做实验了,有用!



希望大家每天在自律的基础上保持好心情,不负年华,不负自己。



总结


xdm,好好活着,快乐活着。


作者:程序员济癫
来源:juejin.cn/post/7300564263344128051
收起阅读 »

读《代码整洁之道》有感

最近读了一本书,名字大家都看到了:《代码整洁之道》,之前一直只是听说过这本书的大名,却一直没有进行拜读,最近想起来了就想着看一看,不看不要紧,看了之后就像吃了炫迈,根本停不下来。。。虽然这本书已经出版了十几年的时间,但里面的理论到现在为止也不过时。 有人也许...
继续阅读 »

image.png
最近读了一本书,名字大家都看到了:《代码整洁之道》,之前一直只是听说过这本书的大名,却一直没有进行拜读,最近想起来了就想着看一看,不看不要紧,看了之后就像吃了炫迈,根本停不下来。。。虽然这本书已经出版了十几年的时间,但里面的理论到现在为止也不过时。



有人也许会以为,关于代码的书有点儿落后于时代--代码不再是问题;我们应当关注模型和需求。确实,有人说过我们正在临近代码的终结点。很快,代码就会自动产生出来,不需要再人工编写。程序员完全没用了,因为商务人士可以从规约直接生成程序。扯淡!我们永远抛不掉代码,因为代码呈现了需求的细节。在某些层面上,这些细节无法被忽略或抽象,必须明确之。将需求明确到机器可以执行的细节程度,就是编程要做的事。而这种规约正是代码。



看这本书的那种感觉很奇妙,有时感觉作者说地真对!有时感觉作者骂地真对!有时感觉作者讽刺地真对!还有时看到作者列出的真实代码中的错误示例,再看到作者写出的优化后的代码,内心不禁在想:太妙了,代码本应这样啊!


没错,代码本应该是整洁的,也本应该是好理解、易扩展的!我们常说的设计模式也并不是一种炫技,而是几十年来的老前辈们总结出来的经验,是为了让你的代码更好维护的,是一种理所应当。


在工作中遇到烂代码的可能性是 100%,即使是很厉害的大佬写的代码,在不知情的情况下让你去看,看了一会后都会得出以下结论:“写的啥玩意啊,看都看不懂,乱七八糟的语法糖,考虑过后面工作的人么?什么设计模式,什么各种模块,直接写一块不好么?” 假设的可能有点夸张,但也都是人之常情。有时工作中遇到的烂代码是假的,可能是由于当前自己的技术水平不够,不理解;当然还有一部分可能真的是烂,但是这种情况下还是要做出一些改变!


现在让大家看几个月之前自己写的代码可能都会觉得写的一团糟,用当前的眼光来看可能会有更好的方式或方法来实现,如果你有这种想法的话,请付诸实践!不要等,哪怕是一个单词的拼写错误、一段本不应该写两遍的逻辑、一段没有进行格式化的代码。。。。亦或者是比较大规模的代码改动,改完之后可扩展性会更强,维护起来会更加容易。千万不要等,不要忍受当前的烂代码,代码本就是一直在重构的一个过程,没有哪段代码从出来就不改。下面这段话是书里的内容:



我们都曾经瞟一眼自己亲手造成的混乱,决定弃之而不顾,走向新一天。我们都曾经看到自己的烂程序居然能运行,然后断言能运行的烂程序总比什么都没有强。我们都曾经说过有朝一日再回头清理。当然,在那些日子里,我们都没听过勒布朗(LeBlanc)法则:稍后等于永不(Later equals never).



当然很多人会说:“项目中的屎山代码,我能在上面雕花已经很厉害了,还要干什么,即使我知道那块写的不好,但我也不会去动,因为现在它处于一个稳定的状态,如果我去修改了之后,出了问题全是自己背,吃力不讨好!”这也确实是很多人的现状,考虑的也不无道理,但在这里咱们单纯从代码的角度来看,从写代码的初心来看,早早的就背道而驰了。



代码格式不可忽略,必须严肃对待。代码格式关平沟通而沟通是专业开发者的头等大事。 或许你认为“让代码能工作”才是专业开发者的头等大事。然而,我希望本书能让你抛掉那种想法。你今天编写的功能,极有可能在下一版本中被修改,但代码的可读性却会对以后可能发生的修改行为产生深远影响。原始代码修改之后很久,其代码风格和可读性仍会影响到可维护性和扩展性。即便代码已不复存在,你的风格和律条仍存活下来。



我有代码洁癖,看不了没有格式的代码,看着有的项目中一个函数几百行甚至更多,里面各种重复逻辑,if/else不知道嵌套了多少层,表面看是逻辑复杂,再转念一想,为什么不用工厂、或者写一些别的类来简化下逻辑。这时肯定有人会站起来反对:“明明很简单的逻辑,非得使用什么设计模式,搞得一团乱还看不懂。。” 如果只是一个if/else,或者逻辑比较简单肯定没必要,但是逻辑复杂的情况下光if/else也足够将人搞晕,且当需求改变时代码变得难以维护。


我之前一直觉得写完代码格式化是正常的,是基本操作,但是工作中发现好像不是一个基本操作,格式化并不涉及到专业能力,而是态度,连格式化都懒得做,你说你写出的代码经过了严格的测试。。。。想起之前上学时老师经常说的一句话:作业会不会是能力问题,而做不做就是态度问题了。


说这些并没有什么恶意,仅是这本书的读后感,读完后就好像和作者已经是相识多年的老友,相视一笑。


作者:Zhujiang
来源:juejin.cn/post/7341019035186298915
收起阅读 »

如何成为领导眼中不可或缺的人

这篇文章主要还是阅读所感,总结出来共勉,不喜勿喷,也欢迎有不同意见的指教。 首先,主要是以问题起步,如何成为一个优秀的架构师? 这个问题主要分成两种情况,其一就是所谓的面霸架构师,其二则是领导眼中不可或缺的人。 第一种,只要经历过项目的架构,并且理解项目背后...
继续阅读 »

这篇文章主要还是阅读所感,总结出来共勉,不喜勿喷,也欢迎有不同意见的指教。



首先,主要是以问题起步,如何成为一个优秀的架构师?


这个问题主要分成两种情况,其一就是所谓的面霸架构师,其二则是领导眼中不可或缺的人。


第一种,只要经历过项目的架构,并且理解项目背后所要解决的场景问题,以及把里面所用到的技术背后的原理搞清楚,那么你就是一个面霸架构师,可是面霸架构师并不一定就是领导眼中不可或缺的人。那么问题就来到了,如何成为一个领导眼中不可或缺的人。


以下以一个大佬的真实经历来解答这个问题。



ps: 下文中的我指 xx 大佬。



无关职责,帮助领导解决技术难题


第一个经历,我工作第三年的时候,认识了一个老板。某个周六,他打电话给我,说他们的系统碰到了一个问题,做了某一个操作之后,整个页面就会冻结,怎么点都没有用,他们的技术人员没有头绪,客户也一直在催,让我赶紧帮忙看看。


我打开看了一下,的确是做了操作之后,整个界面都无法点击或者输入信息了,然后我重现了很多次问题,发现整个界面冻结的时候,好像颜色有点不一样,会不会是一个透明的浮层置顶了?最终确认,确实是 bug 造成浮层没有退出。


那么为什么他们的技术人员都没有头绪?因为他们主要是后端开发,js 工作经验比较少,而我的经历也属于偏向后端,可是我能跟领导说,这个问题不属于我的专业范围,因为我是做后端的吗?


领导并不会在乎你的职责是什么,领导喜欢的是可以帮他解决技术难题的人。



总结: 要有能够帮助领导解决技术难题的能力(无关职责)。



理解领导的非技术难题


第二个经历,这是我在外企当中碰到的一个问题。


有一天,公司的领导过来问我,"你有没有觉得我们的开发速度很慢?是不是我们的技术不行?"


"您能跟我详细说说,是哪些地方慢?"


"产品部的人跟我说,他们现在提一个需求,经常要好几个月才能上线,有时候一个简单改文字的需求都是这样。"


这个问题确实不好解释清楚,因为这次沟通一开始就不在一个维度上。开发人员认为,说开发速度慢,应该是指开始开发到最终上线的时间久。可是领导认为,一个需求从提出到最终上线的时间久,就是开发速度慢。


那么开发速度慢算是一个技术问题吗?可以算,也可以不算。那么最终如何解决?开发团队最终一起讨论列出了所有影响开发效率的问题,然后能用技术解决就用技术解决。


所以有时候领导跟你谈的问题并不是单纯的技术问题,你需要把领导的问题转化成技术可以解决的问题。



总结: 理解领导的非技术难题,并最终转化成技术可以解决的问题。



搞清楚领导对你的期望值


可能有人会想,开发效率低这种事情不应该找架构师,这是管理的问题。下面接着说第三个经历。xx 公司系统用了 4 年,架构相对比较老旧,然后有一个新的项目,需求比较多,一位架构师提议,趁着这次的需求把架构更新一下,


然后就跟领导仔细讨论了架构更新的代价和好处,最终达成了一致的意见。


可是任何一个项目都会有各种各样的变数,比如业务方的临时需求变更,再比如有些系统可以不用迁移,只需要对接一下,也会有有一部分人不熟悉新架构,就需要多花一点时间去学习,最终项目延期了。


某一次会议,领导说架构师不行,这次系统上线以后如果不稳定,就把架构师开了,主要还是因为项目延期了。开发也解释了一下不全是架构师的问题,还有一些需求变更,可是领导认为需求改动不大,不至于延期一两个月。然后开发团队私下商量着保住这个架构师,不能让他一个人担责。


后来一次聚餐,领导解释他的压力也很大,本来跟老板说好可以按时完成,结果拖了这么久。


事后团队回顾了一下,这件事情之所以是架构师担责,其实最重要的一个原因就是老板对架构师的期望值是什么,是开发效率,系统稳定性保障,还是复杂问题的突破?


所以整件事由架构师承担的原因就是,大家对架构师的期望值是不一样的。所以,作为架构师最重要的一点就是要明白公司对你的期望值。



总结: 明白公司或者领导对你的期望值。



最后


当然,以上经历并不能代表所有公司的评判标准,并且架构师的优秀也有很多维度可以讲,但是这三个故事可以给我们一些启发。



  1. 要有能够帮助领导解决技术难题的能力(无关职责)。

  2. 理解领导的非技术难题,并最终转化成技术可以解决的问题。

  3. 明白公司或者领导对你的期望值。


以上的三个要点,个人也比较赞同的。


作者:夕水
来源:juejin.cn/post/7340834858275389492
收起阅读 »

勇敢的人先拿到结果

上周许久未见的大学学长叫我出去喝酒,他这次来贵阳是为开分店的事情而来的,他比我高一个年级,在我毕业的时候,他就自己开始做生意了,短短两三年,到现在他已经开了七八个分店了,还在不断发展,并且加盟的人也不少,平均下来,现在每个月的收入也是很可观的。 对于我们这种末...
继续阅读 »

上周许久未见的大学学长叫我出去喝酒,他这次来贵阳是为开分店的事情而来的,他比我高一个年级,在我毕业的时候,他就自己开始做生意了,短短两三年,到现在他已经开了七八个分店了,还在不断发展,并且加盟的人也不少,平均下来,现在每个月的收入也是很可观的。


对于我们这种末流二本院校毕业的学生,特别还是在贵州这个经济相对比较落后的地区,拿到这个成绩还是挺厉害的,并且这个收入并不是固定的,还是不断增长。


学长是学市场营销的,这也算是个天坑专业,所以那会他就知道自己将来肯定是从事不了这个行业的,所以自己就在宿舍开了一个小卖部,每天下课后就骑着电瓶车去送货,虽然每个月赚不了多少钱,但是对于做生意这一块,他的思维肯定是得到了锻炼。


因为我们是在广西读书,所以螺蛳粉就比较多,在毕业后,他就去柳州考察做螺蛳粉,联系好各种渠道后,回到贵州就直接开干。


因为那会贵州的各个市里面卖螺蛳粉的还很少,并且没有特色和品牌效应,所以自己就先设计名称,logo,最后先开了一个店铺,自己亲自下厨,因为比较有特色,一个月直接干到了全市螺蛳粉餐饮销量的第二名。


随后又开了第二家,第三家......别人在看到他赚了钱后,其它市区的人也纷纷向他学习,他自己就收加盟费用,现在他要做的事情就是玩,还有考察门店,然后扩展。


从他的事迹中,我说两个点。


勇于放弃


对于很多人而言,读书的目的就是为了找一份稳定的工作,最好是体制内。


如果你读完大学后出去做销售,做生意,那么对于你身边的很多人而言,他们会觉得你这个大学白读了,因为在他们眼中,只有坐在办公室里面才是最体面了。


你和他说做生意,创业这些东西,他会给你说:这些不稳,以后没有退休工资。


但是如果你真听他们的,那么后面后悔的一定是你。


就像学长,如果他也和别人一样毕业后回到自己那地方加入考编大军,那么他现在肯定和别人一样,也在背书,焦虑,但是他选择了其它的路。


这时候有些人就会抬杠:考上了就能吃一辈子,而你做生意如果运气不好那么就直接亏光,到时候你就知道编制的香了。


这也是很多人的通病。


我觉得如果一件事情你看不到希望,就别过于去迷恋它,舍不得它,不然会被它束缚,比如学历,经验等等。


敢想敢干


可能你会觉得他家里应该有底子的,不然毕业后怎么就能开店。


但是我们问一下自己,就算你家里有底子,毕业后就给你十万块让你开店,你觉得你行吗?恐怕大部分人都不知道自己该做什么吧。


首先躬身入局本身就是一件很难的事情,我们多数人能够拼命上班,但是如果让你脱离平台去自己干一件事就比登天还难。


因为你在公司有别人给你安排好,你去做就行了,换句话来说,你就是个干苦力的,真让你去谈判,去闯市场,大多数人是没这个能力的。


这也是一种损失厌恶心态,因为你怕自己花时间去做,到后面不仅亏了钱,还把自己弄得很累,而安安稳稳打工不一样,它是“稳赚不赔”的。


但是这个世界上很难有稳赚不赔的东西,就说安安稳稳打工拿工资,但是工资不高,那一定是在亏着走的,除非你觉得自己的时间毫无价值,那么就是赚的。


作者:苏格拉的底牌
来源:juejin.cn/post/7340898858556178432
收起阅读 »