当前位置: 首页 > news >正文

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题,有synchronized锁,threadlocal

  • 一、面试题小记
  • 二、加锁synchronized
    • 1. 先看代码
    • 2. synchronized 讲解
      • 2.1. 同步代码块
      • 2.2. 同步方法
      • 2.3. 锁的选择和影响
      • 2.4. 注意事项
      • 2.5 锁的操作,手动释放锁,显式地获取锁(属性名第一个lock代表的是)
  • 三、ThreadLocal
    • 1. 基本用法
    • 2. ThreadLocal 的关键方法
    • 3. 使用场景
    • 4. 注意事项
    • 5. 示例:使用 ThreadLocal 进行数据库连接管理
  • 四、数据库用来设置某个字段的默认值。
  • 五、 把redis的json转为对象
    • 1. 从 Redis 获取 JSON 数据
    • 2 使用 Gson

(一切都是自己的笔记!!!请勿上纲上线)

一、面试题小记

在这里插入图片描述
在这里插入图片描述
java10 本地类型推断
在这里插入图片描述
switch表达式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、加锁synchronized

1. 先看代码

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.HashSet;public class Example {private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");private static final Set<String> dates = new HashSet<>();private static final CountDownLatch countDownLatch = new CountDownLatch(10);private static final ExecutorService pool = Executors.newFixedThreadPool(10);public void addDate(int i) {Calendar calendar = Calendar.getInstance(); // 创建Calendar实例int finalI = i; // final变量用于在lambda表达式中使用pool.execute(() -> {synchronized (simpleDateFormat) { // 对simpleDateFormat加锁// 时间增加calendar.add(Calendar.DATE, finalI);// 通过simpleDateFormat把时间转换成字符串String dateString = simpleDateFormat.format(calendar.getTime());// 把字符串放入Set中dates.add(dateString);}// CountDowncountDownLatch.countDown();});}public void awaitCompletion() throws InterruptedException {countDownLatch.await(); // 等待所有线程完成pool.shutdown(); // 关闭线程池}public static void main(String[] args) throws InterruptedException {Example example = new Example();for (int i = 0; i < 10; i++) {example.addDate(i); // 添加日期}example.awaitCompletion(); // 等待所有线程完成System.out.println(dates); // 输出结果}
}

2. synchronized 讲解

synchronized 是 Java 中用于实现线程同步的关键字,确保多个线程在执行某段代码时不会发生冲突,从而保证线程安全。它有两种主要的使用方式:同步代码块和同步方法。

2.1. 同步代码块

通过 synchronized 关键字修饰的代码块可以确保在同一时间只有一个线程可以执行该代码块中的代码。以下是如何使用同步代码块的示例:

public class SynchronizedBlockExample {private final Object lock = new Object(); // 用于锁定的对象public void doWork() {synchronized (lock) { // 对 lock 对象加锁// 临界区代码System.out.println("Thread " + Thread.currentThread().getName() + " is working.");} // 离开synchronized块时自动释放锁}
}

锁定对象:synchronized (lock) 表示对 lock 对象加锁。只有获取了 lock 锁的线程可以执行 synchronized 块中的代码。
自动释放:当线程退出 synchronized 块(包括发生异常的情况),JVM 会自动释放锁。

2.2. 同步方法

synchronized 也可以用于修饰方法,这样整个方法在同一时间只会被一个线程执行。同步方法可以分为实例方法和静态方法:

实例同步方法:锁定的是方法所在对象的实例。

public class SynchronizedMethodExample {public synchronized void instanceMethod() {// 临界区代码System.out.println("Thread " + Thread.currentThread().getName() + " is working.");}
}

静态同步方法:锁定的是类的 Class 对象。静态同步方法同一时间只允许一个线程访问类的所有实例的静态方法。

public class SynchronizedStaticMethodExample {public static synchronized void staticMethod() {// 临界区代码System.out.println("Thread " + Thread.currentThread().getName() + " is working.");}
}

2.3. 锁的选择和影响

对象锁:在同步代码块中指定的对象(例如 lock 对象)会作为锁对象。这种锁是对象级别的,不同对象的同步代码块不会互相影响。

类锁:对于静态同步方法,锁的是类的 Class 对象。这意味着类的所有静态同步方法是互斥的。

锁的粒度:选择锁的粒度时需要考虑性能和安全。粒度过大(例如锁住整个方法或类)可能导致性能下降,而粒度过小则可能无法有效防止数据竞争。

2.4. 注意事项

死锁:多个线程可能互相等待对方释放锁,导致系统僵死。应避免复杂的锁定顺序和嵌套锁。

性能开销:同步会引入性能开销,因为它涉及到线程上下文的切换和锁管理。只在必要时使用同步,尽量减少锁的持有时间。

不可重入:虽然 synchronized 是可重入的(即同一个线程可以多次获取同一个锁),但在设计时仍需注意避免复杂的锁定结构。

总结
同步代码块:通过 synchronized (lock) 对特定的对象进行加锁,确保只有一个线程能执行代码块中的代码。
同步方法:通过 synchronized 关键字修饰实例方法或静态方法,确保方法在同一时间内只有一个线程能执行。

2.5 锁的操作,手动释放锁,显式地获取锁(属性名第一个lock代表的是)

lock.lock():显式地获取锁。
lock.unlock():在 finally 块中释放锁,以确保即使发生异常也能释放锁。

三、ThreadLocal

ThreadLocal 是 Java 中用于实现线程局部存储的类,允许每个线程在访问某个变量时拥有自己的独立副本。这样,每个线程都可以操作自己的副本而不会与其他线程的副本发生冲突。ThreadLocal 主要用于需要线程隔离的场景,例如每个线程需要独立的配置、数据库连接、会话等。

1. 基本用法

ThreadLocal 的基本用法非常简单。可以通过 ThreadLocal 提供的 get 和 set 方法来获取和设置当前线程的值。

public class ThreadLocalExample {private static final ThreadLocal<Integer> threadLocalValue = ThreadLocal.withInitial(() -> 1);public static void main(String[] args) {Runnable task = () -> {// 获取当前线程的线程局部变量值Integer value = threadLocalValue.get();System.out.println("Initial Value: " + value);// 设置当前线程的线程局部变量值threadLocalValue.set(value + 1);// 再次获取当前线程的线程局部变量值System.out.println("Updated Value: " + threadLocalValue.get());};// 创建多个线程,测试每个线程的线程局部变量是否独立Thread thread1 = new Thread(task);Thread thread2 = new Thread(task);thread1.start();thread2.start();}
}

2. ThreadLocal 的关键方法

ThreadLocal.withInitial(Supplier<? extends T> supplier):创建一个 ThreadLocal 实例,并设置初始值。这个方法可以指定一个 Supplier 来提供初始值。

T get():获取当前线程的 ThreadLocal 变量的值。如果当前线程没有设置过这个值,则会调用 initialValue() 方法来设置初始值。

void set(T value):设置当前线程的 ThreadLocal 变量的值。

void remove():移除当前线程的 ThreadLocal 变量的值,防止内存泄漏。

3. 使用场景

ThreadLocal 主要适用于以下场景:

数据库连接:每个线程需要一个独立的数据库连接。

用户会话:每个线程需要维护独立的用户会话信息。

配置和上下文:每个线程需要独立的配置或上下文信息。

4. 注意事项

内存泄漏:如果 ThreadLocal 的 ThreadLocalMap 中的 ThreadLocal 引用被持有而没有被正确清理(通过调用 remove() 方法),可能会导致内存泄漏,特别是在长期运行的应用中。由于 ThreadLocal 是线程本地的,它的值只会在当前线程中有效,所以如果线程池中线程长时间存在而没有被回收,就可能导致内存泄漏。

适用性:ThreadLocal 适用于线程独立的场景。如果不同线程之间需要共享数据,考虑使用其他同步机制(如 synchronized 或 Concurrent 数据结构)。

性能:虽然 ThreadLocal 提供了线程隔离,但它也有一定的性能开销。避免在高并发场景中频繁使用 ThreadLocal,特别是当线程局部变量对象较大或线程较多时。

5. 示例:使用 ThreadLocal 进行数据库连接管理

public class DatabaseConnectionManager {private static final ThreadLocal<Connection> connectionHolder = ThreadLocal.withInitial(() -> {try {return DriverManager.getConnection("jdbc:yourdb", "username", "password");} catch (SQLException e) {throw new RuntimeException(e);}});public static Connection getConnection() {return connectionHolder.get();}public static void closeConnection() {Connection connection = connectionHolder.get();if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();} finally {connectionHolder.remove(); // 清理线程局部变量}}}
}

在这个示例中,每个线程会有自己独立的数据库连接,使用完后记得调用 remove() 方法以避免潜在的内存泄漏。

四、数据库用来设置某个字段的默认值。

ALTER TABLE in_inspect_info
ALTER result SET DEFAULT 1;

五、 把redis的json转为对象

从 Redis 中获取 JSON 数据并将其转换为 Java 对象,通常涉及以下几个步骤:

从 Redis 获取 JSON 数据: 你可以使用 Redis 客户端库(例如 Jedis 或 Lettuce)从 Redis 中获取存储的 JSON 数据。
将 JSON 转换为 Java 对象: 使用 JSON 解析库(如 Jackson 或 Gson)将 JSON 字符串转换为 Java 对象。
以下是详细的步骤和代码示例:

1. 从 Redis 获取 JSON 数据

假设你使用 Jedis 作为 Redis 客户端库,首先从 Redis 中获取 JSON 数据:

import redis.clients.jedis.Jedis;public class RedisExample {public static void main(String[] args) {// 创建 Jedis 实例Jedis jedis = new Jedis("localhost", 6379);// 从 Redis 中获取 JSON 数据String jsonData = jedis.get("yourRedisKey");// 关闭 Jedis 连接jedis.close();// 打印获取到的 JSON 数据System.out.println(jsonData);}
}
  1. 将 JSON 转换为 Java 对象
    使用 Jackson 或 Gson 库将 JSON 字符串转换为 Java 对象。以下是使用 Jackson 和 Gson 的示例。

使用 Jackson
添加依赖(如果你使用 Maven,可以在 pom.xml 中添加以下依赖):

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.2</version>
</dependency>

转换 JSON:

import com.fasterxml.jackson.databind.ObjectMapper;public class JsonExample {public static void main(String[] args) {String jsonData = "{\"term_sn\":\"12345\",\"devid_qi_cname\":\"设备名称\",\"devid_qi_time\":\"2024-07-22T10:00:00Z\",\"inspect_list\":[{\"code\":\"INS001\",\"name\":\"检查1\",\"term_sn\":\"TERM001\",\"inspect_ask\":\"检查要求1\",\"result\":\"结果1\"},{\"code\":\"INS002\",\"name\":\"检查2\",\"term_sn\":\"TERM002\",\"inspect_ask\":\"检查要求2\",\"result\":\"结果2\"}],\"dq_info_file_ids\":98765,\"devidqi_state\":1}";ObjectMapper objectMapper = new ObjectMapper();try {// 将 JSON 转换为 Java 对象MyClass myObject = objectMapper.readValue(jsonData, MyClass.class);// 打印转换后的对象System.out.println(myObject);} catch (Exception e) {e.printStackTrace();}}
}class MyClass {private String term_sn;private String devid_qi_cname;private String devid_qi_time;private List<Inspect> inspect_list;private int dq_info_file_ids;private int devidqi_state;// Getter 和 Setter 方法@Overridepublic String toString() {return "MyClass{" +"term_sn='" + term_sn + '\'' +", devid_qi_cname='" + devid_qi_cname + '\'' +", devid_qi_time='" + devid_qi_time + '\'' +", inspect_list=" + inspect_list +", dq_info_file_ids=" + dq_info_file_ids +", devidqi_state=" + devidqi_state +'}';}
}class Inspect {private String code;private String name;private String term_sn;private String inspect_ask;private String result;// Getter 和 Setter 方法@Overridepublic String toString() {return "Inspect{" +"code='" + code + '\'' +", name='" + name + '\'' +", term_sn='" + term_sn + '\'' +", inspect_ask='" + inspect_ask + '\'' +", result='" + result + '\'' +'}';}
}

2 使用 Gson

添加赖(如果你使用 Maven,可以在 pom.xml 中添加以下依赖):

<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.10.1</version>
</dependency>

转换 JSON:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;public class JsonExample {public static void main(String[] args) {String jsonData = "{\"term_sn\":\"12345\",\"devid_qi_cname\":\"设备名称\",\"devid_qi_time\":\"2024-07-22T10:00:00Z\",\"inspect_list\":[{\"code\":\"INS001\",\"name\":\"检查1\",\"term_sn\":\"TERM001\",\"inspect_ask\":\"检查要求1\",\"result\":\"结果1\"},{\"code\":\"INS002\",\"name\":\"检查2\",\"term_sn\":\"TERM002\",\"inspect_ask\":\"检查要求2\",\"result\":\"结果2\"}],\"dq_info_file_ids\":98765,\"devidqi_state\":1}";Gson gson = new Gson();// 将 JSON 转换为 Java 对象MyClass myObject = gson.fromJson(jsonData, MyClass.class);// 打印转换后的对象System.out.println(myObject);}
}class MyClass {private String term_sn;private String devid_qi_cname;private String devid_qi_time;private List<Inspect> inspect_list;private int dq_info_file_ids;private int devidqi_state;// Getter 和 Setter 方法@Overridepublic String toString() {return "MyClass{" +"term_sn='" + term_sn + '\'' +", devid_qi_cname='" + devid_qi_cname + '\'' +", devid_qi_time='" + devid_qi_time + '\'' +", inspect_list=" + inspect_list +", dq_info_file_ids=" + dq_info_file_ids +", devidqi_state=" + devidqi_state +'}';}
}class Inspect {private String code;private String name;private String term_sn;private String inspect_ask;private String result;// Getter 和 Setter 方法@Overridepublic String toString() {return "Inspect{" +"code='" + code + '\'' +", name='" + name + '\'' +", term_sn='" + term_sn + '\'' +", inspect_ask='" + inspect_ask + '\'' +", result='" + result + '\'' +'}';}
}

关键点总结
选择合适的库: Jackson 和 Gson 都是流行的 JSON 解析库,可以根据你的需求选择其中一个。
确保字段匹配: JSON 字段名称应与 Java 类中的字段名称匹配,注意大小写和命名风格。
处理日期: 如果 JSON 中包含日期,确保正确解析和格式化日期字段。

相关文章:

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题&#xff0c;有synchronized锁&#xff0c;threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作&#xff0c;手动释放锁&#xff0c;显式地获取锁&#xff08;属…...

Apache Spark:深度解析

文章目录 引言Apache Spark 官网链接Spark 的原理1. 核心组件2. 弹性分布式数据集&#xff08;RDD&#xff09;3. 执行模型 基础使用1. 环境搭建2. 示例代码 高级功能1. DataFrame 和 Dataset2. 机器学习3. 流处理 优缺点优点缺点 结论 引言 Apache Spark 是一个快速、通用、可…...

使用umi作为模板如何实现权限管理

三种权限管理的方法&#xff1a; 在做后台管理系统时&#xff0c;难免会使用到权限管理&#xff0c;权限管理方式有三种&#xff0c;分别是&#xff1a;路由、守卫、后端配合。 路由&#xff1a;通过动态路由&#xff0c;根据登录人员不同注册不同的路由&#xff0c;直接让没…...

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识 4.1.1 信息安全的概念4.1.1.1 信息安全的范围4.1.1.1.1 设备安全4.1.1.1.2 数据安全4.1.1.1.3 内容安全4.1.1.1.4 行为安全 4.1.2 信息存储安全4.1.2.1 信息使用的安全4.1.2.1.1 用户的标识与验证4.1.2.1.…...

【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架

探索Rust游戏开发引擎&#xff1a;选择合适的工具 前言 随着Rust语言的不断发展&#xff0c;越来越多的游戏开发者开始将其视作构建游戏引擎和框架的理想选择。本文将介绍几个用于Rust语言的游戏引擎和框架&#xff0c;分别对其核心功能、使用场景、安装与配置以及API进行概览…...

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案

近年来&#xff0c;星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作&#xff0c;推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术&#xff0c;以及信雅达在金融领域的深厚积累&#xff0c;围绕数…...

自定义维度映射:Kylin Cube设计的高级玩法

自定义维度映射&#xff1a;Kylin Cube设计的高级玩法 在数据仓库领域&#xff0c;Apache Kylin以其高性能的分析能力而闻名。Kylin通过构建多维数据立方体&#xff08;Cube&#xff09;来实现对大数据集的快速查询。Cube设计中的维度映射是优化查询性能的关键环节。本文将探讨…...

c17 新特性 字面量,变量,函数,隐藏转换等

导论 c17新特性引入了许多新的语法&#xff0c;这些语法特性更加清晰&#xff0c;不像传统语法&#xff0c;语义飘忽不定&#xff0c;比如‘a’你根本不知道是宽字符还是UTF-8 字符。以及测试i i&#xff0c;最后结果到底是多少。这种问题很大情况是根据编译器的优化进行猜测&a…...

git操作的一些备忘录

1.回退本地合并 git merge --abort 2.撤销上一次的提交 方法一&#xff1a;(已经提交到git线上仓库了&#xff0c;git reset操作&#xff0c;会把之前提交的都删除&#xff0c;感觉有点危险) 想要让Git回退历史&#xff0c;有以下步骤&#xff1a; 使用git log命令&#xff0c…...

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom...

常见的CSS属性(一)——字体、文本、边框、内边距、外边距、背景、行高、圆角、透明度、颜色值

一、字体 二、文本 三、边框 四、外边距 五、内边距 六、背景 七、行高 八、圆角 九、透明度 九、颜色值 元素的继承性是指给父元素设置了某些属性&#xff0c;子元素或后代元素也会有作用。 一、字体 “font-*”是字体相关的属性&#xff0c;具有继承性。代码如下&a…...

react入门到实战-day2-7.21

昨天晚上刚学完已经一点了&#xff0c;来不及写笔记&#xff0c;主要是想睡觉哈&#xff0c;所以今天补上&#xff0c;我发现效率还挺高的&#xff0c;今天重新做笔记&#xff0c;加固了昨天的知识点&#xff0c;要不以后都这样子哈&#xff0c;学完第二天再写哈&#xff0c;要…...

Springboot集成Elasticsearch High Level REST Client实现增删改查实战

获取源码&#x1f6a9; 需要完整代码资料&#xff0c;请一键三连后评论区留下邮箱&#xff0c;安排发送&#xff01;&#xff01;&#xff01;&#x1f916; 什么是High Level REST Client&#xff1f; Elasticsearch 的 High Level REST Client 是一个用于与 Elasticsearch…...

2023河南萌新联赛第(二)场 南阳理工学院

A. 国际旅行Ⅰ 题目&#xff1a; 思路&#xff1a; 因为题意上每个国家可以相互到达&#xff0c;所以只需要排序&#xff0c;输出第k小的值就可以了。 AC代码&#xff1a; #include<bits/stdc.h> #define int long long #define IOS ios::sync_with_stdio(0);cin.tie…...

使用Docker Compose给自己上传的JAR打包成镜像并自动启动容器

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过编写一个docker-compose.yml文件&#xff0c;可以简化Docker容器的管理。本文将介绍如何使用Docker Compose将一个上传的JAR文件打包成Docker镜像&#xff0c;并在容器中自动启动该应用程序。 一、准备工作…...

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证&#xff0c;它包含一个公钥和一些身份信息&#xff0c;用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下&#xff1a; 由权威机构颁发&…...

DML数据库的数据类型

DML 用于改变数据表中的数据的操作语言。 包括INSERT&#xff08;将数据插入到数据表中&#xff09;,UPDATE&#xff08;更新表中已经存在的数据&#xff09;,DELETE&#xff08;删除表中已经存在的数据&#xff09; INSERT 用法 INSERT INTO 表名&#xff08;字段1&#x…...

@RequestParam和@PathVariable 处理 HTTP 请求参数的注解

RequestParam 请求参数 可解析前端get请求路径后以问号拼接的参数,查询参数是 URL 后面的问号 (?) 后跟的一系列键值对,RequestParam 可以设置参数是否是必需的&#xff08;使用 required 属性&#xff09; GetMapping("/users") public String getUsers(RequestPar…...

《代码大全》读书笔记-第Ⅰ部分 奠定基础

0.欢迎来到软件构建世界 什么是软件构件&#xff1a; 对于非正式及项目&#xff0c;会觉得罗列出来的这些活动太过于繁复。但是这些对于正式项目都是很有必要的(大部分人都没经历过&#xff0c;比如说我)。一般一些小公司主要也就是需求分析、编码、开发人员自测、集成测试这几…...

杰发科技Bootloader(1)—— Keil配置地址

IAP方式 BootLoader方式 UDSBoot方式 AC7801的地址分配 用户空间的的地址从8000000开始分配&#xff0c;大小是64页&#xff0c;即128K。 RAM地址从20000000开始 基于UDSboot调试-Boot 烧录Boot之后&#xff0c;ATClinkTool无法连接 用keil查看内存&#xff0c;地址到8005388…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...