- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
“程序怎么运行不了,不应该啊?” 。
“程序怎么能运行了,不应该啊!” 。
这句话是不是让程序员朋友们的 DNA 动了呢?今天鱼皮分享一些新手程序员常犯的小 Bug,很多是我自己或者网友们的亲身经历,相信绝大多数程序员都写过这些 Bug~ 。
。
刚学编程语言的很多同学应该都被这个错误折磨过,比如在代码中使用中文逗号(,)或引号(“”),结果就导致了编译错误.
// 使用了中文逗号,编译会报错
Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
我之前就遇到过一位同学,把类似上面的代码拍了个照,然后问我哪里有错,我当时快把眼珠子瞪出来了,也没发现问题:
结果后面他自己发现问题了,我知道真相后直接红温了.
其实这类 Bug 很好自己解决,开发工具都会给出提示的,只不过由于新手不知道要去看错误信息罢了.
。
现在的数据库操作框架封装得太好了,以至于很多同学都不怎么自己写 SQL,查询语句可能还写过一点儿,但更新语句基本上没写过。这就导致了很多低级问题,比如在更新或删除数据时,忘记加上 WHERE 条件。像之前我分享过,我们团队一位同学更新某个用户权限的时候,不小心把所有用户的权限都刷成了 “管理员”.
UPDATE orders SET role = 'admin';
一般有经验的开发者看到数据更新或删除操作,就条件反射想到要加 WHERE 条件:
UPDATE orders SET role = 'admin'
WHERE id = xxx
企业中通常也会给数据库加上限制,防止范围更新和删除.
。
在开发中,文件、数据库连接、内存、网络连接都属于资源,如果打开了资源没有释放,就有可能因为资源泄露导致程序崩溃,很多线上 Bug 都是这么来的.
比如打开一个文件,却没有关闭:
public void readFile(String path) throws IOException {
FileReader reader = new FileReader(path);
char[] buffer = new char[1024];
reader.read(buffer);
// 忘记关闭文件
}
平时要养成好的习惯,只要打开了资源,都要看看有没有 close 方法。如果有的话,再确认该资源会不会自动关闭;如果不会自动关闭,就要手动释放资源.
在 Java 中,可以在 finally 块中、或者使用 try-with-resources 语法自动释放资源:
public void readFile(String path) throws IOException {
try (FileReader reader = new FileReader(path)) {
char[] buffer = new char[1024];
reader.read(buffer);
}
}
。
这也是一类低级错误,比如在数据库中明文存储用户的密码:
INSERT INTO users (username, password)
VALUES ('admin', '123456');
好好好,这下管理员爽翻了! 。
标准做法是,使用哈希算法 + 盐值加密存储密码:
String hashedPassword = BCrypt.hashpw("123456", BCrypt.gensalt());
虽然这个错误很低级,但可千万别小看它。某公司因为明文存储密码被处罚了 9100 万欧元! 。
类似的错误还有直接从前端明文发送密码给后端,虽然可以通过 HTTPS 协议增强安全性,但 HTTPS 只保证传输加密,服务端和客户端仍能看到密码明文,攻击者可能通过日志窃取密码.
。
这也是一类低级错误,经常出现于调用第三方 API 的时候.
比如需要调用一个第三方天气服务 API,为了省事,前端直接将秘钥写到了 JS 代码中:
// 第三方 API 秘钥
const API_KEY = "yupi123456";
// 调用 API
async function getWeather(city) {
const url = `https://codefather.cn/weather?city=${city}&apikey=${API_KEY}`;
const response = await fetch(url);
const data = await response.json();
console.log(data);
}
这样一来,用户直接打开 F12 控制台,就能看到你的秘钥了,即使对 JS 代码加密混淆,也能轻而易举被找到.
所有前端的内容都是不安全的。 如果有调用第三方 API 的需求,最好还是通过后端进行转发.
。
刚在企业中接触多环境的同学,可能会不小心把测试环境的代码或配置部署到生产环境.
比如 Java 项目使用 application.yml 文件来管理配置,测试代码时,我先把数据库改为测试库:
spring
结果上线前,忘了把配置改回来,导致线上环境找不到这个数据库或者因为网络隔离无法连接.
标准的做法是,通过配置文件后缀区分多环境,在启动项目时指定对应的环境值即可。比如 application-dev.yml 表示开发环境、application-prod.yml 表示生产环境.
。
我见过一些急性子的同学,在提交或推送代码的时候遇到了代码冲突,觉得麻烦就强行合并或推送了.
# 忽略代码冲突,强行合并
git merge branch-feature --strategy-option=theirs
# 强行推送,覆盖远程代码
git push --force
此举可谓图一时之快,但后患无穷矣.
很快你的同事就会找上门:我的码呢?
你的领导也会找上门:没通过审核的代码怎么就推到主分支了?
所以遇到代码冲突之后,一定要仔细处理冲突,不要强行合并或推送,除非你能接受这么做的最坏结果.
对于管理者,最好在代码管理平台中开启保护分支,禁止成员把未审核通过的代码直接推送到主分支.
。
很多朋友的数据保护意识是比较差的,尤其是刚接触 Git 代码提交的同学,可能一不小心,就把包含了数据库账号密码的配置文件提交到 GitHub 等开源平台了,开源精神令人感动.
不信的话,你可以在 GitHub 搜索和秘钥有关的关键词,一抓一大把.
我自己也经历过这事,曾经提供了一个免费的图床给编程导航的同学使用,结果有不止一个人把我的图床秘钥开源到了 GitHub 上.
好在有些大厂的云服务会自动检测你有没有将秘钥提交到开源平台,如果出现了,会给你发送邮件.
解决这个问题的方法也很简单,我们可以准备两套配置文件,一套开源,一套自用,在 Git 中忽略掉自用配置文件的提交即可.
。
。
OK 就分享到这里,大家还见过哪些常见的、或者 “有点儿东西” 的 Bug 呢?欢迎评论区分享~ 。
。
Java前端程序员必做项目实战教程+毕设网站 。
程序员免费编程学习交流社区(自学必备) 。
程序员保姆级求职写简历指南(找工作必备) 。
程序员免费面试刷题网站工具(找工作必备) 。
最新Java零基础入门学习路线 + Java教程 。
最新Python零基础入门学习路线 + Python教程 。
最新前端零基础入门学习路线 + 前端教程 。
最新数据结构和算法零基础入门学习路线 + 算法教程 。
最新C++零基础入门学习路线、C++教程 。
最新数据库零基础入门学习路线 + 数据库教程 。
最新Redis零基础入门学习路线 + Redis教程 。
最新计算机基础入门学习路线 + 计算机基础教程 。
最新小程序入门学习路线 + 小程序开发教程 。
最新SQL零基础入门学习路线 + SQL教程 。
最新Linux零基础入门学习路线 + Linux教程 。
最新Git/GitHub零基础入门学习路线 + Git教程 。
最新操作系统零基础入门学习路线 + 操作系统教程 。
最新计算机网络零基础入门学习路线 + 计算机网络教程 。
最新设计模式零基础入门学习路线 + 设计模式教程 。
最新软件工程零基础入门学习路线 + 软件工程教程 。
最后此篇关于这些小Bug,99%的程序员都写过!的文章就讲到这里了,如果你想了解更多关于这些小Bug,99%的程序员都写过!的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在 PHP 中,开始破解并弄清楚页面上发生的事情非常容易。只需输入一堆回声和 print_r,仅此而已。看来这种技术在 python 中对我不起作用。我通过在 python 照片上传模块中进行黑客攻击
程序员/后端开发方向Java 跳槽注意事项(简历和面试经验分享) 应届生面试经验参考:https://www.cnblogs.com/rainbow-1/p/16779048.html 简历: 1、
上图的意思: 百战百胜,屡试不爽. 故事 程序员小张: 刚毕业,参加工作1年左右,日常工作是CRUD 。 架构师老李: 多个大型项目经验,精通各种开发架构屠龙宝术;
周末了开心一下 谈到程序员,对于外行人来说一贯的印象就是格子衫大裤衩外加人字拖,蓬头(秃头)垢面黑眼圈,还有就是“人傻钱多死得快”🤣,这是外界对程序员固有的思想,但是作为新世纪的程序员,我们可没那么
我从事C++编程已有5年了,现在我意识到知道如何“不同地”思考的值(value)。 这个问题适用于尝试其他编程语言并遇到过类似情况的C++程序员: “哇,这太酷了!我不知道我可以那样编程。” “哇,我
互联网已经渗入我们生活的方方面面,于是我们就免不了会思考:如果有一天网络断了怎么办呢? 英国 Cable.co.uk 曾进行了一项有趣的"断网"调查,调查发现在 2500
这些是 “程序员可见” x86-64 寄存器: (来源:usenix.org) 隐形寄存器呢?刚刚才知道MMU寄存器,Interrupt Descriptor Table(IDT)使用了这些不可见的寄
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
有没有办法将 Dragon NaturallySpeaking 合并到事件驱动程序中?如果我使用 DNS 记录用户语音输入而不将其写入屏幕并直接保存为 XML,我的老板会非常喜欢它。我已经研究了好几天
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
这个问题在这里已经有了答案: 关闭12年前。 Possible Duplicate: Should I learn C before learning C++? 作为一名专业 (Java) 程序员和重
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在将一个使用串行端口的 C++ 程序(更准确地说是 Borland“组件”)“转换”为 Java。该程序使用一个线程来监听串行端口,并在收到给定的“事件字符”之一(可能是回车、ACK、NACK .
我是克里斯。我对编码很陌生,我不知道很多术语,这是我第三次也是最成功的学习 Java 的尝试。是的,如果我还年轻,效果就不太好。无论如何,我正在尝试创建游戏,但遇到了一个小问题。 我制作了一个 16
我是一名优秀的程序员,十分优秀!