2025-05-08
距离 Qwen3 发布 (2025.4.29) 已经过去一周多。
很多追热点的文章也早也发布完成。
所谓内行看门道,外行看热闹。
我们透过新闻看到的,多数也就只是热闹:今天这个模型发布,杀疯了;明天那个模型发布,秒天秒地秒空气。
这一次,作为一名外行但又不那么外行的程序员,我决定静下心来:
从最初的源头:Qwen3 的评测跑分数据入手。
结合评测官方最新的排行榜,对 Qwen3 真实的性能做一次完整的复盘。
试试窥一窥内行的门道,看看 Qwen3 是否真如传闻的那般沸腾?
2025-04-29
多大算大龄?
小明 18 岁高中毕业就开始工作,30 岁,就已经工作了 12 年。
小马 26 岁研究生毕业,30 岁,才不过工作 4 年的小喽啰。
小王 30 岁博士生毕业,30 岁,甚至都还没开始工作。
同样是九几年出生,小欢晚上了两年学,小石一不小心多读了几年书,就来到了所谓的 “大龄”危机。
2025-04-13
以 Cursor 为代表的 AI IDE,带来了数字世界建设成本的大幅降低,这在数次技术变革中,都可以说是一个非常好的兆头。
而这其中,程序员作为原本数字世界的建设者: y = 2x + 1
,简单粗暴的公式,是我目前对 Cursor 增幅的答案。
其中,x 代码程序员当前的月薪,y 是 Cursor 加成后的月薪。
乘 2,表示原本能力越高的程序员,增幅越大。
加 1,表示对所有人的加成,0 基础,现在也可以充当 1w 月薪的程序员。
2025-03-25
今天一觉醒来,又被国运级产品刷屏了。
这次是 deepseekv3 0324 版本,模型是 3 月 24 晚上开源的,刷屏是 3.25 凌晨,不知道多少自媒体熬夜开更。
在现在的这个信息爆炸,自媒体的话,夸张的嫌疑会高一些。
2025-03-21
之前写了一篇关于即便付费,我也还是选择 Cursor 的文章。
有人喜欢,有人觉得太浅,觉得我选择的理由太过粗暴。
刚好也用了一段时间的 Cursor,就再来对两款工具进行一个更深度的对比。
2025-03-10
2025-03-07
如果说 IDE 是利剑,那么 AI 可能更多扮演的是剑灵的角色 – 芋仔
2025-03-03
总是嘲笑别人起了个大早,赶了个晚集。其实我自己也是。
我们程序员群体,应该是第一个接触 chatgpt 的群体,但是那会更多的评价是不过如此,体验体验也就这样了。
对待 cursor 也是一样的道理,我本人应该也是 cursor 非常早期的用户,最开始也是不过如此,直到现在:产品经理、设计师都开始挑战 2 天上线人生小程序了,我才决定尝试从公司配的 github copilot 迈出。
那么面对新的编程工具,首先摆在面前的就是: Cursor 和 Trae 了。

两款工具的选择,就是迈出 AI 编程的第一步。
在不算特别深度的体验后,即便 Cursor 需要付费,我也还是选择了 Cursor。
核心的原因在于两点:
- 代码保密性问题
这一点可谓是非常核心,公司的代码外传,在任何一家软件开发公司,都是不容置疑的红线。
在如今一言不合就裁员的情况下,被人抓住把柄,那简直就是羊入虎口,正愁怎么不发 n+1 呢,你就送上门了(你人还怪好的嘞)。
Cursor 在使用之初,就会询问,是否使用隐私模式。

有了这一条,才敢使用它打开公司的代码。
而 Trae 在初次使用的过程中完全没有提及,上传与否,完全不知情,作为用户,作为要打开公司代码的程序员,我是不太敢用的。
- 新手引导
对于程序员来讲,写代码的 AI 工具,对我们来讲也几乎是全新的,我们关心的问题其实很简单:
怎么样针对片段代码进行调整?怎么样结合上下文进行调整?
而让我付费的点也很重要:你的代码补全比 copilot 好在哪了?我为啥要付费。
在这一点上,Cursor 做的一个新手引导就非常棒,这个引导不阻塞,也不明显,对于程序员这个群体,可谓是恰到好处。(此处忘记截图)。
在这个引导中,非常丝滑的解答了我这几个问题:
如何对片段代码调整?选中目标代码,command + I 即可;
如何结合上下文调整,问题说完之后不直接按 enter, 而是 command + enter; (更新太快了,现在应该是不需要了)
代码补全比 copilot 好在哪里了?强大的 tab 补全,除了补全当前位置的代码,还会预测下一个位置
而这其中,tab 补全,对于效率提升,可谓是直接起飞。也是我付费 Cursor 最主要的点,毕竟,目前的阶段,人工写代码的时间还是更多的,更智能的补全,是目前提效最可观的地方。
以上两点,就是我选择 Cursor 最主要的原因。
ps: 很多独立开发者会标记:程序员是”铁公鸡”,其实也不然,也有可能只是付费阈值比较高罢了。
最后,别忘了关注我公众号:程序员芋仔。每周也可能每月更新一篇程序员大佬分析。
AI程序员时代,我也组建了一个前端抱团取暖群,欢迎加我微信来撩:mxb151,加群备注简单的自我介绍和加群哦。
2025-01-27
2025-01-10
2024-12-24
你以为的糖衣,可能还是枚炮弹 — 芋仔
我本来以为我早就超脱于消费主义陷阱了,直到我意识到,我以为的只是我以为。
我周围见过三种人:
- 我花超过未来能力范围的钱
可能会从发工资能还上,到分期还,到贷款还,最终心力交瘁,父母买单,自己潜意识负罪,没个大几年走不出来。
更不论这其中费率利率的字眼,不仔细琢磨只会被拿捏的死死的。
- 我花我未来能力范围内的钱
超前消费,能还上,但是往往空档期存在余额为0的情况,心也很累,在职场上只能唯唯诺诺,畏手畏脚
- 我就薅一下羊毛,分期,贷款都不碰
羊毛是薅上了,真金白银也是实打实花出去了。而且信用卡最隐晦的一条,就是,你花钱的时候,没有余额减少的过程。
这个可能不太明显,我用储蓄卡做对比:你的余额是会减少的,但是信用卡,他的数字是增加的(账单),看似一模一样,实则精准拿捏人性。
而最后这一点,是我最近才意识到的,我以为的糖衣羊毛,实际上也是一枚炮弹,也是写这篇文章的最初来源。
上大学了,花父母钱交学费可以,谈恋爱不行
不知道是哪里灌输的这种小男子主义思想,我在大学谈恋爱的时候,就不想花父母要一分钱。
“父母的钱,用来交学费可以,自己享受,谈恋爱,不行。”
这个观念不论正确与否,那就是我在大学时的真实情感。
我还记得跟女朋友(现在是我老婆)吃的那一顿面,是在某个商场负一楼的苏式面馆,味道完全没印象,因为那一顿之后,我的奖学金就见底了。
一顿唏嘘之后,就开启了发传单各种兼职活动,街边发,进宿舍楼发,推荐办卡,被学弟耻笑,也不敢跟同学讲。
好在后来专业优势,掌握了一技之长,开了个淘宝店接一些 FPGA 软件开发的单子,因为涉及到硬件,当时还是蓝海,大钱谈不上,但是足够两个大学生,度过还算体面的学生时代。
那时没有这么多记账软件,我就用笔记本记,今天 100,明天 50,有时候运气好,国外学生的单子几千也有,但是都是血汗钱。
当我一笔一画,记下 50:花了一个小时, 100:花了一天,甚至 20:花了半个小时 的时候,就知道了:
“血汗钱,是一个象形词”
也正因如此,花钱的时候,其实会缩手缩脚,不是害怕,是肉疼。
“那花的不是钱,是我的血汗”
到现在我还会记得,大学毕业厦门旅游,美团1块钱团购被老板说,街上100块都没有舍得给我和老婆买的半只芝士烤龙虾,即便后来吃到更好的,也还是会惦记:那个苦了自己和老婆的龙虾,那个不敢跟老板对骂的自己。
马上就有工资了,毕业旅行搞起来,钱不够?某呗搞起,毕业就一次
研究生毕业时,由于有大厂实习的经历,拿到了一份当时薪资还可观的 offer,20k。
分分钟就飘了,信用卡办起来,某呗搞起。
毕业就一次,求婚就一次,必须国外,必须浪漫。
所以还没毕业,就透支了信用卡,日本关东关西走一遭,switch,refa 安排上,也吃了最贵的一顿:蟹道乐。
这一趟,淘宝接单的钱基本已经见底,还有某呗一些欠款。工资一发,配合上房租等等,第一个月存款结余:-xxx。
之所以是 xxx,一方面确实记不得了,另一方面,由于多张信用卡,以及花呗,本期账单,未出账单,也让我一度没摸清楚,自己到底欠了多少钱。
抱着下个月发工资就能还上的心态,我选择了去巴厘岛求婚,酒店必须是带泳池的,求婚场地必须是浪漫的,小费几百几百的给,一趟下来,几个 w 又没了。
这次回去,我擦,钱好像还不上了?
至此,超前消费梦觉醒,饶是以 20k 的工资,也是耗费了数月才扭亏为正,有多少存款,办多少事,绝对不超前消费。
这一过程,好在我迅速意识到这个陷阱,周围不少同学陷进去,还着看似低费率实则利率需要乘以2的信用卡分期。直到压的喘不过气来,父母兜底,自己陷入无尽的内耗和羞愧。
不过,我虽然快速从这个陷阱中跳出,但是依旧保留了信用卡消费的习惯,毕竟存款是有利息的呀,信用卡,除了免息,还有各种羊毛呢。
但是,你以为的糖衣,其实也是炮弹。这一点,我在多年之后,某个清晨突然才意识到。
xx信用卡,半价吃午餐,返现1%
信用卡优惠,什么疯狂星期四,x行星期五,半价吃晚餐,办卡送行李箱,积分换烤箱。
薅羊毛的快乐确实无以言表,那会椒色(人均100),我们几个信用卡用户,人均10块各种大菜硬菜,半年加了10kg,我现在都觉得不可思议,10块的工作餐,吃蟹黄豆腐,吃蛋黄茄子,吃水煮肉片。
享受着薅羊毛的快乐,虽然都有优惠,但是花出去的,确确实实是口袋里的真金白银。
我以为我去除了炮弹,只留糖衣,但是实际上,这些糖衣钝化了我消费的意识。
这一钝化,就是5年,直到如今才意识到,信用卡的消费,账单数字是增加的,存款消费,数字是减少的。
这种增加的感觉,一定程度上,钝化了消费的意识,而羊毛的快乐,降低了冲动消费的悔意。
即便曾经也是100,50,20挣钱的我,也依旧沉溺其中,毕竟仔细算来,这么几年赚的也有不少个了,但是实际存款却并非如此。这其中,这些羊毛的功劳可着实不小。
唯有自渡
以上,便是我关于金钱的一些故事了。
以前的人,最多月光也就罢了,如今深陷分期、借贷泥潭的,才是真的牛马且痛苦。
希望能帮助大家尽早明白这个道理吧,万般皆苦,唯有自渡!
2024-12-09
行路难!行路难!多歧路,今安在?—李白
大家好,我是芋仔。我正在尝试每周分析一个程序员大佬,到现在已经分析了11个程序员大佬。系列在向程序员大佬学习, 嫌多不想看的,可以看分析了11个大佬后,我悟出了这些”技巧”
这期是: 小林coding。
2024-11-13
书读百遍,其义自现—晋·陈寿
大家好,我是程序员芋仔,我正在尝试每周分析一个程序员大佬的经历和副业。到目前为止已经分析了11个程序员。
本文便是我分析了这些大佬的的文章和经历之后,悟到的一些关于程序员在转型自媒体、打造个人IP、以技术输出为主探索副业的方法和技巧。
2024-10-27
长江后浪推前浪,一代新人赶旧人 — 增广贤人
大家好,我是芋仔,目前在尝试每周分析一个程序员大佬,到现在已经分析了10个大佬。
这期是moment,一位最近2年才开始输出,但是数量质量都很高的后起之秀。
2024-10-21
往者不可谏,来者犹可追 — 《论语·微子》
大家好,我是芋仔。我正在尝试每周分析一个程序员大佬,到现在已经分析了9个程序员大佬。这期是: 这波能反杀。
2024-10-14
不识庐山真面目,只缘身在此山中 — 苏轼。
大家好,我是芋仔,我正在尝试每周分析一个程序员大佬,到现在已经分析了8个程序员大佬。这期是死月。
2024-09-30
大家好,我是芋仔。
这篇想和大家分享一下,一个抠门的程序员和一个免费的AI大模型的故事。
“抠门程序员<–>免费大模型”,让我看看,能擦出什么火花。
2024-09-23
大家好,我是芋仔,这是 分析大佬系列 的第七篇:江湖人称 “鸡汤教主” 的冴羽老师。
分析完他的文章,我想说他是一个三”高”老师:高度自律,高度专注,高度有规划。为什么这么说,请听我慢慢道来。
2024-09-19
前端双越老师,大名鼎鼎的 wangEditor 作者。而 wangEditor 从v2,v3 到 v4,v5, 到停止维护,再到如今无人接手,不禁令人唏嘘。
今天这篇文章,就想和大家分享下前开源项目wangEditor维护者,自由职业者—前端双越老师的故事。
2024-09-18
大家好,我是程序员芋仔。
之前几篇分析了鱼皮,java3y,敖丙,光神,这次也终归是轮到了卡颂老师(欢迎去我同名公众号: 程序员芋仔,查看合集哦)。
2024-09-12
光神,不多说了吧,自由职业者,掘金小册专业户,硬生生靠技术输出走出了一条自己的路,人如其名,堪称程序员之光。

今天就以一个旁观者的角度,来看一下光神,从开发转型自由职业的路径。
2024-09-09
敖丙,应该绝大部分互联网行业的人都不会陌生吧,做后端的,我一个做前端的都听过,可以说是火的一塌胡涂了。
网红,裸辞,财富自由,标题党,生活博主,当这些标签都集中到一个人身上的时候,事情就变的有趣起来了。
2024-09-05
越是贪图圆满,越是搜不干净 — 黑神话悟空
大家好,我是程序员芋仔,今天这篇文章,主要拆解一下Java3y在掘金上的文章,试图看看这位拥有4w粉丝的大佬的成长轨迹和发文规律。
2024-09-04
别人在真实的世界里做生意,你在虚幻的世界里打游戏 — 某p9黑眼圈产品
大家好,我是程序员芋仔,今天这篇文章,主要拆解一下程序员鱼皮在掘金上的文章,试图看看这位在编程领域比较知名的知识分享者的成长轨迹和发文规律。
2024-08-26
这世间本就没有什么公平,有的,也不过就是些许灵光。剩下的,生来有就有,不过没有也无妨 – 不知名的小孩。
大家好,我是程序员芋仔。今天想和大家分享的是:我的公式化前端自学之路。在如今这个套路盛行,内卷严重的大环境下,一切皆可公式化。而所谓进大厂的捷径,也就在这只言片语中,且听我慢慢道来。
2024-05-09
大家好,我是程序员晓博,目前从事前端行业已经有将近 6年。这六年,从最初的互联网鼎盛时期,到今年是未来十年内最好的一年,再到疫情时期的回暖,再到如今年年都喊寒冬的寒冬。从最初的 20k,到最近的一份 50k 的工作,再到如今的 “政府补贴” 2k,可谓是感悟颇多。
刚好最近 gap 一段时间,有所空闲,就整理下这几年的经历以及我所看到的行业的兴衰。
2024-04-16
大家好,我是程序员马晓博,目前从事前端行业已有5年有余,而近期由于被裁员有一段时间,也开始回顾自己的过往,发现自己以前在职场中,做过不少傻事,这里就写篇文章来记录下。曾经的犯傻已不可避免,索性公之于众,坦然面对。
ps: 像一直戴工牌,故意露个工牌带子在外面就不说了,谁还没年轻过呢?还真谁也别笑话谁哈哈。
2024-02-03
半年前,我第一次成为了二面面试官。这段经历不仅让我,一个曾经的候选人,对许多问题有了更新的理解,也逐渐澄清了我之前在面试过程中的那些困惑。高频次的面试,也使得我对于自己,对于面试这一行为本身,有了深刻的反思和新的认识。我也希望通过分享这些体会,能为那些即将踏上这段旅程的人提供一些启示和帮助。
明明聊的很开心,算法题也做出来了,却没有后续了?
这应该是很多同学在二面的时候遇到的问题。一般来讲,一面完成了基础知识的考察,二面就是你将来的直属上级。
也正是由于二面会是你入职之后的直属上级,这种情况才更容易发生,明明聊的很开心,算法题也做出来了,却没有后续。
从我担任二面面试官的经验来言,因为考虑到候选人入职之后,将是我的直接下属,所以,考察的关键点并不仅仅在于技术层面,性格是否匹配,处事风格如何,过往经历是否匹配,学习能力如何,也是决定是否通过的重点。
除此之外,聊的开心,也并不等于技术过关。
由于工作经验和年限不同,候选人和面试官,往往在技术视野上存在一定的 gap。而项目经验的不同,也会导致候选人和面试官在技术的了解上存在偏差,双方熟悉的领域并不相同。
碰到有类似的项目经验的面试官,那么在深度上,往往会深挖,这一过程中,候选人可能会感觉良好,觉得问对了,觉得聊的比较开心。
而在面试官的角度,可能并不会认同,由于技术视野和技术深度的偏差,一旦候选人达不到预期的深度或方案上没有自己的思考,可能会认为候选人在技术方案和深度上,都有待加强。
当然,除此之外,还有很多原因会导致没有后续(不过 hc 不足,有更好的候选人等,这些其实一般不会发生在二面,往往会发生在 hr 面之后),上述也仅仅只是我个人作为面试官的一些想法。
这面试官问的问题怎么这么奇怪?这问题有答案吗?
不知道有没有同学遇到过,面试官在聊了项目之后,会抛出一个非常开放的问题,有可能是项目的延伸,有可能是项目的未来规划,也有可能是一个不好实现的问题。
比如:如何在 vue 里面使用 react 组件,react 能够使用 vuex 吗这种天马行空的问题 (当然,这个问题纯属示例,一般都会和项目相关,比如如果重构,你会多出哪些考虑,能不能用另一种方案实现它)。
这里的背后,作为面试官一般是这样的心理活动,和候选人这个项目聊的还不错,深度也还 ok,姑且问个开放性的问题,看看随机应变的能力和创新性吧。
遇到这样的情况,其实也很简单了,面试官要的并不是一个准确的答案,甚至有可能问题本身就有问题。
此时,就大开脑洞,也别管能不能实现,正确与否,按照你的想法,天马行空也好,讨论问题也罢,聊就对了。
你有遇到过什么困难或者有技术难度的问题吗?
我自己作为候选人被面试的时候,有时候会被问到这个问题。
当时的内心 os 真的是,你问这么虚的问题,真不靠谱,敢不敢问点实在的。
当我成为面试官之后,我才明白,这个问题背后的意思(当然,这仅仅代表部分情况并非全部)。
往往会在聊了一会项目之后,问出这个问题。
这里其实要注意了,问出这个问题,大概率意味着,前面的项目咱们都聊过了,在我的视角下,可能不是太有挑战性,技术上复杂度一般,当然,也可能是因为咱们项目经验的差别,导致我看不出你做的项目的复杂度。
此时,问出这个问题,让候选人自己把困难或者项目的复杂度抛出来,来避免由于我自己的判断导致错误估计了候选人的技术实力。
一般一到两年经验的同学,被问到这个问题还算正常,因为一般来讲,这个年限的同学做的事情都比较基础。而如果是三到五年的同学,那么就需要看看是否自己简历上的项目描述是否有突出复杂性和难度。
要应对这个问题,就必须上点技术复杂度了。如果业务复杂,可以讲述业务的情况和场景,如果技术复杂,那么可以看看有哪些你认为复杂的点没有聊到,可以再聊聊。
如果业务确实不复杂,那么可以聊聊看过的源码,或者自己平时钻研的一些问题或者当下热门的话题,比如之前 react18 的 renderToPipeableStream 和传统 ssr 的区别,或者前一段时间 vue 作者认为 react 文档存在让开发者自行 pua 的情况的讨论。
这里的核心,就在于突出自己的技术深度以及对各种方案背后的思考。
那到底什么算深度呢?
提到深度,如果是以前的我,必然会反驳,前端,就是画画页面,有什么深度可以说呢?
但是实际上,大家还是低估了自己工作的复杂度,画页面的简单,仅仅只是因为那些复杂的东西,其他同学在底层都处理掉了。
在一个成熟的前端团队中,工具层面的复杂度基本都在底层被一些同学或者一些组进行了解决。
比如:资源文件的缓存处理,html 文件一般进行协商缓存或者不缓存,而 js、css 文件一般使用强缓存。这些在部署平台就进行了处理,从我面试的候选人来讲,知道协商缓存强缓存的很多,涉及的几个头背的滚瓜烂熟,但是他们的具体用途,往往会含糊不清有所犹豫。
再比如组件库,基本上大家都在用,那么组件库是如何实现按需加载的?或者你的项目中,组件库是否是正常按需加载的吗?组件库的组件,应该提供哪些打包产物呢?你的项目中又是什么样的产物呢?对于样式文件,有哪些处理方案呢?各自的优劣如何?
再比如,项目的打包产物,是否还需要对 promise, async/await 这些语法进行 polyfill,2024 年了,我们的 babel 还有必要把 es6 语法转为 es5 吗?
而更底层的复杂度,从 Jquery, 到 react, vue,再到 svelte, solid 等声明式框架,被这些更底层的框架所掩盖。
那么回到深度,对于做业务的同学,确实不太会对构建打包,组件库、脚手架建设有那么多的了解。但是业务同学,是需要对整个项目的技术选型,性能优化,代码可维护性负一定的责任的。
这里我也只能结合我自己的经验聊一聊深度,并不具有代表性。
比如常见的 react 中的多次渲染如何优化,为什么需要全局状态管理,context 如何避免不必要的渲染,对于 redux 有多少了解,它的中间件思想可以拿出来用到项目中吗?这是我在给组内设计一款合适的状态管理时做的思考,在后来准备面试的时候就做了更多相关的了解。
再比如一些项目本身,就有一定的复杂度,比如我之前做的可视化埋点平台,涉及到一些生僻 api 使用,iframe 通信的设计,以及 babel 插件、webpack 插件等来稳定 xpath 的开发。而这个技术项目,本身也是在我们运营活动的场景下所演化出来的一个平台。
这里建议候选者,对自己的项目一定要进行深挖,涉及到的相关知识点,务必要吃透。比如写了在用 redux,那么势必就需要对其原理有比较多的了解。
本身面试双方信息就是不对等的,面试官一旦在你的优势项目中,发现深入度和思考还不如自己初看这个项目时的思考,将会是非常大的一个减分项。
结语
以上,便是我的一些感悟和思考。
其实这半年的时间,于我而言,也可以说是一场对面试去魅的过程。
站在面试官的角度去实际同候选人交流,有时候就像遇到过去的自己。也很快就理解了以前的我,单纯作为候选人的时候的诸多困惑。
希望本文的一些解答,能够帮助大家对与面试有更好的理解。也祝大家在新的一年里,都有更好的 offer!
2024-01-27
我们所有人都被一只手推着,在一条名为人生的路上狂飙。 –不知名的小孩。
2023 年,我经历了两次裁员,一次是在网易,属于意料之中,一次是在前司,属于意料之外。说实话,可以说是打乱了我原本的职业规划,而今年也恰好是我的而立之年,所以写篇文章来分享记录下这一年的心路历程。
不得不说,时间过的是真的很快,去年的 年终随笔 都还历历在目。转瞬之间,就到了 2023 年结束的日子。
2023-06-29
这篇文章主要记录下最近面试中,出现超高频次的异步流程控制题。这类型题目,没做过的很容易掉坑里,而做不出来,基本上面试就拜拜了。
本文主要分为三道题目(都是新鲜的题目哦),前两题都是控制并发数量的题目,相对高频,第三道是控制并发执行的顺序题,相对低频但是很有实用价值。好了,直接上题。
2023-06-06
前一段时间一直在面试,因为做过状态管理相关的事情,所以在聊到 redux 时,提到了一行代码实现 redux,所以就有了后续的问题:
能一行代码实现下 redux 吗?
能再实现下 redux 的中间件吗?
能说说怎么支持异步吗?
能让普通函数也享受下中间件吗?
由于 redux 也确实是比较久远但是经典的库了,事后我趁此机会也算是好好回顾了一下 redux,也发现了其中的一些优秀设计,故有了本篇文章。
2023-05-24
这个问题来自于我在网上搜索的时候,基本上清一色的翻译官网的函数重载的章节的内容,对于我想要的箭头函数的重载没有太多帮助。包括官网,其实也没有非常明确的说明箭头函数该如何重载。
2023-04-25
肝了一个月,刷了5遍 TS类型体操,输出了这份 TS 类型体操通关手册,应该是全网最详细的 TS 类型体操解题指南了。
2023-03-22
本文的出发点是记录笔者在设计一款状态管理库时的心路历程和思考。起初笔者仅仅是想做一些粗浅的封装,但是实际思考后,非常希望能够开发一款用起来好用,让自己觉得赏心悦目的状态管理库。
2023-01-06
概述
在之前的文章中提到一些 xpath 实战的边界场景,评论区小伙伴比较感兴趣,故写此篇文章进行记录。本文主要将 xpath 的稳定性分为三个环节(是足够涵盖之前文章提出的一些边界场景的):
- xpath 生成的边界场景:div[1] 与 div,svg 元素,id 的识别
- 实际业务中,dom 结构不稳定的场景分析:逻辑与表达式,三元表达式,动态弹窗,动态组件
- xpath 的特殊场景:列表标记。
2023-01-03
在实现可视化埋点的过程中,元素圈选是其功能中不可或缺的一环,其能力具备一定的通用性,故将其逻辑从 可视化埋点平台 中剥离出来,单独作为一个独立的工具方法暴露出来,源代码及演示可直接在 github仓库中 查看。本文主要是对其实现的拆解和其中关键点的记录。
2023-01-02
到年底了,网上陆陆续续年终总结也多了起来。每次当我在看年终总结的时候,其实或多或少都觉得无趣,因为别人的生活,其实我一点都不关心。看了几本书,写了几个需求,旅了几次游,说实话,和我一点关系也没有。当然,别人看我的年终总结也大抵如此。
2022-09-03
近期一直在团队内开发可视化埋点平台,目前已经落地并成功在多个复杂业务中落地使用,在其中也踩了不少坑。故写此篇文章,给想要在团队内落地可视化埋点平台做一份参考,也是对笔者自己实现过程的一个记录。
2022-07-31
最近一直在开发可视化埋点系统,其中元素的曝光埋点,就是借助了 intersectionObserver 这个原生 api。也是网上推荐度比较高的方案,同时 2022 年,该 api 兼容性也已经很高,同时也有 polyfill,基本上使用无虞。
intersectionObserver 本身 api 非常简单,但是在实际使用的过程中,由于可视化埋点的一些特殊性以及对埋点准确性的要求,还是遇到了一些 dom 变更后的边缘场景,本文便是对这些边缘场景的一个记录及实现背后的一些考虑。
2022-07-17
在日常的开发中,开发通用组件的机会其实并不多,尤其是在各种组件库已经遍地都是的情况下。而作为一个通用组件库的使用者,经常会看到把 React 组件作为参数传递下去的场景,每当这个时候,其实或多或少都会有一些疑问,比如:有些组件传递下去的是组件名,而有些组件传递下去的是一个箭头函数返回一个组件,而有些直接传递一个 jsx 创建好的元素,这些传递方案的适用场景如何,有什么不同,是否会导致组件的 memo 失效,是否会引发组件的不必要渲染?
本文是笔者在阅读了 antd、mui, react-select 的 api 之后,结合自己日常业务中使用的组件 api 格式,对传递一个组件作为 React 组件参数的方式的思考和总结,如果有写的不到位的,欢迎补充和指点。
2022-05-27
React Hooks已经有三年多的时间了,团队中也基本上已经很少看到class组件的身影,也很少再看到用不用hooks的争论,笔者认为,hooks优势确实明显,但是随之而来的心智负担也确实存在。就比如,按钮消个抖,非常常见的业务诉求,但是实际写起来,确实并不容易。
网上也确实有一些优秀的 hooks 库已经进行了实现,但是一些分析介绍的文章,或多或少有点问题。故写此文记录下,写的不好的地方也欢迎交流指出。
2022-05-10
面试碰到智力题,低情商,太卷了,高情商,综合实力考察!
最近互联网裁员风头正盛,虽然真实的感觉是身边失业的朋友并不多,甚至有些同学的年终还超出预期,而且有些公司的坑位还逆势上涨。
说实话,时常感觉自己跟不上对这些现象的理解,故只能分享几道新鲜出炉的前端智力题,让大脑从业务代码的繁杂中抽离出来活动活动。
2022-02-22
之前在团队中基于 theia,搭建了一套 CloudIDE(其相关介绍见此文章),其本质是将 IDE 的前端运行在浏览器 or 本地 electron,而文件系统,多语言服务等,运行在远端容器侧,中间通过 rpc 进行通信从而完成整个 IDE 的云端化。
而目前团队在低代码平台的建设中,发现还是需要一些简单的 IDE 场景,如果采用容器化的方案,那么每一个 IDE 可能就需要一个容器,不论是启动速度,还是资源的占用,都不太合适。
团队急需一款轻量级的 IDE 来嵌入低代码平台中,故近期着手开发了一款基于 monaco-editor 的轻量级且不依赖后端容器的 IDE。
2021-10-27
前言
在我们团队目前的业务中,随着移动端h5页面复杂度增加以及需要长期维护的项目增多,初期选择多页无数据管理的一些弊端就暴露出来。页面内多个轮询,消息监听、各种优化交互的loading态、倒计时,导致一个h5中,往往有几十个核心的状态,组件嵌套的层级也较多。代码往往也是开头十几个useState的定义,而这些state通过组件一层层传递下去,让后来的维护者,可以说是如履薄冰。
而在组内推行数据流管理时,大家往往会觉得,redux太重,而mobx、基于rxjs的状态流管理等工具又有学习成本,就很难整。
但是从维护角度来看,一次性的活动页面也就算了,多次反复修改的页面,后期维护成本非常高。
所以,花了点时间,用100行代码写了一个类redux的、生产环境完全可用的数据流管理工具,暂且称为 tinysm, 也就是tiny state manage的缩写。本文便是介绍其实现过程及用法。
2021-09-16
在云音乐团队内部的WebIDE终于落地了。目前功能上覆盖前端正常的业务开发已无问题,期间也踩了不少坑,故写此篇文章,给想要在团队落地WebIDE做一份参考。当然,一些很细节的问题的处理,一篇文章是不好涵盖的,本文更多的是设计的方案及落地的方向的参考。
2021-08-16
chrome 94之后,将禁用命令行参数对SameSiteByDefaultCookies提供,届时,本地localhost下,直接访问测试环境接口将成为问题。本文先介绍这一策略的历史及曾经的解决方案,并会针对此问题,提出一个chrome 94之后的解决方案作为参考。让大家尽量少走弯路,放心大胆的升级chrome。
2021-04-13
我开发了一款chrome插件–imgmaker(插件地址及仓库地址见文末),可以根据指定的尺寸、指定的关键字,生成想要的图片。可以在占位图的时候,输入想要的关键字,比如妹子、美女,动漫等等,生成一张赏心悦目的图片放上去,解决问题的同时没准还能提高工具效率(毕竟,好看的meizi图片 = 第一生产力)
2020-11-09
在实际开发过程中,经常会用到webpack的别名,来缩短我们在项目中的各种相对路径的引入,方便开发也方便阅读。
但是vscode在不做配置的情况下,本身并不能识别别名,故无法自动跳转,一定程度上降低了使用的便捷性。要解决也很简单,在项目根目录下建立jsconfig.json,配置baseUrl和path即可,但是也还是会有一些问题其他的细节问题,配置起来也比较机械化,在需要配置多个alias时,会显得有些重复化。
2020-11-05
最近一直在学习Rxjs,在学习过程中,踩了不少坑,也发现网上的文章都或多或少存在些问题,要么是内容过时了(现在已经Rxjs6),要么就是上来就讲原理(让我一脸懵逼),要么就是讲的不清楚,感觉踩了非常多的坑,学习曲线相对比较陡峭。理解基本概念之后再回头来看,其实并不难理解,但是确实走了很多弯路,所以整理下,同为打工人,能少踩点坑就少踩点坑把。
2020-07-13
问题描述
在新接手的项目中,存在vscode点击无法跳转到对应文件的情况,具体如下:
相对路径引入的xxx.jsx文件无法自动跳转,但是.js文件可以
针对这个问题,做了一个非常简单的demo来进行演示和问题的复现:github
在该项目的入口文件src/test.js中就存在这样的问题

解决方案
经过对vscode源码debug,基本了解了大致流程。得到的正确解法如下:
解法1:
删除项目目录下的jsconfig.js,可以实现jsx,js文件的自动跳转
解法2:
jsconfig.json中配置如下:
{
"compilerOptions": {
"jsx": "preserve", // 共有三种枚举: react, react-native, preserve,实测均可
},
"exclude": ["node_modules"]
}
改进解法2:
一般来讲,jsconfig.json的存在都是配合webpack alias进行快速跳转,故可以参考如下配置:
{
"compilerOptions": {
"jsx": "react-native",
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules"]
}
增加了baseUrl和paths,此时代码中可以进行如下引入:

原理探究
vscode源码本地启动
此部分可以参考vscode的contribute文档。文档写的比较详尽,此处补两个点:
- yarn配置淘宝源,等待时间会短很多
- 一部分资源需要从github拉取,一般公司的命令行都会配置成gitlab的名称,可以局部修改成github的姓名邮箱。不然有部分资源会403。
vscode相关代码定位
vscode源码主要分为两部分:src, extensions。由于本身对源码不熟悉,而且也只是为了定位问题,故没有仔细查看调用链路,最终得出以下结论:
寻找jsx文件是由内置扩展: typescript-language-features提供的,具体代码可以见definitions.ts。如果想编写支持其他文件的扩展,只需要注册registerDefinitionProvider这样的方法即可,可以参考jump-definition。
此处再往下追的话,会是一份typescript经过打包后的代码,故没有深究。看到这里的时候,其实可以推测进入js文件之后,左下角会出现这一个状态:

等该内置扩展加载之后,才能使用点击跳转的功能。这里可以参考该扩展的package.json:

当检测到当前文件语言是js/jsx的时候,该扩展会被激活,从而出现左下角的加载状态。
小结
这个问题解决方案是非常简单的,不过之前在网上查了很久也没有得出结论(因为我的项目下有个jsconfig.json,即便什么配置都没有也还是找不到jsx文件),迫不得已去本地debug vscode的源代码。
不过还好,最终拿到了结果,顺利解决问题。希望能够让遇到类似问题的同学少走弯路。
2018-05-26
引言
这一段时间研究生生涯已经走进了尾声,也一直忙于论文没有关注前端方面的工作。偶然的机会,在知乎上看到了一篇文章前端人工智能?TensorFlow.js 学会游戏通关。我的内心是很激动的,终于,也能在前端直接搭神经网络,跑分类了。不过该文章,对于tensorflowjs的介绍太少,直观的游戏ai应用确实很好,但是对于初次接触的人,还是从最基础的框架使用开始更好,于是就有了这篇文章。本文抛开了复杂的实际问题,选择曲线拟合这个最简单易懂的情景,使用3种逐步深入的方法来完成目标问题的解决。从最基础的数学方法,到借助底层api构建神经网络,再到最终借助高层次api构建神经网络,一步步熟悉框架的使用,希望能够帮助后来者快速上手。 demo地址(目测手机版后面两个方法训练不出来,建议pc版访问)
2017-04-06
之前在面试的时候,有些公司直接问我写过什么组件,而当时的我的回答是:封装ajax,封装事件处理(兼容性),前端路由,这些方法组件,而并没有一个比如下拉加载,轮播,加载中,拖拽这样的配合css以及js的这种组件。当时最后的结果就是现场思考:一个轮播组件,该有哪些方法,应该暴露什么方法,暴露什么属性。所以最近静下心来,也刚好在自己做的一个前后端分离的小项目中用到了下拉加载,就顺带把这个给抽离出来。记录一下写组件的过程,希望能够加深自己的感悟。
2017-03-11
之前对预加载的实现方案做了介绍,这一篇文章主要是我对图片的懒加载的实现的一个总结。主要包括:
- 视区检测
- 图片懒加载及延迟显示
2017-03-05
最近看了很多关于无限滚动的文章,也在面试中被问到了,优化方案很多,本次针对其中一条优化方案做了一个实际的优化:预加载。
2017-01-24
最近重新看《javascript高级程序设计》,突然看到了ajax,想起来之前学习的各种坑,又想着结合最近学习的模块化编程、面向对象式编程,所以用原生的js采用面向对象的设计思路对ajax进行了一个封装,同时,想起之前学习ajax的最大困难:没有服务器端代码,不好测试,所以这次用原生node写了一个简单的服务器,用于处理ajax的测试。
2016-10-06
2016-10-06
2016-09-28
2016-09-28
hexo变量的作用域
问题:page变量在archive.ejs和post.ejs中的含义不同,不好在post页面访问整个博客的所有文章列表