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

SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)

本文适用对象:已有基础的同学,知道基础的SpringBoot配置和Vue操作。

在此基础上本文实现基于SpringBoot和Vue.js基础上的增删改查和数据回显、刷新等。

一、实时显示数据库数据

实现步骤:

第1步:编写动态请求响应类:在启动类同父目录下创建controller包,在包下创建DataController类,添加@RestController、@RequestMapping("")等注解。在类中实例化dao层的BookDa要加上@Autowired注解;然后编写方法注意返回的结果和调用dao层中的方法,记得加上@GetMapping等注解:

@RestController
@RequestMapping("/api/")
public class DataController {@Autowiredprivate BookDao bookDao;@GetMapping("select")public List<Brand> getData(){System.out.println(bookDao.select());return bookDao.select();}
}

— — — — — — 知识加油站 — — — — — —

@RestController注解:是将一个类标记为处理HTTP请求的控制器,并且自动将方法返回的对象转换为JSON或XML格式的响应体,发送给客户端。

— — — — — — —  — — — — — — — — —

第2步:编写ajax请求,在new Vue下写入如下代码:

mounted(){axios.get("/api/data").then(response=>{this.tableData = response.data;})
},

第3步:修改启动类,写入如下代码:

@CrossOrigin(origins = "http://localhost:8081")
@SpringBootApplication(scanBasePackages = "com.itheima.controller")
@MapperScan("com.itheima.dao")
public class AdsSdemoApplication {public static void main(String[] args) {SpringApplication.run(AdsSdemoApplication.class, args);}
}

实现思路:ajax发送请求到controller层,controller层负责查询数据库并返回结果给ajax,ajax将结果赋值给显示变量,Vue根据变量中的值对结果进行显示,最终我们能看到网页上的数据。

重点技术原理:

1. 数据显示问题:

在vue的表格中有一个 :data="xxx"的字样,其中xxx就是数据源,这个数据源会在data()的return中被定义(例如在这里数据源都是tableData,在tableData中不需要定义具体的字段,因为这些字段在tostring函数中都会带有):

   

数据源一般是JSON格式,JSON数据有一个特点,最外层用 [ ] 符号进行包裹,在内层每一个数据都用 { } 符号进行包裹,vue表格会自动提取数据库字段的key,然后去匹配每个单元格的prop="xxx",如果key和xxx匹配上,就将这个key对应的value显示到prop所在单元格的位置。

2.请求发送:

mounted简单理解就是:在挂载完成,即Vue初始化成功,HTML页面渲染成功之后执行的钩子函数。

mounted详细解释如下:mounted是Vue实例生命周期钩子函数之一。mounted函数会在Vue实例被创建并且挂载到DOM元素(DOM元素指的是文档对象模型)上之后立即调用。函数的作用是在Vue实例挂载(指的是将Vue实例与一个实际的DOM元素关联起来,使其能够在该DOM元素内部进行渲染)完成后执行一些初始化操作或请求数据。

下面代码的含义是:在Vue初始化完成,HTML页面渲染成功后,发送get请求到/api/data路径请求动态资源,返回一个response,然后取出data域中的数据赋值给tableData。

3.请求应答:

请求会根据@RequestMapping中的路径找到controller包下具体的类或方法,可以根据请求方式不同调用不同的方法(在该例中使用get请求方式对应@GetMapping方法,调用getData方法,getData通过调用dao层下的bookDao中的select方法与数据库进行连接,查询后返回List结果集),结果被返回到请求的发送方。

 二、注意事项 

说明6点注意事项:

1、右上角的小图标,只能用于测试修改静态页面的样式,实际和数据库的关联不能通过这种方式进行。

2、如果想测试动态页面的效果,与数据库关联,必须通过启动类启动(启动类是带有main方法的),要注意选择Current File进行启动,否则可能启动方式可能受前面测试影响。

3、注意启动类必须同controller、dao等一系列的包在同一个目录下,启动类的上面不能有其它包,如果不在同一目录下可能导致扫描不到controller中的资源路径:

也可以通过注解将controller包扫描的方式解决:

@SpringBootApplication(scanBasePackages = "com.itheima.controller")

4、如果想访问前端界面,只需要将webapp视为根目录,相当于localhost这一级,然后想要访问具体的静态资源,只需要输入webapp后面的路径即可:

比如ADSS.html在wewbapp目录下,于是只需要在localhost:8081后面输入/ADSS.html即可访问该静态资源:

 

5、动态资源比如跳转路径访问路径,一般存放在controller目录下,注意controller包需要与启动类在同一个层次目录下:

访问数据只需要输入@RequestMapping里的地址即可直接访问:

6、实际网站部署还要注意跨域问题,一般在启动类上添加CrossOrigin注解:@CrossOrigin(origins = "http://localhost:请求端口号")

三、删除(单条,多条)

3.1. 删除单条数据

第1步:dao层下的BookDao接口中定义delete方法,实现从数据库中删除单条数据:

@Delete("delete from tb_brand where id = #{id}")
public void delete(int id);

第2步:在controller层下定义请求路径,传入参数,执行dao层删除方法:

@DeleteMapping("delete/{id}")
public void deleteData(@PathVariable("id") int id){bookDao.delete(id);
}

— — — — — — 知识加油站 — — — — — —

1. @PathVariable注解:是Spring MVC框架中的一个注解,用于从URL路径中获取变量的值并将其绑定到方法的参数上。比如:请求地址:@GetMapping("/users/{ID}") 方法:public User getUserById(@PathVariable Long id) 。那么注解会将{ID}最终被替换的值赋值给参数id。

2. slot - scope="scope":slot-scope是一个特殊的属性,用于在父组件中向子组件传递数据。slot-scope="scope"定义了一个名为scope的变量,用于接收父组件传递的数据。

3. row是表示一个数据表格中的某一行的数据对象。scope可以理解为整张数据表格中的全体数据对象。

4.<template>标签:是Vue.js中用于定义组件模板的容器

— — — — — — —  — — — — — — — — —

‘第3步:添加触发事件,调用methods中的方法。在这里触发事件是点击删除按钮,传入的参数是所点删除按钮所属的数据对象。这里的方法名是deleteSingle。

<template slot-scope="scope"><el-button type="danger" plain size="mini" @click="deleteSingle(scope.row)">删除</el-button><el-button type="warning" plain @click="updateVisible = true" size="mini">修改</el-button>
</template>

— — — — — — 知识加油站 — — — — — —

.then( )被用于处理成功的HTTP响应(服务器成功处理了客户端发出的HTTP请求,并返回了预期的响应)。

response是.then()方法中的一个参数,表示从服务器返回的响应数据

— — — — — — —  — — — — — — — — —

第4步:向后端服务器发送请求,删除数据,同时刷新页面。

methods: {/*删除单条*/deleteSingle(row){axios.delete('/api/delete/'+row.id).then(()=>{axios.get("/api/select").then(response => {  /*刷新页面*/this.tableData = response.data;})})},
}

3.2. 删除多条数据

第1步:编写dao层下的BookDao接口,创建deleteAll方法,传入ids数组,指示待删除的数据组id。

public void deleteAll(int [] ids);

第2步:编写mybatis-config.xml、BookMapper.xml、application.yml文件。

鉴于需要用到循环稍显复杂,用注解来编写SQL语句:

mybatis-config.xml文件如下(纯套模板):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

 BookMapper.xml文件如下【重点】,注意:1.因为是删除操作,所以要写delete <delete id="deleteAll" > 2. deleteAll必须同接口的方法名一致 3. SQL语句因为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.BookDao"><!--查询--><delete id="deleteAll" >delete from tb_brand where idin(<foreach collection="ids" item="id" separator=",">#{id}</foreach>);</delete>
</mapper>

— — — — — — 知识加油站 — — — — — —

1. IN关键字用于指定一个字段的值必须匹配给定的多个值中的任意一个。在这里IN关键字将id字段和ids集合中的值进行匹配,逐一删除。

2. collection属性用于指定一个集合对象,是一个动态 SQL 语句中的占位符。

3. item属性用于指定一个在迭代过程中使用的变量名。在每次迭代时会被赋予集合中的一个元素值。

4.separator属性用于指定一个分隔符,用于在迭代过程中拼接多个值。在这里指定了一个逗号作为分隔符,用于将多个id值拼接成一个逗号分隔的字符串。

— — — — — — —  — — — — — — — — —

application.yml添加代码如下(扫描到对应配置文件):

mybatis:config-location: classpath:mybatis-config.xmlmapper-locations: classpath:mapper/*.xml

第3步:编写controller层下的DataController类,创建deleteAllData方法,用于调用book层中定义的方法,执行批量删除操作:

@RestController
@RequestMapping("/api/")
public class DataController {@DeleteMapping("delete/a/{ids}")public void deleteAllData(@PathVariable("ids") int [] ids){bookDao.deleteAll(ids);
}

第4步:添加复选框【重点】触发事件

<el-table:data="tableData"style="width: 100%"@selection-change="handleSelectionChange"@select-all="handleSelectAll"@select="handleSelect">
<el-table-column type="selection" width="55" align="center"></el-table-column>

— — — — — — 知识加油站 — — — — — —

1. :data="tableData"用于指定表格要展示的数据源。

2. @selection-change="handleSelectionChange"用于监听用户在表格中选中或取消选中行的操作。

3. @select-all="handleSelectAll"用于监听用户点击全选的操作。

4. @select="handleSelect"用于监听用户点击某一行的操作。

5. type="selection"是<el-table-column>组件的一个属性,用于指定该列的类型为选择列,即在该列显示选择框。

— — — — — — —  — — — — — — — — —

 第5步:增设按钮触发事件,调用方法DeleteAll

<el-button type="danger" plain @click="DeleteAll">一键删除</el-button>

第6步:具体定义事件的方法: 

handleSelectAll和handleSelect方法的思路都是将用于所选择行的id读取存入selection中,然后转化为ids数组。在DeleteAll方法中delete请求将ids作为参数请求页面,用于删除指定id行的数据;get请求用于刷新页面。

methods: {DeleteAll(){axios.delete(`/api/delete/a/`+this.ids).then(response=>{axios.get("/api/select").then(response=>{this.tableData = response.data;})})},handleSelectAll(selection) {this.ids = selection.map(item => item.id);// selection 参数是所有被选中的行数据的数组},handleSelect(selection) {this.ids = selection.map(item => item.id);// selection 参数是当前被选中的行数据的数组}
}

— — — — — — 知识加油站 — — — — — —

1. selection是一个参数,用于接收当前被选中的行数据的数组。

2. 当用户选择行时,会触发@select和@selection-change事件,并将被选中的行数据作为参数传递给相应的事件处理方法。

3. item是在map方法中的回调函数的参数,表示当前遍历到的元素,即被选中的行数据对象。

4. 通过selection.map(item => item.id)的方式,遍历selection数组,并将每个行数据对象的id属性提取出来,最终形成一个新的数组ids。

5. map方法会将回调函数的返回值组成一个新的数组返回。

6. {ids}是一个简单的JavaScript对象字面量表达式,其中ids是对象的属性名。这种表达式用于创建一个对象,并将属性ids设置为undefined(表示一个变量未被赋予值或者一个对象属性不存在,该属性的值显式地设置为未定义,表示一个缺少值的状态,这意味着该属性存在,但没有被赋予一个明确的值)的值。

7. #{ids}和${ids}是在一些模板引擎中使用的表达式,用于插入变量值。

8. #{ids}常用于某些模板引擎(如Ruby的ERB)中。

9 ${ids}常用于JavaScript中的模板字面量或模板字符串中。这种表达式的作用是将变量的值插入到字符串中,以动态生成字符串内容。

10. 模板字面量(Template literals)和模板字符串(Template strings)是指JavaScript中一种特殊的字符串语法,它们提供了更灵活和方便的字符串操作和拼接方式。模板字面量是指使用反引号(`)包围的字符串,它们支持在字符串中插入变量、表达式和换行符,而无需使用字符串拼接符号(如加号 +)。

11. {data:ids}是一个JavaScript对象字面量表达式,其中data是对象的属性名,ids是属性值。它创建了一个具有data属性的对象,且该属性的键是字符串data值是变量ids的值。

— — — — — — —  — — — — — — — — —

四、新增

第1步:在dao层的BookDao接口下创建add方法,用@Insert注解往数据库中添加信息:

@Insert("Insert into tb_brand(brand_name,company_name,ordered,description,status)"+"values(#{brand_name},#{company_name},#{ordered},#{description},#{status})")
public void add(Brand brand);

第2步:在controller层下定义insertData方法,注意:1、是用Post发送请求,数据是在请求体中,因此需要标注@RequestBody注解。2、注意类顶部的@RequestMapping("/api/"),在地址栏访问时一定要加上类上标注的地址前缀。

@RestController
@RequestMapping("/api/")
public class DataController {@PostMapping("insert")public void insertData(@RequestBody Brand brand){ System.out.println(brand);bookDao.add(brand);}
}

— — — — — — 知识加油站 — — — — — —

1. @RequestBody:从请求体中获取数据(如 JSON 或 XML 格式的数据)绑定到方法的参数上。请求体中的数据必须与方法参数的类型匹配,Spring MVC 会自动进行数据转换。

2. @RestController:注解告诉 Spring MVC 这个类是一个为 RESTful Web服务的控制器,并且其中的方法会根据请求的 URL 路径和 HTTP 方法(PUT、GET...)进行映射和处理。结合了 @Controller和@ResponseBody注解的功能。

— — — — — — —  — — — — — — — — —

第3步:定义数据格式。注意:1、定义的字段名要与数据库的字段名一致,因为持久化框架或对象关系映射(ORM)工具可以自动映射数据库字段和对象的属性。如果字段名一致,可以方便地进行自动映射,减少手动的配置和转换工作。可以避免因为字段名不同而导致数据的混乱和不一致。

data: {brand_name: '',company_name: '',ordered: '',description: '',status: ''
},

第4步: 为新增按钮绑定事件,制作新增弹窗:

下面是为新增按钮绑定事件,点击可显示弹窗:

<el-button type="primary" plain @click="dialogVisible = true">新增</el-button>

下面是定义弹窗的内容,注意:1. v-model的值可以与data对象的属性进行绑定,进而赋值。2. 点击确定绑定了2个事件,一个是隐藏弹窗,一个是触发提交请求,然而最好一个事件只绑定一个方法,因此将语句和方法封装在一个fun方法内,进行统一调用。

<!--新增的弹窗--><el-dialog title="新增":visible.sync="dialogVisible"width="30%"><el-form :inline="true" class="demo-form-inline" class="custom-button" ><el-form-item label="品牌名称:"><el-input v-model="data.brand_name" placeholder="输入品牌信息"  ></el-input></el-form-item><el-form-item label="公司名称:"><el-input v-model="data.company_name" placeholder="输入公司信息"></el-input></el-form-item><el-form-item label="排序:"><el-input v-model="data.ordered" placeholder="输入排序信息"></el-input></el-form-item><el-form-item label="描述:"><el-input v-model="data.description" placeholder="输入描述信息"></el-input></el-form-item><el-form-item label="状态:"><el-input v-model="data.status" placeholder="输入状态信息"></el-input></el-form-item></el-form><span slot="footer" class="dialog-footer"><el-button @click="dialogVisible = false">取 消</el-button><el-button type="primary" @click="fun">确 定</el-button></span></el-dialog>

第5步: 方法的定义,如下的fun方法封装了2条语句,add2database方法用于向后台发送数据:

fun(){this.dialogVisible = false;this.add2database();
},

调用axios的post请求带有2个参数,第1个参数是请求的 URL。它表示要发送 POST 请求的目标地址,即服务器端的接口或路由。第2个参数是一个对象,包含了要发送的数据。

add2database(){console.info(this.data);axios.post('/api/insert',this.data).then(()=>{axios.get('/api/select').then(response=>{this.tableData = response.data;})})},

特别要注意一点:像data必须要加this.data以此才能指代data对象。

五、修改

第1步:

public void update(Brand brand);

第2步:

@RestController
@RequestMapping("/api/")
public class DataController {@PostMapping("update")public void updateData(@RequestBody Brand brand){bookDao.update(brand);}
}

第3步:

<!--修改--><update id="update">update tb_brand<set><if test="brand_name != null and brand_name != '' " >brand_name = #{brand_name},</if><if test="company_name != null and company_name != '' " >company_name = #{company_name},</if><if test="ordered != null " >ordered = #{ordered},</if><if test="description != null and description != '' " >description = #{description},</if><if test="status != null " >status = #{status}</if></set>where id = #{id};
</update>

第4步:

<el-table-column ><template slot-scope="scope"><el-button type="warning" plain @click="showback(scope.row)" size="mini">修改</el-button></template>
</el-table-column>
showback(row){this.updateVisible = true;this.data = row;
},

第5步:

<!--修改的弹窗--><el-dialog title="新增":visible.sync="updateVisible"width="30%"><el-form :inline="true" class="demo-form-inline" class="custom-button" ><el-form-item label="品牌名称:"><el-input v-model="data.brand_name" placeholder="输入品牌信息"  ></el-input></el-form-item><el-form-item label="公司名称:"><el-input v-model="data.company_name" placeholder="输入公司信息"></el-input></el-form-item><el-form-item label="排序:"><el-input v-model="data.ordered" placeholder="输入排序信息"></el-input></el-form-item><el-form-item label="描述:"><el-input v-model="data.description" placeholder="输入描述信息"></el-input></el-form-item><el-form-item label="状态:"><el-input v-model="data.status" placeholder="输入状态信息"></el-input></el-form-item></el-form><span slot="footer" class="dialog-footer"><el-button @click="updateVisible = false">取 消</el-button><el-button type="primary" @click="change">确 定</el-button></span></el-dialog>

第6步:

change(){this.updateVisible = false;axios.post('/api/update',this.data).then(()=>{axios.get('/api/select').then(respnse=>{this.tableData = response.data;})})
},

六、查询

第1步:编写dao层接口方法,传入一个查询参数,返回多个实体类数据集合,

public List<Brand> inquiry(String statement);

第2步:编写controller层,通过get方法加上@PathVariable注解,可以将从请求头获得的参数赋值给参数,调用dao层方法返回实体类集合。

@RestController
@RequestMapping("/api/")
public class DataController {@GetMapping("inquiry/{statement}")public List<Brand> inquiryData(@PathVariable String statement){System.out.println(statement);return bookDao.inquiry(statement);}
}

第3步:编写BookMapper.xml映射文件。

功能说明:前端在查询框内输入一段文字或数字,点击查询,可以在数据库中的全字段进行搜索,只要某一条数据中模糊匹配到输入的内容,就将该条数据输出,如果输入的内容为空,则显示所有数据。

 <select id="inquiry" resultType="com.itheima.domain.Brand">SELECT * FROM tb_brand<where><if test="statement != null and statement != ''"><if test="brand_name != null and brand_name != ''">OR brand_name LIKE CONCAT('%', #{statement}, '%')</if><if test="ordered != null ">OR CAST(ordered AS CHAR) LIKE CONCAT('%', #{statement}, '%')</if><if test="status != null">OR CAST(status AS CHAR) LIKE CONCAT('%', #{statement}, '%')</if><if test="company_name != null and company_name != ''">OR company_name LIKE CONCAT('%', #{statement}, '%')</if><if test="description != null and description != ''">OR description LIKE CONCAT('%', #{statement}, '%')</if></if></where></select>

第4步:

<!--查询和查询栏-->
<el-form :inline="true" class="demo-form-inline" class="custom-button"><el-form-item><el-input v-model="user" placeholder="输入查询信息"></el-input></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item>
</el-form>

第5步:

data(){return{tableData: [],temp: [],}
}

第6步:

onSubmit() {axios.get("/api/inquiry/"+this.user).then((response)=>{console.info(response.data);this.tableData = response.data;axios.get("/api/select")})this.tableData = this.temp
},

相关文章:

SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)

本文适用对象&#xff1a;已有基础的同学&#xff0c;知道基础的SpringBoot配置和Vue操作。 在此基础上本文实现基于SpringBoot和Vue.js基础上的增删改查和数据回显、刷新等。 一、实时显示数据库数据 实现步骤&#xff1a; 第1步&#xff1a;编写动态请求响应类&#xff1a…...

曙光亮相工博会,发布首款国产高端工业实时仿真计算系统

9月19日-23日&#xff0c;中科曙光亮相第23届中国国际工业博览会&#xff0c;并受邀于主论坛发表主题演讲&#xff0c;在工业权威会议上展示曙光领先的工业数字化技术与实践成果。展会期间&#xff0c;曙光重磅发布首款国产工业实时仿真计算系统&#xff0c;并展出多项工业数字…...

「大数据-2.0」安装Hadoop和部署HDFS集群

目录 一、下载Hadoop安装包 二、安装Hadoop 0. 安装Hadoop前的必要准备 1. 以root用户登录主节点虚拟机 2. 上传Hadoop安装包到主节点 3. 解压缩安装包到/export/server/目录中 4. 构建软链接 三、部署HDFS集群 0. 集群部署规划 1. 进入hadoop安装包内 2 进入etc目录下的hadoop…...

文档在线预览word、pdf、excel文件转html以实现文档在线预览

目录 一、前言 1、aspose2 、poi pdfbox3 spire二、将文件转换成html字符串 1、将word文件转成html字符串 1.1 使用aspose1.2 使用poi1.3 使用spire2、将pdf文件转成html字符串 2.1 使用aspose2.2 使用 poi pbfbox2.3 使用spire3、将excel文件转成html字符串 3.1 使用aspose…...

FFmpeg视音频分离器----向雷神学习

雷神博客地址&#xff1a;https://blog.csdn.net/leixiaohua1020/article/details/39767055 本程序可以将封装格式中的视频码流数据和音频码流数据分离出来。 在该例子中&#xff0c; 将FLV的文件分离得到H.264视频码流文件和MP3 音频码流文件。 注意&#xff1a; 这个是简化版…...

CentOS 8开启bbr

CentOS 8 默认内核版本为 4.18.x&#xff0c;内核版本高于4.9 就可以直接开启 BBR&#xff0c;所以CentOS 8 启用BBR非常简单不需要再去升级内核。 开启bbr echo "net.core.default_qdiscfq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_contro…...

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL&#xff08;Ubuntu&#xff09;上安装Redis启动Redi…...

2014 款金旅牌小型客车 发动机怠速抖动、加速无力

故障现象 一辆2014款金旅牌小型客车&#xff0c;搭载JM491Q-ME发动机&#xff0c;累计行驶里程约为20万km。车主反映&#xff0c;最近该车发动机怠速抖动、加速无力&#xff0c;且经常缺少冷却液。 故障诊断 根据车主描述的故障现象&#xff0c;初步判断该车气缸垫损坏&#…...

R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化...

全文链接:https://tecdat.cn/?p33760 众所周知&#xff0c;心脏疾病是目前全球最主要的死因。开发一个能够预测患者心脏疾病存在的计算系统将显著降低死亡率并大幅降低医疗保健成本。机器学习在全球许多领域中被广泛应用&#xff0c;尤其在医疗行业中越来越受欢迎。机器学习可…...

网站被劫持了怎么办

网站被劫持了怎么办 建议新建一个index.html文件&#xff0c;文件中只写几个数字&#xff0c;上传到网站根目录&#xff0c;然后访问网站域名&#xff0c;看看是不是正常&#xff0c;从而可以确定是程序问题还是域名被劫持的问题。 如果是域名被劫持&#xff0c;你可以登录你的…...

【面试题精讲】Java包装类缓存机制

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 包装类缓存机制? Java 中的包装类&#xff08;Wrapper Class&#xff09;是为了将…...

网络相关知识

0 socket SOCK_DGRAM #无连接UDP SOCK_STREAM #面向连接TCP 1 UDP 1.1 检测UDP yum install -y nc 使用netcat测试连通性 服务器端启动 UDP 30003 端口 ​ nc -l -u 30003 客户端连接服务器的30003端口&#xff08;假设服务的IP地址是119.23.67.12&#xff09; ​nc -u 119…...

商品冷启动推荐综述

About Me: LuckBoyPhd/Resume (github.com) (1)一种基于三部图网络的协同过滤算法 推荐系统是电子商务领域最重要的技术之一,而协同过滤算法又是推荐系统用得最广泛的.提出了一种基于加权三部图网络的协同过滤算法,用户、产品及标签都被考虑到算法中,并且研究了标签结点的度对…...

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。&#xff08;国内网速奇慢经常中断&#xff09; 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…...

淘宝电商必备的大数据应用

在日常生活中&#xff0c;大家总能听到“大数据”“人工智能”的说法。现在的大数据技术应用&#xff0c;从大到巨大科学研究、社会信息审查、搜索引擎&#xff0c;小到社交联结、餐厅推荐等等&#xff0c;已经渗透到我们生活中的方方面面。到底大数据在电商行业可以怎么用&…...

Docker版部署RocketMQ开启ACL验证

一、拉取镜像 docker pull apache/rocketmq:latest 二、准备挂载目录 mkdir /usr/local/rocketmq/data mkdir /usr/local/rocketmq/conf 三、运行 docker run \ -d \ -p 9876:9876 \ -v /usr/local/rocketmq/data/logs:/home/rocketmq/logs \ -v /usr/local/rocketmq/data…...

【RabbitMQ实战】04 RabbitMQ的基本概念:Exchange,Queue,Channel等

一、简介 Message Queue的需求由来已久&#xff0c;80年代最早在金融交易中&#xff0c;高盛等公司采用Teknekron公司的产品&#xff0c;当时的Message queuing软件叫做&#xff1a;the information bus&#xff08;TIB&#xff09;。 TIB被电信和通讯公司采用&#xff0c;路透…...

APACHE NIFI学习之—RouteOnAttribute

RouteOnAttribute 描述: 使用属性表达式语言根据其属性路由数据流,每个表达式必须返回Boolean类型的值(true或false)。 标签: attributes, routing, Attribute Expression Language, regexp, regex, Regular Expression, Expression Language, 属性, 路由, 表达式, 正则…...

防火墙网络接口下面多个外网地址,只有第一地址可以访问通其他不通

环境&#xff1a; 主备防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述&#xff1a; 两台防火墙双击热备&#xff0c;高可用防火墙虚拟网络接口Eth4下面有多个外网地址&#xff0c;只有第一地址可以访问通其他不通 解决方案&#xff1a; 1.检查防火墙路由设置&#xff08;未解决…...

【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

目录 URL格式 HTTP请求和响应报文的字段&#xff1f; HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session URL格式 &#xff1f;&#xff1a;是用来分割URL的主体部分&#xff08;通常是路径&#xff09;和查询字符串&#xff08;query string&#xff09;…...

苹果mac电脑显示内存不足如何解决?

忍痛删应用、删文档、删照片视频等等一系列操作都是众多Mac用户清理内存空间的方法之一&#xff0c;悲催的是一顿“猛如虎的操作”下&#xff0c;释放出来的内存空间却少的可怜&#xff0c;原因很简单&#xff0c;这样释放内存空间是无效的。如何合理有效的清理内存空间&#x…...

如何在Windows 10上安装Go并搭建本地编程环境

引言 Go是在谷歌的挫折中诞生的编程语言。开发人员不得不不断地选择一种执行效率高但需要长时间编译的语言&#xff0c;或者选择一种易于编程但在生产环境中运行效率低的语言。Go被设计为同时提供这三种功能:快速编译、易于编程和在生产中高效执行。 虽然Go是一种通用的编程语…...

[Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案

问题描述 RTL8197FH-VG 2.4G wifi to WAN吞吐量低于65%的标准,正常2T2R的wifi 300Mbps x 65% = 195Mbps,但是实际只能跑到160Mbps,这个时候CPU的idl已经为0,sirq占用率达到98%左右 网络拓扑 一台PC通过2.4G WiFi连接到RTL8197FH-VG,另外一台PC直接通过WAN口连接到RTL8197…...

软件设计模式系列之十八——迭代器模式

1 模式的定义 迭代器模式是一种行为型设计模式&#xff0c;它允许客户端逐个访问一个聚合对象中的元素&#xff0c;而不暴露该对象的内部表示。迭代器模式提供了一种统一的方式来遍历不同类型的集合&#xff0c;使客户端代码更加简洁和可复用。 2 举例说明 为了更好地理解迭…...

前端项目配置 prettier、eslint、lint-stages、husky、commitlint 、style-lint设置代码书写和提交规范

prettier中文网&#xff1a;Options Prettier 中文网 eslint中文网 &#xff1a;ESLint 中文网 github husky &#xff1a; https://github.com/typicode/husky commitlint.js 官网&#xff1a;commitlint - Lint commit messages 、github&#xff1a;GitHub - conventiona…...

如何开始着手一篇Meta分析 | Meta分析的流程及方法

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…...

【PID控制技术】

PID控制技术 简介控制原理相关术语调参技巧相互作用 相似算法与PWM对比 应用范围优缺点硬件支持 简介 PID控制是一种在工业过程控制中广泛应用的控制策略&#xff0c;其全称是比例-积分-微分&#xff08;Proportional Integral Derivative&#xff09;控制。它的基本原理是根据…...

docker openjdk:8-jdk-alpine 修改时区、添加字体

新建Dockerfile文件&#xff0c;制作新镜像 FROM openjdk:8-jdk-alpine 1、解决字体问题 RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* 2、解决时差问题 # 解决时差8小时问题ENV TZAsia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /et…...

9+单细胞+实验验证,探讨单基因对癌细胞转移作用的思路方向

今天给同学们分享一篇单细胞实验的生信文章“Identification of RAC1 in promoting brain metastasis of lung adenocarcinoma using single-cell transcriptome sequencing”&#xff0c;这篇文章于2023年5月18日发表在Cell Death Dis期刊上&#xff0c;影响因子为9。 本研究旨…...

《计算机视觉中的多视图几何》笔记(7)

7 Computation of the Camera Matrix P P P 这章讲的是摄像机参数估计。摄像机标定&#xff0c;本质上就是求摄像机矩阵 P P P&#xff0c;当我们知道足够多的 X ↔ x X \leftrightarrow x X↔x&#xff0c;我们该如何计算 P P P&#xff1f;如果知道3D和2D点的对应&#xff…...

如何做淘宝客个人网站/东莞谷歌推广

CentOS 7下启动、关闭、重启、查看MySQL服务 xufengzhu 本文链接&#xff1a;https://blog.csdn.net/xufengzhu/article/details/81110982 1.启动命令 [rootxufeng Desktop]# service mysqld startRedirecting to /bin/systemctl start mysqld.service ​​​2.关闭命令 […...

门户网站建设好处/网络营销模式包括哪些

上一次我们一起重温了JS中数组相关的内容&#xff0c;这一次我们要来学习ES6新引入的两个数据结构&#xff1a;map和set。map和对象比较像&#xff0c;可以用键来获取值&#xff0c;set则和数组比较像&#xff0c;但是不允许出现重复的值。下面我们就进入详细地学习吧&#xff…...

网站换域名了怎么做301重定向/怎么样自己创建网站

原文地址&#xff1a;Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)&#xff08;Linux-3.0 ARMv7&#xff09; 作者&#xff1a;tekkamanninja 转自&#xff1a;http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数&#x…...

平面设计类的网站/友情链接买卖

SQLite分页显示&#xff1a;Select * From news order by id desc Limit 10 Offset 10这篇文章是根据 SQLite 官方 WIKI 里的内容翻译&#xff0c;如果有什么翻译不当的地方希望大家指出&#xff0c;毕竟我的英文水平实在很差。 SQLite 包括以下五个时间函数&#xff1a; date(…...

做赌博网站赚/去了外包简历就毁了吗

var foo{rzx:1} var bar foo; foo.xfoo{rzx:100} console.log(foo.x) console.log(bar.x) 有这样一个热门问题&#xff1a; var a {n: 1}; var b a; a.x a {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: 2} 其实这个问题很好理解&#xff0c;关键要弄…...

如何建设网站主页和其他相关页面/seo关键词排名优化要多少钱

《HTML5介绍ppt课件.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《HTML5介绍ppt课件.ppt(20页珍藏版)》请在人人文库网上搜索。1、Welcome to HTML 5,什么是HTML5,HTML5的特点,HTML5的新特性,简介趋势,优势 var cxtc.getContext(2d); var grdcxt.createLinearG…...