java
文章平均质量分 74
小米吃辣椒2022
本人毕业于湖北工业大学,目前已有7年的工作经验,先后涉猎于电商,农业大数据,智慧停车,城市智慧大脑,公安指挥调度,海康云商电商平台,智慧物流等软件开发行业,目前就职于稳健医疗java全栈工程师岗位,负责智慧物流产品百台服务器核心架构设计及研发工作,对多线程,高并发,架构设计,应用虚拟容器,微服务,数据库中间件,消息中间件以及大数据生态圈,web前端技术有丰富的认知和开发经验。
展开
-
JVM虚拟机-实战篇
内存泄漏:在java中如果不再使用一个对象,但是该对象依然在 gc roots的引用链上,这个对象就不会被垃圾回收器回收,这种情况称之为内存泄漏。内存泄漏绝大多数情况都是堆内存泄漏引起的,所以没有特别说明则讨论的都是堆内存泄漏。少量的内存泄漏可以容忍,但是如果发生持续的内存泄漏,就像滚雪球越滚越大,不管多大的内存迟早会被消耗完,最终导致的结果就是内存溢出,但是导致内存溢出并不是只有内存泄漏这一种原因。内存泄漏的常见场景。原创 2024-03-27 20:11:17 · 861 阅读 · 1 评论 -
一文彻底搞懂Mysql索引优化
什么是mysql的索引mysql官方对于索引的定义:索引是帮助mysql高效获取数据的数据结构。mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的的数据结构,这些数据结构以某种引用(指向)表中的结构,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。简单理解为“排好序的可以快速查找数据的数据结构”。原创 2022-11-28 21:23:48 · 841 阅读 · 8 评论 -
别再自己瞎写工具类了,Spring Boot 内置工具类涵盖了所有操作yyds
别再自己瞎写工具类了,Spring Boot 内置工具类涵盖了所有操作yyds原创 2022-07-12 19:28:40 · 357 阅读 · 0 评论 -
Java中的注解Annotation
注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。原创 2022-05-13 09:41:52 · 481 阅读 · 5 评论 -
java操作elasticsearch api实现索引及文档增删改查(非常全面)
在实际的项目开发中,我们经常要对大批量的业务数据或者日志数据进行全文检索查询,这个时候我们就可以用elasticsearch作为我们的全文检索引擎,下面我们将使用java elasticsearch 的 api 实现 索引以及文档(doc)的增删改查,包括批量新增和删除,以及组合条件,聚合,分组,高亮等高级查询都会一一以代码示例展示。原创 2022-04-29 11:03:22 · 4433 阅读 · 4 评论 -
《Spring batch》实战之实现数据批处理
🍎 微服务系列推荐spring cloud Alibaba实战🍎 消息中间件系列推荐Apache Pulsar云原生消息中间件📅 最近更新 :2022年4月13日🍎 点赞👍 收藏收藏✨留言📑 都是我最大的动力!!spring batch简介spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。 这些业务运营包括:无需用户交互即可最有效地处理大量信息的自动化,复杂处理。 这些操作通常包括基于...原创 2022-04-13 19:19:32 · 3510 阅读 · 1 评论 -
《Redis实战》之使用HyperLogLog实现用户UV访问量统计
目录一、HyperLogLog 用法二、HyperLogLog 数据结构实战一、HyperLogLog 用法(1)(2)向HyperLogLog数据结构中添加元素测试发现添加相同的元素时候,count数量不会增加,所以该数据结构天生适合用来做UV统计二、HyperLogLog 数据结构实战插入100万数据,最后打印出来的统计数量为997593,还是比较准确的,而且内存占用极低,没有超过16kb。...原创 2022-04-08 10:28:33 · 1617 阅读 · 0 评论 -
《Redis实战》之使用BitMap实现用户签到功能
一、实现逻辑分析二、BitMap常用操作命令Redis中是利用String类型数据结构实现BitMap,因此最大上限是512M,转换为bit则是2^32个bit位。BitMap的操作命令有:SETBIT:向指定位置offset存入一个0或1GETBIT:获取指定位置offset的bit值BITCOUNT:统计BitMap中值为1的bit位的数量BITFIELD: 操作(查询,修改,自增)BitMap中bit数组中的指定位置offset的值BITFIELD_RO: 获取原创 2022-04-08 09:46:53 · 2386 阅读 · 0 评论 -
《Redis实战》之使用GEO数据结构实现附近商户搜索
一、Geo数据结构Geo就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:GEOADD: 添加一个地理空间信息,包含:经度,纬度,值(member)GEODIST: 计算指定的两个点之间的距离并返回GEOHASH: 将指定member的坐标转为hash字符串形式并返回GEOPOS: 返回指定menber的坐标GEORADIUS: 指定圆心,半径,找到该圆内包含的所有mem原创 2022-04-08 08:53:33 · 1416 阅读 · 0 评论 -
推荐一款数据库文档生成工具--Screw
💕 企业级开发过程中,一颗永不生锈的螺丝钉。🚀 screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具简介 在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人,于是萌生了要自己写一个插件工具的想法,但由于自己前期在程序设计上没有很多造诣,且能力..转载 2022-04-01 20:48:03 · 836 阅读 · 3 评论 -
Spring Boot 项目使用 Disruptor 做内部消息队列,性能爆表
Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单,2010 年在 QCon 演讲后,获得了业界关注。原创 2022-04-01 14:19:07 · 394 阅读 · 0 评论 -
20 个超级实用的 Java 8 Stream,玩转集合的筛选、归约、分组、聚合
先贴上几个案例,水平高超的同学可以挑战一下:1. 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。2. 统计员工的最高薪资、平均薪资、薪资之和。3. 将员工按薪资从高到低排序,同样薪资者年龄小者在前。4. 将员工按性别分类,将员工按性别和地区分类,将员工按薪资是否高于8000分为两部分。用传统的迭代处理也不是很难,但代码就显得冗余了,跟Stream相比高下立判。Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的Lambda,给我...转载 2022-04-01 09:33:30 · 147 阅读 · 0 评论 -
为什么 NanoID 会取代 UUID
UUID 是软件开发中最常用的通用标识符之一。然而,在过去的几年里,其他的竞品挑战了它的存在。其中,NanoID 是 UUID 的主要竞争对手之一。因此,在本文中,我们将展开讨论 NanoID 的功能、它的亮点以及它的局限性,以便让我们更好地了解何时使用它。了解 NanoID 及其用法对于 JavaScript,生成 UUID 或 NanoID 都非常简单。它们都有对应的 NPM 包来帮助我们实现生成。我们所需要做的就是运行npm i nanoid命令安装 NanoID NPM 库 ..转载 2022-04-01 09:08:21 · 314 阅读 · 0 评论 -
性能爆表,Redis+Caffeine 两级缓存实战
在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能。于是,就产生了使用本地缓存作为一级缓存,再加上远程缓存作为二级缓存的两原创 2022-03-30 09:07:58 · 1010 阅读 · 0 评论 -
算法入门提升学习计划-第1节-二分查找算法
算法入门提升学习计划-第1节-二分查找算法原创 2022-01-10 11:04:21 · 121 阅读 · 0 评论 -
springboot集成xxl-job定时任务实现mongodb日志表定期归
目录一、归档配置表设计二、手动创建线程池工具类 和 MongodbArchiveService 类三、xxl-job日志归档定时任务入口四、日志归档处理子类ArchivePrinterLogService 在项目开发亦或是接口调用,异常记录,历史信息记录都难免不了日志的记录,随着时间的推移,日志表中的数据会变的越来越多,日志定期归档就显得尤为重要。一、归档配置表设计为了能够适应需求的变化,归档日期和日志的失效时间可能随时会有变更,我们需要设计一个归......原创 2021-12-22 16:26:58 · 2151 阅读 · 0 评论 -
推荐一个有情怀的跨平台Redis可视化客户端工具:RedisViewer
Redis至今没有一款非常专业的可视化管理客户端,就算之前介绍过的几款也是差强人意,有些时候满足不了我们的需求,而今天本文要介绍的是另一款值得推荐的Redis可视化客户端,以下大多数通过截图的方式来展示这款软件!这款产品也是跨平台的,目前已经支持Windows和MacOS,理论支持Linux(尚未经过测试),方便不同平台开发者们使用!本软件出自@可乐onefineday之手!相关技术栈 UI: electron、vue、elenentui 后端: springboot 、webf原创 2021-05-24 17:57:23 · 423 阅读 · 0 评论 -
《java性能优化实战》之实战演练场
一、如何设计更优的分布式锁?从这一讲开始,我们就正式进入最后一个模块的学习了,综合性实战的内容来自我亲身经历过的一些案例,其中用到的知识点会相对综合,现在是时候跟我一起调动下前面所学了!去年双十一,我们的游戏商城也搞了一波活动,那时候我就发现在数据库操作日志中,出现最多的一个异常就是 Interrupted Exception 了,几乎所有的异常都是来自一个校验订单幂等性的 SQL。因为校验订单幂等性是提交订单业务中第一个操作数据库的,所以幂等性校验也就承受了比较大的请求量,再加上我们还是基原创 2021-04-28 14:06:11 · 247 阅读 · 0 评论 -
《java性能优化实战》之数据库性能调优
数据库性能调优一、mysql调优之sql语句我们就重点看看慢 SQL 语句的几种常见诱因,从这点出发,找到最佳方法,开启高性能 SQL 语句的大门。慢 SQL 语句的几种常见诱因1. 无索引、索引失效导致慢查询如果在一张几千万数据的表中以一个没有索引的列作为查询条件,大部分情况下查询会非常耗时,这种查询毫无疑问是一个慢 SQL 查询。所以对于大数据量的查询,我们需要建立适合的索引来优化查询。虽然我们很多时候建立了索引,但在一些特定的场景下,索引还有可能会失效,所以索引失效也是导致慢查原创 2021-04-28 10:49:47 · 839 阅读 · 0 评论 -
《java性能优化实战》之多线程性能调优
一、多线程之锁优化1.1在高并发场景下,当大量线程同时竞争同一个锁资源时,偏向锁就会被撤销,发生stop the word 后, 开启偏向锁无疑会带来更大的性能开销,这时我们可以通过添加 JVM参数关闭偏向锁来调优系统性能,示例代码如下:-XX:-UseBiasedLocking // 关闭偏向锁(默认打开)-XX:+UseHeavyMonitors // 设置重量级锁在锁竞争不激烈且锁占用时间非常短的场景下,自旋锁可以提高系统性能。一旦锁竞争激烈或锁占用的时间过长,自旋锁将会导致.原创 2021-04-26 11:15:48 · 1026 阅读 · 0 评论 -
《java性能优化实战》之编程性能优化
一、java编程性能优化实战1、如何使用String.intern 节省内存Twitter 每次发布消息状态的时候,都会产生一个地址信息,以当时Twitter用户的规模预估,服务器需要32G的内存来存储地址消息。具体做法就是,在每次赋值的时候使用String的intern方法,如果常量池中有相同值,就会重复使用该对象,返回对象的引用,这样一开始的对象就可以被回收掉。这种方式可以使重复性非常高的地址信息存储从20G降到几百兆。SharedLocation sharedLocation = .原创 2021-04-23 17:56:42 · 451 阅读 · 0 评论 -
一口气说出 6种 @Transactional 注解失效场景
@Transactional注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:try { //TOD.原创 2021-03-22 15:17:31 · 250 阅读 · 0 评论 -
使用HutoolUtil之全局定时任务CronUtil工具类实现动态定时任务,很好很强大!
全局定时任务-CronUtil介绍CronUtil通过一个全局的定时任务配置文件,实现统一的定时任务调度。使用1、配置文件对于Maven项目,首先在src/main/resources/config下放入cron.setting文件(默认是这个路径的这个文件),然后在文件中放入定时规则,规则如下:# 我是注释[com.company.aaa.job]TestJob.run = */10 * * * *TestJob2.run = */10 * * * *Copy to .原创 2020-12-11 11:41:43 · 5667 阅读 · 0 评论 -
使用HutoolUtil工具包之DFA确定有穷自动机过滤含有关键词的内容,很好很强大!
一、现有需求如下:后台人员添加N个关键字,然后对主站所有的内容进行清洗,含有这些关键字的所有内容都置为无效。思路拿到此需求,我最早的方案比较粗暴:针对关键字建立一个HashSet,然后遍历整个数据库,针对每篇文章遍历这个Set,查找是否contains关键字……好吧我承认这不是一个好方法,随着关键字的增多和数据的增多,这个过程消耗的时间成指数型增长!于是我找到度娘,发现一个算法:DFA。DFA介绍DFA全称为:Deterministic Finite Automaton,即确定有穷自原创 2020-12-11 11:30:36 · 1968 阅读 · 0 评论 -
使用HutoolUtil工具包之树结构工具TreeUtil 快速处理数据树形结构数据,很好很强大!
数据准备CREATETABLE`content_file_category`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(255)DEFAULTNULLCOMMENT'名称',`parent_id`bigint(20)DEFAULTNULLCOMMENT'所属分类',`order_num`int(11)DEFAULTNULLCOMMENT'排序序号',`level`int...原创 2020-12-10 19:47:12 · 20931 阅读 · 12 评论 -
spring boot项目集成Elasticsearch
一、添加elasticsearch 依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <dependency> <groupId>原创 2020-11-30 15:19:40 · 702 阅读 · 0 评论 -
java中的静态代理和动态代理
1. 代理模式代理模式是一种比较好的理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。举个例子:你的找了一小红来帮你问话,小红就看作是代理我的代理对象,代理的行为(方法)是问话。代理模式有静态代理和动态代理两种实现方式,我们 先来看一下静态代理模式的实现。...原创 2020-10-27 11:09:36 · 328 阅读 · 0 评论 -
二进制,位运算,以及java中的基本数据类型的存储
目录JDK自带的进制转换位运算java中的整数类型大数类 BigIntegerjava中的浮点类型精确小数 BigDecimaljava中的字符型和布尔型char类型的存储和计算boolean 类型的存储JDK自带的进制转换java中可以直接声明二进制、八进制、十进制、十六进制例如:二级制: int bin = 0b1100010;八进制: int oct = 0142;十进制: int dec = 98;十六进制: int hex = 0x原创 2020-10-20 14:23:48 · 986 阅读 · 0 评论 -
彻底吃透java8函数式编程
Lamda表达式箭头左边是参数列表,右边是函数体。方法引用 : class::method静态方法引用: User::combine 参数方法引用: String::indexOf 实例方法引用: user::getUserName 构造器引用: User::newjava函数式接口有且仅有一个未实现的非静态方法的接口叫做“函数式接口”interface IProducer<T>{ T produce();}// ()=>User.bu...原创 2020-10-13 14:28:27 · 399 阅读 · 2 评论 -
大话java近代版本特性
我们都知道,在 Java 9 之后,每六个月就会发布一次新版本。下面的 Java 发布周期可以看到,从 95 年发布的 JDK Beta 至今的 25 年时间,已经发布了 16 个版本。然而从 17 年开始,短短 3 年时间就发布了 6 个版本,占比 37.5% 。因此更多、更新鲜的特性也更集中在最近几年:一、Java 的发布周期1995 年 alpha 和 beta Java 公开版本发布,取名为 WebRunner。1996.1.23 Java 第一个版本发布,取名叫 Oak。在原创 2020-09-29 12:24:00 · 397 阅读 · 0 评论 -
java 坐标转换工具类(很全面哦!wgs84.... gcj02(即火星坐标).... )
今天给大家分享一个java实现的地图坐标系经纬度转换工具类/* * Copyright (c). All rights reserved. * Use is subject to license terms. */package com.sf.gis.boot.utils;import org.apache.commons.codec.binary.Base64;import java.io.*;import java.math.BigDecimal;import java.ne.原创 2020-08-05 15:57:12 · 4037 阅读 · 3 评论 -
Java程序员必备基础结构图
前言最近看了深入理解Java虚拟机第三版,整理了一些基础结构图,算是比较全的了,做一下笔记,大家一起学习。1.Java虚拟机运行时数据区图JVM内存结构是Java程序员必须掌握的基础。程序计数器 程序计数器,可以看作当前线程所执行的字节码的行号指示器 它是线程私有的。 Java虚拟机栈 线程私有的,生命周期与线程相同。 每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作数栈、动态链接、方法出口等信息。 局部变量表存放各原创 2020-07-25 22:36:57 · 663 阅读 · 0 评论 -
java spring boot 项目使用gradle打包时分离libs目录下的jar包和yml文件
在项目build.gradle 配置文件中添加如下代码jar { exclude(['application*.yml', 'application.properties'])}task copyConfigFile(type: Copy) { from('src/main/resources') { include 'application.yml...原创 2019-11-07 10:06:09 · 3719 阅读 · 0 评论 -
软件开发设计模式之【7】个【结构型】设计模式
代码码云仓库地址:https://gitee.com/dzxmy/design_pattern常用的结构型设计模式有:适配器模式,装饰者模式,代理模式,外观模式,桥接模式,享元模式不常用的结构型设计模式有:组合模式一、外观模式定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口,外观模式定义了一个高层接口,让子系统更容易使用类型:结构型优点:简化了调用过程...原创 2019-08-01 14:42:26 · 1235 阅读 · 0 评论 -
软件开发设计模式之【6】个【创建型】设计模式
代码码云仓库地址:https://gitee.com/dzxmy/design_pattern常用的创建型设计模式有:工厂方法模式,抽象工厂模式,建造者模式,单例模式。不常用的创建型设计模式有:简单工厂,原型模式一、简单工厂定义:由一个工厂对象决定创建出哪一种产品类的实例类型:创建型,但不属于GOF23种设计模式适用场景:工厂类负责创建的对象比较少 客户端应用层只知道...原创 2019-06-26 17:27:47 · 1212 阅读 · 0 评论 -
软件开发设计模式之【11】个【行为型】设计模式
代码码云仓库地址:https://gitee.com/dzxmy/design_pattern常用的行为型设计模式有:策略模式,责任链模式,模板方法模式,状态模式不常用的行为型设计模式有:观察者模式,备忘录模式,迭代器模式,中介者模式,命令模式,访问者模式,解释器模式一、模板方法模式定义:定义了一个算法的骨架,并允许子类为一个或者多个步骤提供实现模板方法使得子类可以不改变算法结...原创 2019-08-15 11:51:51 · 1222 阅读 · 0 评论 -
java自定义注解、mybatis 插件 实现数据库 分库分表
一、自定义注解实现分库为什么会有数据库切库一说首先,许多项目都有主库与从库,有的主库后面甚至会有很多个从库,主从库之间的通常同步也很快,这为数据库切库提供了一个基础,因为可以去不同的数据库查询,得到相同的结果(如果不同的数据库是完全不同的,这个不在我们这篇文章讨论的范围之内,那个属于让项目支持多个数据源)其次,随着项目越来越大、操作的用户越来越多,对数据库的请求操作越来越多,很容易想到...原创 2018-11-22 15:08:58 · 3310 阅读 · 0 评论 -
centos 或 redhat 上安装 docker
centos7或redhat上安装docker前置条件64-bit 系统 kernel 3.10+1.检查内核版本,返回的值大于3.10即可。$ uname -r2.使用 sudo 或 root 权限的用户登入终端。3.卸载旧版本(如果安装过旧版本的话)$ yum remove docker \ docke...原创 2018-08-04 18:51:56 · 1146 阅读 · 0 评论 -
软件设计【7】大原则
代码码云仓库地址:https://gitee.com/dzxmy/design_pattern一、开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。优点:提高软件系统的可复用性及可维护性。com.dzx.design.principle.openclose 包下代码:开闭原则二、依赖倒置原则定义:高层模块不应该依...原创 2019-06-21 17:37:37 · 1036 阅读 · 0 评论 -
JAVA实现FTP多文件下载,说一说ftpClient.retrieveFileStream方法遇到的坑
问题描述:在搭建好的ftp服务器上面 ,每天定时任务 从 /拍照保存目录/1/{摄像头序列号}/{日期}/{xxx.jpg} 下载 摄像机拍摄的图片,并同步上传到fastDfs 文件系统,并同步到数据库中1.第一步,获取ftp连接2.第二步,不断的切换目录到存放有图片文件的目录下。3.第三步,调用ftpClient.retrieveFileStream获取 远程文件的输入流,并写出。4.第四步,...原创 2018-06-12 14:00:47 · 48822 阅读 · 11 评论