Java开发
文章平均质量分 52
魏云舒
这个作者很懒,什么都没留下…
展开
-
centos中配置maven环境
maven安装原创 2023-02-24 10:02:30 · 477 阅读 · 1 评论 -
阻塞队列实现异步消费
阻塞队列实现异步消费。原创 2022-08-08 15:44:35 · 315 阅读 · 0 评论 -
分布式锁的应用实践 | 微服务申请逐渐递增且不重复的号码
微服务申请逐渐递增且不重复的号码原创 2022-08-03 22:39:20 · 253 阅读 · 0 评论 -
Spring Boot 自定义注解,AOP 切面统一打印出入参请求日志
在访问接口时,需要查看入参和出参信息,并且将这些访问信息存储到数据库中,实现接口问题排查原创 2022-06-04 22:23:29 · 488 阅读 · 0 评论 -
在springboot中添加swagger文档
swagger就解决了在代码开发过程中对接口说明,接口参数说明,并且能够提供页面进行接口测试。原创 2022-06-04 10:07:54 · 528 阅读 · 0 评论 -
springboot异常处理与捕获
在开发过程中,对于错误的参数等各种情况,需要抛出异常,然后由上层进行捕获,最终返回从RuntimeException中继承2. 定义异常信息枚举接口3. 异常信息接口实现4. 在service层,出现业务异常,则抛出异常5. 在controller层捕获异常(不用)6. 编写全局异常处理类7. controller层优化问题1:在微服务调用过程中,serviceA调用serviceB,为了保证服务内部的安全性,serviceB不能够将所有的异常全部传递给前端,但有些又需要向前端原创 2022-06-04 09:33:37 · 463 阅读 · 0 评论 -
Cookie、Session、JWT、token四者间的区别与联系
Cookie、Session、JWT、Token四者的理解与疑问原创 2022-06-01 22:52:20 · 544 阅读 · 0 评论 -
设计接口的一些总结
后端开发工程师,主要工作就是:如何把一个接口设计好接口参数校验修改老接口时,注意接口的兼容性日志打印好,接口的关键代码,要有日志保驾护航日志打印的15个建议设计接口时,充分考虑接口的可扩展性考虑接口是否需要防重处理接口考虑幂等性幂等性:计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同。聊聊幂等设计好的接口实现,离不开SQL优化调用第三方接口要考虑异常和超时处理可原创 2022-05-11 12:40:53 · 339 阅读 · 0 评论 -
关于key的设置思考
字典序:英文单词在字典中的先后顺序通过字典序能够使得相似的内容放在一起,更好的查看。key中描述范围最广的放在前面,变化最多的放在后面,如限制手机号单日发送限额,其key可如下设置:public static final String SEND_LIMIT_KEY_PREFIX = "company:sms:send_limit:";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");String date =原创 2022-05-10 20:18:44 · 144 阅读 · 0 评论 -
java8中stream的几种妙用
文章目录获取List集合中的某一种属性由list生成map信息List排序List去重获取List集合中的某一种属性// 获取设备列表中所有的小区List<Long> communityIds = equipmentList.stream() .map(Equipment::getCommunityId) .collect(Collectors.toList());由list生成map信息// 从小区返回信息中, 生成对应的<小区Id:小区信息&原创 2022-05-10 20:10:35 · 336 阅读 · 1 评论 -
curl命令行发送POST请求
请求示例curl -X POST http://192.168.57.80/gateway/login # 请求URL-H "Content-type: application/json" # 请求头-d '{"phone":"123****3123","password":"123456"}' # 传输body参数参数说明-i: 打印服务器回应的HTTP标头-X:指定http请求的方法。如果使用了-d,则默认使用POST,此处可省略-X参数-H:添加HTTP请求的标头-d: 指定的参数原创 2022-04-12 13:06:39 · 3420 阅读 · 3 评论 -
String.format()用法
文章目录问题String.format() 字符串常规类型格式化的两种重载方式问题在开发的时候,生成一段字符串,要将一些变量数据组合成一个字符串,如一个文本需要显示:小区-分区-楼宇-房间,则将数据库中读取的字符串进行组合:private static final String ROOM_ADDRESS = "%s-%s-%s-%s";String roomAddress = String.format(ROOM_ADDRESS, inviteInfo.getPartitionName(), in原创 2022-04-12 12:41:45 · 398 阅读 · 0 评论 -
开发中日志打印
日志打印日志实现和日志门面日志门面:是日志实现的抽象层。日志实现:具体的日志功能的实现。 日志实现,可能会有一些代码的优化和改动,避免影响用户在项目中的使用,使用日志门面这些统一的接口,假设在实现层代码做了更改,用户在项目中使用日志而调用的接口等等都是不会受影响的。常见的日志框架日志实现日志门面log4jSLF4J(Simple Logging Facade for Java)log4j2logbackJUL(java.util.logg原创 2022-03-23 20:11:37 · 399 阅读 · 0 评论 -
分布式链路跟踪
文章目录方案一:自己写代码完成链路跟踪方案二:Spring Cloud Sleuth + ZipKinSleuth原理Sleuth实现Sleuth源码分析(todo)方案三:Skywalking方案一:自己写代码完成链路跟踪在zuul中添加过滤器:package com.cloud.mszuul.filter;import com.cloud.mszuul.Constants;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul原创 2022-03-23 20:10:16 · 4144 阅读 · 0 评论 -
Java中Boolen 和 boolen区别
看如下两段代码,看其区别private boolen isFunction(boolen isTrue){ if (isTrue == true){ return true; } return false; }private Boolen isFunction(Boolen isTrue){ if (isTrue == true){ return true; } return false; }boolen是个基础数据类型,其可以为true或falseBoolen是bool原创 2022-03-22 15:42:45 · 1084 阅读 · 0 评论 -
Java8 Stream
Java8新添加的Stream属性,能够向sql语言处理数据一样,对List列表中的数据进行处理,将元素队列进行聚合操作,让代码更加简洁、高效。常见的几种方式:map:对每个元素进行操作filter:条件过滤sorted:排序limit:指定数量Collectors:返回组装List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// filter(), 过滤出空的字符串L原创 2022-03-19 10:36:55 · 350 阅读 · 0 评论 -
Java中== 和equals的区别
java中==和equal的区别文章目录java中==和equal的区别java中有八种基本数据类型:short/int/long/float/doublebytecharboolen这些基本的数据类型在生成时直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间里面。==就是在内存栈上比较这两个值是否相同。这些基础数据类型毕竟缺少灵活性,java给每个基础数据类型都加了引用数据类型Short/Integer/Long/Float/DoubleByteCharacterBo原创 2022-03-02 20:56:32 · 7829 阅读 · 0 评论 -
【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
文章目录问题描述本文面临的情况准备条件操作步骤第一步:安装Redis-cli第二步:安装stunnel4第三步:开启Stunnel服务,在VM启动时自动启动第四步:在stunnel中添加redis-cli的配置项第五步:重启Stunnel服务,加载Redis配置,使用命令为第六步:检查stunnel是否已经监听6380端口,使用命令参考文章:https://www.cnblogs.com/lulight/p/14188279.html问题描述在Azure Redis的官方文档中,介绍了在Windows原创 2021-07-07 19:33:40 · 782 阅读 · 0 评论 -
Typora中将多张图片并排/分行显示
居中并排<center class="half"> <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1ggnfolw5kxj30u00u0qe5.jpg" width="300"/> <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1ggnfolw5kxj30u00u0qe5.jpg" width="300"/></center>左对原创 2021-07-01 23:55:16 · 1972 阅读 · 0 评论 -
vim常用命令
shift+g 跳转到最后一行gg 跳转到第一行设置行号::set number原创 2021-07-01 23:47:37 · 103 阅读 · 0 评论 -
IDEA设置tab为4个空格
IDEA设置tab为4个空格,请勿勾选character原创 2021-07-01 23:42:53 · 1080 阅读 · 0 评论 -
关于后端开发流程的复盘
从三个方面复盘:git开发流程关于部署情况了解关于代码问题排查1. git开发流程目前共有三个环境:本地环境、公司开发环境和公司测试环境开发之前需要先进行详细分析,需要添加哪些功能,修复哪些特性,这个必须要明确;需要对代码整体情况了解,自己开发的模块在整体中什么位置,会牵连到哪些模块,这些代码的变化会给整体带来什么影响;编写好详细的测试用例,对接口的输入和输出进行设计,对其中的一些特殊情况进行测试用例的编写;开发阶段将主分支更新到最新,然后从主分支新建立一个feat原创 2021-07-01 23:30:16 · 314 阅读 · 0 评论 -
wireshark中http协议显示为VNC协议修改
文章目录1. 问题2. 分析3. 解决4. plus1. 问题在接口中抓包,然后用wireshark打开查看,需要的http此时都变成了VNC点击VNC层,则能够显示出http包的内容那么protocol如何以http的形式展示2. 分析我们抓取的这些包来自于端口5900,在应用层有较多的协议,wireshark打开时并不知道采用哪个协议去对应,这个时候使用VNC协议刚好能够解析,我们就看到的Protoco对应的VNC。3. 解决编辑 -> 首选项 -> Protocol原创 2021-06-29 20:21:29 · 782 阅读 · 1 评论 -
Rest API接口说明| swagger、HTML、postman
1. 三种描述方式在后端设计好接口之后,需要获得Rest API接口的说明文档和调试接口,主要方式如下:类型说明swagger版本由代码中的swagger注释生成的json文件HTML版本将swagger.json文件插入yapi,生成HTML版本的说明文档,方便阅读postman版本postman可保存输入参数,来调用接口2. swagger.json的生成使用swagger对代码进行注释部署项目后,找到Swagger API在线地址点击h原创 2021-06-27 21:58:49 · 392 阅读 · 0 评论 -
Rest API描述 | swagger
文章目录1. 背景介绍2. Swagger2注解说明2.1 @Api:用在请求的类上,说明该类的作用2.2 @ApiOperation:用在请求的方法上,说明方法的作用2.3 @ApiImplicitParams:用在请求的方法上,包含一组参数说明2.4 @ApiResponses:用在请求的方法上,表示一组响应2.5 @ApiModel:用于响应类上,表示一个返回响应数据的信息3. Spring Boot中使用swagger3.1 添加swagger依赖3.2 swagger配置文件4. referen原创 2021-06-27 21:51:43 · 345 阅读 · 1 评论 -
数据库版本管理 | flyway
文章目录1. 背景需求1.1 传统部署方式1.3 Flyway部署方式2. Flyway2.1 工作流程2.2 flyway注意事项2.3 flyway中文件命令方式2.4 在SpringBoot项目使用Flyway1. 背景需求在数据库设计好,并生成sql后,需要将其部署起来。1.1 传统部署方式其对应的操作语句如下:# 拷贝本地文件到容器docker cp /root/myFile/user.sql mysql:/tmp/user.sql# 在ubuntu中进入docker容器 doc原创 2021-06-27 21:37:38 · 837 阅读 · 1 评论 -
消息队列 | java简单实现
1. 消息队列介绍:消息队列是MQ是一种系统间相互写作的通信机制Broker:消息处理中心,负责消息的接收、存储、转发等;Producer:消息生产者,负责产生和发送消息到消息处理中心;Consumer:消息消费者,负责从消息处理中心获取消息,并进行相应的处理。2. java设计一个简单的消息队列其结构如下所示:2.1 消息处理中心作为消息处理中心,至少有一个数据容器来保存接收到的消息。这里采用java中队列(Queue)的一个子类ArrayBockingQueue来实现。如下是消原创 2021-06-20 21:51:05 · 4911 阅读 · 4 评论 -
个人云笔记解决方案: typora + picgo + aliyunOSS + 坚果云
文章目录1. 问题介绍2. 解决方案3. 具体操作3.1 工具说明及下载3.2 下载和安装picgo3.3 阿里云OSS的申请与使用3.4 Typora中绑定picgo1. 问题介绍背景:在日常工作中,编写文档和写代码。写代码用github + gitee来管理;文档采用markdown来记录。在不同电脑上切换,以及将文档上传到云时,markdown中文件和图片需要进行实时同步。2. 解决方案对于markdown文档,将其同步到云上,在不同终端登录即可查看。目前有百度云,坚果云等,个人对百原创 2021-06-20 17:16:19 · 318 阅读 · 0 评论 -
IDEA-解决Command line is too long. Shorten command line for SpringBootMainApplication
文章目录1. 问题2. 分析3. 解决1. 问题使用IDEA启动项目时,报错如下:2. 分析报错信息为命令行太长IDEA底层是通过命令行或者文件的方式将classpath传递到Java的JVM虚拟机上的,而大多数的操作系统都会有命令行的最大长度限制,超过这个限定值时就会导致IDEA无法启动当前程序当命令行长度大于32768个字符时,将IDEA切换到动态类路径。长类路径被写入文件,然后由应用程序启动器读取并通过系统类加载器加载。3. 解决文件.idea\workspace.xml原创 2021-06-05 11:46:44 · 1441 阅读 · 4 评论 -
后端开发之抓包分析
文章目录1. 问题:2. 解决:3. 相关背景知识:1. 问题:微服务运行在公司的linux服务器当中在自己的linux电脑上,远程连接公司指定的linux服务器,然后远程连接到微服务运行的服务器当中客户端的https请求在网关上将https转换成http客户端通过https想服务器发送请求,报错,需要排查错误2. 解决:在服务器中用tcpdump的指定端口抓取请求包将微服务服务器中的包复制到公司的登录linux服务器将包放到windows当中,并用wireshark界面显示与分析原创 2021-06-05 11:30:48 · 805 阅读 · 0 评论 -
null和empty的区别
代码String a = new StringString b = ""String c = null分析:此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已)此时b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串)此时c是未分配内存空间,无值,是一种无值(值不存在)...原创 2021-06-01 10:25:53 · 2099 阅读 · 0 评论 -
本地环境无法连接公网Apollo
为了学习方便,在公网上搭建了一套携程Apollo配置中心,环境搭建好后发现本地连不上公网的Apollo,日志发现一直连接公网私有ip客户端版本需要在0.11.0版本以上,如下maven<!-- springBoot 整合apollo--><dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artif原创 2021-05-31 17:30:00 · 594 阅读 · 0 评论 -
在ubuntu环境中安装java
1. 在ubuntu环境中安装java# 更新软件包列表sudo apt-get update# 安装openjdk-8-jdksudo apt-get install openjdk-8-jdk# 查看java与javac版本java -versionjavac -version# 利用语句选择数字切换java与javac版本sudo update-alternatives --config javasudo update-alternatives --config javacsu原创 2021-05-31 17:26:52 · 5940 阅读 · 0 评论 -
“==“和“equals()“区别
初步了解在JVM中的内存分配知识在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。初步认识equals与==的区别:==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同==是指对内存地址进行比原创 2021-05-31 17:09:27 · 65 阅读 · 0 评论 -
@RequestBody后面跟枚举类型,Postman怎样输入
params/UpgradeType.javapublic enum UpgradeType{ // 连云设备 CLOUND_DEVCIE, // 代理设备 PROXY_DEIVCE;}controller/UpgradeDeviceController@PostMapping(value = "/devcie-type")public String getUpgradeDeviceModeList(UpgradeType upgradeType){ return upgradeT原创 2021-05-31 16:29:29 · 853 阅读 · 0 评论 -
Entity和数据库中字段不同
1. 问题描述:数据库中对字段命名采用下划线形式,在java中采用驼峰形式命名。在数据库中为community_id,在entity中为communityID,在mapper中将数据库中的字段读到对象中,是否会出现错误。2. 问题对应代码:entity/DeviceModel.java@Datapublic class DeviceModel { // id private Long id; // 设备类型名称 private String name;}en原创 2021-05-31 16:18:54 · 773 阅读 · 0 评论 -
IntelliJ IDEA常用技巧
1. 常用快捷键Ctrl + N: 按名字搜索类:全局搜索类Ctrl + Shift + N: 按文件名搜索文件原创 2021-05-31 16:05:30 · 77 阅读 · 0 评论 -
BeanUtils进行属性的copy
常用API:// 把orig对象copy到dest对象中.public void copyProperties (Object dest, Object orig)// 把Bean的属性值放入到一个Map里面public Map describe(Object bean)// 把map里面的值放入bean中public void populate (Object bean, Map map)// 设置Bean对象中名称为name的属性值赋值为value. public void se.原创 2021-05-31 16:01:59 · 3567 阅读 · 0 评论 -
IntelliJ IDEA创建错误类型文件
问题描述:在写java代码时,需要生成一个实体类,但显示不能够创建class,但每次都生成为txt类型,在别的地方使用也会报错。解决方法:Intelli IDEA配置出现问题,在Recognized File Type中找到对应的错误类型,将Registered Patterns中的错误类型删除。...原创 2021-05-31 15:25:02 · 310 阅读 · 0 评论