JAVA
文章平均质量分 55
c_hmnzs
这个作者很懒,什么都没留下…
展开
-
自定义注解详细介绍
1 注解的概念1.1 注解的官方定义首先看看官方对注解的描述:An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annota转载 2021-12-22 16:34:48 · 317 阅读 · 0 评论 -
基于springboot的RestTemplate、okhttp和HttpClient对比
1、HttpClient:代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,不建议直接使用。2、RestTemplate: 是 Spring 提供的用于访问Rest服务的客户端, RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。引入jar包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr转载 2021-01-06 16:10:20 · 668 阅读 · 0 评论 -
MYSQL搜索多个对象的数据,合并重复,并只取第一条,解决办法
低版本:row_number() over partition by 分组聚合函数不能用如果版本高可以直接用:select * ,row_number() over (partition by c_id order by s_score) from score;现在来说说SQL该怎么写:第一种:SELECT t1.* FROM ( SELECT wh.id, wh.ywid, wh.ywlx, wh.jmxm, wh.jmsfzh, wh.xxzt, wh.c原创 2021-01-05 17:19:11 · 2434 阅读 · 0 评论 -
java1.8新特性之stream流式算法
在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下:List<Long> userIdList = new ArrayList<>();for (User user: list) { userIdList.add(user.id);}或者在1.8有了lambda表达式以后,我们会这样写:List<Long> user转载 2020-12-03 17:27:57 · 684 阅读 · 0 评论 -
Java 1.8 新特性—— 函数式接口 与 函数式编程
一、函数式接口1、概述有且仅有一个抽象方法的接口2、格式public interface FunctionInterface { void run();}3、@FunctionalInterface注解与 @Override 注解的作用类似,Java 1.8 中专门为函数式接口引入了一个新的注解:@FunctionalInterface 该注解可用于一个接口的定义上在这里插入图片描述一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错如果转载 2020-12-03 17:15:22 · 348 阅读 · 0 评论 -
MySQL 优化实战记录
背景本次SQL优化是针对javaweb中的表格查询做的。部分网络架构图业务简单说明N个机台将业务数据发送至服务器,服务器程序将数据入库至MySQL数据库。服务器中的javaweb程序将数据展示到网页上供用户查看。原数据库设计1、windows单机主从分离2、已分表分库,按年分库,按天分表3、每张表大概20w左右的数据原查询效率3天数据查询70-80s目标3-5s业务缺陷无法使用sql分页,只能用java做分页。问题排查前台慢 or 后台慢转载 2020-12-01 17:04:24 · 158 阅读 · 0 评论 -
MySQL索引优化
本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开(本文图片可点开放大)。一、MySQL索引基础首先,我们将从索引基础开始介绍一下什么是索引,分析索引的几种类型,并探讨一下如何创建索引以及索引设计的基本原则。此部分用于测试索引创建的user表的结构如下:1. 什么是索引?“索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构。”——《高性能MySQL》我们需要知道索引其实转载 2020-12-01 16:59:56 · 228 阅读 · 0 评论 -
jar包里的图片上传处理办法
因为获取jar包中的文件路径的格式已经变为*.jar!*(除了第一个),这种格式的路径,不能通过new File的方式找到文件。因此如果是单文件,可以用流来获取,多文件因为不能获取绝对路径因此不能用文件循环上传。解决办法:方法1:自己创建一个绝对路径,不存放在jar里面【docker 容器有复制命令,可以把jar包里的文件复制出来】,然后使用绝对路径进行操作方法2:因为不能用File 来直接读取,但是可以直接用流,因此换种思考方法,把所有的图片名称写入一个json文件,然后读取json 文件里的所有图片原创 2020-11-20 16:46:41 · 484 阅读 · 0 评论 -
springBoot集成flyway
Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里;不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复。Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首次启动会创建默认名为SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要执行的sql脚本等;sql原创 2020-11-17 10:55:17 · 157 阅读 · 0 评论 -
java中的各种锁详细介绍
Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 VS 悲观锁#乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际转载 2020-11-11 20:37:02 · 151 阅读 · 0 评论 -
SpringBoot 使用事务注解 @Transactional 遇到的问题
SpringBoot 使用事务注解 @Transactional 遇到的问题使用事务注意的地方:1:开启事务,使用注解 @EnableTransactionManagement 开启事务2:注意表的引擎:MyISAM 不能使用事务,要用 InnoDB 引擎3:事务触发的异常默认是运行时异常【具体看源代码】:/** * Defines zero (0) or more exception {@link Class classes}, which must be * subclasses of原创 2020-10-23 16:02:50 · 929 阅读 · 0 评论 -
远程图片URL下载
import java.net.URL;import java.net.URLConnection;@RestController@Slf4jpublic class MenuIconController { /** * 图片导出 */ @GetMapping("/doIconExport") //@LoginRequired public Response<Void> doIconExport(HttpServletResponse r原创 2020-09-28 09:30:49 · 271 阅读 · 0 评论 -
对象复制工具
使用场景:处理 domin 实体类与 model 类的属性映射的,我们只需定义 mapper 接口,mapstruct 在编译的时候就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现。【其实就是不同的对象不同的属性字段进行复制】如果不使用工具的写法,需要一个个写:import cn.xcewell.oms.entity.CdmbDocument;import com.xcewell.oms.vo.MenuVo;import org.springframework.util.Collecti原创 2020-09-23 18:55:49 · 161 阅读 · 0 评论 -
springboot 注入,一个接口多个实现,怎么来获取对应实例对象
我的做法:在每个接口中加一个对应的标识【唯一】,如:@Getterpublic enum MessageTypeEnum { SEND_MESSAGE_XCX("标识1","xcx"), SEND_MESSAGE_SMS("标识2","sms"), SEND_MESSAGE_WX("标识3","wx"); MessageTypeEnum(String name, String type) { this.name = name; this原创 2020-09-14 11:17:35 · 1270 阅读 · 0 评论 -
CountDownLatch的使用和原理解析
1、CountDownLatch 概念CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,当计数器递减到0时会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。2、CountDownLatch 常用转载 2020-09-14 10:59:49 · 235 阅读 · 0 评论 -
线程池-优化当前线程执行多任务
工作的时候遇到一个这么一个问题,信息的群发任务,当代码写完,发现执行太慢了,主要是任务数太多导致的,但是这个结果又是要同步返回的,不能说只提交任务,不用管执行结果是什么。因为我这边的做法是,使用CountDownLatch控制,代码: private final Semaphore semaphore = new Semaphore(10); private ExecutorService cachedThreadPool = Executors.newCache...原创 2020-09-14 10:55:08 · 234 阅读 · 0 评论 -
springboot之使用redistemplate优雅地操作redis
概述本文内容主要关于spring-redis 关于redis的key设计 redis的基本数据结构 介绍redis与springboot的整合 sringboot中的redistemplate的使用之前看了很多博客,大都都只是粗略的介绍,这里想要记录的全面一些,也算是一个学习的过程首发于我的个人博客:janti的个人博客关于spring-redisspring-data-redis针对jedis提供了如下功能:1. 连接池自动管理,提供了一个高度封装的“RedisTempl转载 2020-09-03 17:20:10 · 480 阅读 · 0 评论 -
Spring拦截器,实现
刚做Java不久,写个拦截器,以及现在用到的。需求:登录拦截原本是想用过滤器实现的,可是发现过滤器会把静态资源文件也过滤【因为我写的是过滤所有请求,会把登录的静态文件给过滤了,可能也能实现,但是没找到,又有点急】,因此用了拦截器实现,因为它可以排除资源请求的拦截代码:1:先写一个拦截器类 ,并实现接口 HandlerInterceptor代码:package com.jesse.config.interceptor;import com.jesse.util.SessionU.原创 2020-05-21 11:02:42 · 196 阅读 · 0 评论 -
简单的线程理解
1。单进程单线程:一个人在一个桌子上吃菜。2。单进程多线程:多个人在同一个桌子上一起吃菜。3。多进程单线程:多个人每个人在自己的桌子上吃菜。多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。1。对于 Windows转载 2017-05-08 17:14:19 · 216 阅读 · 0 评论 -
Java关键字final、static使用总结
Java关键字final、static使用总结 一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final转载 2017-03-26 19:41:43 · 233 阅读 · 0 评论 -
java学习路线
JAVA学习路线图,特此声明,转自柠檬学院http://www.bjlemon.com/。仅希望对热爱JAVA学习有所帮助如若转载或者使用本图,请注明出处,避免后期出现版权问题,谢谢!!!JAVA学习路线图此乃是java攻城狮的学习路线图,由简到繁,由易到难,一步步的学习,最后成为JAVA攻城狮。希望对大家的学习有所帮助阶段1 1:学习HTML翻译 2017-03-14 10:50:28 · 237 阅读 · 0 评论