谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

GitHub Copilot 与 ChatGPT:哪种工具更适合软件开发? 在软件开发的准确性方面,GitHub Copilot 的编码比 ChatGPT 的编码更加可靠。然而,为了更好地理解查询并做出响应,GitHub Copilot 使用自然语言处理 (NLP),这是人工智能的一个分支,专注于生成更人性化的响应。该工具能够在几秒钟内生成无错误的代码,并提供深入的见解以提高代码的质量。不断发展的编程世界正在采用新的工具和技术来提高正在构建的软件的质量和数量。用户可以通过使用正确的提示来定制结果,但就编码部分而言,GitHub 在定制和质量方面显然是领先的。 阅读详情

写在开头

这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升,也焦虑于Copilot等AI辅助编码工具,会将程序员这个工种和我们所熟悉的传统软件开发流程彻底颠覆,用计算机的极高效率碾压人类的低效率。

当然这些也都是后话了,我们目前能做的,就是保持敏锐的嗅觉,尝试去迎接AI时代的来临。做“未来世界的幸存者”。

本文是我深度体验了Github Copilot, ChatGPT等产品后,对于这些AI辅助开发工具的一次横向评测。写本文的初衷是帮助大家快速筛选出一款合适你的AI辅助工具。相信我,请不要再怀疑这些工具是否能给你带来效率提升。当你尝试使用后,很快就会习惯它们,甚至是离不开它们。

本文评测的工具有:

  • Github Copilot
  • ChatGPT(GPT-3.5)
  • New Bing
  • Cursor.so

这些工具可以结合起来使用,提升你的开发效率。所以这些工具之间并不是互斥关系。文章的最后会给出总结以及我的一些想法。

Github Copilot

Github Copilot是由Github和OpenAI合作推出的一个人工智能代码辅助工具,采用了OpenAI的GPT技术,能够为开发人员提供实时的代码提示和生成功能,类似于一个AI助手,帮助开发人员更快速、更方便地编写代码。

当前的Github Copilot基于GPT-3模型,它可以分析上下文并根据已有的代码和注释来推断出应该写什么代码。通过使用Github Copilot,开发人员可以减少手动输入代码的时间,提高代码的质量和效率。它支持多种编程语言,如Python、JavaScript、TypeScript、Ruby等,并可以与主流的集成开发环境(IDE)和文本编辑器配合使用。

使用体验

我已经深度使用了Copilot接近一个月,但每当我和同事朋友们聊到Copilot的使用体验,以及它在哪方面能够提高我的效率时,我仍很难用语言去描述,我只能粗略的总结为下面几个结论:

  • 编写你熟悉的语言时,他仅能帮助你减少一些重复模板代码的编写。编写你不熟悉的语言时,他能够准确推断你的意图,直接生成代码,免除了查询如何使用API的耗时工作
  • 它顺着你的心流生成片段代码,但很难从0开始为你创造整段代码,即使它是可以生成整段代码的,但是也常常是需要你手工修改的。

接下来看一下我常用的几种使用方式。

1. 根据上下文生成代码

它可以根据函数名,类名,注释,来推断你想写的代码,帮你填充。

2. 根据代码生成注释

反过来,它可以尝试理解你的代码,为你生成注释,你只需要给他一个 // 前缀

3. 帮你起变量名

它可以帮你器变量名,这可是很多英语不好的程序员的大福音。毕竟,编码的30%时间,是在想变量名。

4. 和你聊天,当然,是聊代码!

你没有听错,copilot可以在你的代码里聊天,但是显然不能和他唠家常。它并不是chatGPT,无法给你常识回答(应该是被故意限制了交流范围),只会和你扯皮。

正确的使用方式是让它和你讨论你写代码,他会总结你的上下文代码,并且给你一个它认为“合理”的解释。

以上就是我常用的几种方式,我查阅了很多资料,基本上面涵盖了大部分操作方式。当然,可能还有我没挖掘到的使用方式。

编码能力

说完使用体验,我想要引出我本次横向评测的一个评测标准,就是通过相近的试题,看下这几个工具的编码能力有何区别,给大家直观地对比。我们就先从Copilot开始。

独立编写:单例模式

我给它们设定的题目是独立写一个单例模式,这个题目是国内Java开发者“常考题”,里面除了基本的代码,还有很多细节需要注意,也可以很好的用来向AI们提问,看看它们是否真正地理解它们写的内容。

让我们欢迎第一位选手,Github Copilot。

上面的编码动画也是我认为最符合我日常使用copilot的案例,从创建类文件后,copilot帮我自动生成了私有变量,私有构造方法,以及获取单例的公有方法。在写公有方法的期间,它最开始的代码没有考虑双重检查锁,我给了它一些提示,它补全了剩余的代码。

需要注意的是,由于单例模式在网上有太多的学习资料,Copilot肯定也吸取了大量优秀代码,才能写的如此高效。并不代表所有复杂的代码题都能够帮你自动补全,并保证正确性。所以大家谨慎看待它的独立编码能力,也不要过分乐观。

补全项目现有代码

第二个测试,我们让它补全项目的现有代码,我拿一个我自己写的代码举例,其中有一个DiffDTO实体类,有一个addDiffDTO方法一行都没写,需要补全。

 可以看到它自动补全了代码,并且会用到上面已有的方法和变量。这也是它的强项,根据上下文信息推断代码该怎么补全,写出来的代码质量很高,不能说每次都可直接使用,但80%的情况下你是无需做大幅度修改的。

不足之处

Github Copilot有不足之处吗?我想了想,有以下几点:

  • 所有代码上下文通过https传到云端(微软的服务器),尽管我通读了微软的隐私保护政策,它承诺不会有任何代码被泄露。但放在国内网络安全大环境下,这样的处理数据方式,在国内公司内使用很可能会受到影响,需要用户注意。
  • 对于复杂的代码逻辑,比如连你都一下子看不懂的屎山代码,它的理解能力同样欠缺。它擅长的是网络上有很多公开资料的代码段落和实现方式。

ChatGPT

让我们来看下一位选手,最近火出圈的chatGPT。

chatGPT是一款基于GPT模型的聊天机器人,它可以像人类一样进行自然语言对话。它不仅可以回答用户的各种问题,还可以学习和理解用户的需求,提供更恰当的回答和建议。

得益于其基于GPT模型的强大语言处理能力。GPT模型可以理解代码中的自然语言描述部分。其次,chatGPT在训练阶段使用了大量的代码相关文本语料,包括代码库、API文档、程序员交流论坛等,因此具有一定的代码理解和识别能力。此外,chatGPT还可以通过不断的学习和自我优化,逐渐提高其对于代码相关问题的处理能力和准确度。

我文中使用的chatGPT是GPT-3.5版本。我们直接进入正题,看看它的编码能力。由于是对话方式,所以我们需要向它描述我们的需求。

编码能力

独立编写:单例模式

我:

请用Java写一个单例模式

ChatGPT:

public class Singleton {
​
 private static Singleton instance;
​
 private Singleton() {
 // 私有构造函数
 }
​
 public static synchronized Singleton getInstance() {
     // 双重检查锁定
     if (instance == null) {
        synchronized (Singleton.class) {
           if (instance == null) {
               instance = new Singleton();
           }
       }
     return instance;
      }
   }
}
​
// 使用方法
Singleton s = Singleton.getInstance();

写的不错,很有面试题刷多了的开发人员的风格,写了经常会被问到的双重校验锁,但是没有用volatile,让我们继续发问。

我:

为何要用双重检查锁定?

ChatGPT:

双重检查锁定(double-checked locking)是一种常见的单例模式的实现方式。它的目的是在不使用同步锁的情况下实现单例模式的线程安全,避免了每次获取对象实例时都进行同步锁的开销。但是,这种实现方式也有可能存在线程安全问题。

具体来说,双重检查锁定是在 getInstance 方法中加入了双重检查,即先判断实例是否已经存在,如果不存在再进行同步锁的操作。这样可以减少同步锁的开销,提高了效率。

但是,在多线程环境下,双重检查锁定也有可能出现线程安全问题,原因是在某些情况下,多个线程可能同时通过第一重检查,然后同时进行同步锁的操作,导致出现多个实例。

为了避免这种情况,需要将 getInstance 方法设置为 synchronized 关键字,保证在同一时刻只有一个线程可以访问该方法,从而避免多个实例的出现。但是,这样会带来一定的性能开销,因为每次访问 getInstance 方法都需要进行同步锁操作。

讲得不错,但很难不让人觉得是看多了面试文章。我们顺着volatile的问题继续问问他为啥不写volatile。

我:

上面的代码依然有漏洞,可以优化下吗

ChatGPT:

是的,即使使用了双重检查锁定,上面的代码仍然有漏洞,也就是可能出现线程安全问题。为了解决这个问题,可以使用 Java5 中引入的 volatile 关键字,通过禁止指令重排来保证线程安全。

优化后的代码如下:

public class Singleton {
private static volatile Singleton instance;
​
private Singleton() {
// 私有构造方法
}
​
public static Singleton getInstance() {
    if (instance == null) {
        synchronized (Singleton.class) {
            if (instance == null) {
            instance = new Singleton();
            }
        }
    return instance;
    }
}
}
​

上面的代码中,我们将 instance 字段添加了 volatile 关键字,这样可以保证在多线程环境中,instance 变量的读取和赋值操作是原子性的,即保证了线程的可见性和有序性,从而避免了出现多个实例的情况。

注意,这里的 volatile 关键字只是作用于 instance 字段本身,而不是整个 getInstance 方法。这样做可以减小同步锁的范围,提高了效率。

它自己想到并解决了volatile的细节问题,我们再结合他写的代码,问问一些面试官会问的问题。

我:

上面的代码中,同步的是一个Singleton.class,可以用int变量代替吗

ChatGPT:

不可以,使用 int 变量代替 Singleton.class 进行同步是不可行的。

因为在 Java 中,每个类都有一个唯一的 Class 对象,多个线程使用同一个类的 Class 对象进行同步,可以保证线程安全。而使用 int 变量进行同步,由于 int 是基本数据类型,它在内存中的每一份拷贝都可能不同,因此不能保证多个线程都使用同一个 int 变量进行同步,从而无法保证线程安全。

此外,使用 Class 对象进行同步还有一个好处,即可以保证实例变量的可见性,因为同步代码块中的读写操作都是在同一条线程中执行的。

因此,使用 Singleton.class 对象进行同步是保证线程安全的最佳方式,不建议使用其他方式进行同步。

回答的不错,理解了我提示语中的 Singleton.class 是指的它自己代码中的类,最后问一个volatile的细节。

我:

上面的代码中,如果不使用volatile,有可能会出现重排序问题,能具体展开讲讲吗

ChatGPT:

是的,如果没有使用volatile关键字,就有可能出现重排序问题。

在Java中,编译器和处理器都会对指令进行重排序,这是为了优化程序性能。例如,在一个if语句中,为了避免每次都进行判断,编译器可能会将判断条件提前到if语句外面。在单线程环境下,这种重排序是没有问题的,因为程序执行的结果是一样的。但是,在多线程环境下,重排序可能会导致线程安全问题。

考虑下面的代码:

public class Singleton {
private static Singleton instance;
​
private Singleton() {}
​
public static Singleton getInstance() {
    if (instance == null) {
        synchronized (Singleton.class) {
            if (instance == null) {
            instance = new Singleton();
            }
        }
    return instance;
    }
}
}

在这个代码中,如果没有使用volatile关键字,就有可能出现下面的重排序:

  1. 线程A调用getInstance()方法,发现instance为null,进入同步块。
  2. 线程B调用getInstance()方法,由于instance还没有被初始化,也发现instance为null,也进入同步块。
  3. 线程A执行instance = new Singleton(),在执行该语句时,可能会被重排序为下面这样:
memory = allocate(); //1:分配对象的内存空间
ctorInstance(memory); //2:初始化对象
instance = memory; //3:将对象赋值给instance变量

这个重排序是允许的,因为在单线程环境下,这个顺序和原来的顺序没有区别。但是,在多线程环境下,这个重排序可能会导致线程安全问题,因为线程B此时检查instance不为null,就会直接返回instance,这个instance还没有被初始化,就会导致错误。

为了避免这种情况,可以使用volatile关键字来确保instance变量的可见性,从而避免重排序问题。

上面的对话,是一个典型的面试题,网上有很多文章也会顺着这个思路写下来,所以chatGPT回答的得心应手,并不代表在所有代码优化方面都能回答的这么细节和流畅。但不得不说,如果你第一次用chatGPT,你还是会被它的能力和思路所震惊。

接下来我们让chatGPT解决一个kotlin中并发接口的设计,看看它对于不那么常见的复杂问题的解决能力

独立编写:Kotlin+Reactor设计并发接口

这是我在实际开发过程中遇到的一个比较难写的代码例子,在kotlin中使用reactor框架来写一个批量查询接口,由于性能要求,该接口中的每个查询必须并发执行(线程池执行)。我把这个遇到的实际问题作为测试的case,让我们来问问chatGPT。

我:

Kotlin中,如何用reactor框架写一个并发处理的方法,要求入参是List,方法中将字符串后面拼接同样的字符串,输出List

ChatGPT:

您可以使用Reactor框架中的Flux来实现这个要求。下面是一个示例代码:

import reactor.core.publisher.Flux
import reactor.core.scheduler.Schedulers
​
fun processStrings(strings: List<String>): List<String> {
      val flux = Flux.fromIterable(strings)
      .flatMap { str -> Mono.fromCallable { str+str }
      .subscribeOn(Schedulers.parallel())
  }
  return flux.collectList().block() ?: emptyList()
}

在这个例子中,我们使用Flux.fromIterable方法创建一个Flux,并使用flatMap方法处理每个字符串。在flatMap中,我们使用Mono.fromCallable方法来创建一个异步执行的函数,该函数将每个字符串转为大写。同时我们使用Schedulers.parallel()指定执行该函数的调度器,以实现并发执行的效果。

最后,我们使用collectList()方法等待所有异步操作完成并将结果作为List<String>返回。

需要注意的是,我们使用了并发执行,因此结果顺序可能与输入顺序不同。如果您需要保持结果顺序与输入顺序相同,可以使用concatMap方法代替flatMap。

在它给出的代码上,我加入了一个随机休眠的函数来验证是否代码真的执行了异步,并且给了它入参 [0-9],然后执行,事实证明chatGPT给出的代码直接可以跑通,并且真正是并行执行的。给出结果:

Current ThreadName: parallel-1  sleep time: 188
Current ThreadName: parallel-2  sleep time: 483
Current ThreadName: parallel-3  sleep time: 785
Current ThreadName: parallel-4  sleep time: 524
Current ThreadName: parallel-5  sleep time: 175
Current ThreadName: parallel-6  sleep time: 894
Current ThreadName: parallel-7  sleep time: 440
Current ThreadName: parallel-8  sleep time: 158
Current ThreadName: parallel-9  sleep time: 227
Current ThreadName: parallel-10  sleep time: 300
Result:[99, 33, 66, 1010, 22, 11, 44, 77, 88, 55]

但是它的代码中使用了flatMap并没有保证返回结果List中的顺序和入参顺序相同,对于我的需求来说这是不可接受的,chatGPT在刚才的回答中考虑到了这个问题,告诉了我解决方案,使用concatMap代替,于是我修改为concatMap,结果如下:

Current ThreadName: parallel-1  sleep time: 933
Current ThreadName: parallel-2  sleep time: 715
Current ThreadName: parallel-3  sleep time: 278
Current ThreadName: parallel-4  sleep time: 182
Current ThreadName: parallel-5  sleep time: 14
Current ThreadName: parallel-6  sleep time: 313
Current ThreadName: parallel-7  sleep time: 228
Current ThreadName: parallel-8  sleep time: 650
Current ThreadName: parallel-9  sleep time: 554
Current ThreadName: parallel-10  sleep time: 334
Result:[11, 22, 33, 44, 55, 66, 77, 88, 99, 1010]

看上去一切ok,但其实问题很大。使用了concatMap后,实际上使用concatMap的这段代码并没有真正的并发执行,而是类似串行的方式,得到了结果。(本文不具体展开解释为何使用了concatMap后会有如此效果)

既然答案和我想要的有偏差,那就继续追问chatGPT。

我:

这段代码如何在保证返回值顺序和入参顺序相同的情况下,真正的并发执行?

ChatGPT:

可以使用flatMapSequential操作符替换concatMap操作符来实现真正的并发执行,并且保证返回值顺序和入参顺序相同。

修改后的代码如下:

fun processStrings(strings: List<String>): List<String> {
     val flux = Flux.fromIterable(strings)
         .flatMapSequential { str ->
             Mono.fromCallable {
                 str+str
             }.subscribeOn(Schedulers.parallel())
         }
     return flux.collectList().block() ?: emptyList()
}
Current ThreadName: parallel-1  sleep time: 755
Current ThreadName: parallel-2  sleep time: 342
Current ThreadName: parallel-3  sleep time: 340
Current ThreadName: parallel-4  sleep time: 562
Current ThreadName: parallel-5  sleep time: 405
Current ThreadName: parallel-6  sleep time: 399
Current ThreadName: parallel-7  sleep time: 250
Current ThreadName: parallel-8  sleep time: 351
Current ThreadName: parallel-9  sleep time: 169
Current ThreadName: parallel-10  sleep time: 118
Result:[33, 22, 11, 44, 55, 66, 77, 88, 99, 1010]

chatGPT回答基本正确了。

不过,有时候提问同样的问题,chatGPT会给出很多种错误答案,有的是编译错误,有的是串行执行不符合我的要求,以至于我不得不重新提问了好几次。这个过程中,我没有好好做截图。但我发现它其实就是在给出一些网络上常见的博客写的解法,很多时候都是错误的,或者说其实并不对应我对它的诉求。

不足之处

chatGPT针对代码方面的回答做了很多特殊的调优,所以它能够作为一个帮助程序员编码的工具。很多时候,我都更愿意问chatGPT而不是自己去谷歌答案。这已经证明了我足够信任它。如果要说有什么不足之处,我想到以下几点:

  • 面对不常见的复杂代码设计题,没有做到优秀的水平,但相信未来不断地训练后,会变得更加完善。
  • 它不能全程辅助你编码,这一点比不上Copilot。
  • 它不能阅读你整个项目的代码,无法和Copilot一样有强大的上下文能力。当然你可以手动给他很多上下文代码,但是相比Copilot肯定还是差距很大。毕竟Copilot可能阅读了你整个项目后给出一些建议。

New Bing

引用New Bing官网的介绍,New Bing 就像您在搜索⽹络时身边有⼀个研究助理、个⼈规划师和创意伙伴。您可以问你的实际问题,当你提出复杂的问题时,Bing 会给你详细的答复。 得到⼀个实际的答案。 Bing 会查看⽹络上的搜索结果,为您提供⼀个总结性的答案。 要有创意。当你需要灵感时,必应可以帮你写诗、写故事,甚⾄为你创造⼀个全新的形象。

总的来说,你可以理解为New Bing是一个chatGPT + Bing搜索引擎内网络信息 的加强版对话机器人。

使用体验

New Bing目前已经和谐了国内的IP,用国内IP访问任何new Bing相关的网页会强制跳转的Bing搜索首页。所以需要打开科学工具后使用,本文不具体展开。网上有很多攻略可查。

编码能力

我们仍然使用刚才的测试例子(单测+Kotlin并发接口)来测试NewBing的代码编写能力。Bing有三种对话模式可选,需要选到“更多 精确”,这种模式下,它会认认真真地给我们写代码。

独立编写:单例模式

我们直接提问,请看截图。

给出的代码比较基础,让我们追问下,让他修改。

它修改的很快,现在代码基本已经成型了。让我们和之前测试chatGPT提问一模一样的问题。

可以看到,页面下方,他还会给一些符合你问题上下文的推荐提示。

独立编写:Kotlin+Reactor设计并发接口

让我们来欣赏一下NewBing面对复杂问题的编码能力。

将它写的代码放入Demo,编译不通过。

继续质问它

最终它完成了代码,但是写法在我看来有些奇怪。整体来看,和chatGPT的使用体验是相似的。

不足之处

NewBing和chatGPT相比,给我感觉不分伯仲,面对不常见的复杂代码设计题,依然有一些力不从心。并且,不知道是不是使用了搜索引擎内的原因,比chatGPT更容易出现错误的结果。

相比Github Copilot,则和chatGPT一样,由于没有足够的代码上下文,对你的帮助远没有Copilot那么好用。

Cursor.so

Cursor.so 是 OpenAI 最近推出的一款IDE,它可以帮助你提供想法并编写代码。最值得一提的是,它是一款免费软件,OpenAI 还承诺将持续更新和改进,为用户带来更多新的功能和体验。

为什么它会受到关注,主要是因为它能够免费使用内置了类似Github Copilot的插件,毕竟Copilot是付费软件,很多小伙伴还没法免费体验到。

编码能力

独立编写:单例模式

cursor主要有两个功能,一个可以自动生成代码edit,一个是根据当前代码进行聊天chat。各自有独立的快捷键来启动。

我们让他写一个Java中的单例模式类,快捷键command+K,输入中文 ”写一个线程安全的单例模式“,它给出了如下答案。

public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

写的不错,带上了双重校验和volatile,很像是熟读面试代码的面试者。既然本段代码没什么细节问题,那就试用下聊天功能command+L

解释的和chatGPT以及NewBing都类似,并且还支持聊天历史记录展示。

补全项目现有代码

让他补全之前Copilot补全过的同样测试代码,写入threadLocal变量的代码,可以完成。

当我准备更进一步问问他对于这个代码怎么看的时候,它服务开始了长时间的不稳定。

不足之处

服务不稳定

不支持插件

没有插件市场,甚至没有集成版本控制,比如Git,在UI中没法查看改动的代码,所以几乎已经告别了开发大型项目了。只要稍微做一些代码改动,你就会忘记了代码的改动是哪里。

基础功能缺失

比如打开一个项目文件夹后居然不支持关闭,文件类型没有高亮区分,整体用下来感觉Cursor.so还处于一个很早期的阶段。

总结

最后,总结下这几个产品作为一个AI辅助编码工具的优缺点。

Github Copilot:

优点:

  • 可以根据提示自动生成代码,提高开发效率。
  • 可以学习你项目中的代码风格,获取足够多的上下文,并根据其生成代码。
  • 支持多种编程语言,适用范围广。

缺点:

  • 可能会存在隐私问题

chatGPT和New Bing:

优点:

  • 随时随地可用,不依赖代码项目,是你查询谷歌时的完美替代品。

缺点:

  • 它不能全程辅助你编码,这一点比不上Copilot,并且无法和Copilot一样有强大的上下文能力。
  • 对于复杂的代码逻辑,理解能力未必能让你满意。

Cursor.so

优点:

  • 免费的同时能够体验AI辅助编程,就是最大的优点

缺点:

  • 基础功能缺失,不能称之为一个可靠的IDE
  • 服务不稳定

一句话总结,如果你希望将这几个产品用于辅助你编程,提高编码效率,使用Github Copilot结合chatGPT是一个可行的方式。你可以在编写代码时使用Github Copilot,遇到问题时再求助chatGPT。如果暂时不想为Github Copilot付费,可以只使用chatGPT。不过,由于Cursor.so的使用体验不够好,且不易替代Github Copilot,建议还是等待Cursor.so之后的版本。

ChatGPT用户生态深度观察:从技术炒作到真实应用场景 大语言模型作为人工智能领域的重要分支,其核心原理是基于海量数据训练,通过Transformer架构实现上下文理解和内容生成。这项技术的价值在于重塑人机交互范式,将自然语言转化为可执行的指令,从而降低复杂任务的门槛。在工程实践中,大语言模型通过API集成和Prompt工程,能够显著提升信息处理与内容创作的效率。当前,以ChatGPT为代表的模型已在代码生成、文档撰写、数据分析等场景中展现出强大潜力,尤其受到程序员和内容创作者的青睐。然而,技术渗透面临用户分层明显、使用场景私密等挑战,其真实影响力既体现在职业驱 阅读详情

相关推荐

AI搜索赋能Web安全学习:零基础高效入门与内容创作变现指南

在网络安全领域,Web安全始终是核心议题,涉及SQL注入、XSS(跨站脚本)、CSRF(跨站请求伪造)等常见漏洞的攻防原理。理解这些漏洞的成因、利用方式及防御手段,是构建安全防护体系的基础。随着人工智能技术的发展,AI搜索工具通过自然语言处理和知识整合能力,正在改变传统技术学习模式。它们能够精准定位学习资源、动态生成学习路径、并实时解答具体技术问题,为学习者提供了强大的“外脑”支持,极大提升了从概念理解到工程实践的效率。将这种高效学习方法与内容创作相结合,通过撰写技术博客、录制实战教程等方式输出学习成果,不

weixin_33709590的博客 323

从零开始学习Cursor.so的方法和技巧

Cursor.so是一个软件开发工具,它可以让你用一个强大的AI来编写、编辑和聊天关于你的代码。它支持多种编程语言,如Python、Java、C#等,并且可以帮助你重构、理解和优化你的代码。Cursor.so还有一个聊天功能,你可以跟AI交流,询问问题,获取建议,甚至让AI写一些有趣的东西。

sinat_35073873的博客 7358

AI建站实战:WordPress外贸站从0到1与一人公司技术栈

“一个人就是一家公司”,这句话在AI时代正从一句口号变成一种可落地的商业模式。过去,一个独立开发者或创业者想要搭建一个专业网站,往往需要跨越设计、前端、后端、内容、运维等多重门槛,要么投入大量时间学习,要么支付高昂费用外包。但现在,情况正在发生根本性改变。以WordPress.com最新推出的AI网站构建器为例,它允许你通过简单的对话,在几分钟内生成一个包含布局、图片和内容的完整网站。这听起来像营销话术,但它背后揭示了一个关键趋势: AI正在将复杂的“工程化建站”过程,压缩为一个“描述需求-获得成品”的交互

weixin_34289454的博客 425

智能工具Cursor安装和使用

智能AI代码生成工具Cursor安装和使用

Charge8的博客 3万+

数学建模竞赛全流程实战指南:从Python环境搭建到论文写作

数学建模是通过数学语言和方法解决现实世界问题的核心过程,其本质是将复杂问题抽象为数学模型,并通过计算求解。这一过程遵循问题分析、模型假设、建立、求解、检验与应用的通用逻辑,其技术价值在于为决策提供量化依据。在工程实践与学术研究中,数学建模广泛应用于优化、预测、评价与分类等场景,例如资源调度、趋势分析与风险评估。本文聚焦于数学建模竞赛,结合Python编程与数据处理,提供从赛题拆解、算法实现到论文撰写的完整实战路径,特别涵盖了数据可视化与AI工具辅助等高效技巧,旨在帮助参赛者系统掌握建模全流程。

weixin_30265103的博客 413

别再只抄代码了!深入理解MQ2传感器数据手册,搞定ppm换算公式

本文深入解析MQ2烟雾传感器的工作原理与ppm换算公式,从数据手册解读到数学建模,提供详细的校准与优化方法。通过实际案例和代码示例,帮助开发者准确测量气体浓度,解决常见问题,提升传感器应用的可靠性。

weixin_42713608的博客 504

【最详细教程Cursor】智能 AI 代码生成工具 Cursor 安装和使用介绍

Cursor.so 是一个集成了 GPT-4 的国内直接可以访问的,优秀而强大的免费代码生成器,可以帮助你快速编写、编辑和讨论代码。它支持多种编程语言,如 Python, Java, C#, JavaScript 等,并且可以根据你的输入和需求自动生成代码片段。Cursor.so 还可以帮助你重构、理解和优化代码,提高开发效率。强烈建议程序员们都要安装使用,将带来革命性的编码效率提升。本文简单介绍下 Cursor 的安装和使用。本文只是一个使用 Cursor 的简单示例,帮助大家如何安装和使用。

wufaqidong1的博客 10万+

云架构师进阶【SAP迁移方案设计】手把手教您玩转SAP上云

一,项目背景介绍 今天又接到了北京某制造企业SAP迁移的场景,先简单说明一下,好好的SAP在运行着为什么要做迁移这类大动作呢?众所周知SAP的ERP是企业的绝对核心系统,尤其对于制造业更是核心的系统,这样一套核心系统还是生产环境在迁移的过程中必然要面临比较大的挑战,如果有任何问题的话,都会对企业的绩效产生很大的影响。 经过跟客户沟通才得知,客户的SAP原来的系统是托管在运营商机房里,近期感染了勒索病毒,导致业务宕机,SAP应用服务器无法启动,仅有的数据库服务器可以运行。基于上述情况公司领导当机立断决定迅

bdsh818的博客 4220

Cursor编辑器安装教程

cursor编辑器的简单使用

蓝朽的小世界 3273

28-基于STM32单片机的便携式健康监测系统设计与实现(程序+原理图+元件清单)

本文详细介绍了基于STM32单片机的便携式健康监测系统设计与实现,该系统集成MAX30102光电传感器和MSP20压力传感器,实时监测心率、血氧和血压等关键生理指标。通过STM32F103C8T6主控芯片和HC-05蓝牙模块,实现数据采集、处理及无线传输,具有便携性高、操作简便等特点,适用于家庭健康监护和户外运动场景。

weixin_29191669的博客 420

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

谁能真正替代你? AI编码工具深度对比 (chatGPT/Copilot/Cursor/New Bing)

写在开头这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升,也焦虑于Copilot等AI辅助编码工具,会将程序员这个工种和我们所熟悉的传统软件开发流程彻底颠覆,用计算机的极高效率碾压人类的低效率。当然这些也都是后话了,我们目前能做的,就是保持敏锐的嗅觉,尝试去迎接...

杨建荣的学习笔记 1103

C#实战:通过ZPL指令与斑马打印机交互及状态监控全解析

本文全面解析了在C#中通过ZPL指令与斑马打印机进行交互及状态监控的实战方法。文章详细介绍了TCP/IP网络打印和Windows Raw打印两种核心连接方式,并深入讲解了ZPL指令的构建。重点阐述了通过SGD命令和斑马官方SDK实现实时打印状态监控的策略,为工业自动化场景下的可靠打印提供了完整解决方案。

weixin_29294395的博客 117

AI编程工具可观测性实战:用AgentsView构建本地会话分析与成本监控仪表盘

在软件工程领域,可观测性是理解系统内部状态、诊断问题与优化性能的关键能力。其核心原理是通过日志、指标和追踪等数据源,实现对系统行为的监控与分析。对于日益普及的AI编程工具,建立可观测性同样至关重要,它能帮助开发者量化AI辅助编程的效率与成本,从而优化工作流并控制预算。AgentsView作为一个开源项目,正是这一理念的工程实践。它通过无侵入的日志采集探针,自动解析Cursor、Claude Desktop等30余种桌面AI工具的本地会话记录,将零散的对话、模型调用与费用估算信息统一汇聚至本地SQLite数据

weixin_33787529的博客 329

最全的Hermes安装教程以及Hermes WebUI安装部署和配置指南

* 直接执行命令**

小石头的专栏 1074

SCADA|用KingSCADA实现设备台账的查询功能

以上为用KingSCADA实现设备台账的查询功能,另外还有一些细节功能,比如当点击增加按钮时弹出的信息窗口内的信息希望是在选中的某行信息,只要找到差不多的设备,修改个别参数即可,避免增加时弹出空白页,所有信息都需要填写。以上为实现设备台账查询的最简单实现,实际项目中可能会更复杂,你做过哪些设备台账或相关的功能,有比较好的创意或高难度功能方法,欢迎在留言区评论,或在交流群探讨,互通有无,共同进步。首先完成界面的组态工作,主要是通过查询按钮,查询SQLServer数据库的设备台账数据,然后填充到报表内。

做有价值的事,积累有价值的笔记! 480

AI SEO:从关键词研究到内容创作的全链路智能化实践指南

搜索引擎优化(SEO)的核心在于理解用户搜索意图,并通过高质量内容和技术优化满足其需求。其基本原理涉及关键词研究、内容创建、网站技术架构优化及链接建设等多个环节。随着人工智能技术的发展,AI正深刻改变SEO的工作范式,为从业者带来显著的技术价值。通过自然语言处理和机器学习,AI能够自动化处理海量数据,实现精准的搜索意图分类、内容差距分析及个性化内容生成,从而大幅提升策略制定与内容生产的效率与科学性。在应用场景上,AI已深度融入市场与竞品分析、内容创作优化、技术SEO监控及自动化工作流构建等关键领域。本文聚焦

weixin_30682415的博客 356

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LLM模型开发教程(二)内功筑基

本文摘要: 深度学习开发环境配置指南,包含关键软件包安装、硬件配置建议和效率工具推荐。主要内容包括: 开发环境搭建:列出PyTorch、Transformers等核心包的指定版本及安装命令,强调Python 3.10.18环境要求。 硬件配置方案:对比NVIDIA与AMD显卡性能,推荐RTX4090等配置,提供完整硬件选型表。 免费GPU资源:汇总阿里云、Kaggle和Google Colab的免费GPU获取方式。 效率工具:介绍通义灵码、GitHub Copilot等AI编程助手,以及GPT、Claude

qq_38560742的博客 982

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

用 Copliot 帮你搞定 Java 样板代码

GitHub Copilot 帮我开发了一个处理 CSV 文件的 Java 应用程序。虽然不是什么很困难的任务,但在 Java 中总是感觉比在 Python 或 Node 中更难。由于这次有了 Copilot 的加持,只需要输入两个简单的命令,选择合适的工具建议点击“接受”就搞定了。本文的 GitHub 仓库:https://github.com/lucasjellema/my-codepilot...

程序猿DD 1095

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Cursor:一个集成GPT-4的IDE开发工具

cursor.so 是一个适合程序员编码的,且集成了 GPT-4 的免费 IDE 工具(目前免费),可以帮助用户快速编写、编辑和优化代码。cursor.so 支持主流的编程语言,并且可以根据用户的输入描述自动生成满足需求的代码片段。cursor.so 还可以帮助用户优化和重构代码,或者为陌生的代码添加注释以帮助理解代码,提高开发效率。总而言之,这是一款革命性的编码 IDE 工具,目前官网提供了 Windows、Linux 和 macOS 三个版本的发行版。

chszs的专栏 6997

Reactor Threading and Schedulers线程调度

背景 Reactor是非阻塞响应式编程的一种实现,提供各种异步流操作和编排的API,其本质上是与并发无关的,并不强行使用并发编程,而是提供类库由开发者决定多线程并发模式。 简单实现reactor多线程 根据reactivestream模型可以看出,当调用subscribe时Subscriber和Publisher才建立了发布订阅关系,Subscriber开始请求数据,而在此之前调用链并不会发生数据流动nothinghappensuntilyousubscribe,所以默认情况下,可以简单...

mowushenght的专栏 2830

大语言模型 AI 辅助编码使用过程体验报告(Github Copilot、Cursor)

代码规模少的时候,例如只有 1 个文件,100 - 200 行代码时,它生成和修改都比较准确,当代码规模和文件逐渐变多,逻辑变多时,它的生成和修改变得有误,会遇到包括变量未定义、错删代码、没有考虑上下文逻辑等问题。支持精细化控制,使用过程中,个人的强烈感受到,选中的范围越小、越细,它的结果越好,错误也越少。你是一位资深的研发工程师,精通前端、数据库和Canvas相关特性,现在,你要基于当前代码的上下文,完成如下任务:保存画布上的图片元素到IndexedDB,并且方便后续以用户名取回来,还原到画布上。

技术行者 2576
上一篇: 阿里内部并发编程核心知识手册,后端Java人的面试福音
下一篇: 阿里技术官首发的Java核心框架指导手册,为了大厂得码住学起来~
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值