当前位置: 首页 > news >正文

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识

AJAX概念

AJAX概念:是浏览器与服务器进行数据通信的技术。

认识URL

定义:统一资源定位符,简称网址,用于访问网络上的资源。

组成:

image-20240826144615311

  • http协议:超文本传输协议,规定浏览器和服务器之间传输数据的格式。
  • 域名:标记服务器在互联网中方位。
  • 资源位置:标记资源在服务器下的具体位置。

查询参数

定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据。

语法:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2

常用请求方式

请求方式:对服务器资源,要拽行动的操作

请求方法操作
GET获取数据
POST数据提交
PUT修改数据(全部)
DELETE删除数据
PATCH修改数据(部分)

报文

HTTP协议:规定了浏览器发送及服务器返回内容的格式。

请求报文

请求报文:浏览器按照HTTP协议要求的格式,发送给服务器的内容。

请求报文由以下几个部分组成:

  1. 请求行:包含请求方法、URL和协议。
  2. 请求头:以键值对格式携带的附加信息,例如 Content-Type
  3. 空行:用于分隔请求头,空行之后是发送给服务器的资源。
  4. 请求体:实际发送给服务器的资源。
调试窗口查看报文

在浏览器任意页面右键找到检查或者直接F12键打开调试窗口。

然后找到网络,找到Fetch/XHR

image-20240826153410687

然后就可以在调试窗口里面查看报文信息啦!

请求头在标头中观看:

image-20240826152112828

响应头就在响应标头中查看:

image-20240826153658420

请求标头保存请求头的信息:

image-20240826152245507

可以点击原始显示原始的请求头信息

请求体在载荷中观看:

image-20240826152517373

响应体就在响应中查看:

image-20240826153553551

如果响应的内容比较多的时候,可以在预览窗口查看,就会以json数据的格式呈现出来。

image-20240826153641096

响应报文

响应报文:服务器按照HTTP协议要求的格式,返回给浏览器的内容。

它由以下几个部分组成:

  1. 响应行(状态行):包含协议、HTTP响应状态码和状态信息。
  2. 响应头:以键值对格式携带的附加信息,例如 Content-Type
  3. 空行:用于分隔响应头,空行之后是服务器返回的资源。
  4. 响应体:实际返回给浏览器的资源。
HTTP响应状态码

HTTP响应状态码:用来表明请求是否成功完成

状态码说明
1xx信息
2xx成功
3xx重定向消息
4xx客户端错误
5xx服务端错误

接口文档

接口文档:由后端提供的描述接口的文章

接口:使用AJAX和服务器通讯时,使用的URL请求方法,以及参数

Axios

基本使用

使用方法:

  1. 引入axios:https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js

    • 可以使用console.log(axios)检验是否拿到了axios对象
  2. 使用axios函数

    使用方法:1. 传入配置对象。2. 再用.then回调函数接收结果,并做后续处理。axios({url:‘目标资源地址’
    }).then((返回结果)=>{//在then回调函数中,第一个参数就是服务端返回的数据结果//对服务器返回的数据做后续的处理
    })
    

查询参数

语法:使用axios提供的params选项

模版:

axios({url:''params:{参数名:值}
}).then(res =>{//方法
})

⚠️注意:axios在运行时把参数名和值,会拼接到url?参数名=值

请求配置

语法:使用axios提供的 mothed选项

模版:

  • method:请求的方法(get可以省略不写)
  • data:提交数据
axios({url:'',params:{ 参数名:值 },method:'请求方法',data:{参数名:值}
}).then(res =>{//方法
})

错误处理

语法:在then方法的后面,通过点语法调用catch方法,传入回调函数并定义形参

模版:

axios({//请求选项
}).then(res =>{//处理数据
}).catch(err =>{//错误处理
})

AJAX原理

XMLHttpRequest

定义:XMLHttpRequest(XHR)对象用于与服务器交互。axios内部采用XMLHttpRequest与服务器交互。

使用步骤:

  1. 创建一个XHR对象

    const xhr = new XMLHttpRequet()
    
  2. 调用open方法,配置请求方法请求url地址

    xhr.open(请求方式,请求路径)
    
  3. 监听loadend事件,接受响应结果

    xhr.addEventListener('loadend',() = >{//console.log(xhr.response)//转化为json对象console.log(JSON.parse(xhr.response))
    })
    
  4. send方法发起请求

    xhr.send()
    

image-20240827230530172

查询参数

直接在open方法中拼接查询字符串:

xhr.open(get,请求路径?参数名=参数值&参数名2=参数值2&...)

URLSearchParams

将对象格式数据,转化为查询字符串

const obj = new URLSearchParams({对象名1,对象名2...
})
const str = obj.toString()const xhr = new XMLHttpRequet()
xhr.open(请求方式,请求路径?${str})

提交参数

const xhr = new XMLHttpRequet()
xhr.open(post,请求路径)
xhr.addEventListener('loadend',() = >{//console.log(xhr.response)//转化为json对象console.log(JSON.parse(xhr.response))
})
//请求体参数步骤:
// 1. 设置请求头数据类型,根据接口文档设置application/json
xhr.setRequestHeader('Content-Type','applicatio/json')
// 2.在send方法中携带参数
const obj ={username:'',password:''
}
//3.转化成字符串
const data = JSON.stringfy(obj)xhr.send(data)

封装简易axios(了解)

步骤:

  1. 定义一个函数,接受配置对象,返回Promise对象

    function myAxios(option){const { url,method } = optionreturn new Promise((resolve,reject) => {})
    }
    
  2. 发起XHR请求

    function myAxios(option){const { url,method } = optionreturn new Promise((resolve,reject) => {const xhr = new XMLHttpRequestxhr.open(method,url)xhr.addEventListener('loadend', ()=>{})xhr.send()})
    }
    
  3. 调用成功或失败的处理程序

    function myAxios(option){const { url,method } = optionreturn new Promise((resolve,reject) => {const xhr = new XMLHttpRequestxhr.open(method,url)xhr.addEventListener('loadend', ()=>{resolver(xhr.response)})xhr.send()})
    }
    
  4. 使用封装的函数

    myAxios({url:'',method:''
    }).then(res => {console.log(res)
    })
    

如果需要查询参数:

  1. 调用函数的时候传入params参数

    myAxios({url:'',method:'',params:{参数1:值1...}
    }).then(res => {console.log(res)
    })
    
  2. 基于URLSearchParmas转化并携带url上

    let { url,method,params } = optionparams = parmas ? new URLSearchParmas(params).toString():''
    url = params ? url+'?' +params:url
    

如果需要请求参数

  1. 同样的先调用函数传入data 参数

  2. 解构data

    let { url,method,params,data } = option
    
  3. 设置data

    if(data){//1. 设置请求头xhr.setRequestHeader('Content-Type','application/json')//2. 处理数据// data = JSON.stringify(data)//3. 发送请求
    }else{xhr.send(JSON.stringfy(data))
    }
    
  4. 错误处理

    if(xhr.status >= 200 && xhr.status < 300){resolver(JSON.parse(xhr.response))
    }else{reject(new Error(xhr.response))
    }
    

Promise

Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值。

好处:

  1. 逻辑更清晰

  2. 了解axios函数内部运作机制

  3. 能解决回调函数地狱问题

语法:

  1. 创建Promise对象

    const p = new Promise(function(成功,失败){ })
    //一般写成以下👇形式
    
  2. 执行异步操作并传递结果

    const p = new Promise(function (resolve,reject){resolve('成功')
    })
    
    1. 成功调用:resolve(值)触发then
    2. 失败调用:reject(值)触发catch
  3. 接受结果

    p.then(result => {//成功})
    p.catch(error => {//失败})
    

Promise三种状态

作用:了解Promise对象如何关联的处理函数,以及代码执行顺序。

概念:一个Promise对象,必然处于以下几种状态之一

状态含义
待定(pending)初始状态,既没有被兑现,也没有被拒绝
已兑现(fulfilled)意味着,操作成功完成
已拒绝(rejected)意味着,操作失败

状态凝固:Promise的特性,一旦状态从pending修改为其他状态后就不会再次修改了。

image-20240827234930659

Promise+XHR

  1. 创建Promise对象

  2. 在Promise对象中使用XHR

  3. 接受结果,使用Promise对象

    const p = new Promise(function(resolve,reject){const xhr = new XMLHttpRequest()xhr.open(请求方式,请求地址)xhr.addEventListener('loadend',() => {//成功resolve(xhr.response)//失败//reject(xhr.response)})xhr.send()
    })p.then(result => {//成功})
    p.catch(error => {//失败})
    

同步与异步

同步代码:逐行执行,需原地等待结果后才继续向下执行。

异步代码:调用后耗时,不阻塞代码继续执行(不必原地等待),在将来完成后触发一个回调函数。(例子:定时器、Axios、事件)

小习题:

image-20240828120518764

答案:image-20240828120606177

由此可知,异步代码是通过回调函数来接受结果

回调地狱问题

概念:回调函数嵌套回调函数就是回调地狱

缺点:可读性差,异常无法获取,耦合性严重,牵一发动全身。

链式调用

概念:依靠then()方法会返回一个新生成的Promise对象特性,继续串联下一环任务,直到结束,then回调函数中的返回值会影响新生成的Promise对象最终状态和结果。

then回调函数中,return的值传给了新的Promise对象。

Promise链式调用的作用是解决了回调函数嵌套的问题。

image-20240828143905526

const p = new Promise((resolver,reject) => {resolve('成功1')
})p.then(res => P{console.log(res)	//这里打印的是('成功1')return new Promise((resolve,reject) =>{resolve(res + '成功2')	})}).then(res => {console.log(res)	//这里打印的是(res + '成功2')	})
async、await关键字

定义:async函数是使用async关键字声明的函数。async函数是一个构造函数的实例,并且其中允许使用awai关键字。asyncawait关键字让我们可以用一种更加简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise

使用方法:在async函数内,使用await关键字取代then函数,等待获取Promise对象成功状态的结果值。

模版:

async function render(){const res = await axios({url:'',method:''})
}
//调用async
render()

注意:

  • await必须用在async修饰的函数内
  • await会组织“异步函数内”代码继续执行,原地等待结果
async函数错误处理

因为async函数只能获取成功状态的结果值,如果发生错误了,这个时候就要使用到try...catch方法来捕获错误。try...catch语句标记要尝试的语句块,并指定一个出现异常时抛出的响应。

语法:

try{//要执行的代码
} catch(error){//error接受的是错误信息
}

那么我们直接跟上面的代码进行修改:

async function render(){try{const res = await axios({url:'',method:''})} catch(err){console.log(new Error(err))	//错误处理}
}
//调用async
render()

事件循环

原因:JavaScript单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其他代码运行,设计了事件循环模型(EventLoop)。

定义:执行和收集异步任务的模型(机制),在调用栈空闲的时候,会反复调用任务列表里面回调函数的执行机制,叫做事件循环。

执行过程:

  1. 执行同步代码,遇到异步代码交给宿主环境执行
  2. 异步有了结果后,把回调函数放入任务队列排队

示例:

image-20240828151551507

这段代码示例,展示了如何使用console.log函数和setTimeout函数来打印数字到控制台。不过,它并不是一个“时间循环”,而是展示了JavaScript中的异步执行和事件循环机制。

  1. console.log(1); 立即执行,打印数字1到控制台。
  2. setTimeout(function() { console.log(2); }, 0); 设置了一个定时器,当定时器到期时,会将一个匿名函数加入到事件队列中。这个定时器设置的延迟是0毫秒,意味着它将在当前执行栈清空后的下一个事件循环迭代中执行。打印数字2。
  3. console.log(3); 立即执行,打印数字3到控制台。
  4. setTimeout(function() { console.log(4); }, 2000); 设置了另一个定时器,延迟2000毫秒后执行,打印数字4。
  5. console.log(5); 立即执行,打印数字5到控制台。

执行顺序如下:

  • 首先打印1。
  • 然后设置第一个定时器,但不会立即执行。
  • 接着打印3。
  • 然后打印5。
  • 事件循环继续,第一个定时器到期后执行,打印2。
  • 2000毫秒后,第二个定时器到期执行,打印4。

所以,最终的打印顺序是:1, 3, 5, 2, 4。

宏任务与微任务

ES6之后引入了Promise对象,让JS引擎也可以发起异步任务。

异步任务分为:

  • 宏任务:由浏览器环境执行异步代码
    • js脚本执行事件
    • 定时器
    • AJAX请求完成事件
    • 用户交互事件
  • 微任务:由JS引擎环境执行的异步代码
    • Promise对象.then()方法(⚠️注意:Promise本身是同步的,而then和catch回调函数是异步的)

执行顺序:

  1. 执行第一个script脚本事件宏任务,里面同步代码。
  2. 遇到宏任务/微任务交给数组环境,由结果回调函数进入对应队列
  3. 当执行栈空闲的时候,清空微任务队列,在执行下一个宏任务,循环往复。

image-20240828153247517

示例:

image-20240828153006087

Promise.all方法

作用:合并多个Promise对象,等待所有完成(或某一个失败),做后续逻辑

image-20240828154018301

语法:

const p = Promise.all([Promise对象,Promise对象,...])
p.then(resule =>{	//result结果
}).catch(error =>{//第一个失败的Promise对象,抛出的异常
})

相关文章:

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识 AJAX概念 AJAX概念&#xff1a;是浏览器与服务器进行数据通信的技术。 认识URL 定义&#xff1a;统一资源定位符&#xff0c;简称网址&#xff0c;用于访问网络上的资源。 组成&#xff1a; http协议&#xff1a;超文本传输协议&#xff0c;规定浏览器和服务器之…...

【Qt线程】—— Qt线程详解

目录 &#xff08;一&#xff09;多线程的概述 &#xff08;二&#xff09;Qt线程的使用条件 &#xff08;三&#xff09;创建线程的方法 3.1 继承QTread&#xff0c;重写run()函数 3.1.1 为什么要重写 3.2 继承QObject 3.3 核心API介绍 3.4 关闭线程的使用方法 &…...

Golang | Leetcode Golang题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; func isRectangleCover(rectangles [][]int) bool {type point struct{ x, y int }area, minX, minY, maxX, maxY : 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt : map[point]int{}for _, rect : range…...

〖open-mmlab: MMDetection〗解析文件:mmdet/models/detectors/two_stage.py

目录 MMDetection中的两阶段检测器&#xff1a;深入解析two_stage.py源码两阶段检测器概述two_stage.py的关键组件类定义和初始化构造函数Neck头配置RPN头配置RoI头配置_load_from_state_dict方法概述参数解释代码解析 特征提取方法签名文档字符串&#xff08;Docstring&#x…...

【最新华为OD机试E卷-支持在线评测】机器人活动区域(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…...

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…...

ios私钥证书(p12)导入失败,Windows OpenSSl 1.1.1 下载

ios私钥证书(p12)导入失败 如果你用的OpenSSL版本是v3那么恭喜你V3必然报这个错&#xff0c;解决办法将OpenSSL 3降低成 v1。 Windows OpenSSl 1.1.1 下载 阿里云网盘下载地址&#xff1a;OpenSSL V1...

嵌入式面试经典30问:二

1. 嵌入式系统中&#xff0c;如何选择合适的微控制器或微处理器&#xff1f; 在嵌入式系统中选择合适的微控制器&#xff08;MCU&#xff09;或微处理器&#xff08;MPU&#xff09;时&#xff0c;需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和…...

目标检测-YOLOv1

YOLOv1介绍 YOLOv1&#xff08;You Only Look Once version 1&#xff09;是一种用于目标检测的深度学习算法&#xff0c;由Joseph Redmon等人于2016年提出。它基于单个卷积神经网络&#xff0c;将目标检测任务转化为一个回归问题&#xff0c;通过在图像上划分网格并预测每个网…...

python基础语法八-异常

书接上回&#xff1a; python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作excel 1. 异常简介 (1)异常&#xff1a;遇到…...

【堆的应用--C语言版】

前面一节我们都已将堆的结构&#xff08;顺序存储&#xff09;已经实现&#xff0c;对树的相关概念以及知识做了一定的了解。其中我们在实现删除操作和插入操作的时候&#xff0c;我们还同时实现了建大堆&#xff08;小堆&#xff09;的向上&#xff08;下&#xff09;调整算法…...

【微信小程序】搭建项目步骤 + 引入Tdesign UI

目录 创建1个空文件夹&#xff0c;选择下图基础模板 开启/支持sass 创建公共style文件并引入 引入Tdesign UI: 1. 初始化&#xff1a; 2. 安装后&#xff0c;开发工具进行构建&#xff1a; 3. 修改 app.json 4. 使用 5. 自定义主题色 创建1个空文件夹&#xff0c;选择下…...

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 &#xff1a;frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可&#xff0c;不过需要覆盖所有目录下的图片。 由于是静态修改&#xff0c;则需要make一下&#xff0c;重新编译。 2、方法二Overlay方式 由于上述方法有…...

Echarts可视化

echarts是一个基于javascripts的开源可视化图表库 画图步骤&#xff1a; 1.引入echarts.js文件 <script src" https://cdn.jsdelivr.net/npm/echarts5.5.1/dist/echarts.min.js"></script> 也可将文件下载到本地通过src引入。 2. 准备一个呈现图表的…...

验证linux gpu是否可用

通过torch验证 import torchprint(torch.__version__) # 查看torch当前版本号 print(torch.version.cuda) # 编译当前版本的torch使用的cuda版本号 print(torch.cuda.is_available()) # 查看当前cuda是否可用于当前版本的Torch&#xff0c;如果输出True&#xff0c;则表示可…...

JavaScript( 简介)

目录 含义 实例 js代码位置 1 外部引入js文件 2 在 HTML 中&#xff0c;JavaScript 代码必须位于 标签之间。 小结 含义 js是一门脚本语言&#xff0c;能够改变HTML内容 实例 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"d…...

Linux中的编译器gcc/g++

目录 一、gcc与g的区别 1.gcc编译器使用 2.g编译器使用 二、gcc/g编译器编译源文件过程 1.预处理 2.编译 3.汇编 4.链接 三、静态库和动态库 1.库中的头文件作用 2.静态库 3.动态库 四、gcc编译器的一些选项命令 一、gcc与g的区别 gcc用于编译C语言代码&#xff…...

RK3568安装部署Docker容器

设置华为镜像源 sudo sed -i s/huaweicloud.com/ustc.edu.cn/g /etc/apt/sources.list更新索引 rootok3568:/home/forlinx# sudo apt-get update Hit:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease Hit:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InR…...

Ubuntu 常用指令和作用解析

Ubuntu 常用指令和作用解析 Ubuntu 是一种常见的 Linux 发行版&#xff0c;它利用了 Unix 的力量和开源软件的精神。掌握常用指令可以提高我们在使用 Ubuntu 时的效率。本文将介绍一些常见的指令及其用途。 目录 更新与安装软件文件与目录操作系统信息与资源监控用户与权限管…...

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究&#xff08;完整论文&#xff0c;持续更新&#xff0c;大家持续关注&#xff0c;更新见文末名片 &#xff09; 摘要 在本文中&#xff0c;建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛…...

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例&#xff0c;讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报&#xff0c;并指定循环次数、播报内容。由于通知…...

指针与函数(三)

三 .指向函数的指针 函数和数组一样,经系统编译后,其目标代码在内存中连续存放,其名字本身就是一个地址,是函数的入口地址。C语言中,指针可以指向变量,也可以指向函数。 指问函数的指针的定义格式为 类型名&#xff08;*指针变量名&#xff09;参数表 其中参数表为函数指针所…...

锐捷网络2025届校园招聘正式启动,【NTA6dni】!

锐捷网络2025届校园招聘正式启动&#xff0c;内推码[NTA6dni]。 原文链接点这 投递链接点这 祝大家面试顺利&#xff0c;offer多多~ 有问题大家可以评论&#xff0c;互相交流~...

共享内存喜欢沙县小吃

旭日新摊子好耶&#xff01; 系统从0开始搭建过通信方案&#xff0c;本地通信方案的代码&#xff1a;System V IPC 里面有共享内存、消息队列、信号量 共享内存 原理 两个进程有自己的内存区域划分&#xff0c;共享内存被创建出的时候是归属操作系统的&#xff0c;还是通过…...

五、Build构建配置:jar包换名、自行定义编译规则

&#xff08;1&#xff09;jar包换名&#xff1a;finalName &#xff08;2&#xff09;自行定义编译规则&#xff08;通常不用&#xff09; Maven约定的规则就是java目录下写java代码&#xff0c;resources目录下写配置文件。 遵循规则&#xff0c;Maven会帮忙做编译。 如若…...

Html、Css3动画效果

文章目录 第九章 动画9.1 transform动画9.2 transition过渡动画9.3 定义动画 第九章 动画 9.1 transform动画 transform 2D变形 translate()&#xff1a;平移函数&#xff0c;基于X、Y坐标重新定位元素的位置 scale()&#xff1a;缩放函数&#xff0c;可以使任意元素对象尺…...

【AIStarter:AI绘画、设计、对话】零基础入门:Llama 3.1 + 千问2快速部署

对于希望在本地环境中运行先进语言模型的用户来说&#xff0c;Llama 3.1和千问2是非常不错的选择。本文将详细介绍如何在本地部署这两个模型&#xff0c;让你能够快速开始使用。 前期准备 确保你的计算机具备足够的存储空间和计算能力。安装Python环境以及必要的库&#xff0…...

多机编队—(1)ubuntu 配置Fast_Planner

文章目录 前言一、Could not find package ...二、使用error: no match for ‘operator’...总结 前言 最近想要做有轨迹引导的多机器人编队&#xff0c;打算采用分布式的编队架构&#xff0c;实时的给每个机器人规划出目标位置&#xff0c;然后通过Fast_Planner生成避障路径&…...

【数学建模经验贴】国赛拿到赛题后,该如何选题?

2024“高教社杯”全国大学生数学建模竞赛即将开赛。这可能是很多同学第一次参加国赛&#xff0c;甚至是第一次参加数学建模比赛。 那么赛题的公布也就意味着比赛的开始&#xff0c;也将是我们所要面对的第一个问题——选题。在国赛来临的前夕&#xff0c;C君想和大家聊一聊容易…...

如何快速融入大学课堂

快速融入大学课堂是适应大学生活的重要一步。以下是一些实用的建议&#xff0c;帮助你快速融入大学课堂并取得良好的学习效果。 ### 1. 提前准备 - **课前预习**&#xff1a;在上课前预习课程内容&#xff0c;了解基本概念和知识点&#xff0c;这样在课堂上更容易跟上老师的讲…...