
Java与Spring Boot系列
Java与Spring Boot系列
张音乐
家人们点点关注
展开
-
千万级数据量的插入操作(MYSQL)
前几天因为公司业务迁移需要,需要从数仓同步一张大表,数据总量大概三千多万,接近四千万的样子,当遇到这种数据量的时候,综合考虑之后,当前比较流行的框架都不能满足于生产需求,使用框架对性能的损耗过于严重,所以有了以下千万级数据量的插入方案。当数据量达到一定规模的时候,假设一个语句为这样,还比较小的,只有三个字段。INSERT INTO user_operation_min_temp(obse...原创 2019-09-28 12:00:20 · 3376 阅读 · 3 评论 -
springboot + h2 + vue + AceEditor + element-ui 数据库管理系统(DMS)- JavaWeb毕业设计|课程设计
数据库管理系统(DMS)架构后端springboot + mybatis + h2前端vue + element-ui + AceEditor功能描述功能状态添加数据源✔修改数据源✔删除数据源✔获取指定数据源表信息(表名称, 字符集, 注释, 存储引擎, 自增初始值)✔获取指定数据源指定表字段信息(字段名, 注释, 类型, 是否可空, 是否是主键, 默认值, 更新策略, 是否增动增长)✔前端sql代码编辑器✔sql格式化原创 2021-08-14 15:36:52 · 701 阅读 · 1 评论 -
Java从建表语句中提取索引信息, 索引名称,复合索引包含字段,索引类别(普通索引/主键索引/唯一索引/全文索引/空间索引)解决方案
查阅了多方面资料, 对比以下几种方案一.尝试方案一DatabaseMetaData , 这种方式代码如下, 这种方式获取的索引类型其实是因为我也没有具体创建过这几种索引,所以也不认识. 但是很明显不符合我们的需求.* tableIndexStatistic - 此标识与表的索引描述一起返回的表统计信息* tableIndexClustered - 此为集群索引* tableIndexHashed - 此为散列索引* tableIndexOther - 此为某种其...原创 2021-08-13 14:59:01 · 1235 阅读 · 0 评论 -
Java用几行代码实现一个采用LRU算法的本地缓存 | 最近最少使用淘汰策略 | 缓存 | 面试题
在面试的时候面试官有没有让你徒手实现一个LRU缓存, 你是不是直接蒙币了, 直接上图代码如下:package com.biubiu.sdk.util;import java.util.LinkedHashMap;import java.util.Map;/** * @author :张音乐 * @date :Created in 2021/7/8 下午5:21 * @description:LRU最近最少使用淘汰策略缓存 * @email: zhangyule1993@si.原创 2021-07-09 09:35:14 · 262 阅读 · 0 评论 -
简单if-else代码优化
package com.biubiu.example;import com.google.common.collect.ImmutableMap;import java.util.Map;/** * @author :张音乐 * @date :Created in 2021/6/29 上午3:29 * @description: * @email: zhangyule1993@sina.com * @version: */public class App { /** .原创 2021-06-29 10:29:19 · 204 阅读 · 0 评论 -
Java检测字符串是否是Map或指定对象的通用模板方法并进行转换
直接上代码了.没啥可说的package com.biubiu.example;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;import java.util.Map;import java.util.Optional;/** * @author :张音乐 * @date :Created in 2021/6/28 下午3:29 * @description: *原创 2021-06-28 15:52:46 · 2026 阅读 · 0 评论 -
Java|在springboot中如何将带有自定义注解的Bean实例化到容器中,创建spring代理对象
一、定义一个注解package com.biubiu.sls.annotation;import java.lang.annotation.*;@Documented@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD})public @interface SlsMapper原创 2021-05-30 13:28:04 · 1410 阅读 · 10 评论 -
Java反射时如何获取返回值类型, 如何处理List类型的返回参数
举个例子, 如上图中所示, 两种返回类型一种是List<T>, 一种是对象<T>时, 在写通用代码的时候应该怎么去处理如果是List private Object doSelect(SlsSelect select, SlsTable table, Method method, Object[] args) throws ClassNotFoundException, IllegalAccessException, LogException, Instant..原创 2021-05-30 13:16:33 · 2322 阅读 · 0 评论 -
Java设计模式如何优雅的使用本地缓存?
一、为什么要选择 guava cache1、缓存Cache和ConcurrentMap虽然类似,但又不完全一样。最根本的区别是,ConcurrentMap会保存所有添加到其中的元素直到它们被明确的移除。而Cache通常可以配置一个自动化的回收策略去限制它的内存空间。2、如果你还需要缓存满足以下几点要求(1)、如果你打算牺牲更多内存来换取速度的提升。(2)、缓存中的数据会频繁的被使用到。(3)、Guava Cache只会把数据存储在内存中(Guava Cache是把数据存储于你运行的单个.原创 2021-05-25 09:23:58 · 523 阅读 · 2 评论 -
Java base64转化成 inputStream
package com.biubiu.utils;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.util.Base64;public class Utils { /** * base64转化成 inputStream * * @param base64 * @return */ public static InputStrea.原创 2021-01-09 14:40:34 · 6668 阅读 · 0 评论 -
Java文件File类型转BASE64
package com.biubiu.utils;import java.io.File;import java.io.FileInputStream;import java.util.Base64;public class Utils { /** * 文件File类型转BASE64 * * @param file * @return */ public static String fileToBase64(File file.原创 2021-01-09 14:39:01 · 4922 阅读 · 0 评论 -
Java文件File类型转byte[]
package com.biubiu.utils;import java.io.File;import java.io.FileInputStream;public class Utils { /** * 文件File类型转byte[] * * @param filePath 文件路径 * @return */ public static byte[] fileToByte(String filePath) { .原创 2021-01-09 14:33:20 · 4766 阅读 · 0 评论 -
Java文件byte[]类型转File
package com.biubiu.utils;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class Utils { /** * 文件byte[]类型转File * * @param bytes bytes * @param outP.原创 2021-01-09 14:31:07 · 7701 阅读 · 0 评论 -
Java 创建临时文件, base64 写入到 FileOutputStream, base64输出到文件
package com.biubiu.utils;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Base64;import java.util.UUID;public class Utils { /** * 创建临时文件 * @param fileType * @return * @throws .原创 2021-01-10 00:27:41 · 2034 阅读 · 4 评论 -
Java之base64转化成图片文件
package com.biubiu.utils;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.Base64;public class Utils { /** * base64转化成图片文件 * @param base64 * @param imgFilePath * @return */ public static b.原创 2021-01-09 14:49:13 · 1448 阅读 · 0 评论 -
Java之文件删除
package com.biubiu.utils;import java.io.File;public class Utils { /** * 删除文件 * @param file */ public static void delete(File file) { if (!file.exists()) { return; } if (file.isFile()) { .原创 2021-01-09 14:47:02 · 173 阅读 · 0 评论 -
Java之文件压缩打包成zip包
package com.biubiu.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class Utils { public static void zipDir(String sourcePath, S.原创 2021-01-09 14:45:29 · 364 阅读 · 0 评论 -
Java 计算文件hash值
package com.biubiu.utils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.MessageDigest;public class Utils { /** * 计算文件hash值 */ public static String hashFile(File file) throws Exc.原创 2021-01-09 14:43:53 · 1392 阅读 · 0 评论 -
Java inputStream 转化成 base64与 inputStream 转化成 bytes
package com.biubiu.utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Base64;public class Utils { /** * inputStream 转化成 base64 * @param inputStream * @return * .原创 2021-01-09 14:42:34 · 1162 阅读 · 0 评论 -
JAVA防止表单重复提交(SpringMVC,ICache)
一、抽取公共BaseController类import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.Enumeration;import java.util.HashMap;import java.util.List;...原创 2018-03-05 21:20:49 · 490 阅读 · 0 评论 -
Java双检锁防止Redis缓存穿透(模板方法设计模式)
在高并发项目中,为了缓解数据库查询压力,通常会引入Redis等非关系型数据库作为缓存。查询数据的一般步骤为:step1、查询缓存。step2、判断是否为空。如果不为空: step3、返回查询结果。如果为空: step3、查询数据库(数据库没有Redis性能高,通常会有一两秒的延迟,假设2秒)。 step4、更新Redis缓存...原创 2019-02-20 18:01:41 · 1273 阅读 · 0 评论 -
Java字段校验
1、校验测试package com.video.base.utils;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.Objects;import java.util.Optional;...原创 2019-01-08 23:31:42 · 2171 阅读 · 0 评论 -
Java NIO读写TXT文件(FileChannel)
先上代码为敬代码中编码写成GBK是因为windows默认新建txt的时候是GBK格式,如果你的txt文件为UTF-8则修改为UTF-8package channel;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.c...原创 2019-01-08 23:02:17 · 3757 阅读 · 1 评论 -
java 注解结合spring AOP实现控制层API请求日志管理
1、定义java注解package com.video.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.Retenti...原创 2019-01-04 01:30:25 · 677 阅读 · 1 评论 -
java web实现文件下载
/** 下载视频 */ @Scope(value="prototype") @RequestMapping(value = "/filedownload.do") public void fileDownload(String videoSrc,HttpServletRequest req, HttpServletResponse resp) throws IOExc...原创 2018-12-28 11:25:38 · 862 阅读 · 0 评论 -
java IO流转换例子
package com.video.utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;/** * 流转换工具类 * @author yule.zhang * */public class IOUtils { ...原创 2018-12-28 11:18:37 · 319 阅读 · 0 评论 -
SpringBoot + MyBatis二级缓存(优化版)
一、说明因为业务需要提高系统性能,如意需要设计缓存以及缓存的失效策略。当前网上流传的二级缓存版本基本千篇一律,并且如果你贸然的用于生产环境的话,name等待你的可能是生产事故。因为很多细节没有进行优化。之所以选择二级缓存是因为我当前所使用的系统可以拆分成两个部分,一部分mapper对外提供服务,一部分MAPPER仅仅只是作为数据的管理和配置。所以,管理模块仅仅只是对少数人开放,所以可以...原创 2019-08-15 23:36:17 · 1289 阅读 · 1 评论 -
Java 多线程
1、CountDownLatchpackage countdownlatch;import java.util.concurrent.CountDownLatch;public class CountDownLatchApp { public static void main(String[] args) { final CountDownLatch latch = n...原创 2019-08-07 10:17:58 · 171 阅读 · 0 评论 -
Java JDK动态代理原理
1、动态代理接口/** * 动态代理接口 */public interface Demo { public void a(); public void b();}2、接口实现类/** * 接口实现类 */public class DemoImpl implements Demo { @Override public void a(...原创 2019-08-07 00:22:52 · 205 阅读 · 0 评论 -
Java 封装原生 Redis命令
1、其他命令和set类似,可以自己实现package com.biubiu.sdk;import java.io.IOException;import java.net.Socket;import java.nio.charset.StandardCharsets;/** * Hello world! */public class App { Socket soc...原创 2019-08-05 14:03:14 · 734 阅读 · 0 评论 -
简化版本的Tomcat
推荐一个公众号号主为一线大厂架构师,优快云博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!注:本文参考业余草的一篇博客,不过自己在原来的代码上又添加了一些自己的理解,1)、使用注解来扫描路由映射2)、使用注解在Tomcat初始化的时候扫描哪些servle...原创 2019-08-05 13:53:46 · 736 阅读 · 0 评论 -
Java 复制List的模板方法
1、pom文件引入jar包<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version></dep...原创 2019-06-03 14:35:11 · 512 阅读 · 0 评论 -
Java Redis连接池的简单实现(参考go语言中的channel)
1、声明一个连接池管理接口package com.biubiu.common;import redis.clients.jedis.Jedis;public interface IPond { //public void configure(); //可以写一个类似于init的方法用来配置参数等,这里直接用构造...原创 2019-05-06 11:44:08 · 467 阅读 · 0 评论 -
Hystrix实现线程池隔离
1、Hystrix隔离Hystrix是一款开源的容错插件,具有依赖隔离,系统容错降级等功能2、线程池隔离策略通常的做法是按照业务进行划分比如 用户服务 和 订单服务优点:如果一个任务的线程池资源耗尽,也不会影响另外一个任务的线程池。(1)、pom文件里面进行配置,引入hystrix的依赖<dependency> <groupId>org.s...原创 2019-03-26 20:56:29 · 2476 阅读 · 0 评论 -
Java 线程池在springboot环境中的使用
1、配置线程池package com.example.demo.core.thread;import com.google.common.util.concurrent.ThreadFactoryBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.a...原创 2019-03-26 18:57:17 · 1403 阅读 · 0 评论 -
Java 实现6种负载均衡算法
1、完全随机算法缺点:所有服务器的访问概率都是相同的。package com.example.demo.core.random;import java.util.Arrays;import java.util.List;import java.util.Random;/** * 负载均衡算法 * 完全随机算法 */public class RandomServer {...原创 2019-03-26 18:43:00 · 1128 阅读 · 0 评论 -
Java删除数组String []中的指定值
/** * 删除数组中的指定值 或者数组中的元素包含指定值 * @param filters 数组 * @param target 指定值 * @return */ public String[] doChinFilters(String[] filters, String target){ String[] res = null;...原创 2019-02-20 20:04:12 · 6147 阅读 · 0 评论 -
@Transaction原理解读之如何实现一个精简版的@MyTransation
一、定义一个注解@Target({ElementType.METHOD})表示aop拦截的是方法上的注解package com.biubiu.transaction;import java.lang.annotation.*;@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented...原创 2019-11-22 23:34:34 · 783 阅读 · 1 评论 -
JdbcTemplate原理之如何自己实现一个JdbcTemplate模版
一、首先介绍一下官方Jdbc的基本功能JdbcTemplate基本使用execute方法 update与batchUpdate方法 query与queryXXX方法 call方法二、需要注意哪些细节1、如何获取数据库连接。2、如何管理连接。3、如何保证不同的线程使用的不是同一个连接,不能让其它线程干扰到本线程的执行。4、保证同一个线程使用的是同一个连接,不能把b线程...原创 2019-11-22 23:23:47 · 703 阅读 · 0 评论 -
Java手写线程池
推荐一个公众号号主为一线大厂架构师,优快云博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!package com.biubiu.sdk.thread;import java.util.concurrent.LinkedBlockingQueue;i...原创 2019-09-06 09:49:17 · 471 阅读 · 0 评论