# Interview-Programming-Backend **Repository Path**: lollipop1024/interview-programming-backend ## Basic Information - **Project Name**: Interview-Programming-Backend - **Description**: 面试编程题 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-07 - **Last Updated**: 2026-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 面试编程后端项目 本项目是一个面向面试和技术提升的 Java 后端项目,包含: - ✅ 经典算法实现 - ✅ 设计模式示例 - ✅ 多线程编程 - ✅ **Arthas 诊断工具集成** 🆕 - 内置 Arthas,支持 Web Console 和 Tunnel 远程管理 ## 🎯 Arthas 集成特性(新增) ### 三种访问方式 1**Web 场景控制台** - 浏览器访问 `http://localhost:8080/arthas/html/console.html` (可视化触发各种性能问题场景) 2**Telnet** - `telnet localhost 3658` (用户名/密码:arthas/arthas) 3**Tunnel Server** - 支持远程管理多个应用实例 ### 快速启动 ```bash # Windows scripts\run-arthas-examples.bat # Linux/Mac ./scripts/run-arthas-examples.sh ``` ### Web 场景控制台(新增功能) **可视化操作界面,无需记忆命令:** - 访问 `http://localhost:8080/arthas/html/console.html` - 点击按钮即可触发各种性能问题场景 - 每个场景都配有参数输入框和排查指南 - 适合新手快速上手 Arthas 诊断工具 ### 详细文档 📖 [Arthas 集成使用指南](docs/arthas/README.md) - 包含完整配置、Tunnel 部署和实战示例 ## 项目结构 ``` ├── src/ # 项目源代码根目录 │ ├── main/ # 主代码目录 │ │ └── java/ # Java源代码 │ │ │ ├── com/ # com目录 │ │ │ │ └── lollipop/ # lollipop目录 │ │ │ │ │ └── programming/ # programming目录 │ │ │ │ │ │ ├── designpattern/ # designpattern目录 │ │ │ │ │ │ │ ├── proxy/ # proxy目录 │ │ │ │ │ │ │ │ ├── cglib/ # cglib目录 │ │ │ │ │ │ │ │ │ ├── CglibDynamicProxyHandler.java # Cglib动态代理处理器 │ │ │ │ │ │ │ │ │ ├── RealSubject.java # 接口实现类 │ │ │ │ │ │ │ │ │ └── Subject.java # Cglib动态代理接口 │ │ │ │ │ │ │ │ └── jdk/ # jdk目录 │ │ │ │ │ │ │ │ │ ├── JDKDynamicProxyHandler.java # JDK动态代理处理器 │ │ │ │ │ │ │ │ │ ├── RealSubject.java # 接口实现类 │ │ │ │ │ │ │ │ │ └── Subject.java # JDK动态代理接口 │ │ │ │ │ │ │ ├── singleton/ # singleton目录 │ │ │ │ │ │ │ │ └── SingletonDcl.java # 双重检查单例模式 │ │ │ │ │ │ │ └── strategy/ # strategy目录 │ │ │ │ │ │ │ │ ├── AliPayStrategy.java # 支付宝支付策略 │ │ │ │ │ │ │ │ ├── ContextOrder.java # 订单类-上下文模式-模拟订单支付(云闪付、支付宝、微信) * 上下文模式:在策略模式的基础上,增加了上下文环境,用于管理策略对象 * 上下文环境:用于管理策略对象,提供一个接口,用于调用策略对象的方法 * 上下文环境:用于管理策略对象,提供一个接口,用于调用策略对象的方法 │ │ │ │ │ │ │ │ ├── PaymentContext.java # 支付策略上下文 │ │ │ │ │ │ │ │ ├── PaymentStrategy.java # 策略模式-模拟订单支付(云闪付、支付宝、微信)-支付策略接口 │ │ │ │ │ │ │ │ ├── SimpleOrder.java # 订单类-策略模式-模拟订单支付(云闪付、支付宝、微信) * 订单类,包含订单号、订单金额、支付状态等信息,同时包含执行支付的方法,该方法接受一个支付策略对象作为参数, * 并调用该对象的支付方法来完成支付。 * 订单类的作用是封装订单的信息和支付逻辑,使得支付逻辑可以独立于订单类之外,从而提高代码的可维护性和可扩展性。 * 同时,订单类还可以通过策略模式来实现不同的支付方式,从而使得订单类的代码更加简洁和易于理解。 * 例如,订单类可以使用云闪付支付策略、支付宝支付策略、微信支付策略等不同的支付策略来完成支付,从而使得订单类的代码更加灵活和可扩展。 * 同时,订单类还可以通过策略模式来实现不同的支付方式,从而使得订单类的代码更加简洁和易于理解。 │ │ │ │ │ │ │ │ ├── UnionPayStrategy.java # 云闪付支付策略 │ │ │ │ │ │ │ │ └── WechatPayStrategy.java # 微信支付支付策略 │ │ │ │ │ │ ├── search/ # search目录 │ │ │ │ │ │ │ └── BinarySearch.java # 二分查找 │ │ │ │ │ │ ├── sort/ # sort目录 │ │ │ │ │ │ │ ├── BubbleSort.java # 冒泡排序 │ │ │ │ │ │ │ ├── QuickSortV1.java # 快速排序V1 │ │ │ │ │ │ │ └── QuickSortV2.java # 快速排序V2 │ │ │ │ │ │ ├── thread/ # thread目录 │ │ │ │ │ │ │ ├── cache/ # cache目录 │ │ │ │ │ │ │ │ ├── OptimisticCache.java # 实现一个高效的缓存,允许多个用户读,但只允许一个用户写,以此来保持它的完整性 - 乐观锁StampedLock │ │ │ │ │ │ │ │ └── ThreadSafeCache.java # 实现一个高效的缓存,允许多个用户读,但只允许一个用户写,以此来保持它的完整性 - ReentrantReadWriteLock * 读写锁是一种特殊的锁,它允许同时有多个线程进行读操作,但只允许一个线程进行写操作。 * 读写锁的实现方式有两种: * 1. 共享锁和排他锁 * 2. 读锁和写锁 * 读写锁的优点是: * 1. 读操作不会阻塞写操作,写操作也不会阻塞读操作。 * 2. 读操作不会阻塞其他读操作,写操作也不会阻塞其他写操作。 * 读写锁的缺点是: * 读操作和写操作的优先级是不确定的。 │ │ │ │ │ │ │ ├── deadlock/ # deadlock目录 │ │ │ │ │ │ │ │ └── DeadlockDemo.java # 死锁demo │ │ │ │ │ │ │ ├── productconsume/ # productconsume目录 │ │ │ │ │ │ │ │ ├── ProducerConsumerV1.java # 使用多线程实现生产者-消费者模型-[wait()和notify()方法] │ │ │ │ │ │ │ │ └── ProducerConsumerV2.java # 使用多线程实现生产者-消费者模型-BlockingQueue │ │ │ │ │ │ │ └── sequential/ # sequential目录 │ │ │ │ │ │ │ │ ├── ThreadCompletableFuture.java # 有 T1、T2、T3 三个线程,怎么保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行 - 使用CompletableFuture │ │ │ │ │ │ │ │ ├── ThreadCountDownLatch.java # 有 T1、T2、T3 三个线程,怎么保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行 - 使用CountDownLatch │ │ │ │ │ │ │ │ ├── ThreadJoin.java # 有 T1、T2、T3 三个线程,怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行 - 使用join()保证线程执行顺序 │ │ │ │ │ │ │ │ └── ThreadWaitNotify.java # 有 T1、T2、T3 三个线程,怎么保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行 - 使用wait/notify(容易死锁,慎用!!!) │ │ │ │ │ │ ├── ArrEqual.java # 判断两个数组是否包含相同元素 │ │ │ │ │ │ ├── FibRecursiveV1.java # 斐波那契数列-斐波那契数列是一个递归数列,定义为: * F(0) = 0 * F(1) = 1 * F(n) = F(n-1) + F(n-2)(n ≥ 2) │ │ │ │ │ │ ├── Fibonacci.java # 斐波那契数列 │ │ │ │ │ │ ├── ListNodeReverse.java # 单向链表反转 │ │ │ │ │ │ ├── Palindrome.java # 判断回文数 - 判断一个整数是否是回文数(如 121 是回文,-121 不是) │ │ │ │ │ │ ├── ReverseStr.java # 字符串反转 - 编写一个函数,反转字符串(例如输入 hello,输出 olleh) │ │ │ │ │ │ └── arthas/ # Arthas 诊断工具示例目录 🆕,新增内容,包含基础命令演示、实战场景排查等完整示例 │ │ │ │ │ │ │ ├── ArthasApplication.java # Spring Boot 主启动类 │ │ │ │ │ │ │ ├── basic/ # 基础示例 │ │ │ │ │ │ │ ├── command/ # 命令示例(watch/trace/monitor/redefine) │ │ │ │ │ │ │ └── scenario/ # 场景示例(CPU 飙高/内存泄漏/死锁/慢查询/异常) │ │ │ └── EnhancedProjectTreeGenerator.java # 生成项目结构树,支持 Javadoc 注释提取 │ └── test/ # 测试代码目录 │ │ └── java/ # Java 源代码 │ │ │ └── com/ # com 目录 │ │ │ │ └── lollipop/ # lollipop 目录 │ │ │ │ │ └── programming/ # programming 目录 │ │ │ │ │ │ ├── designpattern/ # designpattern 目录 │ │ │ │ │ │ │ ├── proxy/ # proxy 目录 │ │ │ │ │ │ │ │ ├── cglib/ # cglib 目录 │ │ │ │ │ │ │ │ │ └── CglibDynamicProxyHandlerTest.java # CglibDynamicProxyHandlerTest 类 │ │ │ │ │ │ │ │ └── jdk/ # jdk 目录 │ │ │ │ │ │ │ │ │ └── JDKDynamicProxyHandlerTest.java # JDK 动态代理测试类 │ │ │ │ │ │ │ └── strategy/ # strategy 目录 │ │ │ │ │ │ │ │ ├── ContextOrderTest.java # ContextOrderTest 类 │ │ │ │ │ │ │ │ └── SimpleOrderTest.java # SimpleOrderTest 类 │ │ │ │ │ │ └── thread/ # thread 目录 │ │ │ │ │ │ │ └── cache/ # cache 目录 │ │ │ │ │ │ │ │ ├── OptimisticCacheTest.java # 测试类 - 实现一个高效的缓存,允许多个用户读,但只允许一个用户写,以此来保持它的完整性 - 乐观锁 StampedLock │ │ │ │ │ │ │ │ └── ThreadSafeCacheTest.java # 测试类 - 实现一个高效的缓存,允许多个用户读,但只允许一个用户写,以此来保持它的完整性 - ReentrantReadWriteLock ├── docs/ # 文档目录 🆕 │ └── arthas/ # Arthas 专门文档 │ ├── README.md # Arthas 项目说明 │ ├── arthas-integration.md # Arthas 集成使用指南 │ ├── arthas-quickstart.md # Arthas 快速开始 │ ├── arthas-setup.md # Arthas 依赖安装指南 │ ├── guide.md # Arthas 完整使用指南 │ ├── cheatsheet.md # Arthas 命令速查手册 │ ├── summary.md # Arthas 示例创建总结 │ └── delivery-checklist.md # Arthas 交付清单 ├── scripts/ # 脚本目录 🆕 │ ├── run-arthas-examples.bat # Windows 快速启动脚本 │ ├── run-arthas-examples.sh # Linux/Mac 快速启动脚本 │ ├── start-tunnel-server.bat # Windows Tunnel Server 启动脚本 │ └── start-tunnel-server.sh # Linux/Mac Tunnel Server 启动脚本 ├── .gitignore ├── LICENSE ├── README.en.md ├── README.md ├── PROJECT_DOCUMENTATION.md └── pom.xml ``` ## Arthas 示例快速开始 🆕 ### 1. 编译项目 ```bash cd E:\interview-programming-backend mvn clean compile ``` ### 2. 运行示例 **运行 Spring Boot 启动类:** ```bash mvn spring-boot:run -Dspring-boot.run.mainClass=com.lollipop.programming.arthas.ArthasApplication ``` ### 3. 连接 Arthas 在新终端中运行: ```bash curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar ``` ### 4. 查看文档 - **完整指南**: [docs/arthas/guide.md](docs/arthas/guide.md) - 680 行详细文档 - **速查手册**: [docs/arthas/cheatsheet.md](docs/arthas/cheatsheet.md) - 200 行快速参考 - **使用说明**: [docs/arthas/README.md](docs/arthas/README.md) - 快速开始 - **项目总结**: [docs/arthas/summary.md](docs/arthas/summary.md) - 创建详情 ---