- 博客(38)
- 收藏
- 关注
原创 mybatis中test条件的引号及等于问题
有时候我们需要这样的sql语句我的业务场景是需要name不为null且name不为空字符串且name为张三的时候执行某些逻辑这时在使用mybatis的xml文件写条件的时候经常误写成如下形式</
2024-03-28 11:23:30 428
原创 list.sort()&&Collections.sort()深入理解
所以针对这两个问题对代码进行了优化,就有了代码二的写法,这种写法相当于是重写了compare方法,将null的情况考虑进去,这样的排序就成了不为空的时候,按照level从小到大排序,为空的排在不为空的后面。要解释-1,0,1的含义,首先需要看o1,o2的顺序,也就是sort方法后括号中的内容,我们暂定为参数1和参数2,如图。讲完原理,再说一下业务上的问题,对于业务,我最开始用的是代码一的写法,但是codeReview时就发现了问题。代码二的参数同图中一样,看明白这张图就可以解释-1,0,1的意思了。
2024-03-22 14:22:16 1313
原创 $ref:“\$.Content[o]“问题
后端返回给前端的response中,content值为list列表,第一个数据正常显示,但是第二个数据显示$ref:"$.Content[o]"内容,导致前端无法取值,页面无法正常渲染。
2024-01-23 20:03:34 369
原创 Java8关于stream一些优雅的代码
以前自己在写代码时总是习惯写一些for或者双层for循环,其实这样的写法说白了就是很容易理解,按照自己的逻辑,一步一步的写,基本都可以实现相关的业务。但是在公司中接触了其他人的代码后,发现Java8中的stream等可以解决很多的for循环场景,让代码也变得比以前更优雅,更简洁。记录几个片段。
2024-01-22 16:30:51 359
原创 String.length()方法
该方法返回的是String对象中包含的字符数,不是字节数,比如“Hello”返回的是5,“你好”返回的是2。以前一直用,从来没细想过这个长度到底统计的是什么维度的长度,今天查了下*
2024-01-02 16:12:43 418
原创 JSONObject转为实体类对象
注:JSON中的toJavaObject方法和JSONObject中的getObject方法支持深转换,可以转换实体对象;而JSON中的parseObject方法只能转换一层对象;
2024-01-02 15:08:42 953
原创 报错分析记录
大部分情况是因为idea中Project Structure设置的sdk版本和本地的sdk版本不同造成的,只需要将Project Structure中的sdk版本改成和本地sdk版本相同就可以了。这种错误通常是客户端和服务端的数据传输不一致引起的,通常情况是传入接口中的body和请求的实体类不能对应。这种错误一般是由于字符串中 \ 转义字符造成的,可以检查是否多写了 \ 或者 \ 或者 "这种错误通常是由于字符转数字时出现的异常,需要检查一下字符转数字是否正确。
2023-12-18 19:47:03 330
原创 JUnit报错:java.lang.Exception: No tests found matching Method
报错信息:java.lang.Exception: No tests found matching Method testAdd(com.study.learn.service.impl.studyTest) from org.junit.internal.requests.ClassRequest@de3a06f对Service代码写了单测,在运行时,爆出以上错误,大概意思就是没有找到test方法,后来发现是自己不细心,没有写@Test注解,导致以上报错,加上@Test注解后,单测正常运行。
2023-12-13 16:47:36 92
原创 关于JSONArray,String,List的一些代码
现在有一个字符串,想要使用JSONArray转为list。这里的JSON是alibaba的fastjson。
2023-12-13 15:58:35 23
原创 StringUtils.isBlank(),StringUtils.isEmpty()
以前没注意过,一直用StringUtils.isEmpty(),最近code review突然提到这个,所以记录一下。
2023-11-27 11:41:35 69
原创 Java的default关键字
default是在Java8以后引入的一个新特性,在Java8之前,接口中只能声明方法的签名,不能有方法的实现,在Java8之后,default关键字可以定义默认方法在接口中。当接口中有默认方法时,实现该接口的类可以选择是否覆盖默认方法,如果没有覆盖,默认方法就会被继承和使用,实现类也可以重写这个方法。,如果一个类实现了多个接口,并且接口中有相同的默认方法,那么实现类需要提供自己的实现。默认方法的调用是,而不是实现类的实例。默认方法不能用static和final修饰。
2023-11-27 10:51:20 101
原创 String.format()
String.format()最大的优点就是可以随时替换代码中的名字和年龄,对于相同形式的String语句很有用,主要就是用到了%s和%d作为占位符。:String类型的的占位符要用%s,int类型的占位符要用%d。
2023-11-22 19:39:32 17
原创 LocalDate,LocalTime,LocalDateTime,ZonedDateTime,Date总结
最近用到了这几个类,顺便总结一下LocalDate,LocalTime,LocalDateTime,ZonedDateTime都是Java8+中的新增的时间类API,位于java.time包下,而Date是旧有的。
2023-11-22 13:50:12 119 1
原创 Mock和@InjectMocks的区别
Mock和@InjectMocks是Mockito框架中的两个注解。@Mock用于创建模拟对象,创建的模拟对象的属性值都适用默认值进行初始化,基本数据类型例如int默认为0,boolean默认为false,对于引用数据类型都是用null进行初始化。通过该注解可以创建一个模拟对象,模拟对象具有被模拟的类的相同行为,并且允许自己定义方法的返回值和行为。@InjectMocks用于将模拟对象注入到被测试类中的相应字段。
2023-11-21 17:55:20 594 1
原创 String,StringBuffer和StringBilder总结
关于String,StringBuffer和StringBilder的总结三者的主要区别:一、String1、String是不可变字符串,当一个String对象被修改时,堆内存中需要创建新的内存来存储新的值,无用的对象会被垃圾回收器回收。如果String对象总是被修改,会极大的浪费内存空间。2、String在三者中的效率最低。3、当创建String对象时,可以利用构造方法String str1 = new String(“hello”);的方式进行初始化;也可以使用赋值的方法进行初始化,Strin
2020-11-02 11:56:15 180 1
原创 连续子数组最大和
连续子树组最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。示例输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6分析连续子树组并一定从第一个元素开始。可以分别计算截止到第i号元素之前数组的最大和,例如示例中,分别计算-2,1,-3…-5,4之前各个数组的和,然后再比较最大值即可。Java代码实现import java.util.Math;public int
2020-10-23 16:03:39 148
原创 栈的压入、弹出序列
栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)Java代码实现public boolean isPopOrder(int[] pushA, int[] popA){ if(pushA.length == 0 || popA.len
2020-10-23 15:27:44 58
原创 平衡二叉树
平衡二叉树输入一棵二叉树的根节点,判断该二叉树是否是平衡二叉树。平衡二叉树定义平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法)性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。分析此题就是在求二叉树的最大深度的基础上再做一些深一步的变化。可以自底向上考虑,即后序遍历+剪枝二叉树类定义public class TreeNode{ public int val; public TreeNode le
2020-10-17 22:54:21 70
原创 反转链表
反转链表输入一个链表,反转链表后,输出新链表的表头。分析双指针法。就是定义两个指针,pre用于指向当前节点的前一个节点,next用于指向当前节点的后一个节点,具体的流程可以查看leetcode上的解析,很详细。虽然过程有些复杂,但是代码很简单,只要理解了逻辑,代码很容易实现。Java代码实现链表节点类的简单实现public class ListNode{ public int val; public ListNode next = null; public ListNode(int val
2020-10-17 22:19:52 45
原创 数值的整数次方
数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0分析首先要注意的是int类型的数的取值范围是负的 2的31次方到2的31次方减一!!!所以在代码实现的过程中就要考虑到负数次方。其次要注意的就是double类型的浮点数,这些就是变成的细节问题了。代码实现public double Power(double base, int exponent){ if(base = 0.0){
2020-10-16 16:02:07 50
原创 二进制中1的个数
二进制中1的个数输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。分析如果一个数不为0,那么至少它有一位为1;如果把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011。减1的结果是把最右边的一个1开始的所有位都取反了。这个时
2020-10-13 23:26:09 77
原创 斐波那契数列
斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1),n<=39 。分析斐波那契数列公式:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2),(n>=3,n∈N*);递归法递归是最简单的实现方式,但是递归的缺点是不考虑时间复杂度和内存问题。代码public int Fibonacci1(int n){ if(n <= 1){ return n; } return Fibonacc
2020-10-04 09:31:26 362
原创 重建二叉树
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析1、前中后序遍历的原理一定要搞懂!!!所有的遍历都是以“根”节点为参照的。下面我将左孩子节点称为“左”,右孩子节点称为“右”,根节点称为“中”。前序遍历就是根节点在前边,中序遍历就是根节点在中间,后序遍历就是根节点在后边!个人感觉这样记的特别准。前序遍
2020-10-03 16:13:37 51
原创 构建乘积数组
构建乘积数组给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。例如:输入{1,2,3,4,5}输出{120,60,40,30,24}...
2020-10-03 10:48:14 87
原创 二叉树的深度
二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。简单二叉树类public class TreeNode{ public int val = 0; public TreeNode left = null; public TreeNode right = right; public TreeNode(int val){ this.val = val; }}方法一:递归法(分治法)求一个规模为n的问题,
2020-09-29 21:58:56 108
原创 Java实现不用加减乘除做加法
Java实现不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析首先可以看一下下面这张表看得出来,无进位和与异或运算是相同的,进位和与运算是相同的,但是需要左移一位。这样两个数字的二进制之和s=a+b就变成了:1.无进位和:n=a^b,异或运算;2.进位:c=a&b<<1,与运算后再左移一位;和s=(无进位和)n+(进位)c即s=a+b转化成了s=n+c,然后循环n和c,直到c=0,此时s=n,return n;(这其中
2020-09-29 20:01:27 436
原创 二叉树镜像-Java
操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5分析
2020-09-17 10:10:27 92
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人