首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
2025-12-30 15:08
顺丰集团_HR(准入职员工)
顺丰内推,顺丰内推码
java面经:顺丰一面:1. 自我介绍2. 线程池核心参数3. 任务队列大小如何设置4. 拒绝策略有哪些,可能会有什么问题5. 核心线程数如何设置6. 一个类如何保证线程安全7. CAS原理8. synchornized和reentrantlock区别9. wait、notify使用需要注意什么10. 什么是死锁,如何避免11. volatile的作用12. 数据库ACID13. 数据库隔离级别14. 分布式事务了解吗15. 场景题:生成订单和第三方支付16. 时长:30min顺丰集团2026届校招启动!【公司简介】:顺丰集团是世界500强企业第377位,中国第一大、世界第四大快递物流服务商。...
点赞
评论
收藏
分享
2025-12-30 19:08
已编辑
江西科技师范大学 Java
实习-(科皓信息)江西科皓安云智慧科技有限公司-JAVA研发工程师
先笔试,笔试完进行面试。1、自我介绍。2、简单介绍一下你的项目,然后面试官对项目进行提问。3、Mysql有哪几种数据引擎,它们之间的区别是什么?4、如何来优化一个数据库?5、你对redis有什么了解?key太多会造成什么?6、你对微服务SpringCloud分布式架构有什么了解吗?(还问了简单的SpringCloud问题忘了,我没回答上来)7、常见的异常类有哪些?遇到异常应该怎么处理?8、MyBatis 中 @注解里 #{} 和 ${} 的核心区别?9、linux常用命令。10、家庭情况和兴趣爱好,有没有女朋友?11、薪资和企业文化、加班之类的。
查看11道真题和解析
点赞
评论
收藏
分享
昨天 10:03
门头沟学院 后端工程师
真叫我说中了,暑期真开了
vivo好像也开了,字节是真开了,其他的这个月也会开始开的吧
等闲_:
小红书基本不区分日常和暑期,你是应届实习时间够了就有转正机会,只要部门有hc
点赞
评论
收藏
分享
01-03 19:22
宁夏大学 产品经理
27届本科,写完简历感觉可以直接投字节
牛至超人:
很好,很有精神
投递字节跳动等公司8个岗位
点赞
评论
收藏
分享
01-03 11:39
已编辑
中国科学技术大学 Web前端
2025找工年终总结
实习复盘 实习期间不仅有代码能力的积累,更是有对不同公司和技术文化的深度体验。 momenta(2024.2) -> 腾讯(2024.4) -> 乾象(2024.10) -> 阿里 (2025.7) 体验: 每一段经历都很宝贵,尤其在qx,和mentor平时边写代码边沟通,啥都聊,团建很多,mentor cr细致到每一行。阿里的暑期实习也很难忘,mentor很热情人也很好,还参加了音乐节。 总之很幸运,感谢这一路遇到的所有 Mentor,体验感满分。 秋招结算 ✅ 时间有限,投递了10+公司,绝大部分都offer了,包括字节,小红书等大厂给的应该都是ssp/ssp+。 ...
程序员菜狗:
70+,秋招,前端,拼在一起怎么看不懂了
腾讯成长空间 6021人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
🔥2026创作新起点:《新年启航计划》来袭,三大赛道等你来冲!
1.4W
2
...
一大波手撕正在靠近!
1.1W
3
...
为什么你的实习是“无效实习”?又该如何做
5605
4
...
秋招13面字节终上岸
2539
5
...
uu们,面试的时候一定要大大方方的啊!
2324
6
...
腾讯游戏后端一面
2242
7
...
帕斯亚科技UE客户端面经
2049
8
...
千里智驾毁约
2020
9
...
快手Java日常实习一面
1824
10
...
双非本科,嵌入式秋招上岸的一次总结
1572
创作者周榜
更多
正在热议
更多
#
入职第一天
#
2619次浏览
35人参与
#
一人分享一道面试手撕题
#
5108次浏览
286人参与
#
26年哪些行业会变好/更差
#
1231次浏览
24人参与
#
你不能接受的企业文化有哪些
#
1693次浏览
38人参与
#
有深度的简历长什么样?
#
2444次浏览
47人参与
#
去年的flag与今年的小目标
#
747次浏览
24人参与
#
你都用AI做什么
#
971次浏览
32人参与
#
写论文的崩溃时刻
#
699次浏览
19人参与
#
元戎启行求职进展汇总
#
47041次浏览
330人参与
#
小米求职进展汇总
#
997681次浏览
6500人参与
#
应届生第一份工作最好去大厂吗?
#
123713次浏览
1097人参与
#
机械制造秋招总结
#
98755次浏览
880人参与
#
实习中的菜狗时刻
#
456362次浏览
3521人参与
#
正在春招的你,也参与了去年秋招吗?
#
342700次浏览
2576人参与
#
帆软软件工作体验
#
8577次浏览
34人参与
#
实习学不到东西怎么办?
#
268783次浏览
2487人参与
#
产品面经
#
246809次浏览
2124人参与
#
一人一道大厂面试题
#
111740次浏览
1251人参与
#
非技术er求职现状
#
127105次浏览
773人参与
#
双非本科的出路是什么?
#
192579次浏览
1516人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务