自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

落地

学习总结,经验分享。

  • 博客(217)
  • 资源 (19)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java 实现井字棋(Tic-Tac-Toe)

一个简单的井字棋游戏实现。使用3x3二维数组表示棋盘,通过枚举类型Result定义游戏状态(WIN胜利、CONTINUE继续、DRAW平局、ERROR错误)。核心方法placeMark包含边界检查、棋子占用判断、胜负条件判断等功能,确保游戏逻辑正确性和安全性。代码采用空指针安全设计,胜负判断清晰直观,并提供了基础测试用例。该实现结构清晰,易于扩展,可作为小型棋盘游戏的开发参考。

2025-09-12 00:29:27 374

原创 字符串大数相加:从初稿到优化的思路演进

字符串大数相加的优化实现过程。核心思路是模拟竖式加法:从字符串尾部开始遍历,处理每位相加和进位。关键点包括:1)正确处理字符到数字的转换('0'~'9'需减去'0');2)处理不同长度数字(短数补0);3)进位处理(sum%10和sum/10);4)最后反转结果。文中提供了Java实现代码,并特别提醒了字符转数字的常见错误。作者强调面试中解决问题的思路比完美代码更重要,需要展现出改进问题的能力。

2025-09-11 22:29:44 286

原创 遇到 Dubbo 和 Spring Cloud怎么选?

Dubbo与Spring Cloud是企业级分布式系统的两大主流方案,但定位不同。Dubbo专注于高性能RPC调用和基础服务治理,采用二进制协议,适合内网高并发场景;Spring Cloud提供完整的微服务生态,支持HTTP/REST跨语言调用,适合快速落地微服务。Dubbo强调CP特性,适合金融等高一致性场景;Spring Cloud偏向AP特性,适合互联网高可用需求。实际应用中,可混合使用:Dubbo处理内部高性能调用,Spring Cloud管理网关等外部服务。选型需结合性能要求、技术栈和业务场景。

2025-09-10 00:28:13 718

原创 【分布式架构】Dubbo是什么?能做什么?

Dubbo是阿里巴巴开源的高性能Java RPC分布式服务框架,现由Apache基金会维护。它专为分布式/微服务系统设计,提供远程服务调用、负载均衡和服务治理等核心功能。其特点包括:基于NIO的高效通信、多种序列化支持、软负载均衡策略(随机+权重)、服务自动注册发现(通过ZooKeeper等注册中心)、以及自定义的二进制协议实现高性能传输。Dubbo特别适用于大型分布式系统如电商平台,支持服务间的透明调用和动态调整,相比传统HTTP协议和硬件负载均衡方案更具灵活性和成本优势。

2025-09-09 23:46:15 458

原创 【算法】四大基础数据结构

复杂数据结构和算法最终可归结为数组、链表、树和图四大基础类型。数组用于连续存储,衍生出字符串、动态数组等;链表通过节点指针实现顺序存储,演变为栈、队列等结构;树具有层次关系,发展出二叉树、B树等多种变体;图由顶点和边组成,广泛应用于网络等场景。这四类基础结构相互关联,共同构成了计算机数据结构的核心体系。

2025-09-09 22:13:47 823

原创 【算法题】单机 2G 内存下大数据年龄统计:如何统计全国人口中每个年龄的人数

针对大规模人口年龄统计问题,提出基于数组计数的高效解决方案。在单机2G内存限制下,利用年龄范围固定(0-150岁)的特点,使用151个元素的long数组进行计数。该方法时间复杂度O(n),空间占用仅1.2KB,避免使用复杂数据结构。通过逐行读取文件并累加对应数组元素,可高效处理几十亿条数据,在SSD环境下预计10秒左右完成13亿条记录统计。该方案尤其适合统计范围固定的整数型大数据场景。

2025-09-09 18:28:42 547

原创 数据结构与算法基础:时间复杂度与空间复杂度

本文介绍了算法的基本特征、设计原则和评价指标。算法应具备有穷性、确定性、可行性、有输入和有输出等特征。设计时需遵循正确性、可读性、健壮性及高效低存储原则。评价算法主要看时间复杂度和空间复杂度,前者衡量运行效率(理想为O(1)),后者衡量内存消耗。常见时间复杂度类型包括常数O(1)、对数O(log n)、线性O(n)等,优化目标是降低复杂度。空间复杂度分析主要关注内存对象和变量占用。最后强调现代AI工具可辅助算法开发,但需注意验证和多场景测试。

2025-09-09 16:56:25 822

原创 算法联系-判断一个数是否是 2 的 N 次方

判断一个数是否为2的N次方的两种方法。第一种是循环除以2的直观解法,通过不断除以2直到结果为1来判断;第二种是利用位运算的高效解法,通过n & (n-1)是否等于0来判断。两种方法各有优缺点:循环除法简单易懂但效率一般,位运算高效巧妙但可读性稍差。文章通过数字示例和二进制图解直观展示了两种解法的原理和实现过程。

2025-09-09 09:43:52 381

原创 JVM 性能调优命令

本文介绍了JVM性能调优常用的5个工具:jps、jinfo、jstat、jstack和jmap。jps用于查看Java进程;jinfo可查看/修改JVM参数;jstat监控GC和内存使用情况;jstack分析线程堆栈;jmap生成堆转储文件。文章详细说明了各工具的常用命令和参数,并提供了线上应用案例,帮助开发者快速定位内存泄漏、GC问题和线程阻塞等问题。这些工具是JVM性能调优的核心手段,能有效诊断和优化Java应用性能。

2025-09-09 00:48:31 803

原创 深入理解 AbstractQueuedSynchronizer (AQS):Java 并发的排队管家

AQS(AbstractQueuedSynchronizer)是Java并发编程的核心框架,为同步工具(如ReentrantLock、CountDownLatch等)提供底层支持。其核心通过state变量(表示同步状态)和FIFO队列(管理阻塞线程)实现资源控制。AQS采用模板方法模式,子类只需实现tryAcquire/tryRelease(独占模式)或tryAcquireShared/tryReleaseShared(共享模式)定义资源获取规则,而线程排队、阻塞/唤醒由AQS统一处理。

2025-09-08 23:53:11 536

原创 CAS和乐观锁

乐观锁是并发编程中的一种轻量级同步机制,核心思想是CAS(比较并交换)。它通过比较内存值(V)与期望值(A),若相等则更新为新值(B),否则重试。相比悲观锁直接加锁,乐观锁在无冲突时效率更高。Java中通过AtomicXXX类实现,适用于计数器等场景,但存在ABA问题(可通过版本号解决)和自旋开销大的缺点。其典型应用包括并发容器底层实现、自旋锁等。

2025-09-08 00:27:30 445

原创 垃圾回收算法详解

本文系统梳理了JVM中的四种垃圾回收算法:1)复制算法适用于新生代,效率高但内存利用率低;2)标记清除算法简单但会产生内存碎片;3)标记整理算法通过移动对象解决碎片问题,适合老年代;4)分代收集策略根据对象生命周期采用不同算法,是JVM垃圾回收的核心思想。文章通过示意图和优缺对比,清晰呈现了各算法的适用场景与实现原理,为理解JVM内存管理提供了结构化参考。

2025-09-05 21:54:54 871

原创 JVM 运行时数据区域

梳理了JVM内存区域结构,基于JDK8详细解析了五大核心区域:堆(存放对象实例)、元空间(存储类信息)、虚拟机栈(线程私有方法执行区)、本地方法栈(Native方法服务)和程序计数器(指令地址存储)。重点分析了各区域的功能特点、组成结构及常见异常,如堆内存GC机制、元空间溢出风险、栈的深度限制等。通过对比JDK版本差异(如永久代取消),帮助开发者深入理解JVM内存管理机制。

2025-09-04 23:26:18 476

原创 Java 双亲委派机制解析和破坏双亲委派的方式

本文系统梳理了Java类加载机制与SPI(服务提供接口)原理。类加载器采用双亲委派机制保证核心类安全,但在插件化等场景下可通过自定义类加载器或SPI机制突破限制。SPI通过META-INF/services配置文件实现服务发现,典型案例包括JDBC驱动动态加载。文章详细解析了MySQL驱动SPI实现、ServiceLoader源码及破坏双亲委派的场景,揭示了SPI如何实现接口与实现解耦、动态扩展及绕过类加载限制。该机制广泛应用于JDBC、日志框架等需要插件化扩展的场景。

2025-09-04 23:05:07 823

原创 JVM 类加载全过程

梳理了JVM类加载的七个生命周期阶段:加载、验证、准备、解析、初始化、使用和卸载。重点解析了前五个核心阶段:加载阶段读取字节码生成Class对象;验证阶段确保代码安全合法;准备阶段为静态变量分配内存;解析阶段替换符号引用;初始化阶段执行静态赋值和代码块。文章通过类比数据处理流程,形象说明了各阶段作用,并详细阐述了各阶段的工作机制和触发条件,帮助理解JVM类加载原理。

2025-09-04 19:17:44 1005

原创 高并发系统设计方案(直播场景)

本文系统梳理了微服务架构下的高并发解决方案,涵盖微服务拆分、部署扩展、缓存策略、消息队列、数据库优化等核心模块。关键点包括:按功能模块拆分服务并独立部署;Kubernetes弹性伸缩保障高可用;多级缓存+应用锁防击穿;MQ实现削峰解耦;分库分表+读写分离突破数据库瓶颈;ES支撑复杂查询;限流熔断保障系统稳定。通过缓存、MQ、分库分表、ES和K8s弹性扩容的组合策略,构建高并发、高可用的分布式系统架构。

2025-09-04 13:38:00 523

原创 分布式系统的 CAP 原则与 BASE 原则理解

分布式系统设计中,CAP原则和BASE原则是两个核心概念。CAP原则指出一致性(C)、可用性(A)和分区容错性(P)三者不可兼得,通常需在C和A间权衡。而BASE原则作为实践方案,通过基本可用、软状态和最终一致性,在保证高可用的同时接受短时数据不一致。二者关系可概括为:CAP是理论基础,BASE是工程实现。这些原则为分布式系统设计提供了重要的理论指导和实践框架。

2025-09-03 22:43:52 313

原创 Redis 集群模式与高可用机制

Redis集群模式通过哈希槽(16384个)实现数据分片,支持多Master节点(建议奇数)和Slave备份。它采用心跳检测和多数投票机制实现高可用,当Master故障时自动切换Slave为Master。适用于写密集型场景,但数据同步会占用带宽,常规场景下哨兵模式可能更合适。集群模式有效解决了单节点瓶颈问题,但节点过多会增加心跳开销(O(N²))。

2025-09-03 18:50:43 344

原创 Redis 哨兵模式(Sentinel Mode)

哨兵模式在Redis主从架构中引入哨兵机制,提升高可用性。其核心是自动故障转移:通过主观/客观下线机制检测Master故障,基于Raft算法选举Leader Sentinel执行切换。新Master按优先级、复制偏移量等规则选出,确保数据完整性。故障转移完成后,自动重配从节点并更新客户端连接,实现服务持续可用,适用于读多写少场景。

2025-09-03 14:02:47 461

原创 Redis 主从复制模式

Redis主从模式是入门级分布式部署方案,通过主节点写、从节点读实现读写分离和数据备份。核心特点包括部署简单、成本低,支持PSYNC2协议优化增量同步,可采用主从从结构分担复制压力。但存在主节点性能瓶颈、无自动故障转移、数据延迟等局限性,仅适合低并发场景或测试环境。实际生产通常需配合哨兵或集群模式实现高可用。该方案适合业务初期,但对高可用要求严格的场景需升级架构。

2025-09-03 00:19:11 323

原创 Redis 持久化机制详解

• RDB 适合对恢复速度要求高、能容忍少量数据丢失的场景。• AOF 适合对数据可靠性要求极高的场景。之前互联网工作经常用到的。• 混合持久化结合了 RDB 和 AOF 的优点,是 Redis 4.0 及以上版本的推荐方案。当下工作使用的,技术一直在发展这个优势更大。

2025-09-02 21:54:56 587

原创 Elasticsearch 深分页限制与解决方案

遇到Elasticsearch导出超1万条数据时出现"Result window is too large"报错,原因是默认的index.max_result_window限制为10000条。解决方案包括:1)临时调大该参数(有性能风险);2)改用Scroll API(适合批量导出)。经验表明:from+size分页仅适合小数据量,大数据导出应使用Scroll API,实时分页推荐Search After。通过改用Scroll API成功解决了全量数据导出问题。

2025-09-02 18:23:24 500

原创 Elasticsearch 核心知识与常见问题解析

本文系统梳理了Elasticsearch的核心原理与实战经验。关键点包括:1)倒排索引机制实现高效全文检索;2)分片与副本设计保障数据高可用;3)近实时特性通过刷新机制平衡性能与实时性;4)分词器选择(如IK中文分词)对搜索效果的决定性影响;5)Mapping设计规范字段类型与分词策略。实战建议:索引合并优化查询性能、Scroll处理深分页、合理设置分片数(主分片不可修改)。版本兼容性需特别关注,如ES8要求JDK17+。通过系统梳理知识体系,既巩固了基础概

2025-09-02 17:01:00 1262

原创 Elasticsearch 核心特性与应用指南

没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群(工作中一般使用阿里云等云厂商的ES服务,很少有自己搭建的):节点对外表现对等(每个节点都可以用来做入口),加入节点自动负载均衡。:输入/输出格式为JSON,意味着不需要定义Schema,快捷方便。:可以扩展到PB级的结构化和非结构化数据,支持海量数据的近实时处理。,它能提供我们最相关的搜索结果(relevance-相关性)。,cluster(集群)分布式部署,极易扩展,这样很。:可根据不同的用途分索引,可以同时操作多个索引。

2025-09-02 15:43:08 1036

原创 数据库事务隔离级别与 MVCC 机制详解

事务隔离级别定义了多个并发事务之间的相互影响程度,从低到高分为四个级别,不同级别在数据一致性和系统性能之间呈现不同的平衡关系。1.1 读未提交(Read Uncommitted)• 定义:最低的隔离级别,允许当前事务读取其他事务尚未提交的数据变更。• 核心问题:无法避免脏读、不可重复读和幻读。读取到其他事务未提交的“临时数据”,若后续事务回滚,当前读取的数据将变为无效。• 适用场景:对数据一致性要求极低,仅追求极致性能的场景(如临时统计查询,无需精确结果),实际业务中极少使用。业务场景基本都不用。

2025-09-01 22:28:32 576

原创 JRebel 热部署配置

自动编译配置:快捷键 ctrl+shift+alt+S注册表配置:快捷键 ctrl+shift+alt+/启动类配置:不用配置也可以:

2021-05-08 19:32:15 1786

原创 JVM 知识点

JVM如何跨平台:不同系统有不同的JVM环境,JRE不同运行时候进行跨平台。 c和c++根据选择的不同类库在编译时跨平台,java在运行时跨平台JVM分为三大块:年轻代 由End、S0和S1组成 年老代 持久代(JDK1.8取消了)年轻代分为三大块:当发生年轻代GC(YGC)时End区域的对象被其他对象引用时,则移到幸存者S0、S1区,未引用的立即清除,当S0和S1多次YGC都还存在的话,则移到老年代区域。GC分为两大块:minor GC 清理新生代和老年代 Full GC

2021-04-08 18:46:12 404

原创 HashMap 原理

HashMap由数组和链表组成:数组为主体,链表是为了解决hash冲突而存在的。JDK1.8中若链表长度超过了8(含8),则链表转化为红黑树。jdk1.7链表从头部插入,jdk1.8链表从尾部插入。jdk1.8中entry替换为node。HashMap继承AbstractMap并实现了Map接口:基于hash原理通过get()和put()存储和获取对象。hash冲突:如果根据hash函数算出来的hash值对应的数据位置不含链表(当前entry的next指向null),那么查找和添加很快,仅.

2021-04-06 22:03:20 559

原创 【快手面试题】统计数组中出现次数超过一半的数字

统计数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2因为没写过这种场景,自己实现的一版,仅供一种思路参考: public static void main(String[] args) { int[] array = {1, 2, 3,3, 3, 3, 3, 3, 2, 2,.

2021-04-06 12:13:55 388

原创 HashMap put 方法,都做了那些事情?

/** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. 将指定的 key 与 value 相关联。 如果在 map 中指定的 key 存在了,则旧的 value 将被替换 *.

2021-03-31 00:42:37 542

原创 将枚举类型转换成流

/** * 将枚举类型转换成流 * @param enumeration 需要转换成流的枚举对象 * @param <T> 泛型类型 * @return 返回转换之后的 Stream 对象 */ public static <T> Stream<T> of(Enumeration<T> enumeration){ return StreamSupport.stream( ...

2021-03-27 11:25:40 626

原创 HttpServletRequest 转 Map

public static Map<String, Object> getJsonParam(HttpServletRequest request) throws IOException { try (var br = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { var sb = new StringB...

2021-03-26 17:35:07 701

原创 IP 相关工具类

import com.gaolv.utils.core.StrUtil;import com.gaolv.web.constant.Constants;import lombok.AccessLevel;import lombok.NoArgsConstructor;import lombok.extern.log4j.Log4j2;import javax.annotation.Nullable;import javax.servlet.http.HttpServletRequest;..

2021-03-26 17:25:24 369

原创 Web相关工具类

import lombok.AccessLevel;import lombok.NoArgsConstructor;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import java.util.Optional;import javax.annotatio..

2021-03-26 15:31:47 341

原创 注入静态对象类

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;/** * 注入静态对象类 * 其他类中直接静态使用,不用注入。一次注入,多次使用,使用便捷。 */@Componentclass BaseStaticObject { protected static UserMapper userMapper; ..

2021-03-26 14:59:43 493

原创 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱?

/** * 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱? * 答案:甲:8元、乙:6元 */ public static void main(String[] args) { // 冬瓜 = x、甲 = i、乙 = j for (int x = 0; x < 10000; x++) { for (int i = 0; i < 10000; i++) { ...

2021-03-12 15:19:44 2863

原创 Object wait() 和 Threead sleep() 疑问解答,练习

问题:红框得语句是否会输出?答案:会的。答案解析:1.t1 线程开始执行,遇到 Thread.sleep() 后,让出 CPU。2.t2 线程(下面那个县城)开始执行,遇到 t1.wait() 后,让出 CPU。3.5 秒过去后,t1 线程通过线程调度,获取到 cpu ,进行执行,执行结束后,让出 CPU。4.t2 线程通过线程调度,获取到 cpu,通过代码计数器定位后(因为上次让出 CPU 时,t1.wait() 方法已经执行过了,下次获取 cpu 时,会执行下一条语句),进行..

2021-03-12 15:08:42 395

原创 idea 明显代码错误,编译器不提示

idea 明显代码错误,编译器不提示现象:F2 会提示:错误分析中解决思路:1.查找相关案例,按他人经验排错2.结合自身现状分析问题3.采用方块推进法进行排查问题解决方案:安装了 Illuminated Cloud 插件,关闭启用就好了可信度较高,解决方案参考:点击跳转...

2020-11-10 17:57:05 2516

原创 支付宝同一账户下多个应用,资金对账问题-调研

调研渠道:查阅支付宝文档 咨询支付宝人工客服结论:不同应用只是公钥、密钥不同,只是方便接入方隔离。资金走的同一账户,无法做资金隔离,会产生对账问题解决方案:要想做资金隔离,必须先做到账户隔离...

2020-10-30 21:48:44 1361

原创 If you want an embedded database (H2, HSQL or Derby), please put it on the clas

Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following: If you want an embedded database (H2..

2020-07-05 14:21:05 4237 1

java email发送测试

这个demo主要针对QQ邮箱做的,其他类型邮箱需要改写地方,看下SendEmail注释 相关介绍地址:http://blog.csdn.net/u012012240/article/details/52171449

2016-08-10

阿里巴巴Java代码规范IDE插件下载

阿里巴巴Java代码规范IDE插件,IDEA可以正常使用,结合阿里巴巴Java开发手册(纪念版)非常好用

2018-05-07

springMvc配置mongo数据库

可以参考下,项目实战用到的!分享帮助你,也帮助了我!欢迎补充!

2015-12-15

webMagic爬虫抓取某个博客全部文章名称

webMagic爬虫抓取某个博客全部文章名称,简单列子,可以做参考

2016-09-05

jQuery生成二维码包

jQuery生成二维码包,页面生成方式http://blog.csdn.net/u012012240查找jQuery生成二维码有文章的

2015-12-17

img MyBatisCodeHelper-Pro-1.9.4-IDEA173-IDEA182.zip

idea maven插件img MyBatisCodeHelper-Pro-1.9.4-IDEA173-IDEA182.zip

2018-10-11

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

TA关注的人

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