- 博客(41)
- 收藏
- 关注
原创 JavaWeb4
Getter @Setter @ToString @Data(使用最多)@NoArgsConstructor为实体类生成无参构造。@AllArgsConstructor生成全参数构造。数据库连接池,一个容器,负责分配管理数据库连接。预编译SQL:性能更高,防止SQL注入,更安全。lombok是一个实用的java库,一些注解。delete操作是有返回值的,返回影响的行数。标准接口:Datasource。
2025-04-02 11:49:14
176
原创 华为机试练习
整数转换为字符串String numStr = String.valueOf(str);String有一个contains方法,查看是否包含字符串。
2025-03-28 15:16:04
224
原创 JavaWeb3
使用foreign key关联另外一个表来设置外键,开发很少用,一般用逻辑外键。如果是多字段排序,只有前面字段相同才会按照后面字段排序。是一些操作的集合,这些集合要么一起成功,要么一起失败。左外连接显示交集的和左表交集以外的,右外连接同理。四大特性:原子性,隔离性,一致性,持续性,隔离性。标量子查询,列子查询,行子查询,表子查询。隐式内连接,where后面加上查询条件。结构是b+树,简化查,劣化增删改。ASC默认升序 DESC降序。外连接:左外连接,右外连接。
2025-03-25 14:11:26
173
原创 栈队列练习
利用了hashmap来存放数值,便于寻找最小值。使用了双端队列接口deque,参考。代码基于代码随想录思想实现单调队列。注意hashmap的遍历。
2025-03-24 15:52:28
174
原创 JavaWeb2
主键约束,非空约束,唯一约束,默认值约束,多个约束直接写。主键后加关键字auto_increment可以实现自增。show create table加表名,查看创建表语句。数据类型有三种:数值类型,字符串类型,日期时间类型。drop table if exists 表名。删除所有数据,不加上where。show tables查看表。desc加表名,查看表结构。在后面加上where。
2025-03-24 09:05:18
150
原创 华为机试5
substring()方法用于取子串,substring(i)可以取从i开始到字符串末尾的子串,包括i。不需要ascii码,直接可以c - 'a' + 'A' + 1这样类似方法转换。原本代码一直没过,应该是直接输出的问题,存到字符数组再输出就好了。substring(i,j)可以取i到j的子串,包括i,不包括j。注意对于256的处理来解决进位退位。java中的进制转换参考。
2025-03-20 08:59:20
224
原创 JavaWeb1
通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数。集合参数:请求参数名和形参集合名称相同并且亲够参数有多个,@RequestParam绑定参数关系。复杂实体对象:请求参数名和形参对象属性名相同,按照对象层次结构关系即可接收嵌套Pojo属性参数。数组参数:请求参数名和形参数组名称相同并且有多个,定义数组类型形参就可以接收。简单参数:参数名与形参变量名相同,定义形参即可接收参数。简单实体对象:请求参数名和形参对象属性名相同,定义pojo接收即可。
2025-03-17 20:18:28
211
原创 华为机试4
append方法是StringBuffer类或StringBuilder类的功能,可以将字符串接在现有字符串尾部。根据ascii码值排序。
2025-03-17 15:54:20
184
原创 华为机试3
A的ascii码值是65,a的ascii码值是97,所以要将大写字母转小写再向前移动一位,需要加32再加1。hasNextLine会判断接下来是否有一行(包括空行),有返回true,没有返回false。hasNext会判断接下来是否有空字符,有的话返回true,没有返回false。HashMap的遍历,引自。
2025-03-13 10:36:38
199
原创 华为机试练习2
substring(i,j)表示截取i到j的字符串,包括i,不包括j。截取字符串:substring(i)表示截取下标i以及以后的字符串。如果字符串长度小于2,substring(1)会报错。trim()可以去除首尾空格。字符串转换为数字的方法:转自。
2025-03-12 23:48:29
216
原创 华为机试练习1
一个整数在java中以补码的形式存储,如果是正数,和原码一样,而且是32位,所以循环32次,使用无符号右移,与1,只有1与1等于1,从而判断1的个数。split方法,根据给定的正则表达式的匹配来拆分此字符串。HashSet的特点是不重复无序,所以可以用HashSet解决。输入一行字符串时,next不会读取空格,nextLine会。TreeMap的特点就是排序,所以使用TreeMap。TreeSet的特点是不可重复,排序,默认小到大。注意TreeSet的遍历方法。注意TreeMap的遍历方式。
2025-03-11 21:26:33
202
原创 前缀和练习
首先设置数组计算前缀和,p[i]表示到下标i时的和为p[i],要计算区间的和,相减即可。统计完每行每列的和,使用前缀和求到达各行各列时,两个部分的最小差值,从而得到答案。注意几个vector的初始化。
2025-03-10 13:34:34
162
原创 滑动窗口练习
注意c++的set使用方法,find()用于找到需要的数据,找不到会返回end()注意c++的map和unordered_map的使用方法。insert是插入函数,erase是直接清楚一个数据。在题解的评论区看到了一个模版,还是挺好理解的。注意计算字符串中字母出现次数的方法。
2025-03-07 14:31:01
206
原创 Java第十一天
也叫热点key问题,就是一个高并发访问并且缓存重建复杂的key失效了,无数的请求访问会给数据库带来巨大的压力。是指同一时间段大量的缓存key同时失效或者Redis服务器宕机,导致大量请求到达数据库,带来巨大压力。指客户端请求的数据在缓存和数据库中都不存在,这样缓冲永远不会生效,这些请求都会打到数据库。Maven的坐标指的是资源的唯一标识,通过该坐标可以定义该资源的位置。常见解决方法:1.缓冲空对象。实现简单,但是会有额外的内存消耗。解决方案:1.给不同key添加TTL的随机值。内存占用少,但是可能误判。
2025-03-07 08:35:08
177
原创 Java第十天
如果注解中有多个属性,但是除了value都有默认值,使用时如果只写value,那value也可以不写。特殊属性名:value,如果注解中只有一个value属性,使用注解时,value可以不写。注解就是Java里面的特殊标记,比如@Test,@override。成员方法、成员变量上是否有注解,并把注解的内容解析出来。指注解注解的注解,作用是声明被修饰的注解只能在哪些地方使用。1.基本作用是得到一个类的全部成分并进行操作。4.最主要的用途是:适合做Java的框架。3.可以绕过泛型的约束。
2025-03-05 23:35:00
210
原创 Java第九天
2.为需要测试的业务类,定义对应的测试类,并为每个业务方法编写对应的测试方法(要求:必须公共,无参,无返回值)具体步骤:1.导包,将Junit的jar包导入(注意:IDEA集成类Junit框架,不需要手动导入)就是针对最小的功能单元:方法,编写测试性代码进行正确性测试。1.反射第一步:加载类,获取类的字节码:Class对象。1.基本作用:可以得到一个类的全部成分并进行操作。2.获取类的构造器:Constructor对象。4.获取类的成员方法:Method对象。3.获取类的成员变量:Field对象。
2025-03-04 21:43:33
118
原创 Java第八天
直接调用run方法会被当做普通方法执行,此时还是相当于单线程,调用start方法才是多线程。锁对象的使用规范:1.建议使用共享资源作为锁对象,对于实例方法建议使用this作为锁对象。如果主线程发现第一个线程没有执行完,会主动让出CPU,等第一个线程执行完,才会往下执行。未来任务对象的作用:本质是一个Runnable线程任务对象,可以交给Thread对象。缺点:线程类已经继承了Thread类,不能继承其他类,不利于拓展功能。匿名内部类写法:可以创建Runnable的匿名内部类。创建方法1.Thread类。
2025-03-03 20:04:32
148
原创 Java第七天
Java中每个对象都有Hash值,不同对象的Hash值大概率不相等,也有可能相等(哈希碰撞)HashSet无序,不重复,无索引,底层是继续Hash表存储的。也被叫做键值对集合,键不允许重复,值可以重复,键和值一一对应。TreeSet排序,不重复,无索引,默认按大小升序。LinkedHashMap有序,不重复,无索引。LinkedHashSet有序,不重复,无索引。TreeMap按照键排序,不重复,无索引。List系列集合:有序,可重复,有索引。Set系列集合:无序,不可重复,无索引。
2025-03-02 19:55:30
123
原创 Java第六天
泛型的本质是将数据类型参数化,通过擦除的方式来实现,泛型信息只存在于代码编译阶段,编译期后所有的都被擦除变成Object。extends 类1 表示?接收的必须是类1或者类1的子类。super 类2 表示?接收的必须是类2或者类2的父类。泛型方法在调用的时候再确定类型参数的具体类型。2.可以把字符串的内容转换成内容对应的基本类型。自动装箱:基本数据类型自动转换为包装类型。就是把基本数据类型包装成对象的类型。1.可以把基本类型的数据转换为字符串。定义方法的时候自己定义一个类。
2025-03-01 22:47:33
122
原创 Java第五天
如果某个Lambda表达式只是通过对象名称调用一个方法,并且“->”前后参数一致,就可以使用实例方法引用。如果某个Lambda表达式只是调用一个静态方法,并且“->”前后参数形式一致,就可以使用静态方法引用。定义一个异常类继承Exception,重写构造器,通过throw new异常类()创建异常对象并抛出。定义类、接口、方法时,同时声明了一个或多个类型变量,称为泛型类、泛型接口、泛型方法,统称为泛型。两种创建方式的区别:直接创建的话会存储到字符串常量池,且相同内容的字符串只存储一份。
2025-02-28 21:38:27
188
原创 Java第四天
3.如果Lambda表达式只有一行,可以省略{},同时分号也不写,如果这行是return,return也要省略。是一种特殊的局部内部类,匿名指的是程序员不需要给它声明一个名字,它有个默认隐藏的名字。2.如果只有一个参数,参数类型省略的同时,()也可以省略,但是多个参数不可以。接口是被类实现的,实现接口的类称为实现类,一个类可以同时实现多个接口。C作为实现类,要么定义成抽象类,要么重写它实现的接口的所有抽象方法。(成员变量,构造器,方法,代码块,内部类)如果一个类定义在另一个类的内部,就称为内部类。
2025-02-27 23:06:02
120
原创 回溯算法练习
这一题不能,但是刚开始使用map来存放数字对应字符串,结果声明调用时出现各种问题,原因就是我对map这个数据结构掌握太差了,刚刚接触。后来学习评论区一个直接将字符串存在vector中的做法。主要要解决的问题是回溯函数参数需要提供一个i,用这个i确保取一个数之后,后面取的数要么是它自己,要么在它后面。主要思路来源于代码随想录,讲的特别清晰,这次集中刷几道题对回溯有了更深刻的认识。画图采用树状图画法,将情况捋一遍,来找终止条件,选择条件。主要思想是,先画图,再根据模版解决。
2025-02-27 11:43:27
121
原创 Java第三天
如果子父类中有重复的会优先使用子类的,如果想使用父类的,需要super关键字,如访问重复的成员name,使用super.name,就会返回父类的name,方法也一样,子父类都有方法fun,想访问父类的就是super.fun()子类的全部构造器,都会先调用父类的构造器,再调用自己的。如果父类没有无参构造器,我们需要手写super(参数),指定去调用父类的有参构造器。枚举类都是最终类,不可以被继承,而且构造器都是私有的,所以对外不能创建对象。继承的特点:1.Java是单继承,不支持多继承,不能有多个父类。
2025-02-26 21:05:30
329
原创 动态规划练习
2.找出数组元素间的关系式:根据打劫不能打劫隔壁的条件,可以知道,打劫i户时,上一户应该是i-2或者i-3(注意i-3),如果不打劫这一户,就打劫i-1,因此关系式就是。2.找出数组元素间的关系式:根据杨辉三角的定义,dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]2.找出数组元素间的关系式:跳到i有两种,从i-1或者i-2跳过来,所以dp[i] = d[i -1] + dp[i - 2]1.定义数组元素的含义:dp[i][j]表示第i行第j列数为dp[i][j]
2025-02-26 10:52:04
280
原创 二分查找练习
力扣官方题解设置了一个变量ans,方便找不到target时返回需要插入的位置,但是其实循环到最后,left就是需要插入的位置:循环到left等于right如果没有找到target,这时直接插在left后面就是正确结果。但是之后再分析,二分查找只需要在数组里面设置双指针,这样查找更简单,修改后代码。注释部分是刚开始对特殊情况的考虑,但是后来发现这些特殊情况也被包含在内了。刚写的时候我的代码是这样的,十分繁琐,并且还用到了递归。
2025-02-25 20:46:13
143
原创 Java第二天
实体类是一种特殊类,要求:1.类中变量全部私有,并且提供public修饰的getter和setter方法。二维数组:类型 [][] 数组名 = new 类型[行][列](int [][] a = new int[3][5])在表达式中,较小类型范围的会转换成较大类型范围再进行运算,也就是表达式最终运算结果由最大类型范围决定。有static修饰的方法叫做静态方法,属于类,无static修饰的叫做实例方法,属于对象。成员变量按照有无static修饰分为两种:静态变量(类变量)、实例变量(对象的变量)。
2025-02-25 17:43:30
173
原创 二叉树练习
依然是二叉树用到很多的递归,求直径,也就是求两个结点之间路径的最大值。可以将每个路径都看作一个子树的根节点,如果要经过这个子树根节点的路径最大值,就需要从它的左子树到右子树都遍历到底,边数只需要节点数减一即可。层序遍历,这里还需要把每一层存在二维vector的每一层。从根节点开始,读取根节点,然后是根节点的左右子树读取,接着依次向下,先遍历的先读取,使用队列解决。不能考虑复杂了,一个升序的数组,每次将中间靠左的数据作为根节点val值,折叠左右两边作为子树即可。我的解决方法比较复杂,没有化简。
2025-02-25 10:36:03
219
原创 二叉树练习
二叉树的题用到递归很多,分享一个我在力扣评论区看到的大佬博客,写的非常好,看完受益无穷。递归就是关注一个操作,将各个元素集合在一起当做一个元素,只需要关注这个操作的情况。
2025-02-24 18:13:44
104
原创 二叉树练习
这题第一想法是将二叉树里面的数存到vector中,检查是不是回文序列,结果力扣的数据中有很多NULL,虽然评论区有人解决,但是笔者最终没有写出能够通过的。原本看到翻转二叉树,第一想法是队列,可惜没有实现完成。
2025-02-24 13:35:09
101
原创 二叉树遍历的两种方法:递归与迭代
前序遍历:从根节点出发,首先读取当前节点,然后看看当前节点有没有左子树,如果有,就沿着走下去,一直到左子树为空,此时我们遍历了所有左子树,沿着再走回去,沿途把右子树遍历下来,就是前序遍历。而走回去的过程,是从最后一个左边节点开始的,也就是先进去的后走,最后进去的先走,也就是栈。= NULL),并且能走往回走,也就是t为NULL的时候,需要开始遍历右子树,因此,循环条件需要或栈不为空。中序遍历:从根节点出发,但是不立刻读取当前节点,沿着左边走到底,到底后往回走的时候,先读取再向上。同样是使用一个栈来实现。
2025-02-24 11:10:18
173
原创 双指针练习
首先将数组排序,普通去重时,一个是nums[i]等于nums[i+1]时剪枝,一个是nums[i]等于nums[i-1]时剪枝,两种效果一样。用我在力扣评论区看到的一段话很容易理解: 移动较大一边时:1.移动后原本较大边依然比较大,水池的高不变,但是底减小,容量减少。如果是nums[i]等于nums[i+1]时剪枝,left指针指向的元素就不会出现和当前元素相等的情况,会导致结果数组{-1,-1,2}无法得到。移动较小一边时:1.移动后原本较小这边依然比较小,水池的高减小,底减小,容量减少。
2025-02-23 14:08:15
236
原创 LeetCode128. 最长连续序列
思路是将数组里元素作为key,到这个元素的连续值作为value,默认为1,遍历数组,在哈希表中查找当前元素减一的值,也就是当前元素的上一个连续值,查找到了的话就让当前value加上查找到的项对应的value。注释部分是我刚尝试时,使用循环的方式遍历哈希表,结果超时了,就改用了find函数。初学哈希表,自己写了一下这道题。
2025-02-23 11:47:47
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人