自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT-CRUD

修心、修性、修能!

  • 博客(159)
  • 资源 (1)
  • 收藏
  • 关注

原创 RestFul风格的GET、POST请求到底应该如何接收日期类型

综上所述,结合开头说的,为了前后端交互,日期字段格式统一,可以使用1、2、4三个方案。首先是GET请求,在参数少的时候,没有必要使用对象接收,就可以直接使用1方案;反之GET请求参数较多,可以使用2方案;为了和GET请求的日期统一交互格式,只能采用方案4这里需要注意一点,GET请求封装对象内的日期字段添加的注解是,而POST请求使用的注解是。

2022-10-11 11:52:46 4342 4

转载 spring事务失效的这10种坑,看看你踩中没!!!

对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果同时有多张表的写入操作,为了保证操作的原子性(要么同时成功,要么同时失败)避免数据不一致的情况,我们一般都会使用spring事务。没错,spring事务大多数情况下,可以满足我们的业务需求。但是今天我要告诉大家的是,它有很多坑,稍不注意事务就会失效。

2022-10-10 16:33:41 347

转载 Java中JIT优化中最重要的逃逸分析

如果同步块所使用的锁对象通过这种分析被证实只能够被一个线程访问,那么JIT编译器在编译这个同步块的时候就会取消对这部分代码的同步。在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。在JIT阶段,如果经过逃逸分析,发现一个对象不会被外界访问的话,那么经过JIT优化,就会把这个对象拆解成若干个其中包含的若干个成员变量来代替。代码中对hollis这个对象进行加锁,但是hollis对象的生命周期只在f()方法中,并不会被其他线程所访问到,所以在JIT编译阶段就会被优化掉。

2022-09-20 18:17:33 402

转载 Java的即时编译(Just In Time, JIT)及其优化

Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块运行的特别频繁时,会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机会把这些代码编译成本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT编译器,不是Java虚拟机内必须的部分)。

2022-09-20 16:55:24 515 1

原创 CentOS 7环境下nacos集群的安装、部署及负载均衡

nacos安装部署非常的简单,下面一起学习一下nacos的安装。初步了解一下nacos的安装过程。nacos需要依赖java,所以需要提前安装好jdk,官方推荐jdk8,按照要求安装。部署nacos集群的话,需要通过nginx做集群的负载均衡。acos的持久化使用的是MySQL。nacos在centos7环境下的集群部署与安装。............

2022-07-01 18:38:31 2207

原创 VUE基础知识五:组件的分类、组件间传值、事件调用等

组件从整体来说分为局部组件和全局组件,局部组件是单独定义组件,通过components属相引用,全局组件直接挂载在当前应用上。另外延伸动态组件、异步组件的用法,以及组件之间传递数据的规则。...

2022-06-30 11:20:31 671

原创 VUE基础知识四:事件绑定及修饰符、双向绑定

事件绑定及事件修饰符,单个事件绑定多个方法,事件修饰符、按键修饰符、鼠标修饰符;双向绑定涉及输入框、文本域、单选框、多选框等。

2022-06-30 10:45:12 328

原创 VUE基础知识三:数组常用的操作函数

数组常用操作函数push、pop、shift、unshift、reverse、splice、slice、concat等使用方法

2022-06-29 11:19:55 1215

原创 VUE基础知识二:计算属性computed、侦听器watch和样式绑定

在变量发生变化的时候,内的计算属性会自动进行重新计算并渲染到页面。(不仅限于数值的运算,可以是对象、字符串、数组等)侦听器watcher监听属性的变化,在侦听器的函数上有两个参数,分别是修改后和修改前的值。注意:样式绑定的三种方式:这里如果使用的是style属性,不是使用class,style对应的属性值,定义在变量里面,应该怎么去做。如下代码:...

2022-06-29 11:15:23 377

原创 VUE基础知识一:生命周期函数和常用指令

概念:在生命周期中的某一时刻自动执行的函数beforeCreated:在实例生成之前会自动执行的函数created:在实例生成之后会自动执行beforeMount:在组件内容被渲染到页面之前自动执行的函数mounted:在组件内容被渲染到页面之后自动执行的函数beforeUpdate:当data内的数据发生变化时会立即自动执行的函数updated:当data内的数据发生变化,且已经在页面渲染后,会自动执行的函数beforeUnmount:当页面中存在dom对象失效时,自动执行的函数unmounted:当页面

2022-06-29 09:56:05 1522

原创 CentOS7环境下离线安装MySQL8.0.28数据库

环境说明安装环境:CentOS7 64位MySQL数据库版本:MySQL8.0.28安装方式:离线安装(服务器环境没有外部网络)这里需要说明一下安装方式,很多人为了方便可能直接使用yum源,省去了很多步骤,但是对于公司内部的服务器是不能连接外网的,因此这里就只能自己上传安装包安装啦。(如果你们公司有专业的DBA,无需自己弄,恭喜你不需要看这个博客啦!)数据库下载MySQL 8.0.28 Linux安装包下载:https://dev.mysql.com/downloads/mysql/这个地址进

2022-04-25 18:02:09 1529 1

原创 通过不同的方式实现多字段联合排序效果

说到排序让你想起的是冒泡排序法、归并排序法、选择排序法等,但是这个是基础的排序方法,在实际的应用基本用不到,就算用到也是被包装到底层,无需自己的实现。下面就说几种在实际应用中使用到的排序方法。问题场景现在需要对一个班级的人员进行排序,排序的规则是优先按照年龄排序,当年龄相等时,采用学生的身高排序。问题就是这样,你们想到几种排序的方法呢?通过SQL语句排序数据库中存储班级学生的信息,包含年龄和身高,通过SQL语句实现,很简单如下:select * from t_student order by a

2022-04-12 15:29:10 1917

原创 ArrayList源码(二):扩容和移位、删除元素详解

关于ArrayList的文章有两篇,前一篇写了ArrayList的数据结构、扩容机制、源码分析等,这篇来看一下ArrayList的一些操作细节。删除元素操作通过foreach删除List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); for (String element : list) {

2022-04-07 20:17:44 1392

转载 分布式唯一Id(雪花算法):原理+对比+方案

集群高并发情况下如何保证分布式唯一全局Id生成为什么需要分布式全局唯一Id,以及分布式Id的业务需求在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店;猫眼电影等产品的系统中数据日渐增长,对数据分库分表后需要有一个唯一Id来标识一条数据或消息;特别一点的如订单、骑手、优惠券也都需要有唯一Id坐标时。此时一个能够生成全局唯一Id的系统是非常必要的。Id生成规则部分硬性要求全局唯一;趋势递增:在Mysql的InnoDB引擎中使用的是聚集索引,由于多数

2022-04-07 19:09:21 3964

转载 ArrayList源码(一):java1.8源码之ArrayList源码解读

一、ArrayList概述1.1 ArrayList简介ArrayList经常用,今天对它的源码探究一二。首先看一下ArrayList源码中对ArrayList的讲解:List是大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector类,除了此类是不同步的。)size、isEmpty、get、set、iterator和listIterator操作都以固定时间运行。add

2022-04-06 20:19:57 288

原创 Spring Cloud服务注册与发现之Eureka(一):了解Eureka和Eureka单机版的搭建

微服务注册中心注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。注册中心的主要作用服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:服务发现:服务注册/反注册:保存服务提供者和服务调用者的信息;服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能;服务路由(可选):具有筛选

2022-04-04 17:56:40 251

原创 spring Cloud全家桶及微服务架构的核心概念

了解Spring CloudSpring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护

2022-04-04 15:20:56 441

原创 分布式系统架构的远程调用(RESTFul、RPC)和CAP原理

分布式系统的远程调用在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。RestFul接口REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构。资源(Resource):所谓"

2022-04-03 15:18:16 3381

原创 系统架构的演变过程(单体应用架构、垂直应用架构、分布式SOA架构、微服务架构)

系统架构演变随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单体应用架构Web应用早期,很多项目都时以单体项目存在,然后项目中分为Controller、Service、Dao层,将所有的功能模块都开发在一个项目中,进行打包和部署,当服务能力不够时,采用横向拓展的方式解决。缺点:耦合性高,所有模块放在通一个项目中,使得各个模块的耦合性很高灵活性差,在某个模块需要横向拓展的时候,需要整个项目一起部署

2022-04-03 14:15:36 4891

原创 微信小程序MINA框架之轮播图(三)

轮播图不论是在小程序,还是web页面、APP里面,都是常用的一个组件,在微信小程序里面就提供了这个好用的组件,我这个小白,表示很快就能上手。下面来看一下我是怎么写的吧!轮播图基本构建先不管它太多的动态功能,先将图片放上去,能正常的滑动。wxml中的代码<swiper> <swiper-item><image src="../../styles/banner/1.jpg"></image></swiper-item> &l

2022-03-23 09:37:54 681

原创 微信小程序MINA框架之事件绑定(二)

微信小程序事件绑定其实很简单,但是这里需要单独的拿出来说,主要里面涉及到如何获取数据,以及了解小程序中事件绑定的当前对象里面两个主要属性数据。数据的双向绑定借用vue里面的一个说法,实现输入框输入的值,在另一个组件里面动态显示的场景,称为双向绑定,在vue中使用v-model,在微信小程序里面又如何使用呢,看下面两个场景。场景一首先需要创建输入框,为输入框绑定数据输入事件,当输入框中输入值的时候,在view组件中,实时显示输入框中输入的值。<input bindinput="handleIn

2022-03-22 09:04:05 213

原创 微信小程序MINA框架之模板语法(一)

微信模板语法和vue有点相似,但是也有所不同,在vue中涉及到运算或者数据绑定,都是采用v-bind来实现,但是在微信中,不使用也是完全可以的,比较的灵活。之前如果有vue学习经验的,上手会很快。数据绑定数据绑定普通写法如下:首先需要在页面对应的json文件中定义初始化数据Page({ data: { name:"itcrud", id:1, isChecked:false, isGirl:false, a:

2022-03-22 09:03:57 205

原创 微信小程序MINA框架学习(零)

微信小程序的自带开发框架就是MINA,虽然市场中还有很多小程序的开发框架,但是考虑入门,还是以微信小程序自带的MINA框架为入口,开启微信小程序开发学习的旅程。这系列的博客旨在学习笔记的记录,一方面是加深自己的记忆,另一方面就是后期自己看着方便。参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html配置文件之app.json这是文件是做项目的全局配置,包括项目的页面列表、窗口的

2022-03-22 09:03:50 1586

原创 面试题系列(四):Java的基础知识面试考点精华(线程池、JVM……)

金三银四人才招聘的高峰期,渴望跳槽的朋友肯定跟我一样四处找以往的面试题,但又感觉找的又不完整,在这里我将把我所见到的题目做一总结,并尽力将答案术语化、标准化。预祝大家面试顺利。建议:术语会让你的面试更有说服力,让你感觉更踏实,建议大家多记背点术语。java线程池用过没有?Executors提供了四种方法来创建线程池。newFixedThreadPool() :创建固定大小的线程池。newCachedThreadPool(): 创建无限大小的线程池,线程池中线程数量不固定,可根据需求自动更

2022-03-22 09:03:37 173

原创 面试题系列(三):Java的基础知识面试考点精华(Collection、Map、Thread……)

简单说一下什么是跨平台术语:操作系统指令集、屏蔽系统之间的差异由于各种操作系统所支持的指令集不是完全一致,所以在操作系统之上加个虚拟机可以来提供统一接口,屏蔽系统之间的差异。Java有几种基本数据类型有八种基本数据类型。数据类型字节默认值byte10short20int40long80float40.0fdouble80.0dchar2‘\u0000’boolean4false注意:这里在bo

2022-03-22 09:03:29 196

原创 面试题系列(二):mybatis的Mapper接口实现过程和字符串组装实现方式

这篇文章说的到内容不是很难,但是在实际开发场景中经常用的,并且很容易会被问到的。下面一起看看今天要说的两道面试题。Mapper只是一个接口并没有具体的方法实现,它是如何实现数据操作的?在mybatis中对Mapper虽然是接口类,没有具体的实现,但是在mybatis的执行过程中,通过了动态代理的方式生成了对应的代理对象,在mybatis的binding包下面有主要的几个类分别是MapperMethod、MapperProxy、MapperProxyFactory和MapperRegistry。在Mapp

2022-03-22 09:03:20 873

原创 面试题系列(一):数据的比较和基本类型的拆装箱

面试题系列早就想着要写,但是一直没有下笔,感觉不好写,因为写的浅了没有意思,也没有多大的参考价值,如果写的深了,一篇博客的篇幅只够写一道面试题,这个大篇幅的写就失去了写面试题系列的意义,还不如一篇一篇的写。纠结了很久还是决定开始写,在写的过程中细节的部分能省就省,尽量言简意赅,留给看的人更大的思考空间。在此立碑,如果细节不到的,请多多包涵。==和equals的区别这个问题博主曾经在刚入行的时候被问过,简直被问的一脸懵逼,现在回头来看,其实并没有那么难,只要知道==是比较地址值,equals比较是equa

2022-03-22 09:03:11 100

原创 项目发布成功、失败,Java项目来实现邮件通知相关人员,实时反馈提醒信息

场景说明在开发的流程中必须涉及的项目的部署发布,这个过程也肯定会有成功、失败,作为开发能够实时的得到反馈是很有必要的,在不同的公司里采用的提醒方式不同。在说明下面的方案前,需要首先说明一下基本应用的场景。纯后台应用,现在项目基本都是前后端分离,因为一个前端服务可能会对应多个后端服务的支持,随着整个开发大环境的完善和技术的成熟,之前那种前后端耦合的应用很少,这里不在做具体的考虑。项目的基本架构是Spring+Spring MVC+Mybatis,其实主要是Spring+Spring MVC,因为

2022-03-22 09:03:02 606

原创 项目上线,旧数据需要修改,写SQL太麻烦,看Excel配合简单SQL的强大功能

实际场景A项目前期上线后有两张表,第一张表里面有订单的基本信息(重点:没有订单完成时间),第二张表记录订单的流程节点信息,如买车这个订单,走的流程节点有交定金、交首付、贷款申请、贷款审批……取车,每个节点都有开始时间和完成时间记录,当所有节点都完成后,会自动将订单的状态更新为完成状态。后期迭代需求生成报表,需要统计订单整个执行流程的时间。那么这个时候的基本构思就是取订单的创建时间为开始时间和最后一个节点的完成时间作为结束时间计算执行流程时间。这样不太方便,为了更好的利于报表统计,需要在订单表中加一个完成时

2022-03-22 09:02:49 376

原创 windows环境下使用java -jar命令运行jar包出现假死问题

在一次部署的时候,遇到使用windows系统作为服务器的,按照正常的方式是打开doc窗口,定位到对应jar包所在的目录,直接使用java -jar运行jar包。java -jar xxx.jar后来就出现了灵异事件,刚启动的时候运行的还是好好的,但是过一段时间,通过远程请求这个服务就发现一直出现请求超时。检查网络、端口都是通的,证明这个服务是运行正常的。后来经过问题的排查和咨询其他有windows部署经验的同事才发现问题。问题所在当在windows系统运行jar包服务时,使用doc窗口直

2022-03-22 09:02:32 3107

原创 java基础位运算基本原理分析

位运算是编程语言的基础,在看源码的时候会看到很多位运算代码,但是在项目代码中很少会看到位运算。因为应用代码中,有很多判断和计算都可以直接用数值的判断和计算完成,没有必要去用位运算,以至于这些基础的东西慢慢用的越来越少,慢慢也就忘了。导致的一个结果就是看源代码很费力,因为大量的位运算逻辑,看不懂。作为程序员感觉数据位运算是非常必要,有点如下:看源码时能够更好的理解位运算更接近计算机的习惯,执行的效率会更高装逼利器,在项目中使用位运算,体现逼格N种基本的位运算位运算 – 与运算符(&)

2022-03-21 08:58:14 154

原创 Spring注解@Async和@Transactional失效问题究竟是什么原因,强势解释一波

提前说说项目中涉及到的代码我都会上传到码云(gitee)或者github上,提供给大家下载参考,文中就以最简单的方式说明执行过程。源码的地址在文末哦!问题场景重现场景一:Spring的异步执行注解@Async,在调用这个方法的时候发现,不对劲,耗时的逻辑我已经加入到异步取做了,怎么接口请求的响应这么慢,赶紧看日志,懵X,加了异步注解,却没有异步执行。场景二:在项目中用到@Transactional注解实现事务是必须滴,如果你还在用xml配置,那我只能说……。但是有时候我们会发现在方法上加了@T

2022-03-21 08:58:05 2078

原创 Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来

场景小计之前项目都是使用hibernate-validator来校验参数,但是实际上会出现一些小问题,就是校验规则都是通过注解的方式来完成,这样如果项目上线了,这个参数校验规则就没办法修改,如果出现校验规则问题,就必须修改后重新紧急上线(之前手机号码格式校验就出现过这个问题,因为新的号段不支持)。为了适应动态配置校验规则,在新起的项目我们就不再使用hibernate-validator校验规则,而是自己写个小功能来实现。附加说明:如果在项目中对校验规则修改要求不是很高的,建议不要使用动态,乖乖使用hib

2022-03-21 08:57:52 1184

原创 拼接字符串String、StringBuilder、StringBuffer比较

字符串拼接,很简单的一个操作,JDK给出了几种不同的拼接方法,还提供了对应封装类。早在JDK1.0的时候就提供了StringBuffer这个类用来做字符串的拼接,为了多线程下的线程安全问题,在StringBuffer类中的方法上都加了synchronized锁,这种考虑是没有问题的。后续为了提高单线程下(不存在线程安全问题)字符串的拼接效率,JDK1.5提供了StringBuilder类,这个类里面的方法是完全放开的,没有锁竞争对性能的消耗。在公司的实际开发中,很多人知道用StringBuffer和Str

2022-03-21 08:57:40 511

原创 ConcurrentHashMap简单的实现思想理解

关于说ConcurrentHashMap的文章很多,本博客也有转载这样的文章,但是总体觉得都是过于偏重源码的说明。没有很明确的结构图来让我们从整体上理解源码的实现过程。毕竟人都是偏向于懒,博客中源码过于太多,理解起来困难,再加上这种源码分析的篇幅很长,因此能真正看完理解的确不多(个人理解)。所以这篇文章里面将不贴出源码,完全通过图来理解ConcurrentHashMap的理解(更直观)。ConcurrentHashMap存储结构ConcurrentHashMap的存储结构在JDK7和JDK8两个版本是有

2022-03-21 08:57:24 126

原创 发送邮件的JavaMail和Spring提供的MailSender比较分析

发邮件,项目的必备功能之一,如果一个稍微模块化一点的公司,一般会单独出来一个项目专用来做公司的发送信息的功能,当然这个发送信息中不止包含发邮件,还会有短信、APP push等。这篇聊聊推送邮件。在以前的开发中,公司用Java mail的比较多,由自己来写邮件的组装和发送功能,但是Java mail使用操作比较繁杂,后来渐渐的都开始使用spring提供的JavaMailSender工具来实现,用过的都知道,这叫一个爽,执行几个set、add操作,一个复杂的邮件就可以发送出去,但是在业务代码中发送邮件的位置很

2022-03-21 08:57:14 1896

原创 ThreadLocal遇到线程池出现数据问题和解决方案

ThreadLocal开发中常用,通过ThreadLocal操作数据实现线程之间的隔离,保证线程之间不会因为操作同一数据导致数据安全问题。但是这种隔离是有适用范围的,也就是说在某些特定的情况下还是会出现数据安全问题的。这种特定情况下就是使用到线程池,并且在ThreadLocal使用前后没有做数据清理,就会导致安全问题,下面来看看出现的情况和具体怎么去解决。ThreadLocal正常使用一个main方法的主线程,再创建一个新的线程作为模拟线程,同时操作ThreadLocal,通过在打印对应的输出值来看Th

2022-03-21 08:56:59 3083 5

原创 项目中手机、姓名、身份证信息等在日志和响应数据中脱敏操作

项目日志打印请求的入参和出参,用来跟踪数据信息,方便根据日志信息排查问题,在涉及到用户敏感信息的时候,为了安全的考虑,不能直接将这些信息直接输出到日志文件中,需要做脱敏操作。如果这个脱敏操作放在项目的业务代码中,只要出现需要脱敏的信息就进行一次脱敏操作,这样会有很多脱敏的代码冗余;如果将脱敏的逻辑代码提出来,在需要脱敏的位置调用此段逻辑代码,也会比较麻烦,有可能会造成漏掉的问题,写起来也是很麻烦。这里最好的方法莫过于使用切面,通过对请求的出参入参进行切入,并将敏感信息做脱敏操作后输入到日志文件中。这样的好处

2022-03-21 08:56:48 1246

原创 xshell、CRT上使用vbscript更高效连接定位到服务器以及目录、数据库

这篇文章分享一个好用的脚本,用在xshell和CRT上,真的很爽,也是简单的不要不要的。当负责的项目有多个环境,看日志需要到Linux环境下,数据库也不能用navicat等工具连接,这个时候只能使用xshell或者CRT进入对应的机器,但是这里存在的麻烦就是机器太多(测试环境、演示环境、生产环境),每次都要用ssh命令在不同的机器之间跳来跳去,很麻烦。因此这里可以用vbscript来让这些操作不再麻烦,直接自动操作即可。vbscript在xshell软件上的脚本vbscript在xshell和CRT上

2022-03-21 08:56:37 737

原创 轻松了解jdk8之lambda表达式常用API

这两年,基本所有的公司都由之前的JDK7转战JDK8,还记得上次去饿了么面试给的面试题,第一题就是用lambda实现一个功能,当时对lambda表达式基本是零了解,然后……。现在随着慢慢的使用,也慢慢了解lambda表达式真的是一个好东西,可以大大的简化以前的代码,下面在说常用lambda表达式的时候,会附上对应之前需要的代码量。相信你也会喜欢上它的。一组对象的分组场景:Collection下的用户对象集合,根据用户的年龄分组。代码:List<User> users = new Ar

2022-03-21 08:56:20 395

Java实现分布式雪花ID生成代码

在大数据量的时候,会涉及分库分表,使用自增ID可能会导致ID重复,使用UUID是无序的,在创建主键索引的时候会频繁的修改索引树内的索引位置,让索引更新的效率很低等问题。索引此时就引入了雪花ID,它既能保证ID的有序性,又保证了ID的唯一性,兼顾自增ID和UUID的共同优点。 雪花ID的优点: 高性能高可用:生成时不依赖于数据库,完全在内存中生成。 容量大:每秒能生成数百万的自增ID。(理想状态可生成409.5万) ID自增:存入数据库中,索引效率高。

2022-04-11

空空如也

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

TA关注的人

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