自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正则表达式练习网站 regex101部分答案

正则表达式 regex101 答案

2022-08-03 23:45:31 685 1

原创 Java 生成随机码工具类 线程安全 两种方式

Java 随机算法 线程安全 随机码 工具类

2022-07-04 23:04:25 730

原创 基于spring的动态代理模式示例 - JDK与CGLIB

JDK动态代理和CGLIB动态代理的示例,骑手代理商家

2022-06-08 22:42:04 188

原创 基于spring容器的策略模式+模板模式

基于spring+自定义注解实现的策略模式(结合模板模式)

2022-06-05 22:19:04 408

原创 Java中AutoCloseable接口与try-with-resources语句自动释放资源

程序需要使用各种资源,例如数据库连接,IO流,通常做法是在finally代码块中编写释放资源的代码。从JDK1.7以后,提供了自动释放资源的方法

2022-02-12 19:43:25 836

原创 Java 建造者(Builder)设计模式

使用场景与分析当一个类的构造方法需要多个参数,并且只有部分是必选的,其它是可选的,此时可以考虑使用建造者模式。传统方案一:重载构造方法在类中重载多个构造方法,根据使用场景进行选择性传参。弊端:难以阅读,每次实例化对象时需要仔细查看各个构造方法参数上的区别,并且如果两个参数类型相同,参数传混了还不会报错,难以检查。传统方案二:JavaBean模式提供空参的构造方法,调用多次set方法进行初始化。弊端:代码冗余,需要写多行set方法。建造者(Builder)模式建造者模式不提供公开

2022-02-12 16:12:34 346

原创 二叉树遍历 Morris算法 空间O(1)

Morris二叉树遍历算法 空间O(1)

2021-12-19 16:29:50 337

原创 二叉树4种遍历 迭代 栈/队列 多种写法

二叉树遍历 迭代法

2021-12-19 16:25:08 463

原创 springboot Java MySQL 日期格式转换

Java类型Date,MySQL类型date@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday; //生日Java类型Date,MySQL类型datetime@JsonFormat(shape = JsonFormat.Shape.STRING, pat

2021-11-18 20:14:34 1307

原创 spring java枚举转json 方便前端取值

以User类为例,User类中有个枚举类型的性别属性,如果不对其进行处理,转json时会使用枚举类的toString方法,这时给前端的是个字符串而不是json对象,前端很难取出值。未处理前:"gender":"GenderEnum.FEMALE(code=2, gender=女)"解决方法:使用jackson提供的注解 @JsonFormat,将其写在要转换的枚举类上@JsonFormat(shape = JsonFormat.Shape.OBJECT)@AllArgsConstructor

2021-11-18 19:59:08 1335

原创 mybatis 常用注解用法简介

@Insert写法:@Insert(“SQL语句”)使用在接口方法上@Update写法:@Update(“SQL语句”)使用在接口方法上@Delete写法:@Delete(“SQL语句”)使用在接口方法上@Select写法:@Select(“SQL语句”)使用在接口方法上@Result写法:@Result(column = “oid”,property = “id”)使用在@Results注解中,定义列名和变量名的映射关系,代替了<id>标签和<result&g

2021-10-30 15:40:23 704

原创 spring aop 注解用法简介

@Aspect写在类上,无参数,标识该类是一个切面类。注意要在配置文件中配置aop自动代理<aop:aspectj-autoproxy/>@Before写法:@Before(“execution(返回值 包名.类名.方法名(参数列表))”)用于配置前置通知。指定增强的方法在切入点方法之前执行,在@Around之后。@AfterReturning写法:@AfterReturning(切面表达式)用于配置后置通知。指定增强的方法在切入点方法之后执行,在@Around之前。@Aro

2021-10-28 16:00:33 201

原创 maven创建的webapp项目不解析EL表达式的解决方案

原因是maven默认生成的web-app版本为2.3,不支持EL表达式修改web.xml文件<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp

2021-10-27 16:23:15 82

原创 Spring MVC 常用注解用法简介

@RunWith写法:@RunWith(SpringJUnit4ClassRunner.class)使用在测试类上,spring集成junit@ContextConfiguration写法:注解配置类的:@ContextConfiguration(classes = {配置类1.class , 配置类2.class})配置文件的:@ContextConfiguration(value = {“classpath:applicationContext.xml”})使用在测试类上,加载spring容

2021-10-25 21:22:46 97

原创 Spring MVC 解决请求参数乱码问题

在web.xml文件中添加一个spring的字符编码过滤器<!--配置全局过滤的 filter 设置请求参数编码 UTF-8--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

2021-10-25 12:23:17 85

原创 排序算法---归并排序 递归实现(Java)

归并排序 递归实现 Java版C/C++版本递归拆分再合并/** * @param nums 整个待排序数组 * @param start 当前要处理的数组区间起始下标 * @param len 当前要处理的区间长度 */ private static void mergeSort(int[] nums, int start, int len) { if (len <= 1) return; //只有1个元素就不用分割

2021-10-23 21:44:56 389

原创 Spring 常用注解用法简介

@Component 写法:@Component(“该bean的id”)组件的意思,使用在类上用于实例化Bean。@Controller 写法:@Controller(“该bean的id”)使用在web层类上用于实例化Bean,本质和@Component一样,易于识别是web层。@Service 写法:@Service(“该bean的id”)使用在service层类上用于实例化Bean,本质和@Component一样,易于识别是service层。@Repository 写法:@Repos

2021-10-23 14:43:13 100

原创 JAVA 单例模式 饿汉和懒汉

单例模式的饿汉式、懒汉式、内部类方式

2021-10-22 09:31:49 151

原创 排序算法---堆排序(Java)

在完全二叉树中,结点i的左孩子为2i,右孩子为2i+1,双亲为i/2取整。由于数组是从0开始,下标计算变为:left = parent*2+1right = parent*2+2parent = (child-1)/2以下为递增排序(构造小顶堆),若要递减排序则调整 heapAdjust 方法中的大于小于号public class HeapSortTest { public static void main(String[] args) { int[] arr = new

2021-10-09 13:47:15 81

原创 Java 使用反射的基本步骤及示例

一、获取Class对象方法1:通过Class类的静态方法 forName()Class<?> myclass = Class.forName("packageName.Student");方法2:通过类名.classClass<Student> myclass = Student.class;方法3:通过对象.getClass()Student student = new Student();Class<? extends Student> myclas

2021-09-24 20:59:10 991

原创 Java 客户端/服务器 TCP通信简单示例

客户端public class ClientTest2 { public static void main(String[] args) { try (Socket s = new Socket("127.0.0.1", 10086); OutputStream os = s.getOutputStream(); InputStream is = s.getInputStream()) { //向服务器发送

2021-09-20 20:26:51 114

原创 Java多线程 生产者-消费者问题示例

奶箱:相当于缓冲区,容量有限,生产者放入牛奶,消费者拿走牛奶生产者:实现 Runnable 接口,箱子内有牛奶就取出,没有就等着消费者:实现 Runnable 接口,箱子还有剩余空间就往里放牛奶,箱子满了就等着奶箱类public class Box { private int count = 0; //当前奶箱内奶瓶数量 private int max = 5; //奶箱大小 public synchronized void put(int milk) { //想放milk

2021-09-20 17:07:39 821

原创 Java多线程中 synchronized 修饰符的用法

修饰代码块private Object obj = new Object();public void method1(){ //对代码块加锁,用一个对象作为锁 synchronized (obj){ }}修饰方法(本质是对 this 对象加锁)public synchronized void method2(){ //对方法加锁,实际上是对this对象加锁}对 this 对象加锁public void method3(){ synchronize

2021-09-20 15:11:40 931

原创 Java中Properties+字符流 读写文本文件

String getProperty(String key) :通过键获取值Object setProperty(String key, String value) :设置属性键值对void load(Reader reader) :通过字符输入流读取属性文件void store(Writer writer, String comments) :通过字符输出流写入属性文件Set stringPropertyNames() :获取键的集合void clear():清除properties对

2021-09-20 11:05:15 153

原创 Java对象输入输出流示例

ObjectInputStream:对象输入流,ObjectOutputStream:对象输出流Serializable:要序列化的对象必须实现此序列化接口,但此接口没有方法需要实现,只是作为一个标志,如果没有实现此接口会出现 NotSerializableException 异常。Student类:public class Student implements Serializable { //一定要实现此接口,否则会出异常 private String name; private

2021-09-20 09:37:20 470

原创 利用Java字符流复制文本文件

方法一:InputStreamReader+OutputStreamWriter需要绑定输入输出流,可以设定字符集public class CopyFileTest2 { public static void main(String[] args) throws IOException { File file1 = new File("C:\\Users\\Administrator\\Desktop\\FileTest\\测试文本.txt"); File fil

2021-09-19 20:27:31 1110

原创 利用Java缓冲流复制视频文件

缓冲输入流 BufferedInputStream,缓冲输出流 BufferedOutputStream。缓冲流内部有一个缓冲区,缓冲区是一个字节数组,默认大小为8192。缓冲流不直接调用系统方法进行读写操作,而是通过传入的输入输出流对象来实现。缓冲流对象实例化必须传入输入输出流(InputStream / OutputStream)对象作为参数,或者其子类对象如(FileInputStream / FileOutputStream),可选参数size为指定缓冲区大小。缓冲流复制视频文件示例pub

2021-09-19 17:23:23 406

原创 Java利用文件输入输出流复制文本文件或图片

文件输入流 FileInputStream,文件输出流 FileOutputStream复制文本文件public class CopyFileTest { public static void main(String[] args) throws IOException { //源文件必须存在,目的文件可以不存在,文件输出流会自动创建 File file1 = new File("C:\\Users\\Administrator\\Desktop\\FileTes

2021-09-19 16:42:59 1125

原创 Java可变参数是什么?以及利用可变参数进行求和

Java可变参数用在方法的参数个数不确定时,但是参数类型必须确定。定义方法时,可变参数只能在参数列表最后,在参数类型后加三个小数点 … 代表可变参数。可变参数是一个隐含的数组,在方法体中通过数组下标获取参数值,length()方法可知具体传入了多少个参数,与数组用法相同。定义方式1:只有可变参数public static int method(int... a){}定义方式2:多个参数加可变参数public static int method(String a,double b,int...

2021-09-19 11:16:50 566

原创 简述Java泛型中的类型通配符<?>用法

先上一个Integer类型的继承体系结构,Integer 继承了 Number,间接继承了 Object类型通配符:<?>,可以填入任何类型,但是不能添加元素List<?> list1 = new ArrayList<Object>();List<?> list2 = new ArrayList<Number>();List<?> list3 = new ArrayList<Integer>();类型通配符上限

2021-09-19 10:50:16 406

原创 Collection集合的多种遍历方式(Set、List)

Collection接口下有List接口和Set接口List中的元素是有序存储,可以有重复元素,4种遍历方式(迭代器Iterator、列表迭代器ListIterator、普通for循环、增强for循环)Set中的元素是无序存储,不可以有重复元素,2种遍历方式(迭代器Iterator、增强for循环)以下是List遍历方式,此处使用的是ArrayList,LinkedList同理public class ListDemo { public static void main(String[]

2021-09-19 08:58:19 127

原创 电路交换、报文交换、分组交换的特点和比较

书本的定义:电路交换——整个报文的比特流连续地从源点直达终点,好像在一个管道中传送。报文交换——整个报文先传送到相邻节点,全部存储下来后查找转发表,转发到下一个节点。分组交换——单个分组(这只是整个报文的一部分)传送到相邻节点,存储下来后查找转发表,转发到下一个节点。报文——要发送的整块数据。分组——先把报文划分为多个等长数据段,每个数据段前面加上首部(控制信息)就构成了一个分组。简单点说:电路交换——就是打电话的方式。报文交换——对整块数据进行接力传递。分组交换——把整块数据分成多个小块

2021-09-17 18:58:01 5394

原创 idea启动tomcat日志乱码问题

将目录 apache-tomcat-8.5.66\conf\ 下的 logging.properties 文件用记事本打开。快捷键Ctrl+H 将UTF-8全部替换为GBK,保存更改。重新启动tomcat,中文正常显示。

2021-09-11 23:12:13 74

原创 idea开发web项目,路径localhost:8080后去除 项目名+_war_exploded 的方法

idea右上方点击Edit Configurations,修改tomcat配置选择jsp页面,点击右边Deployment,将下方Application context清空或修改为/,即可直接使用http://localhost:8080访问页面

2021-09-09 16:36:52 2676

原创 排序算法---直接插入排序(C语言)

直接插入排序算法,C语言实现#include <stdio.h>void insertsort(int num[],int len);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 insertsort(num,10); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void insertsort(int num[],int len){

2021-09-09 15:53:07 1010

原创 排序算法---折半插入排序(C语言)

折半插入排序算法,C语言实现是使用折半查找法对直接插入排序算法的改进。#include <stdio.h>void bininsertsort(int num[],int len);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 bininsertsort(num,10); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void bini

2021-09-09 15:44:00 1359

原创 排序算法---选择排序(C语言)

选择排序,C语言实现每轮循环找出未排序区段中最小值,并将其交换至未排序区段首位#include <stdio.h>void selectsort(int num[],int len);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 selectsort(num,10); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void select

2021-09-09 15:32:51 109

原创 排序算法---希尔排序(C语言)

希尔排序算法,使用C语言实现#include <stdio.h>void shellsort(int num[],int len);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 shellsort(num,10); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void shellsort(int num[],int len){ //对

2021-09-09 15:12:31 459

原创 排序算法---冒泡排序(C语言)

冒泡排序算法,C语言实现易错点:循环条件#include <stdio.h>void bubblesort(int num[],int len);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 bubblesort(num,10); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void bubblesort(int num[],int

2021-09-09 14:59:54 141

原创 排序算法---快速排序(C语言)

快速排序算法难点:递归的思想、中间值的作用#include <stdio.h>void quicksort(int num[], int low, int high);int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 quicksort(num,0,9); for(int i = 0; i<10 ;i++){ printf("%d ",num[i]); }}void quicksort(int

2021-09-09 14:50:27 252

空空如也

空空如也

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

TA关注的人

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