JDK17的新特性写法
JDK17的新特性写法
一、介绍
JDK 17 是 Java Development Kit(Java 开发工具包)的一个版本,是 Oracle 公司提供的 Java SE(Java 平台,标准版)的一部分。以下是 JDK 17 的一些基本信息:
版本号:JDK 17 的完整版本号是 17,它是 Java SE 17 的版本。
发布日期:JDK 17 v17.0.0 在 2021 年 9 月 14 日正式发布。
LTS 版本:JDK 17 被标记为 “LTS”(长期支持)版本。LTS 版本提供长期支持和维护,适合用于生产环境。
特性更新:JDK 17 引入了一些新的特性、改进和增强,包括但不限于密封类、基础类型的模式匹配、日期时间API的升级等。
垃圾回收器:JDK 17 包含了多种垃圾回收器,包括 ZGC、G1GC、ParallelGC 等,以满足不同场景下的需求。
二、新特性
1)switch
可以不用再写break了,可以进行简化
1234567891011121314151617181920212223242526272829303132package ...
MySQL插入重复后进行覆盖更新
MySQL插入重复后进行覆盖更新
一、介绍
在MySQL中,常常会有唯一键的约束,当使用Java插入重复的值后,会报异常我们需要进行捕获处理。
上面的解决思路,确实是一种办法,但我将介绍一下MySQL的一种插入写法,可以解决这种插入重复数据的问题。
二、使用
首先,我们先建立一张有唯一键的表,并初始化插入一条数据
1234567891011121314CREATE TABLE `tb_user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(20) NOT NULL COMMENT '姓名', `old_name` varchar(20) DEFAULT NULL COMMENT '曾用名', `id_card` varchar(20) NOT NULL COMMENT '身份证号码', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT ...
如何在html中使用Vue3
如何在html中使用Vue3
一、介绍
作为一名后端人员,有时候会写一点前端代码配合使用。
但比较轻量,没有必要使用脚手架创建工程,故此我在html中使用就好了。
正如那句话,适合自己的才是最好的。
二、代码
1)引入Vue,并创建Vue实例
在官网上,已经讲得很清楚了,我们可以这样使用
1234567891011121314151617181920212223242526272829<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>html使用vue</title></head><body> <div id="app" v-c ...
SpringBootAdmin监控程序
SpringBootAdmin监控程序
一、介绍
Spring Boot Admin 是一个用于监控和管理 SpringBoot 应用程序的开源项目。它提供了一个可视化的用户界面,通过该界面可以实时监控应用程序的运行状态、性能指标等信息。
Spring Boot Admin可以监控多个 SpringBoot 应用程序,它提供了以下功能:
简单的集成:Spring Boot Admin提供了一个易于集成的客户端库,可以方便地将应用程序连接到监控服务器。
实时监控:可以查看应用程序的运行状态、线程池、内存使用情况、请求指标等实时信息,帮助开发人员及时发现和解决问题。
健康检查:Spring Boot Admin可以监测应用程序的健康状态,包括数据库连接、缓存服务、消息队列等组件的可用性。
日志管理:可以查看和管理应用程序的日志,包括实时查看日志、搜索和过滤日志等功能。
通知与告警:Spring Boot Admin支持通过邮件、Slack 等方式发送通知和告警,例如当应用程序发生异常或出现性能问题时。
总之,Spring Boot Admin提供了一个便捷的监控和管 ...
junit4整合PowerMockito进行单元测试
junit4整合PowerMockito进行单元测试
一、介绍
在单元测试中,代码里面往往有一些需要连接数据库、调用第三方远程的代码。
由于没有环境,这些代码的存在,会给单元测试造成影响。
所以我们在单测中,往往会使用mock的方式对这些代码做一个数据的模拟,从而达到对代码进行测试的一个目的。
所以单测需要满足以下几点
可复用:单测代码可以重复执行
无环境:不要依赖数据库,第三方接口等外部的环境依赖
方法级细粒度:单测代码应该针对具体一个方法的测试,
高覆盖率:如果代码中复杂度过高,单测要覆盖到方法中的每一行代码
自动断言:每一段单测代码都应该有自己的断言方法,而不是通过打印再人工查看正确性
所以我们就有了Mockito,它可以模拟对象,模拟对象方法的返回值,来完成mock。
本文使用的是PowerMockito,它是由Mockito的基础上开发而来,语法规则基本一致,同时也有一些自己的增强,可以对静态方法,局部变量进行mock。
二、初步入门
假设我们有下面这两段代码PowerMockitoServiceImpl.java和PowerMockitoMapper ...
MySQL的MVCC是什么,有什么用?
MySQL的MVCC是什么,有什么用?
一、介绍
面试被问到了MVCC,我不知道啊,一脸懵逼!
于是回家查询了资料,记录一下
实际上,MVCC的全称是Multi Version ConCurrency Control,翻译过来就是多版本并发控制。
二、概念
1)隔离级别
指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行。在MySQL中,这样大幅度提高了InnoDB的并发度。在内部实现中,InnoDB通过undo log保存每条数据的多个版本,并且能够找回数据历史版本提供给用户读,每个事务读到的数据版本可能是不一样的。在同一个事务中,用户只能看到该事务创建快照之前已经提交的修改和该事务本身做的修改。
首先我们先了解一下数据库事务的隔离级别
未提交读(READ UNCOMMITED):也就是脏读,当一个事务读取到另外一个事务修改但未提交的数据时
已提交读 (READ COMMITED):简称RC
可重复读(REPEATABLE READ):简称RR
可串行化(SERIAL ...
Redis相关底层面试题
Redis相关底层面试题
一、介绍
Redis是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。Redis支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets)等。
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。同时,Redis还支持数据的备份,即master-slave模式的数据备份。
Redis的应用场景非常广泛。虽然Redis是一个key-value的内存数据库,但在实际场景中,Redis经常被作为缓存来使用,如面对数据高并发的读写、海量数据的读写等。具体而言,分布式缓存Redis可用于以下场景:
页面缓存:Redis可将Web页面的内容片段,包括HTML,CSS和图片等静态数据,缓存到Redis实例,提高网站的访问性能。比如在电商类应用中,热销商品展示、秒杀推荐等数据面临高并发读的压力,分布式缓存Redis的高并发及灵活扩展,可轻松支持此类应用 。
消息队列:Redis可以作为消息代理, ...
关于JVM中的几大面试题
关于JVM中的几大面试题
一、介绍
本文介绍JVM中的几个面试题,十分有用
主要有几题
Java类的加载过程
双亲委派机制是什么
jvm内存模型
二、答疑
1)Java类的加载过程
简单来说,可以这样理解分类
类的加载
获取二进制文件,将.class文件加载至JVM中
类的连接,验证,准备,解析合称连接
分配空间
静态属性赋值(赋初始值,而不是我们给予的值,如int是0,包装类为null)
类的初始化,(是初始化,不是实例化)
静态属性赋值,这时候就是赋我们给予的值了
什么是符号引用,什么又是直接引用
可以这样进行理解,我们有一个A类和B类,A类中使用到了B类
在字节码中,会用一个符号代表这是B类,这就是符号引用
而在B类进行类加载后,JVM成功的加载了这个B类,使得堆内存中有对应的B.class的对象,同时方法区中有静态方法与属性。
这个时候,A类就会将之前的符号引用,改为直接引用,设置为上面堆内存的B.class对象,或者方法区中的静态方法与属性
类加载的时机
实例化类对象
调 ...
自定义枚举Validated校验注解
自定义枚举Validated校验注解
一、介绍
在以前的文章中,有解释使用过@Valid注解的使用
Valid注解使用及扩展 | 半月无霜 (banmoon.top)
Validated分组校验及扩展 | 半月无霜 (banmoon.top)
本篇分享一个自定义校验注解,可以配合枚举使用,对入参的有效值进行校验。
比如说一些状态值,入参必须要符合定义的状态值
二、代码
注解
123456789101112131415161718192021222324252627282930package com.banmoon.validator;import com.banmoon.business.enums.MyEnum;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy; ...
kafka的架构及常见面试题
kafka的架构及常见面试题
一、介绍
Kafka是一种高吞吐量、持久性、分布式的发布订阅的消息队列系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年12月份开源,成为Apache的顶级子项目 。
Kafka是一个多分区、多副本且基于zookeeper协调的分布式消息系统。也是一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用 。
二、架构
1)生产、消费
首先得了解这个,比较简单的一个集群图
生产者(Producer):生产消息,发送消息的服务
消费者(Comsumer):消费消息,处理消息的服务
2)每一个kafka实例中有什么
如上图,只画了其中一个,具体看看里面是什么
broker:一个kafka进程就是一个broker,也就可以这样理解,集群中每一台kafka服务就是broker
主题(topic):在发布订阅的模式下,我们需要对消息进行一个区分,同一个功能的消息,我们发往同一个主题下
分区(Partition):可以看到每一个主题topic下,有多个分区。消息会推送到这 ...