【轻量级 Java Web 整合开发(第 2 版)-框架编程技术】-期末复习(第二版)

news2024/11/25 9:25:05

第一章 Java Web 技术概述 作业

1、完成课后(P28)选择题和问答题(只需完成,不需要提交)

2、Tomcat的目录结构及其用途?

bin:启动/关闭应用服务器的bat批处理命令;
conf:包含不同的配置文件。包括server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件web.xml。
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限 lib:包含Tomcat使用的的jar包,当然也可以放你自己项目需要的jar包。Unix平台此目录下的任何文件都被加到Tomcat的classpath下。
temp: Tomcat运行过程中产生的临时文件。 Logs:存放Tomcat的日志文件。
webapps:这里就是你的项目了,你的项目可以是以文件或者jar包的方式存放在这个目录里。
work:work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。

5、动态网页和静态网页的区别?

静态页面是指存放在服务器中的已经提前编写好的页面,只需客户端发起请求就可以返回的页面,而动态页面则是可根据需求动态生成页面。程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如ASP、PHP、JSP、ASP.net、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如html页、Flash、JavaScript、VBScript等等,它们是永远不变的。

6、简述如何配置Tomcat服务,实现多主机、多端口以及同一主机的多端口访问?

多端口:编辑server.xml文件,在<Service></Service>标签中添加端口
多主机:编辑server.xml文件,添加一个<Servlet></Servlet>标签,然后在C盘中找到host文件在里面添加映射

第二章 Servlet核心技术 作业

2、详述Servlet生命周期。

加载和实例化Servlet,Servlet容器负责加载和实例化Servlet; 初始化Servle,Servlet 通过调用 init ()
方法进行初始化; 请求处理,Servlet 调用 service() 方法来处理客户端的请求; 服务终止,销毁Servlet,Servlet
通过调用 destroy() 方法终止。

3、get方法和post方法的异同?

两种方法都是HTTP的请求方法。
Get方法申请的资源类型是静态或者动态的,数据类型是文本,数据量一般不超过255个字符,并且数据是URL的一部分,在浏览器的地址栏中对用户可见,数据可在浏览器的URL历史中缓存。而Post方法申请的资源类型只能是动态的,数据类型为文本或者二进制数据,数据量没有限制,数据不是URl的一部分。

4、HTTP请求结构由哪些部分组成?和HTTP响应结构由哪些部分组成?请求转发与响应重定向的区别?

请求结构:请求行、请求头、请求方法
响应结构:状态行和状态码、响应头、响应数据
区别:请求转发是服务器将资源找到然后发送给客户端,而响应重定向则是服务器告诉客户端资源的URL由客户端去寻找

5、状态码404、403、500分别表示什么意思,以及如何解决?

404表示页面没有找到,需要重新检查URL、403表示禁止的页面、500表示服务器内部错误

6、分别描述通过url提交用户和密码,以及通过表单post提交用户和密码至Servlet实现用户和密码验证。

1.用URL访问Servlet:http://localhost:8080/user-login?username = admin&password = admin。这里,问号后面的内容为查询串。&连接多个参数。

2.Post请求:
		<form action = “usre-login” method = “post”>
				用户名: <input type = “text” name = “username”>
				密码:<input type = “password” name = “password”>
				<input type = “submit” value = “登录”>
		</form>

7、@WebServlet的作用?

@WebServle作用是代替web.xml中的servlet
的<servlet-mapping>元素中servlet的配置。
@WebServlet注解在应用程序启动时被web容器处理,
同期根据具体的属性配置将相应的类部署为Servlet

第三章 JSP技术基础 作业

2、JSP页面元素有哪些?各自的功能和作用是什么?

声明:声明变量和定义方法 小脚本:执行业务逻辑的java代码 表达式:用于在jsp页面输出表达式的值 指令:指定转换时向容器发出的指令
动作:向容器提供请求时的指令 El表达式:jsp2.0引进的表达式语言 注释:用于文档注释 模板文本:html标签和文本

3、JSP页面的生命周期以及执行过程?

页面转换、页面编译、加载和创建实例、调用jspInit()、调用_jspService()、调用jspDestroy()

4、小脚本中初始化和声明变量的顺序?

声明变量的顺序无关紧要,而小脚本中声明变量和初始化的顺序十分重要。

5、JSP页面有哪些隐含变量?举例描述各自的作用?

Application:引用web程序上下文
Session:引用用户会话
Request:引用页面当前的请求对象
Response:用来向客户发送一个响应
Out:引用页面输出流
Page:引用页面的servlet实例
Pagecontext:引用页面上下文
Config:引用servlet的配置对象
Exception用来处理错误

6、JSP页面有哪些作用域及作用范围?

应用作用域:应用程序被初始化后
会话作用域:同一会话的页面
页面作用域:当前页面内
请求作用域:同一请求的页面

7、JSP页面中静态包含和动态包含的区别?

静态包含是在jsp页面转换阶段将另一个文件的内容包含到当前jsp页面中。动态包含是在请求时将另一个页面的输出包含到主页面的输出中去。

8、JavaBeans规范?

定义javabeans类,需要遵循有关规定:
①javabeans应该是public类,且具有无参数的public构造方法。也可以定义带参数构造方法。
②类的成员变量一般称为属性(property)。对每个属性访问权限一般定义为private。注意:属性名必须以小写字母开头。

③每个属性通常定义两个public方法,
一个是访问方法(getter),一个是修改方法(setter),
使用他们访问和修改javabeans的属性值。
可以用Jsp标准动作<jsp:usebean
>创建jababeans类的一个实例,
>也可以在servlet中创建类的实例。Javabeans类的实例一般称为bean.
在jsp页面中使用
javabeans是通过三个jsp标准动作实现,
分别是:<jsp:useBean>动作、
<jsp:setProperty>动作、< jsp:getProperty >动作

9、描述MVC设计模式。
MVC模式又称为模型-视图-控制模式。该模式将web的组件分为模型、视图和控制器,每种组件完成各自的任务。该模型将业务逻辑和数据访问从表示层分离出来。实现MVC的一般步骤:①定义JavaBeans表示数据;②使用Servlet处理请求;③将结果存储在作用域对象中;④将请求转发到JSP页面;⑤最后在JSP页面中从JavaBeans中取出数据。

第四章 会话与文件管理 作业

2、什么是会话?

会话是客户与服务器之间的不间断的请求-响应序列。当客户向服务器发送第一个请求时就开始一个会话。对该客户之后的每个请求,服务器能够识别出请求来自于同一个客户。当客户明确结束会话或者服务器在一个预定义的时限内没从客户接收任何请求时,会话就结束了。当会话结束后,服务器就忘记了客户以及客户的请求

3、会话的管理机制?

(1)当客户向服务器发送第一个请求时,服务器就可以为该客户创建一个HttpSession会话对象,并将请求对象与该会话对象关联。服务器在创建会话对象时为其指定一个唯一标识符,称为会话ID,他可作为该客户的唯一标识。此时,该会话处于新建状态,可以使用HttpSession接口的isNew()来确定会话是否属于该状态。
(2)当服务器向客户发送响应时,服务器将该会话ID与响应数据一起发送给客户,这是通过Set-Cookie响应头实现的。
(3)客户在接收到响应后将会话ID存储在浏览器的 。当客户再次向服务器发送请求时,它使用Cookie请求头把会话ID与请求一起发送给服务器。
(4)服务器接收到请求后,从请求对象中取出会话ID,在服务器中查找之前创建的会话对象,找到后将该请求与之前创建的ID值相同的会话对象关联起来。

4、解读4.2 使用会话实现购物车运行过程(不要直接贴源码)?

1)首先获取到需要操作的商品类,并且实例一个对象
(2)先从session中取出之前保留的购物车,然后判断
(3)如果第一次操作,因为没有商品,所以需要重新创建
(4)然后购物车再添加本次操作的对象
(5)然后把新的列表添加进去

5、如何应用Cookie在客户端保存信息?

先使用Cookie类的构造方法创建一个Cookie对象,通过setXxx()设置各种属性,通过响应对象的addCookie(cookie)把Cookie添加到响应头中去

第五章 JDBC访问数据库 作业

2、JDBC连接数据库的步骤?

(1)加载驱动程序
(2)建立连接对象
(3)创建语句对象
(4)执行语句获得结果
(5)关闭建立的对象

3、如何配置局部数据源?

在web应用程序的META-INF目录中建立一个context.xml文件。

5、如何解决Eclipse插入Mysql数据库中文乱码问题?

在数据库名后加上 ?useUnicode=true&characterEncoding=UTF-8 或者?characterEncoding=utf-8。如:jdbc:mysql://localhost/login?characterEncoding=utf-8(login是数据库的名字,连接的数据库为MySQL)

6、“com.mysql.cj.jdbc.Driver”与“com.mysql.jdbc.Driver”JDBC驱动的区别?

前者是mysql-connector-java 6及以上中的,后者是mysql-connector-java 5中的。JDBC连接Mysql6 com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone=UTC和 使用SSL (useSSL=false)。

第六章 表达式语言 作业

2、EL运算符的优势?

1能够强制转化对象
2.对类型没有强制要求
3.使用简单;

3、EL访问作用域变量的顺序是什么?

pageScope->requestScope->sessionScope->applicationScope;

4、EL如何访问JavaBeans属性,如何访问集合元素?

用点运算符
即可访问JavaBean对象的属性,
如“${employee.empName}”;用[]即可访问集合元素,如”${arrays[i]}”;

5、EL的隐含变量有哪些?

1.PageContext:页面的上下文对象;
2.PageScope:页面内属性名称所对应的值;
3.RequestScope:取得Request范围内属性名称所对应的值;
4.sessionScope:取得Session范围内的属性名称所对应的值;
5.applicationScope:取得Application范围内的属性名称所对应的值;
6.cookie:HttpServletRequest.getCookies()的返回值。

第七章 表达式语言 作业

2、如何引用JSTL,JSTL通用目的的标签有哪些,以及如何使用?

使用taglib指令来引用标签库。
<c:out>:在页面中显示内容
<c:set>:定义或者设置一个作用域变量
<c:remove>:清除一个作用域变量
<c:catch>:捕获异常

3、详述和举例自定义标签的开发步骤(不要大量复制源码,而是概述思路)。

1.创建标签处理类:实现doTag()
2.创建标签库描述文件TLD
3、简述带属性的标签和带标签体标签的开发思路。

1.带属性的:
格式为:”<prefix:tagName attrib1 = ${expression}/>”;
并且带有属性的定义好private字符串常量属性名,
并且写好一个方法public void setUser(),
并且在.tld 文件中添加<attribute></attribute>标签;

2.带标签体的标签的:在jsp文件中,doTag()方法中,加入getJspBody().invoke(null),用于获取标签体的内容

第八章 Java Web高级应用 作业

2、详述HttpSession监听器监听请求事件的开发流程。

首先调用监听类RequestContextListener,可以直接配置在web.xml中,通过这个监听器,可以直接拿到Request上下文;这样就可以实现监听请求Request。

3、创建包含三个过滤器(firFilter、secFilter、thiFilter)的过滤器链,

firFilter、secFilter、thiFilter分别反馈客户端页面信息”This is the first filter!”、“This is the second filter!”、“This is the third filter!”。

第九章 Web安全性入门 作业

2、分别描述Basic和Form身份验证流程(尤其详述tomcat-users.xml和web.xml相关的配置)。
1.Basic:在tomcat的\conf目录下找到tomcat-users.xml文件,在其中增加;并在web,xml中写入语句,表示采用basic验证方式,并指出对于访问所在文件夹下的文件时,都需要获得角色的授权;
2.Form:首先建立一个需要输入用户名和密码的页面a.html,再建立一个出错时显示的页面error.html;然后在tomcat-users.html中设定用户账号,表示采用Form验证方式,并指出对于访问所在文件夹下的文件时,都需要获得角色的授权。

第十章 AJAX技术基础 作业

因主要涉及web前端,故无作业,考试不做要求。

第十一章 Struts 2框架基础 作业

2、描述Struts的开发框架组成。

1客户:即浏览器;
2.控制器:即Servlet;
3.逻辑控制:即动作Action;
4.模型:即应用状态,Application State;
5.视图:即JSP视图。

3、举例介绍Struts开发步骤以及需要进行哪些配置。

1.下载Struts2文件2.5.13;
2.将上述包放到项目WEB-INF->lib文件夹中;
3.在web.xml中添加一个过滤器;
4.创建一个struts.xml文件,放在JavaResource->src文件夹中;
5.创建一个action类,继承ActionSupport类;
6.Struts文件配置。

4、Struts如何使用配置文件实现用户输入校验?

1.首先创建一个需要校验的action,以登录输入校验为例,创建一个ValidateAction.java文件;
2.在相应的action层下面创建一个对应的XML文件,以类名+“-validation.xml”命名规则命名;
3.在该XML文件中,指定name为校验action类中的属性名;type设置为struts2中提供的校验组件的名字;设置各种输入元素的校验。

第十二章 Hibernate框架基础 作业

2、什么是数据持久、ORM、持久化对象?

数据持久:即将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称,其中数据模型可以是任何数据结构或者对象模型,存储模型可以是关系模型、XML、二进制流等。

ORM:Object/Relation Mapping对象关系映射;
持久化对象:持久化类的实例即称为持久化对象。

3、实现Hibernate应用要进行哪些配置?

1.在hibernate.cfg.xml文件中调整字符集为UTF-8,并将mysql的my.ini文件中写入语句“character-set-server=utf8”;

2.在mysql中创建两个实体,如:Student、User表;

3.定义持久化类,例如创建Student.java文件;

4.在持久化类(如Student.java)的同一级目录下定义一个映射文件,
Student.hbm.xml;

5.编写测试程序MainApp.java。

4、Hibernate应用的运行过程?

1.应用程序先调用Configuration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactory对象;
2.然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象。可通过Session对象的get(), load(), save()等操作持久化对象PO;
3.如果没有异常,Transaction对象将提交这些操作结果到数据库。

附录:附上Java轻量级编程框架技术课后问题习题:

Spring IoC的基本概念
控制反转Ioc是一个抽象的概念,是用来消减计算机程序的耦合问题。
依赖注入(Dependency Injection DI)是IoC的另一种说法,是从不同的角度描述相同的概念。

  • 控制反转:对象的实例不用调用者来创建,由Spring容器来创建,由Spring容器负责控制程序之间的关系,而不是由调用者直接控制。这样控制器由调用者转移到Spring容器,控制器发生了反转。这就是控制反转。
  • 依赖注入:Spring容器负责将依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入。

Bean的实例化有哪几种常见的方法?

答:构造方法实例、静态工厂实例、实例工厂实例化

简述基于注解的装配方式的基本用法。

答:创建带注解的Bean实例。然后配置注解,指定扫描包路径:<context:component-scan base-package=“Bean所在包路径” />最后测试Bean实例。

@Autowird和@Resource有什么区别?

答:

@Autowird和@Resource功能相似,都可以实现对类成员变量、方法及构造方法进行标注,完成自动装配。
@Autowired默认按照Bean的类型进行装配,如果想按照名称装配,需要和@Qualifier注解一起使用。效果等同于@Resource
@Resource注解按照名称来装载注入

. AOP(Aspect-Oriented Programming)的基本概念

AOP即面向切面编程,与OOP相辅相成。
在OOP中以类作为程序的基本单元。
在AOP中以Aspect(切面)作为基本单元。
AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,在程序编译或运行阶段将抽取的代码应用在需要执行的地方。

Spring的事务管理’

基于底层API的编程式事务管理
基于底层API的编程式事务管理就是根据:

- PlatformTransactionManager
- TransactionDefinition
- TransactionStatus

什么是编程式事务管理?

在代码中显示调用与事务处理相关的方法,这就是编程式事务管理。当只要少数事务操作时,编程式事务管理才比较合适。

什么是声明式事务管理?

Spring的声明式事务管理是通过AOP技术实现的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完目标方法之后根据情况提交或回滚事务。

Spring MVC的Controller

 RequestMapping注解类型
在RequestMapping注解语句中,
注解的value属性将请求的URI映射到方法
,value属性是RequestMapping注解的默认属性,
如果只有一个value属性,可省略该属性。
@RequestMapping注解有以下两个类型:
  • 方法级别注解
    类级别注解
    在类级别注解的情况下,控制器类的所有方法都被映射为类级别的请求

拦截器

拦截器的定义
定义拦截器有两种方法:

实现HandlerInterceptor接口或继承HandlerInterceptor接口的实现类
实现WebRequestInterceptor或继承WebRequestInterceptor接口的实现类
HandlerInterceptor接口定义的3个方法:

preHandle:控制器处理请求方法前执行。返回true:向下执行,返回false:中断后续操作
postHandle:控制器的处理请求方法调用之后,解析视图之前执行。通过此方法对请求域中的模型和视图进一步修改
afterCompletion:在视图渲染结束后执行,实现资源清理、记录日志等功能

文件的上传和下载

  1. 文件上传
    文件上传需要将表单的enctype配置为multipart/form-data,请求方法设置为post,使用标签上传文件。

springBoot是干嘛的? 如何实现数据库操作的,整合了JDBC?

Spring Boot 是一个用于快速构建基于 Spring 框架的应用程序的开发框架。它通过提供开箱即用的功能和约定,简化了 Spring 应用程序的配置和部署过程,使开发者能够更专注于业务逻辑的实现。

在 Spring Boot 中,实现数据库操作可以通过整合 JDBC 来实现。JDBC(Java Database Connectivity)是 Java 提供的标准接口,用于与关系型数据库进行交互。Spring Boot 提供了对 JDBC 的自动配置和集成,使得数据库操作变得更加简单和方便。

首先,在 Spring Boot 的配置文件(如 application.properties 或 application.yml)中,可以配置数据库连接的相关信息,包括数据库的 URL、用户名、密码等。这些配置项会被 Spring Boot 自动加载,并创建一个数据源(DataSource)对象,用于管理数据库连接。

接下来,在代码中可以使用 Spring 提供的 JdbcTemplate 或 NamedParameterJdbcTemplate 来执行数据库操作。JdbcTemplate 是 Spring 提供的一个简化了 JDBC 操作的模板类,它封装了连接的获取、释放,以及异常的处理等操作。

使用 JdbcTemplate,可以通过调用其方法来执行 SQL 语句,如查询单个结果、查询多个结果、执行更新操作等。例如,可以使用 jdbcTemplate.queryForObject() 方法查询单个结果,使用 jdbcTemplate.query() 方法查询多个结果集,使用 jdbcTemplate.update() 方法执行更新操作等。

除了 JdbcTemplate,Spring Boot 还支持使用 ORM(对象关系映射)框架,如 Hibernate、MyBatis 等。这些框架可以进一步简化数据库操作,通过对象和映射配置来实现与数据库的交互。

在整合 JDBC 和数据库操作时,Spring Boot 会根据配置文件中的数据库连接信息自动创建数据源,并将其注入到需要使用数据库的组件中。开发者可以通过依赖注入的方式获取数据源,然后使用 JdbcTemplate 或其他 ORM 框架来执行数据库操作。

总而言之,Spring Boot 简化了基于 Spring 的应用程序的开发和部署过程,并通过整合 JDBC 和其他 ORM 框架来实现与关系型数据库的交互。开发者只需配置数据库连接信息,并使用提供的模板类或框架来执行数据库操作,从而更便捷地实现数据库操作。

将使用代码示例来解释如何在 Spring Boot 中实现数据库操作。

首先,我们需要在配置文件中配置数据库连接信息。假设我们使用的是 MySQL 数据库,可以在 application.properties 文件中添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

接下来,我们创建一个简单的实体类 User,表示用户信息:

public class User {
    private Long id;
    private String name;
    private String email;
 
    // 省略构造函数、getter 和 setter 方法
}

然后,我们创建一个 UserRepository 接口,用于定义数据库操作的方法:

public interface UserRepository {
    User findById(Long id);
    List<User> findAll();
    void save(User user);
    void update(User user);
    void delete(Long id);
}

接下来,我们使用 JdbcTemplate 来实现这个接口:

@Repository
public class JdbcUserRepository implements UserRepository {
    private final JdbcTemplate jdbcTemplate;
 
    @Autowired
    public JdbcUserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
 
    @Override
    public User findById(Long id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
    }
 
    @Override
    public List<User> findAll() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.query(sql, new UserRowMapper());
    }
 
    @Override
    public void save(User user) {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getEmail());
    }
 
    @Override
    public void update(User user) {
        String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
        jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
    }
 
    @Override
    public void delete(Long id) {
        String sql = "DELETE FROM users WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }
}

在上述代码中,我们使用了 jdbcTemplate.query()jdbcTemplate.update() 方法来执行 SQL 查询和更新操作。同时,我们还定义了一个 UserRowMapper 类,用于将查询结果映射到 User 对象。

最后,我们可以在业务逻辑中使用 UserRepository 接口进行数据库操作:

@Service
public class UserService {
    private final UserRepository userRepository;
 
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
 
    public User getUserById(Long id) {
        return userRepository.findById(id);
    }
 
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
 
    public void createUser(User user) {
        userRepository.save(user);
    }
 
    public void updateUser(User user) {
        userRepository.update(user);
    }
 
    public void deleteUser(Long id) {
        userRepository.delete(id);
    }
}

以上代码示例展示了如何在 Spring Boot 中使用 JdbcTemplate 实现数据库操作。通过配置数据库连接信息,创建相应的接口和实现类,并使用 JdbcTemplate 执行 SQL 语句,我们可以方便地进行数据库操作。

下面整合第一版java编程框架技术-期末复习 综合复习(11.23版本整合期末复习)

轻量级 JavaWeb 开发组合框架有哪些?⭐

答:轻量级 Java Web 开发框架通常注重简洁、高效和易于使用,适合快速开发中小型应用。以下是一些常见的轻量级 Java Web 开发组合框架: 老师主要讲了三种比较常见的整合开发的框架:

  1. Spring Boot + Thymeleaf, 引擎模板来实现简单的案例,比如商品信息的修改还有员工信息表的增删改查,就是通过前端模板引擎调用接口控制层的接口实现的。不仅如此springboot应用的的初始搭建和开发过程,还内置了Tomcat服务器方便快捷。
  2. springboot+jsp; 虽然现在jsp不常用甚至快被淘汰了,但是传统的jsp页面和java’web开发技术适合熟悉的jsp开发者。
  3. Spring Boot + Thymeleaf + MyBatis 三者整合的页面也有相应的案例。
  4. 剩下的像模板引擎加JPA/Hibernate, springboot加模板引擎加JPA,MongDb都没有讲到。

在 Maven 环境中配置本地仓库,则应在 maven 安装路径下 conf 文件夹中的 Settings.xml 文件中添加哪些标签来设置本地仓库和中央仓库。⭐⭐

答:这是老师第一节课讲的内容:就是需要在Maven环境下配置的,这个很简单,咱们本地仓库有一个setting.xml的文件,在这个文件中添加相关标签:

<settings>
  <!-- 配置本地仓库路径 -->
  <localRepository>/E:/repository</localRepository>
</settings>

这里的路径就是本地仓库路径,idea中默然加载的就是这个路径的,也可以指定本地仓库的路径。你可以将路径设置为任何你希望的位置。一般老师出题不会问这么细大致了解一下即可。

除此之外还要配置中央仓库:

<settings>
  <!-- 配置中央仓库 -->
  <mirrors>
    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <url>https://repo.maven.apache.org/maven2</url>
    </mirror>
  </mirrors>
</settings>
<mirrors>:定义镜像仓库。

<mirror>:定义一个镜像仓库。

<id>:镜像仓库的唯一标识。

<mirrorOf>:指定要镜像的仓库。central 表示中央仓库。

<url>:镜像仓库的 URL。

maven环境下的创建的项目可以选择那些模板?⭐⭐

IntelliJ IDEA 环境中创建的 Maven 项目的流程,特别是原型模板选择 Java 项目:org.apache.maven.archetypes:maven-archetype-quickstart JavaWeb 项目:org.apache.maven.archetypes:maven-archetype-webapp 多模块项目父模块:org.apache.maven.archetypes:maven-archetype-site-simple 以上三类原型模板的项目分别默认的打包方式(jar, war,)
咱们用的最多的模板就是quickstart-是java项目

JSP 页面代码是那两种代码组成??⭐

答:其实JSP页面是由两种代码组成的;分别是静态内容动态内容;静态内容就是咱们耳熟能详的HTMLCSSjs三剑客了;页面加载的时候不会变化,属于静态的;而动态内容通常是嵌入在JSP页面中的JAVA代码,根据请求参数、数据库查询结果等动态生成内容。

一个简单的实例,没时间的同学不用看直接跳过:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>JSP 页面示例</title>
</head>
<body>
    <h1>欢迎来到 JSP 页面</h1>
    <%-- 动态内容 --%>
    <%
        String name = request.getParameter("name");
        if (name == null) {
            name = "Guest";
        }
    %>
    <p>你好, <%= name %>!</p>
</body>
</html>

一句话:静态内容:HTML 结构和样式。
动态内容:嵌入的 Java 代码,根据请求参数动态生成内容。

常用 lombok 注解及其功能(Set 方法,Get 方法,无参构造方法和全参构造方法)

答: 这个其实需要我们在pom.xml 全局配置文件中加载lombock的依赖,还需要在idea中的setting选项下的plugin
下配置相关插件,一个🌶辣椒的插件;他的@Getter@Setter lombock注解专属的两个注解,他自动生成相对应的set和get方法对属性进行封装对外提供接口用于调用内部的属性修改等…还有@NoArgsConstructor自动生成无参构造,还有@AllArgsConstructor自动生成全参构造。如果说这些注解都不想用直接用暴力的,@Data注解自动生成全部的set,get,无参有参构造的全部方法。

Spring部分的考点⭐⭐⭐

Spring 基本用法需要添加的基础依赖

答:这哥们的一个核心的依赖就是Spring Core,这哥们提供了spring框架的核心功能,Core这个单词的意思就是核心的意思,这个依赖还包括依赖注入(DI) 和控制反转(IOC)
要说具体代码的话就是pom文件的那个

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.10</version>
</dependency>

还有一个兄弟依赖 Spring Context功能提供Spring应用上下文,支持Bean的配置和管理;

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.10</version>
</dependency>

还有一个特别重要的:Spring Beans 这哥们是提供 Spring Bean 的定义和管理功能。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.3.10</version>
</dependency>

以上是 Spring 基本用法中常用的基础依赖。根据项目需求,可以选择性地添加这些依赖。通常情况下,spring-core、spring-context 和 spring-beans 是必须的,其他依赖根据具体功能需求添加。 当然还有很多,像:Spring AOPSpring Web等等 ,考试不会考这么多,有兴趣了解即可。

Spring 基本用法(参照课堂实验 3) (1)依赖注入:ApplicationContext.xml 实现依赖注入 设值注入(类中要有 Setter 方法) 构造注入(类中要有带参数的构造方法)

答:说白了这个设值注入就是通过类的Setter方法将依赖注入到对象中;比如在业务逻辑处理层UserService类中有一个setUserDao的方法,和一个saveUser()方法,然后userdao类有一个save的方法;ApplicationContext.xml应用上下文的这个xml文件就可以用

<bean id="userDao" class="com.example.UserDao"/>

    <!-- 配置 UserService Bean,并使用设值注入 -->
    <bean id="userService" class="com.example.UserService">
        <property name="userDao" ref="userDao"/>

紧接着用创建一个Main类通过ClassPathXmlApplicationContext这个对象把配置文件xml传进来,返回一个context直接调用getbean方法,把业务逻辑处理层的userService类传进来,调用saveUser方法;这个地方有点绕,贼坑;

  • 第二种就是构造注入了;这哥们其实就是通过类的构造方法将依赖注入到对象中;
<!-- 配置 UserDao Bean -->
    <bean id="userDao" class="com.example.UserDao"/>

    <!-- 配置 UserService Bean,并使用构造注入 -->
    <bean id="userService" class="com.example.UserService">
        <constructor-arg ref="userDao"/>
 <constructor-arg ref="userDao"/>  是构造注入的核心

一句话:
设值注入:通过类的 Setter 方法将依赖注入到对象中。
构造注入:通过类的构造方法将依赖注入到对象中。

(2)控制反转:在主类测试类中,创建控制反转容器,获取 bean 实例,实现 bean 实例 具有的功能。(重点理解标红的代码)⭐⭐

答: 控制反转这个哥们就是Spring 框架的核心概念之一,它将对象的创建和管理交给 Spring 容器,而不是由开发者手动创建和管理。通过控制反转,开发者可以专注于业务逻辑,而不必关心对象的创建和依赖管理。这么长考试不用背下来,写关键代码就好了:

比如如果考试出了要知道, 举个例子:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        // 创建控制反转容器,加载 Spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");

        // 获取 UserService Bean 实例
        UserService userService = context.getBean("userService", UserService.class);

        // 调用 UserService 的功能方法
        userService.saveUser();
    }
}

把实例的Bean 这一行代码去掉填空:

// 获取 UserService Bean 实例
        UserService userService = context.getBean("userService", UserService.class);

        // 调用 UserService 的功能方法
        userService.saveUser();

这两句是关键代码,就是直接用userService 直接调用他的saveUser方法;
UserService.java的代码:

public class UserService {
    public void saveUser() {
        System.out.println("User saved!");
    }
}

ApplicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置 UserService Bean -->
    <bean id="userService" class="com.example.UserService"/>
</beans>

3. AOP (1)AOP 基本概念(切面 连接点 增强处理 代理对象) (2)基于代理类的 AOP 实现(重点代理 Bean 元素的声明)⭐⭐⭐

一句话:

AOP 基本概念:切面、连接点、增强处理、切入点、代理对象。
基于代理类的 AOP 实现:定义目标类、切面类,配置 Spring 容器,启用 AOP 自动代理。

考填空题的话就是考AOP的基本概念:

  1. 切面(Aspect):横切关注点的模块化,包含增强处理和切入点。
    2. 连接点(Join Point):程序执行过程中的一个点,如方法调用。
  2. 增强处理(Advice):在特定连接点执行的代码,如前置、后置、环绕等。
    4. 切入点(Pointcut):连接点的集合,定义哪些连接点应用增强处理。
  3. 代理对象(Proxy Object):目标对象的代理,用于执行增强处理。
<!-- 配置目标类 bean -->
 <bean id="myTestDao" class=" spring.demo.dao.impl.TestDaoImpl"/>
 <!-- 配置切面类 bean -->
  <bean id="myAspect" class="spring.demo.interceptor.MyAspect" /> <!-- 使用 Spring 代理工厂定义一个名为 testDaoProxy 的代理 --> 
  <bean id="testDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <!-- 指定代理实现的接口-->
   <property name="proxyInterfaces" value=" spring.demo.dao.TestDao" /> 
   <!-- 指定目标对象 --> 
   <property name="target" ref="myTestDao" /> 
   <!-- 指定切面,织入环绕通知-->
    <property name="interceptorNames" value="myAspect"/> <!-- 指定代理方式,true 指定 CGLIB 动态代理,false 指定 JDK 动态代理 --> 
    <property name="proxyTargetClass" value="true"/> </bean>

重点理解

<property name="proxyInterfaces" value=" spring.demo.dao.TestDao" />

<property name="target" ref="myTestDao" />

考试就考这两句,换一下模子;

举个更简单的例子:
定义一个UserService的类,有一个saveUser方法

public class UserService {
    public void saveUser() {
        System.out.println("User saved!");
    }
}

定义切面类:LoggingAspect有一个logBefore方法

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class LoggingAspect {
    @Before("execution(* com.example.UserService.saveUser(..))")
    public void logBefore() {
        System.out.println("Before saving user...");
    }
}

然后配置 Spring 容器ApplicationContext.xml配置beanAOP代理

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 配置 UserService Bean -->
    <bean id="userService" class="com.example.UserService"/>

    <!-- 配置 LoggingAspect Bean -->
    <bean id="loggingAspect" class="com.example.LoggingAspect"/>

    <!-- 启用 AOP 自动代理 -->
    <aop:aspectj-autoproxy/>
</beans>

最后直接在Main测试类中调用userServiesaveUser方法

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.saveUser();
    }
}

C、SpringBoot 部分 (重中之重)⭐⭐⭐⭐⭐

  1. Spring Boot 提供的实现对 RESTful 接口的支持的常用注解及其功能

@Controller:这哥们是标识一个类位控制类,用于处理HTTP请求。
@RequestBody:将HTTP请求体中的数据绑定到方法参数。
@ResponseBody:将方法返回值作为 HTTP 响应体返回。
@RestController:组合 @Controller @ResponseBody,用于构建 RESTful Web 服务。就是可以这么理解。
@RequestMapping:映射 HTTP 请求到控制器方法,支持路径、请求方法、请求参数等配置。

2. 接口数据校验中定义实体(Bean)类,配置校验规则使用的常用注解⭐⭐⭐⭐

@NotNull:验证属性值不能为空。

@NotEmpty:验证集合、字符串或数组不能为空。

@NotBlank:验证字符串不能为空且不能只包含空白字符。

@Min@Max:验证数值的最小值和最大值。

@Size:验证集合、字符串或数组的大小范围。

@Past@Future:验证日期是否在过去或未来。

举个例子 更直观一点,请看代码!:

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {
    @NotNull(message = "ID 不能为空")
    private Long id;

    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度必须在 3 到 20 之间")
    private String username;

    @Min(value = 18, message = "年龄必须大于等于 18")
    private int age;

    // Getter 和 Setter 方法
}

文件上传(重点单文件上传)⭐⭐⭐⭐

enctype="multipart/form-data"

这句代码必考!

接口控制层:实现文件上传方法的参数类型

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "文件为空";
        }

        // 获取上传文件的原始文件名
        String originalFilename = file.getOriginalFilename();

        // 保存文件到服务器
        try {
            file.transferTo(new File("/path/to/save/" + originalFilename));
            return "文件上传成功";
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
}
 String originalFilename = file.getOriginalFilename();

这句代码必考;

定时任务设置使用的 @Scheduled 注解中的 cron 表达式表示规则⭐⭐⭐⭐

答:在 Spring Boot 中,@Scheduled 注解用于配置定时任务。cron 表达式是一种强大的时间表达式,用于指定定时任务的执行时间。以下是 cron 表达式的详细规则:

cron 表达式格式
cron 表达式由 6 或 7 个字段组成,每个字段之间用空格分隔:

秒 分 时 日 月 周 [年]

  • 秒(0-59)
  • 分(0-59)
  • 时(0-23)
  • 日(1-31)
  • 月(1-12 或 JAN-DEC)
  • 周(1-7 或 SUN-SAT)
  • 年(可选,1970-2099)

*表示所有可能的值。例如,* 在分字段表示每分钟。

,表示枚举值。例如,1,3,5 在秒字段表示第 1、3、5 秒。

-表示范围。例如,1-5 在秒字段表示第 1 到 5 秒。

/表示增量。例如,0/15 在秒字段表示从第 0 秒开始,每 15 秒一次。

?表示无特定值,用于日和周字段,避免冲突。

L表示最后,用于日和周字段。例如,L 在日字段表示当月的最后一天。

W表示工作日,用于日字段。例如,15W 表示离 15 号最近的工作日。

#表示第几周的第几天,用于周字段。例如,6#3 表示第 3 个周五。

示例:
每分钟执行一次:

0 * * * * *

每小时的第 15 分钟执行一次:

0 15 * * * *

每天的 10:15 执行一次:

0 15 10 * * *

每周一的 10:15 执行一次:

0 15 10 ? * MON

每月的最后一天的 23:59 执行一次:

0 59 23 L * ?

每月的第 1 个工作日的 9:00 执行一次:

0 0 9 1W * ?

举一个实例:使用 @Scheduled 注解配置定时任务:
定义一个方法,添加注解0 15 10 * * ? 表示每天上午 10:15 执行一次定时任务。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduledTask {

    @Scheduled(cron = "0 15 10 * * ?")
    public void doTask() {
        System.out.println("定时任务执行...表示每天上午 10:15 执行一次定时任务。");
    }
}

SpringBoot+MyBatista 框架整合部分(参照最后课堂实验 8+最后大作业) ⭐⭐⭐⭐⭐⭐

答:这部分的分值占百分之60%

主要就是dao-service-controller 三层架构搞清楚了这里问题不大:
还有sql语句要熟练

举一个最简单的代码示例完整结束这一个大问题:

新建一个Entity包下的实体类User,实体类属性名与数据库中的数据表名和字段名对应。

User.java

public class User {
    private Long id;
    private String username;
    private String password;

    // Getter 和 Setter 方法
}

Mapper 层:UserMapper.xml 及其接口

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (username, password) VALUES (#{username}, #{password})
    </insert>

    <select id="selectUserById" parameterType="long" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
    </update>
</mapper>

UserMapper.java

import org.apache.ibatis.annotations.Mapper;
import com.example.entity.User;

@Mapper
public interface UserMapper {
    void insertUser(User user);
    User selectUserById(Long id);
    void updateUser(User user);
}

Service 层:接口及其接口实现类如何向映射层转发指令

public interface UserService {
    void saveUser(User user);
    User getUserById(Long id);
    void updateUser(User user);
}

UserServiceImpl.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.entity.User;
import com.example.mapper.UserMapper;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public void saveUser(User user) {
        userMapper.insertUser(user);
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.selectUserById(id);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateUser(user);
    }
}

Controller 层
UserController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.entity.User;
import com.example.service.UserService;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping
    public String saveUser(@RequestBody User user) {
        userService.saveUser(user);
        return "用于信息保存成功";
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PutMapping
    public String updateUser(@RequestBody User user) {
        userService.updateUser(user);
        return "用于信息更新成功!";
    }
}

模板文件的编辑文件
前端的user.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Username</th>
                <th>Password</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="user : ${users}">
                <td th:text="${user.id}"></td>
                <td th:text="${user.username}"></td>
                <td th:text="${user.password}"></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

注意这里的<tr th:each="user : ${users}"> 中的 user 和 ${users}

${users}
含义:${users} 是一个 Thymeleaf 表达式,用于从模型(Model)中获取名为 users 的属性值。

类型:users 通常是一个集合(如 List、Set 等),包含多个对象(如 User 对象)。

示例:假设在控制器中,你将一个 List<User> 对象添加到模型中,并命名为 users。
@GetMapping("/users")
public String getUsers(Model model) {
    List<User> users = userService.getAllUsers();
    model.addAttribute("users", users);
    return "user";
}

th:each 属性
含义:th:each 是 Thymeleaf 的一个迭代属性,用于遍历集合中的每个元素。

语法:th:each="item : c o l l e c t i o n " ,其中 i t e m 是迭代变量, {collection}",其中 item 是迭代变量, collection",其中item是迭代变量,{collection} 是要遍历的集合。

作用:遍历集合中的每个元素,并将每个元素绑定到 item 变量上。

  1. user
    含义:user 是迭代变量,表示集合中的每个元素。

类型:user 的类型与集合中元素的类型相同(如 User 对象)。

作用:在每次迭代中,user 变量将引用集合中的一个元素,可以在模板中使用该变量来访问元素的属性。

<tbody>
            <!-- 遍历 users 集合,将每个 user 对象绑定到 user 变量 -->
            <tr th:each="user : ${users}">
                <td th:text="${user.id}"></td>
                <td th:text="${user.username}"></td>
                <td th:text="${user.password}"></td>
            </tr>
        </tbody>

最后的最后就是配置文件了application.properties

# 数据源设置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 映射文件所在位置
mybatis.mapper-locations=classpath:mapper/*.xml

# 实体类所在的包设置
mybatis.type-aliases-package=com.example.entity

总结

  • Entity 层:实体类属性名与数据库字段名对应。

    Mapper 层:XML 映射文件和接口,实现插入、查询、修改等数据库操作。

    Service 层:接口和实现类,向映射层转发指令。

    Controller 层:处理 HTTP 请求,调用服务层方法,返回页面或数据。

    模板文件:Thymeleaf 模板,展示数据。

    配置文件:配置数据源、映射文件位置、实体类包等。

人类学会走路,也得学会摔跤,而且只有经过摔跤他才能学会走路。——马克思

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

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

相关文章

如何安全删除 Linux 用户帐户和主目录 ?

Linux 以其健壮性和灵活性而闻名&#xff0c;是全球服务器和桌面的首选。管理用户帐户是系统管理的一个基本方面&#xff0c;包括创建、修改和删除用户帐户及其相关数据。本指南全面概述了如何在 Linux 中安全地删除用户帐户及其主目录&#xff0c;以确保系统的安全性和完整性。…

如何利用ros搭建虚拟场景通过仿真机器人完成一次简单的SLAM建图、导航规划(超简单)?——学习来源:机器人工匠阿杰

一&#xff1a;什么是SLAM&#xff0c;SLAM和导航规划又有什么关系&#xff1f; SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;即同时定位与建图&#xff09;是一种在未知或动态环境中自行驶的重要技术。主要通过设备上的传感器&#xff08;如激光雷达、…

shell脚本(完结)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shell编程&#xff08;完结&#xff09;_哔哩哔哩_bilibili 本文主要讲解不同shell脚本中的相互调用以及输入输出重定向操作。 一、不同脚本之间…

禁用达梦DEM的agent

agent占用内存较多&#xff0c;实际没什么使用&#xff0c;考虑停止agent 应该切换到root执行停止 cd /dm/dmdbms/tool/dmagent/service/ ./DmAgentService stop禁用

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中&#xff0c;用户需求规格说明书&#xff08;User Requirement Specification, URS&#xff09;是团队沟通与项目成功的基石。然而&#xff0c;面对复杂多变的需求&#xff0c;如何快速生成清晰、完整且具备说服力的文档&#xff1f;这正是AI工具的用武之地…

产品研发管理和研发项目管理的区别是什么

产品研发管理与研发项目管理有显著的区别&#xff0c;主要体现在管理范围、目标导向和执行方法上。产品研发管理侧重于产品生命周期的规划与执行&#xff0c;强调产品的创新性和市场需求对接&#xff0c;而研发项目管理则更注重具体项目的执行过程&#xff0c;聚焦项目时间、成…

摆烂仙君传——深度学习秘境奇缘

第一章&#xff1a;深度学习秘境 在修仙界与科技交织的边缘&#xff0c;八荒六合九天无上摆烂仙君在其高科技修炼室中感应到一股神秘的召唤。这股力量似乎与他的灵魂产生了共鸣&#xff0c;引导他前往传说中的深度学习秘境。在那里&#xff0c;古老的仙法与前沿的算法交织&…

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装&#xff0c;这里用单个文件举例。 在文件工程目录下&#xff0c;自建一个文件夹&#xff0c;里面放上需要封装的verilog文件。 选择第三个&#xff0c;指定路径封装&#xff0c;找到文件所在目录 取个名&#xff0c;选择封装IP的路径 会…

【CS61A 2024秋】Python入门课,全过程记录P2(Week3开始,更新中2024/11/24)

文章目录 关于基本介绍&#x1f44b;Week 3Mon Environments阅读材料Lab 02: Higher-Order Functions, Lambda ExpressionsQ1: WWPD: The Truth Will PrevailQ2: WWPD: Higher-Order FunctionsQ3: WWPD: Lambda 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。…

在Linux下配置gitee与Github的远程仓库

目录 前言 云服务器下载git 检测是否下载成功git Linux下配置gitee远程仓库 代码提交演示 git三板斧 Linux下配置Github远程仓库 最后的提醒 前言 那么本篇文章将是在&#xff0c;你已经创建了本地仓库的基础上&#xff0c;在Linux下配置gitee的远程仓库的步骤&#xff…

Mac配置maven环境及在IDEA中配置Maven

Mac配置maven环境及在IDEA中配置Maven 1. 介绍 Maven是一款广泛用于Java等JVM语言项目的工具&#xff0c;它以项目对象模型&#xff08;POM&#xff09;为基础进行项目管理&#xff0c;通过POM文件来定义项目信息和依赖关系。同时&#xff0c;它也是构建自动化工具&#xff0…

硬中断关闭后的堆栈抓取方法

一、背景 性能和稳定性是一个计算机工程里的一个永恒的主题。其中尤其稳定性这块的问题发现和问题分析及问题解决就依赖合适的对系统的观测的手段&#xff0c;帮助我们发现问题&#xff0c;识别问题原因最后才能解决问题。稳定性问题里尤其底层问题里&#xff0c;除了panic问题…

STL关联式容器之hashtable

hashtable的桶子与节点 下图为开链法(separate chaining)完成hashtable的图形表述。为了剖析SGI STL源码&#xff0c;我们遵循SGI的命名&#xff0c;称hash table表格内的元素为桶(bucket),此名称的大约意义是&#xff0c;表格内的每个单元&#xff0c;涵盖的不只是个节点(元素…

基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模

引言 研究背景及意义 上世纪初开始&#xff0c;中国电影就以自己独有的姿态登上了世界电影史的舞台。中国电影作为国家文化和思想观念的反映与延伸&#xff0c;能够增强文化自信&#xff0c;在文化输出方面有着极其重要的作用1[1]。 改革开放以来&#xff0c;随着生产力的提高…

阿里云oss转发上线-实现不出网钓鱼

本地实现阿里云oss转发上线&#xff0c;全部代码在文末&#xff0c;代码存在冗余 实战环境 被钓鱼机器不出网只可访问内部网络包含集团oss 实战思路 若将我们的shellcode文件上传到集团oss上仍无法上线&#xff0c;那么就利用oss做中转使用本地转发进行上线&#xff0c;先发送…

预测未来 | MATLAB实现Transformer时间序列预测未来

预测未来 | MATLAB实现Transformer时间序列预测未来 预测效果 基本介绍 1.Matlab实现Transformer时间序列预测未来&#xff1b; 2.运行环境Matlab2023b及以上&#xff0c;data为数据集&#xff0c;单变量时间序列预测&#xff1b; 3.递归预测未来数据&#xff0c;可以控制预…

局域网与广域网:探索网络的规模与奥秘(3/10)

一、局域网的特点 局域网覆盖有限的地理范围&#xff0c;通常在几公里以内&#xff0c;具有实现资源共享、服务共享、维护简单、组网开销低等特点&#xff0c;主要传输介质为双绞线&#xff0c;并使用少量的光纤。 局域网一般是方圆几千米以内的区域网络&#xff0c;其特点丰富…

可视化建模与UML《协作图实验报告》

有些鸟儿毕竟是关不住的。 一、实验目的&#xff1a; 1、熟悉协作图的构件事物。 2、掌握协作图的绘制方法。 二、实验环境&#xff1a; window7 | 10 | 11 EA15 三、实验内容&#xff1a; 下面列出了打印文件时的工作流&#xff1a; 用户通过计算机指定要打印的文件。(2)打…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库&#xff1f; 因为在国内&#xff0c;访问&#xff1a;https://hub.docker.com/ 会出现无法访问页面。。。。&#xff08;已经使用了魔法&#xff09; 当然现在也有一些国内的镜像管理网站&#xff0c;比如网易云镜像服务、Dao…

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…