# 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**: 2025-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目结构 ``` ├── 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) │ │ │ └── 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 ├── .gitignore ├── LICENSE ├── README.en.md ├── README.md └── pom.xml ```