Mybatis
MyBatis 是什么?为什么说它是半自动 ORM?半ORM(对象关系映射)框架,内部封装JDBC,开发时只需关注SQL语句本身,无需处理加载驱动、创建连接等繁杂过程。通过XML或注解配置映射,将对象与数据库表关联。 ORMORM(Object Relational Mapping)是一种解决关系型数据库数据与简单Java对象(POJO)映射关系的技术。它通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。 与传统的JDBC相比,MyBatis的优点?基于 SQL 语句编程,SQL 写在 XML 里,解除 sql 与程序代码的耦合 支持编写动态 SQL 语句 减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接 能够与 Spring 很好的集成,开发效率高 Mybatis动态sql标签 <if>:按条件拼接 SQL。 <choose>、<when>、<otherwise>:从多个分支中选择一个。 <trim>、<where>、<se...
反转链表,k个一组反转链表,反转链表Ⅱ
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 https://leetcode.cn/problems/reverse-linked-list/description/ 迭代12345678910111213141516171819202122232425class Solution { public ListNode reverseList(ListNode head) { ListNode curr = head; ListNode pre = null; while (curr != null) { // 1. 暂存下一个节点,并声明类型 ListNode next = curr.next; // 2. 反转:当前节点的 next 指向前一个节点 curr.next = p...
LRU缓存
LRULRU(Least Recently Used,最近最少使用)是一种经典的缓存淘汰算法。 它的核心思想是基于局部性原理:“如果数据最近被访问过,那么将来被访问的几率也更高”。当缓存容量达到上限,必须清理空间来存放新数据时,LRU 会优先淘汰距离当前时间最久没有被访问过的数据。 底层实现逻辑 标准的 LRU 缓存通常通过 哈希表(Hash Map) + 双向链表(Doubly Linked List) 来实现,以保证所有操作的时间复杂度都是 O(1): 哈希表:键指向链表中的节点,用于快速定位数据。 双向链表:用于维护数据的访问顺序。每次新插入或被访问的数据,都会被移动到链表头部(代表最新访问)。当缓存满时,直接删除链表尾部的节点(代表最久未访问)。 https://leetcode.cn/problems/lru-cache/description/ 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int ...
Kafka
消息队列 优点:解耦,削峰,异步 缺点:开发复杂,需要保证数据一致性 消息重复消费怎么解决?最经典的场景:Consumer 收到消息后,成功把数据处理完并写进了数据库,但就在准备向 Kafka 提交 Offset 的前一秒,系统突然宕机了(或者耗时过长触发了 Rebalance)。 等 Consumer 节点重启(或任务交接给其他节点)后,Kafka 检查记录发现:“这条消息的 Offset 没提交,肯定没被消费。” 于是把这批消息又发了一遍,导致重复处理。 如何保证幂等性( 同一操作的多次执行对系统状态的影响与一次执行结果一致): 唯一标识 MySQL 唯一索引防重 Redis 记录状态 / SETNX 去重 消息丢失怎么解决的?确保生产者正常收到ack kafka集群 确保消费者在接收+处理消息后回复ack给中间件 kafka结构 客户端层Producer(生产者):负责把消息发往 Kafka。 Consumer(消费者):负责从 Kafka 拉取消息。 Consumer Group(消费者组):Kafka 的一大特色。多个 Consumer 可以组成一个组来共同...
无重复字符最长子串
滑动窗口模板:12345678//外层循环扩展右边界,内层循环扩展左边界for (int l = 0, r = 0 ; r < n ; r++) { //当前考虑的元素 while (l <= r && check()) {//区间[left,right]不符合题意 //扩展左边界 } //区间[left,right]符合题意,统计相关信息} 题目:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。 示例 2: 123输入...
