- 博客(54)
- 收藏
- 关注
原创 生成图形验证码
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。链式映射是指在 Java 中使用 Map 接口的一种实现方式,它允许在一个键值映射中进行多次操作而无需创建新的 Map 对象。例如,可以在同一个 Map 中链式地添加、删除或更新键值对。添加序列化工具类,让Redis使用FastJson序列化,提高序列化效率, 将存储在Redis中的value值,序列化为JSON格式便于查看。
2023-07-28 22:56:52
337
原创 统一异常处理
RestControllerAdvice是一个应用于Controller层的切面注解,它一般配合@ExceptionHandler注解一起使用,作为项目的全局异常处理。我们有想要拦截的异常类型,比如想拦截BaseException类型,就新增一个方法,使用@ExceptionHandler注解修饰,并指定你想处理的异常类型,接着在方法内编写对该异常的操作逻辑,就完成了对该异常的全局处理!项目开发中经常是很多人负责不同的模块,使用自定义异常可以统一了对外异常展示的方式。自定义异常可以携带更多的信息。
2023-07-06 20:41:57
205
原创 统一参数校验
我们在实际的开发过程中经常会遇到需要对参数进行校验的情况,比如在需要用户输入手机号的时候他是不是真的输入了一个合法的手机号,在需要用户输入一个邮箱的时候他是不是真的输入了一个合法的邮箱,用户输入的内容是不是超出了长度限制等等。Validator可以非常方便的制定校验规则,并自动帮你完成校验。当一个表单的数据较多的时候,单纯的数据校验代码就会占到很大的幅度,所以简化基础数据的校验可以省去我们很多的工作,让我们能更专注于功能的实现。内置的校验注解有很多,罗列如下。使用注解,统一参数校验。
2023-07-06 20:39:52
266
原创 RabbitMQ
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)RabbitMQ服务器是用Erlang语言编写的 而集群和故障转移是构建在开放电信平台框架上的所有主要的编程语言均有与代理接口通讯的客户端库。AMQP协议:首先RabbitMQ基于AMQP协议开发,所以很多基于AMQP协议的功能RabbitMQ都是支持的,比如SpringCloud中的消息总线bus。
2023-05-22 16:34:16
650
原创 Java IO流(二)
FileReader读入数据的基本操作1.实例化File类的对象 指明要操作的文件2.提供具体的流3.数据的读入4.流的关闭操作read():返回读入的一个字符 如果达到文件末尾 返回-1FileWriter写出数据的操作1.提供File类的对象 指明写出到的文件2.提供FileWriter的对象 用于数据的写出3.写出的操作4.流资源的关闭说明1.输出操作 对应的File可以不存在 不会报异常2.File对应的硬盘中的文件如果不存在 在输出的过程中 会自动创建此文件File对
2022-04-09 14:49:39
237
原创 Java IO流(一)
IO流io流原理及流的分类用于处理设备之间的数据传输对于输入输出操作以流的方式进行IO包下提供"流"类和接口 通过标准方法IOInput:读取外部文件到程序中Output:将程序数据输出磁盘 光盘存储设备中流的分类操作数据单位(文本语言):字节流 字符流数据流流向:输入流 输出流流角色节点流:直接作用在文件上处理流:在源文件上包了一层访问文件:FileInputStream FileOutputStream FileReader FileWriter重要功能:缓冲 Buffer
2022-04-07 19:31:22
87
原创 java 注解(二)
如何自定义注解:参照@SuppressWarnings定义一.注解声明为:@interface二.内部指定成员 通常用value表示三.可以指定成员的默认值 使用default表示四.如果自定义注解没有成员 表明是一个标识作用如果注解有成员 在使用注解时 需要指明成员的值如果注解有成员 在使用注解时 需要指明成员的值自定义注解必须配上注解的信息处理流程才有意义自定义注解通过都会指明两个元注解:Retention targetjdk提供的四种元注解:对现有的注解进行解释说明Retentio
2022-03-31 22:21:16
82
原创 Java 注解(一)
注解 Annotation注解概述在代码里的特殊标记可以像修饰符一样被使用 用于包 类 构造器 方法 成员变量框架 = 注解 + 反射 + 设计模式使用实例实例一:文档相关的注解实例二:JDK内置三个基本注解@Override:限定重写父类方法 注解只能用于方法@Deprecated:用于表示所修饰的元素(类 方法)@SuppressWarnings:抑制编译器警告实例三:跟踪代码依赖性 实现替代配置文件功能package com.company.meiju.Annotation;
2022-03-29 14:44:10
279
原创 java 枚举(二)
三种方法//tostring()Season1 spring = Season1.spring;System.out.println(spring.toString());//values()Season1[] values = Season1.values();for (int i = 0;i < values.length; i++){System.out.println(values[i]);}Thread.State[] values1 = Thread.State.valu
2022-03-28 17:45:45
339
原创 Java 枚举(一)
枚举枚举类的使用1.类的对象只有有限个 确定的2.需要定义一组常量 使用枚举类3.如果枚举类只有一个对象 则可以作为单例模式的实现方式如何定义枚举类方式一:自定义枚举类public class SeasonTest { public static void main(String[] args) { Season spring = Season.spring; System.out.println(spring); }}class Seaso
2022-03-20 20:53:40
84
原创 Java 常用类(五)
LocalDate LocalTime LocalDateTime1.LocalDateTime相较于LocalDate LocalTime使用频率高2.类似于calendarJava比较器Java中对象 正常情况下 只能进行比较:== != 不能使用 < 或 >但是在开发场景中 需要比较使用两个接口中的任意一个 comparable comparatorcomparable接口使用举例 (自然排序)1.String 包装类等实现了comparable接口 重写了compareT
2022-03-12 23:11:13
560
原创 Java 常用类(四)
3.Java.text.SimpleDateFormat对日期Date类格式化和解析1.两个操作①格式化 日期 --> 字符串②解析 字符串 --> 日期2.实例化①使用默认的构造器SimpleDateFormat sdf = new SimpleDateFormat();//格式化Date date = new Date();System.out,println(date);String format = sdf.format(date);System.out.pri
2022-03-10 18:19:09
149
原创 Java 常用类(三)
日期时间API1.System类中的currentTimeMillis()long time = System.currentTimeMillis()2.java.util.Date1.两个构造器的使用//构造器一:date() 创建一个对应当前时间的Date对象//构造器二:创建指定毫秒数的Date对象2.两个方法的使用//方法一:toString():显示当前 年 月 日 时 分//方法二:getTime():获取当前Date对象对应的毫秒数3.java.sql.Date对应数据库中
2022-03-08 15:28:58
314
原创 Java 常用类(二)
String 与 char[]之间的转换String --> char[]:调用String的toCharArray()char[] --> String:调用String的构造器String与 byte[]转换String --> byte[]:调用String的getBytes()byte[] --> String:调用String的构造器声明:解码时 要求解码使用的字符集必须与编码时使用的字符集一致 否则会出现乱码String StringBuffer Strin
2022-03-07 19:17:29
166
原创 Java 常用类(一)
String:代表字符串 使用双引号表示String是一个final类 代表不可变的字符序列 不可被继承 String:代表不可变的特性1.当对字符串重写赋值时 需要重新指定内存区域赋值 不能使用原有的value赋值2.当对现有的字符串进行连接操作时 也需要重新内存区域赋值 不能使用原有的value赋值3.当调用String的replace()方法修改指定字符或字符串 也需要重新内存区域赋值 不能使用原有的value赋值String实例化方式方式一:通过字面量定义的方式方式二:通过new +
2022-03-01 16:01:49
118
原创 Java 多线程(二)
方式二:同步方法1.同步方法仍然涉及同步监视器 不需要显式声明2.非静态的同步方法 同步监视器:this静态同步方法 同步监视器:当前类本身线程死锁问题死锁:不同线程分别占用对方需要同步资源不放弃 都等待对方放弃自己需要的同步资源不会出现异常 不会出现提示 使用线程处于阻塞 无法继续方式三:同步锁Lock1.实例化Lock2.调用lock3.调用解锁方法线程的通信涉及到的三个方法:wait():一旦执行此方法 当前线程就进入阻塞状态释放同步监视器notify():一旦执行此方法
2022-02-28 22:48:41
173
原创 Java 多线程(一)
多线程优点1.提高应用程序的响应2.提高计算机系统CPU利用率3.改善程序结构线程有两种使用方式继承于Thread类 存在线程安全问题实现Runnable接口使用线程的同步来解决安全问题方式一:同步代码块synchronized(同步监视器){//需要被同步代码}1.操作共享数据的代码即为需要被同步的代码2.共享数据:多个线程共同操作的变量 如ticket3.同步监视器 俗称:锁 任何一个类的对象都可以充当锁要求:多个线程必须共用同一把锁方式二:同步方法...
2022-02-27 10:42:25
170
原创 Java 异常类
异常:Java语言中 程序执行中发生的不正常情况(语法错误和逻辑错误不算)分类编译时异常(checked)运行时异常(unchecked)Java异常处理方式异常的处理:抓抛模型过程一:抛程序在正常运行的过程中 一旦出现异常 在异常代码处生成一个对应异常类的对象 并将此对象抛出抛出对象后 其后代码不再执行关于异常对象的产生:①系统自动生成的异常对象②手动生成一个异常对象 并抛出throw过程二:抓 (异常处理方式)①try-catch-finally②throwsfinally
2022-02-23 21:32:15
129
原创 Java 面向对象下(四)
接口 本质:契约 标准 规范使用interface来定义接口中不能定义构造器 不可以实例化 Java开发中 接口通过类实现(implements)方式使用接口具体使用必须体现多态性实际上就是定义一种规范
2022-02-14 15:30:54
114
原创 Java 面向对象下(三)
对代码块进行系统学习代码块有由父及子 静态先行的运行顺序静态与非静态各有各的作用关键字final①修饰类不能被继承②修饰方法不能被重写③修饰属性可以考虑赋值的位置:显式初始化 代码块中初始化 构造器初始化关键字abstract①abstract不能用来修饰:属性 构造器等结构②abstract不能用来修饰私有方法 静态方法 final方法 final的类 abstract 修饰类:抽象类 不能实例化abstract 修饰方法:抽象方法 只有方法声明 没有方法体...
2022-02-12 22:53:38
241
原创 Java 面向对象下(二)
设计模式的学习public class SingleTon{ public static void main(String[] args) { Bank bank1 = Bank.getInstance(); Bank bank2 = Bank.getInstance(); System.out.println(bank1 == bank2); }}//饿汉式class Bank{ //1.私有化类的构造器 priva
2022-02-10 20:45:58
247
原创 Java 面向对象下(一)
学习关键字staticstatic修饰属性:静态变量static修饰 分为:静态变量 非静态变量static修饰类的其他说明①静态变量随着类的加载而加载②静态变量加载早于对象创建③类只加载一次 静态变量在内存中只会存在一份使用static修饰方法:静态方法①随着类的加载而加载 通过"类.静态方法"进行调用如何确定应该方法是否要声明为static操作静态属性的方法 通常为static工具类中的方法 习惯上声明为static...
2022-02-09 23:45:10
273
原创 Java 面向对象中(四)
包装类在具体使用中需要三种类型的直接转换学习了基本类型 包装类 String类型的转换public class WrapperTest { public static void main(String[] args) { //基本数据类型 ——> 包装类:调用包装类的构造器 int num1 = 10; Integer in1 =Integer.valueOf(num1); System.out.println(in1.toS
2022-02-07 17:23:44
273
原创 Java 面向对象中(三)
进行多态性的学习多态性以虚拟方法调用只适用于方法 不适用于属性对关键字 instanceor 进行了解子类向上转型为父类为多态父类向下转型为子类则使用instanceof进行判断在Object类的使用中学习到equal()/ toString()方法进行立体的解析并详细敲打代码很有心得...
2022-02-05 18:13:09
245
原创 Java 面向对象中(二)
关键字super用来调整属性 方法 构造器在子类对象实例化中分为两类从结果上看子类继承父类后 子类获得父类声明属性方法创建子类对象 在堆空间中 加载所有父类声明属性从过程上看通过子类构造器创建子类对象时 一定会直接或间接调用其父类的构造器 进而调用父类的父类得构造器 直到调用java.lang.Object类空参的构造器为止...
2022-02-05 15:37:13
249
原创 Java 面向对象中(一)
今天学习到继承性特征进行较多的例题练习掌握到大量的基础信息还根据继承性进行方法的重写子类与父类的注意事项与要求同时掌握了方法重载与重写的正反面
2022-02-03 17:57:13
347
原创 Java 面向对象上(七)
今天结束了面向对象上的部分学习大概20天 分析自己很有收获Java的学习能够带来很多新内容新体验将面向对象的两个基本概念类和对象进行简单的说明掌握三大特性之一的封装并能够将基础的关键字合理运用在每天的学习中有所收获...
2022-01-28 21:49:01
426
原创 创新性想法
我们希望拥有确定性,但又会觉得生活过于确定,会显得单调和乏味。所以常常希望,在生命历程里,时不时能拥有惊喜感,那种能带来愉悦的不确定性,但不确定性过了头,带来的可能不再是愉悦,反而会让人感觉到焦虑甚至是恐惧。静态型思维的人,仿佛拥有了一个盒子,那个盒子就一直在那里,不再发生改变。确定性会让人拥有明确的选择,这种感觉往往很良好,但它也许是一种虚假的安慰。我们想逃离,想从非常有限的范围里,向外延展,看到更大的世界。从此处到彼处,从一段记忆联想到另一段记忆,从一个决策迁移到另一个决策,像树一样,向上向外生长
2022-01-27 15:53:19
1212
原创 Java 面向对象上(六)
今天进行了构造器(构造方法)的学习对于属性赋值的先后顺序有了一定了解在实际情况中关键字 this在类的方法中 我们可以用"this.属性"或"this.方法"的方式调用当前对象的属性或方法通常情况下 省略"this."特殊情况下 方法形参和类的属性同名 我们必须显式使用"this.变量"方式 表明此变量是属性非形参在类的构造器中 我们可以用"this.属性"或"this.方法"的方式调用当前正在创建对象的属性或方法通常情况下 省略"this."特殊情况下 构造器形参和类的属性同名 我们必
2022-01-26 22:46:46
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人