Spring MVC 深度剖析:优势与劣势全面解读
文章目录
- Spring MVC 优势
- 1. **松耦合**
- 2. **易于测试**
- 3. **灵活性**
- 4. **强大的配置机制**
- 5. **异常处理**
- 6. **国际化支持**
- 7. **数据验证**
- 8. **安全性**
- 9. **性能优化**
- Spring MVC 劣势
- 1. **学习曲线**
- 2. **配置复杂性**
- 3. **性能开销**
- 4. **视图技术限制**
- 5. **社区和支持**
Spring MVC 优势
1. 松耦合
-
依赖注入(DI):
- 自动装配:Spring 容器通过
@Autowired
注解自动装配依赖,减少了手动创建对象的代码量,提高了代码的可维护性和可测试性。 - 接口编程:鼓励使用接口编程,使得组件之间的依赖关系更加灵活和可替换,增强了模块化设计。
- 生命周期管理:Spring 容器管理 bean 的生命周期,包括初始化、销毁等,确保了资源的有效管理和释放。
- 自动装配:Spring 容器通过
-
示例代码:
@Service public class UserService {@Autowiredprivate UserRepository userRepository;public User getUserById(Long id) {return userRepository.findById(id).orElse(null);} }@Controller public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users/{id}")public String getUser(@PathVariable Long id, Model model) {User user = userService.getUserById(id);model.addAttribute("user", user);return "user";} }
2. 易于测试
-
单元测试:
- MockMvc:Spring 提供了
MockMvc
类,用于模拟 HTTP 请求和响应,方便进行控制器的单元测试。 - Spring TestContext Framework:提供了丰富的测试支持,包括事务管理、数据库初始化等,使得测试更加高效和全面。
- MockMvc:Spring 提供了
-
示例代码:
@RunWith(SpringRunner.class) @WebMvcTest(UserController.class) public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@MockBeanprivate UserService userService;@Testpublic void testGetUser() throws Exception {User user = new User(1L, "John Doe", "john@example.com");when(userService.getUserById(1L)).thenReturn(user);mockMvc.perform(get("/users/1")).andExpect(status().isOk()).andExpect(view().name("user")).andExpect(model().attribute("user", user));} }
3. 灵活性
-
视图技术多样:
- JSP:传统的视图技术,适合简单的 Web 应用。
- Thymeleaf:现代的模板引擎,支持静态原型和动态内容的混合,提供了丰富的表达式语言。
- FreeMarker:功能强大的模板引擎,适合复杂的页面生成,提供了灵活的模板语法。
-
配置方式多样:
- 注解配置:使用注解(如
@Controller
、@RequestMapping
)进行配置,简洁易懂,减少了 XML 配置文件的冗余。 - XML 配置:对于复杂的配置需求,可以使用 XML 配置文件进行详细设置,提供了更多的灵活性。
- 注解配置:使用注解(如
4. 强大的配置机制
-
注解驱动:
- @Controller:标记控制器类,使其被 Spring 容器管理。
- @RequestMapping:指定请求映射规则,支持路径、方法、参数等多种匹配方式。
- @GetMapping、@PostMapping:简化常见的 HTTP 方法映射,提高了代码的可读性。
-
XML 配置:
- 扫描组件:使用
<context:component-scan>
扫描指定包下的组件,自动注册到 Spring 容器。 - 启用 MVC 注解驱动:使用
<mvc:annotation-driven>
启用 MVC 注解支持,简化配置。 - 视图解析器:配置视图解析器,如
InternalResourceViewResolver
,将逻辑视图名称解析为具体的视图对象。
- 扫描组件:使用
-
示例代码:
@Configuration @ComponentScan(basePackages = "com.example") @EnableWebMvc public class WebConfig implements WebMvcConfigurer {@Beanpublic InternalResourceViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;} }
5. 异常处理
-
全局异常处理:
- @ControllerAdvice:定义全局异常处理器,集中处理多个控制器的异常。
- @ExceptionHandler:处理特定类型的异常,提供统一的错误响应。
-
示例代码:
@ControllerAdvice public class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ModelAndView handleResourceNotFoundException(ResourceNotFoundException ex) {ModelAndView modelAndView = new ModelAndView("error");modelAndView.addObject("errorMessage", ex.getMessage());return modelAndView;} }
6. 国际化支持
-
多语言支持:
- MessageSource:用于加载多语言资源文件,支持动态获取国际化消息。
- LocaleResolver:解析用户的语言偏好,支持多种语言环境的切换。
- LocaleChangeInterceptor:拦截请求,动态切换语言,提供个性化的用户体验。
-
示例代码:
@Bean public MessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();messageSource.setBasename("messages");messageSource.setDefaultEncoding("UTF-8");return messageSource; }@Bean public LocaleResolver localeResolver() {CookieLocaleResolver resolver = new CookieLocaleResolver();resolver.setDefaultLocale(Locale.US);resolver.setCookieName("locale");resolver.setCookieMaxAge(3600);return resolver; }@Bean public LocaleChangeInterceptor localeChangeInterceptor() {LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();interceptor.setParamName("lang");return interceptor; }@Override public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(localeChangeInterceptor()); }
7. 数据验证
-
JSR-303 标准:
- Hibernate Validator:常用的验证框架,支持多种验证注解,如
@NotNull
、@Size
、@Email
等。 - @Valid、@Validated:用于触发验证,确保输入数据的有效性。
- BindingResult:捕获验证结果,提供详细的错误信息。
- Hibernate Validator:常用的验证框架,支持多种验证注解,如
-
示例代码:
@PostMapping("/users") public String createUser(@Valid @ModelAttribute User user, BindingResult result, Model model) {if (result.hasErrors()) {return "userForm";}userService.saveUser(user);model.addAttribute("message", "User created successfully");return "success"; }
8. 安全性
-
Spring Security 集成:
- 认证:用户身份验证,支持多种认证机制,如表单登录、HTTP 基本认证等。
- 授权:访问控制,支持基于角色的访问控制(RBAC)、方法级别的安全控制等。
- CSRF 保护:防止跨站请求伪造攻击,保护用户免受恶意攻击。
-
示例代码:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/home").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}admin").roles("ADMIN");} }
9. 性能优化
-
缓存支持:
- Spring Cache:支持多种缓存提供者,如 EhCache、Redis,提供了声明式的缓存管理。
- @Cacheable、@CachePut、@CacheEvict:用于控制缓存操作,提高数据访问速度。
-
异步处理:
- @Async:标记异步方法,支持后台任务的执行。
- CompletableFuture:用于异步编程,提供了丰富的异步操作方法。
-
示例代码:
@Configuration @EnableCaching public class CacheConfig {@Beanpublic CacheManager cacheManager() {return new ConcurrentMapCacheManager("users");} }@Service public class UserService {@Cacheable("users")public User getUserById(Long id) {// 模拟耗时操作Thread.sleep(1000);return userRepository.findById(id).orElse(null);} }@Service public class AsyncService {@Asyncpublic CompletableFuture<User> getUserAsync(Long id) {return CompletableFuture.supplyAsync(() -> userService.getUserById(id));} }
Spring MVC 劣势
1. 学习曲线
- 初学者友好度:
- 概念复杂:Spring MVC 涉及的概念和技术较多,初学者需要时间来理解和掌握,特别是依赖注入、AOP、事务管理等高级特性。
- 文档复杂:官方文档内容丰富但较为复杂,新手可能需要较长时间来消化和理解,特别是对于没有 Java Web 开发经验的开发者。
2. 配置复杂性
- 配置繁琐:
- 大量配置:对于大型项目,需要编写大量的配置代码,尤其是在使用 XML 配置时,配置文件可能变得庞大且难以维护。
- 依赖管理:需要手动管理多个依赖库,增加了项目的复杂度,尤其是在没有使用构建工具(如 Maven 或 Gradle)的情况下。
3. 性能开销
-
初始化开销:
- 启动时间:Spring MVC 在启动时会初始化大量的组件和服务,可能会导致应用启动时间较长,尤其是在配置复杂的项目中。
- 内存占用:大量的依赖注入和代理机制可能会增加内存占用,影响应用的性能。
-
运行时开销:
- 反射和代理:Spring 框架广泛使用反射和代理机制,虽然提供了强大的功能,但也可能引入一定的运行时开销,特别是在高并发场景下。
4. 视图技术限制
- 视图技术选择:
- 技术多样性:虽然支持多种视图技术,但在某些情况下,特定的视图技术可能不够成熟或存在性能问题,例如某些模板引擎的渲染速度较慢。
- 模板引擎兼容性:不同模板引擎之间可能存在兼容性问题,需要额外的工作来解决,尤其是在多团队协作的情况下。
5. 社区和支持
- 社区活跃度:
- 问题解答:虽然 Spring 社区非常活跃,但某些特定问题可能需要较长时间才能得到解答,特别是在处理边缘情况或高级特性时。
- 第三方库支持:一些第三方库可能没有及时更新以支持最新的 Spring 版本,导致兼容性问题,特别是在企业级应用中使用时。
相关文章:
Spring MVC 深度剖析:优势与劣势全面解读
文章目录 Spring MVC 优势1. **松耦合**2. **易于测试**3. **灵活性**4. **强大的配置机制**5. **异常处理**6. **国际化支持**7. **数据验证**8. **安全性**9. **性能优化** Spring MVC 劣势1. **学习曲线**2. **配置复杂性**3. **性能开销**4. **视图技术限制**5. **社区和支…...
基于Angular+BootStrap+SpringBoot简单的购物网站
目录 一、项目结构图 二、目录结构解析 后端 (Spring Boot) 前端 (Angular) 三、技术栈 四、具体功能实现 五、数据库设计 六、后端实现 1. 设置Spring Boot项目 2. 数据库实体类 3. 创建Repository 4. 创建Service层 5. 创建Controller层 七、前端实现࿰…...
微软Ignite 2024:建立一个Agentic世界!
在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…...
AIGC实践-使用Amazon Bedrock的SDXL模型进行文生图
一、Bedrock 简介 Amazon Bedrock 是 Amazon Web Services (AWS) 提供的一种生成式 AI 服务。通过 Bedrock,用户可以方便地使用多种基础模型(Foundation Models),包括 OpenAI 的 GPT、Anthropic 的 Claude 等。这些模型可以用于各…...
Android12 mtk设置插充电器自动开机
Android12 mtk平台通常关机后,插上充电器是进入关机充电流程,显示关机充电动画。 那么根据用户需求,如果需要设置关机之后,实现插上充电器后,自动开机。 正常流程:机器关机 --> 插上充电器 --> 显示…...
Linux高阶——1117—TCP客户端服务端
目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…...
Linux 命令和 vi/vim 命令
Linux 命令概览 1. 文件和目录操作 列出目录内容 ls:列出当前目录内容ls -l:以长格式列出ls -a:显示隐藏文件ls -lh:以长格式和人类可读方式显示大小ls -R:递归列出子目录ls -d */:仅列出目录ls -t&#x…...
鸿蒙征文|鸿蒙心路旅程:始于杭研所集训营,升华于横店
始于杭研所 在2024年7月,我踏上了一段全新的旅程,前往风景如画的杭州,参加华为杭研所举办的鲲鹏&昇腾集训营。这是一个专门为开发者设计的培训项目,中途深入学习HarmonyOS相关技术。对于我这样一个对技术充满热情的学生来说&…...
【docker】docker commit 命令 将当前容器的状态保存为一个新的镜像
在Docker容器中安装了许多软件,并希望将当前容器的状态保存为一个新的镜像,可以使用docker commit命令来创建一个新的镜像。以下是如何操作的步骤: 找到容器ID或名称: 首先,需要找到想要保存的容器的ID或名称。可以使用…...
Java基础1.0
1.Java有哪些数据结构 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据结构,在内存中分配了不同大小的内存空间。 基本数据结构 整数类型:byte,short,long,int。 字符类型:doub…...
完全二叉树的基本操作(顺序存储)
#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组,按照从上到下, *从左到右的方式依次存储完全…...
Vue Form表单的使用,rules格式校验网络校验,键盘按键监听
Form表单 rules格式校验 可以在validator中进行网络请求,实现网络校验 const formRules {userName: [{required: true, message: "用户名不能为空", trigger: blur}, {min: 5,max: 10,message: "长度必须5-10位",trigger: blur}],passWord: …...
PyTorch2
Tensor的常见操作: 获取元素值: 注意: 和Tensor的维度没有关系,都可以取出来! 如果有多个元素则报错; import torch def test002():data torch.tensor([18])print(data.item())pass if __name__ &qu…...
蓝牙 AVRCP 协议详解
前言 随着无线音频设备的普及,蓝牙已经成为智能设备间通信的主流方式之一。除了传输音频流的 A2DP 协议外,AVRCP(Audio/Video Remote Control Profile,音频/视频远程控制协议)为用户提供了对蓝牙音频设备的控制能力&am…...
深入解析下oracle char和varchar2底层存储方式
oracle数据库中,char和varchar2数据类型用来存储字符数据。char类型一旦定义多大,那么它就分配多少字节空间;varchar2类型定义多大,代表它可以扩展的最大大小为多大,一开始空间根据使用来决定。字符数据存储在oracle表…...
2024年底-Arch linux或转为0BSD许可证!
原文:https://archlinux.org/news/providing-a-license-for-package-sources/ 解读:Arch Linux社区通过RFC 40达成共识,决定将所有软件包源代码更改为0BSD许可证。 0BSD许可证是什么?:这是一个非常自由的开源许可证&a…...
YOLOv10改进,YOLOv10添加SE注意力机制,二次C2f结构
摘要 理论介绍 SE 注意力机制是一种提升卷积神经网络(CNN)性能的模块,SE更关注重要的特征图,增强了网络的表现,同时仅增加了较少的参数。SE 机制包含两个主要步骤: Squeeze (压缩):对所有特征图进行全局平均池化,生成一个通道描述符。Excitation (激励):将通道描述符…...
探索运维新视界,CMDB的3D机房功能深度解析
在数字化转型的浪潮中,数据中心作为企业信息架构的核心,其高效、智能的管理成为了企业竞争力的关键因素之一。3D机房作为这一趋势下的创新产物,正逐步改变着传统机房运维的面貌。本文将结合乐维CMDB,深入探讨3D机房的功能细节、应…...
[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目
前言 最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的…...
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统 哈喽小伙伴们还,我是Stark-C~ 最近苹果Mac mini 2024款在政府补贴的加持下,仅需3500块钱左右就能到手确实挺香的。我看很多评论区的小伙伴跃跃欲试,但是也有不少之前从未体…...
视频监控实现画面缩放功能
文章目录 概要一、功能说明二、核心实现代码三、技术细节 概要 在视频监控系统中,经常需要查看视频画面中的细节。通过实现区域放大、滚轮缩放和拖拽平移等功能,可以让用户更方便地观察视频细节。本文介绍如何在 Windows 系统下实现这些交互功能。 一、…...
通信综合—8.通信网络安全
一、信息系统安全概述 1.信息系统的构成和分类 信息系统是将用于收集、处理、存储和传播信息的部件组织在一起而成的相关联的整体,般是由计算机硬件、网络和通信设备、计算机软件、信息资源和信息用户组成。它是以处理信息流为目的的人机一体化系统。信息系统主要…...
keepalived双机热备方案实现Nginx高可用
问题描述 只用一台Nginx做反向代理,如果这台Nginx出现故障(比如宕机),则服务不可用。 以下给出keepalived双机热备方案实现Nginx高可用的方法。先介绍几个概念: 高可用 高可用(High Availability)是指系统或服务能…...
数据结构——排序算法第一幕(插入排序:直接插入排序、希尔排序 选择排序:直接选择排序,堆排序)超详细!!!!
文章目录 前言一、排序1.1 概念1.2 常见的排序算法 二、插入排序2.1 直接插入排序2.2 希尔排序希尔排序的时间复杂度 三、选择排序3.1 直接选择排序3.2 堆排序 总结 前言 时间很快,转眼间已经到数据结构的排序算法部分啦 今天我们来学习排序算法当中的 插入排序 和 …...
【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…...
MySQL数据类型与存储结构
补充知识,事务隔离的等级: READ UNCOMMITTED(读未提交) :这是最低的隔离级别,允许事务读取其他事务未提交的数据,可能导致脏读、不可重复读和幻读问题。 READ COMMITTED(读已提交࿰…...
CSRF保护--laravel进阶篇
laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…...
服务器数据恢复—raid5阵列+LVM+VXFS数据恢复案例
服务器存储数据恢复环境: 某品牌MSA2000FC存储中有一组由7块盘组建的RAID5阵列,另外还有1块硬盘作为热备盘使用。 基于RAID5阵列划分的几个LUN分配给小机使用,存储空间通过LVM管理,重要数据为Oracle数据库及OA服务端。 服务器存储…...
游卡,科锐国际,蓝禾,汤臣倍健,三七互娱,顺丰,快手,途游游戏25秋招内推
游卡,科锐国际,蓝禾,汤臣倍健,三七互娱,顺丰,快手,途游游戏25秋招内推 ①科锐国际25届秋招补录 人力资源类岗位,补录城市:苏州、宁波、武汉、东莞;全日制公办…...
内存不足引发C++程序闪退崩溃问题的分析与总结
目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败,返回NULL 2.2、new申请内存失败,抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…...
C++ 多态作业练习
作业1、 编写一个英雄类 class Hero{ int atk; int def; int spd; int hp; public: 所有的get set 方法 void equipWeapon(Weapon*) 根据传入的武器不同,英雄获得不同的属性加成 } #include <iostream> #include <cstring&g…...
(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统
摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…...
层次聚类(Hierarchical Clustering)详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Cannal实现MySQL主从同步环境搭建
大家好,我是袁庭新。 在多数情况下,客户端往往会优先获取缓存中的数据。然而,当缓存数据与数据库中的实际数据存在显著不一致时,可能会导致严重的后果。因此,确保数据库与缓存数据之间的一致性变得至关重要,…...
Js-函数-03
函数定义 在java中我们为了提高代码的复用性,可以使用方法。同样,在JavaScript中可以使用函数来完成相同的事情。JavaScript中的函数被设计为执行特定任务的代码块,通过关键字function来定义。 <!DOCTYPE html> <html lang"en…...
9.机器学习--SVM支持向量机
支持向量机(Support Vector Machine,SVM)是一种二分类监督学习模型。支持向量机最早在 1964 年被提出,1995年前后理论成熟并开始被大量应用与人像识别、文本分类等问题中。它的基本模型是定义在特征空间上的间隔最大的线性分类器&…...
探索Python的HTTP之旅:揭秘Requests库的神秘面纱
文章目录 **探索Python的HTTP之旅:揭秘Requests库的神秘面纱**第一部分:背景介绍第二部分:Requests库是什么?第三部分:如何安装Requests库?第四部分:Requests库的五个简单函数使用方法第五部分&…...
vue3项目使用动态表单formcreate
使用两个插件: 支持可视化设计的低代码表单组件 | FormCreate 好用的低代码可视化表单设计器 | FcDesigner 一、安装 1.使用 Node.js 引入 npm install form-create/element-ui npm install form-create/designer^3 npm install element-plus 2. main.js引入…...
指针的奥秘:深入探索内存的秘密
前言 在计算机编程的广阔天地中,指针作为一种独特的数据类型,它不仅是C语言的核心,也是理解计算机内存管理的基石。指针的概念虽然强大,但对于初学者来说,它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…...
车载摄像camera基础知识和评估
一、车载摄像头应用 以下是根据图片内容重新制作的表格: | 序号 | 产品用途 |------|---------------- | 1 | AVM/环视360摄像头 | 2 | DMS摄像头 | 3 | IMS/OMS摄像头 | 4 | RVC摄像头 | 5 | 红外夜视摄像头 | 6 | 底盘透明摄像头 | 7 …...
OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
摘要:本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数(如 mode 不同取值对应不同轮廓检索模式)及返回值的详细解析,搭配…...
微信小程序WXSS全局样式与局部样式的使用教程
微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…...
Leetcode142. 环形链表 II(HOT100)
链接 我的错误代码: class Solution { public:ListNode *detectCycle(ListNode *head) {if(!head||!head->next)return nullptr;ListNode* f head->next,*s head;while(f){f f->next,s s->next;if(!f)return nullptr;f f->next;if(fs){ListNo…...
Java程序基础⑤Java数组的定义和使用+引用的概念
目录 1. Java数组的基本概念 1.1 数组的定义 1.2 数组存在的意义 1.3 数组的使用 1.4 二维数组 2. 引用类型JVM的内存分布 2.1 JVM的内存分布 2.2 基本数据类型和引用型数据类型的区别 2.3 引用注意事项 2.4 传值传递 3. 数组总结和应用场景 3.1 一维数组和二维数组…...
丁真杯理塘大赛题解
前言:部分代码思路可能与题解思路不同,请勿强行带入 真蛰虫 原题链接 1.一道非常基础的数学题。 2.主要就是在考察分解质因数。首先看真蛰虫的质因数是不是包含了容器的所有质因数,如果没有,那么就不能放入容器中。如果全部包…...
FPGA经验谈系列文章——8、复位的设计
前言 剑法往往有着固定的招式套路,而写代码似乎也存在类似的情况。不知从何时起,众多 FPGA 工程师们在编写代码时开启了一种关于 always 语句块的流行写法,那就是: always @(posedge i_clk or negedge i_rstn) 就笔者所经历的诸多项目以及所接触到的不少工程师而言,大家在…...
Android studio与JS交互
文章目录 前言一、html二、使用步骤1.2.AS 总结 前言 最近在使用Android Studio的WebView,有些功能要AS与JS交互。 一、html html文件 <!DOCTYPE html> <html> <!--javascript--> <head><meta charset"utf-8"><title>Carson…...
健身房小程序服务渠道开展
健身不单单是锻炼身体、保持身材,也是一种社交方式,城市里门店不少,每家都有一定流量和老客,但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户,而消费者也对门…...
大宗商品行业区块链应用
应用场景 区块链技术具有透明性、去中心化、不可篡改等特点,因此可以在大宗商品定价方面得到应用。通过区块链技术,相关交易的各方可以在无需依赖中心化第三方的情况下,实时、准确地获取定价信息。这种技术的应用能够提高效率、降低成本、提…...
软考教材重点内容 信息安全工程师 第 5 章 物理与环境安全技术
5.1.1 物理安全概念 传统上的物理安全也称为实体安全,是指包括环境、设备和记录介质在内的所有支持网络信息系统运行的硬件的总体安全,是网络信息系统安全、可靠、不间断运行的基本保证,并且确保在信息进行加工处理、服务、决策支持的过程中&…...