自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (2)
  • 收藏
  • 关注

原创 graalvm+spring-cloud-gateway打造又快又小的类nginx本地网关

java本地网关

2023-01-14 22:30:29 1356 6

原创 springboot-集成flink最佳实践和打包部署

spring-boot集成flink

2022-11-27 21:01:06 5590 1

原创 project-reactor-常见问题汇总

reactor常见问题

2022-11-25 20:29:10 948 1

原创 jupyter-基于笔记本编程jupyterlab+kotlin

前言日常开发中,经常有些探索性的工作需要处理。jupyter搭建安装anaconda使用scoop来安装anaconda。

2022-07-09 23:00:00 2065

原创 mathematica-基于模式编程

前言到目前为止,我们学习的编程范例都可以归类为命令式编程,程序员的工作就是一步一步地说明如何执行问题的解决方案。基于规则的编程与此完全不同。在基于规则的范例中,程序员只需写下一组规则,指定在解决问题的过程中遇到的任何表达式应该应用什么转换。程序员不需要指定执行这些规则的顺序;底层编程系统会指出这一点。基于规则的编程是实现数学计算的一种非常自然的方式,因为符号数学本质上是将转换规则应用到表达式(例如,微分规则,积分表)。Mathematica的多用途模式匹配能力,我们才刚刚开始探索,往往使基于规则的编程成

2022-04-09 04:00:00 1046

原创 mybatis-使用拦截器实现审计功能

前言后台开发中,一般的业务表都有创建人,创建时间,修改人,修改时间等业务字段,这些业务字段的值没有特别的逻辑,只是对当时的操作人和操作时间的一个记录。如果每个表格的增删改查,都去修改的这些值的话,难免会影响主业务逻辑的阅读。那么有没有一个统计的方法,自动地去赋予这些值,而不用在业务代码上进行干预呢?JPA也提供了类似的审计功能。拦截器思路就是使用mybatis拦截器,每次和数据库通信前,在拦截器中自动赋予这些值。使用注解标记字段spring data中定义几个注解,来表明一个字段是需要审计的

2022-04-08 04:00:00 2240

原创 mathematica-模式

前言模式可以简单地理解为mathematica语言的对象。很多函数都是以模式作为入参变量的,如果不能准确地定义模式,就无法体会基于模式编程的魅力。模式对象种类模式根据所表示对象个数可以分为3种:_:单个对象序列,代表任意表达式__:一个或多个对象序列___:零个或多个对象序列有点类似于正则表达式的个数限定:?:零次或一次+:一次或多次*:零次或多次模式对象命名可以给模式对象指定名称,名称放在模式对象之前,比如a_,b__,c___,命名的目的是为了后面能够引用它。完整的形

2022-04-07 04:00:00 485

原创 spring-国际化配置i18n

前言业务发展到一定程度,会有国际化的需求。思路实现多语言的思路很简单,配置多个语言的properties文件,框架根据当前语言去对应属性文件里找到属性的值。流程创建属性文件配置属性文件的路径和名称spring默认属性名称...

2022-04-06 04:00:00 1491

原创 spring-prometheus的指标含义

前言spring-boot作为一个长时间运行的服务,需要也应该能采集到一些指标来反映系统自身的运行状态。下面就spring-boot输出的一些指标分类说明。依赖spring-boot开启指标采集需要加入prometheus依赖。指标处理nametypedatahttp_server_requests_secondssummaryhttp_server_requests_seconds_count{exception=“None”,method=“GET”,outcome=

2022-04-05 17:02:27 9364

原创 go-prometheus、grafana和alertmanager监控系统

前言micrometer依赖// https://mvnrepository.com/artifact/io.micrometer/micrometer-coreimplementation group: 'io.micrometer', name: 'micrometer-core', version: '1.8.4'// https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheusimpleme

2022-04-04 22:55:15 547

原创 java-使用jaxb处理xml文件

前言

2022-04-03 10:59:23 756

原创 java-基准测试

前言有一天在看算法,发现书上的很多时间复杂度都是通过理论分析得来的,比如,二分搜索的时间复杂度是O(logn),是因为二分数据直至元素剩余1个的次数是logn。诚然,二分搜索的时间复杂度容易分析,但是有些算法的时间复杂度却是不容易分析出来的,对于这种情况,能够直接测量时间复杂度的工具就非常重要了。jmh就是一组能够测量方法执行指标的工具,它的官网是JMH。使用在idea使用jmh做基准测试非常简单,就三步:下载插件JMH Java Microbenchmark Harness引入依赖库编写测

2022-03-14 09:06:57 2756

原创 webflux-如何使用netty处理请求

前言不知道从哪个版本起,spring推出了webflux框架,内置netty处理http请求,代替原有的tomcat内置服务器。那么webflux的基本概念和原理又是什么呢?阅读源码的一般方法准备源码从spring initializr创建样板项目,并添加如下依赖。implementation 'org.springframework.boot:spring-boot-starter-actuator'implementation 'org.springframework.cloud:spr

2022-02-08 22:12:14 2646

原创 java-进程和线程原理及应用

前言进程和线程作为操作系统的基本对象,理解它们有助于更好的编写可靠高效的代码。进程一个程序在操作系统中执行后,运行起来的单元就是进程。一个程序可以多次执行,运行出多个进程。比如google浏览器,每次执行都会打开一个进程,这个进程为用户提供浏览网页服务。线程操作系统最小的执行单元,也是操作系统任务调度的最小单元。线程的创建new,Runnable,ExecutorService线程的信息线程的信息可以通过java.lang.Thread类获取。线程的优先级线程是由操作系统调度的,而操作

2022-02-06 21:03:21 3598

原创 mysql-怎样处理未来生效或失效的数据

前言有些数据需要到未来某个时刻生效或失效,比如双十二的价格,这些数据会提前存在业务表中,之后不断用定时任务去扫描这些数据,如果存在要生效或失效的,就取出来处理。简单来说,就是定时用sql来查询这些数据。另外,也可以用redis存储这些数据,定时去redis取这些数据。sql扫描给时间字段添加索引,提高sql查询的效率。alter table XXX add index idx_time_field (time_field)如果数据量特别大的话,建议分页查询,避免一次查询把内存撑爆。select

2022-02-06 19:12:44 512

原创 flink-窗口

窗口窗口是处理无限流的核心。窗口将流分割成有限大小的“桶”,我们可以在桶上应用计算。本文档重点介绍如何在Flink中执行窗口操作,以及程序员如何从其提供的功能中获得最大的好处。一个有窗口的Flink程序的一般结构如下所示。第一个片段指的是键控流,而第二个片段指的是非键控流。可以看到,唯一的区别是keyBy(…)调用键流,而window(…)调用非键流的windowwall(…)。这也将作为页面其余部分的路标。键控窗stream .keyBy(...) &lt

2022-01-17 08:24:21 495

原创 2021-年度总结

凡事预则立不预则废万事开头难千里之行始于足下right first time(第一次就做对)行百里者半九十骐骥一跃不能十步驽马十驾功在不舍善始者众善终者寡不忘初心方得始终

2022-01-01 11:31:32 323

原创 java-限流算法

前言由于服务器资源的有限性,需要对请求的速度以及数量做限制,防止过多的请求导致服务器崩溃。一旦服务器接收请求的数量超过给定最大值或请求的速度大于服务器处理的速度,应当主动拒绝掉这些请求,来保证服务器自身的健康和稳定。单机版限流单机版限流就是对单个服务做限流。目前用得比较多的就是guava的RateLimiter限流算法了,一起看看吧。guava继承关系图guava的关系比较简单限流器可睡眠的计时器普通计时器滴答器用于获取当前时间组合关系图一把锁和一个睡眠计时器。流程图

2021-11-28 19:46:13 870

原创 java-阅读源码的一般方法

前言java的生态是非常庞大的,经过20多年的发展,已经积累了大量的轮子。可以说,日常的绝大部分需求都可以通过找个轮子解决,如果不行,就再找一个。虽然说用轮子非常的方便快捷,但是却回避了轮子解决的问题本身,而分析轮子如何解决问题,可以提高发现问题和解决问题的能力。谁都不是天生的coder,还是需要从轮子中吸取养分。阅读调试源码的过程是一个理论联系实践,实事求是的过程。通过阅读源码,可以学习到技术的内涵和外延,以及技术的使用技巧;通过在阅读过程中,不断调试代码,分析问题,总结规律,进一步理解技术的含义。准

2021-11-16 22:40:05 1775

原创 spring-security的基本概念和原理

前言Servlet安全性:宏观视图本节讨论基于Servlet的应用程序中的Spring Security高层架构。我们在引用的“身份验证、授权、防止攻击保护”部分中构建这种高层次的理解。Filters的回顾Spring Security的Servlet支持基于Servlet Filter,因此首先了解Filter的作用是有帮助的。下图显示了单个HTTP请求的处理程序的典型分层。客户端向应用程序发送请求,容器创建一个FilterChain,其中包含Filter和Servlet,该Servlet应该

2021-06-14 21:35:04 603

原创 spring-验证、数据绑定和类型转换

前言数据填充将验证视为业务逻辑有利有弊,Spring为验证(和数据绑定)提供了一种不排除其中任何一种的设计。具体来说,验证不应该绑定到web层,而且应该易于本地化,而且应该可以插入任何可用的验证器。考虑到这些问题,Spring提供了一个Validator契约,它既基本又在应用程序的每一层都非常有用。数据绑定对于将用户输入动态绑定到应用程序的域模型(或用于处理用户输入的任何对象)非常有用。Spring提供了恰当命名的DataBinder来完成这一任务。Validator和DataBinder组成了val

2021-03-13 13:13:43 343 1

原创 spring-aop切面

前言切面(Aspect)是类(Class)的一个补充,两者正交互补,让spring的Ioc容器功能得到大大的增强。使用Spring进行面向方面的编程面向方面编程(AOP)是对面向对象编程(OOP)的补充,它提供了考虑程序结构的另一种方式。在OOP中模块化的关键单元是类,而在AOP中模块化的单元是方面。方面支持对跨多种类型和对象的关注点(如事务管理)进行模块化。(在AOP文献中,这种关注通常被称为“横切”关注。)Spring的一个关键组件是AOP框架。虽然Spring IoC容器不依赖于AOP(这意味

2021-02-17 22:02:41 1549

原创 visuAlgo-排序算法

前言

2020-12-06 23:36:55 672

原创 powershell-发布模块到gallery

前言

2020-11-21 20:40:57 390

原创 redis-各种数据类型和类比

前言redis提供丰富的数据接口,那么这些数据结构可以类比jdk中的哪些数据结构呢?

2020-11-21 20:26:49 141

原创 mysql-一些常识

前言对软件系统的理解和认知,决定了开发者使用它们的高度,下面来简单聊聊关于mysql的一些常识。编码utf8mb4(most bytes 4)才是真正的utf8。时间戳修改字段为当前时间戳,需要用alter table change column语法。ALTER TABLE `table` CHANGE COLUMN `column` `column` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'comment';ALTER TABLE `

2020-11-08 12:04:55 168

原创 java-jdk中的工具使用介绍

前言

2020-11-08 12:01:11 652

原创 速度-常见的优化思路

前言空间换空间缓存https://www.jianshu.com/p/bbf684456eeb

2020-11-07 18:59:27 442

翻译 git-变基(rebase)的原理和最佳实践

前言在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。其中merge是一个三方(分支master最新快照,分支dev最新快照,分支master和dev的共同祖先快照)合并的方式来整合修改,并且整合之后会生成新的提交快照。merge之前的三方(c4,c5及共同祖先c2):merge之后产生新的提交快照(c6)merge之后,iss53分支的c3和c5提交快照消失了。为了避免提交快照因为合并而移除的问题,发明了rebase方法来整合不同分支的修改。更多mer

2020-11-01 12:37:43 2342 3

原创 maven-生命周期

构建生命周期由阶段组成每个构建生命周期都是由不同的构建阶段列表定义的,其中一个构建阶段表示生命周期中的一个阶段。例如,默认的生命周期包括以下几个阶段(完整的生命周期阶段列表,请参考生命周期参考):validate:确认项目是正确的,所有必要的信息都是可用的compile:编译项目的源代码test:使用适当的单元测试框架测试已编译的源代码。这些测试不应该要求打包或部署代码package:将编译后的代码打包成可分发的格式,比如JARverify:对集成测试的结果进行任何检查,以确保满足质量标准

2020-10-31 21:21:02 189

原创 mathematica-J/Link用户指南

J/Link简介欢迎访问J/Link,这是一个集成了Wolfram语言和Java的产品。J/Link允许您以一种完全透明的方式从Wolfram语言调用Java,它还允许您从Java程序使用和控制Wolfram语言内核。对于Wolfram语言用户来说,J/Link使整个现有和未来的Java类成为对Wolfram语言环境的自动扩展。对于Java程序员来说,J/Link将Wolfram语言转换为脚本shell,允许您一次一行一行地试验、构建和测试Java类。它还使Java成为编写使用Wolfram语言的计算服务

2020-10-25 21:01:51 832

原创 spring cloud-基本架构

前言spring cloud是把大的服务分解为小的服务,形成一个分布式的集群,各个服务之间相互依赖,由注册中心统一管理,网关统一发布,配置中心统一配置。总体形成以下的架构图:

2020-10-17 19:53:45 154

原创 redis-分布式锁的使用方法

前言但单机环境,锁的实现基本上是java的JUC框架和synchronized volatile等关键字。整个JUC框架包含了基本的抽象类(AQS)和锁的实现类(ReentrantLock)以及并发工具类(CountDownLatch、CyclicBarrier和Semaphore等),这些都为日常开发中对于过程同步问题提供了不少的便利。在分布式系统中,有些过程也需要同步,然后串行执行。那么有没有好用的框架可以提供这种便利性呢?答案是有的,那就是spring-integration的spring-inte

2020-10-17 19:51:31 302 2

原创 JPA-常见的优化点

前言JPA作为主流的持久层框架,被广大程序员所使用,基本的使用方法请参考JPA的常见用法。虽然JPA在编码上提供了很多的便利,但是其接口提供的插入数据的方法效率非常低,下面就简单介绍下效率低的原因和解决办法。save和saveAll方法单从方法签名来看,save方法用来插入单个数据,而saveAll方法插入多个数据。但是仔细看saveAll的方法实现,会发现saveAll里面是循环调用save方法来插入数据,所以很自然地以为saveAll和save方法插入数据的时间差不多。但是实际测试的结果却表明两者

2020-10-17 18:59:26 2928 1

原创 docker-部署logstach

前言logstach是一个采集日志的框架,本文介绍如何在docker上部署logstash系统。更多信息请参考官方文档。管道配置必须将管道配置放在Logstash可以找到的位置。默认情况下,容器将在/usr/share/logstash/pipeline/中查找管道配置文件。在本例中,我们使用绑定装载的卷通过docker run命令提供配置:docker run --rm -it -v ~/pipeline/:/usr/share/logstash/pipeline/ docker.elastic

2020-10-04 20:16:23 739

原创 docker-部署kibana

前言kibana是elasticsearch可视化工具,能够方便地使用elasticsearch的搜索数据,下面详细介绍如何使用docker安装kibana。更多信息请参考官方教程。拉取镜像docker pull docker.elastic.co/kibana/kibana:7.9.2在Docker上运行Kibana进行开发Kibana可以快速启动并连接到本地Elasticsearch容器用于开发或测试使用以下命令:docker run --link YOUR_ELASTICSEARCH_C

2020-10-04 20:15:46 1369

原创 docker-部署Elasticsearch

前言Elasticsearch是一款开源的搜索引擎框架,提供强大的搜索功能。下面简单介绍如何使用docker来部署Elasticsearch。更多信息请参考官方文档。

2020-10-04 20:15:21 805 1

原创 docker-部署filebeat

前言filebeat是一个轻量级的日志收集工具,相比logstash,功能更加单一,但是占用的资源较小,下面介绍如何使用docker来部署filebeat。更多信息请参考官方文档。拉取镜像docker pull docker.elastic.co/beats/filebeat:7.9.2运行Filebeat设置运行Filebeat设置命令将创建索引模式和负载可视化,指示板和机器学习工作。运行这个命令:docker run \docker.elastic.co/beats/filebeat:7

2020-10-04 17:40:02 4636

原创 wsl-常见问题

基于wsl2的docker如何迁移镜像文件默认基于wsl2的docker desktop的镜像是有wsl2管理的,而wsl2一般在c盘。当下载的镜像多了之后,就会把C盘爆满。具体解决方法参考:github解决方法。

2020-10-04 11:56:31 3236 1

原创 jcs-基本概念和使用

前言如果一个计算非常耗时,每次获取都重新计算,会消耗很多额外的计算资源。对于这些耗时的计算结果,可以存储在缓存中,下次需要的时候,直接访问缓存中的内容,而不是再重新计算一遍。对于易变性还比较高的数据,可以设置数据有效期,一旦超过有效期,缓存数据被移除,触发重新计算。下面来看看apache的缓存实现:java cache system。基本概念元素(elements)元素是放入缓存中的对象,可以通过键来访问。区域(regions)缓存是多个字典的集合,每个字典被称为region,每个region

2020-09-12 23:15:43 1883

spring-cloud-gateway使用graalvm编译的本地网关exe,类似nginx

配置了一个路由,如/api/v1/service-name/echo?p=www会转发到目标服务的/echo?p=www routes: - id: path_route uri: http://127.0.0.1:8080 predicates: - Path=/api/v1/** filters: - StripPrefix=3

2023-01-14

spring-boot使用graalvm编译的本地exe

双击运行,提供一个接口GET http://localhost:8080/echo?p=hello,参数p传什么返回什么

2023-01-14

powershell_7.0.3-1.ubuntu.16.04_amd64.deb

ubuntu.16.04 powershell安装包,从gitlab下载太慢了,传一份到这里节省时间成本,不谢啊

2020-07-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除