自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 提升开发体验的网站

提升开发体验的网站

2022-10-25 16:03:07 164 1

原创 mybatisplus MetaObjectHandler 失效解决方案

myabtisplus MetaObjectHandler填充字段失效的场景、原因及解决方案

2022-10-25 15:25:57 4641

原创 使用EasyExcel导出表单表头-单层表头和多层表头

一、导入pom<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version></dependency>相关版本信息可去maven库查询,链接如下:https://mvnrepository.com/artifact/com.alibaba

2022-02-09 15:47:30 9941 1

原创 netty分析-基于helloworld

本文主要是针对 netty使用-helloworld一文中的代码,简单分析下其中使用到的netty的api。

2022-01-24 19:52:22 94

原创 netty使用-helloworld

本文主要是通过利用netty编写一个helloworld功能,实现服务端和客户端间的交互,来熟悉netty的Api。1、服务端package helloworld;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;impor

2022-01-04 22:42:10 423

原创 如何配置mybatis-generator插件及使用中可能遇到的问题

一、配置流程1.配置pom引入相关的依赖<!--mybatis相关依赖--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version></dependency>

2021-07-22 11:40:53 569

原创 Netty学习笔记(一)

一、预备知识1.BIO​ Java BIO(Blocking IO) 是阻塞IO,工作原理图如下:​ 特点:​ 服务器需要为每一个客户端的连接请求启动一个线程,当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大。​ 连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 Read 操作上,造成线程资源浪费。​ 如果连接少,他的延迟是最低的,因为一个线程只处理一个连接,适用于连接数不是很多,但是需要连续传输大量数据的场景。比如数据库连接:数据库的连接 都是事先创建好的 , 而且

2021-04-22 13:54:26 88

原创 BeanCopier属性复制值全为null

一、问题在解决一个参数校验过程中,发现beanCopier复制的所有值全为null。beanCopier使用代码如下public static <T> T copy(T src) { T target = null; try { if (null != src) { target = (T) src.getClass().newInstance(); BeanCopier beanCopier = BeanCo

2021-02-20 17:54:55 2354

原创 Mybatis-Plus自动生成的数据库id过长

一、问题作为一名第一次使用mybatis-plus的萌新开发工程师,在项目开发过程中遇到一个问题。当使用mybatis-plus自带的mybatis-generate生成DO文件,如下图所示DO类由注释@Table修饰,主键id由注释@Id,@GeneratedValue修饰。但是使用这样的默认DO进行数据库操作时,会有导致数据库自动生成的主键id过长,如下所示这样的19位id,会存在一些问题:1)前端拿到这样的id后,会发生Number精度丢失,导致id数值发生变化,使得前后端的id不一致.

2020-11-27 16:53:24 6859 3

原创 leetcode算法题-剑指Offer篇(24)

1、构建乘积数组1.1 题目描述:给定一个数组 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]。不能使用除法。1.2 题解1.2.1根据表格的主对角线(全为 11 ),可将表格分为 上三角 和 下三角 两部分。分别迭代计算下三角和上三角两部分的乘积,即可 不使用除法 就获得结果public int[] constructArr(int[] a) { i

2020-09-03 22:13:34 88

原创 leetcode算法题-剑指Offer篇(23)

1、 股票的最大利润1.1 题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?1.2 题解1.2.1 动态规划状态定义: 设动态规划列表 dp ,dp[i] 代表以 prices[i]为结尾的子数组的最大利润(以下简称为 前 i 日的最大利润 )。转移方程: 由于题目限定 “买卖该股票一次” ,因此前 i日最大利润 dp[i] 等于前 i - 1 日最大利润 dp[i-1] 和第 i 日卖出的最大利润中的最大值。前i日最大利润=max

2020-09-03 21:18:25 98

原创 leetcode算法题-剑指Offer篇(22)

1、 n个骰子的点数1.1 题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率1.2 题解1.2.1...

2020-09-02 20:11:17 91

原创 leetcode算法题-剑指Offer篇(21)

1、 左旋转字符串1.1 题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。1.2 题解1.2.1 切片 public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n);

2020-08-31 20:44:51 130

原创 leetcode算法题-剑指Offer篇(20)

1、 和为s的两个数字1.1 题目描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。1.2 题解1.2.1 双指针 public int[] twoSum(int[] nums, int target) { int i = 0, j = nums.length - 1; int[] res = null; while (i < j) {

2020-08-30 20:27:42 79

原创 leetcode算法题-剑指Offer篇(19)

1、平衡二叉树1.1 题目描述:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树1.2 题解1.2.1 深度遍历,从底至顶 public boolean isBalanced(TreeNode root) { return help(root)!=-1; } //用left,right记录root左右子节点的深度,避免遍历root时对左右节点的深度进行重复计算。 //考虑到需要

2020-08-28 22:49:27 69

原创 leetcode算法题-剑指Offer篇(18)

1、0~n-1中缺失的数字1.1 题目描述:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。1.2 题解1.2.1 二分法 public int missingNumber(int[] nums) { int i=0,j=nums.length-1; while(i<=j){ int mid=(i+j)/2;

2020-08-28 19:46:16 947

原创 leetcode算法题-剑指Offer篇(17)

1、数组中的逆序对1.1 题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。1.2 题解1.2.1 暴力求解 public int reversePairs(int[] nums) { int count=0; for(int i=0;i<nums.length-1;i++){ for(int j=i+1;j<nums.length;j++)

2020-08-27 22:16:04 111

原创 leetcode算法题-剑指Offer篇(16)

1、最长不含重复字符的子字符串1.1 题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。1.2 题解1.2.1 动态规划 + 哈希表 public int lengthOfLongestSubstring(String s) { Map<Character, Integer> dic = new HashMap<>(); int res = 0, tmp = 0; for(int j

2020-08-25 21:40:34 96

原创 leetcode算法题-剑指Offer篇(15)

1、把数组排成最小的数1.1 题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。1.2 题解1.2.1 快速排序 public String minNumber(int[] nums) { String[] strs = new String[nums.length]; for(int i = 0; i < nums.length; i++) strs[i] = String.

2020-08-24 19:57:17 95

原创 leetcode算法题-剑指Offer篇(14)

1、连续子数组的最大和1.1 题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。时间复杂度为O(n)。1.2 题解1.2.1 动态规划 public int maxSubArray(int[] nums) { int res=nums[0]; for(int i=1;i<nums.length;i++) { if(nums[i-1]>0)

2020-08-21 21:58:28 158

原创 leetcode算法题-剑指Offer篇(13)

1、数组中出现次数超过一半的数字1.1 题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。1.2 题解1.2.1 摩尔投票法 public int majorityElement(int[] nums) { int i=0,vote=0; for(int num :nums){ if(vote==0)i=num ; vote+=(num ==i)?1:-1; }

2020-08-20 21:31:31 159

原创 leetcode算法题-剑指Offer篇(12)

1、二叉搜索树与双向链表1.1 题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。1.2 题解1.2.1后使用list保存中序遍历后的节点,之后再对list中的节点进行处理 public Node treeToDoublyList(Node root) { ArrayList<Node> list = new ArrayList<>(); if(roo

2020-08-19 21:55:25 87

原创 leetcode算法题-剑指Offer篇(11)

1、二叉搜索树的后序遍历序列1.1 题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。1.2 题解1.2.1 递归后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。二叉搜索树定义: 左子树中所有节点的值 << 根节点的值;右子树中所有节点的值 >> 根节点的值;其左、右子树也分别为二叉搜索树。 public b

2020-08-18 22:21:10 87

原创 leetcode算法题-剑指Offer篇(10)

1、栈的压入、弹出序列1.1 题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。1.2 题解1.2.1初始化: 辅助栈 stackstack ,弹出序列的索引 ii ; 遍历压栈序列: 各元素记为 numnum ; 元素 numnum入栈; 循环

2020-08-17 21:42:02 80

原创 leetcode算法题-剑指Offer篇(9)

1、对称的二叉树1.1 题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。1.2 题解1.2.1递归 public boolean isSymmetric(TreeNode root) { if(root==null) return true; return help(root.left,root.right); } public boolean help(Tree

2020-08-13 23:11:47 87

原创 leetcode算法题-剑指Offer篇(8)

1、合并两个排序的链表1.1 题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。1.2 题解1.2.1新建链表,引入伪头结点 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode result = new ListNode(0), cur = result; while(l1 != null && l2 != null) {

2020-08-12 22:32:09 98

原创 leetcode算法题-剑指Offer篇(7)

1、调整数组顺序使奇数位于偶数前面1.1 题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。1.2 题解1.2.1 双指针 public int[] exchange(int[] nums) { if (nums.length <= 1) return nums; int i = 0, j = nums.length - 1; wh

2020-08-11 22:18:32 93

原创 leetcode算法题-剑指Offer篇(6)

1、删除链表的节点1.1 题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.2 题解1.2.1 public ListNode deleteNode(ListNode head, int val) { if(head.val == val) return head.next; //如果要删除删除头结点 ListNode pre = head, cur = head.next;//定义两个指针

2020-08-10 22:39:33 95

原创 leetcode算法题-剑指Offer篇(5)

1、 二进制中1的个数1.1 题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。1.2 题解1.2.1 逐位判断根据 与运算 定义,设二进制数字 nn ,则有: 若 n & 1 = 0n&1=0 ,则 nn 二进制 最右一位 为 00 ; 若 n& 1 = 1n&1=1 ,则 nn 二进制 最右一位 为 11 。 根据以上特点,考虑以下 循

2020-08-06 23:19:23 90

原创 leetcode算法题-剑指Offer篇(4)

1、 矩阵中的路径1.1 题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串

2020-08-05 23:45:21 132

原创 leetcode算法题-剑指Offer篇(3)

1、 斐波那契数列1.1 题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。1.2 题解1.2.1 递归,用数组、map保存计算过的值,避免重复计算 int constant = 1000000007;//防止溢出 publ

2020-08-05 21:40:20 108

原创 SpringBoot注解@PathVariable、@RequestParam、@param的不同

1、@pathVariable1.1 PathVariable使用案例:@GetMapping("dept/{id}")public Department getById(@PathVariable("id" )Integet id )1.2参数解析:1、name/value:RequestMapping注解中url路径绑定参数的名称,如/pathVariable/test/{param},则name的值就为param2、required: 为true时,这个参数必选填写,默认是true,为

2020-08-01 19:30:12 776

原创 leetcode算法题-剑指Offer篇(2)

leetcode算法题-剑指Offer篇(2)1、 从尾到头打印链表1.1 题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。1.2 题解1.2.1 创建数组保存链表节点值,对数组进行反转; public int[] reversePrint(ListNode head) { if(head==null) return new int[0];//如果头结点为空,返回空数组 ListNode index =

2020-08-01 14:34:16 88

原创 leetcode算法题-剑指Offer篇(1)

leetcode算法题-剑指Offer篇(1)1、找出数组中重复的数字1.1 题目描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。1.2 题解1.2.1 利用map结构 public int findRepeatNumber(int[] nums) { if (nums.length == 0) return

2020-07-29 21:06:24 98

原创 java内部类加载顺序的问题

最近在学习jvm,看到其中讲到类初始化(initialization)时,看到内部类的加载过程,感到有些疑惑。大家都知道,Java中,类的加载顺序是:父类静态初始化块->子类静态初始化块->父类实例化初始化块->父类构造器->子类实例化初始化块->子类构造器。可在以下这案例中,却有所不同public class ClientTest { static class Father { public static int A = 1;

2020-07-12 23:11:15 341

原创 个人数据结构与算法学习总结——顺序二叉树、线索二叉树

顺序二叉树、线索二叉树本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解顺序二叉树1、概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看右面的示意图。2、图解3、顺序二叉树的特点顺序二叉树通常只考虑完全二叉树 第n个元素的左子节点为 2 * n + 1第n个元素的右子节点为 2 * n + 2第n个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素4、代码实现pac

2020-06-08 21:39:08 118

原创 个人数据结构与算法学习总结-二叉树树

树本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解为何需要树1、数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 。2、链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)3、 树存储

2020-06-07 17:54:54 271

原创 个人数据结构与算法学习总结-哈希表

哈希表本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解什么是哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。结构如下图所示实现1、题目有一个公司,当有新的员工来报道时,要求将该员工的信息加入 (id,性别,年龄,名字,住址…),当输入该员工的id时,要求查找到该员工的 所有信息.

2020-06-07 16:58:52 176

原创 个人数据结构与算法学习总结-查找算法(顺序、二分、插值、斐波那契查找)

查找算法本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解目录查找算法顺序查找二分查找插值查找斐波那契查找Java中常用的查找算法有四种:1)顺序(线性)查找2)二分查找/折半查找3)插值查找4)斐波那契查找下文将对这几个算法进行总结顺序查找1、算法思想顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。2、图解

2020-06-07 16:16:29 268

原创 个人数据结构与算法学习总结-排序算法(冒泡、选择、插入、希尔、快速、归并、基数、堆排序)

排序算法本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解目录排序算法算法的时间复杂度说明冒泡排序排序算法(Sort Algorithm),是将一组数据,依指定的顺序进行排列 的过程。排序的分类:1) 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。2) 外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。3) 常见的排序算法分类(见下图):4)常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nl

2020-06-03 22:15:54 380

空空如也

空空如也

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

TA关注的人

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