首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
卧蚕
门头沟学院 C++
发布于浙江
关注
已关注
取消关注
@程序员鱼皮:
这些代码,差点把我气出内伤
大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。举个夸张的例子:让你实现 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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 10:09
蚌埠坦克学院 嵌入式软件开发
嵌入式面试常考八股文汇总
嵌入式岗位面试中,除了项目经历,面试官也很喜欢围绕基础知识、单片机原理、RTOS、通信协议、Bootloader、C语言底层细节等内容展开提问。下面给大家整理了 40 个嵌入式面试高频题目,适合用来查漏补缺、系统复习。一、C语言与基础知识volatile 关键字的作用是什么?哪些场景必须使用?const 和 #define 的区别是什么?指针和数组的区别是什么?malloc、calloc、realloc 的区别是什么?结构体内存对齐的原理是什么?为什么要进行内存对齐?大端模式和小端模式有什么区别?如何判断当前平台的字节序?static 关键字在局部变量、全局变量、函数中分别有什么作用?什么是野...
点赞
评论
收藏
分享
今天 07:32
蚌埠坦克学院 嵌入式软件开发
嵌入式面试大厂必备八股文
对于准备冲击大厂的嵌入式工程师来说,项目经验固然重要,但面试中的基础知识问答同样是决定成败的关键环节。很多候选人平时写代码、调板子、做驱动都没问题,一到面试却容易在操作系统、C语言、单片机、通信协议、内存管理这些高频知识点上卡壳。所谓“八股文”,并不只是死记硬背,而是帮助你系统梳理嵌入式岗位常见考点,建立完整知识框架。尤其是校招、社招初中级岗位,以及大厂常见的一面、二面,面试官往往会围绕基础知识连续追问,从一个点深挖到原理、场景和实际应用。下面我整理了 30个嵌入式大厂面试高频题目,覆盖 C语言、数据结构、操作系统、Linux、MCU、通信协议、驱动开发 等核心方向,适合用来做面试前突击复习、...
点赞
评论
收藏
分享
05-04 17:20
武汉大学
后端开发简历求拷打
27届,双9后端开发简历求拷打,0实习经历,感觉自己行动太慢了,还有哪的暑期或日常能投吗,还是说直接等秋招找个中小厂😭😭
如何写一份好简历
点赞
评论
收藏
分享
04-13 10:09
电子科技大学 Java
大佬们拷打一下,目前还没有暑期面试
3月份找暑期实习到现在,没有公司愿意给我面试,我大概投了二十多家,是不是投的还是太少了。
二十岁的编程男神王大...:
读博吧兄弟,你这绩点太好了,何必转码,另外哈哈哈真见到有括号标出来985的,这个不标注也知道吧
点赞
评论
收藏
分享
昨天 11:21
已编辑
门头沟学院 算法工程师
在携程的一天
早上10点到岗,晚上7点走,中间干了啥?我是旅游BG的大模型算法工程师,今天带你看点不一样的。 10:00|到公司,先看一眼模型跑得怎么样工位上打开电脑,第一件事:登录训练平台,看看昨晚提交的视频生成任务跑完了没。还行,没有爆显存,Loss曲线正常。同事路过:“新模型效果咋样?”——“还在调,中午给你看demo。”10:30|晨会,聊15分钟旅游BU的晨会很快:对齐进度、同步卡点、确认优先级。我上周接了个AIGC视频生成的优化任务,目标是让生成的视频转场更自然、文案更贴合目的地。今天要试一个新开源模型的效果。mentor听完说:“先跑个AB实验,数据说话。” 11:00|写代码+调模型,沉浸式...
携程成长空间 146人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
毕业了,有些话只能藏在心里了
4.2W
2
...
毕业啦!我们要一起去广州打拼啦!
4.2W
3
...
字节 中国交易与广告 后端一面
2.4W
4
...
从腾讯到阿里感,谢一路走来的自己
1.3W
5
...
别人:阿里 字节 腾讯
9725
6
...
从阿里被裁到快手升P6,我花了四年
9580
7
...
学院本拿下字节暑期offer!!!
8408
8
...
在携程的一天
8296
9
...
爸,你说的对,四年真的很快
7862
10
...
211本,130投0面,agent应用开发,简历求助!
7383
创作者周榜
更多
正在热议
更多
#
如果春招能重来,我会___
#
26881次浏览
269人参与
#
有深度的简历长什么样?
#
60394次浏览
767人参与
#
在爱玛,骑向未来
#
18462次浏览
360人参与
#
这个offer值得去吗?
#
27611次浏览
202人参与
#
刚入职就____,这样正常吗?
#
147256次浏览
706人参与
#
你会因为行情,降低找工作标准吗?
#
41477次浏览
308人参与
#
联宝杯大学生创新大赛,你的技术值得产业级答案
#
48998次浏览
603人参与
#
实习生的生存小技巧
#
36940次浏览
339人参与
#
美团笔试
#
990038次浏览
5814人参与
#
找工作,你都让AI帮你做什么?
#
34169次浏览
292人参与
#
记录我的毕业季
#
2725次浏览
72人参与
#
帆软软件工作体验
#
19478次浏览
134人参与
#
秋招想进国企该如何准备
#
147141次浏览
689人参与
#
实习生活中那些难忘的瞬间
#
345464次浏览
3450人参与
#
华为池子有多大
#
177114次浏览
923人参与
#
你见过最离谱的招聘要求是什么?
#
281544次浏览
1888人参与
#
字节开奖
#
157153次浏览
763人参与
#
实习怎么做才有更好的产出
#
50702次浏览
464人参与
#
租房找室友
#
68528次浏览
251人参与
#
阿里求职进展汇总
#
533155次浏览
4309人参与
#
春招前还要继续实习吗?
#
66611次浏览
326人参与
#
你被哪些公司挂了?
#
194125次浏览
1051人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务