自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 收藏
  • 关注

原创 2023校招,2024校招,社招Shein,大量HC,使用内推码直达,流程快速

广州,深圳,南京,大量开发岗位,包含Java开发岗,前端开发岗大数据开发岗位,产品岗位,测试岗位等等,大量hc,欢迎大家投递Shein,打造全球化的快时尚跨境电商品牌。

2023-07-09 16:42:58 286

原创 PageHelper分页合理化reasonable源码分析

PageHelper分页合理化reasonable,PageHelper死循环问题,PageHelper源码解析

2022-08-29 22:24:04 3665 1

原创 @EnableConfigurationProperties和@ConfigurationProperties用法及注意事项

@EnableConfigurationProperties中引用的类一定要加@ConfigurationProperties这个注解,并且不需要再添加@Component注解,不然会导致被@ConfigurationProperties注解的类,在容器中实例化了2个bean对象:1、被@Component实例化注入到容器中,2、被@EnableConfigurationProperties实例化注入到容器中,此时如果我们使用@Aware获取Ltbus类的bean对象,会导致报错...

2022-08-16 22:59:46 1519

原创 MDC实现线程池tranceId全链路传递

判断当前线程对应MDC的上下文是否存在,存在则是子线程,设置MDC中的traceId值,不存在则生成新的tranceid,再执行run方法,执行结束之后清除线程tranceId。1、首先定义一个自定义线程池类继承ThreadPoolTaskExecutor。打印结果tranceid均一致,快动手试试吧。2、编写tranceid包装工具类。3、初始化自定义线程池。4、接下来进入实战环节。...

2022-08-14 17:19:53 1972

原创 两种白名单限流方案(redis lua限流,guava方案)

redis+lua限流技术方案guava限流技术方案

2022-07-31 17:03:18 614

原创 java死锁如何排查

java死锁排查jconsolejps,jps -l,jstark

2022-07-31 16:48:38 1890

原创 springboot事件event的使用(关键词:ApplicationEvent,@EventListener,publishEvent)

spring事件,事件监听,@EventListener

2022-06-12 22:58:05 1451

原创 ES分片副本设置及集群部署

es分片副本设置,es集群部署,es增删改查在集群中的流程,es优化

2022-04-10 17:14:26 13758 1

原创 mysql数据库表锁、行锁

mysql的2种常见的锁:表锁和行锁间隙锁的危害

2022-03-14 01:09:40 5190

原创 当我从jdk8过渡到jdk17有哪些明显的变化

当我从jdk8过渡到jdk17有哪些明显的变化1、jshell的便利2、var 语法糖的引入注:文中很多功能并不是jdk17才有的新功能,而是阐述我在jdk8过渡到jdk17的过程中,对我编程带来的新特性的感受 ~1、jshell的便利jshell并不是jdk17才有的功能,有些时候你会爱上他,例如有时候想写一段测试的代码,你得打开idea,然后在原项目里面建一个类并在main方法里面写下你的demo,写完还要编译运行,但是有了jshell,你只需要双击打开,就可以直接在界面进行编程,而且功能十分强

2022-01-10 00:07:35 3924

原创 java接口的幂等性及解决方案

一、什么情况下需要幂等用户多次点击按钮用户页面回退再次提交微服务相互调用,由于网络问题,导致请求失败,feign触发重试机制二、幂等性解决方案2.1 token机制(令牌)即验证码机制,例如页面点击提交按钮之前,会先去服务端获取token,服务端同时也在Redis中保存这个token数据,并将token显示到前端(验证码),让用户正确填写验证码并发起请求,此时后端便会校验token是否一致,一致的话即是通过并在Redis中删除该token,当用户还是携带上次的验证码多次提交,此时服务器判断验证码

2021-11-06 23:31:54 3076 1

原创 es搜索同义词近义词技术方案

方案一:使用同义词文件,在es索引中定义"synonyms_path",并设置updateable为true动态更新同义词,但这个需要运维一起配合,当有新增的同义词时候,也需要运维帮我们添加进这个文件中,维护比较不方便PUT /myIndex{ "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "updatea

2021-11-03 19:15:13 5067 1

原创 java异步线程池配置

一.异步:1)初始化 线程 的四种方式:a:继承 Thread 类b:实现 Runnable 接口c:实现 Callable 接口 + FutureTask 类(可以拿到 返回结果,可以处理异常)d:线程池:-1.实际开发中,以上三种,线程启动的方式都不使用,将所有的多线程一步任务,都交给线程池执行。-2.整个系统中,线程池只有一两个。每个异步任务,直接提交给 线程池,让他自己去执行就行。-3.代码示例:public class ThreadTest01 { public

2021-09-29 16:12:21 1065

原创 es如何修改es索引字段类型 reindex

今天因为上线之前,忘记提单先把es的索引新增的几个字段先建好,导致需求上线后,一些触发es推送数据的接口,使得es自动根据数据类型创建索引机制生效,原本我打算增加的mapping字段是数组keyword类型的,但是es自动匹配创建类型为long,导致索引作废,可是这个es索引24小时都有人在使用,如果粗暴删除重建索引,再全量同步数据,会导致一段时间国内外用户查询数据受影响,这个操作估计也会上传比较严重的故障等级,那有什么解决方法吗?–当然如果你们系统没有使用es别名,那么暂时先按以下方式处理,后面提出了后

2021-09-03 00:08:51 5169 2

原创 Mysql:企业中的SQL规范

mysql企业中的使用规范

2021-08-15 15:38:55 232

原创 详细:idea2021自定义注解模板live Templates

在编写代码的时候,我们都会给创建的类或者,所写的方法,又或者是变量添加一个注解,以下图为例:图中一共3种注释模板,其中第一种和第三种显然不是自己每次去添加的,而是使用idea快捷键自动生成的注解模板,那么我们盖怎么实现呢?1.在idea设置中搜索 live Templates2、可以点击最右边的+号选项2创建一个自定义的快捷键模板,这里使用user,接着还是再点+,选择选项1,开始创建一个自定义的快捷键模板3、以方法注解为例子我们想要每次敲一个再加一个回车键,就自动生成一个方法注解,例如我

2021-08-05 00:03:14 3372

原创 linux docker mysql容器 表名大小写敏感失效-有效解决方法

今天遇到启动程序时遇到一个问题:报错详情是指找不到该表,日志中表名是大写的,但是数据库存在小写,所以定位问题就是linux服务器上的mysql没有设置大小写不敏感,我们如果安装win版本是默认不敏感的,而我是linux上docker启动的mysql容器,所以具体解决如下:如果容器有挂载,那么直接查看过载路径下的文件,例如:其中,我一开始挂载配置只有一个my.conf,于是乎看了网上的解决办法在该文件加了lower_case_table_names=1,但是重启无效,于是我怀疑没有设置成功,进入容器查

2021-07-19 02:23:39 685 2

原创 设计模式-简单工厂模式例子

public class Factory { public static void main(String[] args) { new OrderPizza(new SimpleFactory()); }}//订购pizzaclass OrderPizza{ SimpleFactory simpleFactory; Pizza pizza; public OrderPizza (SimpleFactory simpleFactory){

2021-07-12 22:57:54 284

原创 设计模式-单例模式的8种实现

//1、饿汉式(静态变量)class Singleton1 { //构造器私有化 private Singleton1() { } private final static Singleton1 instance = new Singleton1(); public static Singleton1 getInstance() { return instance; }}//2、饿汉式(静态代码块)class Singleton2

2021-07-11 00:33:51 107

原创 (最新)idea git合并多条提交成一条commit

很多情况,我们在开发过程中并不是一次完成开发就commit然后push,我们可能因为一些事情需要切换分支,所以需要在本分支先commit一下demo,这样会导致我们明明一个功能的开发却分为了很多次commit,那么,如何利用idea将多次提交的内容合并成一次提交?如图,我在开发中,同个功能的开发,提交了2次,现在我想把这2次提交合并成一次,首先,我们选择第一次(最早)提交的log,右击选择(如下图)右击最新一次(最后)的提交,选择Fixup,合并到上一次提交中这时,新的提交就合并到旧的提交了,此

2021-07-04 12:09:29 5410 4

原创 InnoDB由行到页再到索引

本文将从我们从底层讲一讲mysql中InnoDB的原理结构,从行讲到页,再讲到索引,看完这篇文章,我们讲对索引有一定的了解,对我们平时写sql和进行慢sql优化有很大的帮助。一、行MySQL有多种行存储格式,5.7之后默认是Dynamic,他和之前版本默认的compact行格式基本相同,我们先看一下compact行格式的结构其中记录的真实数据就是我们平时通过select语句看到的表数据,但是表中的每一行数据在底层还有额外的存储信息,例如变长字段列表:变长字段实际占⽤字节数按逆序排列,因为有一些列

2021-06-12 16:33:38 548

原创 java通过key判断map中是否containsKey一个对象(遇到的坑和解决办法)

其实看标题就知道是map在键值匹对时候是要经过hash和equal方法,遇到坑主要原因就是key的值明明是一样的却找不到他对应的value现在进行一个bug的复盘

2021-06-09 23:08:10 2888 2

原创 springboot整合redis使用scan代替keys方案

一、为什么使用scan代替keys?·因为redis是单线程的,使用keys命令,如果redis中的key非常庞大,那么这条命令执行时间非常长,这个时候就会阻塞到其他命令的执行,所以要redis也提供给我们另一个scan命令来解决这种常见的场景,二、scan有什么优势呢?scan命令的时间复杂度虽然也是O(N),但它是分次进行的,不会阻塞线程。 scan命令提供了limit参数,可以控制每次返回结果的最大条数。这两个优势就帮助我们解决了上面的难题,不过scan命令也并不是完美的,它返回的结.

2021-04-07 00:21:29 3517

原创 es嵌套排序,es按照数组对象排序

最近在开发中遇到一个es排序的问题,大概说一下项目需求,一张图片解析结果可以有很多主色调,例如白色、粉色、红色等颜色的占比,我们将所有的图片都进行解析,每张图片存最多5个主色调的颜色以及他们的占比到es中,用户可以通过筛选颜色主色调,来挑选他们想要找的图片,并通过占比降序,这里es就需要一个字段存储一个数组结构的主色调信息。数据结构大致如下:主色调信息:[{ "颜色": "白色", "占比": "0.123456"} { "颜色": "黑色", "占比": "0.22...

2021-04-01 22:34:05 2370 1

原创 Hutool5.x工具包使用

首先,要明白一点hutool工具包的出现就是要避免开发中的重复造轮子,所以可以说糊涂工具包是敏捷开发的福音但是,hutool工具包也有一些方法的确存在着性能问题,并不是所有企业都能接受hutool的大规模使用,但是国内也有很多企业使用hutool,包括我所在的实习公司我其实最想要说的一点就是,hutool固然强大,但是术业有专攻,像hutool的id生成器,json转换,excel等等,雪花算法生产id建议自己写包装一个,json转换使用主流的fastJson(Gjson)、easyPOI等来操作,特.

2021-02-06 22:40:31 1199

原创 rabbitMq高级(ttl过期时间,死信队列,延时队列)一文透彻springboot篇

一、过期时间TTL1、设置队列TTL过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息将自动被删除。RabbitMQ可以对消息和队列设置TTL。目前有两种方法可以设置。第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。第二种方法是对消息进行单独设置,每条消息TTL可以不同。如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。消息在队列的生存时间一旦超过设置的TTL值,就称为dead message被投递到死信队.

2021-02-01 01:52:16 430

原创 希音shein(广州)java开发岗面试

第一轮(45分钟左右)1、自我介绍、掌握的技术栈介绍2、项目说一个项目的具体某块业务实现过程项目遇到的最大问题(卡壳),及解决办法3、基础问答聊聊你对封装继承多态各自的理解?error和exception区别?深拷贝和浅拷贝的区别?Linklist和arrayList有什么区别?是线程安全的吗?如何解决?不用Collections呢,自己写的话如何解决?调用hashmap的get/put方法会发生哪些操作?讲一下红黑树和b树和二叉平衡树?Class.forName()和classl

2021-01-27 21:21:09 6801 10

原创 Elesticsearch(es)聚合搜索(入门到精通)4

1 对于分词的field执行aggregation,发现报错。。。GET /test_index/test_type/_search{ "aggs": { "group_by_test_field": { "terms": { "field": "test_field" } } }}{ "error": { "root_cause": [ { "type": "illegal_argume...

2021-01-27 21:17:18 287

原创 Elesticsearch(es)聚合搜索(入门到精通)3

1 基于doc value正排索引的聚合内部原理搜索+聚合,写个示例GET /test_index/test_type/_search{ "query": { "match": { "search_field": "test" } }, "aggs": { "group_by_agg_field": { "terms": { "field": "...

2021-01-27 21:15:53 468

原创 Elesticsearch(es)聚合搜索(入门到精通)2

1 percentiles百分比算法以及网站访问时延统计需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99tp50:50%的请求的耗时最长在多长时间tp90:90%的请求的耗时最长在多长时间tp99:99%的请求的耗时最长在多长时间PUT /website{ "mappings": { "logs": { "properties": { "latency": { ...

2021-01-27 21:15:10 206

原创 Elesticsearch(es)聚合搜索(入门到精通)1

大纲1 两个核心概念:bucket和metricbucket:一个数据分组metric: 就是对一个bucket执行的某种聚合分析的操作,比如说求平均值,求最大值,求最小值select count(*) from access_log group by user_idbucket:group by user_id --> 那些user_id相同的数据,就会被划分到一个bucket中metric:count(*),对每个user_id bucket中所有的数据,计算一个数量2

2021-01-27 21:14:17 766

原创 lombok.javac.handlers.HandleData failed on GC over

Lombok annotation handler class lombok.javac.handlers.HandleData failedlombok.javac.handlers.HandleData failed on GC overjava.lang.OutOfMemoryError:GC overhead limit exceeded其实是项目启动,申请的内存空间太小,把这个值改大点就行,默认是700;改大一点就行了...

2021-01-27 17:32:02 5067

原创 简单了解什么是CDN

简单了解什么是CDN一、什么是CDN1、例如某公司只有中国一个源站,在欧美的国家,若想访问该公司网址,则要通过十几跳才能访问到源站2、加了CDN网络,有很多优点二、CDN主要技术1、静态加速2、动态加速3、防护技术,网站被攻击,不会影响到源站,由于域名是解析到我们提供的解析记录值上,那么被攻击,攻击的量也只会打到我们CDN节点上,所以网站被攻击源站服务器不会受到影响。...

2021-01-23 16:27:37 208

原创 企业idea,git操作--适用小白、实习生

不管是idea还是eclipse,要先理解整个企业整个git的过程,本文先文字讲解小白从分配到需求再到需要git-push的整个流程操作1、首先一般公司一个项目会有4条远程分支,dev开发分支,test测试分支,sit验收分支,mast(release)生产分支。2、小白被分配到一个需求,先git-clone你要开发的项目,再idea打开这个项目。3、项目不止前面提到的4条主分支,还有很多公司其他小伙伴在开发未完成的dev-编号分支4、正确操作是,chectout远程mast主分支到本地.

2021-01-23 16:17:05 281 1

原创 idea2020最实用的快捷键

普遍知道的Alt + Enter 报错解决方案Shift + F6 重命名 可以关联同步修改代码引用该类的地方(超实用)Alt + Ins 封装字段Ctrl + X 删除一行Ctrl + D 克隆一行Shift+Enter 往下空出一行Ctrl + Shift+ A或两下Shift 我经常按错打开,可以按Esc退出ctrl+shift+K git的pushCtrl + W 递进式选择代码块ctrl+alt+L 格式话代码(是个好习惯,但是企业

2021-01-19 01:44:25 362

原创 Docker从0到1实操学习

Docker从0到1实操学习一、docker安装学习官方文档地址:https://docs.docker.com/engine/install/centos/1、先卸载旧版本再下载安装新版本://(1)卸载旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...

2021-01-11 00:17:06 150

原创 企业级java开发中java程序员要知道的编程规范

本文将总结我2021年第一次实习,list出在项目开发中遇到的编程规范问题或者平时未有注意的规范问题,共勉!1. 把字符串常量放在前面

2021-01-06 22:03:50 327 2

原创 windows10下载安装启动nacos:“nacos is starting with cluster“

windows10下载安装启动nacos:alibaba的nacos在win下的启动方式,在zip解压后的bin文件下,cmd窗口运行命令startup.cmd这个时候你会看到这个“nacos is starting with cluster”,意思是以集群方式启动nacos然后无法正常启动,所以我们要以单机方式启动,执行以下命令startup.cmd -m standalone启动正常,访问http://localhost:8848/nacos即可...

2020-12-27 21:27:15 10597 3

原创 jdk8 时间类型转换(LocalDateTime、DateTimeFormatter、Instant、ZonedDate、ZonedTime、ZonedTime、Duration、Period)

/** * jdk8将时间日期的类规范到java.time目录下 * 传统使用SimpleDateFormat * 遵循国际ISO-8601标准,多线程安全 * 推荐jdk8+,开发应用使用 */public class DateTimeTest { @Test public void test1() { /** * LocalDateTime */ LocalDateTime localDateTime..

2020-12-14 16:32:24 630 1

原创 java8 stream流API笔记

即将踏入职场,务必提高自己的代码质量,于是乎再温习了一遍stream流的API调用。// 对象实体类public class User { private String name; private long id; private int age; public String getName() { return name; } public void setName(String name) { this.nam.

2020-12-13 23:52:25 243 4

空空如也

空空如也

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

TA关注的人

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