- 博客(1760)
- 资源 (1)
- 收藏
- 关注
原创 SpringBoot当中配置日志框架详解(保姆级教程)&日志框架的选择和使用
在日常开发或者调试的过程中,尽量使用log4j2或者logback这些异步的方法,进行日志的统一收集,禁止使用System.out.println。项目上线前也要进行全局搜索,防止有人误提交带有System.out.println的代码。
2023-06-03 19:11:25
23
原创 关于@JsonProperty和@JSONField注解的区别及用法
都是为了解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准。
2023-06-03 19:08:06
11
转载 【网络安全】Content Security Policy (CSP) 介绍
内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。
2023-06-03 18:26:52
7
原创 SpringBoot2整合WebSocket,实现后台向前端推送信息
WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,在 WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
2023-06-03 18:16:55
12
原创 Java序列化继承
在序列化中,当引入继承时,则根据超类和子类定义了某些情况,这使对每种情况下的序列化的理解变得更加简单。应遵循的基本规则如下。1.当超类实现时,可序列化接口而子类则不。在这种情况下,即使子类未实现Serializable接口,默认情况下,当超类被序列化时,子类的对象也将被序列化。2.当超类未实现可序列化的接口而子类实现时。在这种情况下,在子类中继承的超类实例变量不会被序列化,并且在子类的序列化过程中也不会释放其分配的值。此外,在子类序列化期间的JVM也将默认的初始化值重新分配给这些超类的实例变量。
2023-06-03 18:08:14
7
原创 LinkedBlockingDeque详解,源码,原理和常用方法,使用场景介绍
【1】一个链表阻塞双端无界队列,可以指定容量,默认为 Integer.MAX_VALUE【2】数据结构:链表(同LinkedBlockingQueue,内部类Node存储元素)【3】锁:ReentrantLock(同ArrayBlockingQueue)存取是同一把锁,操作的是同一个数组对象【4】阻塞对象(notEmpty【出队:队列count=0,无元素可取时,阻塞在该对象上】,notFull【入队:队列count=capacity,放不进元素时,阻塞在该对象上】)
2023-06-03 17:40:39
11
原创 Java并发容器LinkedBlockingDeque、ArrayBlockingQueue、DelayQueue、LinkedTransferQueue、SynchronousQueue
* —这样服务器支持并发的量会大一点,所以LinkedTransferQueue是用在更高得并发的情况下。 * --是一种特殊的transferQueue,里面装的任何东西都必须立刻交给消费者去消费。* 无界队列,塞进去的数据有规定的时间在什么时候才可以取,默认是排好顺序的,等待时间最长的排在前面,先往外拿。 * 生产者送来的产品,消费者必须马上消费掉,如果不消费会出问题。*有界队列,在线程池里装的就是一个一个的任务。* 实现生产者消费者。
2023-06-03 00:52:23
11
原创 Gson gson = new GsonBuilder().setDateFormat(“yyyy-MM-dd HH:mm:ss“).create()
在Java中处理JSON格式的数据时,Google Gson 是个不错的选择,用起来挺方便的,也有一定灵活性。不过它在处理Date格式时有个小陷阱,在不同环境中部署时可能会遇到问题。为了避免使用Gson时遇到locale影响Date格式的问题,使用GsonBuilder来创建Gson对象,在创建过程中调用GsonBuilder.setDateFormat(String)指定一个固定的格式即可。在不同的locale环境中,这样获取到的SimpleDateFormat的模式字符串会不一样。
2023-06-03 00:47:20
10
原创 Maven配置中repositories、distributionManagement、pluginRepositories详解&将已有jar包部署到私服
repositorie 表示下载项目依赖库文件的maven仓库地址
2023-06-03 00:42:02
9
原创 Kaptcha图片验证码工具&SpringBoot整合kaptcha(谷歌验证码工具)实现验证码功能
验证码的作用图片验证码自从诞生以来从未被抛弃,依然发出属于它所应有的光。验证码经常验证如下一些场景。1、用户登录,防止机器人登录2、论坛留言,防止恶意灌水3、短信验证码发送,防止盗刷短信Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:SpringBoot整合 Kaptcha1、pom.xml文件中引入2、配置DefaultKaptcha3、编写controller4、访问http://127.0.0.1:8083/verification2:编写kaptcha配置类
2023-05-14 22:53:36
166
1
原创 git add 文件、文件夹
git add 目的是将修改文件由工作区提交到暂存区,可以多次提交,然后commit操作,将文件从暂存区提交到版本库。source目录下及子目录下所有文件,home目录下的所有.py文件。
2023-05-14 22:32:17
51
原创 Tomcat实现https访问
https是一种加密传输协议,而tomcat默认是http的方式访问,那我们怎样实现tomcat的https访问呢?下面给大家介绍。首先我们需要确保我们的电脑装了jdk。
2023-05-13 23:59:55
72
原创 Spring Boot 开启https访问(配置SSL证书)
实际工作中为了提高数据传输的安全性,采用HTTPS通讯,简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输,相比http协议安全。SSL证书需要到CA机构申请证书,仅为测试可以使用jdk生成自签证书。
2023-05-13 23:53:02
102
原创 【Java】关于对System.getProperty中user.dir的理解
System.getProperty(“user.dir”)方法返回的是执行运行Java程序命令的路径。这句话有一点歧义,还是通过举例说明最合适。
2023-05-13 23:29:09
79
原创 关于Object.class.getResourceAsStream方法读取文件的使用
先附上代码。在使用Object.class.getResourceAsStream方法时,在src同级目录下创建文件夹configss,文件夹下创建log4j.properties文件和文件夹test,test文件夹下创建文件tomcatpath.properties,如图此时,执行main函数,程序会直接报错,经过研究,找出问题如下:需要将configss文件夹执行build path–use as source folder,结果如下图。
2023-05-13 23:26:27
65
原创 class.getResourceAsStream与class.getClassLoader().getResourceAsStream区别
简单点说,就是用来加载java类的,类加载器负责把class文件加载进内存中,并创建一个java.lang.Class类的一个实例,也就是class对象,并且每个类的类加载器都不相同。我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。
2023-05-13 23:14:02
69
原创 Java泛型详解&泛型的优点、方法及相关细节
曾经写接口的时候都没有定义泛型,它默认的就是Object类,其实这样写是不规范的!如果说接口的存在是一种规范,那泛型接口就是规范中的规范} }1.使用泛型方式给HashSet中放入三个学生对象,并输出对象信息students . add(new Student("懒羊羊" , 21));students . add(new Student("喜羊羊" , 41));students . add(new Student("美羊羊" , 13));
2023-05-13 23:03:26
60
原创 为什么使用private static final
可见,final和static是不同的,一个类中若有着final和static修饰的两个属性,在创建对象时,static修饰的属性只被初始化一次,而final修饰的属性会随着对象的创建而被创建初始化。可见final修饰的属性fs在线程sleep一秒后因为创建了新的对象所以值变了,单独被final修饰的属性fs属于对象,aa与bb是两个对象,而static修饰的变量因为是属于类的所以没有改变。static:静态的,static修饰的东西(代码块、属性等)不属于任何对象属于某个类,是对象公有的。
2023-05-11 23:00:39
95
原创 事务遇到第三方API请求如何处理
虽然API请求成功了,但是20s才处理完成,因为在上面我们对自己库的操作已经在事务里面了,还未提交,所以将导致我们的操作被锁定20s,当堆积的多了,就会产生问题。这样做没有缺点,正规的程序都会提供,唯一的缺点就是不正规的可能不提供,这也就要求我们在为别人提供业务接口的时候,要根据业务的重要程度,为他人提供回调或轮询方法。明确成功的意思很明显,这也是我们最常用到的失败情况,当第三方给你返回非200状态码或OK时,就可以是明确失败了,你就可以处理回滚了。1、防止了库被占用,且得到失败的结果后能进行手动回滚。
2023-05-11 22:55:27
56
原创 关于Transparent native-to-ascii conversion---Idea中properties乱码
也就是说比如有同事用的eclipse用中文写的备注,你这边编辑以后push会把原来中文的注释全都用ASCII覆盖,这个就是勾选以后造成的影响。在properties敲中文的备注,取消勾选以后看到的也是中文,因为它本身不是ASCII没法转码,暂时没发现什么问题;在properties敲中文的待读取内容,代码读取到的是乱码,这个是我遇到的问题,我把这些中文换成ASCII,读取到的就是正常的了。根据我个人理解,我觉得这个选项的作用是把你properties中的ASCII码转换成中文展示给你了。
2023-05-11 22:21:50
43
原创 Map接口computeIfAbsent()方法和computeIfPresent()方法
computeIfAbsent() 方法对 Map中指定 key 的值进行重新计算,如果不存在这个 key,或者该key对应的value为null,则把新值添加到 Map 中。computeIfPresent() 方法对 Map中指定 key 的值进行重新计算,前提是该 key 存在于 Map中。因为“abc”对应的value为null,computeIfAbsent会把新值放入。因为该key之前有key “abc”,所以不会放入新值。因为该key之前没有key “abc”,所以会放入新值。
2023-05-10 23:07:25
65
原创 Kafka实战:集群SSL加密认证和配置(最新版kafka-2.7.0)
这个命令,可随机在任一broker节点执行,只需要执行一次,执行完成后生成了两个文件cat-key、ca-cert,将这两个文件分别拷贝到所有broker节点上,后面需要用到。类似的,CA签署证书,密码保证签署的证书在计算上很难被伪造。执行命令时,输入first and last name,这里需要输入你的主机名,确保公用名(CN)与服务器的完全限定域名(FQDN)精确相匹配。每个节点执行一次后,集群中的每一台机器都有一个公私密钥对、一个标识该机器的证书,注意这里是所有的broker节点都要执行这个命令。
2023-05-09 23:23:36
87
原创 全栈开发提效神器——ApiFox(Postman + Swagger + Mock + JMeter)
下载完成后直接安装即可。如果不想安装客户端,也可以直接使用WEB版本,更加轻量级。
2023-05-08 23:23:24
82
原创 Linux安装Jenkins并构建SpringBoot工程
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。主要用于:持续、自动地构建/测试软件项目,如CruiseControl与DamageControl;监控一些定时执行的任务。特点:开源免费;跨平台,支持所有的平台;master/slave支持分布式的build;
2023-05-08 23:14:47
75
原创 系统并发量和吞吐量&高并发性能指标:QPS、TPS、RT、并发数、吞吐量
上班的时候,同事问我知道系统并发量的计算公式吗?内心一惊(并不知道)之前的公司,开发一个接口,做了功能测试,就线上了根本没有考虑那么多如果是大一点的网站,这种明显存在问题,然后优化。系统吞吐量可以理解为系统的抗压能力,系统每秒中可以承受的用户请求次数QPS一台服务器在规定时间内**所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力Tps即每秒处理事务数,包括了用户请求服务器,服务器自己的内部处理,服务器返回给用户(每秒完成了多少个这三个步骤)
2023-05-08 21:02:30
201
原创 微服务统一认证方案
OAuth(开放授权)是一个开放协议/标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。用户:我们自己第三方应用:拉勾网另外的服务提供者:QQOAuth2是OAuth协议的延续版本,但不向后兼容OAuth1即完全废止了OAuth1。
2023-05-08 20:54:33
66
原创 @Value取值为NULL怎么办,解决方案有哪些
类没有加上@Component(或者@service等)类被new新建了实例,而没有使用@Autowired。
2023-05-07 23:34:17
68
原创 Java中foreach的实现原理
指令进行反编译查看一下字节码指令,或者如果用的是Intellij idea的话,里面内置了Fernflower decompiler,直接打开.class文件会直接显示反编译后的代码(记得在查看class文件之前要先执行一下它的java文件)。foreach循环遍历对象的时候底层是使用迭代器进行迭代的,即该对象必须直接或者间接的实现了Iterable接口,一般以able结尾代表某种能力,实现了iterable代表给予了实现类迭代的能力。这里我是找到我的Test.java文件的地址,拖到桌面上然后执行。
2023-05-07 23:22:26
103
原创 在Java8的foreach()中不能使用break和continue,如果需要continue时,可以使用return
于是自己动手测试了一下,才发现在使用foreach()处理集合时不能使用break和continue这两个方法,也就是说不能按照普通的for循环遍历集合时那样根据条件来中止遍历,而如果要实现在普通for循环中的效果时,可以使用return来达到。今天在使用foreach()时发现,不能使用break和continue这两个关键字,通过查资料得知原来foreach和普通的for循环是不同的,它不是普通的遍历,要想实现continue的效果,可以直接使用return即可;
2023-05-07 23:13:40
95
原创 Java SimpleDateFormat setLenient用法
SimpleDateFormat.setLenient(true) : 默认值true,不严格解析日期,会自动计算。SimpleDateFormat.setLenient(false):严格解析日期,如果日期不合格就抛异常,不会自动计算。
2023-05-07 22:57:51
31
原创 Java8中Collectors.groupingBy的坑,分组乱序
【代码】Java8中Collectors.groupingBy的坑,分组乱序。
2023-05-07 19:31:24
43
原创 Java中的迭代器和foreach原理&foreach循环报NullPointerException空指针异常
最近写了个接口,一直报Exception in thread “main” java.lang.NullPointerException,定位到报错的语句,发现是一个foreach语句报错:于是打个断点查看,发现 userInfoBaseBOList = null,难怪一直报空指针。
2023-05-07 12:22:45
41
转载 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
sun.misc包都是sun公司的内部类,并没有在java api中公开过,不建议使用,所以使用这些方法是不安全的,将来随时可能会从中去除,所以相应的应该使用替代的对象及方法。开发过程中遇到这个问题,虽然不影响项目运行,打包发布,但还是要把警告扼杀在摇篮中。采用org.apache.commons.codec.binary.Base64替。
2023-05-07 12:07:16
56
原创 MyBatis二级缓存
1、当为select语句时:flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。useCache默认为true,表示会将本条语句的结果进行二级缓存。2、当为insert、update、delete语句时:flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。useCache属性在该情况下没有。
2023-05-07 11:59:34
39
转载 浅谈一下mybatis中@CacheNamespace和@CacheNamespaceRef的区别以及使用
这里讲一下存在的一个问题:当使用该注解的时候,你去查询的时候,使用到的查询能被缓存起来,但是,加入你这个查询SQL调用的是xml文件里面的,此时,是不会被缓存的,因为我们有时候会使用很多注解或者tk.mapper,这个时候是不会走xml,所以这个缓存我们用不上,此时存在一个解决方案,在xml文件里面也用上缓存,如下就代表开启使用缓存了,这个方式进行的话存在同上面类似的问题。2、SQL走的是注解形式:@Options(useCache=false)如果你走的是xml,你在注解上使用这个注解,将不会起效。
2023-05-07 11:45:36
18
原创 @Select的使用说明
但是这种注解的方式,对于条件较复杂的情况,不太建议这种方式,在字符串中难免会有很多错误,可读性很差。当然,上面的例子中 jdbcType 类型可以省略,只需字段的类型对齐好数据库中的字段类型即可。简便、快速去操作 sql。
2023-05-07 11:38:44
13
原创 Mysql死锁问题如何排查和解决
发生死锁了,如何排查和解决呢?本文将跟你一起探讨这个问题准备好数据环境模拟死锁案发分析死锁日志分析死锁结果在分析死锁日志前,先做一下锁介绍,哈哈~最后,遇到死锁问题,我们应该怎么分析呢?模拟死锁场景查看死锁日志找出死锁SQLSQL加锁分析,这个可以去官网看哈分析死锁日志(持有什么锁,等待什么锁)熟悉锁模式兼容矩阵,InnoDB存储引擎中锁的兼容性矩阵。
2023-05-03 21:21:43
97
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人