色婷婷777国产AMSR_日本人妻永久视频网站_欧美特黄A级高清内谢视频_oursHDTV无码_国产1卡2卡三卡4卡5卡乱码

您當前的位置:首頁 >> 電影 >  >> 
Copilot 與 ChatGPT,讓程序員如虎添翼 —— 讓 AI 們?yōu)槲覀兇蚬ぃ?/div>
來源:      時間:2022-12-20 14:02:58

Copilot 來了,程序員會失業(yè)嗎?ChatGPT 又來了,程序員會失業(yè)嗎?程序員本來就焦慮,最近似乎越來越焦慮了。在 Copilot 問世時,我感覺自己退化成了工具人:《我退化成一個只會敲 Tab 鍵的工具人了!》。如今 ChatGPT 又來了,這次我是什么感覺呢?感覺真的 Google 和 StackOverflow 已經(jīng)不好用了。

不過,經(jīng)過一段時間對 Copilot 的使用,我的心態(tài)已經(jīng)平和了許多,不再擔(dān)心失業(yè)了。回頭來看,其實,它們都是效率工具,它們不是要干掉程序員,而是更好地幫助程序員。眾所周知,程序員可以改變世界,那么,借助 Copilot 和 ChatGPT,程序員的自我感覺更棒了!可以更加肆無忌憚地在未知領(lǐng)域里自由探索了!

探索 Vue

前幾天,我開始對一個 Vue 項目做一些迭代優(yōu)化,這是我第一次接觸 Vue 項目。我需要對該 Vue 項目進行保護,添加登錄功能,詳細過程見《使用 IdentityServer 保護 Vue 前端》。我在這一篇日志里提了一下,說自己參考 Vue 的官方文檔,給 Vue 應(yīng)用添加的方法,在 vue-router 的導(dǎo)航守衛(wèi)里,按照 vue-router 的官方文檔去拿這個方法,居然是 undefined!通過 Google 搜索了很久,都是這種官方文檔類似的說明(然而并不管用?。?,于是我去 StackOverflow 上提了這個問題:https://stackoverflow.com/questions/74769607/how-to-access-vues-methods-from-navigation-guard,這個問題到現(xiàn)在,也沒有其他人(除了我自己)回復(fù)。


(相關(guān)資料圖)

于是我抱著試一試的心理,在 ChatGPT 上問了一下,沒有想到立即得到了詳細的解答:

它的思路是,將方法添加在 Vue 的 prototype 中,這樣,在導(dǎo)航守衛(wèi)里就能使用 this關(guān)鍵字去訪問全局方法了!這真的是比 Google 好用呀!

探索 Mybatis plus

我對 Java 也不熟,它的生態(tài)中很多組件,我聽上去感覺就是拼寫錯誤。昨天在 Mybatis plus 上就栽了跟頭。事情是這樣的,我和同事們業(yè)余做了一個項目(有興趣一起來玩的同學(xué)們歡迎聯(lián)系哈),目前剛開始,正在做一個 3D 世界里的角色可以選擇自己的皮膚顏色的功能。

https://brickverse.vercel.app/

或者這個鏈接:https://brick.cat

前端部署在 Vercel 上,后端部署在 Okteto 上。后端服務(wù)是一個 Java 項目,我在這個項目里添加了 UserPreference 這個數(shù)據(jù)表,用來保存用戶的偏好設(shè)置,詳細 api 文檔見:https://brickverse-user-service-gracewen1.cloud.okteto.net/doc.html#/brick/%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E5%81%8F%E5%A5%BD%E7%AE%A1%E7%90%86/createOrUpdateUserPreferenceUsingPOST。

用戶可以有很多設(shè)置,我的設(shè)想是每個用戶可以有多個 key-value 鍵值對,但同一個用戶,同一個 key,只能有一條記錄。為了簡單,就提供一個接口給到用戶添加或者更新偏好。我的設(shè)想是,對于同一個 userId, key,如果沒有記錄就添加,有的話,就更新 value。我對 Mybatis plus 不熟,但是在寫的過程中,點出了一個 saveOrUpdate 方法,就認為這正是我要的,保存或者更新嘛。我在 Flyway 腳本里將 userId 和 key 設(shè)置成唯一索引,心想,當我試著保存一個記錄時,首先嘗試插入,碰到已有記錄的錯誤時,該方法就轉(zhuǎn)而調(diào)用 update。

CREATE TABLE `user_preference` (`id` bigint NOT NULL AUTO_INCREMENT,`user_id` varchar(100) NOT NULL,`key` varchar(100) NOT NULL,`value` varchar(10000) NOT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `user_id_key` (`user_id`,`key`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

public boolean saveOrUpdatePreference(String userId, UserPreferenceDto dto) {var key = dto.getKey();var value = dto.getValue();UserPreference userPreference = new UserPreference();userPreference.setUserId(userId);userPreference.setKey(key);userPreference.setValue(value);return this.saveOrUpdate(userPreference);}

沒想到,實際上,當想要更新這個 value 時,仍然報了唯一索引沖突錯誤,而沒有進行更新。這時,我才知道,這個 saveOrUpdate,在不傳入主鍵時,總是嘗試插入。這時我用 Google 搜索如何讓 saveOrUpdate 根據(jù)自定義查詢條件去判斷是否已存在呢?發(fā)現(xiàn)似乎只有國人在用 Mybatis Plus,找到的鏈接全是 csdn 對 saveOrUpdate 的泛泛簡介,沒有一篇文章講解高級用法。

這時我抱著試一試的想法,去問了一下 ChatGPT,沒想到它立刻馬上給予了詳細的說明,不僅有代碼示例,還有溫馨提示,主要指出我的代碼問題在于調(diào)用 saveOrUpdate 時,沒有去數(shù)據(jù)庫里查詢已有記錄。

你看,它給的代碼示例,在調(diào)用 saveOrUpdate 之前,先使用 QueryWrapper 去查詢了數(shù)據(jù)庫里的現(xiàn)有記錄,然后再設(shè)置值。看到這里我秒懂了,我需要在調(diào)用 saveOrUpdate 之前,根據(jù) userId 和 key 來查詢一下數(shù)據(jù)庫中的記錄。這時,我想,能不能把這個查詢做為參數(shù)直接扔給 saveOrUpdate 呢?我試著在 saveOrUpdate 的第一個參數(shù)后加了一個逗號,這時, Copilot 就自動幫我補全了代碼,我一看,還正是我需要的條件呢!

我按了一下 Tab 鍵,提交了這個改動:

在 cicd 流水線跑完后,我再試了一次,重新選擇皮膚顏色,更新成功了!

總結(jié)

我感覺自己從此可以擺脫面向 Google 和 StackOverflow 編程的習(xí)慣了,轉(zhuǎn)而面向 ChatGPT 和 Copilot 編程。ChatGPT 和 Copilot,可以讓程序員在嘗試新的領(lǐng)域時,變得更加有效率。就像朋友圈有朋友留言說的,ChatGPT 和 Copilot 可以互相結(jié)對編程,讓 AI 們?yōu)槲覀兇蚬ぃ?/p>

標簽:

X 關(guān)閉

X 關(guān)閉