
Java
文章平均质量分 61
Micrle_007
这个作者很懒,什么都没留下…
展开
-
MapStruct参数拷贝
我们上面代码里面可以看到,处理参数和返回参数都要经过不同的转换,这里面看似乎增加了不少工作量,主要是测试案例写的比较简单,真实场景中,如果你不区分,就有可能引起各种问题,如信息泄露等。所以定义了不同的层次,当然,根据需要选择。好了,上面就是基本用法了,至于更复杂的用法,推荐查看官网案例。2.添加转换接口类,可以按照不同业务写多个接口,加上注解。来拷贝对象,但是这不是完全的深拷贝,我们可以用。这上面只是简单的参数相同和集合映射的例子,我们先看看前面的部分代码。另外,上面我们使用了。原创 2024-06-26 08:37:54 · 457 阅读 · 0 评论 -
Springboot应用设置跳过SSL证书认证
虽然这个类在开发和测试环境中可能有用,但在生产环境中使用是不安全的,因为它会使你的应用程序容易受到各种 SSL/TLS 攻击。请确保在生产环境中进行适当的证书验证,以保护数据传输的安全性。原创 2024-06-18 10:50:21 · 1664 阅读 · 0 评论 -
CSRF 攻击详解
禁用 CSRF 保护有其合理的应用场景,特别是在开发 RESTful API、使用其他防护措施、内部应用和非浏览器客户端时。然而,需要谨慎对待这个决定,并确保在适当的场景中启用 CSRF 保护,以防范潜在的安全风险。原创 2024-05-22 22:09:28 · 4061 阅读 · 0 评论 -
(适配器模式)当接口要加入新方法时,我后悔没有早点学设计模式了
通过适配器模式和策略模式,我们即可以保证具体的实现类实现共同的接口或继承共同的基类,同时,又能在新增功能(方法)的时候,尽可能的保证设计的清晰。不像之前那种破罐子破摔的方式,接口和实现类几乎脱离了关系,每个实现类,各玩儿各的。原创 2024-05-16 22:20:58 · 769 阅读 · 0 评论 -
CompletableFuture 异步关于异常的坑
在使用异步CompletableFuture时,无论是否有返回值都要调用get()/join()方法,避免程序执行报错了,仍然返回成功。结果:接口返回成功,控制台打印异步线程异常日志,主线程没有打印异常日志。结果:结果返回成功,控制台打印异步线程异常信息,主线程没有打印异常信息。结果:结果返回成功,控制台打印异步线程异常信息,主线程没有打印异常信息。处理,如果只是对异常做处理,不涉及对上一个异步任务结果的情况,调用。结果:接口返回失败,控制台打印异常日志。结果:接口返回成功,控制台打印异常信息。原创 2024-05-14 20:34:49 · 553 阅读 · 0 评论 -
@JsonProperty作用
JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。这里需要注意的是将对象转换成json字符串使用的方法是fasterxml.jackson提供的!jackson的maven依赖。原创 2024-03-25 17:01:18 · 1391 阅读 · 1 评论 -
Java通过central config 开关实现双写控制
最后获取开关的值可以配置在central config里,通过更改这个值就可以实现对双写的控制。原创 2023-11-14 19:52:05 · 259 阅读 · 0 评论 -
Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。我们前面提到的@Cacheable、@cacheEvict等也可以标注在接口上,这对于基于接口的代理来说是没有什么问题的,但是需要注意的是当我们设置proxy-target-class为true或者mode为aspectj时,是直接基于class进行操作的,定义在接口上的@Cacheable等Cache注解不会被识别到,那对应的Spring Cache也不会起作用了。下面是几个使用参数作为key的示例。转载 2023-11-14 10:33:36 · 1597 阅读 · 0 评论 -
ThreadLocal用法
是的,使用同步可以解决问题,但是我们要看哪一种方式更合适,一般必须使用同步的场景是这个变量属于业务共享的,也就是说一个线程操作这个对象对别的线程是有业务影响的,是有业务逻辑关系的,再或者说其他线程操作这个变量要看当前线程操作的结果,比如商品库存,这个你总不能说用 ThreadLocal 去定义这个库存吧,那岂不是要疯了。这样,每个线程独立的拥有对象 t,虽然方法是公用的,但是里面的 t 对象是线程独有的,所有就解决了冲突问题。原创 2023-11-05 21:32:05 · 273 阅读 · 0 评论 -
对称加密和非对称加密以及CA证书
这些证书一般不会改变,而且需要很高的访问权限,比如系统级别的或者管理员级别的权限才可以访问或者修改这些证书,所以这里的证书被认为是整个信任体系的一个根节点,一般不会被篡改。server端在提供公匙给client端的时候,公匙被黑客篡改成了自己的公匙(黑客用非对称加密算法生成了公匙和私匙),这时候client端并不知情,所以拿了黑客的公匙对消息进行加密然后传输,不幸的是传输的过程,也被黑客劫持了,这样黑客就拿到了由他自己的公匙加密的密文,然后又用自己的私匙对密文解密,导致信息泄漏。原创 2023-10-14 17:41:08 · 278 阅读 · 0 评论 -
Springboot编译报错:Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironmen
lombok,jdk17原创 2023-10-08 16:13:48 · 719 阅读 · 1 评论 -
java8到java17的蜕变
jdk17转载 2023-10-07 21:37:48 · 193 阅读 · 0 评论 -
Java Supplier用法
Supplier原创 2023-07-12 08:04:15 · 2262 阅读 · 0 评论 -
浏览器跨域请求
CORS原创 2023-06-10 11:10:22 · 943 阅读 · 0 评论 -
jackson-annotation的@jsonignore
json原创 2023-06-09 09:18:30 · 577 阅读 · 0 评论 -
接口安全性以及解决方案
因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。这种方案nonce和timestamp参数都作为签名的一部分传到后端,基于timestamp方案可以让黑客只能在60s内进行重放攻击,加上nonce随机数以后可以保证接口只能被调用一次,可以很好的解决重放攻击问题。我们知道http 是一种无状态的协议,服务端并不知道客户端发送的请求是否合法,也并不知道请求中的参数是否正确。转载 2023-05-22 20:46:04 · 859 阅读 · 0 评论 -
java Predicate用法
Predicate原创 2023-05-17 21:32:11 · 287 阅读 · 0 评论 -
spring cache和SpEL表达式
spring cache原创 2023-05-16 08:50:53 · 1652 阅读 · 0 评论 -
http的get和post请求的区别
最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那就让我们从 HTTP 报文的角度来撸一波,从而搞明白他们的区别。GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。首先说明一点,HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。转载 2023-05-14 20:12:03 · 126 阅读 · 0 评论 -
优雅地解决NullPointException
NPE转载 2023-04-23 12:20:27 · 1037 阅读 · 0 评论 -
Token原理
服务端在接收到 Token 后,会先对 Token 进行拆分,然后使用相同的密钥和哈希算法计算 Token 中的数据的签名,并将其与 Token 末尾的签名串进行比较,以判断 Token 是否合法。这样,客户端就可以在以后的请求中使用新的 token。总的来说,token 认证的流程是在用户登录时获取 token,之后在 HTTP 请求头里携带 token,服务端在响应请求时对 token 进行验证并返回相应结果,同时可以在响应头中返回新的 token(用于更新之前的 token)。原创 2023-03-25 21:12:26 · 3925 阅读 · 2 评论 -
枚举类定义异常类型以及注解@RestControllerAdvice用法途
RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。@ExceptionHandler注解,标明了该处理方法体处理的异常类型。原创 2023-03-13 15:55:31 · 744 阅读 · 0 评论 -
使用 Optional 判 null 替代繁琐的 if ... else
【代码】使用 Optional 判 null 替代繁琐的 if ... else。原创 2023-03-10 14:24:14 · 186 阅读 · 0 评论 -
关于使用@NameNativeQuery和@SqlResultSetMapping自定义复杂查询
@NameNativeQuery转载 2023-02-16 21:34:36 · 754 阅读 · 0 评论 -
@Autowired作用在方法上
java转载 2023-02-01 11:23:06 · 3010 阅读 · 0 评论 -
@Builder使用
test转载 2023-01-11 13:44:00 · 1656 阅读 · 0 评论 -
@Jsonignore作用
json原创 2022-12-17 10:34:01 · 350 阅读 · 0 评论 -
Java如何通过IP获得真实地址
ip转载 2022-11-29 19:55:12 · 1967 阅读 · 0 评论 -
httpclient调接口服务端与客户端开发实战
http客户端调用转载 2022-06-20 09:09:59 · 1068 阅读 · 0 评论 -
不要在对外接口中使用枚举类型
https://mp.weixin.qq.com/s/mQuMLUOLMKWqsy5sDfIcFg转载 2022-06-18 12:54:33 · 350 阅读 · 0 评论 -
浏览器获取CA认证流程
首先说说证书的签发过程: 服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证; CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等; 如信息审核通过,CA 会向申请者签发认证文件-证书。 证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,原创 2022-05-23 20:33:56 · 1477 阅读 · 1 评论 -
java 泛型中?和Object的区别
这个可能在用到反射需要获取Class类型时用到,它的解释就是:接收一个不确定的类型,有点和Object一样。我对它一个理解是,如果只用"?"那么它和Object是一样的,但是"?"有比Object稍微“高级”有点的用法,就是它能缩小一个不确定的范围,利用类似"? extends Test",这就意味着只接收接收Test类的继承类,是不是比Object的范围缩小了?...原创 2022-05-09 10:42:38 · 958 阅读 · 1 评论 -
接口优化的11种方法
接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。该问题说简单也简单,说复杂也复杂。有时候,只需加个索引就能解决问题。有时候,需要做代码重构。有时候,需要增加缓存。有时候,需要引入一些中间件,比如mq。有时候,需要需要分库分表。有时候,需要拆分服务。等等。。。导致接口性能问题的原因千奇百怪,不同的项目不同的接口,原因可能也不一样。本文我总结了一些行之有效的,优化接口性能的办法,给有需要的朋友一个参考。1.索引接口性转载 2022-05-07 16:45:48 · 9157 阅读 · 0 评论 -
避免重复造轮子,Java 程序员必备
优秀且经验丰富的 Java 开发人员的特点之一是对 API 的广泛了解,包括 JDK 和第三方库。如何使用现有的 API 进行开发,而不是为常见的东西编写新的代码。是提升开发效率必选之路。一般来说,我会为日常项目提供有用的库,包括 Log4j 等日志库、Jackson 等 JSON 解析库以及 JUnit 和 Mockito 等单元测试 API。如果您需要在项目中使用它们,则可以在项目的类路径中包含这些库的 JAR 以开始使用它们,也可以使用Maven进行依赖管理。对 Java 程序员有用的开源库转载 2022-04-20 08:50:04 · 404 阅读 · 0 评论 -
为什么不建议用try catch处理异常?
软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的 try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢?丑陋的 try catch 代码块:优雅的 Controller:上面的示例,还只是在 Controller 层,如果是在 Service 层,可能会有更.转载 2022-04-12 08:39:38 · 629 阅读 · 0 评论 -
高级开发要会高效Java
1. 什么是静态工厂方法? 静态工厂方法是一种创建对象的方式。 这里的静态工厂方法,并不是设计模式中的工厂模式。 静态工厂方法仅仅是类的一个普通的静态方法,它的最终效果等同于构造器。 说了这么多,给你举个例子就明白了。Integer integer = Integer.valueOf("1");Boolean aBoolean = Boolean.valueOf(true);Calendar calendar = Calendar.getInstance();复制代转载 2022-04-12 08:35:14 · 124 阅读 · 0 评论 -
非Json字符串转map对象
直接上代码:public static void main(String[] args) {//map 的类型: Map<String, List<Map<String, String>>> map = new HashMap<String, List<Map<String, String>>>(); List<Map<String,String>> list = ne原创 2022-04-10 15:27:54 · 715 阅读 · 0 评论 -
用户级线程和内核级线程
用户级线程#“既然你已经看过线程的基本概念,那我就直接跳过这一部分了。很久很久之前,线程的概念是出现了,但操作系统厂商可不能直接就去修改操作系统的内核,因为对他们来说,稳定性是最重要的。贸然把未经验证的东西加入内核,出问题了怎么办?所以想要验证线程的可用性,得另想办法。”“我知道我知道,那些研究人员就编写了一个关于线程的函数库,用函数库来实现线程!”小白得意的说:“这个我刚刚在网上看到了。”“是的,他们把创建线程、终止线程等功能放在了这个线程库内,用户就可以通过调用这些函数来实现所需要的功能。”转载 2022-03-10 09:35:37 · 4233 阅读 · 2 评论 -
大文件上传:秒传、断点续传、分片上传
前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式详细教程秒传1、什么是秒传通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文转载 2022-02-24 15:39:23 · 491 阅读 · 0 评论 -
当synchronized遇上integer
前几天在某技术平台上看到别人提的关于 Synchronized 的一个用法问题,我觉得挺有意思的,这个问题其实也是我三年前面试某公司的时候遇到的一个真题,当时不知道面试官想要考什么,没有回答的特别好,后来研究了一下就记住了。所以看到这个问题的时候觉得特别亲切,准备分享给你一起看看:首先为了方便你看文章的时候复现问题,我给你一份直接拿出来就能跑的代码,希望你有时间的话也把代码拿出来跑一下:publicclassSynchronizedTest{publicstaticv...转载 2022-02-23 09:23:21 · 443 阅读 · 0 评论