Java后端
文章平均质量分 73
java
程序猿秃头之路
这个作者很懒,什么都没留下…
展开
-
WebFlux 详解
今天我们开始来学习下 WebFlux,为什么突然要学这个东西?因为我之前是想学习 Spring Cloud Gateway 来着,然后发现它是基于 Spring5.0+SpringBoot2.0+WebFlux等技术开发的。所以学之前才要来简单了解下 WebFlux 技术。然后要学习 WebFlux 时我发现又需要 Java 8 中的函数式编程、Stream 流等技术作为前置知识。环环相扣啊,套娃一样。所以前面还有两篇学习的文章:来系统学习下 lambda 表达式吧和来一起学习下 Java 8 的 S原创 2021-12-18 15:03:48 · 51664 阅读 · 14 评论 -
Java 8 Stream 流详解
继上一篇文章 还不理解 Lambda 表达式?来一起学习下吧,今天我准备学习一下 Java 8 中的 Stream 流了。为什么相关的优秀文章那么多,我却还要自己写一遍呐?写来写去东西都差不多。其实我只是想记录下来我所学习的东西,全当是笔记了。写下来肯定要记忆更深刻一点,并且方便以后复习。当然,文章发布出来能够帮助到大家一点那就更好了。我只能尽量避免文章中出现错误。话不多说,开始今天的学习。简介Java 8 中的 Stream 流和 Java IO 中的各种流没有任何关系。Java8 中的 St原创 2021-12-10 08:44:38 · 556 阅读 · 0 评论 -
Java 8 Lambda 表达式详解
lambda 表达式,相信大家都不陌生,就算没有用过,那应该也听说过。我也是一样,在使用新特性 stream流处理集合相关的代码时接触到这种语法,其他地方倒是不经常使用。所以也是仅仅知道一些皮毛,对于其中的原理什么的也不怎么清楚。今天准备系统的学习一番,话不多说,接下来就开始我们的学习。lambda 表达式介绍lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅。比较官方的定义是这样的:lambda 表达式是一个可传递的代原创 2021-12-03 22:57:45 · 484 阅读 · 0 评论 -
Spring 中的全局异常处理(实用)
相信大家在平时写代码的时候都使用过 try catch 来处理异常,特别是在前端调用的后端接口中,如果我们没做异常处理,后端直接返回错误信息给前端,前端直接把程序员才看懂的错误信息展示给了用户,想必会造成很不好的用户体验。为了防止发生这种情况,我们就需要在后端接口中 try catch 处理好异常,将更友好的错误信息返回给用户,比如:服务器内部异常、校验异常等等。而我们一个个的在接口中加上 try catch 有些麻烦,此时我们就可以使用全局异常处理机制。@ControllerAdvice 注解实现全局原创 2021-11-29 23:30:59 · 2230 阅读 · 1 评论 -
Java 中如何使用枚举来消除 if/else
今天,准备重新学习一下 Java 中的枚举类型。为什么现在要去重新学习呐?因为在刚开始学习 Java 的时候,对于枚举这一块的学习不太重视,工作之后呐,又基本上没用过枚举。导致对枚举这个数据类型不太明白,有时候看到别人的代码里用的枚举类型以及相关操作,觉得用的还挺好,就有了重新学习一下的冲动。话不多说,开始学习!定义枚举是什么意思呐?百度百科的说法是这样的:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。是一原创 2021-11-28 12:35:15 · 1893 阅读 · 0 评论 -
nginx 的安装、配置和使用(全)
前不久,一个项目开发完成要上线,作为项目主开发的我也要负责一下部署。项目是前后端分离的微服务架构:Spring Cloud 、Vue+ElementUI。在测试环境是直接 jar 包部署各微服务模块,前端直接是 npm run dev 启动。部署到正式环境,前端要将 build 之后的项目放在 nginx 中启动,并配置 https,由于我之前也没有配过 nginx,所以踩了很多坑,仅写这篇博客当做笔记。简介Nginx是一款开源的、跨平台的高性能web服务器,它有着高性能,稳定性高,配置简单,模块结原创 2021-11-23 20:08:08 · 2229 阅读 · 0 评论 -
Java中为什么只有值传递
背景Java 是值传递还是引用传递?这个问题一直以来都有所争议。查阅了很多资料,结果显示绝大多数的观点都倾向于 Java 是值传递的,也有一部分观点的关注点在题目本身是否合理,还有一小部分人可能在看了很多的相关资料后更加的迷惑了,也根据自己的理解提出了质疑。俗话说的好,一千个人眼里有一千个哈姆雷特,也不必太过纠结,我仅在这篇文章整理分析一下最多的一个观点:Java中只有值传递。整理下这篇文章主要是为了让自己记忆的更深刻,当然如果发布出来对看到的人有一点点帮助也是极好的。定义先看一个简单的例子1:/原创 2021-07-17 18:27:07 · 190 阅读 · 1 评论 -
JVM 的垃圾回收机制
1、概念垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。 2、问题哪些垃圾是需要回收的?有哪些重要的垃圾回收算法?垃圾回收的具体流程是怎样的?2.1 哪些垃圾是需要回收的?判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。引用计数算法引用计数算法很简单,它通过记录对象被引用的次数从而判断该对象的重要程度。如果该对.转载 2021-06-10 21:39:37 · 140 阅读 · 0 评论 -
常见的接口请求类型和@RequestBody、@RequestParam的使用
1. 常见的接口请求类型: 常见的接口有如下四种类型,分别是含有查询参数的接口,表单类型的接口,json类型的接口以及含有上传文件的接口。1.1 含有查询参数的1.2 表单类型的1.3 json 类型的1.4 包含上传文件的2. @RequestParam、@RequestBody2.1 @RequestParam @RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上, 原创 2021-06-08 21:27:15 · 4791 阅读 · 0 评论 -
@RequestParam 注解加与不加的区别
最简单的两种写法,加或不加@RequestParam注解@RequestMapping("/list")public String test(int userId) { return "list";}@RequestMapping("/list")public String test(@RequestParam int userId) { return "list";}区别:第一种写法参数为非必传,第二种写法参数为必传。参数名为userId。 第二种写法可以通.转载 2021-06-08 20:15:01 · 524 阅读 · 0 评论 -
多个文件上传+表单数据同时请求的前后端处理
前端在新增数据的时候将表单中的多个文件和表单的其余参数一并传递给后端的某个接口。原创 2021-06-07 22:36:34 · 1685 阅读 · 2 评论 -
Mybatis insert 过后返回生成的 uuid 主键(非自增主键)
mybatis insert 过后返回 sys_guid() 生成的主键原创 2021-06-04 08:56:44 · 1387 阅读 · 0 评论 -
深入分析Java中的length和length()
在开始正文之前,请你快速回答如下问题:在不使用任何带有自动补全功能IDE的情况下,如何获取一个数组的长度?以及,如何获取一个字符串的长度?这个问题我问过不同水平的程序员,包括初级和中级水平的。他们都不能准确而自信地回答这个问题(如果你能很准确很自信的回答这个问题,那么证明针对这一知识点你比大多数中级程序员掌握的好)。由于现在很多IDE都有代码补全功能,这使得开发人员在很多问题上都理解的很肤浅。本文将介绍几个关于Java数组的关键概念。上面问题的正确回答姿势应该是这样的:那么问题来了,转载 2021-05-23 09:54:16 · 521 阅读 · 0 评论 -
nacos 学习笔记
nacos 笔记1. Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。2. Nacos 安装与启动:https://nacos.io/zh-cn/docs/quick-start.html3. 外部 Mysql 数据库支持单机模式时nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步骤:1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下2.初始化mysql数据库,新建数据库naco原创 2021-05-06 16:29:23 · 212 阅读 · 0 评论 -
Nacos、Eureka、Consul、Zookeeper 主流服务注册与发现中心的对比
主流服务发现中心对比 对比项目 Nacos Eureka Consul Zookeeper 一致性协议 支持AP和CP模型 AP模型 CP模型 CP模型 健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive 负载均衡策略 权重/metadata/Selector Ribbon Fabio - 雪崩保护原创 2021-05-05 22:29:35 · 454 阅读 · 0 评论 -
Nacos、Spring Cloud Config、Apollo 主流配置中心的对比
主流配置中心对比 对比项目 Spring Cloud Config Apollo Nacos 配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内) 版本管理 支持(Git) 支持 支持 配置回滚 支持(Git) 支持 支持 灰度发布 支持 支持 不支持 权限管理 支持(依赖Git) 支持 不支持 多集群 支持原创 2021-05-05 22:14:28 · 867 阅读 · 0 评论 -
ElementUI 树型组件 el-tree 后台数据结构构建
前言Vue+ElementUI 是目前项目开发中普遍使用的前端技术,我们在开发中肯定会遇到用树形展示数据的需求,比如公司和部门,公司下面有多个部门,部门下面又有多个班组,每个部门或者班组下有相关人员,此时我们就可以使用ElementUI 的 tree 组件来实现,前端根据官网上的例子,需要的数据是这样的:<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree><原创 2021-05-01 22:13:13 · 5416 阅读 · 4 评论 -
Java 从数据库中读取 Blob 文件访问文件上传接口
背景: 最近在做数据对接方面的工作,其中有一个需求是将我们公司以 blob 形式存储在数据库中的文件读出来访问要对接公司的文件上传接口,将这些文件对接到对方公司,记录一下 Java 发送文件上传请求的代码。先贴出要访问的接口代码:@RequestMapping(method = RequestMethod.POST, value = "/upload") @ApiOperation(value = "表单文件上传") @ApiI.原创 2020-12-06 20:59:06 · 1312 阅读 · 0 评论 -
Java 发送 POST 请求获取文件
需求:在 Java 中请求一个 python 接口,返回一个文件存在文件路径下public void sendPOSTRequest(String url, String params, String saveDir, String rowGuid) { try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.set...原创 2020-10-12 15:11:12 · 1820 阅读 · 0 评论 -
Tomcat 配置访问某个目录下的文件并设置允许跨域访问
一、访问文件我们都知道 tomcat 启动后访问地址 localhost:8080 默认访问页面是 tomcat 安装路径webapps/ROOT 文件夹下面的 index.html 或者 index.jsp或者如果将图片或者其他文件放在webapps/ROOT 文件夹下直接访问路径 localhost:8080/文件名 就会直接预览或者下载这个文件那么如果我们想访问到其他文...原创 2020-05-04 22:05:54 · 4716 阅读 · 0 评论 -
maven项目在idea中能够运行,放在本地tomcat中运行失败
最近在将一个maven项目打包放在公司服务器上运行之前,我先将打好的 war 包放在我自己电脑上的tomcat上看看是否能正常运行。结果这一试就出了问题了,在自己电脑的 tomcat 上就是部署失败,tomcat 启动时会报错,错误信息好像是什么 c3p0 的一个错误,奇怪的是我在 idea 上运行就是正常的,两种方式都是正常的这就奇了怪了,:war 包的方式不就是 idea 将...原创 2020-03-28 11:16:35 · 2375 阅读 · 0 评论 -
IDEA中Maven依赖下载失败的解决方法
在日常开发的过程中,拉取别人的项目,或者新建项目在pom文件中添加依赖时,很多小伙伴肯定都遇到过如下图所示的依赖下载失败的情况,我也是遇到过很多次了,在这里把解决的方法给总结一下,希望能帮到各位。...原创 2020-03-18 22:24:24 · 21011 阅读 · 7 评论 -
SpringBoot + Mybatis Plus + Oracle 主键自增的配置
由于 Oracle 不像 SQL Server 和 MySQL 有主键自增的设计,需要用创建序列或者触发器的方式实现主键增长,使用 Mybatis 时可以直接在 SQL 语句中使用序列,如果我们使用 Mybatis Plus 的通用 Mapper ,不自己写 SQL,这种情况下要实现主键自增就需要做一些额外的配置了:1. 在application.yml 配置文件中增加my...原创 2020-01-22 11:04:08 · 6597 阅读 · 6 评论 -
拦截器+自定义注解验证 Token 登录
背景:最近做的项目中使用了token验证用户登录状态,用户每次请求都需要验证token,出现重复代码,所以想着用拦截器+自定义注解来验证,将验证token 的代码放在自定义拦截器中,如果验证成功则返回 true 放行,如果验证失败则返回 false 程序运行终止,但是验证失败我是要返回给前端错误信息的,具体怎么实现直接看代码。代码:1.MyInterceptor 实现 Ha...原创 2019-11-21 18:19:56 · 1494 阅读 · 0 评论 -
SpringBoot 中使用 HandlerInterceptor 拦截器 @Autowired 注入的 DAO 为空
背景:今天使用SpringBoot的自定义拦截器,需要在拦截器中注入一个DAO,运行的时候出现异常,DAO为null,注解也都加了,就是注入不进去。@Componentpublic class MyInterceptor implements HandlerInterceptor { @Autowired private UserLoginDAO userLoginDA...原创 2019-11-21 18:03:44 · 3111 阅读 · 0 评论 -
MySQL插入数据时反斜杠 '\' 丢失
背景:获取的文件路径在添加进MySQL数据库中时,'\' 消失解决办法:将 '\' 转换为 '/' 存入数据库filepath.replaceAll("\\\\", "/")原创 2019-11-19 18:45:49 · 2245 阅读 · 0 评论 -
为什么使用Token?
一.Token的来源:当客户端多次向服务端请求数据时,服务端就需要多次从数据库中查询用户名和密码并进行对比,判断用户名和密码是否正确,并作出相应提示。但这样无疑会增加服务器端的运行压力,是否可以有一种方式只需要验证用户就是之前的用户而不需要每次在客户端请求数据时都需要查询数据库判断用户名和密码是否正确。在这种请求下,引入了token来解决服务器端多次访问数据库问题。1.什么...转载 2019-11-14 16:54:00 · 4061 阅读 · 0 评论 -
TempleteJDBC和Mybatis混合使用注意事项
今天,师傅让我将以前项目中的一个功能接口拿到现在正在做的项目中,之前的项目用的是 Spring+SpringMVC+TempleteJDBC,现在做的项目用的是 Spring Boot+Mybatis,如果将这个功能代码从TempleteJDBC 改为Mybatis 会比较麻烦,然后就决定不改,就混合使用,果然出现了问题。首先出现了 dataDAO 为 null 的问题,注解什么的都没有少,...原创 2019-11-13 12:15:28 · 2577 阅读 · 0 评论 -
解决IDEA用SSH方式拉取Github项目:Could not read from remote repository
背景:今天在公司的电脑上使用 IDEA 用SSH方式拉取Github上的项目报错:Could not read from remote repository上网一顿查,将SSH executable 改成Native 没有用最后分析问题应该是 ssh key 配置有问题,于是重新配置了一番,问题解决。详细步骤:1. 找到C盘里的 .ssh 目录给删掉(如果有的话)...原创 2019-10-31 11:22:19 · 2695 阅读 · 2 评论 -
如何写 logback 配置文件
本篇文章要点 日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 通过异步输出日志减少磁盘IO提高性能 异步输出日志的原理 配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载class...转载 2019-08-23 23:33:18 · 475 阅读 · 0 评论 -
java代码优化
创建一个BaseApiService.java import java.util.HashMap;import java.util.Map;public class BaseApiService { //setResult(200,"success",null) public static Map<String, Object> setResultSuc...原创 2019-08-14 23:57:25 · 182 阅读 · 0 评论 -
MD5密码加盐
引入一个依赖 <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version></dependency> 工...原创 2019-08-19 09:44:27 · 2722 阅读 · 0 评论 -
登录验证码的实现
引入工具类 CreateValidateCode.javaimport java.awt.*;import java.awt.image.BufferedImage;import java.util.Random;public class CreateValidateCode { private BufferedImage image;// 图像 private S...原创 2019-08-13 17:38:29 · 6799 阅读 · 2 评论 -
面向切面(Spring Aop)、拦截器、过滤器的区别
Filter过滤器:拦截web访问url地址。Interceptor拦截器:拦截以 .action结尾的url,拦截Action的访问。Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service)Filter与Interceptor联系与区别1. 拦截器是基于java的反射机制,使用代理模式,而过滤器是基于函数回调。2. 拦截器不依赖servlet容器,...转载 2019-07-27 16:41:04 · 561 阅读 · 0 评论 -
缓存穿透、缓存雪崩和缓存击穿的概念
1.缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。2.缓存雪崩缓存雪崩是指在设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,导致所有的查询都落在数据库上,造...原创 2019-07-31 11:04:36 · 141 阅读 · 0 评论 -
path与classpath区别
path指示java命令的路径,像javac、java、javaw等classpath是javac编译器的一个环境变量,它的作用与import、package关键字有关,当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个pac...转载 2019-07-25 17:38:34 · 126 阅读 · 0 评论 -
springboot项目前台通过地址栏传CST格式的时间到后台多十四个小时的解决办法
废话不多说,直接正题。<c:forEach items="${requestScope.times}" var="time"> <tr> <td>${time.id}</td> <td>${time.createDate}</td> ...原创 2019-07-21 11:09:09 · 2255 阅读 · 0 评论 -
springboot项目Invalid bound statement (not found): com.xxxx.dao.xxxDAO.xxx解决方法
一开始看到控制台报了这个错误 找了半天没找到什么错误,jar包也引了,@MapperScan注解也没错,mapper.xml文件路径也没错,最后才发现application.xml配置文件的MyBatis的配置的mapper-locations的路径写错了这写成了.*xml 改成*.xml就好了,细心!细心!细心!...原创 2019-07-20 13:21:43 · 20060 阅读 · 0 评论 -
idea中maven项目System.out.print("中文")控制台输出乱码终极版
在idea写一个maven项目测试的时候发现凡是System.out.println()输出有中文的,控制台就会出现中文乱码,中文数据保存到数据库也是乱码然后特意写了一个测试类如下:发现控制台输出的确实是乱码,奇怪的是我去其它项目中写一个这样的测试类,控制台却没有出现中文乱码,很奇怪,然后我按照网上的方法各种改,包括在设置中改File Encodings、在Java Compi...原创 2019-07-19 23:59:36 · 8522 阅读 · 4 评论 -
如何将 Spring Boot 项目打成 war 包
改动的地方就是红色标出的地方1.首先要在pom文件中指定项目的打包方式 <packaging>war</packaging>2.排除项目内嵌服务器tomcat scope属性改为provided<dependency> <groupId>org.springframework.boot</groupId> ...原创 2019-07-19 21:55:59 · 150 阅读 · 0 评论