自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 SpringBoot实现Mysql百万级数据量导出并避免OOM的解决方案

动态数据导出是一般项目都会涉及到的功能。它的基本实现逻辑就是从mysql查询数据,加载到内存,然后从内存创建excel或者csv,以流的形式响应给前端。动态导出虽然简单,然而一旦mysql数据量太大,达到十万级,百万级,千万级,大规模数据加载到内存必然会引起OutofMemoryError,为了解决百万级数据量导出可能造成的内存溢出问题,本文将针对常用的数据持久层框架JPA和MyBatis给出Stream流式查询导出的具体实现方案,并探讨其有效性。

2019-11-14 13:11:48 20045 21

原创 SadTalker项目上手教程

最近发现一个很有趣的GitHub项目,它能够将一张图片跟一段音频合成一段视频,看起来毫无违和感,如果不仔细看,甚至很难辨别真假,预计未来某一天,一大波网红即将失业。虽然这个项目目前的主要研究方向还是基于cuda的脸部训练,生成动态的视频,但如果能够接入语音服务,利用ChatGPT实时生成对话prompt,配合这个项目实时渲染动态视频,那么一个灵动的对话机器人就产生了。想想这两个月ai正在以可怕的速度进化,未来生命以数字形式留存,机械飞升不再是科幻小说才有的场景。

2023-04-10 00:40:15 8679 25

原创 Spring Boot使用GraphQL开发Web API

传统的Restful API 存在诸多的问题,首先它无法控制返回的字段,前端也无法预判后端的返回结果,另外不同的返回结果对应不同的请求地址,这就导致了多次请求的问题。而GraphQL正是基于这样的背景而构建出来的API查询语言。

2023-04-02 17:53:23 970 3

原创 Semaphore vs Mutex

Semaphore 信号灯,用来控制同时并发的线程数量Mutex 互斥锁,控制同一时刻只能有一个线程执行二者最重要的区别在于所有权这个概念,Mutex 具有所有权,它本身是一个互斥锁,在一个时刻只能被一个线程持有,但是Semaphore没有所有权,任何线程都可以调用此对象的方法。......

2022-07-01 13:58:35 375

原创 CountDownLatch vs CyclicBarrier

CountDownLatch:计数器,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成,CountDownLatch是减计数,计数减到0后不能重置。CyclicBarrier:循环屏障,它允许一组线程相互等待以达到一个共同的屏障点。CyclicBarrier是加计数,计数加到目标值后可以重置。......

2022-07-01 11:00:31 343

原创 Jenkins流水线脚本引用密钥的方式

使用Jenkins搭建自定义的流水线任务,通常是编写groovy脚本来实现,可以在脚本中调用现有的job,也可以直接在脚本中写shell命令,发送http请求或者执行某个应用程序的操作。但是部分场景需要用到一些密钥信息来访问应用程序,否在无法被授权。此时在groove脚本中如何引用Jenkins配置的密钥显得尤为重要。假设Jenkins已经配置好了全局密钥,密钥id为sonar-token,这里提供两种引用Jenkins密钥的方式:pipeline { agent any stages {

2021-12-08 23:16:37 1342

原创 Jenkins集成SonarQube环境搭建教程

Jenkins是业界知名的持续集成工具,使用Jenkins可以帮助我们实现自动打包,持续集成。本文的主题是假设你已经搭建好了Jenkins,并且服务器是linux,现需要集成 SonarQube该怎么做。

2021-12-08 22:39:31 2189

原创 Win10 ipv4无网络访问权限的解决办法

背景目前使用的是台式机,千兆宽带,为了测试一款游戏在局域网的连通性,使用了无线网卡,插入无线网卡后,看起来没有问题,但是重启电脑后,发现可以正常上网,但是腾讯系应用包括QQ,WeGame,DNF 均无法登录。查看网络属性,发现显示 ipv4 无网络访问权限,但是 ipv6 有权限。百度尝试了很多方案,无果!结果自己摸索出来了另一种解决方案。分享出来。解决方案将 VMware Virtual Ethernet Adapter for VMnet8 #2 这个虚拟网卡对应的网络适配器进行重启。虽然

2021-10-07 11:34:23 24319 2

原创 Visual Studio为C#控制台应用添加外部引用

错误 CS1069 未能在命名空间“System.Data.OleDb”中找到类型名“OleDbConnection”。此类型已转发到程序集“System.Data.OleDb, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。请考虑添加对该程序集的引用。

2021-05-20 15:16:30 2478 2

原创 Java判断字符串是否为IPV4,IPV6地址的多种方式

判断字符串是否为IP地址通常都是基于正则表达式实现的,无论是引入外部的依赖包亦或是自己写正则实现,基本都是基于正则表达式实现的判断。然而比较例外的是,jdk自身提供了`Inet4Address.getByName`方法也可以帮助我们实现ip地址的判断。本文将详细列举常见的判断字符串是否为IPV4,IPV6地址的方式,并分析其存在的局限性。

2021-03-17 23:11:02 8095 1

原创 Golang-写文件

和读取文件类似,Go通过os或者ioutil包可以实现写文件操作。采用os写文件一般是通过Open或者Create函数返回结构体File,再通过File自带的函数进行写入操作。而采用ioutil本质也是利用os写文件,只不过做了一层封装。通过os.Open函数打开文件,如果文件不存在则返回错误。通过os.Create函数创建文件,如果文件已经存在则清空文件内容。写文件都是基于[]byte进行的操作,如果你需要提前了解string和[]byte相互转换的操作。b := []byte("ABC€")f

2021-03-14 21:06:10 905 7

原创 Golang-读取文件

Go读取文件一般有两种方式,一种方式是采用os包下的os.open函数进行流式读取,另一种方式是采用ioutil包的ioutil.ReadFile函数进行读取,二者的区别在于后者会一次性将文件内容加载到内存中。本文通过具体的实例来演示具体读取文件的方式。

2021-03-14 19:14:02 1149 1

原创 Golang-Bcrypt加密

从安全上讲,用户密码一般都是要经过加密(而且不能被解密)后才存储于数据库中,相信现在已经没有什么公司蠢到直接以明文存储密码了吧。通常有很多方式可以实现密码加密,譬如MD5签名,虽然MD5算法不可逆,然而每次使用MD5生成的字符串都是固定的,这就给暴力破解留下了余地。如果使用Bcrypt算法加密,那么每次生成的字符串都是不同的,这样产生的密文基本无法破解。Java语言的spring-security 框架内置了BCryptPasswordEncoder来实现Bcrypt加密。当然Go也提供了类似的包实现加密

2021-03-10 23:59:26 1603

原创 Golang-websocket编程

Go实现websocket编程,需要引入外部包gorilla/websocket。我们启动一个http服务器,指定根路径路由到一个html页面,该页面用来模拟websocket通信的客户端,页面会提供一个按钮触发一段执行websocket通信的js。服务端接收到websocket请求,然后将请求的内容完整地响应给浏览器。

2021-03-10 23:21:46 408

原创 Golang-json解析

Go内置了 encoding/json 包可以很方便的将json字符串解析成结构体,或者将结构体解析成json字符串使用json.NewDecoder(r.Body).Decode(&user)结构体转json字符串使用json.NewEncoder(w).Encode(peter)通过在结构体字段后面添加`json:“xxx” `以实现将该字段转换为特定的json字段,否则按原始字段输出。

2021-03-10 22:46:40 621

原创 Golang-session管理

本文将演示如何通过包 gorilla/sessions 做session管理,session是服务端存储用户数据的形式,浏览器的每次请求,都会将存储用户信息的cookie发送给服务端。由于http协议是无状态的,所以通过cookie session 记录用户的登录状态是一种再常见不过的方式。本文将通过一个实例演示三个页面来模拟 登录认证,授权访问,注销登录的三个过程。用户首先会访问/login,服务端通过session记录用户登录状态,并将cookie信息返回给用户

2021-03-10 22:02:22 1083 1

原创 Golang-日志中间件

restful服务中,通常需要将请求信息记录到日志中。以下例子中展示了go如何实现一个简单的日志中间件。它的基本原理是将业务函数(本例 foo/bar)作为参数传递个日志函数(本例 logging)中,然后将日志函数作为参数交给http.HandleFunc即可。package mainimport ( "fmt" "log" "net/http")func logging(f http.HandlerFunc) http.HandlerFunc { retur

2021-02-28 23:58:03 816

原创 Golang-Form表单提交

go提供html/template用于解析html模板文件,将模板文件提交的输入转换成结构体并用于渲染。package mainimport ( "html/template" "net/http")type ContactDetails struct { Email string Subject string Message string}func main() { tmpl := template.Must(template.ParseFiles("H:\\go\\ma

2021-02-28 23:16:16 2109

原创 Golang-访问MySQL数据库

go自身提供了database/sql这个包来做数据库访问层的抽象,相当于接口层。但是要访问具体的数据库,需要安装该数据库对应的驱动,对于MySQL来说,执行以下命令安装驱动:go get -u github.com/go-sql-driver/mysql有了驱动,后面访问数据库就很简单了。连接MySQL通过sql.open设置连接参数。db, err := sql.Open("mysql", "username:password@(127.0.0.1:3306)/dbname?parseTim

2021-02-25 00:00:13 397

原创 Golang-HTTP动态路由

在Restful服务中,我们可能期望实现这样的需求。接口路径相同,但是根据不同的请求方式,进行不同的处理请求将某个路径的请求转发到另一条主机将 https 和 http 请求交给不同的handler处理根据路径前缀匹配不同的子路由,转发给不同handler处理强大的gorilla/mux即可实现这些需求

2021-02-24 22:34:51 2275

原创 Golang-HTTP参数路由

动态路由,即请求路径并不是固定的,请求路径中的部分参数是请求参数,这在restful服务中非常常见,例如Java从Spring 3.0开始就提供了`@PathVariable`这个注解实现这样一个动态路由的效果。在Go中如果要实现这样的动态路由,需要安装外部包[gorilla/mux]('https://github.com/gorilla/mux')

2021-02-23 22:36:45 1509

原创 Golang-搭建一个简单的HTTP服务器

在本例中,我们将通过Go语言创建一个基本的HTTP服务器。首先,试想一个基本的HTTP服务器应该具备基本功能大概有哪些。处理动态请求:处理来自浏览网站、登录帐户或发布图像的用户的传入请求。静态资源服务:为浏览器提供JavaScript、CSS和图像等静态资源服务。接受连接:HTTP服务器必须监听特定端口以接受来自internet的连接。

2021-02-23 00:34:30 3016 1

原创 Spring Data JPA 实现动态分页导航栏

实现一个类似百度搜索的动态分页导航栏,每次查询,接口返回的分页信息都是动态变化的。

2021-02-09 20:36:09 3855 4

原创 Spring Data JPA 百万级数据量动态分页查询的优化

分页查询是业务中再常见不过的操作了,在数据量比较小,索引使用得当的情况下,一般的动态查询都没啥性能问题。然而当数据量比较达到百万,千万级,常规的分页查询一般都会出现性能问题。本文不会介绍什么分库分表,缓存之类的优化方案,这些东西在网上千篇一律,不值得在此处拿来讨论。本文将通过具体的案例来讲讲当数据量到达百万量级后,分页到底该怎么做,代码该怎么写。

2021-02-08 20:47:04 10371 8

原创 MySQL如何生成大批量测试数据

不管是为了做生产数据脱敏,还是为了验证某个技术是否符合期望,亦或是做简单的集成测试,短时间内生成大批量测试数据是很有必要的,但就算是测试数据也要假的像样点嘛,数据不够假,你放到演示环境,怎么给客户吹牛逼,怎么招标呢?本文将介绍几个生成MySQL假数据的方案,看完你肯定会有收获的。

2021-01-31 13:19:30 11822 2

原创 Java判断字符串是否为数字的多种方式,你用对了吗

判断一个字符串是否为数字是Java开发中很常见的业务需求,实现这个判断有很多种方式,大体上分为异常处理,正则表达式,数字字符,NumberFormat工具类,外部工具类这四大类,不同类型下的实现方式其实略有不同,那么究竟选择哪种方式才是最好的呢?本文将一一列举出9中具体的方案,并通过丰富的测试用例来并对比这些方案的差异,相信看完本文,你将会有自己的思考。

2021-01-28 23:24:31 71080 5

原创 minikube踩坑记

minikube踩坑指南,如何让minikube使用本地镜像,为什么minikube拉取镜像这么缓慢,如果我要修改minikube的内存参数该怎么做

2021-01-17 11:07:26 12608

原创 简单的动态规划

认识动态规划以下是一段描述斐波那契数列的简单代码。本质是一个递归的方案,它的计算过程是不断的将大计算拆分成小计算,最后再对小计算的结果进行合并。然而递归方案的时间复杂度非常高,为O(2^n)。当n非常大的时候会产生高昂的时间成本。 /** * 经典的fabonacci问题,1 1 2 3 5 8 13 21... * 使用递归算法实现,本质是一种分治策略,自顶向下。 * 不断的将大计算拆分成小计算,最后再对小计算的结果进行合并。 * 递归的缺点是不能复用小计算的结果,导致时间复

2021-01-17 00:49:36 10806

原创 Java的移位运算

前言计算机支持两种移位运算,分别是向左移位 x << k 和向右移位x >> k,左移位会对输入的操作数舍弃最高的k位,并在右端补k个0。而右移位运算却分为两种情况,分别是逻辑右移和算术右移(也叫无符号右移和符号右移),在逻辑右移中,会对操作数舍弃最低的k位,并在左端补k个0,在算术运算中,则对操作数舍弃最低的k位,并在左端补k个最高有效位的值。对于有符号数来说,最高位有效值是不同的,所以逻辑右移和算术右移将产生不同的效果,而C语言并没有明确定义有符号数该使用哪种类型的右移.

2020-11-01 01:14:28 18086 8

原创 在kubernetes集群中部署SpringBoot应用和MySQL

环境准备:需要k8s集群和本地仓库,如果你还没有搭建,建议参考我上面两篇文章 Kubernetes集群搭建详细指南、 为kubernetes创建本地镜像仓库

2020-09-07 22:09:00 12842 7

原创 为kubernetes创建本地镜像仓库

通过k8s部署应用,需要从远程镜像仓库拉取镜像,默认的远程镜像为dock hub,访问这个仓库难免出现各种超时和龟速问题。那么有什么解决方案吗?k8s直接运行本地镜像我们可以将直接用k8s运行本地镜像将容器跑起来。但是前置条件得保证所有的node节点都有这个镜像,然后指定镜像拉取策略为imagePullPolicy: Never 即可。1)将镜像同步到所有node节点:假设当前镜像为spring-app:20200906-130657,将镜像tar包,然后scp到各个node节点:docker s

2020-09-07 21:05:14 18527 3

原创 Kubernetes集群搭建详细指南

学习K8S已成为一个趋势,俗话说得好,纸上得来终觉浅,绝知此事要躬行。学习K8S只看理论,不动手实操那肯定是不行的,所以搭建一个K8S集群是第一件事。但这也是一件非常痛苦的事情,且不说各种冗长的linux命令,很多初学者光是看到一大堆抽象的概念就望而却步了,更别谈后面的学习。本文参考了其它博客,总结了K8S集群搭建的完整过程,梳理了K8S集群搭建中可能踩到的坑,希望能够一步步带你实现整个集群的搭建。

2020-09-06 16:11:03 15001

原创 HashMap夺命连环问,你扛得住吗

HashMap是面试中最常被问到的问题,被问到的概率基本是99%,关于HashMap的知识点很多,这里做个总结,如果没有提及版本,默认为jdk1.8.HashMap的数据结构?底层是数组+单链表实现。数组的每个元素是个单链表,在jdk1.8中,当数组长度大于等于64且链表长度超过 8 时,链表转换为红黑树。为什么采用这种结构来存储元素呢?数组的特点:查询效率高,插入,删除效率低。链表的特点:查询效率低,插入删除效率高。在HashMap底层使用数组加(链表或红黑树)的结构完美的解决了数

2020-09-04 20:14:52 11294 1

原创 docker容器安装elasticsearch plugin

docker容器在线安装plugin进入容器,然后安装。docker exec -it 018a1586b7ef /bin/bashelasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip可能会失败,然后白白浪费半天时间下载,还前功尽弃。doc..

2020-09-04 11:04:10 11588

原创 Neo4j与Cypher

一、Neo4j简介Neo4j是当前最流行的图数据库,你可能了解过elasticsearch,MongoDB,redis,etcd,HBase这类NoSQL,但你不一定了解过Neo4j,因为它确实比较小众。如果你已经了解过TigerGraph或者Titan,那也一定要掌握Neo4j,未来的图数据库领域,毫不夸张的说:Neo4j is always the best.二、图、图数据库图包含两种基本的数据类型:Nodes(节点)和Relationships(关系)。Nodes 和 Relation..

2020-09-03 20:41:46 13072

原创 Cypher实战

以下演示常见的Cypher操作,默认每个代码块对应一条Cypher语句,但为了展示多条Cypher之间的相关性,可能会将多条Cypher放到一个代码块中,并通过‘;’进行隔开。由于一个完整的Cypher中不用包含‘;’,所以实际执行时,请按照';'分割后逐条执行。CREATE创建节点并创建关系1)方案1,关系内嵌于节点进行创建。CREATE (adam:User {name: 'Adam'})-[:FRIEND]->(pernilla:User {name: 'Pernilla'}.

2020-09-03 20:28:26 15212

原创 python脚本导出Elasticsearch数据到csv文件

以下是个导出es数据到csv文件的简单脚本,脚本简单易懂,主要解决了中文乱码问题。from elasticsearch import Elasticsearchimport csvimport sysimport jsonimport codecsreload(sys)sys.setdefaultencoding('utf-8')# es地址:本机 localhost:9200, 远程地址 https://your_remote_es_url/es = Elasticsearch([

2020-07-02 18:49:23 12096

原创 git提示文件有修改但实际文件无修改解决方案

某天快快乐乐的编程中,发现项目的部分文件提示版本有变更,但通过git比较发现文件实际上无任何改动。捉摸不定之际,忽然想起来最近好像修改了项目文件夹的权限,根据这个思路找到了靠谱的解决方案。即通过通过设置git config下core.filemode 属性为false来忽略文件权限。操作如下:git config --global core.filemode false设置完...

2020-02-11 12:09:01 25839

原创 Swagger添加BasicAuth和OAuth2.0认证

一个没有添加认证的swagger配置类大概长这样 @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2).host(swaggerHost) .groupName("demo") .apiInfo(getApiInfo()) .se...

2019-11-19 11:43:11 18328

原创 Spring Data JPA 何时必须使用@Param注解

最近JPA踩坑,使用自定义的@Query报出下面的异常:org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query me...

2019-09-07 19:31:16 17412 4

MySQL实战完整版.rar

MySQL实战完整版资源含PDF,MP3,HTML,总共包含45章内容,适合需要提升MySQL技能的开发者,或者进行MySQL运维的同学。 压缩包内是百度网盘链接,丁奇的作品。

2021-04-15

neo4j-cypher-manual-4.1.pdf

Cypher操练手册,提供Cypher操作的相关语法,为Cypher学习提供指南,提供最佳的实践方向,欢迎下载。

2020-09-04

KETTLE基础培训

Kettle是一款国外开源的ETL工具,纯java编写,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

2018-05-14

最新版mysql jdbc驱动mysql-connector-java-5.1.38.jar

支持kettle7.0和最新版mysql客户端的连接,完美解决OPTION SQL_SELECT_LIMIT=DEFAULT的问题

2017-03-24

动态显示当前时间的js

兼容所有浏览器的js,用来动态显示当前时间,只需要调用,并传入显示区域的id即可

2016-08-26

三层架构和MVC的区别和联系

简单地解释了什么是三层架构,什么是MVC,用图解的方式描述了二者的区别和联系

2016-08-23

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

TA关注的人

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