自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

长期更新Java自学笔记

长期更新Java自学笔记

  • 博客(373)
  • 收藏
  • 关注

原创 博主自我介绍

CSDN主要是读研期间用来写笔记用的,工作以后如果需要记录知识点也会接着写,不过可能会用的少一些。主要在小红书(9443050803)分享自己的科研、工作、健身日常,希望能用零散的文字,记录完整的生活。大家好,我是西安电子科技大学24届应届毕业生,秋招拿到了快手、字节、华为等多家大厂offer,目前已签约华为。有就业、保研、找导师等问题可以在小红书私信我,看到都会回。

2024-03-15 00:50:49 108

原创 【Linux】tmux简单使用

总的来说,Tmux为终端用户提供了更灵活的工作环境,允许他们更有效地管理和组织终端会话,特别是在需要同时处理多个任务或在远程服务器上工作时。它允许你在一个终端窗口中创建多个终端会话,并在它们之间进行切换。重新进入一个会话attach-session。进入tmux会话管理器,进行ping。在某个会话进入另一个会话switch。关闭一个会话kill-session。在某个会话,退出当前会话exit。手动创建一个会话new。查看后台的会话 ls。

2023-12-05 21:55:27 640

原创 【MyBatisPlus】快速入门

IService底层操作数据库,用的还是mapper。

2023-11-18 16:41:35 202

原创 【场景】高并发解决方案

CDN 它本身也是一个缓存,它把后端应用的数据缓存起来,用户要访问的时候,直接从CDN上获取,不需要走后端的 Nginx,以及具体应用服务器Tomcat,它的作用主要是加速数据的传输,也提高稳定性,如果从CDN上没有获取到数据,再走后端的Nginx 缓存,Nginx上也没有,则走后端的应用服务器,CDN主要缓存静态资源(js、css、html、png)第一次访问返回200,第二次刷新访问,返回响应码为304,表示页面内容没有修改过,浏览器缓存的内容还是最新的,不需要从服务器获取,直接读取浏览器缓存即可。

2023-11-16 12:14:17 211

原创 【Maven】进阶

写版本的时候不再写具体的版本号,而是直接写变量父工程ssm的pom.xml

2023-11-15 16:22:28 90

原创 【Maven】基础快速入门

在Javaweb开发中,需要使用大量的jar包,我们手动去导入;如何能够让一个东西自动帮我导入和配置这个jar包。由此,Maven诞生了!Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终它把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型。我们说一个项目就是一个对象,作为对象的行为、对象的属性都有哪些呢?

2023-11-15 11:52:12 366

原创 【Kafka】基本概念

主题topic在kafka中是⼀个逻辑的概念,kafka通过topic将消息进⾏分类,不同的topic会被订阅该topic的消费者消费。不同的消费组订阅同⼀个topic,同一消费者组只有⼀个消费者能收到消息,多个消费组中的多个消费者可以收到同⼀个消息。但是有⼀个问题,如果说这个topic中的消息⾮常⾮常多,多到需要⼏T来存,因为消息是会被保存到log⽇志⽂件中的。生产者生产的消息有topic,消费者订阅topic,在重topic的消息队列⾥必然需要topic的存在。通过以下命令可以查看到消费组的详细信息。

2023-11-04 10:43:41 749

原创 【MySQL】SQL优化

首先根据条件取出排序字段和行指针信息,然后在排序区 sort buffer 中排序,如果sort buffer不够,则在临时表 temporary table 中存储排序结果。如果应用使用自动提交的方式,建议在导入前执行 SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行 SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。通过创建合适的索引,能够减少 Filesort 的出现,但是在某些情况下,条件限制不能让Filesort消失,那就需要加快 Filesort的排序操作。

2023-10-17 19:52:06 199

原创 【MySQL】分析SQL的几种方式

完整的访问方法如下: system ,const ,eq_ref ,ref ,fulltext ,ref_or_null ,index_merge , unique_subquery ,index_subquery , range , index ,ALL。5) command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)等。查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。

2023-10-17 11:41:49 327 1

原创 【美团3.18校招真题2】

由于字符串经过修改一定为回文串,且最多修改两次,所以原字符串位置。不一样的个数最多为2。所以统计一下需要改的位置个数,记为cnt。

2023-09-08 22:56:00 271

原创 【美团3.18校招真题1】

首先用r指针不断往map中添加数据,直到map中的数据多于k个,此时让mp.size() = k + 1的元素4已经放入了mp,且r又++了(此时元素5还没放入map),不算map中最后放入的那个元素,map正好存放的是存放k种数字的所有元素。map中始终存放[l,r]区间内的数据,mp.size()

2023-09-08 22:53:28 537

原创 差分数组/前缀和

若区间和为k的整数倍,说明前缀和数组两个元素的差应该是k的整数倍,也即每个元素%k后,余数相同。余数相同,则表示两数之差是k的整数倍。原数组后一位元素 - 前一位元素,得到的就是差分数组。通过差分数组求前缀和,可以得到原数组。对差分数组求前缀和,也可以得到原数组。对前缀和求差分数组,可以得到原数组。

2023-09-03 20:26:10 128

原创 【二分】搜索旋转数组

我们假设nums[l]、nums[mid]就是最小值,那我们可以排除l,即l++,因为nums[mid]可以替代nums[l]若nums[l]、nums[mid]不是最小值,我们直接l++,说明最小值肯定在mid右侧,(mid,r]区间内,则。,无法判断最小值在哪个区间,但一定在(l, r]内部。,说明最小值肯定在(low, mid]区间内,则。

2023-08-25 22:56:25 300

原创 二分查找左右边界

【代码】二分查找左右边界。

2023-05-08 21:37:18 167 1

原创 【栈模拟】计算中缀表达式

若碰到数字,则继续解析数字,直到碰到下一个非数字符号。碰到下一个符号后,根据pre_sign将计算结果压栈,并更新pre_sign和num,继续解析后面的数字。而运算符只是作为数字的符号一同压栈,使用pre_sign记录当前数字的符号。和上一题唯一不同的地方就是本题需要考虑括号,如果碰到左括号,则找到与其对应的右括号,截取出括号内的表达式,再次调用solve计算即可,用返回值更新num。若碰到符号,则根据pre_sign将计算结果压栈,并更新pre_sign和num,继续解析后面的数字。

2023-05-03 11:24:02 106

原创 287. 寻找重复数

快慢指针思想,fast 和 slow 是指针,nums[slow] 表示取指针对应的元素,注意 nums 数组中的数字都是在 1 到 n 之间的(在数组中进行游走不会越界),因为有重复数字的出现,所以这个游走必然是成环的,环的入口就是重复的元素。

2023-05-02 15:12:33 102

原创 【拓扑排序】课程表系列

比如上图中,根据dfs,从0出发后会遍历到1、3,然后会遍历2(visited[2]=true、path[2]=true),遍历3(visited[3]=true、path[3]=true),遍历4(visited[4]=true、path[4]=true),遍历2,然而此时发现path[2]=true,出现环!开始执行 BFS ,不断弹出队列中的节点(表示修完一门课),减少相邻节点的入度(表示先修课程 - 1),并将入度变为 0 的节点加入队列。后序遍历反转就得到结果。

2023-04-29 22:13:50 1000

原创 【dp】最长递增子序列

min_tails数组中维护各个不同长度递增子序列末尾元素的最小值时,arr的后续元素可以和不同长度子序列末尾的最小值比较,从而确定后续元素可以加入哪个子序列,成为新的递增子序列。看最后一个g数组,g[2]=3,表示长度为3的递增子序列末尾的最小值为3。长度为3的递增子序列有[1,6,7]、[1,2,4]、[1,2,5]、[1,2,3]从0遍历到i - 1,若遍历到的元素小于当前值arr[i],表示当前值arr[i]可以和前面的某个值组成递增序列,则尝试更新dp[i]

2023-04-23 20:45:26 417

原创 【模拟】最小栈MinStack & 最大频率栈FreqStack

答:因为这个做法本质上就是把原始栈拆分成多个栈,每个栈都存储着相同频率的数字(这里的频率指的是数字入栈时的频率),且保持了原有的入栈顺序,因此弹出的是一定最接近栈顶的那个数字。问:如果有多个相同频率的数字,怎么保证弹出的是一定最接近栈顶的那个数字?

2023-04-21 21:03:40 116

原创 【dp】不同的子序列 & 两个字符串的删除操作 & 编辑距离

如果当前字符s[i - 1]和 t[i - 1]相等,则可以使用当前字符匹配,并使用s[0]~s[i - 2]匹配t[0]~t[j - 2],即dp[i - 1][j - 1]。如果当前字符s[i - 1]和 t[i - 1]不相等,则不能使用当前字符s[i - 1]匹配,需要使用s[0]~s[i-2]匹配t[0]~t[j-1],即dp[i-1][j]s[i] == t[j] 时 dp[i][j] = dp[i-1][j-1] + dp[i-1][j]所以此时dp[i][j] = dp[i-1][j]

2023-04-14 22:25:29 360

原创 【dfs】岛屿数量和岛屿最大面积

找到一个入口,ans++,进入一个入口后,就把所有能访问的位置的is_visited都置为true。访问过将is_visited置为true,从四个方向遍历后,四个方向都返回能够访问的最大面积。进入一个入口前,检查其合法性。

2023-04-08 11:49:14 164

原创 【dp】最长回文子串 & 最长回文子序列

【代码】【dp】最长回文子串 & 长回文子序列。

2023-04-07 20:50:10 70

原创 【dp】最大子数组和&乘积最大子数组

dp[i]:用到了nums[i]连续子数组的最大和用到了nums[i]连续子数组的最大和dp[i],要么是前面用到了nums[i - 1]的连续子数组最大和dp[i - 1],要么就是nums[i]152. 乘积最大子数组数组的动态规划问题、连续子序列的一个常见的状态定义是:以下标 i 结尾的连续子序列的乘积的最大值最后把整个 dp 数组看一遍求最大值即可。因此状态转移方程可能是:dp[i] = max(dp[i - 1] * nums[i], nums[i])说明:牢记状态的定义,一定以下标 i 结尾

2023-03-30 20:49:52 237 1

原创 【dp】最长公共子串 / 子序列

【代码】【dp】最长公共子串 / 子序列。

2023-03-26 19:39:09 97

原创 【二分查找】旋转数组的二分

用mid将整个区间分为[l, mid]和[mid+1, r],当nums[mid] >= nums[l]时,则[l, mid]有序。当nums[mid] < nums[l]时,则[mid+1,r]有序。将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。先判断target是否存在于有序区间中,若存在,则调整l、r,继续在有序区间查找。若target不在有序区间,则调整l、r去另一半部分有序的区间查找。

2023-03-20 10:58:31 265

原创 【回溯】排列树和子集树

如果纵向增长时,传入fun(startIdx + 1),会导致每层增长的结果都一样。下一层横向增长的时,需要往i之后增长,而不是往startIdx后增长。for循环从startIdx开始,控制横向增长。求子集时,每个节点都要收集path。递归调用,用i + 1控制纵向增长。

2023-03-19 11:36:52 95

原创 【位运算】只出现一次的数字系列

由于a、b两个数字不一样,所以异或的结果不为0,我们找到res的二进制表示中第一个为1的bit(这个bit表示a、b对应位置的bit异或结果位1,即a、b该位置的bit不同),以这个bit是否为1,将整个数组分为两部分,这样相同的数肯定分在两个数组中,而a、b肯定不在一个数组中。由于异或运算满足交换律,且相同的数异或为0,任何数和0异或不变,所以整个数组逐元素异或的结果res就是两个只出现一次的a、b相异或的结果res。数组中所有元素都出现2次,求出只出现一次的数字,整个数组逐元素相异或即可。

2023-03-16 10:21:15 305

原创 【模拟】V字形打印字符

【代码】【模拟】V字形打印字符。

2023-03-14 16:49:05 133

原创 【区间dp】戳气球

以两个数作为左右端点,找出最优解中它们中间那个戳破的气球,中间这个气球把整个队列分为了2部分,要想让中间这个气球和2个端点靠在一起,就需要先把分开的2部分的气球戳破。dp[i][j]表示i~j最大值,i,j不戳破。比如k气球在i,j之间时(i,k,j)被戳破,那么要先戳破i,k、k,j之间的气球,所以。

2023-03-12 13:57:01 102

原创 【LeetCode】不同的二叉搜索树 II

二叉搜索树关键的性质是根节点的值大于左子树所有节点的值,小于右子树所有节点的值,且左子树和右子树也同样为二叉搜索树。而左子树和右子树的生成相较于原问题是一个序列长度缩小的子问题,我们可以通过控制区间大小,使用递归函数完成。个,两个for遍历每种情况,即可生成以i为根节点的BST序列;,说明当前区间不能生成BST树,返回。中每个结点都能作为根节点生成左右子树。为根结点的BST(子)树有。然后以for循环使得。

2023-03-05 09:38:32 132

原创 【LeetCode】背包问题总结

public :// 01背包:逆序遍历 // 组合问题:先物品、后容量 int lastStoneWeightII(vector < int > & stones) {// dp[j]:容量为j的背包,最多装dp[j]的石头 for(int i = 0;i < m;dp背包问题——1049. 最后一块石头的重量 II。

2023-03-02 15:06:21 1063

原创 【LeetCode】字符串相乘

【代码】【LeetCode】字符串相乘。

2023-02-24 21:36:50 117

原创 【前缀和】和为k的子数组 & 路径总和 III

假设当前sum表示[0,9]区间的和,前面[0,3]、[0,5]、[0,7]区间的和是sum - k,则说明[4,9]、[6,9]、[8,9]三个区间的和为k,此时mp[sum - k]应该是3。,key表示和的值,value表示和出现的次数。哈希表存放的key表示区间[0,0]、[0,1]、[0,2]、[0,3]、[0,4]…比如nums = {1,2,3},则map中最终存放的是{{0,1},{1,1},{3,2},{6,1}}构建前缀和数组,以快速计算区间和;动态规划算法(超时)

2023-02-22 15:19:26 328

原创 【MySQL】记录锁+间隙锁可以防止删除操作而导致的幻读吗?

当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻象问题。例如,如果 SELECT 执行了两次,但第二次返回了第一次没有返回的行,则该行是“幻像”行。只要 T1 和 T2 时刻执行产生的结果集是不相同的,那就发生了幻读的问题,比如:T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 6 条行记录,那就发生了幻读的问题。T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 4 条行记录,也是发生了幻读的问题。MySQL 是怎么解决幻读的?针对快照读。

2023-02-19 15:13:54 509

原创 【DFS&并查集】岛屿数量

从没有访问过的某个陆地出发,将所有能到达的陆地的状态都记录为已访问。下次出发不从已访问的陆地出发,每次出发前都把岛屿数 + 1即可。遍历二维数组,合并不同的坐标时,在每个陆地坐标处查看自己右侧和下方的位置是否是陆地,如果是,合并当前陆地和自己右侧或下方的陆地。经典的dfs/bfs问题,给一个起点开始搜索,满足条件则继续调用dfs/bfs。遍历完成后,并查集构造完成,直接获取并查集的集合数即可。

2023-02-11 17:05:35 147

原创 【哈希表&并查集】最长连续序列

先用哈希表去重,遍历哈希表中的元素num,如果num - 1不在哈希表中,说明num可以作为连续序列的左边界,然后不断查看num + 1,num + 2,…是否在哈希表中,知道找到右边界,更新以num为左边界的连续序列的长度。遍历所有元素num,如果num+1存在于并查集中,连接num加入到num+1所在的连通分量,并将num+1所在集合的根节点作为父节点。重新遍历一遍所有元素num,通过find函数找到num所在分量的根结点,也就是最远右边界,从而求得连续区间的长度。

2023-02-10 17:12:36 129

原创 【dp】买卖股票的最佳时机系列题目

第i天不持有股票所得最多现金 = max(第i-1天不持有股票手上的现金, 第i-1天手上持有股票、但是在第i天卖出手上的现金)第i天持有股票手上的现金 = max(第i-1天持有股票手上的现金, 第i-1天手上没有股票、但是在第i天买入股票手上的现金)第i天持有股票手上的现金 = max(第i-1天持有股票手上的现金, 第i-1天手上没有股票、但是在第i天买入股票手上的现金)第i天不持有股票,且不在冷冻期能获得的最大收益 = max(前一天处于冷冻期的收益,前一天不持有股票且不在冷冻期的收益)

2023-01-12 18:36:05 755

原创 高性能网络模式:Reactor 和 Proactor

常见的 Reactor 实现方案有三种:第一种方案单 Reactor 单进程 / 线程,不用考虑进程间通信以及数据同步的问题,因此实现起来比较简单,这种方案的缺陷在于无法充分利用多核 CPU,而且处理业务逻辑的时间不能太长,否则会延迟响应,所以不适用于计算机密集型的场景,适用于业务处理快速的场景,比如 Redis(6.0之前 ) 采用的是单 Reactor 单进程的方案。

2023-01-11 12:02:32 592

原创 【dp】排列问题——零钱兑换和组合总和IV

如果先遍历物品,后遍历容量的话,举一个例子:计算dp[3]的时候,结果集只有 {1,2} 这样的集合,不会有{2,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!很明显,本题使用完全背包算法,求解的是组合数,直接使用完全背包算法即可,为什么是组合数呢?其实就是说7的组合数可以由三部分组成,1和dp[3]、2和dp[2]、3和dp[1]dp[i]: 使用数组nums,凑成整数 i 的排列个数。举个例子比如nums=[1,2,3],target=4。为什么不能先遍历物品,后遍历容量呢?

2023-01-09 19:04:05 496

转载 【C++】模板为什么不支持分离编译?

事实上编译器是对所有的.cpp文件分开编译的:main.cpp包含test.h,就会将main.cpp和test.h编译成main.o目标文件test.cpp包含test.h,将test.cpp和test.h编译成test.o目标文件然后链接器将main.o和test.o以及一些标准库链接成可执行文件。

2023-01-06 23:41:31 324

空空如也

空空如也

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

TA关注的人

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