外包公司的人写的代码,被扒出,骂惨了~

科技   2024-12-12 14:00   陕西  
今天,我在帖子里看到一张图片,里面展示了一段外包公司员工写的代码,见下图。



说实话评论区大家讨论挺热烈的,主要是围绕这段代码的质量如何?就我个人而言,如果站在职业修养的角度来说,那么,贴出这段代码的程序员可能存在泄漏源代码的风险。


我虽然写了很多年代码,这段代码确实存在一些问题,有很多优化的点,说实话,自从AI出来以后,我感觉AI在写代码方面真的挺强的,特别是现在的AI搜索更是将以前的搜索体验拉升了一个高度,我个人觉得AI将是我们这个时代最大的机会!


既然如此,我将这段代码喂给了AI,让他给出公正的评价,更能让大家信服。


这里,我只是给了一个简单的提示词,并没有写针对性的结构化提示词,如果对提示词感兴趣的话,可以访问我整理的提示词仓库。

网站地址:https://www.songshuhezi.com/tools/short.html

具体提示词如下:

你现在是一名具有10年经验的Java程序员,我将发给你一段Java后端代码,站在你的角度来客观评价这段代码,并给出你的优化建议。

好了,我们来看看AI给出的回答,如下图:

并且它还给了我优化后的代码:

public class PostRequestService {
private static final String FAIL_ID_NUM_KEY = "failIdNum"; private static final String MESSAGE_KEY = "message"; public com.alibaba.fastjson2.JSONObject sendPostRequest(String url, RequestParams params) { params.put("appId", params.getAppId()); params.put("clientId", params.getClientId()); params.put("clientSecret", params.getClientSecret()); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<com.alibaba.fastjson2.JSONObject> requestEntity = new HttpEntity<>(params.toJson(), headers); com.alibaba.fastjson2.JSONObject response = null; try { response = restTemplate.postForObject(url, requestEntity, com.alibaba.fastjson2.JSONObject.class); String idNum = response != null ? response.getString("idNum") : null; if ("0000".equals(response.getString("code"))) { log.info("请求成功"); return response; } else { handleFailure(idNum, response.getString(MESSAGE_KEY)); } } catch (Exception e) { handleException(e); } return response; }
private void handleFailure(String idNum, String message) { List<String> failIdNums = getFailIdNums(); if (idNum != null) { failIdNums.add(idNum); } redisCache.deleteObject(FAIL_ID_NUM_KEY); redisCache.setCacheList(FAIL_ID_NUM_KEY, failIdNums); log.warn("请求失败: " + message); }
private void handleException(Exception e) { String message = e.getMessage(); if (message != null && !message.isEmpty()) { message = message.split("\n")[0]; } List<String> failIdNums = getFailIdNums(); failIdNums.add(message); redisCache.deleteObject(FAIL_ID_NUM_KEY); redisCache.setCacheList(FAIL_ID_NUM_KEY, failIdNums); log.error("请求异常: " + message, e); }
private List<String> getFailIdNums() { return redisCache.hasKey(FAIL_ID_NUM_KEY) ? redisCache.getCacheList(FAIL_ID_NUM_KEY) : new ArrayList<>(); }}
class RequestParams { private String appId; private String clientId; private String clientSecret; private Map<String, Object> data;
// Getter and setter methods
public com.alibaba.fastjson2.JSONObject toJson() { com.alibaba.fastjson2.JSONObject json = new com.alibaba.fastjson2.JSONObject(); json.put("appId", this.appId); json.put("clientId", this.clientId); json.put("clientSecret", this.clientSecret); json.put("data", this.data); return json; }}

对于这段代码到这里就完了吗?如果是有经验的程序员,肯定会知道fastjson之前出现过漏洞,我相信AI肯定也知道,但是你不问它,它是不会告诉你的,因为它不是神,它只是机器人😂


我们先来测试一下,我用搜索引擎去搜一下fastjson之前出现过的漏洞有哪些,然后再来问它,进行对比一下。


搜索语法:fastjson site:cve.org


接下来,我将问题抛给AI,看看它给出的答案如何?

与搜索引擎的结果对吧,你会发现有缺失,它有漏掉,并且给出的英文回复,其实出现这个问题是给出的提示词不够精准,我接下来与它对话的时候,将指出它的错误,并让它修复答案,这次的表现就很完美了,见下图


由于我这里没有对应的pom文件,并不清楚这个代码是否存在漏洞,但我们只能给出一个粗略的提问,我以为它只能给我一个大而范的解决方案,没想到它的回答惊艳我了,如下图

兄弟们,你们以为到这里就结束了吗?没有,它竟然给出了我优化后的代码,而且还做了针对性的防护,源码如下:

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.parser.ParserConfig;import com.alibaba.fastjson.serializer.SerializerFeature;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.web.client.RestTemplate;
public class PostRequestService {
private static final String FAIL_ID_NUM_KEY = "failIdNum"; private static final String MESSAGE_KEY = "message";
static { // 启用SafeMode ParserConfig.getGlobalInstance().setSafeMode(true); // 关闭AutoType ParserConfig.getGlobalInstance().setAutoTypeSupport(false); }
public JSONObject sendPostRequest(String url, RequestParams params) { params.put("appId", params.getAppId()); params.put("clientId", params.getClientId()); params.put("clientSecret", params.getClientSecret());
RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(params.toJson(), headers); JSONObject response = null;
try { response = restTemplate.postForObject(url, requestEntity, JSONObject.class); String idNum = response != null ? response.getString("idNum") : null; if ("0000".equals(response.getString("code"))) { log.info("请求成功"); return response; } else { handleFailure(idNum, response.getString(MESSAGE_KEY)); } } catch (Exception e) { handleException(e); } return response; }
private void handleFailure(String idNum, String message) { List<String> failIdNums = getFailIdNums(); if (idNum != null) { failIdNums.add(idNum); } redisCache.deleteObject(FAIL_ID_NUM_KEY); redisCache.setCacheList(FAIL_ID_NUM_KEY, failIdNums); log.warn("请求失败: " + message); }
private void handleException(Exception e) { String message = e.getMessage(); if (message != null && !message.isEmpty()) { message = message.split("\n")[0]; } List<String> failIdNums = getFailIdNums(); failIdNums.add(message); redisCache.deleteObject(FAIL_ID_NUM_KEY); redisCache.setCacheList(FAIL_ID_NUM_KEY, failIdNums); log.error("请求异常: " + message, e); }
private List<String> getFailIdNums() { return redisCache.hasKey(FAIL_ID_NUM_KEY) ? redisCache.getCacheList(FAIL_ID_NUM_KEY) : new ArrayList<>(); }}
class RequestParams { private String appId; private String clientId; private String clientSecret; private Map<String, Object> data;
// Getter and setter methods
public JSONObject toJson() { JSONObject json = new JSONObject(); json.put("appId", this.appId); json.put("clientId", this.clientId); json.put("clientSecret", this.clientSecret); json.put("data", this.data); return json; }}
我只能说,AI真牛叉,说它垃圾的兄弟们,要反思一下,是不是你的提问方式不对,还是你的知识深度不够!

但是,之前某位大佬说的“未来将不再存在程序员这一职业”,我是不赞同的,并不是我是一名程序员,我认同的观点是:“编程的难度会越来越低,只是低端程序员会逐渐被淘汰”。

说实话,你想吗?如果你只是会CRUD,加上现在这种红海市场,程序员饱和度这么高,再加上大龄,你哪里有什么出路吗?因此,我建议大部分程序员先在某一个领域做深,再拓展自己的广度,而不是真正的只安心做一个码农!

各位同学,言尽于此,要想摆脱程序员35岁的魔咒,唯有花时间花金钱提升自己的实力!

最后,想学编程的同学,可以关注一下这个网站,上面的内容很全哦😂

网站地址:https://www.j301.cn

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》

资料包含了《IDEA视频教程》《最全python面试题库》《最全项目实战源码及视频》《毕业设计系统源码》,总量高达650GB全部免费领取

Python技术迷
回复:python,领取Python面试题。分享AI编程,AI工具,Python技术栈,Python教程,Python编程视频,Pycharm项目,Python爬虫,Python数据分析,Python核心技术,Python量化交易。
 最新文章