- 博客(65)
- 资源 (1)
- 收藏
- 关注
原创 【零碎小知识点 】(七)FutureTask 和 CompletableFuture 的使用
特性FutureTask抽象级别低级别,一个可运行的异步任务高级别,一个可组合的异步计算阶段结果获取阻塞式get()支持阻塞get(),更支持非阻塞回调任务组合很难,需要手动编码非常强大且简单 (等)异常处理需要在Callable内部处理,或通过get()抛出链式异常处理 (handle线程控制需手动创建线程或线程池默认使用,也可指定自定义线程池手动完成不支持支持 (complete如果你只是需要一个非常简单的、一次性的异步任务,并且不介意用get()阻塞获取结果,FutureTask。
2025-09-06 00:34:18
903
原创 【零碎小知识点 】(五)筛选字符串列表中长度大于6的字符串并按长度降序排序
这两种方法都会产生相同的结果,但第二种方法使用了更多的内置工具方法,通常被认为更符合函数式编程的风格。:Java 8引入了函数式接口(只有一个抽象方法的接口),允许使用Lambda表达式作为实现。:Java编译器能够根据上下文推断Lambda表达式的参数类型。:Stream API的设计允许链式调用,使代码更流畅易读。:提供了一种更简洁的方式来表示已经存在的方法。
2025-09-05 10:15:29
218
原创 【零碎小知识点 】(四) Java多线程编程深入与实践
这篇文章介绍了Java线程的基础知识和线程安全问题。主要内容包括:1) 线程创建的5种方式(继承Thread类、实现Runnable/Callable接口、Lambda表达式、线程池);2) 线程生命周期和状态转换(NEW、RUNNABLE、TIMED_WAITING、WAITING、TERMINATED);3) 进程与线程的区别;4) 线程安全的三大问题:原子性问题(count++非原子操作)、可见性问题(volatile变量保证可见性)、有序性问题(指令重排导致意外结果)。通过代码示例演示了各种线程操作
2025-09-01 23:32:19
321
原创 【零碎小知识点 】(三)Java集合框架深入与实践
本文深入探讨了Java集合框架的核心组件,重点分析了List接口及其实现类。通过代码示例展示了ArrayList、LinkedList和Vector的基本操作,包括元素增删改查、遍历方式等。文章特别提供了简化版ArrayList的自定义实现,模拟了动态数组扩容机制,揭示了底层数组结构的运作原理。此外,还比较了不同List实现的性能特点,如ArrayList的随机访问优势和LinkedList的插入删除效率。这些内容为开发者理解和使用Java集合框架提供了实用指导,尤其适合需要深入理解集合内部机制的读者。
2025-09-01 19:45:54
188
原创 【零碎小知识点 】(二)Java基础与常用API编码实践
本文提供了Java基础语法和面向对象编程的实践代码示例,帮助提高编码能力。内容包括: 基本数据类型(byte、short、int等)和流程控制结构(if-else、switch、循环)的示例代码 面向对象编程实践: 封装示例:BankAccount类展示属性封装和方法实现 继承与多态:Animal父类与Dog/Cat子类的继承关系展示 抽象类与接口:Shape抽象类和Drawable接口的实现 内部类:成员内部类、静态内部类和方法内部类的使用 代码示例详细展示了Java核心语法特性和面向对象编程的各种概念,
2025-09-01 16:18:45
405
原创 【零碎小知识点 】(一)String为什么不可变
String的不可变性是指一旦创建,其字符序列不可更改。实现方式包括:final类防止继承、private final字符数组确保引用不变、无修改数组内容的方法。这种设计带来四大优势:安全性(防止参数被篡改)、性能优化(支持字符串常量池重用)、哈希值缓存(提升集合操作效率)、线程安全(无需同步)。不可变性使String对象像刻字的石头,修改只能创建新对象,而常量池机制可安全复用相同字符串,节省内存。
2025-09-01 15:02:20
727
原创 【LeetCode 热题 100】(八)二叉树
二叉树递归问题解析 1. 中序遍历(94题) 方法:递归实现"左-根-右"遍历顺序 关键点: 递归终止条件:节点为null时返回 按顺序处理左子树、当前节点、右子树 时间复杂度:O(n),空间复杂度O(h)(树高) 2. 最大深度(104题) 方法:递归计算左右子树高度,取最大值+1 关键点: 空节点返回0 非空节点返回max(左高,右高)+1 时间复杂度:O(n),空间复杂度O(h) 3. 翻转二叉树(226题) 方法:递归交换每个节点的左右子树 关键点: 后序遍历:先处理子树再交换
2025-08-17 22:16:29
995
原创 【LeetCode 热题 100】(七)链表
**本文解析了两个经典链表问题的解法。相交链表问题采用双指针路径补偿法,通过让指针分别遍历两个链表来消除长度差,最终在交点或终点同步相遇,实现O(m+n)时间复杂度和O(1)空间复杂度。反转链表问题使用三指针迭代法,通过动态修改节点指向实现原地反转,同样保持O(n)时间复杂度和O(1)空间复杂度。两种解法均体现了链表问题中指针操作的精妙性,无需额外空间即可高效解决问题。
2025-08-11 22:20:18
994
原创 【LeetCode 热题 100】(六)矩阵
本文解析了两个矩阵操作算法:矩阵置零和螺旋矩阵遍历。 矩阵置零:通过标记法实现原地修改。使用行/列标记数组记录含0位置,第一次遍历标记,第二次遍历置零。时间复杂度O(mn),空间复杂度O(m+n)。示例展示了3x3矩阵的置零过程。 螺旋矩阵:采用边界收缩法模拟顺时针遍历。定义left/right/top/bottom四个边界,依次处理外圈后向内收缩。添加内圈条件避免重复遍历,时间复杂度O(mn)。通过3x3矩阵示例演示了完整的螺旋遍历过程。 两个算法都体现了矩阵操作的典型思路:矩阵置零侧重标记和批量修改,螺
2025-08-09 16:20:11
1267
原创 【LeetCode 热题 100】(五)普通数组
摘要 最大子数组和(Kadane算法) 使用动态规划解决最大连续子数组和问题: 定义pre记录以当前元素结尾的最大和,ans记录全局最大值 遍历时比较"从当前元素重新开始"或"延续前序子数组"两种选择 时间复杂度O(n),空间复杂度O(1) 示例:数组[-2,1,-3,4,-1,2,1]最大和为6(子数组[4,-1,2,1]) 合并区间算法 通过排序和线性扫描合并重叠区间: 先按区间左端点排序 遍历时比较当前区间与已合并区间,决定合并或新建区间 时间复杂度O(n lo
2025-08-09 14:25:02
651
原创 【LeetCode 热题 100】(四)子串
本文介绍了使用前缀和与哈希表统计和为K的子数组数量的高效算法。通过维护前缀和与哈希表(记录各前缀和出现次数),算法在O(n)时间内解决问题:遍历时计算当前前缀和pre,检查哈希表中是否存在pre-k的键,存在则累加对应值到结果。初始化时需设置map.put(0,1)以处理从数组起始开始的子数组。该方法相比暴力解法显著优化了时间复杂度,适用于含正负数的数组,且可扩展解决子数组长度、乘积等变种问题。示例展示了nums=[1,1,1],k=2时如何正确统计出两个有效子数组的过程。
2025-08-02 22:46:50
373
原创 【LeetCode 热题 100】(三)滑动窗口
滑动窗口算法精要 无重复字符最长子串 使用双指针维护滑动窗口,HashSet存储当前字符 左指针移动时移除左侧字符,右指针扩展至重复字符 时间复杂度O(n),空间复杂度O(字符集大小) 示例:s="pwwkew" → 最长"wke"(长度3) 字母异位词查找 固定长度滑动窗口匹配字符频率 双频率数组统计字符出现次数 窗口滑动时更新频率:移除左边界,添加右边界 时间复杂度O(n),空间复杂度O(1) 示例:s="abab", p="ab&q
2025-08-02 18:25:14
942
原创 【黑马SpringCloud微服务开发与实战】(九)elasticsearch基础
Elasticsearch入门指南摘要:本文介绍了Elasticsearch(ES)的安装与基本使用。通过Docker快速部署ES(7.12.1)和Kibana可视化工具,配置单节点模式和网络连接。详细讲解了倒排索引原理、IK中文分词器的安装与使用,以及索引库和文档的CRUD操作。最后展示了Java客户端RestHighLevelClient的初始化步骤,包括Maven依赖配置和连接建立方法。内容涵盖ES核心概念、Mapping映射属性设置,以及批量文档处理等实用技巧,适合开发者快速上手ES。
2025-07-30 16:26:21
256
原创 【LeetCode 热题 100】(二)双指针
解题思路摘要 移动零:通过双指针法,左指针标记非零元素位置,右指针遍历数组。遇到非零元素时交换到左指针位置,保证所有零被移动到末尾。时间复杂度O(n),空间复杂度O(1)。 盛水最多的容器:使用双指针从数组两端向中间扫描,每次移动较短的边并计算当前面积,更新最大值。确保在O(n)时间内找到最大容量,空间复杂度O(1)。 三数之和:先排序数组,固定一个数后转化为两数之和问题。使用双指针寻找满足条件的组合,通过跳过重复元素避免重复解。时间复杂度O(n²),空间复杂度O(1)或O(n)(取决于排序实现)。
2025-07-29 18:02:34
966
原创 【LeetCode 热题 100】(一)哈希
128. 最长连续序列 - 摘要 解题思路: 使用哈希集合存储所有数字,遍历集合中的每个元素,寻找连续序列的起始点(即当前数字的前驱不在集合中),然后向后统计连续序列长度。通过跳过非起始点优化效率,确保算法时间复杂度为 O(n)。 关键步骤: 将所有数字存入哈希集合(O(1) 查询) 遍历集合,当 num-1 不存在时,以 num 为起点向后扩展连续序列 更新全局最大长度 max_long 优化点: 仅对序列起始点进行扩展,避免重复计算 哈希集合去重,减少无效操作 复杂度: 时间:O(n)(每个元素最多被访
2025-07-28 21:38:18
1282
原创 【黑马SpringCloud微服务开发与实战】(八)MQ高级
本文介绍了消息队列(MQ)的可靠性机制及延迟消息实现方案。主要内容包括:1)发送者可靠性机制,通过重连和确认机制(publisher confirm/return)确保消息投递;2)MQ持久化配置,包括交换机、队列和消息的持久化;3)LazyQueue机制解决消息堆积问题;4)消费者可靠性策略,包含确认机制、失败重试和业务幂等处理;5)延迟消息实现,通过死信交换机和TTL设置实现消息延迟投递。文中提供了Spring Boot整合RabbitMQ的配置示例和代码实现。
2025-07-28 15:56:34
354
原创 【黑马SpringCloud微服务开发与实战】(七)MQ入门
本文介绍了MQ(消息队列)的基础知识与应用实践。课程内容涵盖同步/异步调用优缺点对比、RabbitMQ技术选型、Docker环境部署(包含端口配置与权限管理)、Java客户端快速入门(含SpringBoot集成)、数据隔离实现等核心知识点。通过代码示例演示了消息队列的发布/订阅模式,并提供了详细的POM文件配置说明。课程采用RabbitMQ 3.8-management版本,重点讲解了生产环境中的用户权限控制、虚拟主机隔离等实用技巧,适合开发者快速掌握MQ在分布式系统中的实际应用。
2025-07-24 17:53:29
330
原创 【黑马SpringCloud微服务开发与实战】(六)分布式事务
本文介绍了分布式事务的概念及Seata框架的应用。分布式事务指跨微服务的多数据库操作需要保持一致性,传统事务无法满足需求。Seata通过TC(事务协调器)、TM(事务管理器)和RM(资源管理器)实现分布式事务管理。文章详细展示了Seata TC服务的Docker部署过程,并讲解了微服务集成Seata的配置方法。同时对比了XA和AT两种事务模式:XA模式强一致但性能低,AT模式通过全局锁和快照实现高效事务处理,适用于高并发场景。
2025-07-23 17:28:56
242
原创 【黑马SpringCloud微服务开发与实战】(五)微服务保护
本文介绍了微服务架构中的雪崩问题及其解决方案,重点讲解了Sentinel的快速入门和使用方法。内容涵盖:1)雪崩问题原因分析;2)通过Sentinel实现请求限流、线程隔离和熔断降级等解决方案;3)Sentinel的本地启动和与Spring Cloud集成配置;4)演示了自定义Fallback处理异常请求;5)详细说明了如何配置服务熔断规则。Sentinel作为强大的流量控制组件,能有效提高系统稳定性和容错能力。文章提供了完整的代码示例和配置说明,便于开发者快速实现服务保护功能。
2025-07-22 17:02:45
705
原创 【黑马SpringCloud微服务开发与实战】(四)微服务02
网关路由与登录校验实现 本文介绍了网关的基本概念及其在微服务架构中的核心作用,重点讲解了如何通过Spring Cloud Gateway实现路由配置和登录校验功能。主要内容包括: 网关路由配置:通过YAML文件定义路由规则,实现请求路径到微服务的映射,支持负载均衡(lb://)和服务发现(Nacos) 路由属性配置:包括路径匹配、请求头过滤等路由属性设置,以及全局过滤器的实现方式 登录校验机制: 采用GlobalFilter实现全局登录校验逻辑 通过自定义GatewayFilterFactory创建可配置的
2025-07-21 21:42:00
738
原创 【黑马SpringCloud微服务开发与实战】(三)微服务01
本文介绍了黑马商城项目的微服务化改造过程。首先指导完成环境配置,包括MySQL安装、前后端启动(后端8080端口、前端18080端口)。然后从单体架构过渡到微服务架构,基于SpringCloud进行服务拆分。重点演示了商品服务的拆分步骤:创建item-service子模块,配置pom.xml依赖和application.yml文件,复制相关代码层。最终成功启动并测试商品微服务(8081端口)。项目采用模块化结构,包含hm-common公共模块和多个业务服务模块,遵循单一职责等拆分原则。
2025-07-19 19:06:16
1319
原创 【黑马SpringCloud微服务开发与实战】(一)MybatisPlus篇
MyBatisPlus入门案例摘要 本文介绍了MyBatisPlus的基本使用,包含数据库表结构和测试数据的SQL脚本。主要涉及两张表: user用户表:包含用户基本信息、状态、余额等字段,使用JSON类型存储详细信息 address地址表:包含省市区等地址信息,与用户表关联,支持逻辑删除功能 脚本提供了完整的建表语句和4条用户记录、11条地址记录的测试数据,可直接导入MySQL数据库使用。表结构设计体现了常见业务需求,如唯一索引、默认值、自动更新时间等特性,为MyBatisPlus的学习提供了基础数据环境
2025-07-13 16:55:19
810
1
原创 【Java八股文总结 — 包学会】(二)计算机网络
DNS解析URL为IP,浏览器通过TCP三次握手建立连接,发送HTTP请求,服务器响应后浏览器解析渲染页面。DNS采用分层查询和缓存机制实现域名到IP的转换。七层OSI模型为理论框架,TCP/IP四层模型为实际标准。TCP可靠连接需三次握手和四次挥手,UDP则无连接。TIME_WAIT和CLOSE_WAIT是TCP连接关闭时的状态。HTTPS在HTTP基础上加入TLS加密层。GET请求参数在URL中,POST在请求体内;HTTP长连接复用TCP连接,短连接每次请求新建连接。
2025-07-12 23:32:39
926
原创 【黑马点评】(四)分布式锁
本文介绍了Redis分布式锁的实现原理与优化方案。首先分析了本地锁在JVM内部的局限性,指出分布式锁需要满足多进程可见和互斥的特性。然后通过Java代码展示了Redis分布式锁的基础实现,包括获取锁(setIfAbsent)和释放锁(delete)操作。针对锁误删问题,提出了加入线程标识的解决方案。最后使用Lua脚本解决了判断和删除操作的非原子性问题,确保分布式锁的可靠性。文中还包含多JVM环境下的测试验证,证明了分布式锁的有效性。
2025-07-09 18:52:02
388
原创 【黑马点评】(三)优惠卷秒杀
总体来说:这是一个实现秒杀优惠券功能的Java服务代码,主要逻辑是:先校验秒杀活动时间(未开始/已结束则报错)和库存(不足则报错),然后通过用户ID级别的同步锁确保同一用户只能有一个请求进入下单流程,在事务方法中再次校验"一人一单"规则(防止重复购买),使用数据库乐观锁(stock > 0条件)安全扣减库存,最后用Redis生成分布式ID创建订单并返回结果。本地apipost压测200个线程跑1s,因为都是同一个用户,最终stock的数量只会到99,订单表里面也只有一个订单数据。
2025-07-07 21:01:03
726
原创 【黑马点评】(二)缓存
控制层/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/service层@Service@Resource@Override// 1.从redis查询缓存// 2.判断是否存在// 3.存在,直接返回// 4.不存在,查询数据库return Result.fail("店铺不存在:!");// 5.存在, 存入redis。
2025-07-06 14:11:13
1143
原创 【手把手教你玩转极验滑块JS逆向系列】(一):滑块底层图片还原
难道向上攀登的路,不比站在顶峰更让人沸腾吗?哈喽,好久不见呐,距离上次b站登录那篇爬虫博客后,小夜斗又去学习java知识辽,但是最近在研究js逆向,想把小夜斗最近学习到的一点点经验分享大伙——滑块底层,小夜斗会将js代码一步步分析讲解!滑块网址:http://www.geetest.com/demo/首先,我们进入极验网址中(谷歌浏览器),如下图所示:我们选中【滑动模式-float】,点击进入,如下图所示:大致页面如上图所示,一个滑块验证码,平常我们生活中所见到的!使用无痕模式进行抓包,
2021-08-11 20:09:41
3665
14
原创 【原来Python爬虫还可以这么玩!】python爬虫自动化实现B站自动登录
从新开始吧,而不是重新开始哈喽,大家好呐,很久不见,甚是想念!小夜斗又和大家见面啦,距离小夜斗上次更新爬虫文章又过去了很久辽!因为在学校的时候有太多事情要做了,就疏忽了博客的更新呐,感觉以后还是要日常更新,知识需要输入,更需要输出,这样子才能吸收其中的精华所在!趁这次暑假期间给自己充能的同时,给大伙们分享一下自己的学习项目,一方面可以加强自己对知识的印象,另一方面可以给大伙们做一个参考,这就是双赢呐!本期小夜斗给大家伙带来的是一篇破解B站滑块验证实现自动登录的项目,仅供学习参考使用呐,切不可做违
2021-07-13 10:37:23
2757
36
原创 【爬虫老司机手把手教你如何分析用户数据|Python 数据分析打怪升级之路 day05】:数据规范化这样做才规范、数据可视化十大图表
数据分析打怪升级进度:day05哈喽,大家好啊,欢迎来到小夜斗的数据分析频道!大家可以叫我小夜斗:“一枚想要做python领域强者的小萌新”往期精彩回顾:【如何3秒钟看出一个人的python实力|Python 数据分析打怪升级之路 day04】:手把手教你如何分析用户数据、数据分析基本概念【如何3秒钟看出一个人的python实力|Python 数据分析打怪升级之路 day03】:最简介Python基础、Numpy基础、pandas基础 看完后仍然心有余悸【Python 数据分析打怪升级之路.
2021-05-12 23:01:55
1397
25
原创 【亲测有效,保姆级tensorflow安装教程】手把手教你安装tensorflow,轻松入门BP神经网络入门!
一:安装anaconda1:装好anaconda之后,打开Anaconda Prompt输入下面的命令语句(有墙,我们需要改变镜像源再输入命令):conda create -n tensorflow_env tensorflow添加下面的镜像源(删去后点击Add,Enter,点击update)https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free安装完成后的界面显示:有一个tensorflow_env项目Home选项卡中切
2021-05-12 22:24:07
537
3
原创 【如何3秒钟看出一个人的python实力|Python 数据分析打怪升级之路 day04】:手把手教你如何分析用户数据、数据分析基本概念
数据分析打怪升级进度:day04哈喽大家好啊,欢迎来到夜斗小神社数据分析打怪升级之路!大家可以叫我小夜斗:“一枚想要做python领域强者的小萌新”你会确信你终于在优快云找到了能信赖的python知识分享者,这篇文章将会成为你未来数据分析的启蒙之路,听起来不错吧!小夜斗致力于python语言知识分享,这些知识各个领域的大佬课程中的文档,内容干货非常多、相信大家学完之后定有所成!现在关注小夜斗,将有更多干货分享,都能去大厂面试了!一:数据分析相关概念商业智能(BI):用数据预测用户购物.
2021-05-04 17:28:54
3834
17
原创 【史上最骚爬虫|疯狂爬取中国大学mooc】太燃了,爬虫vs慕课反爬世纪大战|No.1
爬取中国大学全网mooc:NO.1作者:夜斗小神社IDEA工具:PyCharm抓包工具:Fiddler时间:2021/5/2小夜斗与爬虫已经很久没交流过辽,想着能重新把爬虫捡起来,这次就试一下mooc这个网站,希望能够做一个全网爬虫!爬取结果是:mooc官网左侧的课程分类,并获取其跳转链接一:通过Fiddler抓包分析抓包过程很简单:打开Fiddler点击Caputre,刷新网页进行抓包小夜斗通过分析发现这个课程分类url地址链接如下所示:# 1:课程分类网.
2021-05-02 21:22:03
4508
4
原创 【如何3秒钟看出一个人的python实力|Python 数据分析打怪升级之路 day03】:最简介Python基础、Numpy基础、pandas基础 看完后仍然心有余悸
数据分析打怪升级进度:day03一:python基础(一):python优势数据分析领域中python开发者最多python语言简洁、有大量第三方库(二):Python IDE推荐PycharmVisual Studio Code(三):基础语法1-1:简单输入打印语句dream = input("你的梦想是什么?")print(dream)1-2:条件判断语句level = int(input("输入你的篮球水平:"))if level == 1: .
2021-05-02 17:21:08
708
6
原创 【Python 数据分析打怪升级之路 day02】:行之有效的学习方法、数据挖掘核心步骤
纵然是跨过千山一路烽烟,你始终与我并肩数据分析打怪升级进度:day02Hello,各位小伙伴大家好呀,今天是数据分析滴第二次学习,这个打卡的day数不是按天数哈,是按学习滴次数!当然后面这个系列可以根据次数学习,难度是逐渐提升的!“我们只有把知识转化成为自己的语言,它才真正变成了我们自己的东西!”,很多人都会有这样的感觉,我明明学了很多很多东西,可是为什么到头来到自己真正要动手的实践的时候,手指在键盘上却写不出代码来,从而深深的怀疑自己的业务能力!今天小夜斗给大家分享一个认知三部曲 :“认知”、.
2021-05-01 10:25:23
276
4
原创 【Python 数据分析打怪升级之路 day01】sklearn进行数据预处理数据: 加载、划分、转换、降维
数据分析打卡学习进度:day01一:使用sklearn转换处理数据1:model_selection 模型选择模块2:preprocessing 数据预处理模块3:decompisition 特征分解模块三大模块功能:解决数据预处理、PCA降维工作、交叉验证等功能(一):加载datasets模块中的数据集1:datasets模块(数据预处理、建模、数据集加载函数) a: load_boston(波士顿房价) b:load_win(葡萄酒数据集) c:load_ir.
2021-05-01 09:22:45
516
1
原创 【原来python还可以这么玩】python逆向爬取网易云评论进行情感分析
遥遥微光,与我同行好久不见,各位小伙伴们!嗐,春节真滴快啊!祝大家新年快乐!书山有路勤为径,学海无涯苦作舟!又得开始愉快滴学习了!小夜斗今天给大家伙分享一期干货,芜湖起飞!JS逆向网易云爬取评论并利用snownpl进行情感分析一:逆向破解网易云参数抓取评论信息网易云PC端url: https://music.163.com/#/song?id=1817702136要抓取滴评论如下图所示:老规矩,检查网页元素,找到评论信息所在的请求网址!从xhr里面找一下子就能找到,看下面截图:如
2021-02-23 15:50:23
8968
40
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅