用java来编写web界面

一、ssm框架整体目录架构

二、编写后端代码

1、编写实体层代码    实体层代码就是你的对象

entity

package com.cv.entity;public class Apple {private Integer id;private String name;private Integer quantity;private Integer price;private Integer categoryId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getQuantity() {return quantity;}public void setQuantity(Integer quantity) {this.quantity = quantity;}public Integer getPrice() {return price;}public void setPrice(Integer price) {this.price = price;}public Integer getCategoryId() {return categoryId;}public void setCategoryId(Integer categoryId) {this.categoryId = categoryId;}@Overridepublic String toString() {return "Product{" +"id=" + id +", name='" + name + '\'' +", quantity=" + quantity +", price=" + price +", categoryId=" + categoryId +'}';}
}

2、编写service,服务层是你的业务代码

package com.cv.service;import com.cv.entity.Apple;import java.util.Map;public interface AppleService{void insert(Apple apple);Object[] query(Map map);void delete(Apple apple);void update(Apple apple);}

3、编写业务层的实现代码

package com.cv.service;import com.cv.dao.AppleMapper;
import com.cv.entity.Apple;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
import java.util.Map;@Service
public class AppleServiceImpl implements AppleService {@AutowiredAppleMapper appleMapper;@Override@Transactionalpublic void insert(Apple apple) {appleMapper.insert(apple);}@Overridepublic Object[] query(Map map) {Integer pageNo = 1;if(map != null) {pageNo = (Integer) map.get("pageNo");}Page page = PageHelper.startPage(pageNo, 5);PageHelper.orderBy("id asc");List<Apple> products = appleMapper.query(map);Object[] result = new Object[2];result[0] = products;result[1] = page.getPages();return result;}@Overridepublic void delete(Apple apple) {appleMapper.delete(apple);}@Overridepublic void update(Apple apple) {appleMapper.update(apple);}}

4、dao 层  编写连写数据库层代码,对数据库进行操作

package com.cv.dao;import com.cv.entity.Apple;import java.util.List;
import java.util.Map;public interface AppleMapper {void insert (Apple apple);void delete(Apple apple);void update(Apple apple);List<Apple> query(Map map);
}

5、编写数据库层配置文件AppleDao.xml,与数据库进行交互,并与dao层交互后,与实体类进行交互

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.cv.dao.AppleMapper"><insert id="insert" parameterType="com.cv.entity.Apple">insert into product(`name`,`quantity`,`price`,`categoryId`) values(#{name}, #{quantity}, #{price}, #{categoryId})</insert><select id="query" parameterType="java.util.Map" resultType="com.cv.entity.Apple">select * from product<where><if test="name != null and name != ''">name like #{name}</if></where></select><delete id="delete" parameterType="com.cv.entity.Apple">delete from product<where><if test="id != null">id = #{id}</if><if test="name != null and name != ''">and name = #{name}</if></where></delete><update id="update" parameterType="com.cv.entity.Apple">update product set name=#{name}, quantity=#{quantity}, price=#{price}, categoryId=#{categoryId}  where id = #{id}</update></mapper>

6、指定扫描mybatis包,以及连接数据库所使用的配置文件,并创建连接池,并指出扫描的数据库接口类

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 创建连接池  配置连接池的属性值 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"></property><property name="jdbcUrl" value="${jdbc.url}"></property><property name="user" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- 配置SqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 配置mybatis核心配置文件<property name="configLocation" value="classpath:SqlMapConfig.xml" />--><!-- 配置数据源 --><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath*:mybatis/*.xml" /><property name="plugins"><array><bean class="com.github.pagehelper.PageHelper"><property name="properties"><value>dialect=mysql</value></property></bean></array></property></bean><!-- mapper接口的扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.cv.dao"/></bean><!--事务管理器--><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><tx:annotation-driven /></beans>

7、编写数据库配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/big?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

8、编写连接池配置文件

# fatal > error > warn > info > debug
log4j.rootLogger = info,console,filelog4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d %-5p [%t] %-17c - %m%n# D://logs/debug.log
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.File = D://debug.log
log4j.appender.file.Encoding = UTF-8
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d %-5p [%t] %-17c - %m%nlog4j.logger.org.apache.ibatis=debug, console

9、配置空制器层配置文件,负责和前端交互,以及进行视图解析

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!--springmvc注解驱动--><mvc:annotation-driven /><context:component-scan base-package="com.cv.comtroller" /><!--定义视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"></property><property name="suffix" value=".jsp"></property></bean><!-- 多部分文件上传解析器 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="104857600" /><property name="maxInMemorySize" value="4096" /><property name="defaultEncoding" value="UTF-8"></property></bean><mvc:default-servlet-handler/><mvc:resources location="/css/" mapping="/css/**" /><mvc:resources location="/image/" mapping="/image/**" /><mvc:resources location="/plugins/" mapping="/plugins/**" /></beans>

10、编写控制器层代码,负责和前后端交互

package com.cv.comtroller;import com.cv.entity.Apple;
import com.cv.service.AppleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/product")
public class AppleController {@AutowiredAppleService appleService;@RequestMapping("/insert")@ResponseBodypublic void insert(Apple apple) {appleService.insert(apple);}@RequestMapping("/query")@ResponseBodypublic Object[] query(String keywords, Integer pageNo) {Map map = new HashMap();if(keywords != null) {map.put("name", "%" + keywords +"%");}if(pageNo != null) {map.put("pageNo", pageNo);} else {map.put("pageNo", 1);}return appleService.query(map);}@RequestMapping("/delete")@ResponseBodypublic void delete(Apple apple) {appleService.delete(apple);}@RequestMapping("/update")@ResponseBodypublic void update(Apple apple) {appleService.update(apple);}
}

三、编写前端代码,负责和后端交互

1、使用ajax去调用后端代码,并指定所使用的css代码,并用html编写相应web界面

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2018/8/17Time: 13:26To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>商品列表</title><link rel="stylesheet" type="text/css" href="${request.contextPath}/css/bootstrap.css"><script type="text/javascript" src="${request.contextPath}/js/jquery-1.11.3.min.js"></script><script type="text/javascript" src="${request.contextPath}/js/bootstrap.js"></script><script type="text/javascript" src="${request.contextPath}/js/jquery.validate.js"></script><script type="text/javascript" src="${request.contextPath}/js/messages_zh.js"></script><script>$(document).ready(function() {var pageNo = 1; // 全局变量,当前页码var pageCount = 0; // 总页数function query(keywords) {$("#products").empty();$.ajax({url: "${request.contextPath}/product/query.action",type: "get",data: {"pageNo":pageNo,"keywords":keywords},success: function(result) {var products = result[0];pageCount = result[1];refreshPage(); // 更新分页链接状态for(var index=0;index<products.length;index++) {var product = products[index];$("#products").append("<tr>"+"<td><input type='checkbox' name='check' value='" + product.id + "'></td>"+"<td>" + product.id + "</td>" +"<td><span id='label_name_" + product.id + "'>" + product.name +"</span>" + "<input type='text' style='display:none' id='name_" + product.id +"' value='" + product.name + "'></td>" +"<td><span id='label_quantity_" + product.id + "'>" + product.quantity + "</span>" + "<input type='text' style='display:none' id='quantity_" + product.id +"' value='" + product.quantity + "'></td>"+"<td><span id='label_price_" + product.id + "'>" + product.price  + "</span>" + "<input type='text' style='display:none' id='price_" + product.id +"' value='" + product.price + "'></td>"+"<td><span id='label_categoryId_" + product.id + "'>" + product.categoryId  + "</span>" + "<input type='text' style='display:none' id='categoryId_" + product.id +"' value='" + product.categoryId + "'></td>"+"<td>"+"<button id='delete_" + product.id + "'><span class='text-danger glyphicon glyphicon-minus'></span></button>"+"<button  id='edit_" + product.id + "'><span class='text-warning glyphicon glyphicon-pencil'></span></button>"+"<button style='display:none' id='save_" + product.id + "'><span class='text-info glyphicon glyphicon-floppy-disk'></span></button>"+"</td></tr>");$("#delete_" + product.id).click(function() {if(confirm("确定删除吗?")) {var id = $(this).attr("id");remove(id.substr(id.indexOf("_")+1));}});$("#edit_" + product.id).click(function() {var id = $(this).attr("id");$("#label_name_" + id.substr(id.indexOf("_")+1)).hide();$("#label_quantity_" + id.substr(id.indexOf("_")+1)).hide();$("#label_price_" + id.substr(id.indexOf("_")+1)).hide();$("#label_categoryId_" + id.substr(id.indexOf("_")+1)).hide();$("#name_" + id.substr(id.indexOf("_")+1)).show();$("#quantity_" + id.substr(id.indexOf("_")+1)).show();$("#price_" + id.substr(id.indexOf("_")+1)).show();$("#categoryId_" + id.substr(id.indexOf("_")+1)).show();$(this).hide();$("#save_" + id.substr(id.indexOf("_")+1)).show();});$("#save_" + product.id).click(function() {var id = $(this).attr("id");update(id.substr(id.indexOf("_")+1)); // 从按钮的ID值截取商品id$("#label_name_" + id.substr(id.indexOf("_")+1)).show();$("#label_quantity_" + id.substr(id.indexOf("_")+1)).show();$("#label_price_" + id.substr(id.indexOf("_")+1)).show();$("#label_categoryId_" + id.substr(id.indexOf("_")+1)).show();$("#name_" + id.substr(id.indexOf("_")+1)).hide();$("#quantity_" + id.substr(id.indexOf("_")+1)).hide();$("#price_" + id.substr(id.indexOf("_")+1)).hide();$("#categoryId_" + id.substr(id.indexOf("_")+1)).hide();$(this).hide();$("#edit_" + id.substr(id.indexOf("_")+1)).show();});}}});}function update(id) {$.ajax({url: "${request.contextPath}/product/update.action",type: "get",data: {"id":id, "name": $("#name_" + id).val(),"quantity": $("#quantity_" +id).val(), "price": $("#price_" + id).val(),"categoryId": $("#categoryId_" + id).val()},success: function(result) {alert("更新成功!");query();}});}function insert() {$.ajax({url: "${request.contextPath}/product/insert.action",type: "get",data: {"name": $("#name").val(),"quantity": $("#quantity").val(), "price": $("#price").val(),"categoryId": $("#categoryId").val()},success: function(result) {alert("增加成功!");query();}});}function remove(id){$.ajax({url: "${request.contextPath}/product/delete.action",type: "get",data: {"id":id},success: function(result) {query();}});}/*** pageNo发生变化时需要更新分页链接状态*/function refreshPage() {if(pageNo == 1) {$("#first").addClass("disabled");$("#pre").addClass("disabled");} else {$("#first").removeClass("disabled");$("#pre").removeClass("disabled");}if(pageNo == pageCount) {$("#last").addClass("disabled");$("#next").addClass("disabled");} else {$("#last").removeClass("disabled");$("#next").removeClass("disabled");}}query(); // 初始化时查询第一页数据$("#first").click(function() {if(pageNo > 1) {pageNo = 1;query();}});$("#pre").click(function() {if(pageNo > 1) {pageNo = pageNo - 1;query();}});$("#next").click(function() {if(pageNo < pageCount) {pageNo = pageNo + 1;query();}});$("#last").click(function() {if(pageNo < pageCount) {pageNo = pageCount;query();}});$("#add").click(function() {$("#products").append("<tr><td>&nbsp;</td><td>#</td>" +"<td><input type='text' id='name'></td>" +"<td><input type='text' id='quantity'></td>"+"<td><input type='text' id='price'></td>"+"<td><input type='text' id='categoryId'></td>"+"<td>&nbsp;</td></tr>");$(this).hide();$("#save").show();});$("#save").click(function() {insert();$(this).hide();$("#add").show();});$("#search").click(function() {pageNo = 1;// 搜索后显示第一页数据query($("#keywords").val())});$("#delete").click(function(){var checks = $("[name='check']:checked");for(var index=0;index<checks.length;index++) {var productId = $(checks[index]).val();remove(productId);}});})</script>
</head>
<body>
<div class="container"><div class="row"><ul class="pagination"><li id="first"><a href="javascript:void(0)">第一页</a></li><li id="pre"><a href="javascript:void(0)">上一页</a></li><li id="next"><a href="javascript:void(0)">下一页</a></li><li id="last"><a href="javascript:void(0)">最后页</a></li></ul><table class="table table-bordered table-striped table-hover"><caption>商品列表<div class="input-group col-md-4"><input id="keywords" type="text" class="form-control"><span id="search" class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span></div><!-- /input-group --></caption><thead><th><input type="checkbox" id="all" >全选</th><th>ID</th><th>名称</th><th>数量</th><th>价格</th><th>类别</th><th>操作<button id='add'><span class='text-info glyphicon glyphicon-plus'></span></button><button id='save' style="display:none"><span class='text-info glyphicon glyphicon-floppy-disk'></span></button><button id='delete'><span class='text-info glyphicon glyphicon-minus'></span></button></th></thead><tbody id="products"></tbody></table><ul class="pagination"><li id="first2"><a href="javascript:void(0)">第一页</a></li><li id="pre2"><a href="javascript:void(0)">上一页</a></li><li id="next2"><a href="javascript:void(0)">下一页</a></li><li id="last2"><a href="javascript:void(0)">最后页</a></li></ul></div>
</div>
</body>
</html>

2、编写前端解析器配置文案间web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"metadata-complete="true"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 解决中文乱码问题 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

四、至此ssm框架的web界面配置完成,web界面如图所示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:STL:vector类常用函数介绍(附加部分重要函数模拟实现)

cplusplus.com/reference/vector/vector/https://cplusplus.com/reference/vector/vector/ vector在实际中非常的重要&#xff0c;在实际中我们熟悉常见的接口就可以&#xff0c;有了string的基础&#xff0c;vector其实大体使用方法上二者是类似的&#xff1a; 这里我们先给…

ScriptableObject基本使用

使用方法 自定义类继承ScriptableObject 可以在类内部增加数据或者数据类&#xff0c;一般用于配置 注意事项 给继承ScriptableObject的类增加CreateAssetMenu特性。 CreateAssetMenu一般默认三个参数 第一个参数是父目录 第二个参数是父目录的子选项 第三个参数是可以…

k8s yaml编写规范

yaml简介 yaml 是专门用来写配置文件的语言 yaml文件也是一种配置文件类型&#xff0c;后缀名是.yaml或.yml都可以 yaml语法规则 大小写敏感使用缩进表示层级关系&#xff08;不能用Tab&#xff0c;只能用空格&#xff09;相同层级的元素左对齐#号表示单行注释字符串可以不用…

多态(二)

1.多态的原理 虚函数表 class Base { public:virtual void Func1(){cout << "Func1()" << endl;} private:int _b 1; };b对象是8bytes&#xff0c;除了_b成员&#xff0c;还多一个__vfptr放在对象的前面(注意有些 平台可能会放到对象的最后面&#xf…

微信小程序启动不起来,报错凡是以~/包名/*.js路径的文件,都找不到,试过网上一切方法,最终居然这么解决的,【避坑】命运的齿轮开始转动

app.json "resolveAlias": {"~/*": "/*"},文件代码也没有问题&#xff0c;网上的方法试过来了&#xff0c;大模型AI也问过遍&#xff0c;熬夜到凌晨2点半&#xff0c;最不可思议的是居然是因为微信开发者工具版本的问题&#xff0c;我真的是笑死…

量化之一:均值回归策略

文章目录 均值回归策略理论基础数学公式 关键指标简单移动平均线&#xff08;SMA&#xff09;标准差Z-Score 交易信号实际应用优缺点分析优点缺点 结论 实践backtrader参数&#xff1a;正常情况&#xff1a;异常情况&#xff1a; 均值回归策略 均值回归&#xff08;Mean Rever…

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

1 机器学习之引言

傍晚小街路面上沁出微雨后的湿润&#xff0c;和煦的细风吹来&#xff0c;抬头看看天边的晚霞&#xff0c;嗯&#xff0c;明天又是一个好天气。走到水果摊旁&#xff0c;挑了个根蒂蜷缩、敲起来声音浊响的青绿西瓜&#xff0c;一边满心期待着皮薄肉厚瓤甜的爽落感&#xff0c;一…

STM32 GPIO

GPIO&#xff08;通用输入输出口&#xff0c;General Purpose Input Output&#xff09;接口的功能是让嵌入式处理器能够通过软件灵活地读出或控制单个物理引脚上的高、低电平&#xff0c;实现内核和外部系统之间的信息交换。 GPIO是嵌入式处理器使用最多的外设&#xff0c;能够…

React和Vue区别,以及注意事项

目录 一、语法和框架特性的差异 二、开发习惯和注意事项 三、特别注意事项 一、语法和框架特性的差异 模板语法&#xff1a; Vue使用了类似于传统HTML的模板语法&#xff0c;通过双大括号{{ }}进行插值&#xff0c;而React则使用了JSX语法。在Vue中&#xff0c;你可以直接在…

甲虫身体图像分割系统源码&数据集分享

甲虫身体图像分割系统源码&#xff06;数据集分享 [yolov8-seg-EfficientRepBiPAN&#xff06;yolov8-seg-C2f-FocusedLinearAttention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challen…

SQL Server 计算两个时间相差

在 SQL Server 中&#xff0c;计算两个时间字符串之间的差值 首先将这些字符串转换成日期/时间类型&#xff08;如 datetime 或 datetime2&#xff09;然后使用日期函数来计算它们之间的差异。 1、计算两个时间字符串之间的差值 案例&#xff1a;计算 starttime 和 endtime …

android——activity之间数据共享(单例等)

一、使用 Intent 传递数据&#xff08;适用于简单数据传递&#xff0c;且在 Activity 启动时&#xff09; 二、使用静态变量&#xff08;简单但有风险&#xff09; 原理 在一个类中定义静态变量&#xff0c;例如一个 Application 类或者一个专门用于存储共享数据的工具类。两个…

毕设开源 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

简单粗暴理解GNN、GCN、GAT

GNN 思想&#xff1a;近朱者赤近墨者黑 GNN的流程&#xff1a; 聚合&#xff08;把邻居的信息贴到自己身上来&#xff0c;作为它自己特征的补足&#xff09;更新循环&#xff08;为什么要多次&#xff1f;看以下例子&#xff09; GNN能干嘛&#xff1f; 1.结点分类&#xf…

【多线程】多线程(12):多线程环境下使用哈希表

【多线程环境下使用哈希表&#xff08;重点掌握&#xff09;】 可以使用类&#xff1a;“ConcurrentHashMap” ★ConcurrentHashMap对比HashMap和Hashtable的优化点 1.优化了锁的粒度【最核心】 //Hashtable的加锁&#xff0c;就是直接给put&#xff0c;get等方法加上synch…

STM32的时钟复位控制单元(RCU/RCC)技术介绍

在嵌入式系统开发中&#xff0c;时钟管理和复位控制是确保微控制器稳定运行的关键因素。时钟复位控制单元&#xff08;Reset and Clock Control, RCU/RCC&#xff09; 是 STM32 系列微控制器中的一个重要外设&#xff0c;负责管理系统的时钟源、分频器、外设时钟以及复位功能。…

【网络协议】TCP协议常用机制——延迟应答、捎带应答、面向字节流、异常处理,保姆级详解,建议收藏

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 前几篇文章&#xff0c;博主带大家梳理了一下TCP协议的几个核心机制&#xff0c;比如保证可靠性的 确认应答、超时重传 机制&#xff0c;和提高传输效率的 滑动窗口及其相关优化机…

构建可以ssh连接的容器镜像

构建可以ssh连接的容器镜像 构建可以通过ssh进行连接容器镜像&#xff0c;实现远程登录容器的目的。 ubuntu ssh容器镜像 你可以使用以下Dockerfile来构建一个可以SSH的容器镜像&#xff1a; FROM ubuntu:20.04MAINTAINER lldhsds# 配置apt国内源 COPY sources.list /etc/a…

云原生开发 - 工具镜像(简约版)

在微服务和云原生环境中&#xff0c;容器化的目标之一是尽可能保持镜像小型化以提高启动速度和减少安全风险。然而&#xff0c;在实际操作中&#xff0c;有时候需要临时引入一些工具来进行调试、监控或问题排查。Kubernetes提供了临时容器&#xff08;ephemeral containers&…