- 博客(244)
- 资源 (15)
- 收藏
- 关注
原创 Java 8 Stream API:强大而灵活的数据处理流水线
Stream 中⽂称为 “流”,通过将集合转换为这么⼀种叫做 “流”的元素队列,通过声明性⽅式,能够对集合中的每个元素进⾏⼀系列并⾏或串⾏的流⽔线操作元素是特定类型的对象,所以元素集合看作⼀种流, 流在管道中传输, 且可以在管道的节点上进⾏处理, ⽐如 排序,聚合,过滤等操作操作详情数据元素便是原始集合,如list,set,map生成流,可以使串行流stream或者并行流parallelStream中间操作,可以使排序,聚合,过滤,转换等。
2024-09-09 09:00:00 777
原创 Java 8的关键新特性:Lambda表达式、Base64编码、日期时间API及Optional类
自从Java 8发布以来,它就标志着Java编程语言的一个重要转折点。这一版本不仅带来了诸多功能上的改进,还引入了一些革命性的特性,彻底改变了开发者编写代码的方式。Java 8的设计目标是让语言更加简洁、更具表现力,并且能够更好地适应多核处理器时代的需求。本文将探讨Java 8中最值得关注的新特性,包括Lambda表达式、Stream API、新的日期与时间API以及Optional类等。
2024-09-08 21:00:00 1010
原创 图形验证码从设计到实现
获取前端传过来的手机号以及图形验证码,根据ip以及网络地址相关西信息获取缓存key,根据key获取验证码,然后比较验证码是否一致,如果一致验证通过,删除缓存,执行发送短信相关业务。获取验证码的接口非常简单,调用验证码配置类获取验证码,将获取到的验证码缓存到redis中并设置过期时间,然后调用配置类传入验证码获取到图形验证码,通过IO流返回。上述我们主要讲述了用户登录获取验证码的逻辑,用户注册,找回密码逻辑都是差不多一样的,只是后续的处理不太一样,在这里就不再过多讲述了。再去看下校验验证码的这个接口,
2024-09-07 20:30:00 748
原创 揭秘滑块图形验证码:从设计到实现的全过程
本文详细介绍了滑块图形验证码的生成逻辑及其后端实现细节。首先,根据项目需求选择合适的背景图片,并将其存储于项目的ClassPath或其他如云存储服务中。接着,服务器随机选取一张图片作为背景,并在其上随机裁剪出一个区域作为滑块,即所谓的“缺口”。此过程中的缺口参数(如位置、大小)是随机生成的,以此增加验证码的安全性。当用户请求需要验证的页面时,服务器将背景图与滑块图及验证所需的相关参数发送至前端。前端展示这些图像,并允许用户通过拖动滑块来填补缺口,以完成验证。
2024-08-26 08:54:28 668
原创 Elasticsearch8.x聚合查询全面指南:从理论到实战
类似于SQL中的GROUP BY操作,根据指定的条件对数据进行分组统计。可以进行嵌套分桶,即在一个分桶的基础上再进行细分。示例:按照手机的品牌进行分桶统计数量,再在小米手机的分桶基础上按照档次进行二次分桶。语法格式指标聚合(Metrics Aggregations)主要用于计算数值字段的统计信息,如平均值、最大值、最小值、求和、去重计数等。示例:计算某个班级、某个学科的最高分、最低分等。语法格式聚合查询的特点嵌套性:聚合查询支持嵌套,即一个聚合内部可以包含别的子聚合,实现复杂的数据挖掘和统计
2024-06-27 20:30:00 1359
原创 ElasticSearch8.X查询DSL语法案例进阶实战
Query DSL主要由两部分组成:查询和过滤。查询部分:用于指定搜索条件和匹配规则。例如,可以使用match查询进行全文检索,term查询进行精确匹配,range查询进行范围匹配等。过滤部分:用于对查询结果进行进一步的筛选和过滤。与查询查询不同,过滤查询不会影响得分计算,只是对结果进行简单的筛选操作。fuzzy查询是Elasticsearch中提供的一种模糊匹配查询类型,用在搜索时容忍一些拼写错误或近似匹配使用fuzzy查询,可以根据指定的编辑距离(即词之间不同字符的数量)来模糊匹配查询词。
2024-06-26 22:15:00 760
原创 深入解析Elasticsearch 8.4.1:Mapping与字段类型实战指南
在Elasticsearch中,Mapping定义了索引中每个字段的类型、属性以及设置。Mapping的作用是告诉Elasticsearch如何索引文档中的字段,包括如何分析字段值以及如何存储它们。分词即使将文本拆分成单独的单次或词项的过程分词是搜索引擎在建立索引和执行查询时的关键步骤,将文本拆分成单词,并构建倒排索引,可以实现更好的搜索和检索效果。分词规则是指如何将文本进行拆分的规则和算法。elasticsearch使用一些列的分词器(analyzer)和标记器(tokenizer)来处理文本内容。
2024-06-25 21:00:00 1349
原创 Elasticsearch 索引与文档操作实践指南
上节我们部署了elasticsearch8.4.1和kibana8.4.1以及ik分词器,本节我们来学习下elasticsearch的相关索引,文档操作。首先我们kinana的主界面找到开发者工具在里面我们来编写相关操作。
2024-06-24 22:18:59 732
原创 实战指南:部署Elasticsearch 8.4.1与Kibana 8.4.1并集成IK分词器
在本实战教程中,我们不仅解决了Docker镜像下载问题,通过配置镜像加速器顺利拉取了Elasticsearch与Kibana的最新镜像,还深入了解了如何自定义网络、优化容器启动参数,以及如何安全有效地启动这两个核心组件。这里有一个小错误,应该是-p 9200:9200 -p 9300:9300,分别将容器的9200端口(HTTP接口)和9300端口(TCP通信端口)映射到宿主机的相同端口,允许外部访问Elasticsearch服务。在Docker中,网络名称是唯一的,用于标识和引用特定的网络。
2024-06-23 20:52:51 1144
原创 XXL-Job实战(千万级短信推送实战)
经过细致的部署与实践,我们不仅成功搭建了基于XXL-Job的分布式短信发送系统雏形,还深入探索了其分片任务的强大功能,为应对双十一等大规模营销活动的短信推送挑战提供了强有力的技术支撑。可以看到,我们控制台也打印了相关日志,说明我们的demo执行成功了。名称就自己取一个就可以了,注册方式我们选择自动注册,也可以手动录入,看自己选择就可以了,选择保存,我们来到任务管理,选择添加任务。下面我们来开发我们的需求,在开发需求之前我们还需要了解下xxl-job中的分片任务,并以此来开发我们的需求。
2024-06-22 21:31:54 1232
原创 XXL-Job实战(一)
简单易用:Timer类提供了简单直观的API,使得开发者能够快速上手,实现基本的定时任务需求。创建一个定时任务只需几行代码即可完成。灵活性:Timer允许你安排任务在指定的延迟后执行一次,或者以固定的间隔重复执行。这对于很多简单的定时任务场景来说已经足够灵活。集成方便:作为Java标准库的一部分,Timer无需引入额外的依赖,可以直接在任何Java项目中使用,便于维护和移植单线程执行:Timer使用一个后台线程来执行所有安排的任务,这意味着所有任务都是串行执行的。
2024-06-20 21:31:39 922
原创 SpringBoot运行流程源码分析------阶段三(Spring Boot外化配置源码解析)
首先看一下ApplicationArguments接口的具体方法定义及功能介绍。//返回原始未处理的参数(通过application传入的) String [ ] getSourceArgs();//返回所有参数的集合,如参数为:--foo=bar --debug,则返回【"foo","debug"】 Set < String > getOptionNames();//选项参数中是否包含指定名称的参数 boolean containsOption(String name);
2023-10-24 23:25:16 710
原创 SpringBoot运行流程源码分析------阶段二(run方法核心流程)
在上面的代码中,实例化监听器需要有一个默认的构造方法,且构造方法的参数为Class
2023-08-07 22:28:12 491
原创 算法------排序算法------插入排序法
插入排序法是将数组中的元素逐一已排好序的数据进行比较,先将前两个元素排好序,再将第三个插入适当的位置,以此类推,重复此步骤,知道排完序为止。
2023-06-26 21:48:47 201
原创 算法------排序算法------选择排序法
选择排序法也算是枚举法的应用,就是反复从未排序的数列中去除最小的元素加入到另一个数列中,最后的结果即为已排序的数列。选择排序法可以使用两种方式排序,即在所有的数据中,若从大到小排序,则将最大值放入第一个位置;若是从小到大排序,则将最小值放入到第一个位置。
2023-06-25 23:34:11 142
原创 算法------排序算法------冒泡排序法
冒泡排序法又称交换排序法,原理是从第一个元素开始,比较相邻元素的大小,如大小顺序有误,则对调后再进行下一个元素的比较,一次扫描之后可以确保最后一个元素位于正确的位置。接下来进行的第二次扫描,以此类推知道所有元素排序完成为止。例如下面的示例:由上图可知,5个元素的冒泡排序必须执行5-1次扫描,第一次扫描需要比较5-1次,第二次比较5-1-1次,以此类推,共比较4+3+2+1=10次。
2023-06-24 22:02:37 137
原创 SpringBoot构造流程源码分析------阶段一
在入口类主要通过SpringApplication的静态方法–run方法进行SpringApplication类的实例化操作,然后再针对实例化对象调用另一个run方法完成整个项目的初始化和启动。本章节重点围绕此过程的前半部分(即SpringApplication类的实例化)来讲解。//创建SpringApplication对象并执行某run方法 return(new SpringApplication(primarySources)) . run(args);
2023-06-20 22:39:25 789
原创 SpringBoot核心运行原理解析之------@Conditional条件注解
在SpringBoot核心运行原理解析之------@EnableAutoConfiguration文档中我们完成了自动配置类的读取和筛选,在这个过程中已经涉及了像@ConditionalOnClass这样的条件注解。打开每个自动配置类,都会看到@Conditional或其衍生的条件注解,本节我们来认识下@Conditional注解。
2023-05-17 21:11:52 758
原创 SpringBoot核心运行原理解析之-------@EnableAutoConfiguration
下面通过一张图来从整体了解AutoConfigurationImportSelector的核心功能及流程,然后再对照源码看具体的功能实现。当AutoConfigurationImportSelector被@Import注解引入之后,它的selectImports方法会被调用并执行其实现的自动装配逻辑。selectImports方法涵盖了组件自动装配的所有的处理逻辑。if(!if(!
2023-05-16 15:54:12 4371
原创 如何理解ThreadLocal
也就是说,调用ThreadLocal的set()方法存储的本地变量在具体线程的内存空间中,而ThreadLocal类支提供了set()和get()方法来存储和读取本地变量的值,当调用ThreadLocal类的set()方法时,把要存储的值存储在调用线程的threadLocals变量中,当调用ThreadLocal类的get()方法时,从当前线程的threadLocals变量中获取保存的值。保存数据时传递的key为当前ThreadLocal的this对象,而传递的value为调用set()方法传递的值。
2023-04-22 21:35:10 496
原创 如何理解线程池
当调用Executors.newSingleThreadExecutor方法创建线程池时,表示创建只有一个工作线程的线程池,即线程池中只有一个线程执行任务,能够保证提交到线程池中的所有任务按照先进先出的顺序,或者按照某个优先级的顺序来执行。如果在向线程池提交新任务时,线程池中无空闲线程,则新创建线程来执行任务。在调用shutdownNow()方法关闭线程时,线程池不能接受新提交的任务,也不能继续处理阻塞队列中的任务,同时,还会中断正在执行的线程,使得正在执行的任务被中断,线程池立即关闭并抛出异常。
2023-04-19 22:55:50 381
原创 如何理解CAS
ABA问题简单来说就是一个变量的初始值为A,被修改为B,然后再次被修改为A了。在使用CAS算法进行检测时,无法检测出A的值是否经历过被修改为B,又再次被修改为A的过程。
2023-04-08 15:09:53 807
原创 如何理解Lock
JDK层面提供了Lock锁都是通过Java提供的接口来手动解锁和释放锁的,所以在某种程度上,JDK中提供的Lock锁也叫显示锁、JDK提供的显示锁位于java.util.concurrent.locks包下,Lock接口的源码如下:lock()方法:阻塞模式抢占锁的方法。如果当前前程抢占锁成功,则继续向下执行程序的业务逻辑,否则,当前线程会阻塞。直到其他抢占到锁的线程释放锁后再继续抢占锁。lockInterruptibly()方法:可中断模式抢占锁的方法,当前线程在调用lockInterruptibl
2023-04-05 21:21:46 342
原创 如何理解AQS
这里需要结合acquireQueued()方法理解,当线程被唤醒后,会进入acquireQueued()方法中的if(p==head && tryAcquier(arg))逻辑判断,当条件成立是,被唤醒的线程会将自己所在的节点设置为head,表示已经获取到资源,此时,acquire()方法也执行完毕了。如果CAS操作设置成,则唤醒队列中的后继结点。在同步队列中,如果当前线程获取资源失败,就会通过addWaiter()方法将当前线程放入队列的尾部,并且保持自旋的状态,不判断自己所在的节点是否是队列的头结点。
2023-03-24 21:30:06 835
原创 如何理解Synchronized
synchronized是基于JVM中的monitor锁实现的,jdk1.5版本之前的synchronized锁性能较低,但是从jdk1.6版本开始,对synchronized锁进行了大量的优化,引入了锁粗化,锁消除,偏向锁,轻量级锁,适应性自旋等技术来提升synchronized锁的性能。无论synchronized修饰方法,还是修饰代码块,底层都是通过JVM调用操作系统的Mutex锁实现的,当线程被阻塞时会被挂起,等待CPU重新调度,这会导致线程在操作系统的用户态和内核态之间切换,影响程序的执行性能。
2023-03-22 18:14:50 301
原创 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct..........
测试服务器接口遇到的问题,记录下翻译是嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造“com.chilwe.dtos.socket.down.FivePower”的实例(不存在类似默认构造函数的创建者):无法从Object值反序列化(不存在基于委托或属性的创建者)原因是我在该实体类中添加了一个为了方便实例化该类用的构造函数,导致JVM不会添加默认的无参构造函数,而jackson的反序列化需要无参构造函数,因此报
2023-02-06 18:35:45 3813
原创 Windows 本地启动rocketmq报错-找不到或无法加载主类
记录下,windows安装rocketmq,启动mqbroker.cmd报错错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_321\lib\dt.jar;C:\Program解决方法找到安装rocketmq的安装路径bin目录下的runbroker.cmd文件打开使用英文双引号包起来再重启就好了...
2022-07-01 16:22:32 1810 2
原创 java.lang.OutOfMemoryError: Java heap space
项目部署在服务器上,上传图片的时候出现的问题记录下问题:java.long.OutOfMemoryError:java heap space(系统内存不足)修改启动参数
2022-06-29 11:05:11 607
原创 http常见的状态码
100 客户端应当继续发送请求101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回201(已创建):请求成功并且服务器创建了新的资源202(已创建):服务器已经接收请求,但尚未处理203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源204(无内容):服务器成功处理请求,但没有返回任何内容205(重置内容):服务器成功处理请求,但没有返回任何内容..
2022-02-28 22:47:04 85
原创 分布式事务
祝所有的coder节日快乐今天简单介绍下什么是分布式事务问题分析根据自动选课(就是说在在网上买课学习,支付订单后然后讲你的课程添加到你的学习课程中去,这里面涉及到了两个服务,一个是订单服务,一个是学习服务,而且整个系统是分布式系统,里面包含多个服务)的需求,分析下用户支付完成后会将支付状态及订单状态保存到数据库中,由订单服务去维护订单数据库,而学生选课信息在学习中心数据库,由学习服务去维护学习中心数据库的信息,下图是系统结构图:如何实现两个分布式服务(订单服务,学习服务)共同完成一件事即订单支
2021-10-24 23:23:47 286
原创 Consider defining a bean of type ‘org.springframework.web.client.RestTemplat
记录下几天敲代码遇到的小问题Description:Field restTemplate in com.lifly.controller.FreemarkerController required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.Action:Consider defining a bean of type 'org.springframework.web
2021-09-20 11:37:13 8031
原创 Java实现腾讯云短信服务API接口
java对接腾讯云短信,通过api发送短信Api秘钥正文模板前提条件已开通短信服务,具体操作请参见国内短信快速入门如需发送国内短信,需要先购买短信套餐不过这个不要,初次注册就会有免费的100短信使用权已准备依赖环境:JDK 7 及以上版本。已在访问管理控制台 >【API密钥管理】页面获取 SecretID 和 SecretKey。SecretID 用于标识 API 调用者的身份。SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥,SecretKey 需妥善保
2021-09-16 15:29:37 885
原创 Error creating bean with name ‘servletEndpointRegistrar‘ defined in class path resource
记录一下今天在写为服务项目碰到的错误,如下面所示,只知道创建Error creating bean with name ‘servletEndpointRegistrar’ defined in class path resource失败,在网上也找了一些解决方法,最多的解决答案是说缺少jdbc依赖,要么就是说数据库配置文件出错了,我也比对了下数据库没错,也没缺少jdbc依赖,这说明我的数据库和依赖都没错,我就又比对了下其他service服务,发现就是配置文件多引入了个配置文件[${project.na
2021-09-10 23:35:55 6660 1
原创 通过sailing项目获取手机验证码
今天给大家分享个短信验证码项目sailing该项目主要是生产验证信息以及验证码的校验sailing项目我上传到了自己的资源上,地址为大家可以直接下载,使用idea直接打开运行,然后自己可以再创建一个springboot项目,配置下发送短信验证所需要的参数,访问我使用的是swagger接口文档来访问的,如果大家感兴趣,可以跟着我的步骤来实现验证码的生成及校验,实现步骤如下:运行sailing项目新创建springboot项目引入所需要的依赖yml配置文件配置swagger配置类编写获取短
2021-09-09 22:39:37 665
原创 七牛云对象存储实现文件的上传与下载
今天记录下通过七牛云文件存储来实现文件的上传与下载文件上传 /** * 上传 * @throws FileNotFoundException */ private static void upload() throws FileNotFoundException { //构造一个带指定 Region 对象的配置类 Configuration cfg = new Configuration(Region.huanan());
2021-09-08 21:48:58 3902
原创 mybatis-plus练习demo从swagger接口文档-controller-service-mapper-sql层层关联,找到就是学到哦
mybatis-plus 代码流程编写使用swagger接口测试创建springboot项目添加相关依赖sql文件编写实体类编写相关配置文件的编写编写业务逻辑测试创建springboot-mybatis-plus项目项目目录添加相关依赖<dependencies> <dependency> <groupId>com.baomidou</groupId> <art
2021-09-06 23:13:57 535 2
工行icbc对接demo
2023-05-17
jdkapi1.8.rar
2021-03-29
比较实在的五子棋.cpp
2020-06-03
诊所信息管理系统.cpp
2020-04-19
c++分数计算器课程大作业.rar
2019-12-19
关于hibernate的查询,事务概念,复杂表的关系
2018-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人