- 博客(68)
- 收藏
- 关注
原创 【day04】每天3道java后端面试题:final关键字 | HTTP协议 | 进程和线程
在操作系统中,进程是指一个正在执行中的程序,而线程是进程的一部分,是一个程序中执行的代码片段。进程是操作系统资源分配的最小单位,一个进程至少包括一个线程,进程拥有自己的内存空间、文件句柄、环境变量等系统资源。进程间相互独立,互不干扰,每个进程都拥有自己的地址空间。进程通信需要通过进程间通信机制(IPC)来实现。线程是程序执行的最小单位,一个进程中可以包含多个线程,它们共享进程的内存空间和系统资源。多个线程可以并发执行,从而提高了程序的运行效率,同时也会带来线程安全等问题。
2024-03-19 10:30:42
763
原创 【day03】每天三道 java后端面试题:JDK 和 CGLIB 动态代理的区别 | MySQL日志 | Spring框架的好处
面向切面编程(Aspect Oriented Programming):Spring 框架提供了面向切面编程的支持,可以将应用程序的不同功能抽象成切面,并将这些切面与应用程序中的不同组件关联起来,从而降低了应用程序中的重复代码量,并提高了代码的可重用性和可维护性。在使用动态代理时,可以根据需要和具体的场景选择合适的实现方式,JDK 动态代理适用于接口代理的场景,而 CGLIB 动态代理适用于类代理的场景。性能:JDK 动态代理相对于 CGLIB 动态代理来说,因为实现方式不同,生成的代理类的效率会低一些。
2024-02-21 11:14:18
896
原创 【day02】每天三道 java后端面试题:Java、C++和Go的区别 | Redis的特点和应用场景 | 计算机网络七层模型
答题思路: 分别回答概念(内存存储、键值对存储);特点;应用场景。Redis(Remote Dictionary Server)是基于内存存储的键值型的非关系型数据库。它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的操作这些数据结构的命令。Redis的特点包括:高性能:Redis使用内存来存储数据,并且数据存储在单一的进程中,因此速度非常快。多样的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。
2024-02-21 10:45:42
2170
1
原创 【day01】每天三道 java后端面试题:JDK、JRE和JVM | 字节码 | ACID
答题思路:解释字节码;理解 java 程序变为机器代码的过程;从 java 程序变为机器代码的过程出发,理解采用字节码的好处。字节码字节码是 java 程序通过编译器(javac)编译后的中间代码,是一种可移植的二进制代码(即扩展名为 .class 的文件),可以在任何支持 java 虚拟机 (JVM)的平台上运行。字节码不面向任何特定的处理器(CPU),只面向 java 虚拟机。java 程序转变为机器代码的过程。
2024-02-19 23:07:13
713
1
原创 【MySQL】索引基础
索引本质上是数据库引擎用来快速查找数据的数据结构索引能显著提高查询的性能索引内部通常被存储为二进制树在多数情况下,索引很小,足以放进内存,所以使用索引查找数据更快。因为从内存中读取数据总是比从磁盘中读取数据更快。使用索引会带来的问题索引会增加数据库的大小,因为索引必须永久存储在表旁。每次添加、更新或删除记录时,MySQL必须更新对应的索引,这会影响正常操作的性能。因此,应为性能关键的查询保留索引。不应基于表来创建索引,而是基于查询创建索引。因为使用索引的目的是为了加快运行较慢的查询。
2024-01-07 22:31:13
964
原创 【MySQL】创建数据库和表
在测试数据库上尝试更改,确保执行正常且不会产生任何不良影响后,再在生产数据库中更改。utf-8:是MySQL版本5以上使用的默认字符集,可以存储几乎所有国际语言。add:添加列,after可选择添加列的位置,如果不写就默认加在最后一列。show engines:查看当前版本MySQL支持的所有存储引擎。show charset:查询当前版本MySQL支持的所有字符集。特定列的字符集:如想为名字列设置字符集,在数据类型后设置字符集。character set 字符集:设置字符集。default 0:默认值。
2024-01-04 13:18:24
3206
原创 【MySQL】三大范式
文章目录1. 标准化2. 第一范式3. 链接表4. 第二范式5. 第三范式1. 标准化在生成数据库表格之前,需要确保设计是最优的,不允许存在冗余或重复的数据。冗余会增加数据库的大小,使插入、更新和删除操作复杂化。标准化:审查数据库的设计,确保数据遵循一些防止数据重复的预定义规则的过程。基本上有7条规则,也被称为七范式。每条规则都假设已经采用了前面几条规则。对于几乎99%的应用场景,只需应用前三条范式即可。实际工作中,专注于消除冗余和重复,而不需要对每张表和每列逐个应用标准化规则或执着于没
2024-01-02 22:35:36
477
原创 【MySQL】主键和外键
文章目录1 主键2 外键3 外键约束1 主键主键:给定表里每条记录的唯一标识;理想情况下,主键不能修改,它的值应该永远不变。主键是非空的,必须有一个唯一标识。主键可启用自动递增,便于插入数据,不会有重复主键标识;表的主键不能重复。如student_id, course_id等。2 外键外键:一张表中引用了另外一张表主键的那列。如注册表中引用了学生表的主键student_id,引用了课程表的主键course_id,这两个就是注册表的外键。复合主键:表中的两个外键的结合成为主键,唯
2024-01-02 12:29:16
505
原创 【MySQL】事务、事务隔离级别、死锁
例如:两个会话中的事务在更新数据时,语句顺序不同,会发生死锁。事务1的更新1执行后,执行事务2的更新1,再执行事务2的更新2时,会等待事务1释放更新1的锁。事务1执行更新2时又要等待事务2释放更新1的锁。彼此之间握住了对方需要的锁,发生死锁。当不同事物因握住彼此事物需要的锁,两个事物都一直在等待对方,永远无法释放锁。两个事务互相锁住了对方将要操作的数据。隔离级别越高,会有越重的性能和可扩展性的问题。隔离级别越低,更容易并发,会有更多用户可以在同时接触到同一数据。查看当前隔离级别:默认是可重复读。
2023-12-22 13:14:02
1101
原创 【MySQL】触发器trigger / 事件
运行结果:payments_audit表中记录了两条操作记录。结果:原来id为3的total是0,触发器后自动更新为10。创建时间后,删除了表中的数据。
2023-12-13 19:02:56
1100
原创 【MySQL】存储过程/参数验证/函数
返回结果:因为传入的参数是null,所以ifnull函数就将c.state传过去,这样就相当于c.state = c.state,会返回所有数据。因此可把删除存储过程的语句改成:drop procedure if exists,这样删除一个不存在的存储过程时不会报错,更安全。结果:invoices表被更新了,id为2的数据被更新了。将已有的存储过程删除后,继续执行删除操作的话会报错。运行结果:此时生成了一个对应名字的存储过程。运行结果:调用了存储过程中的sql语句。结果:此时会出现错误提示。
2023-12-13 10:52:47
1347
原创 【MySQL】视图:简化查询
视图为数据库提供了一种抽象化,这种抽象化减少了变动带来的影响。如果所有的查询都是基于视图,不会受基础表改动的影响。运行结果:报错,无法删除id为3的行。运行结果:返回了这个视图。
2023-11-30 22:31:01
1304
原创 【MySQL】常用内置函数:数值函数 / 字符串函数 / 日期函数 / 其他函数
返回了明天的同一时间(写码当前是2023-11-29),返回3年后的同一时间。
2023-11-29 23:06:00
2458
原创 【MySQL】聚合函数:汇总、分组数据
having子句中筛选的列,一定是在select中出现的。而where则没有这样的限制。找到位于VA的,消费总额大于100的顾客。
2023-11-17 22:14:39
894
原创 day59【单调栈】503.下一个更大元素Ⅱ 42.接雨水 84.柱状图中最大的矩形
题意:给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路:和每日温度是一样的,把数组遍历两遍就行。
2023-11-13 20:48:51
191
原创 day58【单调栈】单调栈知识 739.每日温度 496.下一个更大元素Ⅰ
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
2023-11-12 14:56:08
222
原创 day57【动态规划】647.回文子串 516.最长回文子序列
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。题意:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。题意:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。此题求回文子序列,可以不连续。跟回文子串不一样,回文子串要求必须连续。子字符串 是字符串中的由连续字符组成的一个序列。回文字符串 是正着读和倒过来读一样的字符串。
2023-11-08 20:09:14
119
原创 day56【动态规划-编辑距离】583.两个字符串的删除操作 72.编辑距离
题意:给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数。题意:给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。
2023-11-06 13:15:38
61
原创 day55【动态规划子序列】392.判断子序列 115.不同的子序列
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。如果有大量输入的 S,称作 S1, S2, …, Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。题意:给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 10e9 + 7 取模。题意:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。思路 :看代码(自己还有点迷糊)
2023-11-05 21:56:47
110
原创 day53【子序列】1143.最长公共子序列 1035.不相交的线 53.最大子序和
如果当前字母不是相同的,那结果就看前一个i和当前j / 前一个j和当前i中的最大值。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。题意:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。题意:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
2023-11-02 13:27:54
122
原创 day52【子序列】300.最长递归子序列 674.最长连续递增序列 718.最长重复子数组
当nums1[i-1] == nums2[j-1]时(因为dp数组的定义是表示以i-1和j-1为结尾的,所以这里比较的是i-1和j-1的值相等,这是符合dp数组含义的),dp[i][j]需要加1,dp[i][j] = dp[i-1][j-1]+1,在[i-1][j-1]的基础上做加1,需要同时回退,然后在此基础上做+1的操作。递归公式:下标i的最长升序子序列长度等于下标j从0到i-1各个位置的最长升序子序列+1的最大值,也就是下标i之前的,即到i-1的最长升序子序列长度+下标i本身(+1)的长度。
2023-11-01 12:49:25
177
原创 day49-51【动态规划】买卖股票的最佳时机问题
思路:动规五部曲,每天的状态分为两种,一个是当天持有股票的情况下手中的最大现金,一个是当天不持有股票的情况下手中的最大现金。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。题目描述:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。贪心思路:计算每天最大利润值,这个方法更简单,但只针对比较特定的场景。
2023-10-27 13:13:22
111
原创 【Redis】Set
INTSET的数组默认下是int16编码,但若某个元素从int16变成int32或int64,那么所有元素的大小都变成int32或int64,会造成一定的空间浪费。因为intset是有序的,所以用二分查找已经是logN的时间复杂度,是最优解了。如果集群元素都是整数,且元素数量不超过512个,使 用INTSET编码。排列紧凑,内存占用少,内存友好。
2023-09-24 10:37:25
53
原创 day44 【动态回归】● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
思路有N件物品,1个最多能装重量为W的背包。第i件物品的重量是weight[i],其价值是value[i]。每件物品都有无限个(可以放入背包多次),求解将那些物品放入背包里,背包中物品价值总和最大吗 ·完全背包和01背包唯一不同的地方是,物品的个数。完全背包每个物品有无数件,而01背包每个物品只有1件。以纯完全背包问题讲解理论和原理:背包的最大重量为4物品有:物品0,重量1,价值15物品1,重量3,价值20物品2,重量4,价值30每个物品都有无限多个。
2023-09-07 13:24:57
35
原创 day43【动态规划】● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049.最后一块手头的重量Ⅱ | 题目链接代码随想录 | 讲解链接题意:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。
2023-07-31 21:38:48
96
原创 day41 【动态规划】 ● 343. 整数拆分 ● 96.不同的二叉搜索树
题意:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。
2023-07-21 13:07:57
82
原创 day39【动态规划】● 62.不同路径 ● 63. 不同路径 II
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。题意:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。题意:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。
2023-07-19 10:26:08
111
原创 day38 【动态规划】● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
动态规划,Dynamic Programming,简称DP。如果某一问题又很多重叠子问题,使用动态规划式最有效的。动态规划中的每一个状态一定是从上一个状态推导出来的。贪心算法没有状态推导,而是从局部直接选最优。
2023-07-14 14:00:40
79
原创 day37 【贪心算法】● 738.单调递增的数字 ● 968.监控二叉树 ● 总结
738.单调递增的数字 | 题目链接代码随想录 | 讲解链接题意:当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。思路:例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。如果从前向后遍历,遇到strNum[i - 1]
2023-07-13 13:59:17
49
原创 day36【贪心算法】● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
题意:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。题意:给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi]。思路:按左边界排序后,把一个区间加入结果集中,不断把新的区间和结果集中的边界做对比。思路:和day35中的射气球的题很像,把重叠区间的个数求出来就可以了。
2023-07-12 13:32:59
59
原创 day35 【贪心算法】● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。可以射出的弓箭的数量 没有限制。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。
2023-07-11 16:50:54
106
原创 day34【贪心算法】● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果
i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。此时局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量,保证第i个小孩的糖果数量既大于左边的也大于右边的。局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。题意:n 个孩子站成一排。
2023-07-10 17:48:20
85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人