java
文章平均质量分 66
编码行者
这个作者很懒,什么都没留下…
展开
-
手写一个动态编译Java源码并加载Class
import javax.tools.SimpleJavaFileObject;import java.net.URI;/** * 将代码保存在字符串构建器中的 Java 源代码。 * * @description: * @author: mabh * @create: 2022/3/19 22:33 **/public class StringBuilderJavaSource extends SimpleJavaFileObject { private StringBuild原创 2022-03-21 09:55:21 · 492 阅读 · 3 评论 -
el-element UI el-select分组 el-option-group Java 后台工具类格式转换
/** * @description: * @author: mabh * @create: 2022/1/9 19:31 **/public class SelectGroupOptionEntity { private String label; private String value; public SelectGroupOptionEntity(String label, String value) { this.label = label;原创 2022-01-10 09:52:18 · 1707 阅读 · 0 评论 -
学习思维:怎样才能学好 Java 设计模式?
如何让你的代码高效优雅可复用?除了不断迭代,学习设计模式是最佳捷径。在工作中,你可能常常会发现,很多人将 Java 设计模式、大学里学的高等数学和编译原理等,视为脱离实际工作的知识。但不管是面试还是实际工作中,你是不是又经常听到大牛前辈们给你 “洗脑”,说设计模式很重要?为此你可能还专门买书或参加培训学习过,可往往都因为应用效果不佳,从开始的很重视,到后来慢慢地习惯性忽略,最后在你心中它的重要程度可能还远不如明天要交差的需求。相信我,你并不孤单。在过去很长的一段时间里,我也曾和你一样,反复地在内.转载 2021-08-26 20:54:50 · 500 阅读 · 0 评论 -
JSP过滤器防止Xss漏洞的实现方法
在用java进行web业务开发的时候,对于页面上接收到的参数,除了极少数是步可预知的内容外,大量的参数名和参数值都是不会出现触发Xss漏洞的字符。而通常为了避免Xss漏洞,都是开发人员各自在页面输出和数据入库等地方加上各种各样的encode方法来避免Xss问题。而由于开发人员的水平不一,加上在编写代码的过程中安全意识的差异,可能会粗心漏掉对用户输入内容进行encode处理。针对这种大量参数是不可能出现引起Xss和SQL注入漏洞的业务场景下,因此可以使用一个适用大多数业务场景的通用处理方法,牺牲少量用户体验,原创 2021-08-08 13:15:35 · 1657 阅读 · 0 评论 -
高并发下如何保证接口的幂等性
前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些 ,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:有时我们在填写某些 form 表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是 id 不一样;我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?),于是会对该请求重试几转载 2021-07-06 10:14:57 · 146 阅读 · 0 评论 -
MyBatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
前言SQL 注入漏洞作为 WEB 安全的最常见的漏洞之一,在 java 中随着预编译与各种 ORM 框架的使用,注入问题也越来越少。新手代码审计者往往对 Java Web 应用的多个框架组合而心生畏惧,不知如何下手,希望通过 Mybatis 框架使用不当导致的 SQL 注入问题为例,能够抛砖引玉给新手一些思路。Mybatis 的 SQL 语句可以基于注解的方式写在类方法上面,更多的是以 xml 的方式写到 xml 文件。Mybatis 中 SQL 语句需要我们自己手动编写或者用 generator 自转载 2021-07-05 09:46:44 · 244 阅读 · 0 评论 -
值得学习的设计模式学习网站
https://refactoringguru.cn/design-patterns/cataloghttp://c.biancheng.net/view/1361.htmlhttps://www.runoob.com/design-pattern/bridge-pattern.htmlhttps://juejin.cn/post/6844903847496777741#heading-10https://blog.csdn.net/xingjiarong/category_9264812.html原创 2021-06-30 13:42:34 · 520 阅读 · 0 评论 -
一篇不错的 适配器模式讲解
适配器模式,即根据客户端需要,将某个类的接口转换成特定样式的接口,以解决类之间的兼容问题。适配器模式,即根据客户端需要,将某个类的接口转换成特定样式的接口,以解决类之间的兼容问题。如果我们的代码依赖一些外部的 API,或者依赖一些可能会经常更改的类,那么应该考虑用适配器模式。下面我们以集成支付宝支付功能为例。1 问题假设支付宝支付类的功能如下:/** * 支付宝支付类 * @description: * @author: mabh * @create: 2021/6/28 16:19.转载 2021-06-28 17:15:49 · 238 阅读 · 0 评论 -
设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)
类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下类图之间的关系。一、类图的组成普通类上图就是一个 UML 的普通类图,从上图我们看出,一个 UML 通常由三部分组成。**第一部分是类名:**每个类都必须有一个名字,类名是一个字符串。**第二部分是类的属性 (Attributes):**属性是指类的性质,即类的成员变量。一个类可以有任意多个属性转载 2021-06-28 15:04:08 · 881 阅读 · 0 评论 -
一篇能看懂的 Java设计模式 -- 桥接模式(Bridge)(优秀文章)
一、写在前面之前有读者评论说,前边的文章开头理论性太强了,显得晦涩难懂,会把读者搞晕,谢谢这位读者,同时也希望其他的读者多提意见,帮助我改正提高博客,为了改进之前的问题,今天我们先用例子引入,然后再给出桥梁模式的相关概念。二、问题引入例子 1:现需要提供大中小 3 种型号的画笔,能够绘制 5 种不同颜色,如果使用蜡笔,我们需要准备 3*5=15 支蜡笔,也就是说必须准备 15 个具体的蜡笔类。而如果使用毛笔的话,只需要 3 种型号的毛笔,外加 5 个颜料盒,用 3+5=8 个类就可以实现 15 支蜡转载 2021-06-28 14:45:19 · 166 阅读 · 0 评论 -
一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)
设计模式使用设计模式,可以让我们的代码具有更好的可读性、可扩展性、可读性、重用性、符合高内聚低耦合的特点。作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识。设计模式种类该表和图来源于菜鸟教程序号模式 & 描述包括1创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。工厂模式(Factory Pattern) 抽象工厂模式(A原创 2021-06-26 18:52:43 · 572 阅读 · 1 评论 -
alibaba TransmittableThreadLocal 解决线程池和主线程数据传递问题
???? 在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。 一个Java标准库本应为框架 / 中间件设施开发提供的标配能力,本库功能聚焦 & 0 依赖,支持Java 17/16/15/14/13/12/11/10/9/8/7/6。JDK的 InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关原创 2021-06-24 17:34:26 · 2952 阅读 · 2 评论 -
Java监控Linux服务器 Top 状态
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version></dependency>import com.jcraft.jsch.*;import java.io.BufferedReader;import java.io.IOException;原创 2021-06-04 17:10:06 · 2220 阅读 · 2 评论 -
Spring Cloud Alibaba Nacos 配置中心
上一节 Spring Cloud Alibaba Nacos 注册中心记录了 Nacos 作为注册中心的使用方式,这节继续记录下 Nacos 作为配置中心的使用方式。本节使用的 Spring Cloud 版本为 Hoxton.SR3,Spring Cloud Alibaba 版本为 2.2.0.RELEASE,Spring Boot 版本为 2.2.3.RELEASE。框架搭建新建一个 Spring Boot 项目,artifactId 为 spring-cloud-alibaba-nacos-conf转载 2021-05-07 16:23:55 · 222 阅读 · 0 评论 -
Spring Cloud Alibaba Nacos 注册中心
2020-03-13 | Visit countNacos 是一款集服务注册发现、服务配置和管理于一身的开源软件,这节主要记录 Nacos 的服务注册发现功能的使用。借助 Spring Cloud Alibaba Nacos Discovery,我们可以轻松地使用 Spring Cloud 编程模型体验 Nacos 的服务注册发现功能。本节使用的 Spring Cloud 版本为 Hoxton.SR3,Spring Cloud Alibaba 版本为 2.2.0.RELEASE,Spring Boot转载 2021-05-07 16:20:04 · 178 阅读 · 0 评论 -
使用 Jsoup 防御 XSS 攻击
跨站脚本攻击 (Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页之时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。使用 Jsoup 可以有效的过滤不安全的代码。Jsoup 使用白名单的机制来预防 XSS 攻击,比如白名单中规定只允许<span>标签的存在,那么其他标签都转载 2021-05-07 16:07:08 · 1645 阅读 · 0 评论 -
Java 正则操作工具类
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.function.Consumer;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * java 正则匹配基本操作工具类 * <p> * 参考:https://www.c原创 2021-05-06 19:43:55 · 737 阅读 · 0 评论 -
了解 Redis 并在 Spring Boot 项目中使用 Redis – IBM Developer
在实际的开发过程中,多多少少都会涉及到缓存,而 Redis 通常来说是我们分布式缓存的最佳选择。Redis 也是我们熟知的 NoSQL(非关系性数据库)之一,虽然其不能完全的替代关系性数据库,但它可作为其良好的补充。本文就和大家一起了解一下 Redis,并实战在 Spring Boot 项目使用它。Redis 简介Redis 是一个开源(BSD 许可)、内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合等数据类型。内置复制、Lua 脚本、LRU 收转载 2021-02-19 15:47:39 · 211 阅读 · 0 评论 -
javaagent 使用指南
文章目录JVM 启动前静态 InstrumentJVM 启动后动态 Instrument[#](#3747963506)instrument 原理[#](#1765324936)启动时加载 instrument agent 过程:运行时加载 instrument agent 过程:Instrumentation 的局限性[#](#784633017)今天打算写一下 Javaagent,一开始我对它的概念也比较陌生,后来在别人口中听到 字节码插桩,bTrace,Arthas后面才逐渐了解到 Java 还提供转载 2021-02-19 15:43:58 · 1040 阅读 · 0 评论 -
自己写的笛卡尔积
package com.epoch.planning;import java.util.ArrayList;import java.util.List;public class DescartesUtil { public static void main(String[] args) { List<List<String>> list = new ArrayList<List<String>>(); int.原创 2020-12-11 16:14:11 · 350 阅读 · 0 评论 -
为什么要重写hashcode和equals方法?
为什么要重写hashcode和equals方法?简单总结:基本类型 使用 == 进行值比较。对象使用equals 进行内存地址如果Map key为对象不重写直接调用的Object.equals 还是进行的内存比较,有时候,我们仅仅是逻辑比较。其他参考:https://blog.csdn.net/weixin_44417508/article/details/105914426...原创 2020-11-30 20:01:49 · 313 阅读 · 0 评论 -
Linux配置jdk环境变量
1.下载jdk例如:jdk-8u171-linux-x64.tar.gz2.上传到Linux服务器/root/tools3.解压tar -zxvf jdk-8u171-linux-x64.tar.gz4.将解压后的jdk转移至/usr/localmv jdk1.8.0_171 /usr/local/5.修改配置文件vim /etc/profile5.1 加入以下语句export JAVA_HOME=/usr/local/jdk1.8.0_171export PATH=JAVAHOME原创 2020-11-25 16:37:24 · 295 阅读 · 0 评论 -
Java序列化、反序列化知多少
Java序列化、反序列化知多少https://mp.weixin.qq.com/s/0EfIUB9E-0Oh_Clwuxswuw普通类package com.epoch.planning;import java.io.Serializable;/** * @description: * @author: mabh * @time: 2020/11/12 15:42 */public class Student implements Serializable { priva原创 2020-11-13 14:17:40 · 85 阅读 · 0 评论 -
适合初学者入门 Spring Security With JWT 的 Demo
https://github.com/Snailclimb/spring-security-jwt-guide原创 2020-10-22 13:40:06 · 129 阅读 · 0 评论 -
JWT 身份认证优缺点分析以及常见问题解决方案
之前分享了一个使用 Spring Security 实现 JWT 身份认证的 Demo,文章地址:适合初学者入门 Spring Security With JWT 的 Demo。 Demo 非常简单,没有介绍到 JWT 存在的一些问题。所以,单独抽了一篇文章出来介绍。为了完成这篇文章,我查阅了很多资料和文献,我觉得应该对大家有帮助。相关阅读:《一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token》适合初学者入门 Spring Secur转载 2020-10-22 13:17:54 · 759 阅读 · 0 评论 -
JSON Web Token 入门教程
JSON Web Token 入门教程JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。转载 2020-09-28 20:10:42 · 121 阅读 · 0 评论 -
Java函数式编程笔记
接口输入参数返回类型说明PredicateTboolean断言ConsumerT/消费一个数据Function<T,R>TR输入T输出R的函数Supplier/T提供一个数据UnaryOperatorTT一元函数(输出输入类型相同)BiFunction<T,U,R>(T,U)R2个输入的函数BinaryOperator(T,T)T二元函数(输出输入类型相同)import jav...原创 2020-09-26 15:39:04 · 108 阅读 · 0 评论 -
Java中List, Integer[], int[]的相互转换
相信新手们在学习Java的过程中都会遇到和我一样的问题:想要把List和int[]相互转换太麻烦了。List和String[]也同理。难道每次非得写一个循环遍历吗?其实一步就可以搞定。本文涉及到一些Java8的特性。如果没有接触过就先学会怎么用,然后再细细研究。import java.util.Arrays;import java.util.List;import java.util.stream.Collectors; public class Main { public stati转载 2020-09-14 10:23:10 · 1624 阅读 · 0 评论 -
字节码插装技术
运行时 .jarJavaagent入口方法mainpreman参数Main-classPremain-class运行Java -jar xxx.jar-javaagent: xxx.jar还有AST语法树原创 2020-09-10 20:50:56 · 230 阅读 · 0 评论 -
java 获取主机IP,主机名、货币格式化、日期格式化、消息格式化
package com;import java.net.InetAddress;import java.net.UnknownHostException;import java.text.DateFormat;import java.text.MessageFormat;import java.text.NumberFormat;import java.util.Date;import java.util.Locale;/** * @description: * @author:原创 2020-08-29 11:27:48 · 141 阅读 · 0 评论 -
Java 1.7+ 读写文件操作
public class FileIO { public static void main(String[] args) throws IOException { try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get("/Users/mbh/Downloads/a.txt"), StandardCharsets.UTF_8)) { bufferedWriter.write(原创 2020-08-29 11:08:29 · 365 阅读 · 0 评论 -
java实现微信消息和小程序模板消息推送
002java实现微信模版消息推送本节知识点1,注册微信公号测试账号2,获取测试账号的用户openid3,接入微信推送sdk4,实现微信推送课程中用到的网址和文件1,微信官方注册测试账号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login配套笔记5行代码实现微信模版消息推送视频地址在线视频:https://edu.csdn.net/course/detail/23750核心代码1 三方类库原创 2020-08-29 10:33:03 · 1364 阅读 · 3 评论 -
推荐使用枚举单例模式,不推荐double check单例模式
原创 2020-08-22 11:31:17 · 144 阅读 · 0 评论 -
java用POI设置Excel的列宽
需求:将某个excel中的某一列列宽设置为35(该数值是Excel中显示的列宽值)。poi中设置列宽的方法为:HSSFSheet.setColumnWidth(int columnIndex, int width);1第一个参数好理解–列序号,关键是第二个参数宽度的值,应该设置为多少呢?我做了以下尝试,发现均不好使sheet.setColumnWidth(0, 35); //asheet.setColumnWidth(0, (int)35.7*35); //bshee转载 2020-08-07 11:03:52 · 5046 阅读 · 1 评论 -
Java动态代理
package com;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * @description: * @author: mabh * @create: 2020/7/21 10:46 下午 **/public class aaa { private static ABC abc; public原创 2020-08-02 15:15:59 · 107 阅读 · 0 评论 -
POM 文件添加 阿里下载源提高jar下载速度
<repositories> <repository> <id>alimaven</id> <name>Maven Aliyun Mirror</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> &l原创 2020-07-21 22:11:36 · 562 阅读 · 0 评论 -
java 对象序列化成字节 解析Mybatis Cache 密码
private byte[] serialize(Serializable value) { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos)) { oos.writeObject(value); oos.flush(); return bos.toByteArray()原创 2020-07-21 22:10:12 · 154 阅读 · 0 评论 -
JPA一对多、多对多json序列化死循环问题解决
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;import javax.persistence.*;import java.io.Serializable;import java.util.Date;import java.util.List;/** * Created by change. * 任务 */@Entity@Table(name = "task")@Datapublic class Task转载 2020-06-18 21:28:03 · 1512 阅读 · 2 评论 -
数据库+SpringBean注入的方式实现策略模式--- 支付示例
首先定义个支付行为接口 PayStragtegypackage com.mbh.first_boot_demo.strategy;/** * 支付行为接口 * @description: * @author: mabh * @create: 2020/5/22 10:51 下午 **/public interface PayStrategy { /** * 调用支付 */ String toPayHtml();}继承接口实现阿里支付行为..原创 2020-05-23 00:11:33 · 369 阅读 · 0 评论 -
枚举+工厂实现策略模式—-支付示例
首先定义支付行为接口 PayStrategy.javapackage com.mbh.first_boot_demo.strategy;/** * @description: * @author: mabh * @create: 2020/5/22 10:51 下午 **/public interface PayStrategy { /** * 调用支付 */ String toPayHtml();}实现微信支付行为,实现PayStrat..原创 2020-05-22 23:47:12 · 814 阅读 · 0 评论