Java学习
文章平均质量分 77
本栏主要记录Java中基础知识以及扩展
韩_师兄
talk is cheap, show me the code
展开
-
关于分组后排序的sql查询问题
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7H4GlbN-1674994687159)(assets/image-20221111171139001.png)]在很多场景, 遇到需要对数据进行分组,排序 ,然后取出前几数据,常见取出前1数据等等,在不同的数据库,不同版本,sql书写也会有不同,故记录一下.先把数据分组,然后排序,给组内的数据进行编号,最后取出编号为1的数据。先把数据分组,然后排序,给组内的数据进行编号,最后取出编号为1的数据。1 sql查询直接报错,原创 2023-01-29 20:22:07 · 1201 阅读 · 0 评论 -
设计模式之装饰者模式
设计模式之装饰者模式1 概述2 结构3 案例4 使用场景5 jdk源码解析6 区别1 概述定义: 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。以快餐店炒饭为例, 菜单一般有基本的炒饭,炒面, 且可额外添加鸡蛋,培根等配菜. 每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦.且直接使用继承存在以下问题:扩展性不好如果要再加一种配料(火腿肠),需要定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类原创 2022-05-27 20:59:58 · 114 阅读 · 0 评论 -
设计模式之建造者模式
设计模式之建造者模式1 概述2 结构3 实例4 优缺点及使用场景5 模式扩展6 模式对比说明1 工厂方法和建造者2 抽象工厂和建造者1 概述建造者模式: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 分离了部件的构造(由Builder来负责)和装配(由Director负责), 所以可以构造出复杂的对象.(适用于对象构建过程复杂的情况)2 结构建造者(Builder)模式包含如下角色:抽象建造者类(Builder):这个接口规定要实现复杂对象的那些部分的创建,并不涉及具原创 2022-04-30 09:59:15 · 197 阅读 · 0 评论 -
设计模式之原型模式
设计模式之原型模式1 概述说明2 模式结构3 具体实现4 简单案例5 使用场景6 扩展说明之深克隆1 概述说明用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象2 模式结构原型模式包含如下角色:抽象原型类:规定了具体原型对象必须实现的的 clone() 方法。具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。访问类:使用具体原型类中的 clone() 方法来复制新的对象。3 具体实现原型模式的克隆分为浅克隆和深克隆浅克隆:创建一个原创 2022-04-28 23:47:31 · 853 阅读 · 0 评论 -
设计模式之工厂模式
设计模式之工厂模式1 引入1 咖啡类2 美式咖啡类3 拿铁咖啡类4 咖啡店类5 测试类2 简单工厂模式1 结构2 实现3 工厂方法模式1 说明2 结构3 实现4抽象工厂模式1 说明2 结构3 实现5 扩展使用1 配置文件2 工厂类6 JDK源码说明1 引入以简单的咖啡店点餐为例. 有一个咖啡类,美式咖啡类, 拿铁咖啡类,咖啡店类. 此时各个耦合比较严重,如果新增一个咖啡类型,需要改动很多代码.1 咖啡类public abstract class Coffee { public abstra原创 2022-04-27 23:56:23 · 359 阅读 · 1 评论 -
设计模式之单例模式
设计模式之单例模式1 单例模式1 单例的结构2 单例的实现1 饿汉式1 方式1-静态变量2 方式2-静态代码块2 懒汉式1 方式1- 线程不安全2 方式2-线程安全synchronized3 方法3-双重检查锁4 方式4-静态内部类5 方式5-枚举方式3 存在的问题1 问题说明1 序列化反序列化2 反射2 问题解决1 序列化和反序列化问题2 反射问题4 JDK源码案例1 单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一 , 它提供了一种创建对象的最佳方式, 该类原创 2022-04-26 23:22:31 · 163 阅读 · 0 评论 -
关于Java中软件设计原则
关于Java中软件设计原则1 开闭原则1 案例1 抽象皮肤类2 默认皮肤类3 自定义皮肤类4 搜狗拼音类5 测试类6 结果2 里氏替换原则1 案例1 长方形类2 正方形类3 测试类4 结果2 案列改造1 创建四方形接口2 创建长方形类3 正方形类4 测试类5 结果3 依赖倒转原则1 案例1 电脑类2 希捷硬盘类3 Intel处理器类4 金士顿内存条类5 测试类6 运行结果2 案例改造1 电脑类2 希捷硬盘类3 AMD处理器类4 金士顿内存条5 测试类6 结果4 接口隔离原则1 案例1 安全门接口2 小牛原创 2022-04-25 23:52:51 · 648 阅读 · 1 评论 -
关于分库分表之基因法
关于分库分表之基因法1 分库分表2 基因法在新业务表中,因考虑到后续表数据量较大,对于数据的查询等操作有很大的影响,所以考虑分库分表操作.1 分库分表参考阿里巴巴Java开发手册,单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(三年内数据)资料, 对现有表结构进行设计.主要包括用户表,订单表.最初,设计一张中间映射表, 即每次用户查询,先查询映射表,得到对应的表或库信息,再去查询表信息. 这种方式虽然能解决数据分库分表查询,但是需要多维护一张额外的表,并且查询也比较复杂,多了一次原创 2022-04-13 23:13:47 · 4024 阅读 · 4 评论 -
关于Oracle中日期的使用
关于Oracle中日期的使用1 日期等于\大于\小于2 日期差值计算1 直接将两个时间来相减2 时间和日期的两层转换3 使用trunc函数在使用sql函数时,因项目数据库不同,导致sql中日期的使用方法大不相同, 一些常见的日期计算,都有不同的应用,故整理记录一下Oracle的日期用法。以user表为例CREATE TABLE "SCOTT"."user" ( "id" NUMBER(20,0) NOT NULL ENABLE, "name" VARCHAR2(30), "age" N原创 2022-04-10 22:58:51 · 3020 阅读 · 0 评论 -
关于微服务之间的流传递问题
关于微服务之间的流传递问题1 场景问题2 解决方案1 通过字节数组2 通过Response3 总结如标题所述,最近楼主有遇到一个场景问题,最初是想在微服务之间传递流,结果发现,传递过程中,流会丢失,即通过普通的方式无法传递流,那么有没有其他替代的方式或办法解决问题呢1 场景问题在日常项目中,经常有导入导出Excel的功能. 在一次需求功能中, 功能的设计是: 前端上传Excel到后台,后台解析Excel,并将文件上传到云服务器上,并返回文件fileId. 在页面点击提交按钮后, 后台会根据文件原创 2022-02-14 21:38:13 · 3107 阅读 · 2 评论 -
关于@JsonProperty注解的使用
关于@JsonProperty注解的使用1 @JsonProperty注解说明2 @JsonProperty注解使用1 用户实体类2 测试类1 序列化2 反序列化3 总结在日常项目中,或因代码不规范,或因与第三方对接,或因特殊奇葩需求,导致同一个表达含义使用了不同的字段.此时,对于此类问题处理,如果仅仅使用硬编码方式, 代码不仅不够优雅美观,还可能导致后期维护的工作量多且容易出错.那么, 有没有更好地方法来解决问题呢?1 @JsonProperty注解说明@JsonProperty是jackson原创 2022-02-08 21:49:47 · 25286 阅读 · 0 评论 -
关于Mybatis拦截器的使用
关于Mybatis拦截器的使用1 Mybatis拦截器的使用1 自定义拦截器1 Interceptor接口2 @Intercepts注解3 @Signature注解2 注册拦截器3 拦截器使用案列1 日志打印2 数据隔离上一篇记录了Mybatis拦截器的说明,对于其原理功能,有了初步的了解,本次记录一下Mybatis在日常中的应用场景1 Mybatis拦截器的使用上一篇给到了Mybatis官方对于拦截器的使用方法, 而在日常项目中使用拦截器,只需要分成两步.1 自定义拦截器2 注册拦截器原创 2022-02-07 20:21:12 · 2010 阅读 · 0 评论 -
关于Mybatis拦截器的说明与使用
关于Mybatis拦截器的说明与使用1 Mybatis拦截器说明ExecutorParameterHandlerResultSetHandlerStatementHandlerMybatis拦截器使用:在日常工作中, 对于一些查询功能需要做到数据隔离的限制, 即不同用户查询的数据要不一样, 如何保证对业务程序低耦合, 又要保证功能的效果呢? 可以使用Mybatis提供插件,即Mybatis拦截器(详情可见下方官网)Mybatis官网: https://mybatis.net.cn/configura原创 2022-01-24 22:06:55 · 2303 阅读 · 0 评论 -
关于IDEA中Git暂存代码的使用
关于IDEA中Git暂存代码的使用一 问题引入二 解决方法1 通过IDEA来完成操作1 在新分支中, 点击版本控制VCS-Git-Stash Changes2 切换老分支,修复bug问题,提交3 切换新分支,找到临时仓库,恢复代码2 通过Git命令来完成操作三 总结一 问题引入 在日常工作中, 通常都按照迭代功能划分分支开发, 即一个迭代一个分支. 正常迭代开发-测试-上线没有问题. 可是突然上个分支有一个很紧急的问题bug,需要修改优化, 此时都是在新分支上开发, 随意进行分支切换, 很容易导致代码原创 2022-01-23 21:25:19 · 9453 阅读 · 0 评论 -
关于System.nanoTime和System.currentTimeMillis的使用
关于System.nanoTime和System.currentTimeMillis的使用System.nanoTimeSystem.currentTimeMillis在代码中经常有使用到当前时间的需求, 而java中提供了一些获取当前时间的方法如下System.nanoTime此方法返回的纳秒,可能是任意时间.System.currentTimeMillis此方法返回的是毫秒, 且从1970年1月1日0时起的毫秒数.ps: 换算关系/* 1 秒 = 1000 毫秒 1 毫秒 = 1000原创 2021-12-05 16:52:20 · 887 阅读 · 0 评论 -
关于knife4j的文档自动注册功能的解决
关于knife4j的文档自动注册功能的解决1 存在问题2 解决方案文档服务案列1 存在问题上一篇,关于knife4j整合微服务聚合文档, 在日常项目中,使用简单,方便, 可是存在一个问题, 就是需要在文档服务中,手动的配置其他服务的路由地址,而且, 每次新增一个服务,都需要配置,使用起来不是很灵活便捷,那有没有解决方案, 文档服务,主动去nacos中获取服务,自动注册到文档服务的呢?, 答案是肯定的, 对于这一块,knife4j工具提供了相关的入口.2 解决方案对于上次的knife4j整合微服务聚合原创 2021-11-29 21:12:35 · 910 阅读 · 0 评论 -
关于CountDownLatch的使用
关于CountDownLatch的使用1 CountDownLatch的简介2 CountDownLatch的使用在项目使用多线程实现功能时, 需要将多个线程结果整理返回,而CountDownLatch正好解决该场景问题1 CountDownLatch的简介CountDownLatch是Jdk1.5版本引入的, 主要作用是让一个线程,等待其他线程完成某种操作之后,该线程继续执行.其内部实现, 是通过一个计数器统计, 计数器的初始值是线程的数量, 每当一个线程执行完毕后, 计数器的值就减一, 当计原创 2021-11-28 16:21:56 · 429 阅读 · 0 评论 -
关于knife4j工具聚合api文档的使用
关于knife4j工具聚合api文档的使用1 knife4j工具的介绍简单案例1 导入Knife4j依赖2 添加配置文件3 添加控制器4 查看文档2 knife4j工具的使用聚合微服务文档案列文档服务业务服务1业务服务2查看文档在目前微服务项目中, 通常使用swagger作为在线文档交流使用,但各个微服务的文档都各自管理, 比较分散, 且没有导出离线文档等功能,而knife4j工具可以解决上述问题1 knife4j工具的介绍knife4j是2017年开源的一款增强swagger的工具, 主要是为J原创 2021-11-26 18:33:57 · 2052 阅读 · 0 评论 -
关于Java的Velocity模板使用
关于Java的Velocity模板使用1 Velocity的简介1 基本语法1 关键字2 变量3 转义字符和逻辑操作符4 循环5 条件6 注释7 引入资源2 Velocity的使用Velocity是一个基于java的模板引擎,它允许任何人仅仅使用简单的模板语言来引用由java代码定义的对象。1 Velocity的简介Velocity模板引擎, 作为一款成熟的基于java的模板引擎,能够帮我们实现页面静态化,同时它将Java代码与网页分开,将模板和填入数据整合,生成我们需要的页面.1 基本语法1原创 2021-11-24 20:28:27 · 3121 阅读 · 0 评论 -
Java中发送Http请求之httpClient
Java中发送Http请求之httpClient1 httpClient的简介2 httpClient的案列HTTP 协议是 Internet 上使用得最多、最重要的协议之一,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源, JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活.1 httpClient的简介HttpClient 是 Apache Jakarta Common 下的子原创 2021-11-23 21:18:35 · 4096 阅读 · 0 评论 -
Java中发送Http请求之OkHttpClient
Java中发送Http请求之OkHttpClient1 OkHttpClient的简介1 OkHttpClient说明2 OkHttpClient使用步骤3 OkHttpClient案例4 OkHttpClient常用工具类:Java中Http请求的方式很多, OkHttpClient因其独特的特性,非常适合在常见的场景中使用.1 OkHttpClient的简介1 OkHttpClient说明OkHttpClient是一个高效的HTTP客户端,其特性包含:支持HTTP/2,允许所有同一个主机原创 2021-11-22 21:40:40 · 8979 阅读 · 4 评论 -
Java中发送Http请求之HttpURLConnection
Java中发送Http请求之HttpURLConnection1 HttpURLConnection1 准备一个SpringBoot项目环境2 添加一个控制器3 添加一个发送请求的工具类4 添加测试工具类5 测试结果Java中发送Http请求的方式有很多,记录一下相关的请求方式,本次记录Jdk自带的HttpURLConnection,简单简洁,使用简单.1 HttpURLConnectionHttpURLConnection是Jdk自带的请求工具,不用依赖第三方jar包,适用简单的场景使用.使用原创 2021-11-20 15:26:47 · 5323 阅读 · 0 评论 -
itext7相关使用
itext7相关使用1 itext7的简介2 itext7的使用1 添加相关maven坐标2 itext7相关语法说明1 PDF生成案例2 图片相关语法3 添加空白页4 Div和Paragraph5 换行/空格/换页6 Html转换为Pdf7 关于PDF上签章功能最近有使用到itext7相关技术,生成pdf文件,添加电子签章等功能.1 itext7的简介iText 7是基于iText 5的一款工具. 其中所有主类和接口的完整版本,都更合乎逻辑,尽可能保持与iText 5的兼容, 一个全新的布局模原创 2021-11-16 19:24:19 · 3467 阅读 · 0 评论 -
推荐switch-case语句使用枚举来判断
推荐switch-case语句使用枚举来判断1 switch-case简介2 switch-case案列3 关于switch-case和if-else的比较Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.1 switch-case简介语法switch(expression){ case value : //语句 break; //可选 case value : //语原创 2021-11-04 20:27:58 · 14539 阅读 · 0 评论