全部后端前端运维
最新 最热 官方 加精

青苗 | 9小时前 | 后端开发环境

IDEA关闭git提交代码时的代码检测

打开settings 找到Version Control Commit Dialog ![7be71f83d5d34217b8a3c8adb8c1298a.png](//img01.aizuda.com/v1/image/preview/1575387381253541888)

 6 |  0 |  0 后端开发环境

老马 | 10小时前 | SpringBoot

3.ShardingSphere-读写分离

目的 上节我们已在准备了主从复制的数据库,本节实现读写分离,也就是说,select语句走从库,而insert语句走主库。从而进一步提升数据库访问效率。而且主从数据库本身也是对数据安全多提供了一层保证。 这里采用的的ShardingSphere版本为4.1.1。5.x太新不太敢用。 ShardingSphere实现读写分离 1.搭建一个springboot基础项目 略 2.pom文件引入ShardingSphere依赖 xml <!- ShardingSphere-JDBC - <dependency <groupId org.apache.shardingsphere</groupId <artifactId sharding-jdbc-spring-boot-starter</artifactId <version 4.1.1</version </dependency 3.配置ShardingSphere yaml spring: shardingsphere:

 6 |  0 |  0 SpringBoot

vip | 1天前 | Java后端开发环境

Spring Boot官方推荐的Docker镜像编译方式-分层jar包

如果你很急着了解,可以直接跳到最后,看最终的Dockerfile,前面的介绍是为了大家理解原理。 1、普通Dockerfile的缺点 我们通常情况下要编译Spring Boot的Docker镜像,一般会写一个下面这样的Dockerfile FROM openjdk:17 EXPOSE 8080 ARG JAR_FILE=target/my-application.jar Maven的位置,Gradle为build/libs/my-application.jar ADD ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] 这样做很简单,运行起来也没什么问题,但是它有以下的缺点: 1. 镜像中的jar包是压缩文件,在容器环境中运行需要解压,这需要相当的开销,我们的jar通常要以解压后的形式运行更好。 2. 更新程序后编译新的镜像效率低。Docker镜像的编译时分层构建的,而上面将依赖和程序都放在一个层中。在实际应用中,修改程序编译代码的频率将大大高于依赖的变化,所以我们最好将它们分在不

 7 |  0 |  0 Java后端开发环境

老马 | 2天前 | 后端开发环境SpringBootMysql

2.ShardingSphere准备-Docker中mysql主从复制

目的 因为Sharding Sphere主要是操作分库分表操作的。所以,我们先按照实际生成环境,搭建一个mysql的主从数据库。我们来个最简单的一主一从的环境即可。 前提 已经安装了docker环境 docker中已经安装了mysql 主节点Master配置 1.为什么我们要做conf的卷宗映射 我们就拿实例名为mysql的作为主节点。来看下我们启动镜像的docker命令: shell docker run -p 3306:3306 --name mysql \ -v /root/docker_volume/mysql/conf:/etc/mysql \ -v /root/docker_volume/mysql/logs:/var/log/mysql \ -v /root/docker_volume/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7 这里/root/docker_volume/mysql/conf和容器中的/e...

 13 |  2 |  0 后端开发环境SpringBoot

青苗 | 6天前 | Postgresql

PostgreSQL 常用函数

PostgreSQL 内置函数也称为聚合函数,用于对字符串或数字数据执行处理。 下面是所有通用 HighGo DB 内置函数的列表: COUNT 函数:用于计算数据库表中的行数。 MAX 函数:用于查询某一特定列中最大值。 MIN 函数:用于查询某一特定列中最小值。 AVG 函数:用于计算某一特定列中平均值。 SUM 函数:用于计算数字列所有值的总和。 ARRAY 函数:用于输入值(包括null)添加到数组中。 Numeric 函数:完整列出一个 SQL 中所需的操作数的函数。 String 函数:完整列出一个 SQL 中所需的操作字符的函数。 ROUND 函数:四舍五入 round(v numeric, s int) 数学函数 下面是PostgreSQL中提供的数学函数列表,需要说明的是,这些函数中有许多都存在多种形式,区别只是参数类型不同。除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。 ![42942f764e9a419a91a1d54103c52982.png](//img01.aizuda.com/v1/imag

 39 |  4 |  0 Postgresql

vip | 1周前 | 前端相关后端开发环境

Caddy入门

<div class="com-markdown-collpase-main" <div <div class="rno-markdown J-articleContent rno-" <h2 id="%E5%89%8D%E8%A8%80" name="%E5%89%8D%E8%A8%80" 前言</h2 <p 日常工作中,当我们需要搭建临时文件系统或者站点的时候,我们通常会使用 <code python</code 自带的 <code http.server</code 模块或者 <code nginx</code 或者 <code node</code 来实现。但是他们都需要安装环境或者下载软件做很多的配置才可以,今天我们就来介绍一款可以不用部署环境,不用复杂配置,一个可执行文件就可以搭建生产级的 <code http</code 服务。</p <h2 id="%E5%85%B3%E4%BA%8E-caddy" name="%E5%85%B3%E4%BA%8E-caddy" 关于 caddy</h2 <p <code caddy</code 是使用 <code go<...

 23 |  0 |  0 前端相关后端开发环境

青苗 | 1周前 | Java

JMH 基准测试常用注解

JMH 是一个jar包,它和单元测试框架 JUnit 非常的像,可以通过注解进行一些基础配置。这部分配置有很多是可以通过main方法的 OptionsBuilder 进行设置的。 ![66be25a61343465fa6df8d812508c59f.png](//img01.aizuda.com/v1/image/preview/1571663398846861312) 上图是一个典型的JMH程序执行的内容。通过开启多个进程,多个线程,首先执行预热,然后执行迭代,最后汇总所有的测试数据进行分析。在执行前后,还可以根据粒度处理一些前置和后置操作。 一个简单的代码如下: java @BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Thread) @Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUn

 42 |  0 |  0 Java

青苗 | 1周前 | Java

Map转Bean反射 VS 内省 性能对比

Bean 工具类如下: java public final class BeanMapUtils { private static final Map<Class, List<Field CLASS_FIELD_MAP = new ConcurrentHashMap< (); / 获取 Class 属性 Field @param clazz {@link Class} @return / public static List<Field getFields(Class clazz) { List<Field fields = CLASS_FIELD_MAP.get(clazz); if (null fields) { fields = Arrays.stream(clazz.getDeclaredFields()).filter(t { int mod = t.getModi

 66 |  0 |  0 Java

vip | 1周前 | JavaScript

你不知道的 console.log 替代品

现在,假设您正在编写一些JS代码,但它无法正常工作。你做的第一件事是什么?你是Console.log 它!因此,我将告诉您 Console.log 的一些替代方案。 使用解构 通过使用 javascript 对象的破坏能力,您可以这样做: const { log } = console; log("hi"); log("testing"); 你可以将log函数更改为您想要的任何其他名称,如下所示: const { log: myLog } = console; myLog("hi"); myLog("testing"); console.group 曾经想对您的日志进行分组吗?这个方法很适合你! console.group("groupName"); console.log("hi"); console.log("testing"); console.groupEnd(); console.group("groupName2"); console.log("hi"); console.log("testing"); console.gr

 25 |  1 |  0 JavaScript

猎隼丶止戈 | 1周前 | Java

部分APP无法代理抓包的原因及解决方法

引言 HTTP 应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛。 其实自己也很早就发现平时使用的支付宝等 APP 使用 Fiddler 或 Charles 这类代理抓包软件默认情况下就无法抓取请求的,但使用 Wireshark 这类网卡抓包软件可以看到这些 APP 的流量,而已这些流量也表明这些 APP 使用的主要应用层协议仍然是 HTTP(https),不过我们的代理抓包工具却失效了。如今终于在实际工作中遇到了,也不得不解决了,毕竟眼前有东西挡住会让我浑身不适。 解决方案 这里省略了 原理 解析(知道你们不爱看,先跳过了)。有需要先查看下方的 原理 说明 不过既然我们已经知道了 Fiddler 和 Charles 不能抓包的具体原因,前面也提到了代理抓包的原理,那我们就总有办法解决。 前面说到了我们 APP 使用的 HTTP 客户端没有连接到代理服务器,导致我们的代理抓包软件无法正常抓包,那我们只要想办法让客户...

 48 |  0 |  0 Java

青苗 | 2周前 | Java

关于 bean to map 反射调优

bean2map 正常反射写法: java public static Map<String, Object beanToMap(Object object) { Map map = new HashMap<String, Object (); try { Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); map.put(field.getName(), field.get(object)); } } catch (Exception e) { e.printStackTrace(); } return map; } 这里性能影响最大的是 Field 的反射获取,优化改进为: java static Map<Class, List<Fie

 34 |  0 |  0 Java

猎隼丶止戈 | 2周前 | 编译打包

maven-mvnd 让打包更快

前言 众所周知, Maven 和 Gradle 几乎包含了所有Java项目的构建。而目前绝大部分的 Java 项目都是使用 Maven 的方式,Maven 对比 Gradle 的 劣势很明显 ,就是 太慢了 ! 相信作为 Java 开发者的你早已经受够了 maven 的编译缓慢,但是又由于历史包袱、使用习惯等问题暂时切换不了其他更快的构建工具。但是现在,Maven 也可以变得更快了! 这里将给你介绍一款更快的 maven —— maven-mvnd 。 介绍 maven-mvnd 是 Apache Maven 团队借鉴了 Gradle 和 Takari 后衍生出的更快的构建工具。 mvnd 内嵌了 Maven ,也正是因为这个原因我们可以无缝地将 Maven 切换为 mvnd (也不需要单独安装 Maven )。 在设计上,在 mvnd 中会生成一个或多个的守护进程来服务构建请求以此来达到并行构建的效果。另外在 VM 的选择上, mvnd 使用了 GraalVM 来代替传统的 JVM ,与之...

 52 |  0 |  0 编译打包

猎隼丶止戈 | 2周前 | Java

IntelliJ IDEA 分享

插件整理 |插件名|功能说明| | --------------------------------| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |Show Comment|在结构树显示 文档注释;在行末尾显示 文档注释;支持 "xx 类全名或简名.json" 文档注释与跳转到字段;支持 从配置文件获取外部注释用于文件夹、资源、COBOL 等<br / | |.ignore|Git 提交忽略一些文件| |Alibaba Cloud Toolkit|阿里云工具包是 Eclipse 或 IntelliJ IDEA 等 IDE 的插件。帮助开发人员更高效地开发...

 125 |  2 |  2 Java

青苗 | 2周前 | Java

Java 微基准测试框架 JMH

JMH 介绍 JMH 是一个 Java 工具,用于构建、运行和分析用 Java 和其他针对 JVM 语言编写的微基准测试。 依赖包 maven xml <dependency <groupId org.openjdk.jmh</groupId <artifactId jmh-core</artifactId <version 1.35</version </dependency <dependency <groupId org.openjdk.jmh</groupId <artifactId jmh-generator-annprocess</artifactId <version 1.35</version </dependency gradle xml implementation group: 'org.openjdk.jmh', name: 'jmh-core', version: '1.32' implementation group: 'org.openjdk.jmh',

 52 |  0 |  0 Java

青苗 | 2周前 | Java

JMH - Java 微基准测试工具(自助性能测试)@Benchmark

前言 在日常开发中,我们对一些代码的调用或者工具的使用会存在多种选择方式,在不确定他们性能的时候,我们首先想要做的就是去测量它。大多数时候,我们会简单的采用多次计数的方式来测量,来看这个方法的总耗时。 但是,如果熟悉JVM类加载机制的话,应该知道JVM默认的执行模式是JIT编译与解释混合执行。JVM通过热点代码统计分析,识别高频方法的调用、循环体、公共模块等,基于JIT动态编译技术,会将热点代码转换成机器码,直接交给CPU执行。 ![31d9ca75267348eea02432e34bd13b03.png](//img01.aizuda.com/v1/image/preview/1569682937127899136) 也就是说,JVM会不断的进行编译优化,这就使得很难确定重复多少次才能得到一个稳定的测试结果?所以,很多有经验的同学会在测试代码前写一段预热的逻辑。 JMH,全称 Java Microbenchmark Harness (微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由 OpenJDK/Oracle 官方发布的工具。何谓 Mic...

 54 |  0 |  0 Java

青苗 | 2周前 | Java

asm javassist cglib bytebuddy 动态代理比较

JDK动态代理 JDK动态代理 :运行期动态的创建代理类,只支持接口; Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。动态代理是在运行期间通过接口生成代理类的,与静态代理相比更加灵活,但是也有一定的限制,第一是代理对象必须实现一个接口,否则会报异常,因为其原理就是根据接口来生成代理对象的。第二是有性能问题,因为是通过反射来实现调用的,所以比正常的直接调用来得慢,并且通过生成类文件也会多消耗部分方法区空间,可能引起Full GC。 java public static interface Hello { void hi(String msg); } public static class HelloImpl implements Hello { @Override public void hi(String msg) { System.out.println("hello " + msg); } } / 代理类 / @Data @NoArgsConstructor @AllA

 79 |  0 |  1 Java

青苗 | 2周前 | SpringBoot

SpringBoot 单元测试组件 testcontainers

引入依赖 引入 testcontainers 依赖坐标 xml <dependency <groupId org.testcontainers</groupId <artifactId testcontainers</artifactId <version 1.17.3</version </dependency 编写测试类 单元测试 demo 类 java @RunWith(SpringRunner.class) @SpringBootTest public class DemoServiceTest { @Resource private DemoService demoService; @Test public void test() throws InterruptedException { Long id = demoService.create(...); System.out.println(id); } }

 24 |  0 |  0 SpringBoot

青苗 | 2周前 | Java

Java 类型判断

instanceof instanceof 是Java的一个运算符,用来判断一个对象是否为一个类的实例 。用法: java boolean isInstance = obj instanceof Class 其中 obj 为一个对象实例, Class 为类名或者一个接口名,当 obj 为 Class 的实例,或是其子类实例,或是其接口的实现类实例,都返回 true ,否则返回 false 。 需要注意的是 obj 必须为引用类型,不能是基本类型,下面的式子是无法编译的: java int integer = 0; // 编译时会报错 boolean isInstance = integer instanceof Number 此外编译器会检查 instanceof 表达式中的 obj 能否能转换成右边的 Class 类型,如果无法转换则会直接报错,如果不能确定类型,也会通过编译。 Class.isInstance java // Class.isInstance 等效于instanceof 操作符 boo

 65 |  1 |  0 Java

老马 | 2周前 | 后端开发环境SpringBoot

1.ShardingSphere简介

Sharding-JDBC前生今世 Sharding-JDBC早先是当当网的一个叫张亮的程序员开发的。用来解决分库分表的问题。到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 ShardingSphere,2020年正式成为 Apache 软件基会的顶级项目。 官网中文地址:https://shardingsphere.apache.org/index_zh.html 2018 年 5 月,因为增加了 Proxy 的版本和 Sharding-Sidecar(尚未发布),Sharding-JDBC 更名为 Sharding Sphere,从一个客户端的组件变成了一个套件。 sharding sphere目前已经到5.X时代了,前4代迭代的过程如下: <img src="http://img.mayuanfei.com/typora-images/image-20220909141234455.png" alt="image-20220909141234455" style="zoom:50%;" / sharding s...

 40 |  1 |  0 后端开发环境SpringBoot

阿超 | 3周前 | JavaMybatisPlus

Java类型描述符,与LambdaWrapper源码底层探究

年轻人在科学的进程中要有冲刺力,当你老了,就会越来越胆小——杨振宁 在 java 中,由于历史原因,出现在类文件结构中的二进制名称语法与我们常用的类名不同,通常使用(正斜杠) / 替换了原本的包名间隔(句号) . 例如 Thread 的类名叫 java.lang.Thread ,但是在 class 文件格式的描述符中使用的内部格式,对 Thread 类名称 utf8 的引用却是: java/lang/Thread 不信我们随便打开一个 class 文件 ![image-20220607130246228](https://waibi.oss-cn-chengdu.aliyuncs.com/picGo/image-20220607130246228.png) 可以看到类似的描述符 那如何获取类的描述符呢?它的规则又是如何呢? 首先,基本类型描述符,都是以 ASCII 字符表示,例如 L 正斜杠类名; 表示对象类型, [ 表示数组类型 我们可以在 sun.invoke.util.Wrapper 下看到对应枚举常量 ![image-2022060712494673...

 50 |  1 |  0 JavaMybatisPlus