├── .gitignore
├── LICENSE.txt
├── README.md
├── codemarks
├── pom.xml
└── src
│ └── main
│ └── java
│ └── rest
│ └── api
│ └── result
│ ├── Result.java
│ ├── ResultCode.java
│ └── ResultGenerator.java
├── concurrent
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── cas
│ ├── AtomicSequence.java
│ └── Sequence.java
│ ├── juc
│ ├── CopyOnWriteArrayTest.java
│ ├── CountDownLatchTest.java
│ ├── CyclicBarrierTest.java
│ ├── ExecutorTest.java
│ ├── ForkJoinTest.java
│ ├── SemaphoreTest.java
│ ├── ThreadPoolExecutorTest.java
│ ├── TimeUnitTest.java
│ ├── aqs
│ │ ├── MutexLock.java
│ │ └── MutexLockTest.java
│ ├── automic
│ │ ├── AtomicIntegerTest.java
│ │ └── AtomicityProblemTest.java
│ └── lock
│ │ ├── ConditionTest.java
│ │ ├── ReentrantLockTest.java
│ │ └── ReentrantReadWriteLockTest.java
│ ├── pcmodel
│ ├── ProducerConsumerModelBlockQueueImpl.java
│ └── ProducerConsumerModelWaitNotifyImpl.java
│ ├── synchronizeds
│ ├── SynchronizedCodeBlockTest.java
│ ├── SynchronizedMethodTest.java
│ ├── SynchronizedStaticMethodTest.java
│ └── SynchronizedTest.java
│ ├── thread
│ ├── DeadlockTest.java
│ ├── HowToCreateThread.java
│ ├── InterruptTest.java
│ ├── JoinTest.java
│ ├── NotifyTest.java
│ ├── TimedJoinTest.java
│ ├── WaitTest.java
│ └── YieldTest.java
│ ├── unsafe
│ ├── CustomAtomicInteger.java
│ ├── PrivateConstructTestClass.java
│ ├── TestClass.java
│ ├── UnsafeLock.java
│ ├── UnsafeLockTest.java
│ └── UnsafeTest.java
│ └── volatiles
│ ├── Singleton.java
│ └── VolatileTest.java
├── container
└── pom.xml
├── data-structure-algorithm
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── arithmetic
│ ├── BinarySearch.java
│ ├── BubbleSort.java
│ ├── HeapSort.java
│ ├── InsertSort.java
│ ├── QuickSort.java
│ ├── SelectSort.java
│ └── ShellSort.java
│ └── data
│ └── structure
│ ├── queue
│ ├── Queue.java
│ ├── QueueLinkedImpl.java
│ └── Tester.java
│ └── stack
│ ├── Stack.java
│ ├── StackArrayImpl.java
│ ├── StackLinkedImpl.java
│ └── Tester.java
├── design-pattern
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── behavioral
│ └── package-info.java
│ ├── creational
│ ├── AbstractFactoryPattern.java
│ ├── BuilderPattern.java
│ ├── FactoryMethodPattern.java
│ ├── PrototypePattern.java
│ ├── SimpleFactoryPattern.java
│ ├── SingletonPattern.java
│ ├── StaticFactoryMethodPattern.java
│ └── package-info.java
│ └── structural
│ ├── AdapterPattern.java
│ ├── BridgePattern.java
│ ├── DecoratorPattern.java
│ ├── FacadePattern.java
│ ├── ProxyPattern.java
│ └── package-info.java
├── io
├── pom.xml
└── src
│ └── main
│ └── java
│ └── ReadFile.java
├── jvm
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── Test.java
│ └── classloader
│ └── CustomClassLoader.java
├── pom.xml
├── shared-resources
├── README.md
├── Spring Boot 1.4.1 中文文档.epub
├── Spring Boot 最佳实践.pdf
├── Spring Boot 笔记.docx
├── Spring Data JPA 1.4.3 中文文档.pdf
├── Spring Security 4.1 中文文档.pdf
├── github-images
│ ├── druid-spring-boot-starter-ide-hint.jpg
│ ├── issue-31
│ │ ├── step1.png
│ │ └── step2.png
│ ├── project-example-youku.png
│ └── project-struct.png
├── java.util.concurrent.xmind
├── 阿里巴巴Java开发手册V1.2.0.pdf
└── 阿里巴巴Java开发手册V1.3.0.pdf
└── socket
├── pom.xml
└── src
└── main
└── java
├── echo
├── Client.java
└── EchoServer.java
├── netty
├── HelloClient.java
└── NettyTest.java
└── rpc
├── RpcTest.java
└── SimpleRpcFramework.java
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 |
12 | ### IntelliJ IDEA ###
13 | .idea
14 | *.iws
15 | *.iml
16 | *.ipr
17 |
18 | ### NetBeans ###
19 | nbproject/private/
20 | build/
21 | nbbuild/
22 | dist/
23 | nbdist/
24 | .nb-gradle/
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 lihengming
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 温故而知新
2 | > “温故而知新”有三解。一为“温故才知新”:温习已学的知识,并且由其中获得新的领悟;二为“温故及知新”:一方面要温习典章故事,另一方面又努力撷取新的知识。三为,温故,知新。随着自己阅历的丰富和理解能力的提高,回头再看以前看过的知识,总能从中体会到更多的东西。
3 |
4 | ## 项目目录
5 | - [数据结构 & 算法](https://github.com/lihengming/java-codes/tree/master/data-structure-algorithm)
6 | - [常见排序算法](https://github.com/lihengming/java-codes/tree/master/data-structure-algorithm/src/main/java/arithmetic)
7 | - [基础数据结构](https://github.com/lihengming/java-codes/tree/master/data-structure-algorithm/src/main/java/data/structure)
8 | - [JVM](https://github.com/lihengming/java-codes/tree/master/jvm)
9 | - [自定义类加载器](https://github.com/lihengming/java-codes/blob/master/jvm/src/main/java/classloader/CustomClassLoader.java)
10 | - [并发](https://github.com/lihengming/java-codes/tree/master/concurrent)
11 | - [Synchronized ](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/synchronizeds)
12 | - [Volatile](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/volatiles)
13 | - [线程的创建 & 协作](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/thread)
14 | - [Java 并发工具包](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/juc)
15 | - [CAS](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/cas)
16 | - [Unsafe](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/unsafe)
17 | - [生产者 - 消费者模型](https://github.com/lihengming/java-codes/tree/master/concurrent/src/main/java/pcmodel)
18 | - [网络](https://github.com/lihengming/java-codes/tree/master/socket)
19 | - [一个类实现RPC框架](https://github.com/lihengming/java-codes/tree/master/socket/src/main/java/rpc)
20 | - [设计模式](https://github.com/lihengming/java-codes/tree/master/design-pattern)
21 | - [创建型模式(Creational)](https://github.com/lihengming/java-codes/tree/master/design-pattern/src/main/java/creational)
22 | - [简单工厂模式(Simple Factory)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/SimpleFactoryPattern.java)
23 | - [工厂方法模式(Factory Method)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/FactoryMethodPattern.java)
24 | - [抽象工厂模式(Abstract Factory)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/AbstractFactoryPattern.java)
25 | - [静态工厂方法模式(Static Factory Method)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/StaticFactoryMethodPattern.java)
26 | - [创建者模式(Builder)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/BuilderPattern.java)
27 | - [原型模式(Prototype)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/PrototypePattern.java)
28 | - [单例模式(Singleton)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/creational/SingletonPattern.java)
29 | - [结构型模式(Structural)](https://github.com/lihengming/java-codes/tree/master/design-pattern/src/main/java/structural)
30 | - [外观(门面)模式(Facade)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/structural/FacadePattern.java)
31 | - [适配器模式(Adapter)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/structural/AdapterPattern.java)
32 | - [代理模式(Proxy)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/structural/ProxyPattern.java)
33 | - [装饰模式(Decorator)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/structural/DecoratorPattern.java)
34 | - [桥接模式(Bridge)](https://github.com/lihengming/java-codes/blob/master/design-pattern/src/main/java/structural/BridgePattern.java)
35 | - 组合模式(Composite)
36 | - 享元模式(Flyweight)
37 | - [行为型模式(Behavioral)](https://github.com/lihengming/java-codes/tree/master/design-pattern/src/main/java/behavioral)
38 | - 模板方法模式(Template Method)
39 | - 观察者模式(Observer)
40 | - 状态模式(State)
41 | - 策略模式(Strategy)
42 | - 职责链模式(Chain of Responsibility)
43 | - 命令模式(Command)
44 | - 访问者模式(Visitor)
45 | - 调停者模式(Mediator)
46 | - 备忘录模式(Memento)
47 | - 迭代器模式(Iterator)
48 | - 解释器模式(Interpreter)
49 | - [资源分享](https://github.com/lihengming/java-codes/tree/master/shared-resources)
50 | - [代码收藏夹](https://github.com/lihengming/java-codes/tree/master/codemarks)
51 |
52 | ## 相关文章
53 |
54 | - 浅析JVM系列
55 | - [x] [浅析JVM(一)Class文件&类加载机制](http://www.jianshu.com/p/5f3278916b38)
56 | - [x] [浅析JVM(二)运行时数据区](http://www.jianshu.com/p/460aeab77b7f)
57 | - [x] [浅析JVM(三)GC](http://www.jianshu.com/p/bf41e3425e64)
58 |
59 | - 浅析Java并发编程系列
60 | - [x] [浅析Java并发编程(一)基础概念&理论](http://www.jianshu.com/p/f4cdcc90290a)
61 | - [x] [浅析Java并发编程(二)synchronized & volatile](http://www.jianshu.com/p/7713f95b1a67)
62 | - [x] [浅析Java并发编程(三)线程的状态&协作](http://www.jianshu.com/p/7cc1c01f7655)
63 | - [x] [浅析Java并发编程(四)java.util.concurrent](http://www.jianshu.com/p/47ff843bcfe7)
64 | - [x] [浅析Java并发编程(五)CAS&Unsafe&AQS的“秘密”](http://www.jianshu.com/p/54cc20a87502)
65 |
66 | ## 关于
67 | - 本项目的两大作用
68 | 1. 温故基础、收藏可复用代码、分享资源。
69 | 2. 存放[我的技术博客](http://www.jianshu.com/u/335a31051c58)上相关文章包含的代码。
70 | - 本项目基于```Java 8```,构建工具为```Maven```,部分测试代码使用```Junit```运行,内容持续更新。
71 |
--------------------------------------------------------------------------------
/codemarks/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | java-codes
7 | com.github.lihengming
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | codemarks
13 |
14 |
15 |
--------------------------------------------------------------------------------
/codemarks/src/main/java/rest/api/result/Result.java:
--------------------------------------------------------------------------------
1 | package rest.api.result;
2 |
3 | /**
4 | * Created by 李恒名 on 2017/6/13.
5 | *
6 | * 统一API JSON 响应结果
7 | */
8 | public class Result {
9 |
10 | private int code;
11 | private String message;
12 | private Object data;
13 |
14 | public Result setCode(ResultCode resultCode) {
15 | this.code = resultCode.code;
16 | return this;
17 | }
18 |
19 | public int getCode() {
20 | return code;
21 | }
22 |
23 | public Result setCode(int code) {
24 | this.code = code;
25 | return this;
26 | }
27 |
28 | public String getMessage() {
29 | return message;
30 | }
31 |
32 | public Result setMessage(String message) {
33 | this.message = message;
34 | return this;
35 | }
36 |
37 | public Object getData() {
38 | return data;
39 | }
40 |
41 | public Result setData(Object data) {
42 | this.data = data;
43 | return this;
44 | }
45 |
46 | @Override
47 | public String toString() {
48 | return "Result{" +
49 | "code=" + code +
50 | ", message='" + message + '\'' +
51 | ", data=" + data +
52 | '}';
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/codemarks/src/main/java/rest/api/result/ResultCode.java:
--------------------------------------------------------------------------------
1 | package rest.api.result;
2 |
3 | /**
4 | * Created by 李恒名 on 2017/6/13.
5 | *
6 | * 响应码枚举
7 | */
8 | public enum ResultCode {
9 | SUCCESS(200),//成功
10 | FAIL(400),//失败
11 | Unauthorized(401),//未认证(签名错误)
12 | NOT_FOUND(404),//接口不存在
13 | INTERNAL_SERVER_ERROR(500);//服务器内部错误
14 |
15 | public int code;
16 |
17 | ResultCode(int code) {
18 | this.code = code;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/codemarks/src/main/java/rest/api/result/ResultGenerator.java:
--------------------------------------------------------------------------------
1 | package rest.api.result;
2 |
3 | /**
4 | * Created by 李恒名 on 2017/6/13.
5 | *
6 | * 响应结果生成工具
7 | */
8 | public class ResultGenerator {
9 | private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";
10 |
11 | public static Result genSuccessResult() {
12 | return new Result()
13 | .setCode(ResultCode.SUCCESS)
14 | .setMessage(DEFAULT_SUCCESS_MESSAGE);
15 | }
16 |
17 | public static Result genSuccessResult(Object data) {
18 | return new Result()
19 | .setCode(ResultCode.SUCCESS)
20 | .setMessage(DEFAULT_SUCCESS_MESSAGE)
21 | .setData(data);
22 | }
23 |
24 | public static Result genFailResult(String message) {
25 | return new Result()
26 | .setCode(ResultCode.FAIL)
27 | .setMessage(message);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/concurrent/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | java-codes
7 | com.github.lihengming
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | concurrent
13 |
14 |
15 |
--------------------------------------------------------------------------------
/concurrent/src/main/java/cas/AtomicSequence.java:
--------------------------------------------------------------------------------
1 | package cas;
2 |
3 | import java.util.concurrent.atomic.AtomicInteger;
4 |
5 | /**
6 | * Created by 李恒名 on 2017/6/20.
7 | */
8 | public class AtomicSequence {
9 | private AtomicInteger value = new AtomicInteger();
10 |
11 | public int next() {
12 | while (true) {
13 | int expect = value.get();
14 | int next = expect + 1;
15 | if (value.compareAndSet(expect, next)) {
16 | return next;
17 | }
18 | }
19 |
20 | }
21 |
22 | public int next2() {
23 | return value.incrementAndGet();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/concurrent/src/main/java/cas/Sequence.java:
--------------------------------------------------------------------------------
1 | package cas;
2 |
3 | /**
4 | * Created by 李恒名 on 2017/6/20.
5 | */
6 | public class Sequence {
7 | private int value;
8 | public synchronized int next() {
9 | return value++;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/concurrent/src/main/java/juc/CopyOnWriteArrayTest.java:
--------------------------------------------------------------------------------
1 | package juc;
2 |
3 | import java.util.List;
4 | import java.util.concurrent.CopyOnWriteArrayList;
5 |
6 | /**
7 | * Created by 李恒名 on 2017/6/18.
8 | */
9 | public class CopyOnWriteArrayTest {
10 |
11 | public static void main(String[] args) {
12 | //List