
java
java笔记心得
苏醒v
这个作者很懒,什么都没留下…
展开
-
java8到java17新特性总结
.原创 2022-07-18 15:07:06 · 1741 阅读 · 1 评论 -
Java 比较两个字符串的相似度算法(Levenshtein Distance)
算法简介:Levenshtein Distance,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。/** * 比较两个字符串的相识度 * 核心算法:用一个二维数组记录每个字符串是否相同,如果相同记为0,不相同记为1,每行每列相同个数累加 * ...转载 2022-04-01 11:26:27 · 2481 阅读 · 0 评论 -
SpringMVC执行流程图
原创 2022-04-08 21:13:06 · 1477 阅读 · 0 评论 -
Java集合框架分析(Queue)——队列体系结构
原创 2022-03-17 17:03:41 · 849 阅读 · 0 评论 -
list集合排序
List<TestDto> dtoList= new ArrayList<>();1、根据TestDto对象的priority字段降序排序 dtoList.sort(Comparator.comparing(TestDto::getPriority).reversed());2、根据TestDto对象的sort字段升序排序dtoList.sort(Comparator.comparing(TestDto::getSort));...原创 2022-03-08 16:13:23 · 224 阅读 · 0 评论 -
java 常用的Annotation(常用注解)
@Deprecated -- @Deprecated 所标注内容,不再被建议使用。@Override -- @Override 只能标注方法,表示该方法覆盖父类中的方法。@Documented -- @Documented 所标注内容,可以出现在javadoc中。@Inherited -- @Inherited只能被用来标注“Annotation类型”,它所标注的Annotation具有继承性。@Retention -- @Retention只能被用来标注“Annotatio...原创 2021-12-22 15:07:14 · 414 阅读 · 0 评论 -
mybatis-plus自定义sql报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
1、查看yml路径配置mybatis-plus: mapper-locations: classpath*:com/xxxx/laws/mapper/xml/*.xml2、查看mapper接口的方法和xml定义的id名称是否一致3、查看maven是否打包xml文件<resource> <directory>src/main/java</directory> <includes>原创 2021-08-09 19:09:44 · 415 阅读 · 0 评论 -
springboot集成mybatis-plus,并自动生成代码
1、引入相关依赖 <!-- mybatis plus 代码生成器 + 模板引擎 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version>原创 2021-08-09 12:46:12 · 297 阅读 · 0 评论 -
修改springboot临时文件路径
1、修改yml配置文件server: port: 9000 tomcat: basedir: E:\Temp\90002、重启项目后自动生成临时文件夹原创 2021-08-09 12:05:07 · 600 阅读 · 0 评论 -
springboot测试简单集成
加入springboot测试依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>test原创 2021-08-05 10:52:04 · 102 阅读 · 0 评论 -
freeMarker生成静态html页面
yml配置freemarker freemarker: request-context-attribute: req #req访问request suffix: .ftl #后缀名 content-type: text/html enabled: true cache: false #缓存配置 template-loader-path: classpath:/templates/ #模板加载路径 按需配置 charset: UTF-8 #编码格原创 2021-08-04 18:31:37 · 662 阅读 · 0 评论 -
Swagger2配置
/** * Swagger2配置 * @author ysx * @date 2021/5/14 * @Varsion 1.0.0 */@Configuration@EnableSwagger2@PropertySource("classpath:config/config.properties")public class SwaggerConfig { @Value("${config.swagger.open}") private boolean enable;原创 2021-08-03 18:27:23 · 244 阅读 · 0 评论 -
SpringMVC资源访问路径配置
@Configurationpublic class SpringMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/abc")//系统文件虚拟地址 .addResourceLocations("/s原创 2021-08-03 18:24:48 · 777 阅读 · 0 评论 -
允许跨域配置
@Componentpublic class OriginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter原创 2021-08-03 18:17:05 · 421 阅读 · 0 评论 -
事务控制配置
@Configurationpublic class TxAnoConfig { @Autowired private DataSource dataSource; @Bean("txManager") public DataSourceTransactionManager txManager() { return new DataSourceTransactionManager(dataSource); } /*事务拦截器*/原创 2021-08-03 18:15:56 · 207 阅读 · 0 评论 -
java使用线程实现定时器功能
/** * 定时器 * @param initialDelay 开始时间(秒) * @param period 定时时间(秒) */ private void refresh(Long initialDelay,Long period) { Runnable runnable = new Runnable() { @Override public void run() {原创 2021-08-03 18:05:06 · 135 阅读 · 0 评论 -
springBoot启动时让方法自动执行的几种实现方式
1.实现ServletContextAware接口并重写其setServletContext方法@Componentpublic class TestStarted implements ServletContextAware { /** * 在填充普通bean属性之后但在初始化之前调用 * 类似于initializingbean的afterpropertiesset或自定义init方法的回调 * */ @Override public v转载 2021-08-03 16:56:34 · 285 阅读 · 0 评论 -
java中的 流 (Stream)
什么是输入/输出流Java 程序通过流来完成输入/输出,所有的输入/输出以流的形式处理。因此要了解 I/O 系统,首先要理解输入/输出流的概念。输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备。数据流是 Java 进行 I/O 操作的对象,它按照不同的标准可以分为不同的类别。按照流的方向主要分为输入流转载 2021-07-30 12:25:12 · 650 阅读 · 0 评论 -
list集合转tree树工具
public class TreeUtils { private static final String ROOT_ID = "0"; private static final String GET = "get"; private static final String SET = "set"; /** * 私有构造器 */ private TreeUtils() { throw new IllegalStateExcept.原创 2021-07-28 18:12:28 · 274 阅读 · 0 评论 -
23 种设计模式的分类和功能
1. 根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3 种。创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样.转载 2021-07-23 17:32:42 · 119 阅读 · 0 评论 -
单例模式介绍
单例模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方法,通过此方法可以直接获取该类的唯一对象。下面介绍下懒汉模式和饿汉模式的实现方式1、懒汉模式:顾名思义,他是一个懒汉,他不愿意动弹。什么时候需要吃饭了,他就什么时候开始想办法搞点食物。即懒汉式一开始不会实例化,什么时候用就什么时候new,才进行实例化public class Singleton { /原创 2021-07-23 11:53:05 · 74 阅读 · 0 评论 -
JVM内存模型
JVM运行时数据区 Java虚拟机在运行时对该Java进程占用的内存进行的一种逻辑上的划分,包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。 这些区块实际都是Java进程在Java虚拟机的运作下通过不同数据结构来对申请到的内存进行不同使用。线程共享 堆内存: 存放对象实例及数组 所有线程都可以访问修改,存放的是...转载 2021-07-08 10:32:40 · 83 阅读 · 0 评论 -
Java内存模型(Java Memory Model)
一、概述 Java内存模型是Java语言在多线程并发情况下对于共享变量读写(实际是共享变量对应的内存操作)的规范,主要是为了解决多线程可见性、原子性的问题,解决共享变量的多线程操作冲突问题。】JMM描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存中读取出变量这样的底层细节。所有的变量都存储在主内存中,每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中变量的一份拷贝) JMM的两条规定 1、线程对共享变量的所有操...转载 2021-07-08 10:29:31 · 138 阅读 · 0 评论 -
shiro反序列化漏洞修复(使用随机密钥)
说明:shiro低版本使用固定默认密钥,有被攻击的风险,可以升级shiro版本,Apache官方已在1.2.5及以上版本中修复此漏洞,但是此方式有依赖冲突的风险。这里说说不升级版本的解决方案,这方案和官方的方案一样,都是使用生成的随机密钥1、创建随机生成密钥工具public class GenerateCipherKey { /** * 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generat原创 2021-07-07 11:52:31 · 3362 阅读 · 0 评论 -
springboot发送电子邮件
1、引入maven依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>2、开通服务获取授权码我这里使用的qq邮箱,首先去qq邮箱-->设置-->账户--&g.原创 2021-07-03 18:22:38 · 131 阅读 · 0 评论 -
线程的生命周期
线程的生命周期包含5个阶段:新建、就绪、运行、阻塞、销毁。 新建:就是刚使用new方法,new出来的线程,此时JVM 进程还没有真正的创建线程; 就绪:调用的线程的start()方法后,JVM 进程会去创建一个新的线程,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行; 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能; 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep原创 2021-06-30 17:39:51 · 96 阅读 · 0 评论 -
java爬虫之Jsoup 方法
1、public String nodeName() 得到节点名2、public String tagName() 得到元素的标签名 如p3、public Element tagName(String tagName) 改变元素的标签 。如:el.tagName(“p”) 把一个标签改变为一个标签。4、public Tag tag() 得到元素的Tag5、public boolean isBlock()测试元素是否是块级元素。6、public String id() 得到元素的id.转载 2021-06-07 17:29:19 · 377 阅读 · 0 评论 -
解决并发请求下刷新多个token的问题
使用redis加锁实现,拿到锁的线程进行token刷新,拿不到锁的线程跳过token刷新具体实现/** * 刷新AccessToken */ private boolean refreshToken(String uid,String account, ServletResponse response) { Boolean lock = JedisUtil.getLock(account);//获取锁 if(lock){原创 2021-05-21 16:45:10 · 1827 阅读 · 0 评论 -
pdf文件转html(保留文本信息)
1、引入maven依赖<dependency> <groupId>net.sf.cssbox</groupId> <artifactId>pdf2dom</artifactId> <version>1.9</version> </dependency>2、java实现/** * pdf转html .原创 2021-05-17 18:22:26 · 562 阅读 · 0 评论 -
PageInfo对象属性详解
private int pageNum;//当前页码 private int pageSize;//设置每页多少条数据private int size;//当前页有多少条数据private int startRow;//当前页码第一条数据的private int endRow;//当前页码的开始条private int pages;//当前页码结束条private int prePage;//上一页(页面链接使用)private int nextPage;//下一页(页面链接使.原创 2021-03-07 17:54:29 · 1389 阅读 · 0 评论 -
EL表达式各种函数使用大全
EL表达式各种函数使用大全引入<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchString)}"> fn:containsIgnoreCase 判断字符串是否包含另外一个字符串(...原创 2021-01-13 20:06:08 · 339 阅读 · 0 评论