自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 黑马程序员Java面试专题(2)|并发编程篇(3)线程池

⭐Q1:说一下线程池的核心参数和实现原理Q2:线程池中有哪些常见的阻塞队列?Q3:如何确定核心线程数?高并发,任务执行时间短 ==》(CPU核数(在任务管理器的性能中查看)+ 1),减少线程上下文切换 并发不高、任务执行时间长 IO密集型任务 ==》(CPU核数 * 2 + 1) 计算密集型任务 ==》(CPU核数 + 1) 并发高、业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看业务里某些数据是否能做缓存是第一步,增加服务器是第二步,

2024-02-27 10:53:32 575

原创 黑马程序员Java面试专题(2)|并发编程篇(2)线程安全

原子性可见性有序性t=N7T8t=N7T8t=N7T8黑马程序员Java面试专题(1)|常见集合篇(1)ArrayList&LinkedList-优快云博客https://blog.youkuaiyun.com/YOYU_/article/details/135932520黑马程序员Java面试专题(1)|常见集合篇(2)HashMap-优快云博客https://blog.youkuaiyun.com/YOYU_/article/details/136235772。

2024-02-26 15:51:39 493

原创 黑马程序员Java面试专题(2)|并发编程篇(1)线程基础

指路👉黑马程序员Java面试专题(1)|常见集合篇(1)ArrayList&LinkedList-优快云博客黑马程序员Java面试专题(1)|常见集合篇(2)HashMap-优快云博客。

2024-02-26 11:22:38 1148

原创 黑马程序员Java面试专题(1)|常见集合篇(2)HashMap

指路👉黑马程序员Java面试专题(1)|常见集合篇(1)ArrayList&LinkedList-优快云博客。

2024-02-23 17:10:47 1116

原创 黑马程序员Java面试专题(1)|常见集合篇(1)ArrayList&LinkedList

时间复杂度分析:评估代码的执行耗时复杂度分析:弄清楚代码的执行次数与数据规模n之间的关系。

2024-02-22 15:40:23 1447

原创 黑马点评Redis项目实战(1)基于Session实现短信登录

下载好资料之后,先在数据库中制作所需的表,如下:接着在工程中按照自己的数据库设置相应的username和root,如下:如下:使用虚拟机安装redis:安装依赖:上传压缩包到指定文件夹:redis默认前台启动:redis后台启动(指定配置启动):修改工程中有关redis的ip地址、端口号、密码等信息:此时,后端项目部署已经完成。

2024-01-27 17:00:20 718

原创 黑马程序员JavaWeb开发|Maven高级

在标签里直接定义版本标签集中管理在后面的统一版本管理标签里只需要将标签里面改为:引用属性即可注意:web开发的起步依赖已经在父工程指定为2.7.5,子工程只用引用即可,无需指定版本。Q:与的区别?是直接依赖,在父工程配置了依赖,子工程会直接继承下来;

2024-01-23 15:04:22 1317

原创 黑马程序员JavaWeb开发|原理篇

自动配置:SpringBoot的自动配置就是当spring容器启动后,一些配置类,bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。Spring Framework:繁琐(依赖、配置)Spring Boot:简单、快捷。maven的依赖传递。

2024-01-18 13:29:51 896

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统全集索引

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-优快云博客。黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)-优快云博客。黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传-优快云博客。黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(6)解散部门-优快云博客。指路(1)(2)(3)(4)(5)(6)👇。

2024-01-16 22:12:03 1622

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(6)解散部门

指路(1)(2)(3)(4)(5)👇黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传-优快云博客。

2024-01-16 21:58:38 1392 1

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(5)登录认证

指路(1)(2)(3)(4)👇黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传-优快云博客。

2024-01-15 15:33:21 1723 1

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(4)员工管理|修改员工、配置文件

指路(1)(2)(3)👇黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)-优快云博客黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传-优快云博客。

2024-01-11 21:49:26 1299

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传

<title>上传文件</title>

2024-01-11 17:41:55 1517

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)

指路(1)准备工作、部门管理链接👇黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(上)准备工作、部门管理-优快云博客。

2024-01-10 21:21:29 1885

原创 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理

注意:项目开发过程中,尽量不要使用sout输出日志,使用日志记录框架记录日志。固定代码,lombok为了简化代码书写,可以直接增加注释@Slf4j,定义日志记录对象。

2024-01-09 22:17:29 4334 1

原创 代码随想录算法训练营第三十天|总结、332.重新安排行程、51.N皇后、37.解数独

欧拉通路:对于图G来说,如果存在一条通路包含G的所有边,则该通路称为欧拉通路,也称欧拉路径。欧拉回路:如果欧拉路径是一条回路,那么称其为欧拉回路。欧拉图:含有欧拉回路的图是欧拉图。题目中说必然存在一条有效路径,所以至少是半欧拉图,也可以是欧拉图。

2024-01-08 23:06:17 857

原创 代码随想录算法训练营第六十天|84.柱状图中最大的矩形

left:表示矩形左边第一个比他小的数字;right:表示矩形右边第一个比他小的数组。寻找每个柱子左边和右边第一个比他矮的,确定宽度,高度,最终得出面积。矩形面积s = (right - left - 1) * w;寻找元素第一个比他大或比他小的元素,都可以使用单调栈的思路。接雨水求的是右边第一个比他大的元素====递增的单调栈。而本题求的是右边第一个比他小的元素====递减的单调栈。注意:需要在 height数组前后各加一个元素0。超时了,时间复杂度是O(n^2)。时间复杂度是O(n)

2024-01-08 11:27:07 612

原创 代码随想录算法训练营第五十九天|503.下一个更大元素II、42. 接雨水

将两个nums数组拼接在一起,使用单调栈计算出每一个元素的下一个最大值,最后再把结果集即result数组resize到原数组大小就可以了。取模来模拟环的遍历过程,主要代码和LC.739基本一样,需要注意的就是下标需要取模值nums[i % nums.length]42. 接雨水 卡尔说:接雨水这道题目是面试中特别高频的一道题,也是单调栈应用的题目,大家好好做做。建议是掌握 双指针 和单调栈,因为在面试中写出单调栈可能有点难度,但双指针思路更直接一些。在时间紧张的情况有,能写出双指针法也是不错的,

2024-01-06 16:53:34 951

原创 代码随想录算法训练营第五十八天|739. 每日温度、496.下一个更大元素I

注意:stack.push(i);的位置在while循环之外,遍历到的元素只要大于栈顶元素就不能被压入栈,而应该继续改变res的值,直到遍历到的元素小于栈顶元素之后才能够被压入栈。递增单调栈,遍历nums2,寻找比遍历的元素大的元素,再去判断nums1中是否有该元素,如果有,就需要通过哈希映射找到对应的元素下标,如果没有则需要弹出该元素,继续遍历。如果栈里面存放的是元素的话,就没有办法定位到下标值,无法计算出距离,所以直接就存入下标。栈里面存放的是元素的下标,确保栈里面的下标对应的元素是单调递增的。

2024-01-05 17:02:52 443

原创 代码随想录算法训练营第五十七天|647. 回文子串、516.最长回文子序列、动态规划总结篇

1.dp数组及下标含义我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话,这个字符串s 就是回文串。布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。2.递推公式当s[i]与s[j]不相等,dp[i][j]一定是false;当s[i]与s[j]相等时,有如下三种情况:3.初始化dp[i][j]初始化为fa

2024-01-04 22:18:51 452

原创 代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72.编辑距离、编辑距离总结篇

本题和LC115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。1.dp数组及下标含义dp[i][j]:表示使以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t相同的最小操作步数为dp[i][j]。2.递推公式3.初始化dp[0][j]表示以下标-1结尾的字符串s(空串)和以下标为j - 1结尾的字符串t相同的最小步数就是删除t中的所有元素,即初始化为j。同理,dp[i][0]表示使以下标i - 1结尾的字符串s和空串相同的最小操作次数为i。4.遍历顺序

2024-01-04 20:02:17 391

原创 代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1]。if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],所以dp[0][0]和dp[i][0]是一定要初始化的。

2024-01-04 16:27:14 767

原创 代码随想录算法训练营第五十三天|1143.最长公共子序列、1035.不相交的线、53.最大子序和(动态规划)

如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]主要就是两大情况: text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同。递推公式中dp[i]依赖于dp[i - 1]的状态,需要从前向后遍历。

2024-01-04 10:44:16 855

原创 代码随想录算法训练营第五十二天|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

根据dp[i][j]的定义,dp[i][0] 和dp[0][j]其实都是没有意义的,根据递推公式可以看出,遍历i 和 j 要从1开始。dp[i][j]:表示以i - 1结尾的nums1和以j - 1结尾的nums2的最长重复子数组的长度。每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1,所以i从1开始进行遍历。遇到nums[i] > nums[i - 1]的情况,count就++,dp[i]:表示以nums[i]为结尾的最长递增子序列的长度。=====以下为✔正确代码=====

2024-01-03 16:13:09 348

原创 代码随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结

可以多次交易买卖股票1.dp数组及下标的含义dp[i][0]:持有股票的状态,拥有的最大现金数dp[i][1]:保持卖出股票的状态dp[i][2]:卖出股票的状态(此时表示第i天就是卖出了股票,与之前的不持有股票状态有所区别)dp[i][3]:冷冻期,持续一天2.递推公式对于以上四种状态,分别写出其对应的递推公式:1)保持持股:dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);维持原样和买入股票两

2024-01-02 23:14:17 363

原创 代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

2)对于不持有股票:dp[i][j + 2] = max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i])1)对于持有股票:dp[i][j + 1] = max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i])dp[i][1]:第一次持有(不一定是在第i天买入,可能之前已经买入,延续前i - 1天的状态)dp[i][3]:第二次持有(不一定是在第i天买入,可能之前已经买入,延续前i - 1天的状态)

2024-01-02 21:08:00 371

原创 代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

那么dp[0][0]表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以dp[0][0] = -prices[0];2)若第i天未持有股票,则dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);2)若第i天未持有股票,则dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);1)若第i天持有股票,则dp[i][0] = max(dp[i - 1][0],

2024-01-02 16:33:28 542

原创 代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(nums[0], nums[1]);然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);4.确定单层递归的逻辑(中)

2024-01-02 11:25:06 879

原创 代码随想录算法训练营第四十六天|139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!

递推公式:1)问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);2)问装满背包有几种方法:dp[j] += dp[j - nums[i]];3)问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);4)问装满背包所有物品的最小个数:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

2023-12-29 16:43:52 441

原创 代码随想录算法训练营第四十五天|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数

考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。dp[j - coins[i]] + 1:+1是加的coins[i]的那一个物品,这样就是dp[j]了( 即凑足金额为j所需的金币个数)递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);首先凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;dp[0] = 0,其他下标非0的元素都是应该是最大值。

2023-12-28 22:21:18 379

原创 代码随想录算法训练营第四十四天|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

纯完全背包求得装满背包的最大价值是多少,和凑成总和的元素有没有顺序没关系,即:有顺序也行,没有顺序也行。题目中说给定目标值是正整数, 所以dp[0] = 1是没有意义的,此处的初始化仅仅是为了推导递推公式。dp[0] = 1是 递归公式的基础,如果dp[0] = 0 的话,后面所有推导出来的值都是0了。物品按照遍历顺序出现{1,2},不会出现{1,2}{2,1}同时出现的情况,此处j = 3的情况中,就出现了[1,1,1][1,2][2,1]后台测试数据是默认,amount = 0 的情况,组合数为1。

2023-12-28 17:53:08 843

原创 代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零

核心思路:将石头分成重量近似的两堆,与之前的416.分割等和子集问题很相似。1.确定dp数组以及下标的含义dp[j]表示容量为j的背包,最多可以背的最大重量为dp[j]。其中,数组中的数字大小,既是石头的重量,也是石头的价值。2.确定递推公式01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);本题则是:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);3.dp数组如何初始化。

2023-12-24 17:04:36 787

原创 代码随想录算法训练营第四十二天|01背包问题,你该了解这些!01背包问题,你该了解这些!滚动数组、416. 分割等和子集

所以递推公式为:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);因为对于二维dp,dp[i][j]都是通过上一层即dp[i - 1][j]计算而来,本层的dp[i][j]并不会被覆盖。01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);所以递推公式为:dp[i][j] = max(dp[j], d[j - weight[i]] + value[i]);

2023-12-13 16:29:45 978

原创 代码随想录了算法训练营第四十一天|343.整数拆分、96.不同的二叉搜索树

头结点为3的二叉搜索树种类 = 左子树2个节点(n = 2)的二叉搜索树种类 * 右子树0个节点(n = 0)的二叉搜索树种类。n = 3的二叉搜索树种类 = 头结点为1的二叉搜索树种类 + 头结点为2的二叉搜索树种类 + 头结点3的二叉搜索树种类。递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]dp[i]:对i进行拆分,得到的最大乘积为dp[i]。

2023-12-11 17:57:59 385

原创 代码随想录算法训练营第三十九天|62.不同路径、63.不同路径 II

想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1](题目中提到的机器人只能向右或者向下走)其中,dp[i - 1][j] 和 dp[i][j - 1]表示的含义都是有从(0,0)出发到(i - 1, j)和(i, j - 1)有几条路径。dp[i][0] = 1,因为从(0, 0)的位置到(i, 0)的路径只有一条,dp[0][j] = 1同理。所以递推公式为:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

2023-12-08 17:40:15 915

原创 代码随想录算法训练营第三十八天|理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

此处创建的数组长度为n + 1,数组里面存放的是每个数的斐波那契值。dp[i]:到达i位置所需要的最小花费dp[i]dp[i]:到达第i阶,共有dp[i]种方法。//直接初始化dp[0]和dp[1],和上一题代码几乎一致。动规基础、背包问题、打家劫舍、股票买卖、子序列问题。dp[i]:第i个斐波那契数值。的台阶开始爬楼梯,所以二者的初始化都为0。本质和上一题的斐波那契数列一样。力扣运行超出时间限制。

2023-12-07 22:22:24 399

原创 代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树、总结

局部最优==》全局最优。贪心无套路,忽难忽易。

2023-12-07 10:38:11 480

原创 代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

若没有last,直接list.add(i + 1),原本应该输出[9, 7],就会输出为[9, 16],就是因为没有减掉前面已经分好段的i。当前的左边界 < 前一个的有边界时,需要增加计数,此情况包含【左边界相同,[1,2],[1,2]的情况】====考虑到合并区间的情况比较复杂,可以反过来====只需要修改右边界,因为左边界已经按顺序排好了,必然是小的。在遍历的过程中相当于是要找每一个字母的边界,if(前一个右边界 >= 当前左边界){放入结果集,并修改左右边界的值。直接将元素放入结果集中。

2023-12-06 22:27:38 364

原创 代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

2.然后根据k进行顺序调整,k就表示前面有几个元素,即索引在哪,放在合适的位置;1.先按照h从大到小排序,如果h相同,按照k升序排列;定义变量是关键,统计5块10块的个数。452. 用最少数量的箭引爆气球。406.根据身高重建队列。3.得到所要的二维数组。

2023-12-05 21:30:43 374

原创 代码随想录算法训练营第三十四天|1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果

从小到大排序,将前面K个全部取反,最后相加求和。先确定一边:右孩子比左孩子得分高(从前向后遍历。再看另一边:左孩子比右孩子得分高(从后向前遍历。不要同时比较两边,顾此失彼。

2023-12-05 11:46:20 369

空空如也

空空如也

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

TA关注的人

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