我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java服务RestTemplate与HttpClient怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java服务RestTemplate与HttpClient怎么使用

本篇内容主要讲解“Java服务RestTemplate与HttpClient怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java服务RestTemplate与HttpClient怎么使用”吧!

概述

常见的远程调用方式有以下2种:

  • RPC: Remote Produce Call远程过程调用,类似的还有RMI(remote method invoke)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表。

  • Http: http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。 现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。现在热门的Rest风格,就可以通过http协议来实现。

如果项目全部采用 Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。

如果项目的技术栈多样化,主要采用了Spring和SpringBoot框架,那么SpringCloud搭建微服务是不二之选,使用Http方式来实现服务间调用。

java开发中,使用http连接,访问第三方网络接口,通常使用的连接工具为RestTemplate、HttpClient和OKHttp。

RestTemplate

概述及依赖

HttpClient和OKHttp两种连接工具,使用起来比较复杂,如果使用spring框架,可以使用restTemplate来进行http连接请求。

restTemplate默认的连接方式是java中的HttpConnection,可以使用ClientHttpRequestFactory指定不同的HTTP连接方式。

依赖

<dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-web</artifactId>    <version>5.2.2.RELEASE</version></dependency><dependency>    <groupId>org.apache.httpcomponents</groupId>    <artifactId>httpclient</artifactId>    <version>4.5.7</version></dependency>
配置类

基础配置

@Configurationpublic class RestTemplateConfig {   @Bean   public RestTemplate restTemplate(ClientHttpRequestFactory factory) {       return new RestTemplate(factory);   }   @Bean   public ClientHttpRequestFactory simpleClientHttpRequestFactory() {       SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();       factory.setReadTimeout(150 * 1000); // ms       factory.setConnectTimeout(150 * 1000); // ms       return factory;   }}

进阶配置

import org.apache.http.client.HttpClient;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;import org.springframework.web.client.RestTemplate;@Configurationpublic class RestTemplateConfig {        @Bean    public HttpClientConnectionManager poolingHttpClientConnectionManager() {                PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();        // 最大连接数        poolingHttpClientConnectionManager.setMaxTotal(500);        // 同路由并发数(每个主机的并发)        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);        return poolingHttpClientConnectionManager;    }        @Bean    public HttpClient httpClient(HttpClientConnectionManager poolingHttpClientConnectionManager) {        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();        // 设置http连接管理器        httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);                // 设置默认请求头                return httpClientBuilder.build();    }        @Bean    public ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient) {        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();        // httpClient创建器        clientHttpRequestFactory.setHttpClient(httpClient);        // 连接超时时间/毫秒(连接上服务器(握手成功)的时间,超出抛出connect timeout)        clientHttpRequestFactory.setConnectTimeout(5 * 1000);        // 数据读取超时时间(socketTimeout)/毫秒(服务器返回数据(response)的时间,超过抛出read timeout)        clientHttpRequestFactory.setReadTimeout(10 * 1000);        // 从连接池获取请求连接的超时时间,不宜过长,必须设置/毫秒(超时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool)        clientHttpRequestFactory.setConnectionRequestTimeout(10 * 1000);        return clientHttpRequestFactory;    }        @Bean    public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory) {        // 配置请求工厂        return new RestTemplate(clientHttpRequestFactory);    }}
使用

实体类

@Data@Builder@NoArgsConstrutor@AllArgsConstrutorpublic class BaseResponse<TempUser> implements Serializable {    private static final long serialVersionUID  = 1L;    private String responseCode;    private String responseMessage;    private List<TempUser> responseData;}
@Data@Builder@NoArgsConstrutor@AllArgsConstrutorpublic class TempUser implements Serializable {    private static final long serialVersionUID  = 1L;    private String userName;       private Integer age;}
GET请求

普通访问

BaseResponse result = restTemplate.getForObject(    "http://localhost:8080/cs-admin/rest/getUser?userName=张三&age=18", BaseResponse.class);

返回HTTP状态

ResponseEntity<BaseResponse> responseEntity = restTemplate.getForEntity(    "http://localhost:8080/cs-admin/rest/getUser?userName=张三&age=18", TempUser.class);// 获取状态对象HttpStatus httpStatus = responseEntity.getStatusCode();// 获取状态码int statusCodeValue = responseEntity.getStatusCodeValue();// 获取headersHttpHeaders httpHeaders = responseEntity.getHeaders();// 获取bodyBaseResponse result = responseEntity.getBody();

映射请求参数

Map<String, Object> paramMap = new HashMap<>();paramMap.put("userName", "张三");paramMap.put("age", 18);BaseResponse result = restTemplate.getForObject(    "http://localhost:8080/cs-admin/rest/getUser?userName={userName}&age={age}",     BaseResponse.class, paramMap);
POST请求

普通访问接口

TempUser param = new TempUser();param.setUserName("张三");param.setAge(18);BaseResponse result = restTemplate.postForObject("http://localhost:8080/cs-admin/rest/getPostUser",                                              param, BaseResponse.class);

带HEAD访问接口

// 请求头信息HttpHeaders headers = new HttpHeaders();//headers.setContentType(MediaType.valueOf("application/json;charset=UTF-8"));headers.setContentType(MediaType.APPLICATION_JSON_UTF8);//headers.add("headParam1", "headParamValue");// 请求体内容TempUser param = new TempUser();param.setUserName("张三");param.setAge(18);// 组装请求信息HttpEntity<TempUser> httpEntity=new HttpEntity<>(param, headers);BaseResponse result = restTemplate.postForObject("http://localhost:8080/cs-admin/rest/getPostUser",                                              httpEntity, BaseResponse.class);

无请求体的访问:仅method为post,传参方式仍然为get的param方式

Map<String, Object> paramMap = new HashMap<>();paramMap.put("userName", "张三");paramMap.put("age", 18);BaseResponse result = restTemplate.postForObject(    "http://localhost:8080/cs-admin/rest/getPostUserNoBody?userName={userName}&age={age}",     null, BaseResponse.class, paramMap);System.out.println(result);
上传文件

后台接口代码:

@RequestMapping("uploadFile")public TempUser uploadFile(HttpServletRequest request, TempUser form) {    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;    //获取文件信息    MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");    TempUser tempUser = new TempUser();    if (multipartFile != null) {        tempUser.setUserName(form.getUserName() + " " + multipartFile.getOriginalFilename());    }    if(form!=null){        tempUser.setAge(form.getAge());    }    return tempUser;}

访问方式:

// 文件FileSystemResource file=new FileSystemResource("D:\\Elasticsearch权威指南(中文版).pdf");// 设置请求内容MultiValueMap<String, Object> param=new LinkedMultiValueMap<>();param.add("file", file);// 其他参数param.add("userName", "张三");param.add("age", 18);// 组装请求信息HttpEntity<MultiValueMap<String, Object>> httpEntity=new HttpEntity<>(param);// 发送请求TempUser result = restTemplate.postForObject("http://localhost:8080/cs-admin/rest/uploadFile",                                              httpEntity, TempUser.class);

HttpClient

概述

HttpClient 通过连接池创建连接:

  • 管理连接的基本单位是Route(路由),每个路由上都会维护一定数量的HTTP连接

  • 每次调用后必须执行 releaseConnection

  • 路由可以理解为客户端机器到目标机器的一条线路

  • 如果不给 httpclient配置指定的连接管理器,httpclient会自动使用PoolingHttpClientConnectionManager作为连接管理器。

  • PoolingHttpClientConnectionManager默认的maxConnPerRoute和maxConnTotal分别是是2和20。也就是对于每个服务器最多只会维护2个连接,看起来有点少。所以,在日常使用时我们尽量使用自己配置的连接管理器比较好。

连接池:

  • 连接池技术作为创建和管理连接的缓冲池技术。

  • 连接池管理的对象是长连接

  • 有长连接的优势

**长连接:**是指客户端与服务器端一旦建立连接以后,可以进行多次数据传输而不需重新建立连接,

优势:

  • 省去了每次数据传输连接建立的时间开销

  • 资源的访问控制

**短连接:**每次数据传输都需要客户端和服务器端建立一次连接

使用

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可:

  • 创建HttpClient对象

  • 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

  • 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数,参数则必须用NameValuePair[]数组存储

  • 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse

  • 调用HttpResponse的getAllHeaders()getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponsegetEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容

  • 释放连接。无论执行方法是否成功,都必须释放连接

依赖:

<dependency>    <groupId>org.apache.httpcomponents</groupId>    <artifactId>httpclient</artifactId>    <version>4.5.2</version></dependency>    <dependency>    <groupId>org.apache.httpcomponents</groupId>    <artifactId>httpclient-cache</artifactId>    <version>4.5.2</version></dependency>    <dependency>    <groupId>org.apache.httpcomponents</groupId>    <artifactId>httpmime</artifactId>    <version>4.5.2</version></dependency>

java工具类

import com.alibaba.fastjson.JSON;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.apache.http.Consts;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import java.net.URI;import java.nio.charset.StandardCharsets;import java.util.ArrayList;import java.util.List;import java.util.Map;@Slf4jpublic class HttpClientUtil {    public static final String APPLICATION_JSON_VALUE = "application/json";    private static final Logger logger = log;    private static final Integer CONN_TIME_OUT = 3000;// 超时时间豪秒    private static final Integer SOCKET_TIME_OUT = 10000;        private static final Integer DEFAULT_MAX_PER_ROUTE = 40;        private static final Integer MAX_TOTAL = 400;    private static HttpClient httpClient;    static {        // 请求配置        RequestConfig requestConfig = RequestConfig.custom()                .setConnectTimeout(CONN_TIME_OUT)                .setConnectionRequestTimeout(CONN_TIME_OUT)                .setSocketTimeout(SOCKET_TIME_OUT)                .build();        // 管理 http连接池        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();        cm.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE);        cm.setMaxTotal(MAX_TOTAL);        httpClient = HttpClients.custom()            .setConnectionManager(cm)            .setDefaultRequestConfig(requestConfig)            .build();    }        public static String requestGet(String url, Map<String, String> paramsMap) throws Exception {        logger.info("GET request  url:{} params:{}", url, paramsMap);        Long start = System.currentTimeMillis();        List<NameValuePair> params = initParams(paramsMap);        // Get请求        HttpGet httpGet = new HttpGet(url);        try {            // 设置参数            String str = EntityUtils.toString(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));            String uriStr = StringUtils.isEmpty(str) ?                 httpGet.getURI().toString() : httpGet.getURI().toString() + "?" + str;            httpGet.setURI(new URI(uriStr));            // 发送请求            HttpResponse response = httpClient.execute(httpGet);            logger.info("GET request  url:{} response:{} time:{}",                    url, response, System.currentTimeMillis() - start);            // 获取返回数据            return getSuccessRetFromResp(response, url, JSON.toJSONString(paramsMap));        } finally {            // 必须释放连接,不然连接用完后会阻塞            httpGet.releaseConnection();        }    }        public static String requestPost(String url, Map<String, String> paramsMap) throws Exception {        logger.info("POST request  url:{} params:{}", url, paramsMap);        Long start = System.currentTimeMillis();        List<NameValuePair> params = initParams(paramsMap);        HttpPost httpPost = new HttpPost(url);        try {            httpPost.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));            HttpResponse response = httpClient.execute(httpPost);            logger.info("POST request  url:{} response:{}  time:{}",                    url, response, System.currentTimeMillis() - start);            String retStr = getSuccessRetFromResp(response, url, JSON.toJSONString(paramsMap));            return retStr;        } finally {            httpPost.releaseConnection();        }    }        public static String requestPostJsonStr(String url, String json) throws Exception {        logger.info("POST request  url:{} params:{}", url, json);        long start = System.currentTimeMillis();        HttpPost httpPost = new HttpPost(url);        try {            StringEntity entity = new StringEntity(json, Consts.UTF_8);            entity.setContentType(APPLICATION_JSON_VALUE);            httpPost.setEntity(entity);            HttpResponse response = httpClient.execute(httpPost);            logger.info("POST request  url:{} response:{}  time:{}",                         url, response, System.currentTimeMillis() - start);            return getSuccessRetFromResp(response, url, json);        } finally {            // 资源释放            httpPost.releaseConnection();        }    }        public static String requestPostJson(String url, Object obj) throws Exception {        String params = JSON.toJSONString(obj);        return requestPostJsonStr(url, params);    }    private static String getSuccessRetFromResp(HttpResponse response, String url, String params) throws Exception {        String retStr = "";        // 检验状态码,如果成功接收数据        int code = response.getStatusLine().getStatusCode();        if (code == 200) {            retStr = EntityUtils.toString(response.getEntity(), Consts.UTF_8);        } else {            throw new RuntimeException(String.format("Http request error:%s, url:%s, params:%s", response, url, params));        }        logger.info("Http request retStr:{}. url:{}", retStr, url);        return retStr;    }    private static List<NameValuePair> initParams(Map<String, String> paramsMap) {        List<NameValuePair> params = new ArrayList<NameValuePair>();        if (paramsMap == null)            return params;        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {            params.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));        }        return params;    }}

到此,相信大家对“Java服务RestTemplate与HttpClient怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java服务RestTemplate与HttpClient怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java服务RestTemplate与HttpClient怎么使用

本篇内容主要讲解“Java服务RestTemplate与HttpClient怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java服务RestTemplate与HttpClient怎么使
2023-07-06

Java服务RestTemplate与HttpClient如何使用

这篇“Java服务RestTemplate与HttpClient如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Jav
2023-07-02

Java HttpClient怎么使用

今天小编给大家分享一下Java HttpClient怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、导入依赖
2023-07-02

Java原生HttpClient怎么使用

这篇文章主要介绍“Java原生HttpClient怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java原生HttpClient怎么使用”文章能帮助大家解决问题。1.信任证书管理类packa
2023-06-29

java怎么使用HttpClient调用接口

这篇文章主要介绍“java怎么使用HttpClient调用接口”,在日常操作中,相信很多人在java怎么使用HttpClient调用接口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么使用HttpC
2023-07-04

java中怎么使用httpclient提交表单

在Java中使用HttpClient提交表单可以通过以下步骤实现:1. 添加依赖:首先,需要在项目中添加HttpClient的依赖。可以使用Maven或者Gradle来管理依赖。Maven依赖:```xmlorg.apache.httpco
2023-08-08

JAVA GUI与MouseListener怎么使用

本篇内容主要讲解“JAVA GUI与MouseListener怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA GUI与MouseListener怎么使用”吧!所谓监听器,它一定是
2023-06-21

Java中random.nextInt()与Math.random()怎么使用

在Java中,可以使用Random类或Math.random()方法来生成随机数。使用Random类的nextInt()方法:import java.util.Random;Random random = new Random();int
Java中random.nextInt()与Math.random()怎么使用
2024-03-08

Java方法与递归怎么使用

今天小编给大家分享一下Java方法与递归怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。java中方法的使用什么是方法
2023-06-30

PL/SQL怎么与Java集成使用

在PL/SQL中与Java集成可以通过使用Java存储过程或函数来实现。以下是步骤:创建Java类和方法:首先在Java中编写需要使用的方法或函数,然后将其打包成.jar文件。将Java类加载到Oracle数据库中:将.jar文件上传到Or
PL/SQL怎么与Java集成使用
2024-05-07

Future怎么在Java与Scala中使用

Future怎么在Java与Scala中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Future很多同学可能会有疑问,Futrue跟异步编程有什么关系?从
2023-05-30

怎么使用java获取服务器ip

可以使用Java中的InetAddress类来获取服务器IP地址。以下是一个简单的Java代码示例:```javaimport java.net.InetAddress;public class GetServerIP {public st
2023-06-04

java免费云服务器怎么使用

要使用免费的云服务器,可以按照以下步骤进行操作:1. 注册一个云服务器提供商的账号。2. 登录到云服务器提供商的控制台。根据不同的提供商,控制台的界面可能会有所不同。3. 在控制台中选择创建新的云服务器实例。通常会有一个“新建实例”或“创建
2023-08-19

java免费云服务器怎么使用

使用AWS、Azure或GCP等云服务提供商,通过创建账户、实例、安全组和连接到实例,可在Java免费云服务器上安装OpenJDK、部署应用程序、监视和管理它,从而实现应用程序的云托管。
java免费云服务器怎么使用
2024-04-11

Java GUI怎么使用标签与按钮

今天小编给大家分享一下Java GUI怎么使用标签与按钮的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.标签类:JLabe
2023-07-05

Java集合HashSet,TreeSet与LinkedHashSet怎么使用

本篇内容介绍了“Java集合HashSet,TreeSet与LinkedHashSet怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
2023-06-02

JAVA接口与抽象类怎么使用

本篇内容介绍了“JAVA接口与抽象类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口概述当需要从几个类中派生出一个类,继承他们所有
2023-07-02

利用java怎么与web服务器进行链接

本篇文章给大家分享的是有关利用java怎么与web服务器进行链接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java 与web服务器链接使用net.Socket类sock.g
2023-05-31

java中怎么使用xfire搭建webservice服务

在Java中使用XFire搭建WebService服务,可以按照以下步骤进行操作:1. 下载并导入XFire库:从XFire官网(https://sourceforge.net/projects/xfire/)下载最新版本的XFire库,并
2023-08-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录