首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
聪敏的卡尔在开会
郑州大学 前端工程师
发布于北京
关注
已关注
取消关注
@程序员鱼皮:
这些代码,差点把我气出内伤
大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。举个夸张的例子:让你实现 1 + 1 的求和自己写:let sum = 1 + 1;某烂代码可能是:let a = {};let b = {};a.toString = function() { return 1;};b.valueOf = function() { return "1";};let sum = a + b;把简单的逻辑搞复杂,便是绝大多数程序员的拿手好戏(当然也包括我)。因为我从大学就开始带团队做项目了嘛,所以经常会审查团队同学的代码,做好二次校验。包括现在虽然开公司了,前端 / 后端同学的代码,也都会在我这过一遍才会发布上线。总之算是看了很多代码,其中有一些真的是让我哭笑不得。下面给大家分享一些代码片段出来,希望大家 不要学习 。1、过于抽象的命名还记得咱们刚学编程的时候,变量的命名都是用的 abcdefg。自学时这么写完全没问题,但是在实际项目中,如果还用过于抽象的命名,那就不太合适了。比如下面这段,大家能看懂是什么意思么?const [l, setL] = useState<boolean>(false);const [d, setD] = useState<any>();但如果我稍微完善下命名呢:const [loading, setLoading] = useState<boolean>(false);const [data, setData] = useState<any>();很多同学应该立刻能看懂了,一个是 “加载中” 的变量,一个是 “存储数据” 的变量。最好的代码应该是不用写注释的,因为 代码即注释 。如果你能把命名做到 “见名知义”,看代码的人会极度舒适。2、有深度的代码比如下面这段:if (condition1) { // 逻辑 A if (condition2) { // 逻辑 B if (condition3) { // 逻辑 C if (condition4) { // 逻辑 D } } }}这里的深度有 2 重含义,一重是字面意思:代码一层嵌一层、深不见底;另外一重是指真的 “很有深度” —— 指让人看不懂。阅读这段代码的感觉就像是你在一座巨大的迷宫里,每次转弯都要判断下是左还是右,最后你只会迷失方向。如何改进呢?最简单直接的方法就是使用早返回策略(early return):if (!condition1) // 逻辑 A return;if (!condition2) // 逻辑 B return;if (!condition3) // 逻辑 C return;if (!condition4) // 逻辑 D return;这样,你的代码就清晰了很多,阅读这种代码的感觉就像是走在了一条直路上,前方的路一目了然。当然,还可以将一些逻辑抽象成独立函数来简化代码,或者使用设计模式来优化。怎么判断一段代码是否过于复杂、应该优化了呢?这里提到一个概念: 圈复杂度 ,这是一种量化代码复杂程度的概念。通常你代码中的 if else 分支越多,圈复杂度就越高,代码就越复杂。企业中一般建议圈复杂度不要超过 10 - 15,我个人的编码习惯是一般不会在代码中出现 3 层以上的嵌套(除非必要)。3、冗余代码这是我遇到最多的问题!分为 3 种情况:能用一行代码搞定,偏偏要写 10 行能用一个变量或函数搞定,偏偏每次都是复制粘贴重复写没有用到的代码,又不舍得删除举个例子,下面这段前端代码,大家觉得有什么问题:这是我们鱼聪明 AI 前端开发过程的真实代码<Spin spinning={!(currDownloadUrl || originPictureUrl || pictureUrl)}> {type === DRAW_APP ? ( drawImg(image) ) : ( drawImg(currDownloadUrl || originPictureUrl || pictureUrl) )}</Spin>第一眼看到这段代码时,我就发现了,判断 spinning(旋转)的代码逻辑比较复杂,包含了两个 || 逻辑。而下面的 drawImg 函数的参数中,又包含了这段一模一样的逻辑。这段判断,其实就是冗余代码,完全没必要写两遍!我调整过后的代码如下:// 要展示的图片地址const showPictureUrl = currDownloadUrl || originPictureUrl || pictureUrl;直接定义一个通用变量,写上清晰的注释,其他地方要使用时就无需关注内部判断逻辑,看注释就行了。这就是所谓的 DRY 原则(Don't Repeat Yourself) ,尽量避免代码冗余。如果你在多处写下相同的代码,那么当需要修改这段代码时,你就需要在所有这些地方都修改,漏一个地方就是一个 Bug。还有,关于项目中没有用到的函数和变量,如果你近期没有使用计划,不妨就删除或者注释掉,别舍不得。利用好 Git 版本控制系统,只要你的代码提交信息写得好,要用到被删掉的历史代码时,去提交记录里找即可。注意,如果是学习时写代码,多保留一些也是合理的。但企业项目中,项目代码精简凝练些会更好。这里打个比方,写代码就像是我在公司里堆东西,一开始总觉得多一点没关系,反正有空间。但是,冗余代码就像是杂物,会越堆越多,迟早有一天,会影响到你,就像我们公司现在一样(右边有一堆杂物):大概就分享到这里,请大家在评论区 @ 出你写烂代码的同事吧 🐶 ~
点赞 135
评论 17
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
03-16 18:43
门头沟学院 前端工程师
蓝湖-前端实习-凉筋
一面是hr面:自我介绍,然后共享屏幕实现:1-写一个底部为按钮,蓝绿分区的页面;2-写一个for循环;3-讲讲节流;4-写一个箭头函数反问:1-工资多少,有无房补?200/天,无房补,公司提供早午晚餐2-主用什么技术栈?vue和react都有3-有无转正机会?看个人能力,评估产出二面:1-平时有做什么项目,除了简历上这些2-最近遇到最大的技术难点3-看github个人仓库(后面反问,面试官说看star数应该是少逛github,所以要面的可以star多几个,拓展一下github的项目)4-反问,主用什么技术栈?vue3,有些做给客户的用的是react实习生规模?一个前端兼产品,一个前端兼node...
查看16道真题和解析
点赞
评论
收藏
分享
03-20 15:08
清华大学 Java
java春招怎么准备
Java春招的本质不是“会不会写代码”,而是企业在短时间内筛选出具备工程潜力、基础扎实、能快速上手业务的候选人。准备过程如果只是刷题或背八股,往往无法形成竞争力。下面从技术深度、工程能力和应试策略三个层面系统拆解。一、Java春招的真实考察模型企业筛选Java候选人,核心看三件事:基础是否扎实(决定下限)工程经验是否可信(决定是否能用)问题分析能力是否清晰(决定成长性)面试不会单点考察,而是围绕一条技术链条持续深挖,例如:从一个接口性能问题,一路问到JVM、并发、数据库、系统设计二、技术准备:必须达到“可深挖”的程度1. Java基础:不止语法,要到运行机制重点不是“会用”,而是“为什么这样设...
点赞
评论
收藏
分享
03-10 21:30
西安交通大学 后端工程师
我觉得实习真的纯靠包装。
我选正常,习惯了感觉在实习里面真的很难说一下子干啥很核心的活,大家都是先把次一点的活放给你,然后慢慢的给你更核心的活,你把下一个阶段的工作干好了,才会拿到更好的活。
牛客31183830...:
实习就给核心代码写出问题怎么办
实习学不到东西正常吗?
点赞
评论
收藏
分享
03-21 23:23
中国科学院大学 人工智能
绷不住了,好像不知不觉就作弊了
一开始签了个AI coding什么的,当时想欸这么好可以用AI?(似乎那个AI coding是ai面试?)然后再看又是切屏不计入,又是允许本地IDE,干脆直接chatgpt启动了出来和大家讨论发现好像不能用AI上小红书搜发现这么干的不是少数,尤其是本地IDE直接是cursor和trae的而且发现这个问题去年秋招就有人问过,更离谱的是当时有的人问HR,有的HR说可以有的说不可以现在发了邮件去问招聘团队了,感觉是细则没写清楚要是直接说不能用不如直接签到题走人更省时间
二十岁的编程男神王大...:
牛逼,四道题都ai出来无敌了
,这个太难绷了,这还考鸡毛,直接复制题目发给cursor
校招笔试
点赞
评论
收藏
分享
03-16 17:38
郑州大学 算法工程师
2026 秋招总结:从实习到转正,一个普通硕士的秋招焦虑与落地
我是一所 211 高校计算机技术专业的一名硕士生,研究方向是稀疏 3DGS 重建。研二下学期过完年,我刚把一篇论文投稿到一个一区期刊。论文投出去之后,我简单改了改简历,就开始尝试投实习,本来只是想看看市场情况,没想到很快就收到了几个 offer。当时比较合适的实习机会有海康威视、赢彻科技以及几家规模不大的公司。综合考虑之后,我选择了海康威视。一方面是因为海康在行业里的认可度比较高,另一方面待遇也不错,公司还提供住宿,整体条件在当时看来已经很让人满意了。于是,我第一次去了杭州。刚到海康的时候,其实挺激动的。公司园区规模很大,那时候确实有一种“原来自己也有机会来这种大公司实习”的感觉。 实习开始之...
不给转正的实习,你还去吗
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
我们为什么要做网申助手这个插件
9584
2
...
找实习两个月,工具用了一堆,最后只留下这些
4994
3
...
速收藏!各公司最新招聘进展!
3974
4
...
面试官视角聊聊:如何通过AI coding面试?附焚决
2955
5
...
腾讯前端一面,没想到问这些
2462
6
...
小红书暑期一面
1993
7
...
字节暑期实习OC
1721
8
...
携程暑期一面凉经
1418
9
...
2027届bilibili前端开发实习生
1315
10
...
字节后端二面,比一面难多了
1214
创作者周榜
更多
正在热议
更多
#
春招/暑实第一面是哪家?
#
29307次浏览
307人参与
#
军工所铁饭碗 vs 互联网高薪资,你会选谁
#
6249次浏览
32人参与
#
MiniMax求职进展汇总
#
21199次浏览
273人参与
#
腾讯音乐求职进展汇总
#
159949次浏览
1100人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
185702次浏览
1103人参与
#
小红书求职进展汇总
#
226319次浏览
1351人参与
#
巨人网络春招
#
10895次浏览
164人参与
#
硬件人秋招的第一个offer
#
122288次浏览
1453人参与
#
实习到现在,你最困惑的一个问题
#
31181次浏览
271人参与
#
如果重来一次你还会读研吗
#
229012次浏览
2009人参与
#
网易游戏笔试
#
6077次浏览
83人参与
#
职能管理面试记录
#
10393次浏览
57人参与
#
把自己当AI,现在最消耗你token的问题是什么?
#
6167次浏览
151人参与
#
正在春招的你,也参与了去年秋招吗?
#
361712次浏览
2628人参与
#
硬件应届生薪资是否普遍偏低?
#
108129次浏览
601人参与
#
简历中的项目经历要怎么写?
#
308454次浏览
4094人参与
#
工作中遇到的歹人
#
96269次浏览
535人参与
#
我的AI电子员工
#
34101次浏览
223人参与
#
校招笔试
#
461402次浏览
2943人参与
#
AI时代,哪些岗位最容易被淘汰
#
60887次浏览
642人参与
#
你怎么看待AI面试
#
178454次浏览
1085人参与
#
如何一边实习一边找下家?
#
40210次浏览
349人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务