- 博客(187)
- 资源 (4)
- 收藏
- 关注
原创 SpringBoot项目中注解使用规范
原因:cglib实现动态代理,其底层采用了ASM字节码生成框架,直接对需要代理的类的字节码进行操作,生成这个类的一个子类,并重写了类的所有可以重写的方法。当spring.aop.proxy-target-class缺省配置时默认也是true,spring-boot里面默认就是true,所以默认使用aop的cglib代理。由于cglib的代理类使用的是继承,这也就意味着cglib不能代理final类。springBoot中,注解在私有方法上,或者内部调用的方法上,无法生效原因解析。
2025-03-06 23:00:00
668
原创 【java基础】反射原理解析
Java的反射(reflection)机制:(动态语言的关键)程序运行时,动态地获取一个类的所有属性和方法,还可以操作这些方法和属性。
2025-03-06 13:00:00
823
原创 Mybatis操作数据库的两种方式:Mapper代理模式
接口定义:userDao 和UserMapper一样的写法不同,用来定义方法接口其可以自己写实现类也可以通过mapper() 方式来操作数据总清单文件:数据库配置子清单文件模板统一原生写法的子清单文件 namespace和增删改查节点信息任意配置mapper写法的子清单 namespace="包名.接口"接口方法名和节点id一致接口方法参数和节点parameterType一样接口的返回值跟节点resultType一样。
2024-05-12 19:22:59
1112
原创 Mybatis操作数据库的两种方式:原生API
select()是mybatis留给程序员的自定义接口,其可以返回程序员自定义的数据结构,可以回一个map,也可以是实体对象这里以JsonString 为指定数据结果为例进行实现select()可以处理自定义的特殊结构,ResultHandler<> 是带泛型的接口,我们自定义的resultHandler,如JsonResultHandler 均实现ResultHandler<>接口其中:@Override。
2024-05-11 16:36:45
863
原创 Mybatis框架笔记:基础信息
MyBatis本是apache的一个iBatis,2010年这个项目由apache software foundation迁移到了,并且改名为MyBatis。2013年11月迁移到。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于的框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。摘自《百度百科》
2024-05-09 16:36:04
1017
原创 LeetCode 热题 100 Day02
滑动窗口类问题:总能找到一个窗口,从前往后移动来查找结果值。这个窗口的大小可能是固定的,也可能是变化的。但窗口的大小一定是有限的。
2024-04-15 20:07:33
794
原创 面试题总结:HashMap底层原理
不仅仅是一道题,之后的某一天,它可能是破局的关键。存储键值对结构、底层数据结构、红黑树和链表位运算、put、get方法的实现segment锁和桶锁、线程不安全和HashTable、ConcurrentHashMap。
2024-04-15 17:40:18
1712
原创 【牛客】美团2024届秋招笔试第三场编程真题
求最长连续子序列,该子序列满足平均值为k的条件1.双for循环遍历所有子串,但是超时了2.第二种思路, 给所有的元素-平均数k,问题就变成了最长连续子序列,和为0,所以呢?然后相等还是遍历所有子串,和之前没有什么不同了,时间复杂度还是过不去。3.第三种思路,借鉴大佬的思路,原来考的是前缀和+哈希表哈希表里面存的值是索引,需要注意累加和sum需要用long使用pre来记录前n个元素的和,map记录的是截止当前索引i下,元素和为curO(n) for循环的存好: O(2n) map的元素存储损耗。
2024-04-07 17:16:14
1456
原创 【牛客】【刷题节】美团2024届秋招笔试第一场编程真题
这道题是简单题,主要是一个逻辑实现和判断的问题。但是简单题一般喜欢加一点小障碍,所以读题的时候就要比较注意一些约束条件。就比如这道题:过了15/20个测试用例,出现error, 当时没明白到底哪里校验有问题,最后发现:原价、折扣、满减都是正实数。所谓正实数:没有0!!!正实数:是实数(real numbers)中的一个重要概念,它们是大于0的所有实数。正实数包括正整数、正分数(即正小数)以及正无理数。还涉及一些边边角角的考核: 小数点保留两位。
2024-03-27 15:59:34
1414
原创 【牛客】【刷题节】美团2024届秋招笔试第二场编程真题
题目见的得少,结果看到题目的时候,看了半天没理解题目的意思对于int long的范围要有概念,否则会导致结果出错看懂题目后,大部分其实是简单题,一些难一点的题目是动态规划问题。关键点在于如何和动态规划思路联合起来,说起来还是题目做的少了。
2024-02-25 16:40:54
2749
2
原创 LeetCode 热题 100 Day01
哈希结构,即hash table,哈希表|散列表结构。图摘自《代码随想录》哈希表本质上表示的元素和索引的一种映射关系。若查找某个数组中第n个元素,有两种方法:1.从头遍历,复杂度:O(n)2.使用数组这种hash结构,根据下标(索引)来查找,复杂度:O(1)实现了。指:根据映射关系,构造hash表的方法: 当根据映射方法进行映射,构造hash表时,出现两个元素抢占一个索引的现象,叫做hash碰撞。如:hash函数 index=(value%3)
2024-02-19 03:50:14
1119
原创 Leetcode 84. 柱状图中最大的矩形
给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。这道题目和接雨水的题目类似,接雨水的题目求柱子外组成得到部分,而这道题求解的是柱子内组成的部分。对于这道题,我们呢选中一个柱子,高度h,进行扩展,左边第一个比它小的元素下标是i, 右边第一个比它小的元素下标为j, 则矩形的宽度为:w=j-i-1则选中的矩形可得到的最大高度为: S=h*w=h*(j-i-1)
2024-02-18 14:22:32
327
原创 Leetcode 42. 接雨水
给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。左边的柱子和右边的柱子形成围栏,可以使中间能够积水求最大的积水面积。h*w1.横向求解这里的单调栈采用的是横向求解。求最右变第一个比他大的值作为右边界,栈顶第一个元素l=pop()作为底座,下下一个栈顶元素peek()作为左边界则最高高度=min(height[i], height[peek()])则积水面积高度=最高高度-底座=min(height[i], height[peek()])-l。
2024-02-17 01:55:45
320
原创 Leetcode 503. 下一个更大元素 II
给定一个循环数组nums的下一个元素是nums[0]),返回 nums中每个元素的。数字x的是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。这里还是求某个值的右边第一个比他大的值,特别的是,数组是循环的,如果在数组末尾没有找到比他大的数,则从新从头开始查找。这里涉及一个数组循环的问题:有两种方式。(1) 将nums复制一份拼接在后面 ,实现循环取数据` (2) 不复制nums,使用取模的方式来取数据。
2024-02-17 00:41:51
393
原创 Leetcode 496. 下一个更大元素 I
nums1中数字x的是指x在nums2中对应位置的比x大的元素。给你两个的数组nums1和nums2,下标从开始计数,其中nums1是nums2的子集。对于每个,找出满足的下标j,并且在nums2确定nums2[j]的。如果不存在下一个更大元素,那么本次查询的答案是-1。返回一个长度为的数组ans作为答案,满足ans[i]是如上所述的。题意理解,实质上是指nums1中元素,在nums2中的位置上,其右边第一个比他大的值的下标。
2024-02-17 00:07:45
340
原创 Leetcode 739. 每日温度
给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。根据题目来看,已知一个数组,求每个元素后第一个比他大的是第几个元素。这道题是一个典型的单调栈问题,可用于求解,后第1个比他大或小的元素等。使用单调栈来解决这道题。单调栈的作用: 记录遍历过的元素的下标,因为求解的是其后第几个比他大,涉及下标的计算。求解其后第一个比他大的元素,则栈应是单调增的栈。
2024-02-16 23:33:12
449
原创 Leetcode 516.最长回文子序列
题意理解:给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。回文理解为元素对称的字串,这里求字符串中最长的对称字串的长度。使用动态规划的思路来进行解题。解题思路:(1)定义dp数组dp[i][j]表示从i到j的字串中最长回文序列的长度(2)递推公式当且仅当s[i]==s[j]否则:dp[i][j]=Max(dp[i+1][j],dp[i][j-1],dp[i+1][j-1])
2024-02-16 17:58:56
465
原创 Leetcode 647. 回文子串
给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。回文子串可以简单看作是元素对称的字符串,求一个字符串的会问字串,以下给出了一个例子:s = "aaa"66个回文子串: "a", "a", "a", "aa", "aa", "aaa"这里采用动态规划的思路来解决问题。(1)定义dp数组。
2024-02-16 17:23:37
591
原创 Leetcode 72 编辑距离
题意理解:给你两个单词word1和word2请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符将word1转换为word2,可以进行三种操作:增、删、改,最少操作几次其中特别注意:增和删为互逆操作,其效果是一样的:在word1删除一个元素或在word2添加一个元素,都是进行一次操作效果。这里我们使用动态规划来进行解题。解题思路:(1)定义dp数组。
2024-02-16 16:59:33
443
原创 Leetcode 583 两个字符串的删除操作
给定两个单词word1和word2,返回使得word1和word2所需的。可以删除任意一个字符串中的一个字符。该题的要求是:当前有两个单词,要是两个单词剩余的部分相同,最少需要删除多少个字母。这里有两个思路来求解这道题:一种是设置合理的dp数组,通过动态规划的思路来求解最小的操作次数。另一种方式是求解两个单词的最长公共子序列,然后两个单词长度和-二倍的最长公共子序列即为最小删除的次数。动态规划:(1)定义dp数组。
2024-02-16 16:33:28
485
原创 Leetcode 115 不同的子序列
题意理解:给你两个字符串s和t,统计并返回在s的中t出现的个数,结果需要对 109 + 7 取模。即此题可以理解为:从s中删除元素去构造t,有多少种方法或者也可以理解为:s中按顺序取t,有多少个则一定有s和t的最长公共子序列为t, 那么s中有多少个这样的最长公共子序列呢。这里采用动态规划思路来解题,则首先要明确dp数组的含义。解题思路:(1)定义dp数组dp[i][j]表示s的第i个元素前有多少个t的第j个元素前子串。(2)初始化。
2024-02-14 15:14:49
424
原创 Leetcode 392 判断子序列
题意理解:给定字符串和,判断是否为的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。即判断s和t是否存在一个最长公共子序列,且该最长公共子序列==s这里采用一个动态规划的思路求解最长公共子序列,其长度==s.size解题思路:(1) 定义dp数组定义二维dp数组,dp[i][j]表示s第i个元素前,t第j个元素前最长公共子序列。i,j指示的是元素之间的位置。
2024-02-14 14:16:03
375
原创 Leetcode 53 最大子数组和
题意理解:给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。所以每个元素都有两个状态,是前一部分的延续,或从此处重新开始计算。我们采用动态规划思路来解题。解题思路:(1)定义dp数组dp[i]表示0到i的累加的最大和(2)初始化其余位置不重要会被之后的操作覆盖(3)递推公式(4) 答案:max(dp)
2024-02-14 00:33:34
475
原创 Leetcode 1035 不相交的线
题意理解:在两条独立的水平线上按给定的顺序写下nums1和nums2中的整数。现在,可以绘制一些连接两个数字nums1[i]和nums2[j]请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。从上面的图可以看出,此题其实求的还是最长公共子序列,由他们可以组成最多的且不相交的线。所以该题是套了一个壳子的求最长公共子序列的问题,注意最长公共子序列不要求连续。解题思路:(1)定义二维dp数组。
2024-02-14 00:12:32
732
原创 Leetcode 1143 最长公共子序列
题意理解:给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。此题求解两个数组的最长公共子序列,其中特别的:该最长子序列不要求连续。
2024-02-13 23:59:32
618
原创 Leetcode 718 最长重复子数组
题意理解:给两个整数数组nums1和nums2,返回两个数组中、长度最长的子数组的长度。如:则最长重复子序列为: 321长度为3这里采用动态规划解决这个问题。最长公共子序列,涉及从nums1的i位置和nums2的j位置,长度为x的公共子序列。所以:我们这里定义一个二维数组来统计状态。解题思路:(1)定义二维dp数组dp[i][j]表示从nums1中到第i个位置之前,即nums1[i-1]的位置, 从nums2中到第j个位置以前,即nums2[j-1]的位置,所获得的最长公共子序列。
2024-02-13 16:31:52
564
原创 Leetcode 674 最长连续递增序列
题意理解:给定一个未经排序的整数数组,找到最长且,并返回该序列的长度。可以由两个下标l和rl < r)确定,如果对于每个l <= i < r,都有,那么子序列就是连续递增子序列。这里的子序列,要求连续,所以当碰到不递增的情况断开。这里采用动态规划的思路来进行解题。解题思路:(1)dp[i]表示到nums[i]符合递增要求的子序列的最大长度。(2)初始化每个数字开始,都能获得一个长度的递增子序列所以dp数组初始化为1(3)递推公式。
2024-02-13 15:09:01
813
原创 Leetcode 300 最长递增子序列
题意理解:给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。这里的子序列:不连续的递增子序列,不要求连续,所以无法通过相邻比较解题我们使用动态规划的思路进行解题,计算到每个位置,所含的最长子序列长度解题思路:(1)定义一维dp数组dp[i]表示nums[i]为结尾,所获得的最长子序列长度(2)初始化每个位置dp[i]=1,最长一个元素(3)递推公式。
2024-02-11 23:24:13
356
原创 Leetcode 714 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中prices[i]表示第i天的股票价格;整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。这里的股票问题在于:交易期间可以无限次买入卖出唯一的区别是这里涉及,卖出时,需要支付手续费。对于这类问题,可以使用动态规划的思路来进行解题。
2024-02-11 23:03:09
240
原创 Leetcode 309 买卖股票的最佳时机含冷冻期
给定一个整数数组prices,其中第prices[i]表示第i天的股票价格。设计一个算法计算出最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)股票问题的升级问题,在卖出后存在一天的冷冻时间,不能进行交易。股票这一类的问题都可以通过分析各个状态使用动态规划来解决这个问题。四个状态:1.持有股票的状态:包含当天买入2.卖出后未买入的持续状态:冷冻天后,买入前3.卖出天:包含当天卖出4.冷冻天:不允许交易(1)定义二维dp数组dp[i][0]持有股票的状态。
2024-02-11 22:41:55
380
原创 Leetcode 188 买卖股票的最佳时机 IV
题意理解:给你一个整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。也就是说,你最多可以买k次,卖k次。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。这道题的特别之处是,最多可以买卖k次,k是一个可以变化的值,所以使用j对k的数值进行遍历。解题思路:(1)定义dp二维[][]数组dp[0][0]表示不操作dp[i][j=2(k-1)+1]表示第k次买入。
2024-02-11 17:00:07
381
原创 Leetcode 123 买卖股票的最佳时机 III
题意理解:给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成交易。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。这道题目的特殊之处在于,至少两次交易:包含: 不交易、 交一次、 交易两次这里为了便于理解对交易期间每个状态进行定义:五种状态无操作:dp[i][0]第一次持有:dp[i][1]第一次不持有:dp[i][2]第二次持有:dp[i][3]第二次不持有:dp[i][4]
2024-02-11 16:25:07
385
原创 Leetcode
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。这道题允许在该期间内多次交易。可以使用贪心和动态规划来解决,这里使用动态规划进行思考。(1)dp[][]定义二维动态数组:dp[i][0]:表示当天持有股票所得的最大收益。包含当天买入。dp[i][1]: 表示当天不持有股票所得的最大收益。包含当天卖出。(2)初始化dp[0][1]=0;
2024-02-11 15:55:48
337
原创 Leetcode 121 买卖股票的最佳时机
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。注意:这里只有一只股票,只进行一次买卖,求最大利益。所以:对于每一天,都有两个状态:持有股票、不持有股票这里定义一个二维dp数组:dp[0]表示持有股票能获得的最大收益,dp[0]表示不持有股票能获得最大大受益。对于不持有股票的状态:包含当天卖出。
2024-02-10 23:54:33
477
原创 Leetcode 337 打家劫舍 III
之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。所以我们在每层设置一个dp数组: dp[0]表示不偷所能获得的最大金额, dp[1]表示偷所能获得的最大金额。小偷又发现了一个新的可行窃的地区。dp[0]=max(max(偷左,不偷左),max(偷右,不偷右))每个节点都有两种状态:偷当前节点,和不偷当前节点。dp[1]=max(根,不偷左,不偷右)偷了根节点,左右孩子节点不能偷。偷了左右孩子,根节点不能偷。所以每层返回一个dp数组。
2024-02-09 01:37:07
520
1个积分的com.cb.eclipse.folding1.0.6.zip
2020-08-05
基于文件资源的权限分配管理系统
2018-01-17
instantclient-basic-nt-12.1.0.1.0
2017-08-01
Visual C++ Redistributable Packages for Visual Studio 2013(x64,x86版本)
2017-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人