Java
文章平均质量分 75
java相关知识
意田天
一件事,做到极致,也算成功
展开
-
根据根节点和子节点构造树形结构
package com.cyc.basic.test.list;import com.alibaba.fastjson.JSON;import lombok.Data;import java.util.Arrays;import java.util.List;import java.util.Objects;import java.util.stream.Collectors;/** * @description: 遍历构造树形结构{根节点, 子节点} * @version 1.0原创 2022-03-14 14:45:32 · 5664 阅读 · 0 评论 -
synchronized解析
synchronized解析1. 用户态与内核态2. CAS3. UnsafeAtomicInteger解析4. 了解对象的内存布局(hotspot)1. 对象头2. 成员变量(实例数据)3. 对齐数据工具:JOL = Java Object Layout6. synchronized的横切面详解重量级锁java源码层级字节码层级JVM层级(Hotspot)7. 锁升级过程7.1 JDK8 markword实现表:7.2 锁重入7.3 synchronized最底层实现7.4 synchronized vs原创 2021-07-12 17:11:18 · 20019 阅读 · 0 评论 -
设计模式之责任链模式(ChainOfResponsibility)
设计模式之责任链模式初始化场景描述存入数据库之前,过滤用户输入的文字。public class Servlet_Main { public static void main(String[] args) { Msg msg = new Msg(); msg.setMsg("大家好:),<script>,欢迎访问 ,大家都是996 "); //处理msg, 过滤敏感字,<,> 和996 String r原创 2021-06-06 18:04:01 · 16111 阅读 · 3 评论 -
设计模式之工厂模式(Factory)
设计模式之工厂模式简介工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。任何可以产生对象或者方法的类 ,都可以称之为工厂单例也是工厂,可以把他当做静态工厂为什么有了new 之后,还要有工厂可以灵活控制生产过程权限,修饰,日志。代码准备需求一任意订制交通工具,例如汽车,飞机,扫把新建父类接口public interface Moveabl原创 2021-06-02 22:45:01 · 19502 阅读 · 0 评论 -
设计模式之策略模式(Strategy)
设计模式之策略模式在jdk1.8之后,为了和之前的接口进行兼容,接口里面必须方法实现,因为要支持lambda表达式。comparator接口,就是用到了策略模式同样,java.lang中的comparable接口,也是策略模式...原创 2021-06-01 16:54:06 · 16083 阅读 · 0 评论 -
设计模式之单例模式(Singleton)
设计模式之单例模式饿汉式这也是最常用的一种方式,它是线程安全的,它依靠JVM来实现线程安全,因为JVM加载一个class,只会加载一次。package com.mashibing.dp.singleton;/** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化 * Class.forName("") * (话说你不用的,你装载它干啥) */public class Mgr01 {原创 2021-06-01 11:25:10 · 19417 阅读 · 2 评论 -
替代 if else ---策略模式
替代 if else ---策略模式什么是策略模式?策略模式的优点策略模式的缺点:策略模式实战1.定义策略接口策略接口订单信息类返回结果类2.定义各种策略微信支付实现支付宝实现云闪付实现3.使用策略测试一下:什么是策略模式?比如说对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。策略模式结构图如下:策略模式需要一个策略接口,不同的策略实现不同的实现类,在具体业务环境中仅持有该策略接口,原创 2021-05-17 18:26:33 · 24278 阅读 · 7 评论 -
替代if else 的方法---巧用枚举类和抽象方法
替代if else 的方法—巧用枚举类和抽象方法使用场景:当接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,巨量),不同渠道所需的处理方式不同,下面来写一个简单Demo来展示。场景复现首先构建一个 GeneralChannelRule 基础规则抽象类,定义一个抽象方法process(),不同的渠道都需要实现该抽象方法。package com.cyc.basic.test.rule;public abstract class GeneralChannelRule {原创 2021-05-17 14:42:11 · 12410 阅读 · 3 评论 -
JDK1.8的新特性
JDK1.8的新特性1. 前言2. Lambda表达式2.1 基本语法:2.2 用法示例示例1:多个参数示例2:单个参数实例3:把Lambda赋值给变量示例4:隐式final3. 函数式接口3.1 Function类型接口3.2 Consumer系列3.3 Predicate系列3.4 Supplier系列4. 方法引用4.1 语法:4.2 示例4.2.1 类的静态方法引用4.2.2 类的非静态方法引用4.2.3 指定实例的非静态方法引用4.2.4 构造函数引用5. 接口的默认方法和静态方法5.1 默认方法原创 2021-04-01 14:05:51 · 8420 阅读 · 1 评论 -
List的去重, Java8 中distinct的使用
List的去重, Java8 中distinct的使用常规List转Map原因:distinct()依赖于equals()最简单解决方法假设类是别人的,不能修改使用wrapper使用“filter() + 自定义函数”取代distinct()常规List转MapJava8使用lambda表达式进行函数式编程可以对集合进行非常方便的操作。一个比较常见的操作是将list转换成map,一般使用Collectors的toMap()方法进行转换。一个比较常见的问题是当list中含有相同元素的时候,如果不指定取哪一原创 2021-03-08 13:38:43 · 20480 阅读 · 0 评论 -
使用List数组实现一边遍历一边删除
public class ListForTest { public static void main(String[] args) { //List如何一边遍历,一边删除? ArrayList<User> userList = Lists.newArrayList( new User().setId("A").setName("张三"), new User().setId("B").setNa原创 2021-01-21 15:52:56 · 12786 阅读 · 2 评论 -
jvm垃圾回收相关知识
1.什么是垃圾回收机制垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。2.什么时候进行垃圾回收①会在cpu空闲的时候自动进行回收 ②在堆内存存储满了之后 ③主动调用System.gc()后尝试进行回收补充:System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责转载 2020-12-25 12:00:15 · 10522 阅读 · 0 评论 -
自定义注解的使用
自定义注解的使1. 例如自定义开启swagger注解package com.etouch.common.annotation;import com.etouch.common.exception.GlobalExceptionHandler;import org.springframework.context.annotation.Import;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;i原创 2020-12-21 13:28:49 · 10537 阅读 · 1 评论 -
java中对集合对象按照某个元素值进行排序
示例: 对cloudShopDataList中的cloudShopData按照dataTime进行升序排序: 方法一 cloudShopDataList.sort(new Comparator<CloudShopData>() { @Override public int compare(CloudShopData o1, CloudShopData o2) { //按照数据日期升序原创 2020-12-02 11:15:06 · 12769 阅读 · 1 评论 -
List去除重复数据的几种方法
List去除重复数据的几种方法1.使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:删除重复数据保持添加到其中的数据的顺序Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回原创 2020-11-18 10:13:43 · 12669 阅读 · 0 评论 -
jdk1.8中LocalDate、LocalTime、LocalDateTime的使用
为什么建议使用你 LocalDateTime ,而不是 Date?理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】java8新的时间API的使用方式,包括创建、格式化、解析、计算、修改为什么需要LocalDate、LocalTime、LocalDateTimeDate如果不格式化,打印出的日期可读性差Tue Sep 10 09:34:04 CST 2019使用Sim原创 2020-10-20 11:23:00 · 9901 阅读 · 0 评论 -
JDK8 的 Lambda、Stream、LocalDate的使用总结
JDK8 的 Lambda、Stream、LocalDate的使用总结一、Lambda1.1 Lambda 介绍1.2 Lambda 表达式的结构1.3 Lambda 表达式的使用2. Stream2.1 Stream介绍2.2 Stream 使用2.1 构造 Stream 流的方式`2.2 Stream 流的之间的转换`3.Stream 流的 map 使用4.Stream 流的 filter 使用5.Stream 流的 flatMap 使用6.Stream 流的 limit 使用7.Stream 流的 s转载 2020-09-22 20:13:56 · 13427 阅读 · 0 评论 -
开发中常用的Mybatis使用总结
mybatis使用总结介绍首个类持久性框架分为JDBC(原始SQL)和Hibernate(ORM)简化绝大部分JDBC代码,手工设置参数和获取结果灵活,使用者能够完全控制SQL,支持高级映射防止sql注入说明:在MyBatis中,使用XML文件或注释来进行配置和映射,将接口和Java POJO(普通的旧Java对象)映射到数据库记录** xml例子** 映射器界面@Mapperpublic interface UserMapper { User getById(int id)原创 2020-09-22 13:26:51 · 12114 阅读 · 0 评论 -
<if test=“state!=null and state==‘0‘ “> mybatis中使用if test判断参数值得问题
记录一个使用mybatis中的小问题使用当条件中有判断值是, 要是用 ==,而不能使用单个 =,mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。总结下使用方法:单个的字符要写到双引号里面或者使用.toString()才行!以下为错误示范: <if test="customerState!=null and customerState= '1' ">原创 2020-08-17 20:14:50 · 23417 阅读 · 1 评论 -
善用sql语句之case when 条件 then X else X end
总结一个常用的通知数据的sql原型展示这里的数据展示, 需要将数据库中的数据按照不同条件统计并返回给前端有一下几种方案方案 一:上方展示的每个数据都写一条sql, 书写简单, 但是比较费事, 重复劳动 。这里不做展示方案 二:利用子查询,将多条sql写在一个大sql中, 其实本质上依然是多条sql, 而且子查询多了, 数据库查询效率也会比较慢, 这在数据量大的时候, 尤为明显, 子查询代码如下select (select count(cu.id) from cloud_us原创 2020-08-12 15:42:39 · 12311 阅读 · 0 评论 -
将枚举类转化为map集合或者list集合
使用场景:有时候产品原型中查询列表是, 筛选条件中, 有条件下拉选, 但是条件不是很多, 也就几个, 这个时候可以使用数据字典或者枚举类, 我这里使用的枚举类转化为list集合, 来发送给前端@Getterpublic enum AdPositionEnum { CHANGE_SCREEN(1, "刷屏机首页轮播"), IPAD_LEFT_FIRST(2, "ipad优惠活动左一"), TV_LEFT_FIRST(3, "智能TV优惠活动左一"), WATER_BRA原创 2020-08-10 16:04:39 · 17339 阅读 · 0 评论 -
查询结果为空, 却返回All elements are null,spring boot+mybatis
问题描述 数据库查询结果应该为空, 却返回一个 All elements are null, 如下所示1.原代码展示<select id="rankList" parameterType="com.etouch.pojo.params.FunctionRankParam" resultType="com.etouch.pojo.model.FunctionRankModel"> select first_level_page,原创 2020-08-04 10:38:18 · 13716 阅读 · 1 评论 -
Java使用poi导出excel表格如何合并相同内容的行
记录一个开发过程中遇到的poi导出excel问题一般的poi导出格式为以下这种这种实现起来也简单, 只需要配置好格式, 写好标题, 将数据循环导出到excel就行了 , 可是下面这种就比较难搞了由于第一列需要根据日期合并行, 而且行数不是固定的, 是需要根据上面的筛选条件, 查询出来, 将结果按照日期分组合并, 所以左边第一列需要合并的行是灵活多变的, 不能简单按照合并列那样。下面是我的解决方案, 如有意见, 请多多指教这是数据库里的数据实现逻辑和代码1. 首先应该将数据按照日期排序,原创 2020-07-13 13:16:59 · 15271 阅读 · 0 评论 -
lambda表达式的使用总结
lambda表达式一.分组1 根据集合中对象中的某个属性分组二.筛选三.拼接一.分组1 根据集合中对象中的某个属性分组1.1 如根据对象中的某个字段分组想要以下数据格式改造后的代码 //1.查找活动详情 List<ActivityAnalysisDTO> activityAnalysisDTOList = activityAnalysisMapper.getDetail(args); Map<Date, List<Activ原创 2020-07-10 15:46:54 · 20017 阅读 · 0 评论 -
java实现角色权限的菜单树结构
通过迭代器和递归实现查询用户角色的权限树业务层/** * @author * @date 2020-07-09 15:36:12 * @description 根据id查找用户权限信息 */ @Override public SysUserDTO getUserMenuDetail(String id) { SysUserDTO sysUserDTO = sysUserMapper.getUserMenuDetail(id);原创 2020-07-10 14:19:55 · 18680 阅读 · 0 评论 -
maven学习总结
每日学习总结2020-07-041. maven项目管理工具1.1 依赖管理:1.3 仓库分类1.4 maven的三大生命周期:1.5 jar包的依赖1.6 解决jar包冲突的三个原则1.7 统一jar包版本管理1.8 工程和模块的区别1.9 项目之间的依赖关系2020-07-041. maven项目管理工具1.1 依赖管理:依赖管理就是对jar包的管理过程, 传统项目中直接放置jar包, maven工程真正的将jar包在仓库中配置, 项目中只用放置jar包的坐标,###1.2 一键构建使用ma原创 2020-07-04 16:25:36 · 12173 阅读 · 0 评论 -
Java开发中常用sql语句
一.查询类1.将用SQL查询出表中的的某个字段, 并将结果拼接成字符串SELECT GROUP_CONCAT(id) as id from sys_menu;二. 增删改类原创 2020-07-03 16:23:30 · 12566 阅读 · 1 评论 -
添加远程github仓库时报错 Warning: Permanently added the RSA host key for IP address 52.74.223.119
1.问题展示2.解决方案1.任意窗口, 打开git bash2.命令行界面, 输入cd C:3.cat ~/.ssh/id_rsa.pub正常下面应该显示一大串公钥如果没有,显示如下图, 则进行下一步, 创建公钥4.创建公钥, 输入 ssh-keygen5.然后一直下一步, 直到出现6.再次输入cat ~/.ssh/id_rsa.pub下面一大串数字便是公钥,复制这些字符串, 打开github, 点击头像, 打开settings, 打开SSH and GPG Keys原创 2020-06-30 10:03:07 · 9756 阅读 · 0 评论 -
Caused by: java.lang.ClassNotFoundException: feign.slf4j.Slf4jLogger报错信息
1.原因分析:就是因为导入了下面的jar包,导致无法注入feign接口 <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-hystrix</artifactId> <version>10.7.4</version> <s原创 2020-06-22 14:08:03 · 17218 阅读 · 0 评论 -
HashMap常用知识
1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>[] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 put() 方法:①、原创 2020-06-10 13:40:11 · 12123 阅读 · 0 评论 -
instanceof的用法 属于关键字 可判断左边对象是否为右边对象的实例
instanceof是Java的一个二元操作符(运算符),也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回的是boolean类型的数据。用它来判断某个对象是否是某个Class类的实例。查看源码可发现ArrayList继承AbstractList , 而AbstractList 又继承AbstractCollection, AbstractCollection实现了List...原创 2020-05-28 19:44:06 · 17362 阅读 · 0 评论