Java
.....
Pole丶逐
天道酬勤,学不可以已。
展开
-
MyBatis SQL语句占位符
${}字符串替换,直接将传入的值作为参数拼接到sql上常见使用:对表名的和分组,排序字段的映射可能会导致SQL注入问题:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。#{}MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,将传入的参数变为一个字符串来进行拼接常见使用:对dao层的where条件映射或参数原创 2021-02-07 18:05:40 · 877 阅读 · 1 评论 -
Http请求参数传递常见问题
Http参数传递1. get请求/delete请求路径传参__直接拼接参数URL : http://localhost:9090/user/1234使用@PathVariable进行参数声明@GetMapping("/{uid}")public void findByUid(@PathVariable("uid")Integer uid){}路径传参__使用...原创 2020-04-23 17:54:09 · 743 阅读 · 0 评论 -
为什么要实现序列化接口---Serializable
首先我们要明白什么是序列化和反序列化序列化把对象转换成字节序列的过程叫做对象的序列化反序列化把字节序列恢复成对象的过程称为对象的反序列化点开Serializable接口查看源代码,发现什么也没有作用实现Serializable相当于打上一个标记,告诉java哪些对象需要进行序列化操作安全性问题 ,假如没有一个接口(即没有Serializabl...原创 2020-04-23 17:57:44 · 1406 阅读 · 0 评论 -
Valitade参数校验
引入依赖<!-- hibernate validator--><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.0.Final</version></dependency><!--定义了许多常用的注解,如果是原创 2021-01-25 21:14:26 · 245 阅读 · 0 评论 -
Java之BigDecimal详解
1、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDeci转载 2020-09-17 16:37:12 · 156 阅读 · 1 评论 -
Java8 新特性
Lambda表达式本质上是一个对象,依附于函数式接口使用 ()-> {} 减少内名内部类的使用,通过上下文进行类型推断如果主体包含了一个语句,就不需要使用大括号如果主体只有一个表达式返回值则编译器会自动返回值函数式接口定义有且只有一个抽象方法被@FunctionalInterface注解修饰即使没有使用次注解次注解进行修饰,只要接口满足函数式接口的要求,也会被认为是一个函数式接口其他的类都直接或间接的继承Object类,所以在方法中定义的Object的原创 2020-09-09 14:43:32 · 182 阅读 · 0 评论 -
EasyExecl 简单导出使用整合
步骤一:导入EasyExecl<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version></dependency>步骤二:对需要导出的类进行注解注解说明: 修饰类的注解:(建议直接复制实例的高度,格式已经调..原创 2020-09-06 17:30:18 · 667 阅读 · 1 评论 -
Jackson 指定序列化格式
前言:在java中,会默认使用 jackson 来进行对象的序列化和反序列化,例如:全大写的 NAME 会被自动转换成 nAME (驼峰式),我们的字段首字母就会被转成小写,此时就不是我们想要的结果代码示例@JsonProperty:作用于属性上,作用是把该属性的序列化指定的名称name:指定序列化的名称@JsonIgnore:在实体类向前台返回数据时用来忽略不想传递给的属性package com.yuchai.as.master.data.itf.sourcelist.dto;原创 2020-08-25 20:17:25 · 1417 阅读 · 0 评论 -
Java 反射技术总结
反射简介在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性静态语言:是一种可以在运行时改变其结构的语言静态语言:运行时结构不可变加载完类之后,再堆内存中的方法区中产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类型结构。所以我们称之为反射创建Class对象@Testpublic void test() th原创 2020-07-27 18:12:51 · 142 阅读 · 0 评论 -
Thead 多线程技术总结
1. 概念程序:指令和数据的有序集和,其本身没有任何运行的含义,是一个静态的概念进程:执行程序的一次执行过程,是一个动态的概念,是系统资源分配的单位线程:通常一个进程包含多个线程,当前一个进程至少有一个线程,不然没有存在的意义,线程是CPU电镀和执行的单位2. 创建线程方式一:继承Thead接口// 1. 继承Thead类public class TestThead extends Thread{ // 2. 重写run方法 @Override原创 2020-06-27 12:24:51 · 818 阅读 · 0 评论 -
ConcurrentHashMap 常见面试题详解
1. ConcurrentHashMap的数据结构数组 + 链表, 采用了分段锁的实现机制2. ConcurrentHashMap初始化 首先会根据加载因子创建segment数组,长度为默认或传入的并发值的大于等于的2的次方数,不可扩容 初始化(s0)segment对象并保存,并初始化他的属性,创建一个entry数组,entry数组初始化长度为 (容器长度 / segment数组长度) 大于等于2的次方,在下一次进行添加数据的时候,会直接取这个s0对象 这里初始化了他的segment[0]3原创 2020-05-31 11:38:37 · 2855 阅读 · 0 评论 -
HashMap 底层原理详解
HashMapHashMap的底层数据结构?是数组 + 链表 + 红黑树的数据结构,每个数组中都保存着key,value的实例在java7之前Entry,java8叫NodeHashMap的存取原理?存储: 先判断数组是否进行了初始化长度,如果没有就调用初始化方法,默认长度为16 如果有赋值的长度,那么回去大于等于这个数的2的幂次方的数作为数组长度 计算出key的hashcode值,然后取余,把得到的值作为数组的下标(索引), 1.7: 把数据插入到链表的头部原创 2020-05-31 11:36:22 · 203 阅读 · 0 评论 -
LinkedList 存储原理详解
LinkedList1. LinkedList的数据结构是什么双向链表: 每个节点上有两个指针(item/prve/next) 链表中的每一个元素称之为节点,节点在运行时动态生成 存储数据的数据域 存储下一个节点地址的指针域2. LinkedList的存取原理存: 头尾部插入: 1. 创建一个新节点,前驱结点指向原尾结点,后继节点指向null 2. 更新新节点为尾结点(last) 3. 判断头结点是否为null?原创 2020-05-31 11:34:21 · 1542 阅读 · 0 评论 -
ArrayList 常见面试题详解
ArrayList讲讲ArrayList ArrayList 是底层使用动态数组(elementData)实现的数据列表,但我们装在基本数据类型的时候,都是使用他们的包装类,查询效率高,增删效率低使用功率很高说说ArrayList 的默认长度当我们为10,1.7和1.8稍有不同 1.7,创建的时候就会初始化数组的长度 1.8,当我们第一次向数组中添加数据的时候才会初始化数组,相当于懒加载说说ArrayList 的扩容再add()添加新数据的时候会进行一个判断,当我们添加的数据原创 2020-05-31 11:33:13 · 1683 阅读 · 0 评论