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

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

图片

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

我虽然写了很多年代码,这段代码确实存在一些问题,有很多优化的点,说实话,自从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,加上现在这种红海市场,程序员饱和度这么高,再加上大龄,你哪里有什么出路吗?因此,我建议大部分程序员先在某一个领域做深,再拓展自己的广度,而不是真正的只安心做一个码农!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值