当前位置: 欣欣网 > 码农

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

2024-06-26码农

大家好,我是东哥。

今天,我在帖子里看到一张图片,里面展示了一段外包公司员工写的代码,见下图。

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

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

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

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

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

具体提示词如下:

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

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

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

public classPostRequestService {privatestatic final String FAIL_ID_NUM_KEY = "failIdNum";privatestatic 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; }privatevoidhandleFailure(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); }privatevoidhandleException(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<>(); }} classRequestParams {private String appId;private String clientId;private String clientSecret;private Map<String, Object> data;// Getter and setter methodspublic 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 {privatestatic final String FAIL_ID_NUM_KEY = "failIdNum";privatestatic 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; }privatevoid 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); }privatevoid 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 {privateString appId;privateString clientId;privateString clientSecret;private Map<String, Object> data;// Getter and setter methodspublic 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


热门推荐