Skip to content

Commit 74192b8

Browse files
committed
'更新'
1 parent 670c054 commit 74192b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+6812
-2
lines changed

PART_1_算法基础/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## PART I 算法基础
1+
## PART_1_算法基础
22

33
[下载 XMIND 完整版](https://www.cxyhub.com/all/programming/12460/)
44

PART_2_力扣图解/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## PART II 算法图解题典
1+
## PART_2_力扣图解
22

33
| Title | 分类 | 难度 |
44
|---|---|---|

PART_3_大厂面试/README.md

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
## PART_3_大厂面试
2+
3+
考虑到现在网上面经实在太杂,很多都冠以 “BAT” 之名,重复率、错误率都非常高。所以我尽可能的挑选出了我认为比较好的 50 篇面经(基本不重复),并对内容做了分类。
4+
5+
建议大家把这个页面收藏起来,防止后面需要的时候找不到了。
6+
7+
希望大家可以点个 star 支持一下~
8+
9+
- [系统设计-长文(非常建议读,我自己也看了)](https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md)
10+
- [后端-社招(两年): 蚂蚁 头条 PingCAP](https://github.com/aylei/interview)
11+
- [后端-京东-JAVA](https://www.cnblogs.com/wupeixuan/p/8908524.html#%E4%B8%80%E3%80%81java)
12+
- [后端-百度-高并发抢红包设计](https://github.com/xbox1994/Java-Interview/blob/master/MD/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-%E9%AB%98%E5%B9%B6%E5%8F%91%E6%8A%A2%E7%BA%A2%E5%8C%85.md)
13+
- [NLP(机器学习)-百度](https://www.e-learn.cn/topic/95743)

git

Whitespace-only changes.

hello-algorithm.iml

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/03_01_DuplicationInArray" isTestSource="false" />
7+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/03_02_DuplicationInArrayNoEdit" isTestSource="false" />
8+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/04_FindInPartiallySortedMatrix" isTestSource="false" />
9+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/05_ReplaceSpaces" isTestSource="false" />
10+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/06_PrintListInReversedOrder" isTestSource="false" />
11+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/07_ConstructBinaryTree" isTestSource="false" />
12+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/08_NextNodeInBinaryTrees" isTestSource="false" />
13+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/09_01_QueueWithTwoStacks" isTestSource="false" />
14+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/09_02_StackWithTwoQueues" isTestSource="false" />
15+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/10_01_Fibonacci" isTestSource="false" />
16+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/10_02_JumpFloor" isTestSource="false" />
17+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/10_03_JumpFloorII" isTestSource="false" />
18+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/10_04_RectCover" isTestSource="false" />
19+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/11_MinNumberInRotatedArray" isTestSource="false" />
20+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/12_StringPathInMatrix" isTestSource="false" />
21+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/13_RobotMove" isTestSource="false" />
22+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/14_CuttingRope" isTestSource="false" />
23+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/15_NumberOf1InBinary" isTestSource="false" />
24+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/16_Power" isTestSource="false" />
25+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/17_Print1ToMaxOfNDigits" isTestSource="false" />
26+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/18_01_DeleteNodeInList" isTestSource="false" />
27+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/18_02_DeleteDuplicatedNode" isTestSource="false" />
28+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/19_RegularExpressionsMatching" isTestSource="false" />
29+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/20_NumericStrings" isTestSource="false" />
30+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/21_ReorderArray" isTestSource="false" />
31+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/22_KthNodeFromEnd" isTestSource="false" />
32+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/23_EntryNodeInListLoop" isTestSource="false" />
33+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/24_ReverseList" isTestSource="false" />
34+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/25_MergeSortedLists" isTestSource="false" />
35+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/26_SubstructureInTree" isTestSource="false" />
36+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/27_MirrorOfBinaryTree" isTestSource="false" />
37+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/28_SymmetricalBinaryTree" isTestSource="false" />
38+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/29_PrintMatrix" isTestSource="false" />
39+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/30_MinInStack" isTestSource="false" />
40+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/31_StackPushPopOrder" isTestSource="false" />
41+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/32_01_PrintTreeFromTopToBottom" isTestSource="false" />
42+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/32_02_PrintTreesInLines" isTestSource="false" />
43+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/32_03_PrintTreesInZigzag" isTestSource="false" />
44+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/33_SquenceOfBST" isTestSource="false" />
45+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/34_PathInTree" isTestSource="false" />
46+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/35_CopyComplexList" isTestSource="false" />
47+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/36_ConvertBinarySearchTree" isTestSource="false" />
48+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/37_SerializeBinaryTrees" isTestSource="false" />
49+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/38_StringPermutation" isTestSource="false" />
50+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/39_MoreThanHalfNumber" isTestSource="false" />
51+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/40_KLeastNumbers" isTestSource="false" />
52+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/41_StreamMedian" isTestSource="false" />
53+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/42_GreatestSumOfSubarrays" isTestSource="false" />
54+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/43_NumberOf1" isTestSource="false" />
55+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/44_DigitsInSequence" isTestSource="false" />
56+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/45_SortArrayForMinNumber" isTestSource="false" />
57+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/46_TranslateNumbersToStrings" isTestSource="false" />
58+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/47_MaxValueOfGifts" isTestSource="false" />
59+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/48_LongestSubstringWithoutDup" isTestSource="false" />
60+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/49_UglyNumber" isTestSource="false" />
61+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/50_01_FirstNotRepeatingChar" isTestSource="false" />
62+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/50_02_FristCharacterInStream" isTestSource="false" />
63+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/52_FirstCommonNodesInLists" isTestSource="false" />
64+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/53_01_NumberOfK" isTestSource="false" />
65+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/53_02_MissingNumber" isTestSource="false" />
66+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/53_03_IntegerIdenticalToIndex" isTestSource="false" />
67+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/54_KthNodeInBST" isTestSource="false" />
68+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/55_01_TreeDepth" isTestSource="false" />
69+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/55_02_BalancedBinaryTree" isTestSource="false" />
70+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/56_01_NumbersAppearOnce" isTestSource="false" />
71+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/56_02_NumberAppearingOnce" isTestSource="false" />
72+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/57_01_TwoNumbersWithSum" isTestSource="false" />
73+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/57_02_ContinuousSquenceWithSum" isTestSource="false" />
74+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/58_01_ReverseWordsInSentence" isTestSource="false" />
75+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/58_02_LeftRotateString" isTestSource="false" />
76+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/59_01_MaxInSlidingWindow" isTestSource="false" />
77+
<sourceFolder url="file://$MODULE_DIR$/专栏/剑指offer/61_ContinousCards" isTestSource="false" />
78+
</content>
79+
<orderEntry type="inheritedJdk" />
80+
<orderEntry type="sourceFolder" forTests="false" />
81+
</component>
82+
</module>
+185
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
## 中介者(Mediator)
2+
3+
### 介绍
4+
5+
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
6+
7+
### Intent
8+
9+
集中相关对象之间复杂的沟通和控制方式。
10+
11+
### Class Diagram
12+
13+
- Mediator:中介者,定义一个接口用于与各同事(Colleague)对象通信。
14+
- Colleague:同事,相关对象
15+
16+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/30d6e95c-2e3c-4d32-bf4f-68128a70bc05.png"/> </div><br>
17+
18+
### Implementation
19+
20+
Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构:
21+
22+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg"/> </div><br>
23+
24+
使用中介者模式可以将复杂的依赖结构变成星形结构:
25+
26+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg"/> </div><br>
27+
28+
```java
29+
public abstract class Colleague {
30+
public abstract void onEvent(Mediator mediator);
31+
}
32+
```
33+
34+
```java
35+
public class Alarm extends Colleague {
36+
37+
@Override
38+
public void onEvent(Mediator mediator) {
39+
mediator.doEvent("alarm");
40+
}
41+
42+
public void doAlarm() {
43+
System.out.println("doAlarm()");
44+
}
45+
}
46+
```
47+
48+
```java
49+
public class CoffeePot extends Colleague {
50+
@Override
51+
public void onEvent(Mediator mediator) {
52+
mediator.doEvent("coffeePot");
53+
}
54+
55+
public void doCoffeePot() {
56+
System.out.println("doCoffeePot()");
57+
}
58+
}
59+
```
60+
61+
```java
62+
public class Calender extends Colleague {
63+
@Override
64+
public void onEvent(Mediator mediator) {
65+
mediator.doEvent("calender");
66+
}
67+
68+
public void doCalender() {
69+
System.out.println("doCalender()");
70+
}
71+
}
72+
```
73+
74+
```java
75+
public class Sprinkler extends Colleague {
76+
@Override
77+
public void onEvent(Mediator mediator) {
78+
mediator.doEvent("sprinkler");
79+
}
80+
81+
public void doSprinkler() {
82+
System.out.println("doSprinkler()");
83+
}
84+
}
85+
```
86+
87+
```java
88+
public abstract class Mediator {
89+
public abstract void doEvent(String eventType);
90+
}
91+
```
92+
93+
```java
94+
public class ConcreteMediator extends Mediator {
95+
private Alarm alarm;
96+
private CoffeePot coffeePot;
97+
private Calender calender;
98+
private Sprinkler sprinkler;
99+
100+
public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) {
101+
this.alarm = alarm;
102+
this.coffeePot = coffeePot;
103+
this.calender = calender;
104+
this.sprinkler = sprinkler;
105+
}
106+
107+
@Override
108+
public void doEvent(String eventType) {
109+
switch (eventType) {
110+
case "alarm":
111+
doAlarmEvent();
112+
break;
113+
case "coffeePot":
114+
doCoffeePotEvent();
115+
break;
116+
case "calender":
117+
doCalenderEvent();
118+
break;
119+
default:
120+
doSprinklerEvent();
121+
}
122+
}
123+
124+
public void doAlarmEvent() {
125+
alarm.doAlarm();
126+
coffeePot.doCoffeePot();
127+
calender.doCalender();
128+
sprinkler.doSprinkler();
129+
}
130+
131+
public void doCoffeePotEvent() {
132+
// ...
133+
}
134+
135+
public void doCalenderEvent() {
136+
// ...
137+
}
138+
139+
public void doSprinklerEvent() {
140+
// ...
141+
}
142+
}
143+
```
144+
145+
```java
146+
public class Client {
147+
public static void main(String[] args) {
148+
Alarm alarm = new Alarm();
149+
CoffeePot coffeePot = new CoffeePot();
150+
Calender calender = new Calender();
151+
Sprinkler sprinkler = new Sprinkler();
152+
Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler);
153+
// 闹钟事件到达,调用中介者就可以操作相关对象
154+
alarm.onEvent(mediator);
155+
}
156+
}
157+
```
158+
159+
```java
160+
doAlarm()
161+
doCoffeePot()
162+
doCalender()
163+
doSprinkler()
164+
```
165+
166+
### JDK
167+
168+
- All scheduleXXX() methods of [java.util.Timer](http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html)
169+
- [java.util.concurrent.Executor#execute()](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html#execute-java.lang.Runnable-)
170+
- submit() and invokeXXX() methods of [java.util.concurrent.ExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)
171+
- scheduleXXX() methods of [java.util.concurrent.ScheduledExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html)
172+
- [java.lang.reflect.Method#invoke()](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#invoke-java.lang.Object-java.lang.Object...-)
173+
174+
你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图!
175+
176+
<div align="center">
177+
<a href="https://www.geekxh.com/code.png" style="box-shadow: rgb(210, 210, 210) 0em 0em 0.5em 0px; font-size: 17px;"><img src="https://www.geekxh.com/code.png" width="250px"></a>
178+
</div>
179+
180+
181+
182+
183+
184+
185+

other/designpattern/享元模式.md

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
## 享元(Flyweight)
2+
3+
### 介绍
4+
5+
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
6+
7+
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。
8+
9+
### Intent
10+
11+
利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。
12+
13+
### Class Diagram
14+
15+
- Flyweight:享元对象
16+
- IntrinsicState:内部状态,享元对象共享内部状态
17+
- ExtrinsicState:外部状态,每个享元对象的外部状态不同
18+
19+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/5f5c22d5-9c0e-49e1-b5b0-6cc7032724d4.png"/> </div><br>
20+
21+
### Implementation
22+
23+
```java
24+
public interface Flyweight {
25+
void doOperation(String extrinsicState);
26+
}
27+
```
28+
29+
```java
30+
public class ConcreteFlyweight implements Flyweight {
31+
32+
private String intrinsicState;
33+
34+
public ConcreteFlyweight(String intrinsicState) {
35+
this.intrinsicState = intrinsicState;
36+
}
37+
38+
@Override
39+
public void doOperation(String extrinsicState) {
40+
System.out.println("Object address: " + System.identityHashCode(this));
41+
System.out.println("IntrinsicState: " + intrinsicState);
42+
System.out.println("ExtrinsicState: " + extrinsicState);
43+
}
44+
}
45+
```
46+
47+
```java
48+
public class FlyweightFactory {
49+
50+
private HashMap<String, Flyweight> flyweights = new HashMap<>();
51+
52+
Flyweight getFlyweight(String intrinsicState) {
53+
if (!flyweights.containsKey(intrinsicState)) {
54+
Flyweight flyweight = new ConcreteFlyweight(intrinsicState);
55+
flyweights.put(intrinsicState, flyweight);
56+
}
57+
return flyweights.get(intrinsicState);
58+
}
59+
}
60+
```
61+
62+
```java
63+
public class Client {
64+
65+
public static void main(String[] args) {
66+
FlyweightFactory factory = new FlyweightFactory();
67+
Flyweight flyweight1 = factory.getFlyweight("aa");
68+
Flyweight flyweight2 = factory.getFlyweight("aa");
69+
flyweight1.doOperation("x");
70+
flyweight2.doOperation("y");
71+
}
72+
}
73+
```
74+
75+
```html
76+
Object address: 1163157884
77+
IntrinsicState: aa
78+
ExtrinsicState: x
79+
Object address: 1163157884
80+
IntrinsicState: aa
81+
ExtrinsicState: y
82+
```
83+
84+
### JDK
85+
86+
Java 利用缓存来加速大量小对象的访问时间。
87+
88+
- java.lang.Integer#valueOf(int)
89+
- java.lang.Boolean#valueOf(boolean)
90+
- java.lang.Byte#valueOf(byte)
91+
- java.lang.Character#valueOf(char)
92+
93+
你可以通过下方扫码回复【进群】,加入我们的高端计算机学习群!以及下载超过 100 张高清思维导图!
94+
95+
<div align="center">
96+
<a href="https://www.geekxh.com/code.png" style="box-shadow: rgb(210, 210, 210) 0em 0em 0.5em 0px; font-size: 17px;"><img src="https://www.geekxh.com/code.png" width="250px"></a>
97+
</div>
98+
99+
100+
101+
102+

0 commit comments

Comments
 (0)