自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 收藏
  • 关注

原创 关于DDD设计模式的各种疑问:什么是DDD架构?

DDD关注于创建一个反映领域复杂性的丰富模型,主要应对业务逻辑的复杂性。DCI侧重于提高代码的可读性和对用户行为的模拟,关注点在于行为的组织和表达。CQRS关注于提升数据操作的效率,通过物理和逻辑上的分离来优化读写操作的性能。这三者可以相互补充,在同一个项目中根据不同的需求采用不同的模式来达到最优的设计和实现。例如,在一个采用DDD的系统中,可以实现CQRS来优化数据处理,并通过DCI来改进某些特定用例的代码表达和行为模拟。聚合是一个或多个相关对象的集合,它们一起被视为数据修改的一个单元。

2024-04-17 21:17:56 997

原创 【小红书校招场景题】12306抢票系统

对于后端开发人员来说,开发和维护一个高铁抢票系统(如中国的12306)会面临一系列的挑战和情况。这些挑战主要涉及系统的性能、稳定性、数据一致性和用户体验。这些挑战要求后端开发人员不仅要有扎实的编程和系统设计能力,还需要对分布式系统、网络安全和数据库管理有深入的了解。同时,创新和持续优化也是维持系统长期运行的关键。

2024-04-12 10:52:11 1080

原创 秒杀系统之存储商品价格应该用什么数据结构?

选择存储商品价格的数据结构取决于几个因素,包括应用的需求、对价格的访问方式、更新频率、以及是否需要支持快速查找、插入或删除操作。

2024-04-11 20:30:32 936

原创 【京东、字节后端二面】讨论不同的系统性能瓶颈点:流量增加时,秒杀系统的性能瓶颈在哪里呢?

因此,短链接系统的性能瓶颈主要在数据库,因为其主要任务是数据的存储和快速检索,而秒杀系统的瓶颈在于业务服务器,因为需要同时处理高并发和复杂的业务逻辑。在设计这些系统时,必须考虑到各自的业务特点和技术需求,采取不同的优化策略来确保系统的稳定性和高效性。

2024-04-11 17:39:12 814

原创 能ping通域名,但用浏览器访问不了是怎么回事?

ping(IP)是三层协议,浏览器用的HTTP(TCP)是四层协议,底层协议能通上层不见得通。大概相当于你打电话能打通,听道对方响铃,但没人接。为啥没人接啊?别问我啊,我也不知道。

2024-03-02 12:03:38 597

原创 leetcode上两个字符串之间的动态规划类题目

一般我们都知道给定一个字符串s,当我们固定以当前索引i为子串的结尾时,则这种固定方法一共有n种,假设我们称这N个子串为;一般字符串之间的动态规划涉及到两个字符串,且涉及到S的结尾子串和T结尾子串的转换问题,那么两个字符串的所有一共有n^2级别的转换组合,且长度更大的结尾子串之间的转换一般会利用到短串之间的转换数值。所以这个时候我们定义的。

2024-01-20 15:36:17 463

原创 动态规划中如何利用map进行降维

利用前缀和求解的lc题目汇总,利用map进行dp降维

2024-01-12 19:10:26 428

原创 利用前缀和求解的lc题目汇总

前缀和是解决连续子数组的和的要注意map的初始化条件一般为map.put(0,1)表示考虑当前元素本身作为一个子数组符合对k的相关性质的情况。

2024-01-12 19:03:03 479

原创 在矩阵回溯中进行累加和比较的注意点

在回溯时,如果递归函数采用void返回,在入口处使用了sum变量,那么一般在初次调用dfs的地方,这个sum的初始值可能不是0,而是数组的对应指针的值,在比较操作的时候,需要在for循环开始之前进行,这样确保不遗漏corner case从代码中我们可以看到比较值更新msum(msum=Math.max(msum,sum+grid[nx][ny]);)的时机不对,如果有一个非0值的周围都是0值,那么这个值本身没有参与比较,即潜在的最大值可能被忽略

2024-01-12 13:18:28 466

原创 贪心算法的“左最优“与“右最优“及其对应的堆处理和预处理方法

在每一步选择中,总是选择最左边(最早出现的)可行的选项。在每一步选择中,总是选择最右边(最晚出现的)可行的选项。这两种策略是贪心算法中根据具体问题选择的不同方向。

2024-01-09 11:50:11 465

原创 微服务系统面经之四: 以秒杀系统为例 - 用户秒杀状态的通知【京东支付后端一面】

使用异步消息系统,在用户发起秒杀请求后,可以迅速响应,然后在后台异步处理请求,并最终将处理结果返回给用户。这种方式不仅提高了系统的处理能力和伸缩性,还能提供更好的用户体验。在设计秒杀系统时,异步处理机制是提高系统性能的关键之一。WebSocket和SSE更适合需要实时通信的场景,如秒杀系统,它们可以减少延迟并提高用户体验。轮询更适合简单应用或对实时性要求不高的场景。尽管它的效率相对较低,但在一些场景中仍然是一个可行的解决方案。在选择合适的技术时,需要根据应用的具体需求和现有架构来决定。

2024-01-08 23:50:20 1247

原创 leetcode网格题目中的上下左右四个方向和旋转90度的数量关系的代码表示

这里, 表示向上移动, 表示向右移动, 表示向下移动, 表示向左移动。1.2 方向数组的一维表示方法一维数组表示:另一种方法是使用一维数组结合模运算来表示方向。例如,可以定义一个一维数组 和 ,分别表示 x 轴和 y 轴的变化:这里的数组同样表示上、右、下、左四个方向。1.3 旋转的处理初始化方向:假设机器人最初面向北方,可以用一个变量 来表示当前方向,初始设为 (表示向右)。右旋转 90 度:向右旋转意味着 的值增加 1。可以使用模运算来确保 的值不超过方向数组的长度:左

2024-01-08 22:45:30 1051

原创 “分组循环“方式来对数组完成一次遍历【解题模板带你减少一半coding时间】

推荐大家记住。适用场景:按照题目要求,数组会被分割成若干段,且每一段的判断/处理逻辑是一样的。注:虽然代码写的是一个二重循环,但 i += 1 这句话至多执行 nnn 次,所以总的时间复杂度仍然是 O(n) 的。

2024-01-08 20:09:00 1005

原创 常见的并查集题目

并查集逻辑实现的优化有两种,第一种是查找时路径压缩,第二种是按秩合并,合并时将高度较小的树作为较高树的子树,从代码量来看,推荐使用路径压缩,可以参考lc 547. 省份数量的两种UnionFind写法。

2024-01-04 14:28:45 596

原创 leetcode上的“深拷贝类”题目

*int val;Node next;node=head;while(node!

2024-01-03 12:03:09 395

原创 leetcode中的状态机类型的题目

先是要确定新区间插入到哪一个位置(也有可能),插入后需要确定这个区间是否涉及到合并问题。所以我们可以设计一个flag变量,确定区间是否插入,插入完成则进行到区间合并阶段。

2023-12-23 12:03:18 431

原创 【后端】系统设计类题目汇总五

设计一个点赞系统需要考虑多个方面,包括数据库设计、存储选择、高并发处理、容错机制等。以下是一个高层次的设计方案:点赞记录表:内容统计表:使用缓存:异步处理:分布式锁:事务管理:冗余和备份:数据库分片(Sharding):负载均衡:防止重复点赞:接口限流:设计一个点赞系统是一个复杂的任务,需要考虑性能、可扩展性、容错能力和数据一致性等多个方面。通过结合关系型和NoSQL数据库、实施缓存和异步处理、以及采取适当的容错和安全措施,可以构建一个高效且稳定的点赞系统。

2023-12-11 14:19:42 295

原创 腾讯字节常考的linux命令

ps -ef。

2023-12-10 21:32:07 90

原创 【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题

合并的时候先将各个数组排序,然后采用n路归并的方式不断的将有序值取出(会用到数组指针,每一个元素对应其数组被取出元素的进度),直至取出到总长度的一半,时间复杂度为(n*logx)+O(TL),其中前者为各个数组的排序的时间复杂度之和(假设最长的数组长度为x),后者为这n个数组的总长度。这种方法的时间复杂度主要由优先队列的操作决定,即O(n log k),其中n是所有数组中总元素的数量,k是数组的数量。您的方法是一个有效的解决方案,它结合了排序和n路归并排序的思想来找到多个数组中的中位数。

2023-12-08 13:36:03 723

原创 深入理解mysql的explain命令

index:全索引扫描,和ALL类似,只不过index是全盘扫描了索引的数据。在第一个例子中,查询可以完全通过索引来满足,而在第二个例子中,虽然查询利用了索引的顺序,但仍然需要访问表中的额外数据。:这表示查询仅通过索引来获取所需的数据,而无需额外读取表中的数据行。这通常发生在覆盖索引的情况下,即查询的所有字段都包含在索引中。通过理解这些值的含义,可以更好地分析查询效率,并在必要时进行相应的优化。展示当前查询可以使用哪些索引,这一列的数据是在优化过程的早期创建的,因此有些索引可能对于后续优化过程是没用的。

2023-12-07 12:01:16 342

原创 spring security面经-字节飞书生产力工具后端一面

自定义安全表达式示例:在Spring Security中,你可以定义自己的安全表达式来进行更复杂的权限检查。// 业务逻辑在这个例子中,注解使用了一个自定义的表达式,其中调用了一个自定义的安全服务()的方法,以检查当前用户(principal)是否满足特定条件。这样,你就可以将业务逻辑与安全逻辑相结合,实现更灵活的权限控制。

2023-12-06 11:19:46 485

原创 “快慢指针”思想在物理或者逻辑循环中的应用: 为什么用快慢指针而不使用set集合判定循环?

物理循环是指物理索引访问顺序上相邻,逻辑上也相邻,比如循环链表,逻辑循环则指物理的索引上不一定相邻。

2023-12-05 21:10:45 888

原创 【2024秋招】2023-10-17 金山云文档服务端二面

当我们使用游标或seek方法进行分页时,我们不再使用传统的OFFSET和LIMIT。取而代之的是,我们根据上一页的最后一个记录的标识(通常是一个递增的ID)来查询下一页的数据。// 每页的记录数 int lastId = 0;// 上一页的最后一个记录的ID try(Connection connection = DriverManager . getConnection(url , user , password)) {

2023-12-02 14:21:06 255

原创 【2024秋招】2023-9-22 金山云文档服务端开发一面

答:concurrentHashMap的原理。

2023-12-02 14:19:38 110

原创 如何判断一个题目用“贪心/动态规划“还是用“BFS/DFS”方法解决

一般能使用贪心、动态规划解决一个问题时,使用BFS,DFS也能解决这个题,但是反之不能成立。

2023-11-26 12:39:18 169

原创 leetcode中“辅助栈”类题目和“单调栈”类题目的异同

【代码】leetcode中“辅助栈”类题目和“单调栈”类题目的异同。

2023-11-25 15:38:53 143

原创 leetcode中“二分查找转化为判定问题”类题目

复杂二分题目-第 410、1011、1482、1552、1760、2187、2226 题。

2023-11-22 15:20:48 96

原创 Leetcode经典题目之“双指针交换元素“类题目

【代码】Leetcode经典题目之"双指针交换元素"类题目。

2023-11-19 16:05:18 825

原创 Leetcode hot100之“结合递归+二分“题目详解

题目 215 (“数组中的第 K 个最大元素”) 和题目 4 (“寻找两个正序数组的中位数”) 之间的联系主要体现在它们都涉及到寻找一个有序集合中的第 k 个元素的问题。尽管这两个问题的具体应用场景和所处理的数据结构不同,它们共享相似的算法思想和技术。

2023-11-16 16:05:09 388

原创 Leetcode hot 10之经典双指针问题:从《lc42 接雨水》到《lc84 柱状图中的最大矩形》

解法四:双指针动态规划中,我们常常可以对空间复杂度进行进一步的优化。例如这道题中,可以看到,max_left [ i ] 和 max_right [ i ] 数组中的元素我们其实只用一次,然后就再也不会用到了。所以我们可以不用数组,只用一个元素就行了。我们先改造下 max_left。我们成功将 max_left 数组去掉了。但是会发现我们不能同时把 max_right 的数组去掉,因为最后的 for 循环是从左到右遍历的,而 max_right 的更新是从右向左的。

2023-11-15 10:27:13 86

原创 聊聊leetcode可包含重复数字的序列的《47. 全排列 II》中的vis标记函数

满足其中任一个都可以跳过当前元素的遍历,我们都知道第一条件是用于判断向下遍历时,当前准备选取的元素是否已经在路径中,如果used[i]==true,则跳过;这个代码,我们都知道dfs函数会对used[i-1]进行回溯,当我们横向遍历到第i个元素时,则used[0…,导致去重操作也发生在了纵向遍历的过程中,当遍历到第二个1时,used[0]为true或者false都不重要,都会因为。才会仅仅在横向判断的时候起作用,如果不带这个,那么这个去重代码还会在纵向遍历的时候起作用。当然不能,因为只有带上这个,

2023-11-13 10:48:48 94

原创 Leetcode139单词拆分及其多种变体问题

背包问题通常都是组合问题,这其实是一道“”面向目标值的排列问题“,具体和背包问题有什么不同可以参考我下面写的这篇文章。

2023-11-12 13:45:55 133

原创 “面向目标值的排列匹配“和“面向目标值的背包组合问题“的区别和leetcode例题详解

因此,虽然从目标字符串s的角度来看,LC139 “单词拆分” 涉及到字符的排列,但在解决问题的算法层面,它更像是一个组合问题。这是因为我们关注的是如何从字典中选择单词来构造字符串s,而不是这些单词的选择顺序。

2023-11-11 23:07:30 1339

原创 细数Leetcode上的背包问题

【代码】细数LC上的背包问题。

2023-11-09 09:26:39 76

原创 链表扁平化类题目:从《lc114. 二叉树展开为链表》到《lc-LCR 155二叉搜索树转化为排序的双向链表》

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?

2023-11-04 12:54:24 114

原创 为什么要停止在 SpringBoot 中使用字段注,改用构造器注入

字段注入涉及直接用 @Autowired 注释类的私有字段。这是一个例子:@Component@Autowired。

2023-11-04 10:10:04 835 1

原创 系统设计类题目汇总五

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

2023-11-03 11:40:46 82

原创 面试常考:从lc24《两两交换链表中的节点》 到 lc25《K 个一组翻转链表》带你认识链表递归

下面的三行注释要理解透彻,

2023-11-03 10:33:15 148

原创 一个ppt带你读懂网络安全行业四大顶会之一的ndss论文<<Large Language Model guided Protocol Fuzzing>>

传统fuzzing技术结合大语言模型的论文分享

2023-11-02 16:50:45 391

原创 多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug

数组在Java中是一个对象,当你将数组作为参数传递给一个方法时,你传递的是数组对象引用的副本。你可以在方法内部修改数组内容,这些修改会反映到方法外部。这段代码实际上是一个常见的算法题目的解法,目标是将一个二叉搜索树转换为一个排序的双向链表。整个过程是通过中序遍历来实现的,遍历过程中修改节点的左右指针来构建双向链表。这意味着当你将一个对象作为参数传递给一个方法时,你实际上是将对象引用的副本传递给了方法。方法内部更新数组的内容,这样就能够实现在方法调用后更新外部的。方法时,你传递的是引用的副本。

2023-11-01 11:38:41 625

四大顶会之一的ndss论文<<Large Language Model guided Protocol Fuzzing>>

网络安全,结合大模型技术和传统的fuzzing方法,对协议进行fuzzing

2023-11-02

important.html

important.html

2022-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除