优秀是一种习惯!!!
AmethystFOB   >   标签墙   >   后端 标签

文件处理问题集合 有更新!

2023-11-29

文件处理问题集合 一、简单文件上传01 new FileUtils().upload(file, "/home/nginx/html/resource/", fileName); return Result.success("资源上传成功", resource); public void upload(MultipartFile file, String url, String fileName){ try{ if (file.isEmpty()){ System.out.println("文件为空!"); return; } copyFile(file.getInputStream(), url+fileName); } catch (IOException e) { e.printStackTrace(); } finally { deleteTempFile(file); } } public static boolean copyFile(InputStream is,String newPath){ OutputStream os = null; try { // 1K的数据....

Linux问题汇总 有更新!

2023-11-29

Linux问题汇总 一、linux查看3000端口是否被占用 要查看 Linux 系统上的端口占用情况,可以使用以下命令来检查 3000 端口是否被占用: sudo lsof -i :3000 这条命令会列出所有正在使用 3000 端口的进程和应用程序。如果有进程在使用该端口,将会输出相关信息;如果端口没有被占用,则不会有任何输出。 另外,你也可以使用 netstat 命令来查询端口占用情况。以下是使用 netstat 命令检查 3000 端口的示例: sudo netstat -tuln | grep 3000 该命令会显示所有监听状态的端口,并使用管道过滤出其中的 3000 端口。如果该端口被占用,输出结果中会有相关的信息;如果没有被占用,则没有输出结果。 请确保以超级用户或具有适当权限的用户身份运行以上命令,这样才能获得正确的结果。 二、linux查看使用9000端口的资源路径 要查看 Linux 上使用 9000 端口的资源路径,可以使用以下命令: sudo lsof -i :9000 该命令将列出所有正在使用 9000 端口的进程及其相关信息。在输出中,你可以查找 CO....

检索问题汇总 有更新!

2023-11-29

检索问题汇总 一、fact检索 事实检索(Fact Retrieval)是一种信息检索技术,旨在从大规模语料库中提取特定的事实或答案。它与一般的文本检索不同,因为它专注于返回准确的、与查询相关的事实,而不仅仅是相关的文档或文章。 事实检索的目标是根据用户提出的查询,从结构化或非结构化数据中直接检索出最相关的事实。这些数据可以包括知识图谱、数据库、文本文档、网页等。事实检索技术通常需要通过自然语言处理和信息抽取等方法来理解查询和文本,并将其映射到潜在的事实表示形式。 以下是一些常见的事实检索任务: 简单事实检索:根据用户提出的简短查询,例如"谁是美国总统?"或"世界上最高的山峰是哪座?",返回明确的答案,如"乔治·华盛顿"和"珠穆朗玛峰"。 复杂事实检索:处理更复杂的查询,包括多个条件和关系。例如,"哪个演员获得过奥斯卡奖,并且出演了《阿甘正传》?"需要同时满足奥斯卡奖获得者和出演《阿甘正传》这两个条件,返回相关的演员姓名。 实体属性检索:查询特定实体的属性信息。例如,"马拉多纳的国籍是什么?"需要返回"阿根廷"作为答案。 事件时间线检索:根据关键词或实体,检索与特定事件相关的时间线信息....

性能调优问题汇总 有更新!

2023-11-29

性能调优问题汇总 一、java后台如何控制qps 要控制Java后台的QPS(每秒请求量),可以采取以下几种方法: 限流:使用限流算法(如令牌桶算法、漏桶算法)对请求进行限制,确保每秒只能处理一定数量的请求。可以利用开源框架,如Guava RateLimiter或者Spring Cloud Gateway中的限流组件来实现。 线程池管理:通过控制线程池的大小和工作队列长度,限制同时处理的请求数量。可以根据系统负载情况动态调整线程池参数。 缓存:对于一些计算复杂、数据量大且变化不频繁的请求,可以在处理后将结果缓存起来,并设置合适的过期时间,以减轻后端服务器的压力。 异步处理:对于一些耗时较长的请求,可以采用异步处理方式,将请求放入消息队列或者线程池中异步处理,这样可以提高系统的吞吐量。 升级硬件或扩展服务器:如果以上方法无法满足需求,可以考虑升级服务器硬件或者增加服务器的数量,以提高系统的处理能力。 需要根据具体的业务场景和系统需求选择合适的方法进行控制,综合考虑系统的性能、资源消耗和用户体验等因素。 二、

Kafka使用问题 有更新!

2023-11-29

Kafka使用问题 一、死信队列 死信队列(Dead Letter Queue,简称DLQ)是一种消息中间件的特性,用于处理无法被消费者正确处理的消息。当消息无法被正常消费,并且不能被重新投递给消费者时,这些消息将被发送到死信队列中。 死信队列通常用于以下情况: 消息超时:如果消息在一定时间内没有被消费者处理,可以将其发送到死信队列中。这可能是由于消费者出现故障、网络延迟或消费者无法及时处理消息等原因导致的。 消息消费失败:当消息无法被消费者正确处理时,例如消费者无法解析消息格式、处理消息时发生异常等情况,可以将这些消息发送到死信队列中。 消息达到最大重试次数:有些消息中间件允许设置消息的最大重试次数,当消息达到最大重试次数仍然无法被正确处理时,将其发送到死信队列中。这可以避免消息在系统中无限循环重试,影响系统性能。 通过将无法被消费者处理的消息发送到死信队列,可以让开发人员对这些问题消息进行监控、分析和处理。通常,开发人员会通过监控死信队列中的消息来发现和解决系统中的问题,并对消息进行重新处理或者采取其他措施来确保消息能够被正确地处理。 需要注意的是,死信队列并不是一种绝对安全的解决....

集合使用问题汇总 有更新!

2023-11-29

集合使用问题 一、Map数组去重 import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class MapArrayDuplicateRemovalExample { public static void main(String[] args) { // 假设有一个Map数组 Map<String, Integer>[] mapArray = new HashMap[5]; // 初始化Map数组 for (int i = 0; i < mapArray.length; i++) { mapArray[i] = new HashMap<>(); } // 添加一些数据到Map数组中(包含重复的数据) mapArray[0].put("A", 1); mapArray[1].put("B", 2); mapArray[2].put("C", 3); mapArray[3].put("A", 1); mapArray[4].put("D", 4); // ....

序列化问题汇总 有更新!

2023-11-29

序列化问题汇总 一、用Java将svg图片转图片流返回前端 在Java中,你可以使用第三方库Batik来将SVG图片转换为图片流,并将其返回给前端。以下是一个示例代码: import org.apache.batik.dom.svg.SVGDOMImplementation; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml....

类使用问题汇总 有更新!

2023-11-29

类使用问题汇总 一、如下内部类,如何在外部给类B中setTitle public class A{ private class B{ private String title; } } 类B只有public时才能 A.B b = a.new B();创建 只有当内部类 B 被声明为公共类时,才能在外部类 A 以外的地方创建 B 的实例。 因此,在外部给类 B 中的 title 属性赋值,需要先创建外部类 A 的实例,然后通过该实例创建内部类 B 的实例,并使用该实例来访问和设置 title 属性。以下是一个示例代码: public class A { public class B { private String title; public void setTitle(String title) { this.title = title; } public String getTitle() { return title; } } public static void main(String[] args) { A a = new A(); A.B b = a.new B(); b.s....

websocket使用问题汇总 有更新!

2023-11-29

websocket使用问题 一、websocket推送功能中只使用session.isOpen()来判断连接是否建立成功可以推送是否可行? WebSocket 推送功能中使用 session.isOpen() 判断连接是否建立成功是不够可靠的。虽然在大多数情况下,isOpen() 方法可以用来检查 WebSocket 连接是否打开,但它并不能保证连接的稳定性和可靠性。 在 WebSocket 建立连接期间,服务器和客户端需要完成一些握手过程,验证双方的身份,协调双方的协议选项等操作。只有在握手成功之后,才能确定 WebSocket 连接已经建立成功。因此,在发送消息前应该确保连接已经完全建立。 如果仅使用 session.isOpen() 来判断连接是否建立成功,可能会忽略掉一些异常情况,例如: 客户端在握手期间关闭了连接。 服务器在握手期间出现异常,导致连接未正常建立。 网络故障或其他原因导致 WebSocket 连接断开。 为了确保 WebSocket 推送的可靠性,我们应该尽可能多地掌握连接状态的信息,并及时处理异常情况。可以考虑使用心跳机制、定时重连、异常监控等方式来提高连接的....

Java8 Stream使用问题汇总 有更新!

2023-11-29

Java8 Stream使用问题 一、stream中map与foreach的区别示例 map() 方法:将一个 Stream 中的元素映射成另一个 Stream 中的元素。常用于进行数据转换或提取某些信息。例如,将一个字符串列表中的每个字符串转换为大写形式: List<String> list = Arrays.asList("hello", "world"); List<String> upperList = list.stream().map(String::toUpperCase).collect(Collectors.toList()); forEach() 方法:遍历 Stream 中的所有元素并对其进行某些操作。不会改变元素的值,也不会产生新的 Stream。例如,打印一个整型列表中的所有元素: List<Integer> list = Arrays.asList(1, 2, 3); list.stream().forEach(System.out::println); 需要注意的是,在使用 forEach() 方法时,如果需要对元....

工具类使用问题汇总 有更新!

2023-11-29

工具类使用问题 一、Optional.ofNullable如果值为空集合[],则Optional.ofNullable(value).isPresent()返回true 是的,如果将一个空集合 [] 作为参数传递给 Optional.ofNullable() 方法进行包装,则会返回一个包含空集合的 Optional 对象,而不是一个空的 Optional 对象。 这是由于在 Java 中,空集合 [] 并不等同于 null 值,而是一个长度为 0 的数组。因此,当将空集合 [] 传递给 Optional.ofNullable() 方法时,该方法会将其视为一个非空值,并返回一个包含该空集合的 Optional 对象。 下面是一个示例代码,展示了如何使用 Optional.ofNullable() 对空集合进行包装: java List<String> list = new ArrayList<>(); Optional<List<String>> optional1 = Optional.ofNullable(list); // 包装空集合....

Mybatis Plus使用问题汇总 有更新!

2023-11-29

Mybatis Plus使用问题 一、用mybatis plus查询,mysql查询String类型字段a在集合List b中的所有数据 使用 MyBatis Plus 进行 MySQL 查询,可以通过使用 in 关键字和 List 参数来实现查询字符串类型字段在给定集合中的所有数据。下面是一个示例代码: import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class YourService { @Autowired private YourMapper yourMapper; public List<YourEntity> queryDataInList(List<String> li....

JDK问题汇总 有更新!

2023-11-29

JDK问题 一、jdk32编译后的代码和jdk64编译后的代码是否不同 在Java环境中,JDK 32位和JDK 64位是不同的软件包,分别提供了对应平台的编译器、工具和运行时库等。因此,使用JDK 32位编译的代码和使用JDK 64位编译的代码在二进制上是有区别的,不能通用。 具体而言,由于32位和64位平台的CPU架构不同,对于编译后的目标代码而言,它们所使用的指令集也会有所不同。这就意味着,使用32位编译器编译出来的代码不能直接在64位平台上运行,也不能够充分利用64位处理器所提供的特性和性能优势。同样地,使用64位编译器编译出来的代码也不能在32位平台上运行。 因此,如果需要在不同平台上运行Java程序,通常需要根据不同平台提供对应的JDK版本,并使用对应平台的编译器进行编译。同时,在跨平台应用开发中还可以采用一些工具或框架,如Apache Maven或Gradle等,使得在不同平台下进行编译和打包变得更加便捷。

算法刷题 有更新!

2023-11-28

算法刷题 算法入门: 1、704. 二分查找 题目: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2: 输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1 提示: 你可以假设 nums 中的所有元素是不重复的。 n 将在 [1, 10000]之间。 nums 的每个元素都将在 [-9999, 9999]之间。 解答: class Solution{ public int search(int[] nums, int target){ int low = 0; int hight = nums.length - 1; while(low <= height){ } } }

SQL刷题Day07~Day10 有更新!

2023-11-28

SQL刷题 SQL入门题: Day07~Day08 计算函数 18、1693. 每天的领导和合伙人 题目: 表:dailysales column nametype date_iddate make_namevarchar lead_idint partner_idint 该表没有主键。该表包含日期、产品的名称,以及售给的领导和合伙人的编号。名称只包含小写英文字母。 写一条 SQL 语句,使得对于每一个 date_id 和 make_name,返回不同的 lead_id 以及不同的 partner_id 的数量。 按 任意顺序 返回结果表。查询结果格式如下示例所示。 示例1:输入:DailySales表: date_idmake_namelead_idpartner_id 2020-12-8toyota01 2020-12-8toyota10 2020-12-8toyota12 2020-12-7toyota02 2020-12-7toyota01 2020-12-8honda12 2020-12-8honda21 2020-12-7honda01 2020-12-7honda12 2....

表结构设计之主键的选择(1)——避坑UUID 有更新!

2023-11-28

表结构设计之分布式的主键生成策略的选择(1)——避坑UUID UUID作为主键,再插入数据的时候对于系统的压力是非常大的。如在某个时间点时会出现磁盘的IO异常,导致应用经常出现高延迟。 UUID(全球唯一标识符 Universally Unique Identifier):00000000-0000-0000-0000-000000000000共8+4+4+4+12=32位,业界主要有5中UUID的生成机制: 5种UUID的生成机制 基于时间的UUID 能保证不同设备UUID是唯一的 在同一设备上生成UUID可能重复 利用时间戳 和 设备的具体特性生成唯一编号。 不同设备上因为其环境不同,可以保证UUID是唯一的。 但是在极端环境下:同一设备同一毫秒时间下它生成的UUID就可能会出现重复。因此,如果是超高并发的系统,这种情况还不少。 所以实际开发中不怎么使用基于时间的UUID DCE安全的UUID DCE(身份验证和安全服务) 涉及侵犯用户隐私 有损时间戳导致精度丢失 DCE即使用用户的某些特征(用户名、邮箱等相关的身份标识)来生成,欧美广泛抵制。 所以实际开发中不怎么使用DCE安全的....

SQL刷题Day01~Day06 有更新!

2023-11-28

SQL刷题 SQL入门题: Day01选择: 1、1757. 可回收且低脂的产品 题目: 表:Products Column NameType product_idint low_fatsenum recyclableenum product_id 是这个表的主键。 low_fats 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品是低脂产品,'N' 表示不是低脂产品。 recyclable 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品可回收,而 'N' 表示不可回收。写出 SQL 语句,查找既是低脂又是可回收的产品编号。 返回结果 无顺序要求 。查询结果格式如下例所示: Products表: product_idlow_fatsrecyclable 0YN 1YY 2NY 3YY 4NN Result表: product_id 1 3 只有产品 id 为 1 和 3 的产品,既是低脂又是可回收的产品。 解答:关于对称逻辑 方法一: select product_id from products where low_fats = ....

缓存、二级缓存(J2Cache为例)、多级缓存

2021-10-18

以器承己,以才示人,以气度世,不虑也。 一、缓存架构 缓存就是将数据从读取较慢的介质上读取出来放到读取较快的介质上,如磁盘到内存。平时我们会将数据存储到磁盘上,如:数据库。如果每次都从数据库里读取,会因为磁盘本身的 IO 影响读取速度,所以就有了像 redis 这种的内存缓存。可以将数据读取出来放到内存里,这样当需要获取数据时,就能够直接从内存中拿到数据返回,能够很大程度提高速度。但是一般 redis 是单独部署成集群,所以会有网络 IO 上的消耗,虽然与 redis 集群的链接已经有连接池这种工具,但是数据传输上也还是会有一定消耗。所以就有了应用内缓存,如:Caffeine。当应用内缓存有符合条件的数据时,就可以直接使用,而不用通过网络到 redis 中去获取,这样就形成了二级缓存。应用内缓存作为一级缓存,远程缓存(如 redis)作为二级缓存。 在整个软件架构中,分为的这 5 层每一层都可以添加缓存: 本地缓存(进程内缓存)与分布式缓存(进程外缓存)的对比: 本地缓存之间的对比: 关于本地缓存选型回答:本地缓存中caffeine看非因qps最好,如果jdk,集群,持久化有限制,只能....