Java EE期末总结(第三章)
目录
一、JavaBean
1、规范与定义
2、与JavaBean相关的JSP动作标签
二、MV开发模式(JSP+JavaBean)
三、Servlet组件
1、Servlet定义
2、基于HTTP请求的Servlet开发
3、Sevlet执行原理
4、控制器程序的分层设计(DAO)模式
5、Servlet实现文件上传与下载 (我赌他不考)
四、Servlet监听器和过滤器(相信我它也考不到,这么多文字他自己肯定也懒得看,过滤器可以看一下)
1、Servle监听器
1.概念和作用
2. 常见的监听器类型
3. 示例代码(以 ServletContextListener 为例)
二、Servlet 过滤器(Filter)
1. 概念和作用
2. Filter 接口的方法
3. 示例代码(简单的字符编码过滤器)
一、JavaBean
1、规范与定义
定义:
1、字段私有,public方法来访问私有字段set/get/is等方法
2、最好提供一个无参的构造
3、最好实现一个接口
概念:JavaBean一般只封装数据,不包含复杂逻辑的方法
属性:如果Java Bean中只要有一个get/set方法则我们就称为该Java Bean中有一个xxx属性。(例如下方示例我们就可以说Student这个JavaBean有name属性)
注:其实这个对于我们来说这是很熟悉的,无参构造和带参构造在我们C++中如果你的代码规范的话,这两个是很好理解的;get和set在C++中就是其它文件可以对某一个文件中的一个私有成员进行访问。
示例:
testJavaBean.java
package com.example;class Student //加上接口的写法就是class Student implements Serializable {private String name;public Student() {}public Student(String name) {this.name = name;}// Getter 和 Setter 方法public String getName() {return name;}public void setName(String name) {this.name = name;}}
student.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.example.Student" %> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>jsp对javabean的使用</title> </head> <body><%Student student = new Student();student.setName("王五");%><h2>学生信息</h2><p>姓名: <%= student.getName() %></p> </body> </html>
2、与JavaBean相关的JSP动作标签
<jsp:useBean>
此标签用于在 JSP 页面里创建或者查找 JavaBean 实例。
<jsp:useBean id="beanName" class="package.className" scope="page|request|session|application" />
id
:JavaBean 实例的唯一标识符,后续可通过该标识符引用这个实例。
class
:JavaBean 类的全限定名。
cope
:指定 JavaBean 实例的作用域,有四个可选值:
page
:仅在当前 JSP 页面有效。
request
:在当前请求范围内有效。
session
:在整个会话期间有效。
application
:在整个应用程序范围内有效。
根据以上testJavaBean.java写的示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>JavaBean 动作标签示例</title> </head> <body><!-- 创建 Student JavaBean 实例 --><jsp:useBean id="student" class="com.example.Student" scope="request" /><!-- 设置 JavaBean 的属性值 --><jsp:setProperty name="student" property="name" value="李四" /><!-- 显示 JavaBean 的属性值 --><h2>学生信息</h2><p>姓名: <jsp:getProperty name="student" property="name" /></p> </body> </html>
根据以上我们可以理解到其实<jsp:useBean ……>也就相当于new了;<jsp:setProperty……>和<jsp:getProperty……>也就是直接代替了set/get函数。
二、MV开发模式(JSP+JavaBean)
JavaBean+JSP开发模式我们一般成为MV模式或Model1模式,可以很好实现前后端业务分离。简单来说就是客户在JSP页面操作,JSP去调用JavaBean进行数据处理。这其实也就是MVC少了C罢了。
三、Servlet组件
1、Servlet定义
JSP代表MVC中的V但还是有有一些业务逻辑,Servlet实际上就是进一步分理出业务逻辑。
概念:运行在服务端的小程序
Servlet就是一个实现了javax.servlet.Servlet接口,定义了Java类被Tomcat识别的规则。
2、基于HTTP请求的Servlet开发
没什么好讲的看懂示例就可以了与C++的MVC做对比性观看
文件路径
my-web-app
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── MyServlet.java
│ └── webapp
│ ├── WEB-INF
│ │ ├── web.xml
│ │ └── classes
│ └── index.jsp
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!-- Servlet 配置 --><servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.example.MyServlet</servlet-class></servlet><servlet-mapping><!-- 与上同那么 --><servlet-name>MyServlet</servlet-name><url-pattern>/myServlet</url-pattern></servlet-mapping> </web-app>
<servlet-mapping>对servlet进行一个映射;<url-pattern>就是设置一个访问的路径可以通过哪个路径访问到这里就是例如:https://localhost:8080/myServlet可以访问到这个servlet,下main的注解中是相同的
MyServlet.java
import java.io.IOException; import jakarta.servlet.*;@WebServlet("/myServlet") public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String message = request.getParameter("message");} }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Servlet Example</title> </head> <body><h1>Send Request to Servlet</h1><!-- GET 请求表单 --><form action="myServlet" method="get"><label for="name">Name:</label><input type="text" id="name" name="dcm"><input type="submit" value="Send GET Request"></form><!-- POST 请求表单 --><form action="myServlet" method="post"><label for="message">Message:</label><textarea id="message" name="hello"></textarea><input type="submit" value="Send POST Request"></form> </body> </html>
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"><!-- 配置 UserServlet --><servlet><servlet-name>UserServlet</servlet-name><servlet-class>com.example.servlet.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/user</url-pattern></servlet-mapping></web-app>
3、Sevlet执行原理
执行原理:
(1)当服务器接收到客户端请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
(2)查找web.xml文件,是否有对应的<url-pattern>标签体内容
(3)如果有,则找对应的<servlet-class>全类名
(4)tomcat会将字节码文件加载进内存,并且会创建对象
(5)调用其方法,访问的时候进行初始化init(),执行的时候执行service(),销毁的时候执行destroy(),很好理解这三个就差不多相当于C++中的纯虚函数,只需要重写它就会自己调用。
4、控制器程序的分层设计(DAO)模式
书上讲的很复杂,实际上我们用C++中的MVC来看就易懂很多了
这个就是本人写的一个C++项目中使用到了MVC框架。model中的usermodel继承于我的basemodel也就是一个总业务逻辑,quser呢就是我们访问到的数据对象。
这是Java中的MVC框架。我们对比来看其实
service->UserService.jav+dao->UserDAO.java相当于singleDB+control->qcontrol+model->basemodel->usermodel.cpp去数据库中访问我们需要的user数据,
java中的model->User.java相当于我们的data->quser.cpp一个访问的数据对象
java示例:
User.java
(数据对象)public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;} }
UserDAO.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;public class UserDAO {private static final String URL = "jdbc:mysql://localhost:3306/mydb";private static final String USER = "root";private static final String PASSWORD = "123456";public User findById(int id) {User user = null;try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id =?")) {stmt.setInt(1, id);ResultSet rs = stmt.executeQuery();if (rs.next()) {user = new User();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));}} catch (SQLException e) {e.printStackTrace();}return user;}public List<User> findAll() {List<User> users = new ArrayList<>();try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users")) {ResultSet rs = stmt.executeQuery();while (rs.next()) {User user = new User();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));users.add(user);}} catch (SQLException e) {e.printStackTrace();}return users;}// 其他增删改操作方法... }
UserService.java
(调用我们的UserDao,然后返回数据)import java.util.List;public class UserService {private UserDAO userDAO = new UserDAO();public User findUserById(int id) {return userDAO.findById(id);}public List<User> findAllUsers() {return userDAO.findAll();}// 其他业务逻辑方法... }
UserServlet.java
(实例化UserService然后获取它的返回值去给页面)import java.io.IOException; import java.util.List;import jakarta.servlet.*;@WebServlet("/user") public class UserServlet extends HttpServlet {private UserService userService = new UserService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<User> users = userService.findAllUsers();request.setAttribute("users", users);request.getRequestDispatcher("userList.jsp").forward(request, response);} }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>用户管理</title> </head><body><h1>用户管理系统</h1><a href="user">查看用户列表</a> </body></html>
C++示例:
quser.h(java中的User一样)
singledb .cpp(类似于DAO层但这个用的是单例模式)
#include "singledb.h"//懒汉式单例设计模式
SingleDB* SingleDB::db=nullptr;SingleDB *SingleDB::getInstance()
{//只有第一次调用会newif(SingleDB::db==nullptr){SingleDB::db=new SingleDB();}return SingleDB::db;
}void SingleDB::relaseInstance()
{if(SingleDB::db!=nullptr){delete SingleDB::db;SingleDB::db=nullptr;}
}int SingleDB::openDB(char *path)
{int res=0;res=sqlite3_open(path,&this->psqlite);if(res==SQLITE_OK){//qDebug()<<"open success";}else{qDebug()<<"错误码:"<<sqlite3_errcode(this->psqlite);qDebug()<<"错误信息:"<<sqlite3_errmsg(this->psqlite);}return res;
}void SingleDB::closeDB()
{if(this->psqlite!=NULL){int res=sqlite3_close(this->psqlite);if(res==SQLITE_OK){qDebug()<<"open success";}else{qDebug()<<"错误码:"<<sqlite3_errcode(this->psqlite);qDebug()<<"错误信息:"<<sqlite3_errmsg(this->psqlite);}}
}SingleDB::SingleDB()
{openDB("../database/IntelligentSecuritySystem.db");
}SingleDB::~SingleDB()
{closeDB();
}sqlite3 *SingleDB::getPsqlite() const
{return psqlite;
}
和上面的singledb结合在一起来返回一个从数据库中查到的user数据。只不过在java中返回的数据专门用了一个Service来返回
以下是cpp获取数据库中数据的方法
5、Servlet实现文件上传与下载 (我赌他不考)
略……
四、Servlet监听器和过滤器(相信我它也考不到,这么多文字他自己肯定也懒得看,过滤器可以看一下)
说了不考,那么不相信我,那还看我的博客复习啥。既然要看那我就简单以我的理解给你概括一下吧,下面这些呢,一般都是init->过程->destory过程好了结束了,就是创建->执行->销毁,好了吧浪费一分钟了吧!快去下一篇吧!!!
1、Servle监听器
1.概念和作用
Servlet 监听器是一种特殊的 Java 类,用于监听 Web 应用程序中的各种事件,比如 Servlet 上下文(
ServletContext
)的创建和销毁、会话(HttpSession
)的创建和销毁、请求(ServletRequest
)的初始化和销毁等。通过监听器,我们可以在这些事件发生时执行一些特定的操作,例如记录日志、初始化资源、统计在线用户数量等。
2. 常见的监听器类型
Servlet 上下文监听器:
ServletContextListener
:监听ServletContext
的创建和销毁事件。当 Web 应用程序启动时,ServletContext
被创建,contextInitialized(ServletContextEvent event)
方法被调用;当 Web 应用程序停止时,ServletContext
被销毁,contextDestroyed(ServletContextEvent event)
方法被调用。
ServletContextAttributeListener
:监听ServletContext
属性的添加、删除和替换事件。对应的方法分别是attributeAdded(ServletContextAttributeEvent event)
、attributeRemoved(ServletContextAttributeEvent event)
和attributeReplaced(ServletContextAttributeEvent event)
。会话监听器:
HttpSessionListener
:监听HttpSession
的创建和销毁事件。sessionCreated(HttpSessionEvent event)
方法在会话创建时调用,sessionDestroyed(HttpSessionEvent event)
方法在会话销毁时调用。
HttpSessionAttributeListener
:监听HttpSession
属性的添加、删除和替换事件。对应的方法是attributeAdded(HttpSessionBindingEvent event)
、attributeRemoved(HttpSessionBindingEvent event)
和attributeReplaced(HttpSessionBindingEvent event)
。
HttpSessionActivationListener
:监听HttpSession
的活化(从持久化存储恢复到内存)和钝化(将内存中的会话数据保存到持久化存储)事件。sessionDidActivate(HttpSessionEvent event)
方法在会话活化时调用,sessionWillPassivate(HttpSessionEvent event)
方法在会话钝化时调用。请求监听器:
ServletRequestListener
:监听ServletRequest
的初始化和销毁事件。requestInitialized(ServletRequestEvent event)
方法在请求初始化时调用,requestDestroyed(ServletRequestEvent event)
方法在请求销毁时调用。
ServletRequestAttributeListener
:监听ServletRequest
属性的添加、删除和替换事件。对应的方法分别是attributeAdded(ServletRequestAttributeEvent event)
、attributeRemoved(ServletRequestAttributeEvent event)
和attributeReplaced(ServletRequestAttributeEvent event)
。
3. 示例代码(以 ServletContextListener
为例)
import jakarta.servlet.*;@WebListener
public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("ServletContext 初始化了!");// 可以在这里进行一些初始化操作,如加载配置文件等}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("ServletContext 销毁了!");// 可以在这里进行资源清理等操作}
}
二、Servlet 过滤器(Filter)
1. 概念和作用
Servlet 过滤器是一个实现了
Filter
接口的 Java 类,它可以对 Web 应用程序中的请求和响应进行拦截和处理。过滤器可以在请求到达 Servlet 之前对请求进行预处理,也可以在 Servlet 处理完请求后对响应进行后处理。常见的应用场景包括权限验证、字符编码转换、日志记录、请求参数修改等。
2. Filter
接口的方法
init(FilterConfig filterConfig)
:在过滤器被实例化后,容器会调用这个方法来初始化过滤器。FilterConfig
对象提供了访问过滤器配置信息的方法。
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
:这是过滤器的核心方法,当请求进入过滤器时,容器会调用这个方法。在这个方法中,过滤器可以对请求和响应进行处理,然后通过chain.doFilter(request, response)
方法将请求传递给下一个过滤器或目标 Servlet。
destroy()
:当过滤器被销毁时,容器会调用这个方法。在这个方法中,可以进行一些资源清理的操作。
3. 示例代码(简单的字符编码过滤器)
import jakarta.servlet.*;import java.io.IOException;@WebFilter("/user") // 拦截所有访问 /user 的请求
public class CharacterEncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作,这里可以不做具体处理}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding("UTF-8"); // 设置请求的字符编码response.setCharacterEncoding("UTF-8"); // 设置响应的字符编码chain.doFilter(request, response); // 将请求传递给下一个过滤器或目标 Servlet}@Overridepublic void destroy() {// 资源清理操作,这里可以不做具体处理}
}
相关文章:
Java EE期末总结(第三章)
目录 一、JavaBean 1、规范与定义 2、与JavaBean相关的JSP动作标签 二、MV开发模式(JSPJavaBean) 三、Servlet组件 1、Servlet定义 2、基于HTTP请求的Servlet开发 3、Sevlet执行原理 4、控制器程序的分层设计(DAO)模式 5、…...
Data_Socket和UDP_Socket
Data_Socket 和 UDP_Socket 是两种不同类型的网络套接字,它们用于不同的协议和应用场景。以下是它们的主要区别: 协议类型: UDP_Socket:使用的是 UDP(User Datagram Protocol) 协议,这是一种无连…...
6547网:蓝桥STEMA考试 Scratch 试卷(2025年3月)
『STEMA考试是蓝桥青少教育理念的一部分,旨在培养学生的知识广度和独立思考能力。考试内容主要考察学生的未来STEM素养、计算思维能力和创意编程实践能力。』 一、选择题 第一题 运行下列哪个程序后,飞机会向左移动? ( ) A. …...
使用MATIO库读取Matlab数据文件中的多维数组
使用MATIO库读取Matlab数据文件中的多维数组 MATIO是一个用于读写Matlab数据文件(.mat)的开源C库。下面是一个完整的示例程序,展示如何使用MATIO库读取Matlab数据文件中的多维数组。 示例程序 #include <stdio.h> #include <stdlib.h> #include <…...
Spring @Transactional 注解是如何工作的?
Transactional 注解是 Spring 框架中用于声明式事务管理的核心注解。它可以应用于类或方法,用于指定事务的属性,例如传播行为、隔离级别、超时时间、只读标志等。下面详细解释 Transactional 注解的工作原理: 1. 启用事务管理: …...
spring security 过滤器链使用
Spring Security 的过滤器链提供了灵活的安全控制机制,以下是其在实际开发中的 常见用法 及对应的过滤器配置示例: 一、认证方式配置 1. 表单登录认证 • 过滤器:UsernamePasswordAuthenticationFilter • 配置: http.formLogi…...
k8s 自动伸缩的场景与工作原理
k8s 自动伸缩的场景与工作原理 在现代云原生架构中,应用的访问量和资源需求常常存在波动。为了解决高峰时资源不足、低谷时资源浪费的问题,Kubernetes 提供了自动伸缩功能。自动伸缩可以根据预设的指标(如 CPU 利用率、内存占用、网络流量等…...
SYN Flooding攻击原理
SYN Flooding攻击原理详解 SYN Flooding(SYN洪泛攻击)是一种典型的拒绝服务攻击(DoS/DDoS),利用TCP协议的三次握手缺陷耗尽目标系统资源。以下是其工作原理、影响及防御措施的全面解析: 1. TCP三次握手回顾…...
【爬虫案例】采集 Instagram 平台数据几种方式(python脚本可直接运行)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、概述1.1 Instagram基础信息1.2 Instagram平台架构核心技术栈1.3 采集提示1.4 几种采集方案对比二、四种采集方案分析三、写爬虫采集Instagram案例3.1 采集作品信息并下载视频或图片(无需登录)3.2 explore接口的采…...
通过构造函数和几何条件,研究了不同函数的最近点存在性、性质及单调性
解: (1)对于函数 f ( x ) 1 x f(x) \frac{1}{x} f(x)x1 和点 M ( 1 , 0 ) M(1, 0) M(1,0),构造函数 s ( x ) ( x − 1 ) 2 ( 1 x ) 2 s(x) (x - 1)^2 \left(\frac{1}{x}\right)^2 s(x)(x−1)2(x1)2。求导得到 s ′ …...
项目复杂业务的数据流解耦处理方案整理
目前项目中使用mobx,项目比较久了,每个Store的内容是越来越多了,逻辑也是越来越复杂,如果不梳理估计以后模块的层级会很乱。 之前整理了一些数据流管理的对比实践和最佳方案的梳理,最后写来写去感觉还是要整理一个架构…...
手部穴位检测技术:基于OpenCV和MediaPipe的实现
手部穴位检测是医学和健康管理领域的重要技术之一。通过准确识别手部的关键穴位,可以为中医诊断、康复治疗以及健康监测提供支持。本文将介绍一种基于OpenCV和MediaPipe的手部穴位检测方法,展示如何利用计算机视觉技术实现手部关键点的检测,并进一步标注手部的穴位位置。 技…...
Pycharm 启动时候一直扫描索引/更新索引 Update index/Scanning files to index
多个项目共用一个虚拟环境,有助于加快PyCharm 启动吗 chatgpt 4o认为很有帮助,gemini 2.5pro认为没鸟用,我更认可gemini的观点。不知道他们谁在一本正经胡说八道。 -------- 打开pycharm的时候,下方的进度条一直显示在扫描文件…...
解锁健康密码,拥抱品质生活
在生活节奏不断加快的今天,健康养生已成为人们关注的焦点。它不仅关乎当下生活质量,更是对未来幸福的投资。从日常生活的点滴出发,掌握正确养生方法,我们就能轻松收获健康。 饮食是健康的基石。我们应当遵循 “食物多样&#x…...
安卓开发工程师- Intent 机制
Intent 的作用是什么? Intent(意图)是 Android 中用于组件之间通信的一种机制。它主要用于以下几种场景: 启动 Activity:从一个 Activity 跳转到另一个 Activity。启动 Service:用于启动后台服务或与服务…...
iOS 使用 - 修改屏幕为黑白显示(墨水屏)
iOS 18 设置 – 辅助功能 – 显示与文字大小 – 色彩滤镜 打开色彩滤镜,选择 灰度,最下方调节 强度值 怀念起那个用电子词典的岁月,一个个字母键入,就可以获得很多知识。 触屏时代,一切好像更简单了,但也更…...
小白速通:Verilog流水线实现及时序分析
目录 题目:时序分析:时钟频率为50MHz数据1: a10, b20, c30, d40, e2数据2: a5, b15, c25, d35, e3数据3: a8, b12, c16, d24, e4 流水线效率分析 题目: verilog中,y(abcd)*e,时钟频率为50Mhz,用流水线的形式…...
微软的 Copilot 现在可以浏览网页并为您执行操作
在庆祝其 50 岁生日之际,微软正在向其人工智能驱动的 Copilot 聊天机器人传授一些新技巧。 从 BASIC 到 AI,改变世界的公司:微软 微软表示,Copilot 现在可以在“大多数网站”上采取行动,使其能够预订门票、预订餐厅等…...
【C++】vector的模拟实现
文章目录 前言一. vector的底层二. 关于容量和大小的函数2.1 size和capacity2.2 reserve2.3 resize2.4 empty 三. vector的默认成员函数3.1 构造函数3.1.1 无参构造函数3.1.2 构造初始化为n个val值3.1.3 用initializer_list构造初始化3.1.4 使用迭代器区间进行构造初始化 3.2 拷…...
C# Winform 入门(9)之如何封装并调用dll
封装dll 首先创建 .Net平台 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _09.Encapsulation_dll {public class Program{/// <summary>/// 求两个double类型的数值的和/// &l…...
【C语言】内存函数
大家好,很高兴又和大家见面了!!! 在C语言标准库中,有一些直接对内存进行操作的函数,我们将其称之为内存函数,这些函数位于头文件<string.h>,在网站https://cplusplus.com/ref…...
SDL视频显示函数
文章目录 1. **`SDL_Init()`**2. **`SDL_CreateWindow()`**3. **`SDL_CreateRenderer()`**4. **`SDL_CreateTexture()`**5. **`SDL_UpdateTexture()`**6. **`SDL_RenderCopy()`**7. **`SDL_RenderPresent()`**8. **`SDL_Delay()`**9. **`SDL_Quit()`**总结示例代码:代码说明:…...
博客文章:深入分析 PyMovie - 基于 Python和 MoviePy 的视频管理工具
这是一个使用 wxPython 构建界面、moviepy 处理视频的自定义 GUI 应用程序。该工具提供了视频播放、元数据提取、格式转换、视频裁剪和截图等功能。通过分析其设计和实现,我们将了解其工作原理、优点和潜在的改进空间。 C:\pythoncode\new\output\pymovieSample.py …...
Redis中AOF的实现方式和AOF重写
一、AOF 的实现方式 核心原理 AOF 通过将写操作命令以追加方式记录到日志文件中,重启时通过重放命令恢复数据。与 RDB 的快照机制不同,AOF 是增量记录,更适用于数据一致性要求较高的场景。写入流程 命令执行:客户端发送写命令&am…...
Supervisor的安装和使用
Supervisor 使用笔记(CentOS 8 环境) 本周,老师让我使用supervisor管理项目服务,当时第一次听说过这个进程管理工具😶🌫️,就上网搜了搜安装和使用,又用ai查了一些细节࿰…...
JVM 内存区域详解
JVM 内存区域详解 Java 虚拟机(JVM)的内存区域划分为多个部分,每个部分有特定的用途和管理机制。以下是 JVM 内存区域的核心组成及其功能: 一、运行时数据区(Runtime Data Areas) 1. 线程共享区域 内存…...
【java】在 Java 中,获取一个类的`Class`对象有多种方式
在 Java 中,获取一个类的Class对象有多种方式。Class对象代表了 Java 中的一个类或接口的运行时类信息,可以用于反射操作。以下是获取Class对象的几种常见方法: 1.使用.class属性 每个类都有一个.class属性,可以直接获取该类的Cl…...
蓝桥杯:对字符串处理常用知识笔记
一、前面四个是计算带有空格字符串的的长度计算 C语言代码 #include<string.h> #include<stdio.h> int main() { char s[105]; gets(s); printf("%d", strlen(s)); return 0; } 算法2 C 代码(常用) #include <iostream> #in…...
c++网络编程,信号透传可能是什么意思
在 C 网络编程中,**信号透传**(Signal Pass-Through)通常 refers to the concept of allowing signals to propagate through a network protocol stack without being interrupted or modified. 具体来说,信号透传可以涉及到几个…...
数据结构与算法学习笔记----贪心·绝对值不等式
数据结构与算法学习笔记----贪心绝对值不等式 author: 明月清了个风 first publish time: 2025.4.5 ps⭐️感觉其实是一个数学的问题, Acwing 104. 货仓选址 [原题链接](104. 货仓选址 - AcWing题库) 在一条数轴上有 N N N家商店,他们的坐标分别为 A…...
CUDA学习--体验GPU性能
学习来源:2 CUDA Python--并行计算基础-卷积计算以及共享内存_哔哩哔哩_bilibili 处理一张图片的处理速度对比 import cv2 from numba import cuda import time import math cuda.jit() def process_gpu(img,channels):tx cuda.blockIdx.x*cuda.blockDim.xcuda…...
博途 TIA Portal之1200做主站与200SMART的S7通讯
有时候,我们与之作S7通讯的西门子系PLC并不是同一个厂商或是同一时期供货的,也有可能不在一个编程软件中。此时进行S7能讯会有所不同。本文将演示博途与200SMART做S7通讯。 1、硬件准备 1200PLC一以,200SMART一台,网线2根,交换机一台。 2、关于编程 1200做主站,因此需…...
a标签download下载图片
a标签的download属性是HTML5中新增的一个属性,用于指定链接点击时直接下载文件,而不是在浏览器中打开文件。 基本用法 指定下载文件名:在a标签中添加download属性,并指定一个文件名。例如: <a href"…...
#SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff、matched 和 expect 的语法知识。 1. disable iff (condition) 功能与定义 作用:当指定条件(condition)为真时,禁用当前属性的检查。 常用于复位(rese…...
Day2-2:前端项目uniapp壁纸实战
再在wallpaper新建一个目录components 在components下新建组件common-title 记得点击创建同名目录 在index加 <view class"select"><common-title></common-title></view> 图片换了下,原来的有点丑,图片可按自己喜欢…...
pycharm如何通过跳板机连接服务器在本地debug
现在假设你有一个服务器,需要跳板机登陆,但是你从跳板机到服务器,只知道能直接通过ssh连接。 首先你可以现在本地创建一个 SSH 配置文件(~/.ssh/config): Host jumpHostName 跳板机地址Port 端口User 用户…...
Mysql explain中列的解析
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL possible_keys:查询可以利用的索引&#…...
场馆预定系统小程序PHP+uniapp
场馆预定系统小程序:基于PHPUniApp的多场景体育场馆智慧化解决方案 随着全民健身意识的提升,体育场馆的数字化管理需求日益增长。场馆预定系统小程序凭借其轻量化、高便捷性,成为体育馆、羽毛球馆、兵乒球馆等场所提升运营效率的核心工具。本…...
05.unity 游戏开发-3D工程的创建及使用方式和区别
05.unity 游戏开发-3D工程的创建及使用方式和区别 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ unity简介…...
php8 命名参数使用教程
简介 PHP 8 引入 命名参数(Named Arguments),允许在调用函数时按参数名传递值,而不是按照参数位置。这增强了代码的可读性、灵活性,并减少参数顺序依赖。 基本用法 传统位置参数(Positional Arguments&a…...
Transformer与注意力机制详解
1 Transformer与注意力机制详解 本文直观上详细介绍了大语言模型中十分重要的结构——Transformer,及其核心:注意力机制的原理。 1. Transformer结构 基础结构如下图所示,左侧由一系列Encoder block(编码器)构成,接收字词句输入;右侧由一系列Decoder block(解码器)…...
xLua环境控制+xLua的Lua调用C#的1
编写自定义加载器加载指定路径的Lua文件: using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using XLua;//Lua是脚本语言,编写代码脚本是实现功能最重要的方式 public class Loader : MonoBehaviour …...
RabbitMQ应用问题
RabbitMQ应用问题 一.幂等性1.简述概念2.MQ的幂等性介绍3.解决幂等性问题(1)全局唯一ID(2)业务逻辑判断 二.顺序性保障1.简单介绍2.无法保证顺序性的场景3.保障方案1)单队列消费者2)分区消费3)消息确认机制4)业务逻辑控制 三.消息积压问题1.原因分析2.解决方案 一.幂等性 1.简…...
轻量化大模型微调工具XTuner指令微调实战(下篇)
接着上篇文章《轻量化大模型微调工具XTuner指令微调实战(上篇)》来接着写教程。 一、模型转换 模型训练后会自动保存成 PTH 模型(例如 iter_500.pth),我们需要利用 xtuner convert pth_to_hf 将其转换为 HuggingFace…...
Redis数据结构之ZSet
目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合,且不允许重复的成员,不同的是ZSet…...
STM32提高篇: CAN通讯
STM32提高篇: CAN通讯 一.CAN通讯介绍1.物理层2.协议层二.STM32CAN外设1.CAN控制器的3种工作模式2.CAN控制器的3种测试模式3.功能框图三.CAN的寄存器介绍1.环回静默模式测试2.双击互发测试四.CAN的HAL代码解读一.CAN通讯介绍 CAN(Controller Area Network 控制器局域网,简称…...
贪心算法之最小生成树问题
1. 贪心算法的基本思想 贪心算法在每一步都选择局部最优的边,希望最终得到整体最优的生成树。常见的两种 MST 算法为 Kruskal 算法 和 Prim 算法。这两者均满足贪心选择性质和最优子结构性质,即: 贪心选择性质:局部最优选择&…...
C++EasyX之五子棋PVP和PVE
以下是该C EasyX五子棋代码的详细解析: 1 代码 1.1 全代码 #include <graphics.h> #include <conio.h> #include <Windows.h> #include <cmath> #include <vector> #include <tuple> #include <algorithm>using na…...
【Tauri2】015——前端的事件、方法和invoke函数
目录 前言 正文 准备 关键url 获取所有命令 切换主题set_theme 设置大小 获得版本version 名字name 监听窗口移动 前言 【Tauri2】005——tauri::command属性与invoke函数-CSDN博客https://blog.csdn.net/qq_63401240/article/details/146581991?spm1001.2014.3001.…...
【C++奇遇记】C++中的进阶知识(继承(二))
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…...