- 博客(73)
- 收藏
- 关注
原创 【LeetCode 热题 HOT 100】1、两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。...
2022-06-22 14:12:34 443 1
原创 Java 遍历JsonNode
如图,有一个jsonNode对象,我想获得路径"data" -> "items"数组下的每个元素的某个值,比如id,那么我得遍历这个数组Node对象。直接上代码: // 遍历jsonNode,responseMessage为初始jsonNode对象 Iterator<JsonNode> elements = responseMessage.path("data").path("items").elements(); List<String> ids = new Arr
2022-04-02 16:33:15 2797
转载 Java中的 CommandLineRunner 与@PostConstruct
一:@PostConstruct不是spring提供的而是Java自己的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct注释用于需要依赖注入完成后才能执行任何初始化的方法上。 在类投入使用之前,必须调用此方法在使用spring框架时,在一个类内,如果有构造器(Constructor ),有@PostConstruc
2022-03-31 15:55:39 2810
原创 liquibase:changelog文件建表的两种写法
写法一:使用createTable 标签需要加上判断条件preConditions,字段多时比较繁琐<changeSet author="666" id="tb_visitor_information"> <preConditions onError="MARK_RAN" onFail="MARK_RAN"> <not> <tableExists tableName="tb_visitor_information"
2022-01-21 11:20:41 1247
原创 Java 8中使用stream去重List对象集合(单个属性,多个属性)
使用stream去重List对象集合不墨迹,代码如下:单属性:List<Course> arrayList = courseThirds.stream().collect( Collectors.collectingAndThen(Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing( Course::getBjmc))),ArrayList::new));多属性:
2022-01-04 15:51:11 1771
原创 Java获取指定时间前一小时、后一小时的时间
代码如下:功能可以根据自己的需要修改成一天前、一个月前等等。 /** * 获取当前时间前一小时的时间 * @param date * @return java.util.Date */ public static Date beforeOneHourToNowDate(Date date) { Calendar calendar = Calendar.getInstance(); /* HOUR_OF_DAY 指示一天中的小时 */ calendar.set
2021-09-16 19:33:45 14217
原创 使用 JsonNode 获取 json对象 中的数据
我们在远程调用其他接口的时候,有时候不清楚返回值,这个时候可以使用JsonNode来接收和获取里面的值。例如:一个接口的Response body是这样的{ "code": "0", "msg": "success", "data": [ { "userId": "12", "personId": "66666666666666", "personName": "德玛西亚", "mobile": "13888888888",
2021-09-07 17:07:39 4622
原创 sql中根据参数查询不同的表
今天碰到了一个需求,需要根据前端传过来的一个type参数来查询数据库,如果type为空则查询两张表,type为0则查询表A,type为1则查询表B。思路:使用union all,将两张表的查询结果集合并。临时表命名为表T。sql实现:select T.* from (select a.id as Id, a.name as name, a.type from aunion allselect b.id as Id, b.name as name, b.type from b) Twhere
2021-08-23 19:38:45 2850
原创 idea设置类注释和方法注释(含模板代码)
1、类注释/** * @author zhuyiming6 * @description * @date ${DATE} ${TIME} * @since */ 2、方法注释1、新建模板组2、编辑如图部分模板:* * 功能描述$params$ * @return $return$ */
2021-08-20 10:14:18 371
原创 SpringBoot集成Mybatis-Plus分页插件简单使用demo
目录1、mybatis-plus的配置类:2、controller层3、service层4、mapper层思路很简单,使用一个Page对象传递分页信息,在调用BaseMapper已有的selectPage方法即可。1、mybatis-plus的配置类:@Configuration@MapperScan("com.zym.**.mapper")public class MybatisPlusConfig { /** * mybatis-plus SQL执行效率插件 *
2021-08-13 17:59:48 626
原创 Mybatis-Plus设置主键ID生成策略、插入字段自动填充功能
文章目录1、设置主键ID生成策略2、插入字段自动填充功能1、设置主键ID生成策略如图,在主键字段上使用 @TableId(type = IdType.xxx) 即可设置主键生成策略类型。比如我这个userId字段,设置了type = IdType.UUID,在向表插入数据时,会自动生成uuid类型的主键。@TableName("tb_user")public class UserEntity extends Model<UserEntity> { private static
2021-08-12 17:58:05 6630
原创 SpringBoot提供的获取前端参数的注解
SpringBoot提供的获取参数注解,常用的有以下三个:@PathVariable@RequestParam@RequestBody三者的区别如下表1.Get请求的参数可以通过@PathVariable和@RequestParam获取@GetMapping("/user/{id}")public String getUser(@PathVariable(value = "id")Integer id,
2021-07-06 22:56:38 1101
原创 SpringBoot项目使用Spring Session,将Session保存在Redis中。
我们之前实现Java的会话管理功能,主要是使用Cookie或Session。Cookie是客户端技术,服务器把数据以cookie的形式保存在用户的浏览器中Session是服务器端技术,服务器把数据以session的形式保存在服务器中在分布式情况下,session会失效,比如项目部署在多台服务器中,服务器之间无法共享session,用户在A服务器上已经登录了,但当负载均衡跳转到服务器B时,由于B服务器并没有用户的登录信息,session就失效了,用户就退出了登录。一旦服务器关闭或重启也
2021-07-01 17:03:26 7816 5
原创 Linux安装并运行Nacos
本文演示的是使用VMware搭建的 CentOS 7 的虚拟机环境。Nacos 采用 Java 进行开发,要求 JDK8+,首先我们需要安装JDK并配置环境。利用 yum 命令安装 OpenJDK 8。yum -y install java-1.8.0-openjdk-devel.x86_64#安装成功后验证Java版本java -version配置 JAVA_HOME 环境变量。安装后 JDK 需要设置 JAVA_HOME 环境变量,OpenJDK 默认安装在 /usr/lib/j
2021-05-13 20:40:16 3065 3
原创 Mysql慢查询日志
Mysql慢查询日志一、介绍Mysql慢查询日志是Mysql提供的一种日志记录,用来把在Mysql中运行时间超过阈值的sql语句记录到慢查询日志中。具体指运行时间超过long_query_time值的sql,long_query_time的默认值为10,意思是运行大于10秒的语句。使用慢查询日志,我们可以把运行时间超过最大时间的sql语句记录在日志中,方便我们筛选出性能低的sql语句,再结合explain进行分析。二、使用查看mysql是否开启慢查询:mysql> show va
2021-04-13 22:01:55 153
原创 java单例模式:饿汉式、懒汉式
单例模式概念:某个类在整个系统中只能有一个实例对象可以被获取和使用。实现要点:构造器私有含有一个该类的静态变量来保存这个唯一的实例对外提供获取该实例对象的方式单例模式分为饿汉式和懒汉式。1. 饿汉式直接创建对象,不存在线程安全问题。静态常量方式优点:这种写法比较简单,就是在类加载的时候就完成实例化。避免了线程同步问题。缺点:在类加载的时候就完成实例化,没有达到Lazy Loading的效果。如果从未使用过这个实例,则会造成内存的浪费。//饿汉式:静态常量1
2021-03-27 16:15:21 14041 5
原创 java工厂模式:简单工厂、工厂方法、抽象工厂(通俗易懂)
工厂模式核心本质:实例化对象不使用new,用工厂方法创建对象统一管理对象的创建,将调用者跟实现类解耦三种模式:简单工厂模式建立一个工厂类,对实现了同一接口的一些类进行实例的创建。工厂方法模式对简单工厂模式的改进,工厂方法模式是提供多个工厂方法,用来创建不同的对象。抽象工厂模式使用一个超级工厂,创建多个工厂类,每个工厂创建对应的对象。详细代码说明:简单工厂模式:创建一个共同的手机接口,用两个不同的手机类实现它并重写call方法,接口类:publ
2021-03-26 23:37:22 15452 12
原创 使用ThreadLocal保存用户登录信息
使用ThreadLocal替代Session完成保存用户登录信息功能具体实现流程:在登录业务代码中,当用户登录成功时,生成一个登录凭证存储到redis中,将凭证中的字符串保存在cookie中返回给客户端。使用一个拦截器拦截请求,从cookie中获取凭证字符串与redis中的凭证进行匹配,获取用户信息,将用户信息存储到ThreadLocal中,在本次请求中持有用户信息,即可在后续操作中使用到用户信息。登录凭证类://登录凭证表@Data@ApiModel("登录凭证类")public
2021-03-22 10:31:00 9874 3
原创 遍历ArrayList的过程中移除元素的方式
错误方法一使用for循环正序遍历ArrayList,使用remove移除元素结果如下,只删除了一个“3”原因:在匹配到第一个要删除的元素并移除时,后面元素会往前移位,导致索引位置改变,从而漏掉后面一个元素。public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"
2021-03-17 10:41:00 2318 3
原创 线程池的3大方法,7大参数,执行原理,拒绝策略
1、三大方法:Executors.newSingleThreadExecutor(); 单线程Executors.newFixedThreadPool(5); 固定线程个数Executors.newCachedThreadPool(); 缓存池,可扩展2、七大参数:(自定义创建线程池)public ThreadPoolExecutor(int corePoolSize, //常驻核心线程数 int maximumPoolSize, //最大
2021-03-11 11:20:58 447
原创 Java:最长连续递增序列(两种题型)
最长连续递增序列-题型1:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5], 长度为3。思路:定义两个值用来保存最大递增长度和每轮的递增长度。当条件不满足时(后面数字小于前面),比较哪个值是最长序列,再重新计算每轮的递增长度。public class 最长连续递增序列 { public static void main(String[] args) {
2021-03-10 10:57:41 1407 1
原创 git 配置多个公钥
我们个人开发项目的时候,一般只需要在本地生成一个ssh key关联到github或者gitee的仓库用来提交代码,但是遇到工作原因,需要使用公司的gitLab,这个时候就需要再添加其他的ssh key到本机。一、设置用户名与邮箱安装Git后首先要做的事情是设置你的用户名称和e-mail地址。每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:git config --global user.name "用户名" #名称git config --global user.email xxxx
2021-03-09 15:23:40 1918
原创 Java中遍历Map集合的3种方式
Java中遍历Map集合有以下3种方式方法一:通过**keySet()**方法遍历map的key,再根据key获得value,最常用的方式。for (String s : map.keySet()) { String value = map.get(s); System.out.println("key为:" + s + ", value为:" + value);}方法二:通过**entrySet()**方法,得到一个Entry集合,集合中每个元素代表一个k-v键值对,集合容量大的
2021-03-06 10:35:04 2422 3
转载 preHandle、postHandle与afterCompletion的区别
preHandle调用时间:Controller方法处理之前执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行若返回false,则中断执行,注意:不会进入afterCompletionpostHandle调用前提:preHandle返回true调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作执行顺序:链式Intercepter情况下,
2021-02-10 12:25:18 10447 3
原创 Mysql索引失效的条件
1、以**%开头**的模糊查询,如:select id from user where name like '%白';2、where语句中使用不等于( != 或 <> )select id from user where name != '张三';select id from user where name <> '张三';3、where语句中使用or,or跟随的条件必须加上索引,否则索引失效#此时name和age字段必须都有索引select id from use
2021-01-18 23:23:07 312 2
原创 java 项目中常见的对象类型简述(BO、DTO、VO、AO、PO)
从前端传到后端controller、service、mapper层的对象为DTO从数据库查出来的、传给前端展示的对象为VO1、PO(Persistant Object) 持久对象用于表示数据库中的一条记录映射成的 java 对象。PO 仅仅用于表示数据,没有任何数据操作。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。可以理解是一个PO就是数据库中的一条记录;可以理解某个事务依赖的原始数据;好处是可以将一条记录最为一个对象处理,可以方便转化为其他对象2、VO(V..
2021-01-11 15:51:06 3357
原创 ON UPDATE CURRENT_TIMESTAMP 根据当前时间戳更新
今天做一个秒杀项目建表的时候,发现在时间后面增加了这样一个语句:CREATE TABLE `product` ( `id` bigint NOT NULL COMMENT '商品id', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称', `number` int NOT NULL DEFAULT '0' COMMENT '商品数量', `start_time` timestamp NOT NULL DEFAULT CURRENT
2021-01-11 12:08:20 1769
原创 冒泡、快排、选择三种常用排序的实现以及时间复杂度
时间复杂度:排序方法平均时间最好时间最坏时间快速排序(不稳定)O ( n l o g 2 ( n ) )O ( n l o g 2 ( n ) )O(n^2)冒泡排序(稳定)O(n^2)O(n)O(n^2)选择排序(不稳定)O(n^2)O(n^2)O(n^2)Java实现:1、快速排序public class 快速排序 { public static void main(String[] args) { int[] a
2020-12-17 09:55:02 684 1
原创 java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to
今天遇到了一个bug:java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.dto.resumeHrSearchDTO出错代码如下:// json字符串String json = companyUserResumeSearchHistory.getJson();// 将json字符串解析为json对象JSONObject jsonObject = JSONObject.parseO
2020-11-12 17:08:02 13147 3
原创 mybatis的association以及collection的用法
实体类:public class ResumeDetailVO { @ApiModelProperty("用户信息") private UserInfo userInfo; //一对一,使用association @ApiModelProperty("工作经验") List<Experience> experiences; //一对多,使用collection}对应的resultMap : <resultMap id="Resume
2020-11-12 13:45:11 1253 4
原创 springboot整合kaptcha生成验证码
springboot整合kaptcha生成验证码介绍:kaptcha 是谷歌开源的非常实用的验证码生成工具一、导入jar包<!-- kaptcha验证码 --><dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></depende
2020-10-21 14:38:52 381 2
转载 SpringBoot和Mybatis实现评论楼中楼功能(一张表搞定)
文章目录一、数据库设计二、搭建SpringBoot框架三、代码编写零、效果在网上搜索了很多,发现很多都是用两张表或者使用jpa实现的,本篇文章将讲述使用一张表来实现评论回复楼中楼功能,使用Mybatis作为持久层框架,有图有真相,先来看看最终效果一、数据库设计首先来看看有哪些字段,既然是评论回复,你觉得应该有哪些字段呢,带着功能去思考这个问题首先是主键(id),既然是评论,必须要有评论人的姓名(nickname),为了以后能联系到评论人,需要评论人的邮箱(email),然后就是评论内容(con
2020-06-05 19:10:40 2550 2
原创 vscode实现html代码补全
完整步骤如下:1、搜索插件HTML Snippets,点击安装2、使用快捷键ctrl+shift+p搜索settings.json文件打开设置(json)3、编辑settings.json,加入红色方块内的内容即可,修改完成后保存文件4、重启vscode,新建一个.html文件试试:输入!,出现提示,回车即可补全html的头文件!回车后的效果:...
2020-05-20 11:54:14 10021 1
原创 LeetCode: 旋转数组( java )
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 ...
2020-04-30 21:09:42 233
原创 LeetCode:买卖股票的最佳时机 II( java )
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获...
2020-04-15 11:46:48 237
原创 LeetCode:删除排序数组中的重复项( java )
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2...
2020-04-14 21:46:26 209
原创 (新手向)从零开始将springboot项目部署到云服务器(ecs)上
最近用springboot写了一个个人博客项目,正好之前趁着活动免费领取了一个阿里云的云服务器ecs,于是准备把项目部署到服务器上。对于我这种纯新手来说,部署过程可谓是踩坑无数,好在最后还是成功了。 这里跟大家分享一下完整的步骤,尽量帮助大家排坑。目录1...
2020-03-23 14:06:21 10766 5
原创 如何恢复宝塔的默认端口为8888
如果不小心修改了宝塔的默认端口8888,而且没有在云服务器打开对应的安全组,就会出现访问不了宝塔面板的情况。1.用xshell或其他软件连接云服务器后(我的是阿里云),输入cat /www/server/panel/data/port.pl查看目前宝塔的端口号2.如果端口号不是888...
2020-03-23 09:53:12 2932 1
原创 mybatis插入数据时,自动获取主键的自增id
自己在写博客时,遇到了一个小问题,新增博客的时候,无法得到新增博客的id 由于设计的数据库中博客id是自增长的主键,由数据库自动生成,所以只能先插入博客后,再获取它的id。解决方法:在mapper.xml文件里设置属性在insert方法中添加以下两个属性即可useGeneratedKeyske...
2020-03-21 16:41:39 1391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人