- 博客(75)
- 收藏
- 关注
原创 [技巧] 非递归遍历二叉树
思想:一个cur指针指向当前节点,如果cur不为nil就将cur指向的节点入栈,再将cur移到左孩子,当cur为nil时,再从栈顶pop出节点(一定是cur的后继),记录值,并将cur移到右孩子(一定是cur的后继)思想:一个栈存放节点(初始时存放一个根节点),每次pop出一个节点并记录其值,然后将节点的左右子节点依次入栈(如果存在)思想:和前序一样,只是调换一下左右子节点的入栈顺序,最后再将结果逆序处理即可。
2024-04-18 23:15:51
255
原创 算法学习(十七)规律
1> 将 问题中的抽象条件 找出实际意思题目说明实现649. Dota2 参议院题中每个议员最好表现 = 禁止后面最近的对方议员 或 禁止前面最远的对方议员我的提交1702. 修改后的最大二进制字符串10->01代表题中所有的1都可以全部移动到末尾,所有0都可以移动到开头我的提交1536. 排布二进制网格的最少交换次数交换相邻两行 = 冒泡过程,贪心的先满足前面的我的提交2> 迭代次数过多,寻找周期、规律①二进制周期②字符串循环结题目说明实现957. N 天后的牢房。
2024-04-06 20:25:19
291
原创 图形推理 总结
1.图形相似且元素基本不变:此时多考虑图形的位置移动规律,如平移、旋转、翻转等。2.图形相似但元素有同有异:这种情况下常考组合叠加-去异存同、去同存异等;元素遍历;部分传递等。3.图形相异但较规则:常考对称、直曲性、凹凸性规律。4.图形相异且小元素较多:常考元素种类数、元素个数、元素相对位置等规律。5.图形相异且图案单一不规则:这种情况下考虑数量关系——面、角、线、点。https://blog.csdn.net/weixin_63253486/article/details/132376470
2024-03-30 22:43:22
206
原创 Spring使用(一)注解
如果不存在,则执行该方法,并将方法的返回结果添加到缓存中。Spring 框架内部使用 Resource 接口作为所有资源的抽象和访问接口,在上一篇文章的示例代码中的配置文件是通过ClassPathResource 进行封装的,ClassPathResource 是 Resource 的一个特定类型的实现,代表的是位于 classpath 中的资源。在一个普通的方法或者类中调用了由 @Async 注解标记的方法,那么当前线程会立即返回,而实际执行的过程会在另外的线程中进行,当前线程将继续执行自身的任务。
2024-03-28 21:20:22
898
原创 [串联] MySQL 存储原理 B+树
B-树,也称为B树,是一种平衡的多叉树。阶数:一个节点最多有多少个孩子节点。(一般用字母m表示)关键字:节点上的数值就是关键字度:一个节点拥有的子节点的数量。一颗m阶的b-树:根结点至少有两个子女;每个非根节点所包含的关键字个数 j 满足:⌈m/2⌉ - 1
2024-03-26 23:16:03
1143
原创 Linux文件系统 底层原理
inode表是一个数据结构,它位于Unix和类Unix文件系统中,用来存储文件的元数据信息(除了文件名和目录信息之外的所有信息)。每个文件或目录在文件系统中都有一个唯一的inode,并且有一个对应的条目在inode表中。如果路径中还有更多的组件,文件系统会使用这个inode号获取下一级目录的信息,并重复步骤3和4,直到找到最终文件名对应的inode号。在Linux中,目录是一种特殊类型的文件。inode负责文件的元数据和数据存储,文件存储块负责实际数据的存储,而目录文件维护文件名和inode之间的联系。
2024-03-25 22:46:06
1006
原创 系统设计实例(四)日活5000万的聊天系统
当用户A的在线状态发生变化时,它将事件发布到所有的通道,朋友们很容易获得在线状态的更新,对于小用户群体是有效的。它注册所有可用的聊天服务器,并根据预定的标准为客户端选择最好的聊天服务器。如果状态服务器在一定时间内,比如从客户端开始的x秒内,接收到一个心跳事件,用户就被认为是在线的。每个设备都维护了一个名为cur_max_message_id的变量,该变量跟踪设备上最新的消息ID。由于每个设备上的cur_max_message_id都不同,每个设备都可以从KV存储中获取新消息,因此消息同步很容易。
2024-03-24 12:04:53
786
原创 [技巧] 全排列问题的五种解法
解法四在重复元素多,不同元素少的情况(如:11111222)效率较低,针对这种情况,我们可以将所有元素统计个数后,再进行dfs,次数每轮只需在不同元素中选择一个即可。问题定义:给任意个元素,求解所有可能得排列方式。
2024-03-23 12:12:55
269
原创 系统设计实例(三)Youtube视频分享平台
一旦相应的视频处理完成,临时存储中的数据就会被清理掉。为了支持不同的视频处理流程并保持高并行性,重要的是增加一些抽象层次,并让客户端程序员定义要执行的任务。美国的人可以将视频上传到北美的上传中心,中国的人可以将视频上传到亚洲的上传中心。它是将视频格式转换为其他格式(如MPEG,HLS等)的过程,这些格式为不同的设备和带宽能力提供最佳的视频流。客户端向API服务器发起HTTP请求,以获取预签名URL,该URL给予访问URL中标识的对象的访问权限。元数据缓存:为了更好的性能,视频元数据和用户对象被缓存。
2024-03-22 17:26:02
695
原创 系统设计实例(二)新闻订阅系统
*混合扩散:**由于快速获取新闻订阅很关键,所以我们对大部分用户使用推送模型。对于那些有许多朋友/粉丝的名人或用户,我们让粉丝按需拉取新闻内容,以避免系统过载。扩散是将帖子传递给所有朋友的过程。有两种类型的扩散模型:写时扩散(也称为推送模型)和读时扩散(也称为拉取模型)。登录的用户才能发布帖子。系统限制用户在一定时间内可以发布的帖子数量,这对于防止垃圾邮件和恶意内容至关重要。:在这种方法中,新闻订阅在写入时预先计算。在读取时生成新闻订阅,这是一个按需模型。用户加载主页时,会拉取最近的帖子。
2024-03-21 20:43:12
600
原创 系统设计实例(一)百万级别用户系统
有状态Web层的问题在于同一客户端的每个请求必须路由到同一台服务器,我们将状态(例如用户会话数据)从Web层中移出,做法是将会话数据存储在持久性存储中,如关系型数据库或NoSQL数据库。用户的HTTP请求可以发送到任何Web服务器,这些服务器从共享数据存储中获取状态数据。它们从 CDN 获取以获得更好的性能。负载均衡器会将传入的流量均匀分配给在负载均衡集合中定义的Web服务器,用户直接连接负载均衡器的公共IP。在正常运行时,用户会根据地理位置通过geoDNS路由到最近的数据中心,其中在美国东部的流量占。
2024-03-20 23:02:21
1006
原创 系统设计学习(五)微服务
所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通信就是IPC(inter process communication),已经有很多成熟的方案。另外,每个服务都有自己的缓存和数据库。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持,比如Dubbo。最重要的作 用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合。缺点:多服务运维难度,系统部署依赖,服务间通信成本,数据一致性,系统集成测试,重复工作,性能监控等。
2024-03-17 21:59:28
471
原创 计算机安全
DOS: (Denial of Service),翻译过来就是拒绝服务,一切能引起DOS行为的攻击都被称为DOS攻击。最常见的DoS攻击就有计算机网络宽带攻击连通性攻击。DDoS: (Distributed Denial of Service),翻译过来是分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。常见的DDos有等。1. UDP Flood: 利用大量UDP小包冲击DNS服务器。
2024-03-16 22:52:45
824
1
原创 系统设计学习(四)海量数据
海量日志数据,提取出某日访问百度次数最多的那个IP,如果想一次性把所有IP数据装进内存处理,则内存容量明显不够,故针对数据太大,内存受限的情况,可以把大文件转化成(取模映射)小文件,从而大而化小,逐个处理。注:Hash取模是一种等价映射,不会存在同一个元素分散到不同小文件中去的情况,即这里采用的是%1000算法,那么同一个IP在hash后,只可能落在同一个文件中,不可能被分散的。同样的,有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。
2024-03-15 18:47:24
999
原创 系统设计学习(三)限流与零拷贝
水流进桶的速度可以是随机的,但是水流出桶的速度是恒定的。当水流进桶的速度过快时,桶会逐渐被填满,当水超过桶的容量就会溢出,即被丢弃。如果桶中没有足够的令牌,请求就会被阻塞或丢弃,具体行为取决于具体的实现。如果在这个时间窗口内的请求已经达到了限制,那么新的请求就会被拒绝,过了当前时间窗口后,会进入下一个时间窗口,并重置窗口内的请求数量,重新计算。在固定窗口限流算法中,如果大量请求在一个时间窗口的边界附近到达,可能会造成瞬时的流量突增。滑动窗口随着时间的推移,动态统计请求量,避免了在窗口边界附近的流量突增。
2024-03-13 17:07:13
903
原创 系统设计学习(二)用户认证场景
我们知道http代理客户端不只有浏览器,还有原生APP等等,这个时候cookie是不起作用的,使用token时,客户端在收到响应的时候,可以把他存在本地的cookie,storage,或者内存中,然后再下一次请求的请求头重带上这个token就行了。认证中心和其他系统是在一个域名下的,认证中心为父域名(jwxt.com),其他系统是子域名(yx.jwxt.com),或者是同一IP不同端口的情况,我们的服务端通过cookie去判断是否登录。在认证中心登录成功的时候设置Cookie,
2024-03-12 19:51:12
993
原创 系统设计学习(一)分布式系统
CAP 理论指出,在分布式系统中,不能同时满足一致性、可用性和分区容错性这三个特性,只能是 CP 或者是 AP(在分布式系统中,分区是无法避免的,当分区发生时,我们必须在一致性和可用性之间做出选择)。索引:是日志条目在日志中的位置,表征了特定日志条目在整个日志序列中的顺序。(2)如果在不同日志中的两个条目有着相同索引和任期号,则它们之间所有条目完全一样,这点是由日志复制的规则来保证的;(1)如果在不同日志中的两个条目有着相同索引和任期号,则所存储的命令是相同的,这点是由leader来保证的;
2024-03-11 22:43:50
1002
原创 RESTful API学习
对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。:服务器不能保存客户端的信息, 每一次从客户端发送的请求中,要包含所有必须的状态信息,会话信息由客户端保存, 服务器端根据这些状态信息来处理请求。它主要用于客户端和服务器交互类的软件。:资源可以是一个图片、音乐、一个XML格式、HTML格式或者JSON格式等网络上的一个实体,除了一些二进制的资源外普通的文本资源更多以JSON为载体、面向用户的一组数据(通常从数据库中查询而得到)。
2024-03-10 19:58:29
475
原创 Spring学习 基础(三)MVC
在Spring框架中,这些层通常由不同的Spring组件来实现,比如使用@Repository注解的类实现持久层,@Service注解的类实现业务层,@Controller或@RestController注解的类实现表示层。这种异常处理方式下,会给所有或者指定的 Controller 织入异常处理的逻辑(AOP),当 Controller 中的方法抛出异常的时候,由被@ExceptionHandler 注解修饰的方法进行处理。业务层协调应用程序的工作流程,处理用户请求,并对持久层发送的数据执行业务决策。
2024-03-09 20:22:07
1153
原创 Spring学习 基础(二)Bean和AOP
Before(前置通知):目标对象的方法调用之前触发After(后置通知):目标对象的方法调用之后触发(返回通知):目标对象的方法调用完成,在返回结果值之后触发(异常通知) :目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值。Around: (环绕通知)编程式控制目标对象的方法调用。
2024-03-08 21:28:33
987
原创 Spring学习 基础(一)
通俗的来理解,就是本来当需要某个类(构造函数)的某个方法时,自己需要主动实例化变为被动,不需要再考虑如何实例化其他依赖的类,实现对象之间的解耦。引进了中间位置的“第三方”,也就是IOC容器,使得所有对象间没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心。依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
2024-03-07 21:59:16
859
原创 SQL语句 学习
1、普通创建username varchar(64) NOT NULL DEFAULT 'default' COMMENT '用户名',password varchar(64) NOT NULL DEFAULT 'default' COMMENT '密码',email varchar(64) NOT NULL DEFAULT 'default' COMMENT '邮箱') COMMENT='用户表';2、约束类型NOT NULL- 指示某列不能存储 NULL 值。UNIQUE。
2024-03-06 19:17:41
858
原创 数据结构学习(四)高级数据结构
1>前缀树题目说明实现1268. 搜索推荐系统一眼前缀树我的提交1233. 删除子文件夹使用哈希表存储子前缀树,ref存储在列表中的位置我的提交140. 单词拆分 II前缀树我的提交212. 单词搜索 II对已搜索到的单词剪去,大大降低搜索时间我的提交648. 单词替换前缀树我的提交2>树状数组①普通②离散化题目说明实现315. 计算右侧小于当前元素的个数前缀和我的提交2250. 统计包含每个点的矩形数目前缀和我的提交775. 全局倒置与局部倒置前缀和我的提交327. 区间和的个数。
2024-03-05 22:07:21
1220
原创 数据结构学习(三)链表
1> 链表递归修改、查询题目说明实现430. 扁平化多级双向链表设func(l)可以扁平化子链表l,递归修改我的提交2058. 找出临界点之间的最小和最大距离保存某个节点往后的极点中的最大和最小位置,递归查找计算我的提交2074. 反转偶数长度组的节点每次跳到一个组的末尾,看是否要反转下一个组,递归我的提交2095. 删除链表的中间节点参数中记录前面多少节点,返回值记录后面多少节点我的提交2816. 翻倍以链表形式表示的数字dfs修改下一结点,返回是否进位,最后不能漏掉可能新增头结点的情况我的提交。
2024-03-04 20:34:07
848
原创 数据结构学习(二)字符串
1> 字符串分割题目说明实现640. 求解方程通过分割字符串统计x的系数和方程的常数项我的提交2> 字符串匹配KMP算法:next数组l++i++} else {i++} else {题目说明实现686. 重复叠加字符串匹配KMP算法,如果直到i>ab长度之和都未匹配成功,则一定无法匹配我的提交210. 课程表 IIKMP算法我的提交3> 字符串问题分类讨论题目说明实现809. 情感丰富的文字使用双指针匹配,分类讨论所有情况我的提交816. 模糊坐标。
2024-03-03 12:36:07
364
原创 数据结构学习(一)栈
1> 单调栈,记录数组/区间中的极值, 单调递增栈维护最小值、次小值… 单调递减栈维护最大值、次大值…题目说明实现1438. 绝对差不超过限制的最长连续子数组用单增栈和单减栈分别维护区间的最大最小值(队首),区间不满足要求时尝试从队首移除元素我的提交239. 滑动窗口最大值用单减栈维护窗口的最大值我的提交2> 单调栈,隐含历史信息题目说明实现456. 132 模式从右到左,单调递减栈,k记录上次被pop出去的值,一定有 栈顶 < k我的提交84. 柱状图中最大的矩形。
2024-03-02 11:54:16
913
原创 算法学习(十七)动态规划
1> 复杂问题无法一次性状态转移的可以分成多个子问题,分别进行状态转移,最后合并结果, (或者仅对其中一个子问题状态转移)题目说明实现764. 最大加号标志分成四个方向分别求解我的提交838. 推多米诺分成两个个方向分别转移我的提交1031. 两个非重叠子数组的最大和仅对(i:)区间内长度为firstlen和secondLen的最大长度状态转移我的提交1139. 最大的以 1 为边界的正方形分别求解四个方向连续1的个数我的提交1525. 字符串的好分割数目分别求解i左右边不同字符的个数我的提交。
2024-03-01 15:31:22
1008
原创 算法学习(十六)递归回溯
1> 使用哈希表存储答案,使用mark标记已访问的防止重复搜索,状态较少(<32)时用一个int即可题目说明实现464. 我能赢吗使用int记录已选数字我的提交1387. 将整数按权重排序使用int记录已计算过的我的提交1361. 验证二叉树记录每个节点为根时其下的节点数目,直到等于n我的提交2745. 构造最长的新字符串只要知道每个串剩余数量和前一个串类型,就能唯一确定最大长度,故采用状态压缩dfs我的提交2> 岛屿问题:曼哈顿距离,广度优先搜索,某一性质(边界)扩散,通过更改标记防止重复搜索题目。
2024-02-29 09:53:13
917
原创 算法学习(十五)广度优先
1> 拓扑排序,课程表问题每一次都从图中删除没有前驱的顶点,这里并不需要真正的做删除操作,我们可以设置一个入度数组,每一轮都输出入度为 000 的结点,并移除它、修改它指向的结点的入度(−1-1−1即可),依次得到的结点序列就是拓扑排序的结点序列。如果图中还有结点没有被移除,则说明“不能完成所有课程的学习”。1、在开始排序前,扫描对应的存储空间(使用邻接表),将入度为 0 的结点放入队列。
2024-02-28 09:49:40
360
原创 算法学习(十四)深度优先
1> 数位DP,求小于N的符合条件的数的个数,注意以下几点:用一个 target数组 存储N的每一位用一个 preLimit 变量表示前面的是否处于临界状态,当且仅当preLimit为true且当前位到达target对应位时,nextLimit为true用一个 pos 表示当前处理到数字的第多少位,pos到len(target)时结束递归题目说明实现788. 旋转数字dp时用preValid表示前面是否已经含有2569我的提交2376. 统计特殊整数。
2024-02-27 17:35:16
1000
原创 算法学习(十三)多路归并
多路归并题目说明实现313. 超级丑数多路归并我的提交786. 第 K 个最小的质数分数多路归并我的提交1508. 子数组和排序后的区间和多路归并我的提交。
2024-02-26 10:23:10
611
原创 算法学习(十二)并查集
1> 合并集合,两个集合有相似的性质,合并二者,以前一个集合的索引作为根。性质map为空对每个集合m, 索引i{如果 m的性质 在 性质map 中 存在, 根为preIdx{i 加入 preIdx}否则{性质map添加新健值对 (m性质, i)题目说明实现947. 移除最多的同行或同列石头相同性质为:两个集合拥有相同的行号或列号,用一个map记录每个行号、列号第一次出现的位置我的提交721. 账户合并。
2024-02-25 12:02:11
856
原创 算法学习(十一)拓扑排序
1> 拓扑排序题目说明实现210. 课程表 II拓扑排序我的提交310. 最小高度树拓扑排序我的提交684. 冗余连接拓扑排序我的提交。
2024-02-24 20:52:35
393
原创 算法学习(十)数学
1> 位表示信息题目说明实现458. 可怜的小猪共k个时段内检测出结果的信息向量长度 = buckets 的 k+1进制数长度我的提交1558. 得到目标数组的最少函数调用次数减次数 = 二进制1的个数之和,除次数 = 二进制最高位数我的提交1734. 解码异或后的排列偶数和其加1值的异或结果为1,故题中所有数异或结果为1或0,给第一个数初值0,求出所有后续的数,再将所有数都异或真实firstVal我的提交2> 素数查找,最小堆①埃筛法②多路归并题目说明实现313. 超级丑数。
2024-02-23 21:35:20
853
原创 算法学习(九)贪心
1> 最需要原则,元素选择问题,贪婪的选择某个最需要被选择的元素题目说明实现621. 任务调度器当前剩下最多的任务最需要被调度我的提交670. 最大交换最靠左的元素最需要被增大,故从左到右遍历到i位置,i右边最大的位置大于i则结果为交换i和该最大的位置我的提交678. 有效的括号字符串左括号最需要被消除,两个栈存放左括号和星号,每次遍历到右括号,优先消除左括号,没有左括号时再消除星号我的提交738. 单调递增的数字左边元素最需要选大的,从左往右遍历到i位置,i后全变为9,i前变为单增的最大形式我的提交。
2024-02-21 23:15:59
882
原创 算法学习(八)分治
1> 构造类型,奇偶分治,位分治题目说明实现932. 漂亮数组题意即两数之和不能为偶数,故数组分为偶数部分和奇数部分,因为 偶数 + 奇数!= 偶数我的提交1238. 循环码排列先不考虑start,按最高位为0、1将数据分为左右部分构造,后面再循环移动至start到0位置处我的提交2> 根据条件分解问题题目说明实现889. 根据前序和后序遍历构造二叉树通过前序找到根节点,从而划分后序遍历为左右子树我的提交。
2024-02-20 23:56:54
351
原创 算法学习(七)枚举
1> 数组中每个元素做若干种可能的操作,直接枚举, 2的m次方种可能题目说明实现1049. 最后一块石头的重量 II每块石头的重量在前面所有可能重量的基础上要么被加上要么被减去,枚举所有可能2^len(stones)种可能我的提交2> 数组中选择任意个元素,2的m次方中可能,通过 排序,二分查找 优化算法题目说明实现1774. 最接近目标价格的甜点成本每个配料最多2份 等价于 重复两次:在配料表中任取若干份我的提交3> 分类讨论题目说明实现794. 有效的井字游戏。
2024-02-18 00:00:17
351
原创 算法学习(六)前缀和
1> 复杂问题求多个子前缀和简化算法过程题目说明实现1664. 生成平衡数组的方案数对奇数位和偶数位分别求前缀和我的提交2> 前缀和➕哈希表解决子数组目标和问题(容斥原理)题目说明实现1074. 元素和为目标值的子矩阵数量容斥原理我的提交1010. 总持续时间可被 60 整除的歌曲容斥原理我的提交1442. 形成两个异或相等数组的三元组数目注意初始值{0:{-1}, arr[0]:{0}}我的提交2001. 可互换矩形的组数可替换的矩形,对应着唯一的最简比例,即组合计数问题,采用用容斥定理解决。
2024-02-17 23:57:16
382
原创 算法学习(五)哈希表
1> 原地哈希(题目限制空间复杂度时使用)题目说明实现41. 缺失的第一个正数数值n存到数组中的n-1位置我的提交LCR 120. 寻找文件副本数值n存到数组中的n位置我的提交442. 数组中重复的数据数值n存到数组中的n-1位置我的提交2> 大量无规则数据问题的简化题目说明实现554. 砖墙前缀和的方式记录每块砖的右端点,hash找出最大出现次数的我的提交1711. 大餐计数记录所有数的出现次数,对每个数枚举其对面数的可能性我的提交3> 集合交并/子集题目说明实现。
2024-02-16 21:29:13
387
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人