Kafka使用问题 有更新!
Kafka使用问题 一、死信队列 死信队列(Dead Letter Queue,简称DLQ)是一种消息中间件的特性,用于处理无法被消费者正确处理的消息。当消息无法被正常消费,并且不能被重新投递给消费者时,这些消息将被发送到死信队列中。 死信队列通常用于以下情况: 消息超时:如果消息在一定时间内没有被消费者处理,可以将其发送到死信队列中。这可能是由于消费者出现故障、网络延迟或消费者无法及时处理消息等原因导致的。 消息消费失败:当消息无法被消费者正确处理时,例如消费者无法解析消息格式、处理消息时发生异常等情况,可以将这些消息发送到死信队列中。 消息达到最大重试次数:有些消息中间件允许设置消息的最大重试次数,当消息达到最大重试次数仍然无法被正确处理时,将其发送到死信队列中。这可以避免消息在系统中无限循环重试,影响系统性能。 通过将无法被消费者处理的消息发送到死信队列,可以让开发人员对这些问题消息进行监控、分析和处理。通常,开发人员会通过监控死信队列中的消息来发现和解决系统中的问题,并对消息进行重新处理或者采取其他措施来确保消息能够被正确地处理。 需要注意的是,死信队列并不是一种绝对安全的解决....
Mybatis使用问题汇总 有更新!
Mybatis使用问题 一、mybatis获取表数据返回map,用ArrayList<HashMap<String, Object>>接收,数据既有Double类型又有Integer类型,该如何返回相同的类型 在使用 MyBatis 获取表数据返回 Map 时,我们可以通过设置 typeHandler 来指定对应列的数据类型。默认情况下,MyBatis 会将数值型的数据统一解析成 Double 类型,所以需要指定相应的 typeHandler 才能让 MyBatis 返回正确的数据类型。 例如,假设我们的表中有一个字段 age,其中既有 Integer 类型的数据,又有 Double 类型的数据,我们希望在查询时能够返回与数据库中存储的数据类型一致的结果,可以按照以下步骤进行操作: 1.创建自定义的 typeHandler 类,继承 BaseTypeHandler,并指定泛型为 Object。 public class MyNumberTypeHandler extends BaseTypeHandler<Object> { @Override pu....
加密算法问题汇总 有更新!
加密算法问题 一、base64加密后太长,解决办法? Base64是一种将二进制数据编码为ASCII字符的方法,它的编码结果通常会比原始数据长三分之一左右。因此,如果使用Base64对较大的二进制数据进行编码时,可能会导致编码结果过长。 针对这个问题,可以通过以下几种方式进行优化: 压缩数据:在进行Base64编码之前,先对原始数据进行压缩,可以使用一些常见的算法如Gzip或Deflate等。这样可以在一定程度上减少数据的长度,从而减少Base64编码结果的长度。 分片处理:如果需要将较大的数据进行加密,可以将数据分成若干个较小的块并分别进行Base64编码,然后再将编码结果拼接起来。这样虽然会增加一定的处理时间和代码复杂度,但是可以缩短总体编码结果的长度。 使用其他编码方式:除了Base64外,还有一些其他的编码方式可以将二进制数据编码为ASCII字符,例如Base32、Hexadecimal等。可以根据实际需求选择适合的编码方式。 需要注意的是,在实际应用中,对于较大的二进制数据,最好选择其他更为专业的加密方式,例如SHA算法或AES算法等,以确保数据的安全性和加密的效率。
Spring Cloud问题汇总 有更新!
Spring Cloud问题汇总 一、Gateway Gateway是Spring Cloud生态中的一个微服务网关,它提供了统一的路由方式,可以将所有的微服务API通过一个入口暴露给外界。Gateway基于Spring 5,基于响应式编程模型构建,使用Spring WebFlux框架提供了Netty服务器。 Gateway主要功能如下: 路由转发:将请求发送到指定的微服务实例。 过滤器处理:使用过滤器处理每个请求,进行自定义逻辑,例如认证、重试等。 断路器处理:提供断路器机制,当某个服务实例出现故障或者负载过高时,可以对请求进行熔断,避免影响整个系统的稳定性。 支持多种协议:支持HTTP、WebSocket等多种协议。 动态路由:支持动态路由,可以根据配置文件动态增加、删除路由规则。 集成服务发现:与Eureka、Consul等服务注册中心集成,自动注册和注销服务实例。 负载均衡:支持负载均衡策略,可以在多个服务实例之间进行分发请求,提高系统的可用性和性能。 总体来说,Gateway是一个非常强大的微服务网关,可以帮助开发人员快速搭建微服务架构,并提供了很多丰富的功能,同时也是Spr....
检索问题汇总 有更新!
检索问题汇总 一、fact检索 事实检索(Fact Retrieval)是一种信息检索技术,旨在从大规模语料库中提取特定的事实或答案。它与一般的文本检索不同,因为它专注于返回准确的、与查询相关的事实,而不仅仅是相关的文档或文章。 事实检索的目标是根据用户提出的查询,从结构化或非结构化数据中直接检索出最相关的事实。这些数据可以包括知识图谱、数据库、文本文档、网页等。事实检索技术通常需要通过自然语言处理和信息抽取等方法来理解查询和文本,并将其映射到潜在的事实表示形式。 以下是一些常见的事实检索任务: 简单事实检索:根据用户提出的简短查询,例如"谁是美国总统?"或"世界上最高的山峰是哪座?",返回明确的答案,如"乔治·华盛顿"和"珠穆朗玛峰"。 复杂事实检索:处理更复杂的查询,包括多个条件和关系。例如,"哪个演员获得过奥斯卡奖,并且出演了《阿甘正传》?"需要同时满足奥斯卡奖获得者和出演《阿甘正传》这两个条件,返回相关的演员姓名。 实体属性检索:查询特定实体的属性信息。例如,"马拉多纳的国籍是什么?"需要返回"阿根廷"作为答案。 事件时间线检索:根据关键词或实体,检索与特定事件相关的时间线信息....
性能调优问题汇总 有更新!
性能调优问题汇总 一、java后台如何控制qps 要控制Java后台的QPS(每秒请求量),可以采取以下几种方法: 限流:使用限流算法(如令牌桶算法、漏桶算法)对请求进行限制,确保每秒只能处理一定数量的请求。可以利用开源框架,如Guava RateLimiter或者Spring Cloud Gateway中的限流组件来实现。 线程池管理:通过控制线程池的大小和工作队列长度,限制同时处理的请求数量。可以根据系统负载情况动态调整线程池参数。 缓存:对于一些计算复杂、数据量大且变化不频繁的请求,可以在处理后将结果缓存起来,并设置合适的过期时间,以减轻后端服务器的压力。 异步处理:对于一些耗时较长的请求,可以采用异步处理方式,将请求放入消息队列或者线程池中异步处理,这样可以提高系统的吞吐量。 升级硬件或扩展服务器:如果以上方法无法满足需求,可以考虑升级服务器硬件或者增加服务器的数量,以提高系统的处理能力。 需要根据具体的业务场景和系统需求选择合适的方法进行控制,综合考虑系统的性能、资源消耗和用户体验等因素。 二、
文件处理问题集合 有更新!
文件处理问题集合 一、简单文件上传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的数据....
RestAPI与RPC 有更新!
Rest API与RPC REST API 和 RPC(Remote Procedure Call,远程过程调用)是两种常见的网络通信协议,它们有以下几点区别: 架构风格:REST 是一种基于客户端/服务器模型、无状态、可缓存的架构风格,而 RPC 是一种传统的客户端/服务器模型。 数据交换格式:REST API 通常使用 JSON 或 XML 格式来交换数据,而 RPC 可以使用多种数据格式,例如二进制流、JSON、XML 等。 接口设计:REST API 的接口设计通常基于资源,使用 HTTP 方法(GET、POST、PUT、DELETE 等)来对资源进行操作,而 RPC 的接口设计通常基于方法调用,使用类似于函数调用的方式来实现远程过程调用。 通信方式:REST API 通常基于 HTTP 协议实现,支持多种 HTTP 方法和状态码,而 RPC 可以使用多种传输协议,例如 TCP、UDP、HTTP、WebSocket 等。 总的来说,REST API 更加灵活和通用,可以使用多种编程语言和平台实现,而 RPC 更加高效和专用,通常用于内部系统之间的通信。选择何种协议应该基于实际需....
数据结构刷题 有更新!
数据结构刷题 一、树 1、94. 二叉树的中序遍历 题目: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例1: 输入:root = [1,null,2,3] 输出:[1,3,2] 树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100 进阶: 递归算法很简单,可以通过迭代算法完成吗? 解答: 方法一: 递归 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { ....
SQL刷题Day01~Day06 有更新!
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 = ....
MySQL的RegExp 有更新!
MySQL之正则表达式 一.介绍 正则表达式用来描述或者匹配符合规则的字符串。它的用法和like比较相似,但是它又比like更强大,能够实现一些很特殊的规则匹配;正则表达式需要使用REGEXP命令,匹配上返回"1"匹配不上返回"0",默认不加条件REGEXP相当于like '%%'。在前面加上NOT相当于NOT LIKE。 命令说明 ^在字符的开启处进行匹配 $在字符的末尾处进行匹配 .匹配任何字符(包括回车和新行) [….]匹配括号内的任意单个字符 [m-n]匹配m到n之间的任意单个字符,例如[0-9],[a-z],[A-Z] [^..]不能匹配括号内的任意单个字符 a*匹配0个或多个a,包括空,可以作为占位符使用. a+匹配一个或多个a,不包括空 a?匹配一个或0个a a1| a2匹配a1或a2 a{m}匹配m个a a{m,}匹配m个或者更多个a a{m,n}匹配m到n个a a{,n}匹配0到n个a (….)将模式元素组成单一元素,例如(do)*意思是匹配0个多或多个do 二 使用测试 ^ 在字符串开始处进行匹配 mysql> SELECT 'abc' REGEXP '^a'....
分布式中间件——ShardingSphere 有更新!
分布式中间件——ShardingSphere 一、ShardingSphere介绍 1、Apache ShardingSphere Apache ShardingSphere是一个开源生态系统,允许您将任何数据库转换为分布式数据库系统,并通过分片、弹性扩展、加密功能等对其进行增强。该项目包括一个 JDBC、一个代理和 Sidecar(规划)。由于其面向插件的架构,功能可以随意灵活扩展。 几乎所有数据库都受支持,包括 MySQL、PostgreSQL、SQL Server、Oracle 数据库、MariaDB 或任何其他 SQL-92 数据库。Apache ShardingSphere 社区致力于通过插件增强现有数据库的计算和存储能力以及核心功能来提供生态系统和服务平台。 2、ShardingSphere JDBC 定位轻量级Java框架,在Java的JDBC层提供额外的服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可以理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如 JPA、Hibernate、MyBat....
表结构设计之主键的选择(1)——避坑UUID 有更新!
表结构设计之分布式的主键生成策略的选择(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刷题Day07~Day10 有更新!
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、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){ } } }
11语言学 有更新!
/ 1、最关键的信息 / 2、支撑的项目 表达顺序(意群的承上启下) / 3、数据&细节/图标/例子/比喻 / \
5人格脑科学 有更新!
大家不是单一的人 只有一种行为模式 而是一堆不同的 大脑区域行为模式的组合体 你喜欢或者讨厌的人 在完全不同的场景下 显示出不同的人格特征 人类脑 ---> 哺乳脑 ---> 爬行脑 三大闹区域中 越底层就越不受我们控制 也越容易被商家利用【或者人性束缚】
15信息论 有更新!
模棱两可、平均用力,是一种相对无效的资源配置方式 帧间压缩算法 关注变化、忽略重复、可以极大提高效率 基础越扎实,后面不断前进就可以只关注增量,极大提高效率 分析框架: 先把关键概念零散的列出来 寻找概念直接的关联 套用和矫正
1耗散与封闭 有更新!
大多数人一生都喜欢用一个知识结构来解决所有问题 —— 查理芒格 这个世界上混乱才是常态,有序是需要刻意营造的 大脑海马体每天新生:700个神经元 皮肤的更新周期:28天 红血球的更新周期:4个月 肝的更新周期:5个月 骨骼的更新周期:7年 你无法控制生命里会发生什么 但你可以控制面对困境时 你的情绪和行动 残酷的世界可以拿走你很多东西 唯独一样东西它永远拿不走就是 选择的自由 —— 维克多 弗兰克尔《活出生命的意义》 再精致的封闭也会腐烂 再简陋的耗散也会鲜活 天下难事 必作于易