AI编程工具Copilot与Codeium的实测对比
csdn原创谢绝转载
简介
现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来.
-
GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑,看它的价格就知道了,最开始是10美元1个月,后面好像涨到20美元了.
我个人给它起了个嘴强王者的称号,就是动动嘴就能实现代码. -
Codeium是一款免费的Ai辅助编程工具,支持70多种编程语言,插件支持40多种编辑器.功能也挺强大的,关键免费的,
我称赞它为白Piao党们的编程秘书.
其他文章
AndroidStudio上安装Codeium方法.
Android Studio安装AI编程助手Github Copilot
环境
- 测试使用的是Android Studio, Codeium要在VsCode上支持对话,这里只简单对比编程的功能.
- 语言Java
代码对比
在同一个Android Studio上,书写相似的简单代码,得到补全代码.然后对比二者表现.
代码尽量挑选平常会用到的公共函数.
Copilot
// 作者:帅得不敢出门
public class Copilot {// 用递归实现斐波那契数列public static int fibonacci(int n) {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);}public void writeFile(String file, String content) {try {FileWriter fw = new FileWriter(file);fw.write(content);fw.close();} catch (IOException e) {e.printStackTrace();}}// 手动输入参数int dp后实现public int dp2px(int dp) {return (int) (dp * 3.0f + 0.5f);}// 手动输入Context参数public int dpToPx(Context context, int dp) {return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);}// 实现获取最前端的Activity名称的函数// 输入上面这行,copilot无任何提示public String getTopActivity(Context context) {return context.getClass().getSimpleName();}public boolean isAppForeground(Context context, String packageName) {return packageName.equals(getTopActivity(context));}public boolean isAppSystem(Context context, String packageName) {return context.getPackageManager().getLaunchIntentForPackage(packageName) == null;}public int getStatusBarHeight(Context context) {int result = 0;int resourceId = context.getResources().getIdentifier("status_bar_height","dimen", "android");if (resourceId > 0) result = context.getResources().getDimensionPixelSize(resourceId);return result;}public int getScreenWidth(Context context) {return context.getResources().getDisplayMetrics().widthPixels;}public String bytes2HexString(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte aByte : bytes) {String hex = Integer.toHexString(aByte & 0xFF);if (hex.length() < 2) sb.append(0);sb.append(hex);}return sb.toString();}public boolean isPhoneNumber(String phoneNumber) {return phoneNumber.matches("^1[3-9]\\d{9}$");}public String getDate() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());}public String getCurrentTime() {return new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());}public static int getTodayOfWeek() {return new Date().getDay();}public static int getDayOfWeek(Date date) {return date.getDay();}public static boolean isChinese(String str) {return str.matches("[\\u4e00-\\u9fa5]+");}/*这个会编译不过public boolean isScreenOn(Context context) {return context.getSystemService(Context.POWER_SERVICE).isScreenOn();}*/public void setBrightness(Context context, int brightness) {android.provider.Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);}public String getAndroidId(Context context) {return android.provider.Settings.Secure.getString(context.getContentResolver(),android.provider.Settings.Secure.ANDROID_ID);}}
Codeium
// 作者:帅得不敢出门
public class Codeium {// 用递归实现斐波那契数列public int fib(int n) {if (n == 0) {return 0;} else if (n == 1) {return 1;} else {return fib(n - 1) + fib(n - 2);}}// 输入到writeFile(会自动提示出参数及实现public void writeFile(String fileName, String content) {try {File file = new File(fileName);FileWriter fw = new FileWriter(file);fw.write(content);fw.close();} catch (IOException e) {e.printStackTrace();}}public int dp2px(int dp) {return (int) (dp * 0.5f + 0.5f);}// 要手动输入Context参数public int dpToPx(Context context, int dp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());}public String getTopActivity(Context context) {return "com.benew.testm";}public boolean isAppForeground(Context context, String packageName) {return false;}public boolean isAppSystem(Context context, String packageName) {return packageName.equals("com.android.systemui");}public int getStatusBarHeight(Context context) {return 0;}// 这个要手动输入Context参数public int getScreenWidth(Context context) {return context.getResources().getDisplayMetrics().widthPixels;}public String bytes2HexString(byte[] bytes) {StringBuilder sb = new StringBuilder();for (int i = 0; i < bytes.length; i++) {String hex = Integer.toHexString(0xFF & bytes[i]);if (hex.length() == 1) {sb.append('0');}sb.append(hex.toUpperCase());}return sb.toString();}public boolean isPhoneNumber(String phoneNumber) {// 默认是提示return false//return false;// 要手动先输入phoneNumber.matches(return phoneNumber.matches("^[1][3,4,5,7,8][0-9]{9}$");}public String getDate() {return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());}public String getCurrentTime(){return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());}public static int getTodayOfWeek(){Calendar cal = Calendar.getInstance();return cal.get(Calendar.DAY_OF_WEEK);}public static int getDayOfWeek(Date date){Calendar cal = Calendar.getInstance();cal.setTime(date);return cal.get(Calendar.DAY_OF_WEEK);}public static boolean isChinese(String str){return str.matches("[\\u4E00-\\u9FA5]+");}public boolean isScreenOn(Context context){return false;}public void setBrightness(Context context, int level){// 这里如果不主动输入codeium会无提示, 需要手动输入android.providerandroid.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, level);}public String getAndroidId(Context context){// 这里codeium要手动输入return android.provider 才会提示, 否则会提示成return nullreturn android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);}}
结果
代码部分对比图

由于工具,语言,代码量都较单一,无法以偏盖全,只是做个简单比较,另外就是输入的代码也会干扰到补全,
个人输入的与工具本身理解不一样也会导致结果差异.
- 斐波那契数列 Copilot会更简洁些,二者都未有异常处理,比如溢出,输入负数.
- public void writeFile(String file, String content)差不多,Copilot少一行.
- public int dp2px(int dp)结果不同,一个是剩0.5,一个是0.3都有问题, 需要参数中手动输入Context context参数才行.
- public int dpToPx(Context context, int dp) 因为手动输入Context参数结果正确,个人更喜欢Codeium不需要关注运算.
- public String getTopActivity(Context context)二者都不正确.
- public boolean isAppForeground(Context context, String packageName) 二者都不正确.
- public boolean isAppSystem(Context context, String packageName)二者都不正确.
- public int getStatusBarHeight(Context context)Copilot表现比较好.
- public int getScreenWidth(Context context)结果一样.
- public String bytes2HexString(byte[] bytes)差不多.
- 获取时间的字符串的函数,format的格式需要自己微调.
- public boolean isPhoneNumber(String phoneNumber),Codeium需要手动输入部分实现,Copilot表现好.
- getTodayOfWeek() Copilot用到过期的函数,Codeium表现好些.
- public static boolean isChinese(String str)二都结果一样.
- 设备屏幕亮度setBrightness,获取AndroidId getAndroidId, Codeium都需要手动输入部分实现,否则补全不了,Copilot表现好.
单纯从以上对比,Copilot综合实力更强,收费的,开通麻烦点,原因你懂的.
Codeium也能解决大部分场景,它是免费的,免费的,免费的,重要的事情说三遍,开通方便.
最后说一下,土豪上Copilot,其他上Codeium.
作者:帅得不敢出门 CSDN原创谢绝转载
相关文章:
AI编程工具Copilot与Codeium的实测对比
csdn原创谢绝转载 简介 现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑…...
webpack基础知识六:说说webpack的热更新是如何做到的?原理是什么?
一、是什么 HMR全称 Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用 例如,我们在应用运行过程中修改了某个模块,通过自动刷新会导致…...
Linux从安装到实战 常用命令 Bash常用功能 用户和组管理
1.0初识Linux 1.1虚拟机介绍 1.2VMware Workstation虚拟化软件 下载CentOS; 1.3远程链接Linux系统 &FinalShell 链接finalshell半天没连接进去 他说ip adress 看IP地址是在虚拟机上 win11主机是 终端输入: ifconfig VMware虚拟机的设置 & ssh连接_snge…...
webpack基础知识三:说说webpack中常见的Loader?解决了什么问题?
一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。如下图所示&#…...
深度学习:Pytorch常见损失函数Loss简介
深度学习:Pytorch常见损失函数Loss简介 L1 LossMSE LossSmoothL1 LossCrossEntropy LossFocal Loss 此篇博客主要对深度学习中常用的损失函数进行介绍,并结合Pytorch的函数进行分析,讲解其用法。 L1 Loss L1 Loss计算预测值和真值的平均绝对…...
【Android-java】Parcelable 是什么?
Parcelable 是 Android 中的一个接口,用于实现将对象序列化为字节流的功能,以便在不同组件之间传递。与 Java 的 Serializable 接口不同,Parcelable 的性能更高,适用于 Android 平台。 要实现 Parcelable 接口,我们需…...
Spring整合MyBatis小实例(转账功能)
实现步骤 一,引入依赖 <!--仓库--><repositories><!--spring里程碑版本的仓库--><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.i…...
List集合的对象传输的两种方式
说明:在一些特定的情况,我们需要把对象中的List集合属性存入到数据库中,之后把该字段取出来转为List集合的对象使用(如下图) 自定义对象 public class User implements Serializable {/*** ID*/private Integer id;/*…...
海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?
不同种类的软文会有不同的方式,下面小编就来来给大家分析一下: 方法一、要选定文章的突破点: 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…...
【秋招】算法岗的八股文之机器学习
目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络(CNN)循环神经…...
为什么list.sort()比Stream().sorted()更快?
真的更好吗? 先简单写个demo List<Integer> userList new ArrayList<>();Random rand new Random();for (int i 0; i < 10000 ; i) {userList.add(rand.nextInt(1000));}List<Integer> userList2 new ArrayList<>();userList2.add…...
SQL账户SA登录失败,提示错误:18456
错误代码 18456 表示 SQL Server 登录失败。这个错误通常表示提供的凭据(用户名和密码)无法成功验证或者没有权限访问所请求的数据库。以下是一些常见的可能原因和解决方法: 1.错误的凭据:请确认提供的SA账户的用户名和密码是否正…...
Linux 终端操作命令(1)
Linux 命令 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参…...
java与javaw运行jar程序
运行jar程序 一、java.exe启动jar程序 (会显示console黑窗口) 1、一般用法: java -jar myJar.jar2、重命名进程名称启动: echo off copy "%JAVA_HOME%\bin\java.exe" "%JAVA_HOME%\bin\myProcess.exe" myProcess -jar myJar.jar e…...
安装和配置 Home Assistant 教程 HACS Homkit 米家等智能设备接入
安装和配置 Home Assistant 教程 简介 Home Assistant 是一款开源的智能家居自动化平台,可以帮助你集成和控制各种智能设备,从灯光到温度调节器,从摄像头到媒体播放器。本教程将引导你如何在 Docker 环境中安装和配置 Home Assistant&#…...
解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题
文章目录 问题描述解决办法 笔者出问题时的运行环境: Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外,其它什…...
安全杂记 - 复现nodejs沙箱绕过
目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网:https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件,默认配置一直下一步即可&#x…...
信息安全事件分类分级指南
范围 本指导性技术文件为信息安全事件的分类分级提供指导,用于信息安全事件的防范与处置,为事前准备、事中应对、事后处理 提供一个基础指南,可供信息系统和基础信息传输网络的运营和使用单位以及信息安全主管部门参考使用。 术语和定义 下…...
Vue系列第八篇:echarts绘制柱状图和折线图
本篇将使用echarts框架进行柱状图和折线图绘制。 目录 1.绘制效果 2.安装echarts 3.前端代码 4.后端代码 1.绘制效果 2.安装echarts // 安装echarts版本4 npm i -D echarts4 3.前端代码 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm …...
SQL-每日一题【1164. 指定日期的产品价格】
题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
