JDK 1.8 全解析:从核心特性到企业实战的深度实践
引言
JDK 1.8 作为 Java 生态发展史上的里程碑版本,自 2014 年发布以来,凭借 Lambda 表达式、Stream API、新日期时间 API 三大核心特性,彻底重塑了 Java 编程范式。本文结合 Oracle 官方文档、蚂蚁集团、京东零售等企业级实战案例,以及 20+ 个 Stream API 代码示例,全面解析 JDK 1.8 的技术价值、落地场景及最佳实践,助你掌握企业级开发的 “稳定基石”。
一、核心特性:开启函数式编程新时代
JDK 1.8 的革新不仅是语法糖的升级,更是软件开发思维的转变,其核心特性解决了传统 Java 开发中的诸多痛点。
1. Lambda 表达式:简化匿名函数,聚焦业务逻辑
Lambda 表达式通过函数式接口(如 Runnable
、Comparator
)实现匿名函数的极简表达,消除了传统匿名内部类的冗余代码。
java
// 传统线程创建(匿名内部类)
new Thread(new Runnable() { @Override public void run() { System.out.println("传统线程启动"); }
}).start(); // Lambda 表达式(代码量减少 60%)
new Thread(() -> System.out.println("Lambda 线程启动")).start();
核心价值:
- 行为参数化:将 “过滤条件”“排序规则” 等行为作为参数传递,如在
Collections.sort()
中动态定义比较逻辑; - 框架深度整合:Spring 框架中,Lambda 简化事件监听、
@Bean
注册等配置,代码可读性提升 40%(参考 Spring Boot 官方文档)。
2. Stream API:声明式数据处理的 “瑞士军刀”
Stream API 通过链式操作实现集合的高效处理,支持惰性求值(仅在终止操作时触发计算)和并行加速,显著简化数据清洗、聚合、统计等逻辑。
java
// 电商订单筛选:未支付且金额>1000,按创建时间降序
List<Order> targetOrders = orders.stream() .filter(order -> !order.isPaid() && order.getAmount() > 1000) .sorted(Comparator.comparing(Order::getCreateTime).reversed()) .collect(Collectors.toList());
核心操作链:
- 中间操作:
filter
(过滤)、map
(映射)、flatMap
(扁平映射)等,返回新 Stream; - 终止操作:
collect
(收集)、reduce
(归约)、findFirst
(查找)等,触发实际计算。
3. 新日期时间 API:线程安全的时间革命
JDK 1.8 引入 java.time
包(如 LocalDateTime
、ZonedDateTime
),解决了旧版 Date
/Calendar
的线程不安全、时区处理复杂等问题。
java
// UTC 时间转东八区(线程安全)
ZonedDateTime utcTime = ZonedDateTime.parse("2024-11-11T12:00:00Z");
ZonedDateTime shanghaiTime = utcTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
String localTime = shanghaiTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
核心优势:
- 不可变性:所有日期类均为不可变对象,多线程共享无需同步(参考 Oracle JavaDoc);
- 时区显式化:
ZoneId
明确时区(如Asia/Shanghai
),避免隐式转换错误,金融、物流等对时间敏感场景必备。
二、企业实战:金融、电商、开源框架的落地密码
JDK 1.8 的核心特性在头部企业和开源生态中已大规模落地,成为支撑高并发、大数据量业务的关键技术。
1. 金融领域:蚂蚁集团亿级交易实时处理
- 业务痛点:双 11 期间亿级支付交易需实时清洗(如未对账订单筛选),旧版代码处理耗时 120s,
SimpleDateFormat
多线程错误率 0.1%; - JDK 1.8 方案:
- Stream 链式过滤:通过
filter
+map
筛选未对账且金额异常的交易,代码行数减少 40%; - 并行流加速:
parallel()
结合 Fork/Join 框架,利用多核 CPU 将处理耗时缩短至 30s; - 新日期 API 替代:
ZonedDateTime
实现 UTC 与本地时间的线程安全转换,错误率降至 0。
- Stream 链式过滤:通过
2. 电商领域:京东零售大促订单实时分析
- 业务场景:618 大促期间千万级订单需实时统计(如各品类销售额 TOP5、未支付订单占比);
- 核心实现:
- 多级分组统计:
Collectors.groupingBy
实现 “品类 - 品牌” 二级分组,自动统计商品数和均价,避免手动维护Map
的错误(错误率从 0.5% 降至 0); - 并行流实时计算:总销售额计算耗时从 5min 压缩至 30s,支撑大促峰值流量下的实时决策;
- Lambda 动态排序:通过
Comparator
传递动态排序规则(如价格降序、销量升序),代码复用性提升 50%。
- 多级分组统计:
3. 开源框架:Spring Boot 深度整合与生态适配
- 整合优势:
- Lambda 简化配置:在
ApplicationListener
中,Lambda 替代匿名类,事件监听代码从 10 行减至 2 行; - Stream 惰性加载:
Spring Data JPA
返回Stream<T>
,避免一次性加载海量数据,内存占用降低 50%; - 新日期 API 标准化:默认使用
LocalDateTime
作为实体类时间字段,与 Jackson 序列化无缝兼容,时间字段解析错误率清零。
- Lambda 简化配置:在
三、20+ 个 Stream API 实战示例:覆盖全场景数据处理
1. 基础数据处理:过滤、映射、排序
java
// 筛选“手机”品类,价格>5000,型号含“Pro”,按价格降序
List<Product> filtered = products.stream() .filter(p -> "手机".equals(p.getCategory())) .filter(p -> p.getPrice() > 5000 && p.getModel().contains("Pro")) .sorted(Comparator.comparingDouble(Product::getPrice).reversed()) .collect(Collectors.toList()); // 提取用户地址城市并去重(处理空值安全)
List<String> cities = users.stream() .map(User::getAddress) .filter(Objects::nonNull) .map(Address::getCity) .distinct() .collect(Collectors.toList());
2. 复杂聚合:分组、分区、归约
java
// 按支付状态分区统计订单数(布尔条件分组)
Map<Boolean, Long> paidStats = orders.stream() .collect(Collectors.partitioningBy(Order::isPaid, Collectors.counting())); // 多指标归约(交易额总和、最大值、平均值)
DoubleSummaryStatistics txnStats = transactions.stream() .collect(Collectors.summarizingDouble(Transaction::getAmount));
3. 并行优化与性能调优
java
// 百万级日志提取唯一IP(并行流加速)
Set<String> uniqueIps = logs.parallelStream() .map(log -> log.split(",")[0]) .filter(ip -> !"unknown".equals(ip)) .collect(Collectors.toSet()); // 自定义线程池控制并行度(避免阻塞公共线程池)
ForkJoinPool customPool = new ForkJoinPool(8);
List<String> results = customPool.submit(() -> data.parallelStream().map(this::complexProcessing).collect(Collectors.toList())
).get();
4. 企业级场景:风控、推荐、日志分析
java
// 风控系统:查找最早的异常交易
Transaction firstAnomalyTxn = transactions.stream() .filter(t -> t.getStatus().equals("异常")) .min(Comparator.comparing(Transaction::getTimestamp)) .orElse(null); // 推荐系统:用户行为特征提取(嵌套对象扁平化)
List<String> features = userBehaviors.stream() .flatMap(behavior -> behavior.getActions().stream()) .map(Action::getFeature) .distinct() .collect(Collectors.toList());
四、并行流最佳实践:避坑指南与性能调优
1. 适用场景判断
- 大数据量:数据量 > 10,000 条时启用并行流(如百万级用户数据、亿级日志),小数据集可能因线程调度开销导致性能下降;
- 无状态操作:仅用于
filter
/map
等纯函数操作,避免在forEach()
中修改共享变量(线程不安全); - CPU 密集型:禁止用于 I/O 阻塞任务(如数据库查询、文件读写),建议使用独立线程池(如
ExecutorService
)。
2. 线程安全与性能优化
java
// 错误示例:共享变量累加(线程不安全)
int[] sum = {0};
numbers.parallelStream().forEach(n -> sum[0] += n); // 结果不可靠 // 正确示例:使用归约操作(线程安全)
long correctSum = numbers.parallelStream().reduce(0L, Long::sum);
- 数据结构选择:优先使用
ArrayList
(Spliterator
拆分效率高),LinkedList
因拆分耗时不推荐并行处理; - 基准测试:通过 JMH 等工具对比并行流与顺序流性能,避免盲目优化(如小数据集顺序流可能更快)。
五、总结:JDK 1.8 的长期技术价值
JDK 1.8 的核心价值在于平衡稳定性与创新性,其特性已渗透到企业级开发的各个环节:
- 开发效率:Lambda/Stream 减少 30%-50% 的样板代码,新日期 API 规避时间处理的历史坑点;
- 系统性能:并行流加速海量数据处理,元空间(Metaspace)优化提升 JVM 稳定性,支撑金融、电商等高并发场景;
- 生态兼容:作为 Spring、Hadoop、Spark 等框架的 “最低公约数”,JDK 1.8 仍是企业存量系统的首选,尤其在传统行业(金融、电信)中占比超过 40%(参考 Snyk 2024 Java 生态报告)。
尽管 JDK 11/17 等新版本不断推出,JDK 1.8 凭借成熟度、社区支持(OpenJDK 持续维护)和生态兼容性,仍将在企业级开发中长期存在。掌握其核心特性,是理解 Java 生态演进和实现高效开发的必经之路。
相关文章:
JDK 1.8 全解析:从核心特性到企业实战的深度实践
引言 JDK 1.8 作为 Java 生态发展史上的里程碑版本,自 2014 年发布以来,凭借 Lambda 表达式、Stream API、新日期时间 API 三大核心特性,彻底重塑了 Java 编程范式。本文结合 Oracle 官方文档、蚂蚁集团、京东零售等企业级实战案例ÿ…...
OptiStruct实例:汽车声控建模
本章通过一个Tim-BaDy模型,展示利用AemmiecaviyMet工具进行声腔网格划分的过程因为南腔是考康边界的声场,所以在开展腔建机之的N营涉设物建大致封闭的边界模器东有内商院建权为例,首先需要准备自车身所合之的、首先委部)结构的有限元型车内声…...
k8s(12) — 版本控制和滚动更新(金丝雀部署理念)
金丝雀部署简介: 1、基本概念 金丝雀部署是一种软件开发中的渐进式发布策略,其核心思想是通过将新版本应用逐步发布给一小部分用户(即 “金丝雀” 用户),在真实环境中验证功能稳定性和性能表现,再逐步扩大发…...
基于matlab实现AUTOSAR软件开发---答疑6
最近有少朋友在咨询我关于模型生成A2L文件,之后在把elf文件的地址提取进去,生成最终的A2L的操作,这个其实可以看下mathwork的帮助文档,地址如下: https://www.mathworks.com/help/ecoder/ug/asap2-cdf-calibration.htmlhttps://www.mathworks.com/help/ecoder/ug/asap2-c…...
铜墙铁壁 - 服务网格的安全之道 (Istio 实例)
铜墙铁壁 - 服务网格的安全之道 (Istio 实例) 在微服务架构中,服务间的通信是频繁且复杂的。传统的安全模型常常假设内部网络是可信的,这在现代分布式系统和云原生(尤其是零信任)环境中是远远不够的。我们需要解决几个核心安全问题: 通信加密 (Encryption):如何确保服务 …...
计量——检验与代理变量
1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log(y)β0β1x1β2x2β3x3u log(y)β0β1log(x1)β2log(x2)β3log(x3)u 1.对logÿ…...
【C++】解析C++面向对象三要素:封装、继承与多态实现机制
解析C面向对象三要素:封装、继承与多态实现机制 1. 面向对象设计基石2. 封装:数据守卫者2.1 访问控制实现2.2 封装优势 3. 继承:代码复用艺术3.1 继承的核心作用3.2 继承类型对比3.3 典型应用场景3.4 构造函数与析构函数处理3.4.1 构造顺序控…...
c语言 写一个五子棋
c语言 IsWin判赢 display 画棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 void display(char map[][10]) {system("clear");printf(" 0 1 2 3 4 5 6 7 8 9\n&…...
深度解析 IDEA 集成 Continue 插件:提升开发效率的全流程指南
一、插件核心功能与应用场景 Continue 是一款专为 JetBrains IDE 设计的 AI 编程助手插件,基于大语言模型实现以下核心功能: 智能代码生成:支持根据自然语言描述生成完整方法、单元测试或设计模式(如线程安全单例模式࿰…...
Node.js
本文来源 : 腾讯元宝 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,采用 事件驱动 和 非阻塞 I/O 模型,专为构建高性能、可扩展的网络应用而设计。以下是其核心特性和应用场景的总结: 1…...
idea经常卡顿解决办法
一:前言 (1)使用idea工具开发过久,出现卡顿,等待响应 二:原因 (1)给idea设置的运行内存过小,需要使用的内存超过设置的内存 (2)插件过多&…...
【python】字典:: a list of dictionaries
No, actions is not a dictionary. It’s a list of dictionaries. Each item in the list is a dictionary with three key-value pairs: “measure” (number), “resource” (string), and “reason” (string). Here’s the structure: actions is a list []Each element…...
高效电脑隐私信息清理实用工具
软件介绍 本文介绍的这款Privacy Eraser,它是一款电脑系统隐私清理工具。 功能介绍 这款工具能够清理电脑里的多种信息,比如最近文件、临时文件、注册表信息,还有浏览器插件以及日志文件等等。 引导提示 注重隐私保护的小伙伴一定要将这款…...
在ubuntu系统中将vue3的打包文件dist 部署nginx 并且配置ssl证书 以https方式访问
在ubuntu系统中将vue3的打包文件dist 部署nginx 并且配置ssl证书 以https方式访问 确保 Nginx 已安装准备 Vue 3 打包文件配置 Nginx编辑 Nginx 配置文件启用配置文件测试 Nginx 配置重新加载 Nginx配置 SSL 证书获取 SSL 证书验证证书自动续期验证部署注意事项 确保 Nginx 已安…...
MH22D3开发高级UI应用,适配arm2d驱动
在资源有限的嵌入系统上,要开发出具有现代风格(圆弧,表盘,滚动,滑动,透明,图层叠加等)的UI应用,需要极高的cpu算力和ram,flash资源的支持。 但是往往鱼和熊掌…...
MongoDB数据库深度解析:架构、特性与应用场景
在现代应用程序开发中,数据存储技术的选择至关重要。在众多的数据库管理系统中,MongoDB以其灵活性和强大的功能迅速崛起,成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践,…...
LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点
LeetCode 235. 二叉搜索树的最近公共祖先 思路: 根据二叉搜索树的特性,对 “基于二叉树的最近公共祖先 ” 进行优化,在二叉树寻找最近公共祖先时,需要分别对根节点的两个子树进行遍历来判断两个节点是异侧还是同侧。但是在二叉搜…...
GPU异步执行漏洞攻防实战:从CUDA Stream竞争到安全编程规范
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 引言 在高校实验室的GPU加速计算研究中,多卡并行编程已成为提升深度学习训练效…...
[c语言日寄]数据结构:栈
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
day21:零基础学嵌入式之数据结构
一、双向链表(doulinklist) 1. 2.创建 struct DouLinkList *CreateDouLinkList() {struct DouLinkList *dl malloc(sizeof(struct DouLinkList));if(NULL dl){fprintf(stderr, "CreateDouLinkLis malloc");return NULL;}dl->head NUL…...
数据结构之图的应用场景及其代码
一,最小生成树 最小生成树(Minimum Spanning Tree, MST)是图论中的经典问题,旨在通过选择无向连通图中的边,使得所有节点连通且总边权最小。 1.1 普里姆(Prim)算法 普里姆算法是一种用于求解…...
python克洛伊婚纱摄影预约管理系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
GCC 使用说明
参数 -fPIC ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加…...
配置别名路径 @
CRA本身把webpack配置包装到了黑盒里无法直接修改,需要借助一个插件 - craco 1. 路径解析配置(Webpack)-- craco 插件 把 / 解析为 src/ 配置步骤: 1.安装 craco npm i -D craco/craco 2. 项目根目录下创建配置文件 craco.co…...
MYSQL基本命令
目录 1.登录命令2.操作数据库命令2.1查询数据库(show)2.2 创建数据库(create)2.3使用数据库(use) 3.操作表命令3.1增加表3.2查询表3.3修改表(alert)3.4 删除(delete/drop) 1.登录命令 mysql -uroot -p2.操作数据库命令 2.1查询数据库(show) show databases;2.2 创建数据库(c…...
C#语法基础
一、什么是.NET平台 .NET 是由 Microsoft 支持的免费开放源代码应用程序平台。 .NET .NET 是一个安全、可靠且高性能的应用程序平台。C# 是 .NET 的编程语言。它是强类型且类型安全的,并集成了并发和自动内存管理。 C# C# 是一种新式、安全且面向对象的编程语言&…...
深度学习框架对比---Pytorch和TensorFlow
一、计算图与执行模式 1. 图的本质:动态图 vs 静态图 PyTorch(动态图,Eager Execution) 运行机制:代码逐行执行,张量操作立即生效,计算图在运行时动态构建。x torch.tensor(1.0, requires_gra…...
antdv3 Tabs.TabPane 右上角增加一个角标Badge
1、Tabs官方说明 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、Badge角标官方效果图 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 3、Tabs.TabPane要实现的效果 4、代码 <Tabs v-m…...
Python-88:英雄升级奖励
问题描述 在一个游戏中,小W拥有 n 个英雄,每个英雄的初始能力值均为 1。她可以通过升级操作来提升英雄的能力值,最多可以进行 k 次升级。 每次升级操作包含以下步骤: 选择一个英雄选择一个正整数 x将该英雄的能力值 aiai 更新…...
使用uv创建python项目
uv创建项目 uv init -p 3.12 qwen3env # -p 指定python版本 # qwen3env是项目名称 # 可以使用下面的步骤 mkdir qwen3env cd qwen3env uv venv -p3.12 .venv # 基于 Python 3.12 创建名为 .venv 的虚拟环境 uv init第一种方式 第二种方式 内容如下 执行python脚本 uv ru…...
window 显示驱动开发-命令和 DMA 缓冲区简介
命令和 DMA 缓冲区非常相似。 但是,命令缓冲区由用户模式显示驱动程序使用,DMA 缓冲区由显示微型端口驱动程序使用。 命令缓冲区具有以下特征: 它永远不会由 GPU 直接访问。 硬件供应商控制格式。 它从呈现应用程序的专用地址空间中的常规…...
深光-谷歌TV TADA/奈飞Netflix/亚马逊Prime Video/YouTube等测试外包服务
一、谷歌TV TADA测试服务 1.CTS CTS测试是一系列旨在确保设备与Android操作系统兼容性的自动化测试,CTS是所有测试项中测试量最大的一项测试。 2.GTS GTS测试是确保Android设备能够正确集成和运行Google Mobile Services(GMS)的关键步骤&am…...
《教育退费那些事儿:从困境到破局》
《教育退费那些事儿:从困境到破局》 教育退费:不容忽视的热点问题 在当今社会,教育消费已成为家庭支出的重要组成部分。无论是 K12 阶段的学科辅导、艺术特长培训,还是成人的职业技能提升、学历继续教育,家长和学生们…...
AtCoder 第405场初级竞赛 A~E题解
A Is it rated? 【题目链接】 原题链接:A - Is it rated? 【考点】 嵌套判断 【题目大意】 有两个分区,有不同的评分区间,给一个评分 r 和分区 x,判断是否在评分区间中。 【解析】 先判断在属于哪个分区,再判断是否在该分区评分区间中。 【难度】 GESP一级 【…...
登录接口中图片验证码Tesseract-OCR识别Java脚本
项目上移植了研发部的产品,文档不全,项目上验证码功能无法关闭,又要做接口/性能测试,开发不配合(作为测试多么无奈),此方法识别命中率不高,仅作借鉴。 版本JDK11 import io.restass…...
专项智能练习(定义判断)_DA_02
2. 单选题 虚假同感偏差也叫虚假一致性偏差,是指人们常常会高估或夸大自己的信念、判断及行为的普遍性。在认知他人时总喜欢把自己的特性赋予他人身上,假定他人与自己是相同的,而当遇到与此相冲突的信息时,会坚信自己信念和判断的…...
安卓A15系统实现修改锁屏界面默认壁纸功能
最近遇到一个A15系统项目,客户要求修改锁屏界面的默认壁纸,客户提供了一张壁纸图片,但是从A15系统的源代码查看时才知道谷歌已经去掉了相关的代码,已经不支持了,A13和A14系统好像是支持的,A15系统的Wallpap…...
Linux之Yum源与Nginx服务篇
1.Yum源知识理论总结概括 Yum源概述 Yum 源 即软件仓库的标识,里面承载着软件包集合 Yum源组成 包含模块 【OS】、【everything】、【EPOL】、【debuginfo】、【source】、【update-source】 【os】:简称operator system 它内部包含操作系统的核心组件&#x…...
帧差法识别
定义: 视频通过闪过x帧画面来实现,帧差法就是利用两帧之间的差异找出。也就是移动目标识别 帧差法识别步骤: 1、灰度处理:将多通道变成双通道压缩图像数据。 cvtColor(before_frame,before_gray,CV_RGB2GRAY);cvtColor(after_f…...
游戏引擎学习第282天:Z轴移动与摄像机运动
运行游戏,展示目前进展 我们目前正在进行一个游戏开发项目。昨天,我们实现了基于房间的角色移动系统,并且加入了摄像机的跟随滚动功能。这是我们首次进入“游戏逻辑设计”阶段,也就是说,我们开始构建游戏本身的行为和…...
解决:npm install报错,reason: certificate has expired
目录 1. 问题分析2. 问题解决2.1 查看配置的镜像2.2 修改镜像源 种一棵树最好的时间是10年前,其次就是现在,加油! --by蜡笔小柯南 1. 问题分析 启动前…...
C++ 基础知识点
1、指针和引用的区别 指针:是一个变量,存储的是另一个变量的内存地址,可以被重新赋值指向不同的对象,允许为 nullptr。 指针的特性: 独立变量,存储内存地址 可重新赋值指向其他对象 支持空值(n…...
线代第二章矩阵第九、十节:初等变换、矩阵的标准形、阶梯形与行最简阶梯形、初等矩阵
文章目录 初等变换初等行变换初等列变换 矩阵的标准型阶梯形与行最简阶梯形阶梯型矩阵行简化阶梯形 初等矩阵定义性质初等矩阵和初等变换的联系 本节非常重要 初等变换 初等变换使用"→",而不是"" 初等行变换 ① 交换两行 ② 非0数乘以某一…...
新能源汽车制动系统建模全解析——从理论到工程应用
《纯电动轻卡制动系统建模全解析:车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象,系统解析制动系统建模核心参数优化方法,涵盖: 车速-阻力曲线拟合(MATLAB实现与模型验证&…...
初始化一个Springboot项目
初始化一个Springboot项目 文章目录 初始化一个Springboot项目1、新建项目2、配置yml3、自定义异常4、通用相应类5、全局跨域配置6、总结 1、新建项目 首先,我们需要创建一个新的 Spring Boot 项目。这里我们使用 IntelliJ IDEA 作为开发工具,它提供了方…...
Springboot考研信息平台
Springboot考研信息平台 文章目录 Springboot考研信息平台1、技术栈2、项目说明3、项目截图4、核心代码4.1、前端核心代码4.2、后端核心代码 1、技术栈 前端 Vue 是一套用于构建用户界面的渐进式 JavaScript 框架。 Vue 作为前端核心框架,提供了响应式的数据绑定和高…...
Spring 框架 JDBC 模板技术详解
一、JDBC 模板技术概述 在传统 JDBC 开发中,开发人员需要手动处理数据库连接(Connection)、事务管理、语句执行(Statement)和结果集(ResultSet)等繁琐操作,不仅代码冗余度高&#x…...
Console Importer浏览器插件的编译 及 制作成.crx浏览器插件的步骤
近日由于下载Console Importer浏览器插件(一个前端调试窗口方便引下第三方库便于学习测试的插件)找不到资源,于是找到该插件的源码,地址:https://github.com/pd4d10/console-importer),发现该插件基于一款名为“Plasmo…...
ArcGIS切片方案记录bundle文件
文章目录 前言一、导入底图二、生成切片方案三、导出切片方案总结 前言 切片的作用是让前端可以访问地图的Mapsever来加载底图。arcgis切片是测绘人员或者WebGIs人员需要认识到的操作。 一、导入底图 首先10.8的ArcGis,这里没有Pro,Pro其实也是一样的操…...
山东大学计算机图形学期末复习6——CG10下
##CG10下 将世界坐标中的任意点 P P P 变换到以相机为中心的“观察坐标系”下(右手坐标系) n \mathbf{n} n:从相机眼睛朝向观察点的反方向,代表“前方”; u \mathbf{u} u:观察坐标系的 x 轴,向…...