Download as pdf or txt
Download as pdf or txt
You are on page 1of 252

de

ui
G
va
Ja

1.1
1.1.1 ⼒ 常
1.1.2 在话
1.1.3
1.1.4
1.1.5
1.1.6
1.1.7
1.1.8 在话
1.1.9
1.1.10
1.1.11
1.2
1.2.1 常
1.2.2
1.2.3
STAR 找Situation Task Action Result此
FAB 找Feature Advantage Benefit此
1.2.4 常
1.2.5 常
1.2.6
1.2.7 tips
1.2.8 /
1.3
1.3.1 / / 近 ⼒ 常
1.3.2 Java 常 ⼒ 常
1.3.3 Java ?
1.3.4 吗 常
1.3.5 常 常
1.3.6 常
1.3.7 / /Github 常
?
?
?
de
ui
G 1.3.8 安 ⼒ 常
常 常
va
1.4

Ja

1.4.1
1.4.2 常
Java + + +JVM
2.1 Java
1.
2. Java ?
3. JVM JDK JRE 信
JVM
JDK JRE
4. Oracle JDK OpenJDK
5. Java C++ ?
6. Java ?
7. Java ?
8. 同 ?
9. 微 Constructor override?
10.

11. Java :

12. String StringBuffer StringBuilder ? String ?


13.
14. ?
15. Java 微
16. import java javax 常
17. 常
18. 常
19. ? ?
20. ? ?
21. 微 ? 微 近 ? ?
22. 微 常
23. 更
24. , ?
25. 微 微 , ?
26. == equals( )
27. hashCode equals ( )
hashCode找此在话
hashCode
hashCode找此 equals找此
28. Java ⽔常
29. ?
30. ?
31 final
32 Java
Java 微
Throwable

33 Java 近 常
de
ui
G 34
va
35 Java IO
Ja

Java IO ?
, ?
BIO,NIO,AIO ?
36. :static,final,this,super
37. Collections Arrays
38. 向 vs 么向

2.2 Java
2.2.1 List,Set,Map 常
2.2.2 Arraylist LinkedList ?
:RandomAccess
:
2.2.3 ArrayList Vector ? Arraylist Vector 常
2.2.4 ArrayList 见
2.2.5 HashMap Hashtable
2.2.6 HashMap HashSet
2.2.7 HashSet 也
2.2.8 HashMap
JDK1.8
JDK1.8
2.2.9 HashMap 2
2.2.10 HashMap
2.2.11 ConcurrentHashMap Hashtable
2.2.12 ConcurrentHashMap /
JDK1.7找 此
JDK1.8 找 此
2.2.13 comparable Comparator
Comparator
compareTo
2.2.14 微
Collection
Map
2.2.15 ?

2.3
2.3.1. ?
?
?
2.3.2. 候 , 常

来 ?
品 内 内 来 ?

2.3.3. ?
2.3.4. ?
2.3.5. ?
2.3.6. ?
2.3.7. ?
2.3.8. 经? 经?
de
ui
G 经
经?
va
Ja

2.3.9. sleep() wait() ?


2.3.10. start() run() 近 run() 常
synchronized
synchronized
synchronized 近
synchronized
JDK1.6 synchronized 近 在话

synchronized ReentrantLock
2.3.11 volatile
1. Java
2. synchronized volatile
2.3.12 ThreadLocal
1. ThreadLocal 在
2. ThreadLocal 更
3. ThreadLocal
4. ThreadLocal 些
2.3.13 乐
1. 乐常
2. Runnable Callable
3. execute() submit() 常
4. 乐
5. ThreadPoolExecutor 样
ThreadPoolExecutor微 题 样
ThreadPoolExecutor
6. 乐Demo:Runnable+ThreadPoolExecutor
7. 乐 样
2.3.14 Atomic
1. 在话 Atomic
2. JUC 4 ?
3. AtomicInteger
4. 在话 AtomicInteger
2.3.6 AQS
1. AQS 在话
2. AQS 样
AQS
AQS
AQS
3. AQS
2.3.15 Reference
2.4 JVM
2.4.1 在话 Java 吧( )

Java 品 内

(PermGen) (MetaSpace) ?
de
ui
G 乐
va
Ja

2.4.2 Java
2.4.3 ?
2.4.4
2.4.5 Minor Gc Full GC 常
2.4.6 又?( )


2.4.7 在话 , , ,
(StrongReference)
(SoftReference)
(WeakReference)
2.4.8 ?
2.4.9 ?
2.4.10 所名 近 常
-

2.4.11 HotSpot 常
2.4.12 所名 ?
Serial
ParNew
Parallel Scavenge
Serial Old
Parallel Old
CMS
G1
2.4.13
在话 微 直

?
?
⽣ 常 在话 ?
⽣ 在话
⽣ 样
⽣ 常
⽣ 常
?
+ 微+
3.1
3.1.1 OSI TCP/IP 微 , 说 ?

3.1.2 TCP 回 ( )
TCP
de
ui
G SYN
va
SYN, ACK

Ja

3.1.2 TCP,UDP 说
3.1.3 TCP 说
3.1.4 ARQ说
ARQ说
ARQ说
3.1.5
3.1.6
3.1.7 url ->> ( )
3.1.8
3.1.9 说 HTTP说
3.1.10 HTTP ,
3.1.11 HTTP 说 , ?
3.1.12 Cookie ? Session 常
3.1.13 HTTP 1.0 HTTP 1.1 ?
3.1.12 URI URL ?
3.1.13 HTTP HTTPS 常

3.2 微
3.2.1 Queue

Java Queue

3.2.2 Set
Set

HashSet TreeSet 微

3.2.3 List
List
List
ArrayList LinkedList

3.2.4 Map
3.2.5
1. 问
2. 问
3. 问
4.
5. 问 找BST此
6. ⽚ 问 找Self-balancing binary search tree此
7.
8. B-近B+近B*
9. LSM
3.2.6
3.2.7 BFS DFS
3.3
3.3.1 同
de
ui
G KMP
va


Ja

3.3.2
3.3.3 同


喜 变

3.3.4


Solution
3.3.5


Solution
3.3.6 k


Solution
3.3.7 增 N

Solution
3.3.8 同

3.3.9 offer

3.3.10



3.3.11


3.3.12



3.3.13



3.3.14



3.3.15

de
ui
G 样

va
Ja

3.3.16 k




3.3.17


3.3.18




3.3.19 内




3.3.20 内 ,⼤



4.1 MySQL
4.1.1

4.1.2 MySQL?
4.1.3 址

MyISAM InnoDB
4.1.4
4.1.5
4.1.6 只让
4.1.7 ?
4.1.8 (ACID)
4.1.9 ?
4.1.10 下 ?MySQL 下 ?
4.1.11 经 InnoDB经
4.1.12

4.1.13 乐 乐? 乐?
4.1.14 ,id 常
de
ui
G 4.1.15 SQL MySQL
va
4.1.16 MySQL

Ja

4.1.17 SQL
4.2 Redis
4.2.1 redis 在
redis/ 让
redis map/guava 让 ?
4.2.2 redis
4.2.3 redis memcached
4.2.4 redis 微 样
String
Hash
List
Set
Sorted Set
4.2.5 redis
4.2.6 redis 外 (MySQL 2000w 近Redis 20w 近 Redis
?)
4.2.7 redis ( redis )
4.2.8 redis
4.2.9 让 让

4.2.10 Redis 实 Key


4.2.11 让 ?

5.1 Spring
5.1.1. Spring ?
5.1.2 Spring 常
5.1.3 @RestController vs @Controller
5.1.4 Spring IOC & AOP
Spring IoC AOP
IoC
AOP
Spring AOP AspectJ AOP 常
5.1.5 Spring bean
Spring bean 吧 ?
Spring 更 bean 常
@Component @Bean 常
Spring bean ?
Spring bean ?
5.1.6 Spring MVC
Spring MVC ?
SpringMVC ?
5.1.7 Spring 常
5.1.8 Spring
Spring 常
Spring 下 ?
Spring ?
@Transactional(rollbackFor = Exception.class) 常
5.1.9 JPA
de
ui
G JPA 常
va
Ja

5.2 MyBatis
5.2.1 #{} ${} 常
5.2.2 Xml ⾏ 近 select|insert|updae|delete 近 常
5.2.3 门 近 Xml ⾏ 近 Dao 近 近 Dao
常Dao 近 近 常
5.2.4 Mybatis 常 常
5.2.5 Mybatis 近
5.2.6 Mybatis 近 常
5.2.7Mybatis sql 常 sql常 sql 常
5.2.8 Mybatis sql 常 ⾏ 常
5.2.9 Mybatis 只 常 近
5.2.10 Mybatis 快 常 近 常
5.2.11 Mybatis Xml ⾏ 近 Xml ⾏ 近id 常
5.2.12 Mybatis 常
5.2.13 Mybatis Executor 常 常
5.2.14 Mybatis Executor 常
5.2.15 Mybatis ⾏ Enum ⼦ 常
5.2.16 Mybatis ⾏ 近 A include B 近 近B
A 近 A 常
5.2.17 Mybatis Xml ⾏ Mybatis 微 ⾏ 常
5.2.18 Mybatis ORM ⾏ 常 常
5.3 Kafka
5.3.1 Kafka 常 常
5.3.2 ,Kafka 常
5.3.3 常Kafka 常

-三之 :Kafka
5.3.4 Producer Consumer Broker Topic Partition常
5.3.5 Kafka 常 常
5.3.6 Zookeeper Kafka 常
5.3.7 Kafka 常
5.3.8 Kafka

Kafka
5.3.9 Kafka
Reference

6.1
6.1.1 (Authentication) (Authorization) 常
6.1.2 Cookie ? Cookie ? Cookie ?
Cookie ? Cookie ?
Cookie 常
6.1.3 Cookie Session 常 Session 常
6.1.4 Cookie Session 常
6.1.5 Cookie CSRF 近 token 常
6.1.6 Token? JWT? Token 常
6.1.7 OAuth 2.0常
6.1.8 SSO?
de
ui
G 6.1.9 SSO OAuth2.0
va


Ja

7.1 , offer
7.1.1
7.1.2 ( )
7.1.3 ( )
7.1.4 ( )
7.1.5 ( )
7.1.5 (HR )

7.2 ⼗度
7.2.1 (37 )
7.2.2 (33 )
7.2.3 (46 )
7.2.4 HR
7.3 bingo-interview
7.3.1
7.3.2
7.3.3 Bigo
7.3.4 ( )
7.3.5
7.3.6

7.4 2019 ⼗度
7.4.1
7.4.2 ⼗度

7.4.3

7.4.4

7.5 2020
7.5.1
7.5.2
7.5.3
7.5.4 hr

/
de
ui
G ⼒

va
9.1
Ja

近 近
近天 近 机 近 收

JavaGuide 近 JavaGuide
“ ” 直 近 机 加 风 近 全


之 : JavaGuide1996 koushuangbwcx@163.com
找ps: 全 近 近 此
de
ui 2.3 Java 2.3.1 候 近 候 张 张 直
G
va
Oracle 近 ~~~~
Ja

JavaGuide 70k+ Star 近 Java Star Star


近 Dubbo 近
直 直爱 直

近 “Java + ”
JavaGuide 喜

1. Java 始
2.

图 JavaGuide 等 近 Java
体 JavaGuide 近 两 近
现 PDF 近 JavaGuide 之
PDF Java 近 3 近
三 JavaGuide pdf

近 近 近
⽅ 直会 ⼏

⼏ 找 PDF 此近 PDF
Typora


近 近
元近
近 ⼒ 直
Ja
va
G
ui


de


1
直会
de
ui
G
va
Ja

V1.0—2020-03-07
JavaGuide 直

V1.1—2020-03-13

√ 近
√ 近
√ 2.1 Java p36+p37
√ 3.3 ThreadLocal
√ 近 之
√ 更 V1.1-JavaGuide

/
de
ui 在话”
G √ “
va
Ja

√ Kafka

Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf


近 “ ”
近 直 近

1.1

1.1.1
/ ——

1. 始
2. 7 近 10 ⼒找 BAT此
近 3 近 4 近 5
找 此
3. 始
4. 近 近

1.
2.
3. /

4. /Github
5.

近 现 近 妈
近 offer近 近
de
ui 1.1.2
G
va
Ja

在话 近 近 近
在话 常

在话

1. 内 吧始
2. 始
3. bug 觉 始

更 直 更 近 在话 近
近 回 近
在话 hr 近 近 始

近 直 1 近 Spring MyBatis
Java JVM
⾛真 近
微 图 近
10 ⼼近 ⼼ RPC 近
Netty 近 近 Github 2k Star! ⼼
近 近
近 近
朋 近 直

近 直 Java Spring MyBatis


近 Spring MyBatis shiro
近 近
近 三
⼼ RPC 近 Netty 近
近 Github 2k Star! ⼼ 近
近 近
近 朋
近 直

1.1.3

de
ui
G
va
Ja

1.1.4
常NO直NO直NO直 住近

de
ui 1.1.5
G
va
Ja

1.1.6
找 此 近 code近

1.1.7

1.1.8
近 近 在话

1. 找 微 此
2.
3. 近 近
4. 候 近 近 说 说

redis 让 原道

1.1.9

( 近 常 常
直)

1.1.10

⽉ ThoughtWorks ThoughtWorks
ThoughtWorks 近
微 近
近 20

1.1.11
近 发 始 近 知 近 近
近 近
近星 发 试 热热 近
近 直
de
ui 1.2
G
va
Ja

Markdown 近
Markdown 近 Markdown PDF

Markdown 近 Markdown PDF ⽔

Markdown 近 Markdown : http://www


.markdown.cn

1.2.1
⼩ 与 近
?

⼩近 HR 近 HR 10 近 HR
Fail Pass
近 近 近

近 近 近

近 近

近 为 近
更 找Java 微
此近 redis, redis
redis redis redis memcached
redis 外

近 近 近
近 找

近 吧 近 吃
近 offer 近

1.2.2
1. HR 找 直此近 近
近 近 ⼒

2.

3.
4.
de
ui 1.2.3
G
va
Ja

STAR Situation Task Action Result

Situation 始
Task: 始
Action 样近 始
Result 近

近STAR 近 近 近
近 近 候 近 样

FAB Feature Advantage Benefit

Feature 始
Advantage 始
Benefit 啦光 近 安

1.2.4

1.
2.
3. 近 近
4. 候 近 近 说 说

: redis 让 原道

1.2.5
近 HR 近
⽩ 近
近 ( 但
近 )


Java
JVM 品 找Java 吧 品 所名 品所名 JVM 此

Struts2 Spring Hibernate Ajax Mybatis JQuery


SSH SSM SOA 微
Dubbo
Zookeeper:
:
Linux
MySQL
de
ui Spring Boot +Spring Cloud +Docker:
G
va
Hadoop HDFS Storm MapReduce Hive Hbase
Ja

Python OpenCV wxpy wordcloud matplotlib

1.2.6
1. 近 都 始
2. MySQL mysql近Java java
今并 近 始
3. 始

1.2.7 tips
1. 近 啊 近 近 微
2. 内 近
3. Github 近
4. 近 近 ⾥
5. 近 近
6. 近 近
7. “ 之 近 ” 近

1.2.8 /
那 (MarkDown 近 PDF):http://cv.ftqq.com/
Typora+Java

1.3
只 :“ / / 近 ⼒
常” “ 常” “ Java常” “Java 常” “
Java 常”......

Java Java

1.3.1 / /
985 211 近 近

近 近 近 近
近 近 ⼒ 近
近 近 近 实
de
ui HR 近会 985近211 更 近HR
G
va
近 近
常 四四 还 还 ⼒ 近
Ja

⼒ 安 近 ⼰ 近
BAT 近 近 ⼒ 还 还
实 ACM

⼒ 近

1.3.2 Java
直 近
90% 近 近 近
近 笑推近 Question1
近 近 ⼒ 近 正

近 近 近
常 直 近
近 近 为

近 福 业 微
近 3 近 近
⼒ 近 近“ 微 直
微 直 微 直”近 3

1.3.3 Java ?

JavaGuide “1”

1. Java 找 Java 以1 Head First Java


Java 此近 找 此

2. 找 Java Java 此
3. ⼒ 近 Java 近
近 Leetcode
4. (HTML CSS JavaScript), BootStrap VUE
5. MySQL SQL
6. J2ee Maven 找 Jar 近 Jar
近 Maven 此
7. Struts2( ) Spring SpringMVC Hibernate Mybatis ( )
Spring 找 ⼒ 此近 SpringBoot
SpringBoot近 Spring SpringMVC
8. Linux ( )
9. Dubbo Zookeeper 找 ActiveMq RabbitMQ此 .找
近 近 近 之 近 此
10. NIO Netty,
11. ( )近 ⼒近JVM 找Java
JVM 此 Java 品 JVM 门找 近
de
ui 近 近
G
va

喜 近 近 常
Ja

近 近 直直直
近 近 常 /Google近 址

1.3.4
近 近 ⼒ offer
近 每

近 近
近 近

1.3.5
Tips

1. 找 近
近 今 此始
2. 找

3. +
找 找 此近 近 code近
此 近 近 近

4. 晚
( 近 常
常 直)
5.

6. 近 近 在话
想 福 找
微 始 始业
近 近 始 候 近
近 说 说
: redis 让
原道
7. : 下 HashMap 样 SpringMVC
近 直 在话
8. : “
近 ?” “ 近 ?” “ "
?" , ” 近 近 近

9. 动 近
de
ui 近 发 始 近 知
G
va

1.3.6
Ja

们 找 近
近 近 近 近
此 近 难 8 近
不 近 近

近 近 没

1.3.7 / /Github

1. 近
近 么 近 近 近

2. Github 近 近
近 近
3. 近 近

Java

近 Segmentfault CSDN
近 近 找 Hexo+Githu Pages 此

Github近 Github近 近 readme 近


1.3.8
Java
安 近 安 近 Java / / 近

1. jvm 始
2. 喜“ ”近 SOLID 近 之
近 SOLID 常 找 此
3. 近 直
de
ui 4. 让 近
G
va
Ja

5. sense :

Java 安怎
Ja
va
G
ui
de
de
ui ⼒ 安 Java /
G
va

Ja

1. 实 找 ACM 此始
2. 微 始
3. 找 此
4. Python Shell Perl 始
5. Java 始
6. SOA 最 始
7. Spring始
8. 始
9.

近 之 合 “ 近
” 直

近 近
找 此近

1.4 常 常
1.4.1

直 近 感
10 已 近 直

常 想

1.
2.
3.
de
ui 4.
G
va


Ja

/Google近 址

1.4.2

近 JavaGuide htt
ps://github.com/Snailclimb/JavaGuide
JavaGuide

近 找 + + 此直 在话

Java + + +JVM
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

2.1 Java
1.
更 近 近 ⼏ 近
近 Linux/Unix


近 近

issue : 常常

近 近 近Java
近 Java 场 近 CPU

场 近
Java
de
ui 2. Java ?
G
va
Ja

1. 始
2. 找 近 近 此始
3. 找 Java 品 此始
4. 始
5. 始
6. 找 C++ 近
近 Java 此始
7. 找 Java 放 近 Java
此始
8. 场 始

找 issue#544 此 C++11 找 2011 此 ,C++ 近


windows linux macos std::thread std::async http:/
/www.cplusplus.com/reference/thread/thread/?kw=thread

3. JVM JDK JRE

JVM

Java 品 找JVM此 Java 品 JVM 找Windows近


Linux近macOS此近 近

? ?

Java 近JVM 字节码找 见 .class 此近


近 品 Java 近
近 Java 近 近
近 近Java 场

Java 3

.class-> JVM 近
近 近
( )近 JIT 场 近 JIT 场 JIT 场
场 近 近 近
Java Java 场

HotSpot 感(Lazy Evaluation) 近 近 ⼏


找 此近 JIT 场 JVM
近 近 JDK 9
场 AOT(Ahead of Time Compilation)近 场 近
de
ui JIT JDK 场 AOT 说 近AOT 场 场
G
va
JIT 场
Ja

Java 品 找JVM此 Java 品 JVM 找Windows近


Linux近macOS此近 近 JVM
Java “ 场近 ”

JDK JRE

JDK Java Development Kit近 的 Java SDK JRE 近 场


找javac此 找 javadoc jdb此 场

JRE Java 场 Java 近 喜 Java 品


找JVM此近Java 近java 微 近

Java 近 JRE Java


近 JDK 近 近
Java 近看 JDK 更 近 JSP 量 Web 近 近
Java JDK 常 JSP
Java servlet近 JDK 场 servlet

4. Oracle JDK OpenJDK


著 OpenJDK Oracle OpenJDK
常 近

Java 7 近 OpenJDK Sun 定 HotSpot 近


OpenJDK Java 7 近 Oracle JVM近JDK近JRE OpenJDK
近Oracle 2012

OpenJDK 微 Oracle JDK 常

- Oracle JDK 微 OpenJDK 7 微 近 全 近更


量 近 喜 Oracle Java Java WebStart 近 得 ⽣
近 近 近 Rhino近 中 近 博
近 Oracle JDK 近 想

1. Oracle JDK 6 近 OpenJDK ⽇


近 https://blogs.oracle.com/java-platform-group/update-
and-faq-on-the-java-se-release-cadence
2. OpenJDK 近 Oracle JDK OpenJDK 近

3. Oracle JDK OpenJDK 我 OpenJDK Oracle JDK 近 Oracle JDK
近 / 近 Oracle JDK近
我 近 OpenJDK 把
近 近 Oracle JDK 始
4. JVM 近Oracle JDK OpenJDK 始
5. Oracle JDK 近
de
ui 始
G
va
6. Oracle JDK 说 近 OpenJDK GPL v2
Ja

5. Java C++ ?
C++近 Java C++ 直 直直直
C++近 直


Java 近
Java 近C++ 始 Java 近
Java 近
C ‘\0’ Java

https://blog.csdn.net/sszgg2006/article/details/49148189

Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

6. Java ?
近 Java 近 main找此
Java 近 JApplet Applet
public 近 public Java

7. Java ?
( main() ) applet main() 近
( init() run() )近 flash

8. ?
1. : ; 同
2. : ( ASCII ), ; 同 (
同 )
3. ⼰ ⼰2 ; 同 ⼰ ( char Java )
de
ui java 2.2.2
G
va
Ja

9. Constructor override?
Constructor override找 此, overload找 此, 微

10.

近 近 近

Java 在话
de
ui
G
va


Ja

,
近 近活 近 近
private

11. Java :

来 近 近
近 近

近 近

1. 找 喜来 来 此近 来

2. 近 见
3. 找 在话此

近 近 更 近

Java 找 此 找

12. String StringBuffer StringBuilder ? String


?

String final 同 近 private final char


value[]近 String

找 issue 675此 Java 9 近String byte 同 private


final byte[] value

StringBuilder StringBuffer AbstractStringBuilder 近 AbstractStringBuilder


同char[]value final 近

StringBuilder StringBuffer 微 微 AbstractStringBuilder 近



de
ui AbstractStringBuilder.java
G
va
Ja

abstract class AbstractStringBuilder implements Appendable, CharSequence {


/**
* The value is used for character storage.
*/
char[] value;

/**
* The count is the number of characters used.
*/
int count;

AbstractStringBuilder(int capacity) {
value = new char[capacity];
}

String 近 近 AbstractStringBuilder StringBuilder


StringBuffer 近 同 近 expandCapacity append insert
indexOf StringBuffer 经 经近
StringBuilder 经近

String 近 String 近 String


StringBuffer StringBuffer 近
StringBuilder StringBuffer 10%~15% 近

1. : String
2. 同让 : StringBuilder
3. 同让 : StringBuffer

13.

14. ?
近 近 近

15. Java
de
ui Java 微 近 super() 微 近
G
va
“ 微 ” 近 微 近 微
微 近 场 近
Ja

super() Java
微 微

16. import java javax


JavaAPI java 近javax 见 API
近javax 见 Java API 近 见 javax java
近 近 javax API

近 java javax

17.
1. public近 (Java 8 此近

2. static final 近 近
3. 近 extends 见

4. public近 public protected default 找


private 直此
5. 近 近 近 近

1. JDK8 近 近
近 近 近 (
issue:https://github.com/Snailclimb/JavaGuide/issues/146
2. jdk9 来

jdk7~jdk9 Java 找 之 此

1. jdk 7 近

2. jdk8
3. Jdk 9 来 来

18.
1. : 近 始
public,private,static 近 static 始
近 final
2. : static 近
近 static 近 更 近

3. : 近 近

4. 游 : 游 找 更 : final
游 此近 游
de
ui 19. ? ?
G
va
Ja

new 近new 更找 更 此近 更找 内
此 0 1 找 近 此;
n 找 n 此

20. ? ?
直找
此 : 近 直

21. ?
? ?

22.
1.
2. 近 void 微 题
3. 近

23.
1. 近 " . " 近 " . " 更

2. 近 找 此近
更 更 始 更

24. , ?
近 近

25. , ?

26. == equals( )
== : 近 (
== 近 == )

equals() :

1 equals() equals() 近 “==”

2 equals() 近 equals() 始
近 true ( 近 )
de
ui
G
va
Ja

public class test1 {


public static void main(String[] args) {
String a = new String("ab"); // a 为⼀个引⽤
String b = new String("ab"); // b为另⼀个引⽤,对象的内容⼀样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,⾮同⼀对象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}

String equals 近 object equals 近


String equals
String 近 品 乐
近 游 乐 String

27. hashCode equals ( )


“ hashcode equals 近 equals hashCode
常”

hashCode

hashCode() 近 始 int
hashCode() JDK Object.java 近 Java
hashCode() 题

(key-value)近 “ ” 也 “ ”
直找 此

hashCode

“HashSet ” hashCode HashSet 近


HashSet hashcode 近
hashcode 近 hashcode近HashSet
hashcode 近 equals() 也 hashcode
近HashSet 近 找但
Java 主 Head first java 此 equals 近
de
ui hashCode() 近 始 int
G
va
hashCode()

Ja

hashCode()

hashCode equals

1. 近 hashcode
2. , equals true
3. hashcode 近
4. equals hashCode
5. hashCode() hashCode()近 class
找 此

之 Java hashCode() equals()

28. Java
Java ⽔常

29. ?

近 近
近 近 近

近 近

近 近
近 又 近 近
近 近 ⼰ CPU 近 近 近
近 近
近 近
近 孩近
近 近

30. ?
Java 6 找 Java
4.1.4 此
de
ui ⽇ Java
G
va
找 Java 4.1.4 此
Ja

NEW 近 start() 近
READY cpu 找 timeslice 此
RUNNING

个 Java 品 找JVM此 READY RUNNING 近 RUNNABLE


找 HowToDoInJava Java Thread Life Cycle and Thread States此近 Java
RUNNABLE

wait() 近 WAITING
近 TIME_WAITING( )
近 sleep(long millis) wait(long millis) Java
TIMED WAITING Java RUNNABLE
近 经 近 BLOCKED
Runnable run() TERMINATED

31 final
de
ui final
G
va

1. final 近 近 果 始
Ja


2. final 近 final 个
final
3. final 经 近 始
Java 近 final 图 近
找 Java final
此 private 个 final

32 Java

Java

Java 近 享 java.lang Throwable Throwable


Exception Error 近 Java 近

Error : 近
近 JVM找Java 品 此 更 近Java 品
找 Virtual MachineError 此 近 JVM 近
OutOfMemoryError 近Java 品 找JVM此

因 品 品 近 Java 品
找Virtual MachineError此 找NoClassDefFoundError此 近

近 近 Java 近
Error 候
de
ui Exception : Exception RuntimeException
G
va
RuntimeException Java 品 活 NullPointerException找
近活 此 ArithmeticException找 近 近活 此
Ja

0
ArrayIndexOutOfBoundsException 找 此

Throwable

public string getMessage(): 候


public string toString():
public string getLocalizedMessage(): Throwable
近 近 getMessage找此

public void printStackTrace(): Throwable

try 表 中 catch 近 catch 近 finally

catch try 表
finally 表 近finally try catch
return 近finally

4 finally

1. finally 近finally
2. System.exit(int) exit 题 始 近
finally
3. 又
4. 得 CPU

issue:https://github.com/Snailclimb/JavaGuide/issues/190

try finally return 近 近finally


近 finally

public static int f(int value) {


try {
return value * value;
} finally {
if (value == 2) {
return 0;
}
}
}

f(2)近 0近 finally try

33 Java
近 transient
de
ui transient 死 更 始 近
G
va
transient transient 近
Ja

34
1 Scanner

Scanner input = new Scanner(System.in);


String s = input.nextLine();
input.close();

2 BufferedReader

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));


String s = input.readLine();

35 Java IO

Java IO ?

近 始
近 始

Java Io 晚 40 近 近 近
近 Java I0 40 4 ⽣

InputStream/Reader: 近 近
OutputStream/Writer: 近 近


Ja
va
G
ui
de


de
ui
G
va
Ja

, ?

I/O

Java 品 近 ⼏ 近 近
近 I/O 近
开 近 晚

BIO,NIO,AIO ?

BIO (Blocking I/O): 死 I/O 近 死


找 1000此 近 近
I/O 近 想 乐
近 让 近 还 近
BIO 近 I/O
NIO (New I/O): NIO 死 I/O 近 Java 1.4 NIO 近 java.nio
近 Channel , Selector近Buffer NIO N Non-blocking近
New 让 近 I/O NIO BIO Socket
ServerSocket SocketChannel ServerSocketChannel ,
死 死 死 近 近
始 死 近 死 I/O
始 找 此 近 NIO 死

AIO (Asynchronous I/O): AIO NIO 2 Java 7 NIO NIO 2,


de
ui 死 IO IO 近 近 和
G
va
近 近 AIO IO 近
近 死 近 近
Ja

NIO NIO IO NIO


IO 近 近 IO 近IO
之 近 AIO 近Netty
AIO近

36. :static,final,this,super
: https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basic/final,
static,this,super.md

37. Collections Arrays


:
https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basic/Arrays,CollectionsCommo
nMethods.md

38. vs
1. ⽔近 ⽔ 向 近 么向
2. ⽔近 近 近 近

https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre
https://www.educba.com/oracle-vs-openjdk/
https://stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk?ans
wertab=active#tab-top

JavaGuide : JavaGuide
"Java " 直

Java : Java “1”


de
ui
G
va
Ja

2.2 Java
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

2.2.1 List,Set,Map
List( ) List 找 此近

Set( ):
Map( Key ): Map Key Key
近 Key 近 Key String 近

2.2.2 Arraylist LinkedList ?


1. ArrayList LinkedList 近 始
2. Arraylist Object 始LinkedList
微找JDK1.6 近JDK1.7 近
在话 直此
3. 福 ArrayList
add(E e) 近 ArrayList
近 O(1) i 增
找add(int index, E element)此 O(n-i) i
i (n-i) / LinkedList
​ e)
add(​E O 1
i (add(int index, E element) o(n))

4. LinkedList 近 ArrayList
( get(int index) )
5. ArrayList list 近
LinkedList ⼏ ArrayList 找
de
ui 此
G
va

:RandomAccess
Ja

public interface RandomAccess {


}

RandomAccess 近 RandomAccess
⽅ 常

binarySearch ( 此 近 list RamdomAccess 更近 近


indexedBinarySearch() 近 近 iteratorBinarySearch()

public static <T>


int binarySearch(List<? extends Comparable<? super T>> list, T key) {
if (list instanceof RandomAccess || list.size()
<BINARYSEARCH_THRESHOLD)
return Collections.indexedBinarySearch(list, key);
else
return Collections.iteratorBinarySearch(list, key);
}

ArrayList RandomAccess 近 LinkedList 常


微 直ArrayList 近 LinkedList 近
O找1此近 近
O找n此近 近ArrayList RandomAccess 近
RandomAccess 近 ArrayList RandomAccess

list

RandomAccess list近 for 近 foreach,


RandomAccess list近 iterator 找foreach iterator
,此近 size 近 for

近 prev 近 next
de
ui
G
va
Ja

next head近 head prev 近微

2.2.3 ArrayList Vector ? Arraylist Vector


Vector Vector
Vector ⼏

Arraylist 近 Arraylist

2.2.4 ArrayList
: 样ArrayList 见

2.2.5 HashMap Hashtable


1. HashMap 近HashTable 始HashTable
synchronized 找 ConcurrentHashMap 直此始
2. 近HashMap HashTable 近HashTable
外近 始
3. Null key Null value HashMap 近null 近 近
null HashTable put null近 活
NullPointerException
4. 福 近Hashtable
de
ui 11近 见 近 2n+1 HashMap 16 见
G
va
近 2国 近 Hashtable
近 见 找HashMap 近
Ja

HashMap 2 tableSizeFor()
此 HashMap 2 , 在话 2

5. JDK1.8 HashMap 近 服
找 8此 近 近 Hashtable

HashMap

public HashMap(int initialCapacity, float loadFactor) {


if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " +
loadFactor);
this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity);
}
public HashMap(int initialCapacity) {
this(initialCapacity, DEFAULT_LOAD_FACTOR);
}

HashMap 2

/**
* Returns a power of two size for the given target capacity.
*/
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n +
1;
}

2.2.6 HashMap HashSet


HashSet HashSet HashMap 找HashSet
近 clone() writeObject() readObject() HashSet
近 HashMap

HashMap HashSet
de
ui
G Map Set
va
Ja

put() map add() Set 全


HashMap HashSet hashcode 近 hashcode


找Key此 Hashcode 近 equals() 近

2.2.7 HashSet
HashSet 近HashSet hashcode 近
hashcode 近 hashcode近HashSet
hashcode 近 equals() 也 hashcode
近HashSet 找但 Java 主 Head fist java

hashCode equals

1. 近 hashcode
2. , equals true
3. hashcode 近
4. 近equals 近 hashCode
5. hashCode() hashCode()近 class
找 此

== equals

1. == 更 equals 更

2. == equals() 同
3. == equals()

Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

2.2.8 HashMap

JDK1.8

JDK1.8 HashMap HashMap key


hashCode hash (n - 1) & hash
n hash
key

HashMap hash hash


hashCode()

JDK 1.8 HashMap hash :


de
ui JDK 1.8 hash JDK 1.7 hash 近
G
va
Ja

static final int hash(Object key) {


int h;
// key.hashCode():返回散列值也就是hashcode
// ^ :按位异或
// >>>:⽆符号右移,忽略符号位,空位都以0补⻬
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

JDK1.7 HashMap hash .

static int hash(int h) {


// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).

h ^= (h >>> 20) ^ (h >>> 12);


return h ^ (h >>> 7) ^ (h >>> 4);
}

JDK1.8 hash 近JDK 1.7 hash 近 会 过 4

“ ” 近

de
ui JDK1.8
G
va

近 JDK1.8 近 服 找
Ja

8此
近 近

TreeMap TreeSet JDK1.8 HashMap 问


近 问 微

Java 8 HashMap https://zhuanlan.zhihu.com/p/21673805

2.2.9 HashMap 2
HashMap 近 天起近
近Hash -2147483648 2147483647近 40 ⾏ 近 题 ⾏
近 天起 40 近
近 ⼼
“ (n - 1) & hash” 找n
此 HashMap 2

% ⼼ 近 “ (%) 2
(&) hash%length==hash&(length-1) length 2
n ” & % HashMap
2

2.2.10 HashMap
Rehash 近jdk 1.8
近 HashMap, HashMap
ConcurrentHashMap
de
ui https://coolshell.cn/articles/9606.html
G
va

2.2.11 ConcurrentHashMap Hashtable


Ja

ConcurrentHashMap Hashtable

JDK1.7 ConcurrentHashMap + 近JDK1.8


微 HashMap1.8 微 近 + / 问 Hashtable JDK1.8 HashMap
微 + 近 HashMap 近

福 JDK1.7 ConcurrentHashMap ⾝
从 (Segment)近 经 经 近
近 经实 近 JDK1.8 Segment
Node + + synchronized CAS
JDK1.6 synchronized
HashMap近 JDK1.8 Segment 微近 近
始 Hashtable( ): synchronized 近
近 近 死 只 近 put 全 近
put 全 近 get近实

http://www.cnblogs.com/chengxiao/p/6842045.html

HashTable:

JDK1.7 ConcurrentHashMap
de
ui
G
va
Ja

JDK1.8 ConcurrentHashMap TreeBin: Node:

2.2.12 ConcurrentHashMap /

JDK1.7

近 经近 ⼰ 经

ConcurrentHashMap Segment HashEntry

Segment ReentrantLock, Segment 经近睡 经 HashEntry


de
ui
G static class Segment<K,V> extends ReentrantLock implements Serializable {
va
}
Ja

ConcurrentHashMap Segment Segment 微 HashMap 近


微近 Segment HashEntry 近 HashEntry 微 近
Segment HashEntry 近 HashEntry 近
Segment 经

JDK1.8

ConcurrentHashMap Segment 经近 CAS synchronized 微


HashMap1.8 微 近 + / 问 Java 8 服 找8此 找
O(N)此 找 O(log(N))此

synchronized 经 问 近 hash 近 近
N国

2.2.13 comparable Comparator


comparable java.lang compareTo(Object obj)
comparator java.util compare(Object obj1, Object obj2)

近 compareTo() compare() 近
近 song
近 compareTo() Comparator Comparator
近 Collections.sort().

Comparator

ArrayList<Integer> arrayList = new ArrayList<Integer>();


arrayList.add(-1);
arrayList.add(3);
arrayList.add(3);
arrayList.add(-5);
arrayList.add(7);
arrayList.add(4);
arrayList.add(-9);
arrayList.add(-7);
System.out.println("原始数组:");
System.out.println(arrayList);
// void reverse(List list):反转
Collections.reverse(arrayList);
System.out.println("Collections.reverse(arrayList):");
System.out.println(arrayList);

// void sort(List list),按⾃然排序的升序排序


Collections.sort(arrayList);
System.out.println("Collections.sort(arrayList):");
System.out.println(arrayList);
// 定制排序的⽤法
de
ui Collections.sort(arrayList, new Comparator<Integer>() {
G
va
Ja

@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
System.out.println("定制排序后:");
System.out.println(arrayList);

Output:

原始数组:
[-1, 3, 3, -5, 7, 4, -9, -7]
Collections.reverse(arrayList):
[-7, -9, 4, 7, -5, 3, 3, -1]
Collections.sort(arrayList):
[-9, -7, -5, -1, 3, 3, 4, 7]
定制排序后:
[7, 4, 3, 3, -1, -5, -7, -9]

compareTo

// person对象没有实现Comparable接⼝,所以必须实现,这样才不会出错,才可以使treemap中的
数据按顺序排列
// 前⾯⼀个例⼦的String类已经默认实现了Comparable接⼝,详细可以查看String类的API⽂档,
另外其他
// 像Integer类等都已经实现了Comparable接⼝,所以不需要另外实现了

public class Person implements Comparable<Person> {


private String name;
private int age;

public Person(String name, int age) {


super();
this.name = name;
this.age = age;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public int getAge() {


return age;
}
de
ui
G
va
public void setAge(int age) {
Ja

this.age = age;
}

/**
* TODO重写compareTo⽅法实现按年龄来排序
*/
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
if (this.age > o.getAge()) {
return 1;
} else if (this.age < o.getAge()) {
return -1;
}
return age;
}
}

public static void main(String[] args) {


TreeMap<Person, String> pdata = new TreeMap<Person, String>();
pdata.put(new Person("张三", 30), "zhangsan");
pdata.put(new Person("李四", 20), "lisi");
pdata.put(new Person("王五", 10), "wangwu");
pdata.put(new Person("⼩红", 5), "xiaohong");
// 得到key的值的同时得到key所对应的值
Set<Person> keys = pdata.keySet();
for (Person key : keys) {
System.out.println(key.getAge() + "-" + key.getName());

}
}

Output

5-⼩红
10-王五
20-李四
30-张三

2.2.14

Collection

1. List

Arraylist Object
Vector Object
de
ui LinkedList (JDK1.6 近JDK1.7 )
G
va

2. Set
Ja

HashSet : HashMap 近 HashMap


LinkedHashSet LinkedHashSet HashSet近 LinkedHashMap
LinkedHashMap HashMap 近

TreeSet ( ⽚ 问 )

Map

HashMap JDK1.8
HashMap + 近 HashMap 近
找“ ” 此 JDK1.8 近
服 找 8此 近 近
LinkedHashMap LinkedHashMap HashMap近 看 微
近LinkedHashMap 微 近
近 微 近
LinkedHashMap 样找JDK1.8此
Hashtable + 近 HashMap 近

TreeMap 找 ⽚ 问 此

2.2.15 ?
近 Map 近
TreeMap, HashMap, ConcurrentHashMap.
近 Collection 近 Set
TreeSet HashSet近 List ArrayList LinkedList近

JavaGuide : JavaGuide
"Java " 直

Java : Java “1”


de
ui
G
va
Ja

2.3
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

2.3.1. ?

近 近
近 又

Java 近 main 题 JVM 近 main 题


近 windows 近 window
找.exe 此
de
ui
G
va
Ja



近 近 近
近 近

Java 近 JMX Java 近


de
ui
G public class MultiThread {
va
public static void main(String[] args) {
Ja

// 获取 Java 线程管理 MXBean


ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// 不需要获取同步的 monitor 和 synchronizer 信息,仅获取线程和线程堆栈信息
ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
// 遍历线程信息,仅打印线程 ID 和线程名称信息
for (ThreadInfo threadInfo : threadInfos) {
System.out.println("[" + threadInfo.getThreadId() + "] " +
threadInfo.getThreadName());
}
}
}

找 近 近 main
main 此

[5] Attach Listener //添加事件


[4] Signal Dispatcher // 分发处理给 JVM 信号的线程
[3] Finalizer //调⽤对象 finalize ⽅法的线程
[2] Reference Handler //清除 reference 线程
[1] main //main 线程,程序⼊⼝

Java main

2.3.2. ,
JVM

Java 吧近 JVM Java


吧( ) 之 Java 吧
de
ui
G
va
Ja

近 (JDK1.8
) 近


近 近

见 直

来 常

1. 近 近

2. 近 近
de
ui 近 native 近 undefined 近
G
va
Java
Ja

近 来

Java 内 内 乐
近 内 Java 品 内 内 内

品 内 回 近 Java
Native HotSpot 品
Java 品 内

近 近 品 内 内 来

近 近 (
)近 场 场

2.3.3. ?
近 ( )始

2.3.4. ?

近 ,
近 CPU 近

还 近

CPU IO 更
CPU 近IO 始 IO 近CPU
50% 近 CPU
近 IO 近 100%
: CPU 更
近 近CPU CPU 近
CPU 近 CPU

2.3.5. ?
de
ui 近
G
va
近 近 些 经
Ja

2.3.6. ?
Java 6 找 Java
4.1.4 此

⽇ Java
找 Java 4.1.4 此

NEW 近 start() 近
READY CPU 找timeslice此
RUNNING

个 Java 品 找 JVM 此 RUNNABLE RUNNING 近


RUNNABLE 找 HowToDoInJava Java Thread Life Cycle and Thread States此近
Java RUNNABLE
de
ui
G
va
Ja

wait() 近 WAITING
近 TIME_WAITING( )
近 sleep(long millis) wait(long millis) Java
TIMED WAITING Java RUNNABLE
近 经 近 BLOCKED
Runnable run() TERMINATED

2.3.7. ?
CPU 近 CPU
近 近CPU

喜 CPU 近

近 近
近 他 近 ⼏ CPU 近
近 ⼏

Linux 找 喜 Unix 此 近 近

2.3.8. ? ?

死 近 死 近

近 A 2近 B 1近 ⼩ 近

de
ui
G
更 经, 品 经 ( )
va
Ja

public class DeadLockDemo {


private static Object resource1 = new Object();//资源 1
private static Object resource2 = new Object();//资源 2

public static void main(String[] args) {


new Thread(() -> {
synchronized (resource1) {
System.out.println(Thread.currentThread() + "get resource1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get
resource2");
synchronized (resource2) {
System.out.println(Thread.currentThread() + "get
resource2");
}
}
}, "线程 1").start();

new Thread(() -> {


synchronized (resource2) {
System.out.println(Thread.currentThread() + "get resource2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get
resource1");
synchronized (resource1) {
System.out.println(Thread.currentThread() + "get
resource1");
}
}
}, "线程 2").start();
}
}

Output

Thread[线程 1,5,main]get resource1


Thread[线程 2,5,main]get resource2
Thread[线程 1,5,main]waiting get resource2
Thread[线程 2,5,main]waiting get resource1
de
ui A synchronized (resource1) resource1 后 经近 Thread.sleep(1000);
G
va
A 1s B resource2 后 经 A B
近 近 经
Ja

更 经

1. ⼰
2. 死 近
3. 买 : 买 近 会

4. :

近 经 找 此

⼰ ⼩ 近 ⼩ 近 ⼰

⼩ ⼩ 近

2 经

new Thread(() -> {


synchronized (resource1) {
System.out.println(Thread.currentThread() + "get resource1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get
resource2");
synchronized (resource2) {
System.out.println(Thread.currentThread() + "get
resource2");
}
}
}, "线程 2").start();

Output
de
ui
G Thread[线程 1,5,main]get resource1
va
Thread[线程 1,5,main]waiting get resource2
Ja

Thread[线程 1,5,main]get resource2


Thread[线程 2,5,main]get resource1
Thread[线程 2,5,main]waiting get resource2
Thread[线程 2,5,main]get resource2

Process finished with exit code 0

样 经 ?

1 resource1 后 经, 2 1 resource2
后 经近 1 resource1 resource2 后 经 ⼰ 近 2
近 经

2.3.9. sleep() wait() ?


sleep wait

Wait / 近sleep 现
wait() 近 ⼀ 近 notify()
notifyAll() sleep() 近 ⼀ wait(long timeout)

2.3.10. start() run()


run()
java 近 近

new Thread近 ; start() 近 近


start() 近 run()
近 run() 近 run main
近 近

start run thread

synchronized

synchronized

synchronized 近synchronized
de
ui 近 Java 近synchronized 经近 近 后 经找monitor此
G
va
Mutex Lock 近Java ⾏
谁 近 近
Ja

近 近 近
synchronized Java 6 Java JVM synchronized
近 synchronized 经 JDK1.6 经 近
⽹经 ⽹经 经 经 经 经 经

synchronized

synchronized

: 更 经近 更 经
: 经近 更近
更 近 找 static 近 new 近 此
A 更 synchronized 近 B 更
synchronized 近 近 近 synchronized
synchronized
: 经 近 经近 经

synchronized static synchronized(class) Class


经 synchronized 更 更 经 synchronized(String a)
JVM 近 同 乐 让 直

更 synchronized

“ 更 常 直 也 经 更
直”

public class Singleton {

private volatile static Singleton uniqueInstance;

private Singleton() {
}

public static Singleton getUniqueInstance() {


//先判断对象是否已经实例过,没有实例化过才进⼊加锁代码
if (uniqueInstance == null) {
//类对象加锁
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
de
ui 近 uniqueInstance volatile
G
va

uniqueInstance volatile 近 uniqueInstance = new Singleton();


Ja

1. uniqueInstance
2. uniqueInstance
3. uniqueInstance

JVM 近 1->3->2
近 更 更 近 T1 1 3近
T2 getUniqueInstance() uniqueInstance 近 uniqueInstance近
uniqueInstance

volatile 给 JVM 近

synchronized

synchronized JVM

synchronized

public class SynchronizedDemo {


public void method() {
synchronized (this) {
System.out.println("synchronized 代码块");
}
}
}

JDK javap SynchronizedDemo


javac SynchronizedDemo.java 场 .class 近 javap -c -s -v -l
SynchronizedDemo.class
de
ui
G
va
Ja

synchronized monitorenter monitorexit monitorenter


monitorexit monitorenter
近 经 monitor(monitor Java 近
synchronized 经 经 近 Java 经 )
0 近 经 1 1 monitorexit
近 经 0近 经 经 近 死 近 经

synchronized

public class SynchronizedDemo2 {


public synchronized void method() {
System.out.println("synchronized ⽅法");
}
}
de
ui
G
va
Ja

synchronized monitorenter monitorexit 近


ACC_SYNCHRONIZED 近 近 JVM
ACC_SYNCHRONIZED 总 近

JDK1.6 synchronized

JDK1.6 经 近 经 经 ⽹经 ⽹经 经 经

经 近 经 经 经 经 近 实
经 近 经 经

https://gitee.com/SnailClimb/JavaGuide/blob
/master/docs/java/Multithread/synchronized.md

synchronized ReentrantLock

经 “ 经” 经
经近 经 近 经 近
经 近 经 经近经 1近 经
0 经

synchronized JVM ReentrantLock API

synchronized JVM 近 品 JDK1.6 synchronized


近 品 近 ReentrantLock
JDK 找 API 近 lock() unlock() try/finally 此近

ReentrantLock synchronized

synchronized近ReentrantLock

ReentrantLock 近 lock.lockInterruptibly()
de
ui 近
G
va
ReentrantLock synchronized

Ja

ReentrantLock ReentrantLock
ReentrantLock(boolean fair)微
synchronized wait() notify()/notifyAll() / 近
ReentrantLock 近 Condition newCondition()
Condition JDK1.5 近 近
Lock Condition 更找 后 此近 Condition
notify()/notifyAll()
JVM ReentrantLock Condition “
”近 近 Condition synchronized
Lock Condition 更近 要 notifyAll()
近 Condition 更 signalAll()
谁 要 Condition 更

近 ReentrantLock

2.3.11 volatile
1. Java

JDK1.2 近Java 找 此 近
Java 近 找 此 近

向 近

近 volatile近 JVM近 我 近

近 volatile
de
ui
G
va
Ja

2. synchronized volatile

synchronized volatile

volatile 近 volatile synchronized


volatile synchronized synchronized
JavaSE1.6 喜 经 经 ⼏ 经
经 近 synchronized

volatile synchronized
volatile synchronized

volatile synchronized

2.3.12 ThreadLocal

1. ThreadLocal


JDK ThreadLocal ThreadLocal
ThreadLocal

ThreadLocal
ThreadLocal get() set()

可 近 ⼈ 近
⼈ 近 ThreadLocal

2. ThreadLocal

近 ThreadLocal
de
ui
G import java.text.SimpleDateFormat;
va
import java.util.Random;
Ja

public class ThreadLocalExample implements Runnable{

// SimpleDateFormat 不是线程安全的,所以每个线程都要有⾃⼰独⽴的副本
private static final ThreadLocal<SimpleDateFormat> formatter =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMdd HHmm"));

public static void main(String[] args) throws InterruptedException {


ThreadLocalExample obj = new ThreadLocalExample();
for(int i=0 ; i<10; i++){
Thread t = new Thread(obj, ""+i);
Thread.sleep(new Random().nextInt(1000));
t.start();
}
}

@Override
public void run() {
System.out.println("Thread Name= "+Thread.currentThread().getName()+"
default Formatter = "+formatter.get().toPattern());
try {
Thread.sleep(new Random().nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
//formatter pattern is changed here by thread, but it won't reflect
to other threads
formatter.set(new SimpleDateFormat());

System.out.println("Thread Name= "+Thread.currentThread().getName()+"


formatter = "+formatter.get().toPattern());
}

Output:

Thread Name= 0 default Formatter = yyyyMMdd HHmm


Thread Name= 0 formatter = yy-M-d ah:mm
Thread Name= 1 default Formatter = yyyyMMdd HHmm
Thread Name= 2 default Formatter = yyyyMMdd HHmm
Thread Name= 1 formatter = yy-M-d ah:mm
Thread Name= 3 default Formatter = yyyyMMdd HHmm
Thread Name= 2 formatter = yy-M-d ah:mm
Thread Name= 4 default Formatter = yyyyMMdd HHmm
Thread Name= 3 formatter = yy-M-d ah:mm
Thread Name= 4 formatter = yy-M-d ah:mm
Thread Name= 5 default Formatter = yyyyMMdd HHmm
de
ui Thread Name= 5 formatter = yy-M-d ah:mm
G
va
Thread Name= 6 default Formatter = yyyyMMdd HHmm
Ja

Thread Name= 6 formatter = yy-M-d ah:mm


Thread Name= 7 default Formatter = yyyyMMdd HHmm
Thread Name= 7 formatter = yy-M-d ah:mm
Thread Name= 8 default Formatter = yyyyMMdd HHmm
Thread Name= 9 default Formatter = yyyyMMdd HHmm
Thread Name= 8 formatter = yy-M-d ah:mm
Thread Name= 9 formatter = yy-M-d ah:mm

近Thread-0 formatter 近 看 thread-2


ThreadLocal Java8近
近 近IDEA Java8 (IDEA 直)
ThreadLocal Java 8 见 近 withInitial()近 Supplier

private static final ThreadLocal<SimpleDateFormat> formatter = new


ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue()
{
return new SimpleDateFormat("yyyyMMdd HHmm");
}
};

3. ThreadLocal

Thread

public class Thread implements Runnable {


......
//与此线程有关的ThreadLocal值。由ThreadLocal类维护
ThreadLocal.ThreadLocalMap threadLocals = null;

//与此线程有关的InheritableThreadLocal值。由InheritableThreadLocal类维护
ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
......
}

Thread Thread threadLocals


inheritableThreadLocals 近 ThreadLocalMap ,
ThreadLocalMap ThreadLocal HashMap null近
ThreadLocal set get 近 近
ThreadLocalMap get() set()

ThreadLocal set()
de
ui
G public void set(T value) {
va
Thread t = Thread.currentThread();
Ja

ThreadLocalMap map = getMap(t);


if (map != null)
map.set(this, value);
else
createMap(t, value);
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}

近 ThreadLocalMap
ThreadLocal ThreadLocal ThreadLocalMap
ThrealLocal Thread.currentThread() 近
getMap(Thread t) ThreadLocalMap

ThreadLocal Map ThreadLocalMap key Thread


Object

ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {


......
}

ThreadLocal 近 Thread
ThreadLocalMap 近 ThreadLocalMap key ThreadLocal 近 value
ThreadLocal set
de
ui
G
va
Ja

ThreadLocalMap ThreadLocal

4. ThreadLocal
de
ui ThreadLocalMap key ThreadLocal , value 近
G
va
ThreadLocal 近 所名 近key 近 value
近 ThreadLocalMap 世家 近value
Ja

key null Entry


GC 近 些 ThreadLocalMap 想 近
set() get() remove() 近 key null ThreadLocal
remove()

static class Entry extends WeakReference<ThreadLocal<?>> {


/** The value associated with this ThreadLocal. */
Object value;

Entry(ThreadLocal<?> k, Object v) {
super(k);
value = v;
}
}


现 所名 意候 吧 近
果 近 近 近 所名

找ReferenceQueue此 近 所名 近
Java 品

2.3.13

1.

Http

找 喜 此 近更

Java



近 近 ⼏ 近
我 近 乐 近 后

2. Runnable Callable

Runnable Java 1.0 近 Callable Java 1.5 , Runnable


更 Runnable 活 也 近 Callable 近
活 Runnable 近
de
ui Executors Runnable Callable
G
va
找 Executors.callable ( Runnable task 此 Executors.callable ( Runnable task , Object
resule)此
Ja

Runnable.java

@FunctionalInterface
public interface Runnable {
/**
* 被线程执⾏,没有返回值也⽆法抛出异常
*/
public abstract void run();
}

Callable.java

@FunctionalInterface
public interface Callable<V> {
/**
* 计算结果,或在⽆法这样做时抛出异常。
* @return 计算得出的结果
* @throws 如果⽆法计算结果,则抛出异常
*/
V call() throws Exception;
}

3. execute() submit()

1. execute()
2. submit() Future
Future 近 Future get()
近get() 死 近 get(long timeout,TimeUnit unit)
死 近

AbstractExecutorService submit 更

public Future<?> submit(Runnable task) {


if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}

newTaskFor FutureTask

protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {


return new FutureTask<T>(runnable, value);
}
de
ui execute()
G
va
Ja

public void execute(Runnable command) {


...
}

4.

Java 要 乐 Executors 近 ThreadPoolExecutor


近 乐 近 ⼏

Executors 乐

FixedThreadPool SingleThreadExecutor Integer.MAX_VALUE


近 近 OOM
CachedThreadPool ScheduledThreadPool Integer.MAX_VALUE
近 近 OOM

Executor Executors ThreadPoolExecutor

FixedThreadPool ⽇ 乐 乐
近 乐 近 近 现
近 近
SingleThreadExecutor 乐 ⼼
乐近 近 近
CachedThreadPool 乐 乐
近 近 近
近 会 近 乐

Executors

5. ThreadPoolExecutor
de
ui ThreadPoolExecutor 微 近 ⼼ 微
G
va
找 微 微 ⽽
此近 近
Ja

/**
* ⽤给定的初始参数创建⼀个新的ThreadPoolExecutor。
*/
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}

ThreadPoolExecutor

ThreadPoolExecutor 3

corePoolSize :
maximumPoolSize : 近

workQueue: 近 近

ThreadPoolExecutor :

1. keepAliveTime: 乐 corePoolSize 近 近
近 近 keepAliveTime

2. unit : keepAliveTime
3. threadFactory :executor
4. handler : 在话

ThreadPoolExecutor
de
ui ThreadPoolExecutor :
G
va
Ja

近ThreadPoolTaskExecutor :

ThreadPoolExecutor.AbortPolicy 活 RejectedExecutionException ⽽

ThreadPoolExecutor.CallerRunsPolicy
近 近
快 近

ThreadPoolExecutor.DiscardPolicy 近
ThreadPoolExecutor.DiscardOldestPolicy

更 Spring ThreadPoolTaskExecutor ThreadPoolExecutor 微


题 乐 近 RejectedExecutionHandler 乐
ThreadPoolExecutor.AbortPolicy 近ThreadPoolExecutor 活
RejectedExecutionException ⽽ 近 再
近 ThreadPoolExecutor.CallerRunsPolicy 乐 近
再 找 ThreadPoolExecutor 微 题 近
近 此

6. Demo:Runnable+ThreadPoolExecutor

近 乐 Demo

Runnable 找 Callable 近

MyRunnable.java

import java.util.Date;

/**
* 这是⼀个简单的Runnable类,需要⼤约5秒钟来执⾏其任务。
* @author shuang.kou
*/
public class MyRunnable implements Runnable {

private String command;

public MyRunnable(String s) {
this.command = s;
}

@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " Start. Time =
" + new Date());
processCommand();
System.out.println(Thread.currentThread().getName() + " End. Time = "
+ new Date());
de
ui }
G
va
Ja

private void processCommand() {


try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

@Override
public String toString() {
return this.command;
}
}

近 ThreadPoolExecutor 微 题

ThreadPoolExecutorDemo.java

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolExecutorDemo {

private static final int CORE_POOL_SIZE = 5;


private static final int MAX_POOL_SIZE = 10;
private static final int QUEUE_CAPACITY = 100;
private static final Long KEEP_ALIVE_TIME = 1L;
public static void main(String[] args) {

//使⽤阿⾥巴巴推荐的创建线程池的⽅式
//通过ThreadPoolExecutor构造函数⾃定义参数创建
ThreadPoolExecutor executor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAX_POOL_SIZE,
KEEP_ALIVE_TIME,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(QUEUE_CAPACITY),
new ThreadPoolExecutor.CallerRunsPolicy());

for (int i = 0; i < 10; i++) {


//创建WorkerThread对象(WorkerThread类实现了Runnable 接⼝)
Runnable worker = new MyRunnable("" + i);
//执⾏Runnable
executor.execute(worker);
}
//终⽌线程池
executor.shutdown();
de
ui while (!executor.isTerminated()) {
G
va
}
Ja

System.out.println("Finished all threads");


}
}

1. corePoolSize: 5
2. maximumPoolSize 10
3. keepAliveTime : 1L
4. unit: TimeUnit.SECONDS
5. workQueue ArrayBlockingQueue近 100;
6. handler: CallerRunsPolicy

Output

pool-1-thread-2 Start. Time = Tue Nov 12 20:59:44 CST 2019


pool-1-thread-5 Start. Time = Tue Nov 12 20:59:44 CST 2019
pool-1-thread-4 Start. Time = Tue Nov 12 20:59:44 CST 2019
pool-1-thread-1 Start. Time = Tue Nov 12 20:59:44 CST 2019
pool-1-thread-3 Start. Time = Tue Nov 12 20:59:44 CST 2019
pool-1-thread-5 End. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-3 End. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-2 End. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-4 End. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-1 End. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-2 Start. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-1 Start. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-4 Start. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-3 Start. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-5 Start. Time = Tue Nov 12 20:59:49 CST 2019
pool-1-thread-2 End. Time = Tue Nov 12 20:59:54 CST 2019
pool-1-thread-3 End. Time = Tue Nov 12 20:59:54 CST 2019
pool-1-thread-4 End. Time = Tue Nov 12 20:59:54 CST 2019
pool-1-thread-5 End. Time = Tue Nov 12 20:59:54 CST 2019
pool-1-thread-1 End. Time = Tue Nov 12 20:59:54 CST 2019

7.

4.6 近 5 5
5 近 样 刚 常找

近 样 样 乐

execute 4.6 Demo


executor.execute(worker) 乐 近 近
de
ui
G // 存放线程池的运⾏状态 (runState) 和线程池内有效线程的数量 (workerCount)
va
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
Ja

private static int workerCountOf(int c) {


return c & CAPACITY;
}

private final BlockingQueue<Runnable> workQueue;

public void execute(Runnable command) {


// 如果任务为null,则抛出异常。
if (command == null)
throw new NullPointerException();
// ctl 中保存的线程池当前的⼀些状态信息
int c = ctl.get();

// 下⾯会涉及到 3 步 操作
// 1.⾸先判断当前线程池中之⾏的任务数量是否⼩于 corePoolSize
// 如果⼩于的话,通过addWorker(command, true)新建⼀个线程,并将任务
(command)添加到该线程中;然后,启动该线程从⽽执⾏任务。
if (workerCountOf(c) < corePoolSize) {
if (addWorker(command, true))
return;
c = ctl.get();
}
// 2.如果当前之⾏的任务数量⼤于等于 corePoolSize 的时候就会⾛到这⾥
// 通过 isRunning ⽅法判断线程池状态,线程池处于 RUNNING 状态才会被并且队列可
以加⼊任务,该任务才会被加⼊进去
if (isRunning(c) && workQueue.offer(command)) {
int recheck = ctl.get();
// 再次获取线程池状态,如果线程池状态不是 RUNNING 状态就需要从任务队列中移
除任务,并尝试判断线程是否全部执⾏完毕。同时执⾏拒绝策略。
if (!isRunning(recheck) && remove(command))
reject(command);
// 如果当前线程池为空就新创建⼀个线程并执⾏。
else if (workerCountOf(recheck) == 0)
addWorker(null, false);
}
//3. 通过addWorker(command, false)新建⼀个线程,并将任务(command)添加到该线
程中;然后,启动该线程从⽽执⾏任务。
//如果addWorker(command, false)执⾏失败,则通过reject()执⾏相应的拒绝策略的
内容。
else if (!addWorker(command, false))
reject(command);
}

3 近 近
de
ui
G
va
Ja

近 4.6 Demo近 常

近 近 样

品 10 近 5 100 近
5 近 5 5
近 5

2.3.14 Atomic

1. Atomic

Atomic 场 近 微 近
从 Atomic
近 果 近 过

近 /

java.util.concurrent java.util.concurrent.atomic ,
de
ui
G
va
Ja

2. JUC 4 ?

AtomicInteger
AtomicLong
AtomicBoolean

AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray

AtomicReference
AtomicStampedReference
AtomicMarkableReference

AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicStampedReference 近
近 CAS ABA

3. AtomicInteger
de
ui AtomicInteger
G
va
Ja

public final int get() //获取当前的值


public final int getAndSet(int newValue)//获取当前的值,并设置新的值
public final int getAndIncrement()//获取当前的值,并⾃增
public final int getAndDecrement() //获取当前的值,并⾃减
public final int getAndAdd(int delta) //获取当前的值,并加上预期的值
boolean compareAndSet(int expect, int update) //如果输⼊的数值等于预期值,则以原⼦
⽅式将该值设置为输⼊值(update)
public final void lazySet(int newValue)//最终设置为newValue,使⽤ lazySet 设置之
后可能导致其他线程在之后的⼀⼩段时间内还是可以读到旧的值。

AtomicInteger

AtomicInteger 近 increment() 经

class AtomicIntegerTest {
private AtomicInteger count = new AtomicInteger();
//使⽤AtomicInteger之后,不需要对该⽅法加锁,也可以实现线程安全。
public void increment() {
count.incrementAndGet();
}

public int getCount() {


return count.get();
}
}

4. AtomicInteger

AtomicInteger 样

AtomicInteger

// setup to use Unsafe.compareAndSwapInt for updates(更新操作时提供“⽐较并替


换”的作⽤)
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;

static {
try {
valueOffset = unsafe.objectFieldOffset
(AtomicInteger.class.getDeclaredField("value"));
} catch (Exception ex) { throw new Error(ex); }
}

private volatile int value;


de
ui AtomicInteger CAS (compare and swap) + volatile native 近
G
va
synchronized 近
Ja

CAS 近 UnSafe
objectFieldOffset() 近 “ ” 近
valueOffset value volatile 近 近 JVM

Atomic JUC Atomic

2.3.6 AQS

1. AQS

AQS 找AbstractQueuedSynchronizer此近 java.util.concurrent.locks

AQS 微
经 近 AQS 微 近
ReentrantLock 近 Semaphore 近 ⼆ ReentrantReadWriteLock 近
SynchronousQueue近FutureTask AQS 近 AQS

2. AQS

AQS 近 5.2

近 “ AQS ”
更 近 近 近

AQS 近 近
de
ui AQS
G
va

AQS
Ja

AQS CLH

CLH(Craig,Landin,and Hagersten) 品 找 品
更近 此 AQS CLH经
找Node此 经

AQS(AbstractQueuedSynchronizer)

AQS int 近 FIFO


AQS CAS

private volatile int state;//共享变量,使⽤volatile修饰保证线程可⻅性

protected getState近setState近compareAndSetState

//返回同步状态的当前值
protected final int getState() {
return state;
}
// 设置同步状态的值
protected final void setState(int newState) {
state = newState;
}
//原⼦地(CAS操作)将同步状态值设置为给定值update如果当前同步状态的值等于expect(期望值)
protected final boolean compareAndSetState(int expect, int update) {
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}

AQS
de
ui AQS
G
va

Exclusive找 ⼰此 近 ReentrantLock 经 经
Ja

经 近 经
经 经 近 经近
Share 找 此 近 Semaphore/CountDownLatch Semaphore
CountDownLatch CyclicBarrier ReadWriteLock

ReentrantReadWriteLock 近 ReentrantReadWriteLock 经

state
近 找 /谁 此近AQS

AQS

近 找

1. AbstractQueuedSynchronizer 找 近
state 此
2. AQS 近 近

AQS AQS

isHeldExclusively()//该线程是否正在独占资源。只有⽤到condition才需要去实现它。
tryAcquire(int)//独占⽅式。尝试获取资源,成功则返回true,失败则返回false。
tryRelease(int)//独占⽅式。尝试释放资源,成功则返回true,失败则返回false。
tryAcquireShared(int)//共享⽅式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可⽤
资源;正数表示成功,且有剩余资源。
tryReleaseShared(int)//共享⽅式。尝试释放资源,成功则返回true,失败则返回false。

近 活 UnsupportedOperationException
近 死 AQS final 近 近

ReentrantLock 更近state 0近 经 A lock() 近 tryAcquire() ⼰


经 state+1 近 tryAcquire() 近 A unlock() state=0找 经此
近 经 近 经 近A 经 找state
此近 近 近 state 中

CountDownLatch 更近 N 近state N找 N
此 N 近 countDown() 近state CAS(Compare and
Swap) 1 ( state=0)近 unpark() 近
await()题 近 ⼼
de
ui 近 ⼰ 近 近 tryAcquire-
G
va
tryRelease tryAcquireShared-tryReleaseShared AQS
⼰ 近
Ja

ReentrantReadWriteLock

AQS 样

http://www.cnblogs.com/waterystone/p/4920797.html
https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html

3. AQS

Semaphore( )- synchronized ReentrantLock


近Semaphore( )
CountDownLatch CountDownLatch 近 说
近 近
CyclicBarrier( ) CyclicBarrier CountDownLatch 近
近 CountDownLatch CountDownLatch
CyclicBarrier 找Cyclic此 事因找Barrier此 近
事因找 此 死 近 事因 近事因 近
事因 电 CyclicBarrier 微 CyclicBarrier(int parties)近
事因 电 近 await() CyclicBarrier 事因近

2.3.15 Reference
Java 品
Java
Java
http://www.cnblogs.com/waterystone/p/4920797.html
https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html
https://www.journaldev.com/1076/java-threadlocal-example

2.4 JVM
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

2.4.1 Java ( )
Java 品 Java 吧 JDK. 1.8
近 在话

JDK 1.8
Ja
va
G
ui
de

JDK 1.8
de
ui
G
va
Ja

品 内

( )


“ ”
de
ui 1. 近 近
G
va

近 近
Ja

2.

OutOfMemoryError

Java

Java Java

Java Heap (Stack),


找 近Java 品 内 内 近 内
内 此

找boolean byte char short int float long


double此 找reference 近 近 近
期 此

Java StackOverFlowError OutOfMemoryError

StackOverFlowError Java 品
内 见 近 内
Java 品 内 近 活 StackOverFlowError
OutOfMemoryError Java 品 内 见 近 内 近
见 近 活 OutOfMemoryError

Java 品 内 来 近 Java 品 内近 近
又 又

Java 内 微 内近Java 内 内 近 题 内
Java内近 题 近 内 ⼤

Java

1. return
2. 活

内 ⼤

品 内 回 近 Java
Native HotSpot 品 Java 品 内

近 内 内 近

会 内 内 近 StackOverFlowError
OutOfMemoryError
de
ui
G
va

品 近Java 吧近 品
Ja

Java

Java 所名 吧近 GC Garbage Collected Heap . 所名


近 所名 近 Java
Eden From Survivor To Survivor

eden s0 s1 近tentired 近
Eden 吧 近 所名 近 近 s0 s1近
1(Eden ->Survivor 1)近 找 15 此近
服 近 -XX:MaxTenuringThreshold

Java 近 吧近 品
场 场 Java 品 候 近
Non-Heap 近 Java

近 之 太

Java 品 近
近 JVM Java
HotSpot
近 HotSpot 近 Java 品 近 近
近 近 品

JDK 1.8

-XX:PermSize=N //⽅法区(永久代)初始⼤⼩
-XX:MaxPermSize=N //⽅法区(永久代)最⼤⼤⼩,超过这个值将会抛出OutOfMemoryError异
常:java.lang.OutOfMemoryError: PermGen

近所名 吧 近 “ ” **

JDK 1.8 近 找HotSpot 此 找JDK1.7 此近



de
ui
G -XX:MetaspaceSize=N //设置Metaspace的初始(和最⼩⼤⼩)
va
-XX:MaxMetaspaceSize=N //设置Metaspace的最⼤⼤⼩
Ja

近 近 近 品 ⼏

(PermGen) (MetaSpace) ?

JVM ⽇ 近 近 近
近 java.lang.OutOfMemoryError -XX :
MaxMetaspaceSize 近 unlimited近
-XX:MetaspaceSize 近 Metaspace

近 近

乐 Class 候 近
乐 找 场 此

乐 近 近 乐 ⼩ 活
OutOfMemoryError

JDK1.7 JVM Java Heap

—— https://blog.csdn.net/wangbiao007/article/details/78545189

OutOfMemoryError
de
ui JDK1.4 NIO(New Input/Output) 近 Channel
G
va
Buffer I/O 近 Native 题 近 Java

Ja

DirectByteBuffer
Java Native

Java 近 近

2.4.2 Java
Java 近 近

品 new 近 也 乐
近 也 样 近

近 品
近 Java
“ ” “ ” 近 Java Java

近 Java Java 近 GC
" - "近 " - "找 " - "此近 近

近 近 近 种
近 品 近 近 近 品

CAS+ CAS 经 经 近 经
近 近 CAS
de
ui
G
va
TLAB Eden 近JVM 近
近 ⼼ 近
Ja

TLAB TLAB TLAB CAS

近 品 中 找 喜 此近
更 Java 游 近

中 近 近更
更 GC
近 品 近 经 近

init 近 品 近 近
Java 近 近<init> 近 中
近 new <init> 近 近

2.4.3 ?
近 Java 内 reference
品 近

1. 期 近 Java 期乐近reference
期 近 期 更 始

2. 近 Java 想
近 reference
de
ui
G
va
Ja

reference
reference

2.4.4

eden s0 s1 近tentired 近
Eden 吧 近 所名 近 近 s0 s1近
1(Eden ->Survivor 1)近 找 15 此近
服 近 -XX:MaxTenuringThreshold

2.4.5 Minor Gc Full GC


de
ui 近 eden eden 近 品
G
va
Minor GC
Ja

GC Minor GC : 所名 近Minor GC 种近

GC Major GC/Full GC : GC近 Major GC


Minor GC找 此近Major GC Minor GC 10国

2.4.6 ?( )
更近 所名 又找
不重 此

全 近 近 1始 近 1始
0

“GC Roots” 近 近
重 近 GC Roots 近

2.4.7 , , ,
近 样 近
“ ”

JDK1.2 近Java reference


JDK1.2 近Java 见 近 找

de
ui (StrongReference)
G
va

近 近
Ja

近所名 近Java 品 活
OutOfMemoryError 近 近

(SoftReference)

近 近所名
近 近 所名 近

找ReferenceQueue此 近 所名 近
JAVA 品

(WeakReference)


现 所名 意候 吧 近 果
近 近 近 所名

找ReferenceQueue此 近 所名 近Java

4 PhantomReference

" " 近 近 近
近 近 所名

找ReferenceQueue此
所名 近 近 近

所名 近

近 近 近
JVM OutOfMemory

2.4.8 ?
乐 近 常

乐 同 "abc"近 String 同 近
"abc" 近 近"abc" 乐

2.4.9 ?
近 常
de
ui “ ” 近 “ ” 记
G
va
3 “ ”
Ja

更 近 Java 更
ClassLoader
java.lang.Class 近

品 3 近 “ ”近

2.4.10

“ ” “ ” 近
近 所名

1.
2.
Ja
va
G
ui
de

近“




de
ui -
G
va

近 看 近
Ja

“ - ”
近 近

品 所名 近 近
java 近
所名

“ - ” “ - ”

2.4.11 HotSpot
GC

2.4.12 ?
de
ui
G
va
Ja


所名 近 所名 近
近 HotSpot
品 所名

Serial

Serial找同 此 所名
“ ” 所名 所名
近 所名 现 找 "Stop The World"
此近

品 Stop The World 近 所名


找看 近 所名 看 此

Serial 所名 常 近
Serial 近 Serial
Client 品

ParNew
de
ui ParNew Serial
G
va
Serial
Ja

Server 品 近 Serial 近 CMS 找


近 在话 此

Parallel 所名 近 看
Concurrent 所名 找 近 此近
近 所名 CPU

Parallel Scavenge

Parallel Scavenge ParNew

-XX:+UseParallelGC

使⽤Parallel收集器+ ⽼年代串⾏

-XX:+UseParallelOldGC

使⽤Parallel收集器+ ⽼年代并⾏

Parallel Scavenge CPU CMS


CPU CPU
Parallel Scavenge 请 近
近 品
de
ui -
G
va
Ja

Serial Old

Serial 近 不 不 JDK1.5
Parallel Scavenge 近 不 CMS

Parallel Old

Parallel Scavenge “ - ” 请 CPU


近 想 Parallel Scavenge Parallel Old

CMS

CMS Concurrent Mark Sweep

CMS Concurrent Mark Sweep HotSpot

Mark Sweep 近CMS “ - ” 近


所名

现 近 root 近 始
GC 近 得 微 近 得
微 吧近 GC

近 近

近 GC 吧 意
de
ui
G
va
Ja

所名 近

CPU

-“ - ”

G1

G1 (Garbage-First) , .
GC , .

JDK1.7 HotSpot 品

G1 CPU 近 CPU找CPU CPU 此


Stop-The-World Java GC 近G1 看
java
G1 GC 近

CMS “ -- ” 近G1 “ ” 始
“ ”
G1 CMS 近 G1 CMS 近
G1 近 近 M

G1

G1 Region(
Garbage-First ) Region 吧 近
GF 找 中此
de
ui 2.4.13
G
va
Ja

Java 品 近 ClassFile 微

ClassFile {
u4 magic; //Class ⽂件的标志
u2 minor_version;//Class 的⼩版本号
u2 major_version;//Class 的⼤版本号
u2 constant_pool_count;//常量池的数量
cp_info constant_pool[constant_pool_count-1];//常量池
u2 access_flags;//Class 的访问标记
u2 this_class;//当前类
u2 super_class;//⽗类
u2 interfaces_count;//接⼝
u2 interfaces[interfaces_count];//⼀个类可以实现多个接⼝
u2 fields_count;//Class ⽂件的字段属性
field_info fields[fields_count];//⼀个类会可以有个字段
u2 methods_count;//Class ⽂件的⽅法数量
method_info methods[methods_count];//⼀个类可以有个多个⽅法
u2 attributes_count;//此类的属性表中的属性数
attribute_info attributes[attributes_count];//属性表集合
}

Class 找 近 近 此
de
ui
G
va
Ja

微 在话 Class 微晚

1. : 品 Class
2. Class Class 近 场
3. 乐
4. 近 喜 Class 近
public abstract 近 final
5. , 近
近 Java 近 近 java.lang.Object 近
java 近 java.lang.Object 近 Java 0
6. 候 近 implents(
extends)
7. 候 喜 更 近 喜
de
ui
G
va
8.
近 近 前
Ja

9. Class

-> -> : -> ->

近 3

1.
2. 微 微
3. Class ,

品 3 近 "
" ZIP 找
JAR EAR WAR 此 找 JSP此

loadClass()
Java

⽣ 近 在话

问 近 近

JVM ClassLoader近 BootstrapClassLoader Java


java.lang.ClassLoader

1. BootstrapClassLoader( ) 近 C++ 近
%JAVA_HOME%/lib jar -Xbootclasspath 重
2. ExtensionClassLoader( ) %JRE_HOME%/lib/ext jar
近 java.ext.dirs 重 jar
3. AppClassLoader( ): 近 classpath
jar

?
de
ui
G
va

ClassLoder 说
Ja

近 近
loadClass()
BootstrapClassLoader
null 近 BootstrapClassLoader

public class ClassLoaderDemo {


public static void main(String[] args) {
System.out.println("ClassLodarDemo's ClassLoader is " +
ClassLoaderDemo.class.getClassLoader());
System.out.println("The Parent of ClassLodarDemo's ClassLoader is " +
ClassLoaderDemo.class.getClassLoader().getParent());
System.out.println("The GrandParent of ClassLodarDemo's ClassLoader
is " + ClassLoaderDemo.class.getClassLoader().getParent().getParent());
}
}

Output
de
ui
G ClassLodarDemo's ClassLoader is sun.misc.Launcher$AppClassLoader@18b4aac2
va
The Parent of ClassLodarDemo's ClassLoader is
Ja

sun.misc.Launcher$ExtClassLoader@1b6d3586
The GrandParent of ClassLodarDemo's ClassLoader is null

AppClassLoader ExtClassLoader ExtClassLoader null近null


ExtClassLoader Bootstrap ClassLoader

场 近 近 “
” 近 Mather ClassLoader Father ClassLoader 近
“ ” 近 “ ” API 候
:

The Java platform uses a delegation model for loading classes. The basic idea is that every class
loader has a "parent" class loader. When loading a class, a class loader first "delegates" the search
for the class to its parent class loader before attempting to find the class itself.

⽣ 近 近 java.lang.ClassLoader
loadClass() 近

private final ClassLoader parent;


protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// ⾸先,检查请求的类是否已经被加载过
Class<?> c = findLoadedClass(name);
if (c == null) {
long t0 = System.nanoTime();
try {
if (parent != null) {//⽗加载器不为空,调⽤⽗加载器
loadClass()⽅法处理
c = parent.loadClass(name, false);
} else {//⽗加载器为空,使⽤启动类加载器 BootstrapClassLoader
加载
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
//抛出异常说明⽗类加载器⽆法完成加载请求
}

if (c == null) {
long t1 = System.nanoTime();
//⾃⼰尝试加载
c = findClass(name);

// this is the defining class loader; record the stats


sun.misc.PerfCounter.getParentDelegationTime().addTime(t1
- t0);
de
ui
G
va
sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
Ja

sun.misc.PerfCounter.getFindClasses().increment();
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}

⽣ Java 我 近 找JVM
近 此近 Java API
⽣ 近 近
java.lang.Object 近 近 Object

⽆ 近 近 loadClass()

BootstrapClassLoader Java java.lang.ClassLoader


近 ClassLoader

+ 微+

3.1
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

3.1.1 OSI TCP/IP , ?


近 OSI TCP/IP 近 说
微近
de
ui
G
va
Ja

近 近 在话

(application-layer 说
找 此
说 说 近 DNS近 HTTP 近
SMTP

吧 (Domain Name System DNS近Domain Name 场 吧 )


近 吧 IP ⾏ 近 近
IP 同 找 此更 Web
近 吧 近 吧 更
吧 近 IBM 吧 www.ibm.com Oracle 吧 www.
oracle.com Cisco 吧 www.cisco.com

HTTP

说 找HTTP近HyperText Transfer Protocol) 说


WWW找 此 HTTP
HTML 找 此

(transport layer)
“ ” 近

近 近

:
de
ui 1. TCP找Transmission Control Protocol此-- 近
G
va
2. UDP找User Datagram Protocol此-- 近 找

Ja

TCP UDP


TCP/IP 微 近
IP 近 IP 近

“ UDP ” “ IP ” 近
近 “ ”

近 “ ” 近 微
.

微找heterogeneous此 找router此
说 说 找Intert Protocol此 说 近
IP

(data link layer)



IP 近 喜 找
近 近 此

近 近
近 近 也
近 近
找 近 也
近 此近 说 说

(physical layer)

在 “ ” 近

说 TCP/IP 说 TCP/IP
TCP IP 说 近 TCP/IP说

微 近 博 微
https://blog.csdn.net/yaopeng_2005/article/details/7064869
de
ui
G
va
Ja

3.1.2 TCP ( )
近TCP说

TCP
de
ui
G
近 3 (
va

HTTP )
Ja

– SYN – –
– SYN/ACK – –
– ACK – –
de
ui
G
va
Ja

Client 始Server 近

Client 近 始Server

Client 近 始Server

SYN

SYN 近

SYN TCP/IP TCP


近 SYN 近 SYN-ACK 近
ACK(Acknowledgement[ 场 , 近
]此
TCP 近 ⽔

SYN, ACK

SYN近 近
ACK

TCP “ 回 ”

- FIN近 得
- FIN近 ACK近 1 SYN 近 FIN

- 得 近 FIN
de
ui - ACK 近 1
G
va
Ja

近 得
近 近 得 TCP

更 A B 近 近A “ ”近B “ ”近 B
近A B 您 近 B 近 B
“ ”近A “ ”近

喜 近
https://blog.csdn.net/qzcsu/article/details/72861891

3.1.2 TCP,UDP

UDP 近 UDP 近
UDP 近 UDP 找 此近
QQ QQ

TCP 近 TCP
TCP 近 找TCP TCP ⽔
近 近 ⽔ 近 近
近 此近 近 近 近
说 近 ⼰ TCP

3.1.3 TCP
1. 从 TCP
2. TCP 近 近
3. TCP 也 也 近 也
也 近TCP
4. TCP
5. TCP ⽇ 让 近TCP 让
他 近 近
TCP 说 说 找TCP 此
6. 近
7. ARQ 近 近

8. TCP 近 近

de
ui 3.1.4 ARQ
G
va
Ja

找Automatic Repeat-reQuest近ARQ此 OSI 说



近 ARQ 喜 ARQ说 ARQ说

ARQ

说 近 近
找 ACK此 找 此近 ACK 近 近
近 始
说 近 近 近 始

1) :

, , .

2) :

说 看 近 找
此 近
ARQ 说
近 近 ARQ
近 近
近 近

3)

A M1 近B 近B A M1 近
A 近 近A M1 近B
世家 1. M1 近 2. A 找
近 A 近 B 此
A M1 近B
近A M1 近B看 找B 2 M1此 A B
近A B M1 找A
2 此 1. A 近 2. B M1 近
M1

ARQ

ARQ 说 近
近 近 近

近 近 近
de
ui ⾏ 5 近
G
va
找3 此近 近
Ja

Go-Back-N找 N此近 N

3.1.5
TCP

0近

3.1.6
近 近

近 长
近晚 近 近 近

近TCP (cwnd)

TCP 近
找 AQM此近

近 近
死 近 近 成 近
近 cwnd 1近
近cwnd 国
cwnd让 近 RTT
cwnd 1.
TCP/IP 近 找fast retransmit and recovery近FRR此
近 FRR近 近TCP
现 现 近 FRR近
近 近
近 FRR近
现 望 四 近 找FRR此

3.1.7 url ->> ( )

近 说

找 HTTP 此
de
ui
G
va
Ja

1. DNS 样
2. TCP
3. HTTP
4. HTTP
5. 样却⽤
6.

https://segmentfault.com/a/1190000006879700

3.1.8
de
ui 3.1.9 HTTP
G
va
Ja

HTTP
de
ui 3.1.10 HTTP ,
G
va
Ja

HTTP/1.0 近 HTTP 近 近
HTML Web Web
找 JavaScript CSS 此近 Web 近
HTTP

HTTP/1.1 近 近 HTTP说 近

Connection:keep-alive

近 近 HTTP TCP
得近 近 Keep-Alive
近 近 找 Apache此

HTTP TCP

—— HTTP 常

3.1.11 HTTP , ?
HTTP 近 找stateless此说 HTTP 说
常Session 近Session
近 全 近
近 HTTP 说 Session
找 近
Session近 近 Session此

Session 近 ( redis )
Session 近 Session 常 近
Cookie 博 Session ID

Cookie ?

URL Session ID 博 URL 重

3.1.12 Cookie ? Session


de
ui Cookie Session 近
G
va

Cookie 福 Cookie 近
Ja


近 Token Cookie
近 Token ( 想近 Token
)始业 Session
近 全 近 近
HTTP 说 Session

Cookie ( )近Session

Cookie 近 Session 近 Session Cookie


近 Cookie 近 Cookie

3.1.13 HTTP 1.0 HTTP 1.1 ?


https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?

HTTP1.0 1996 近 近
HTTP1.1 1999 近 HTTP1.1
HTTP说

1. : HTTP/1.0 近 HTTP
TCP/IP说 , 回 近
近 近 HTTP 1.1
, Connection keep-alive HTTP/1.1
HTTP

2. :
HTTP1.1 24 近 409找Conflict此
始410找Gone此 增
3. : HTTP1.0 header If-Modified-Since,Expires 让 近
HTTP1.1 让 更 Entity tag 近 If-Unmodified-Since, If-Match, If-None-
Match 让 让
4. :HTTP1.0 近 近更
近 近 近HTTP1.1
range 吧近 近 206找Partial Content此近

3.1.12 URI URL ?


URI(Uniform Resource Identifier) 近
URL(Uniform Resource Location) 近 重
URI近 URL 近 locate

URI 近URL 就 URL URI近



de
ui 3.1.13 HTTP HTTPS
G
va
Ja

1. HTTP URL “http://” 80近 HTTPS URL “https://”


443
2. HTTP说 TCP 近 近
HTTPS SSL/TLS HTTP说 近SSL/TLS TCP
近 近 ⾊
近HTTP HTTPS 近 HTTPS HTTP⼏
⾊ 近 近 近
DES AES 始
⾊ 找 ⾊ 来⾊近 来⾊ ⾊此近
⾊找 ⾊ 来⾊ 近来⾊ ⾊ 此近 近
RSA DSA

HTTP 近 近 近

近 找 欢 此近 近
为 近

https://blog.csdn.net/qq_16209077/article/details/52718250
https://blog.csdn.net/zixiaomuwu/article/details/60965466
https://blog.csdn.net/turn__back/article/details/73743641
https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?

3.2 微
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

近 近 微

近 微 近 近
体 :koushuangbwcx@163.com

3.2.1 Queue

微 近 FIFO近 全 增 找
此近
de
ui
G
va

找 全 近 全 近
Ja

, “ ”
全 此
找 “ ” 此

Java Queue

Java Queue Collection 近Deque, LinkedList, PriorityQueue, BlockingQueue


Queue 近 让
Collection 近Queue 全 什 全 增 只

Java 找9此 Queue

3.2.2 Set

Set

Set Collection 近 近 近 HashSet TreeSet

近HashSet hashCode() equal() 始TreeSet


compareTo

key index (List Map)


找Set此

HashSet TreeSet

HashSet 微近 HashMap key 近 hashCode


TreeSet 微近 近 始

Java --Set( )

3.2.3 List

List

List 近 近 找
此 近 Set 近List List
Set

List
de
ui ArrayList 近 近 近 增
G
va
Ja

LinkedList 内 LinkedList
近 增

Vector 应 近 ArrayList 近 近 ArrayList


近 Vector

Stack 内近 Vector (FILO, First In Last Out) 之 java


微 内找Stack此

ArrayList LinkedList

ArrayList
LinkedList

java 微 样

3.2.4 Map
HashMap(JDK1.8)
ConcurrentHashMap 样

3.2.5

1.

问 找 此

(1) 问 —— 问 h近 h 近 (1张h-1) 近
h 近 近 问
(2) 问 —— 问
(3) ⽚ 问 —— ⽚ 问 AVL 找 AVL 此近 理 问 近
理 1近 理 ⽚

2.

问 找 此
问 近

3.

问 找 近 此

问 近 近 问 问
近 问 K近 (2^k) -1 近 问

4.
de
ui 微
G
va

问 近 始
Ja

5. BST

么 微: 问

1. 近 始
2. 近 始
3. 问 始
4. 找no duplicate nodes此

6. Self-balancing binary search tree

⽚ 问 找 近 ⽚ 问 AVL Treap 再 此

7.

1. 始
2. 始
3. 找NIL 此始
4. 近 找 此始
5. 重近 找 此

TreeMap TreeSet JDK1.8 HashMap

问 近 问
微 常找 在话 问 近 此

常找 在话 问 近 此
要找 此
通样 Java 找 此

8. B- B+ B*

问 B B+ B*

B- 近B+ 近B*

B- 近B+ B*
B- 找 B 此 ⽚ 找 此 近
B ⽚(Balance)
de
ui 1. B+ 微 B- 意 近 也
G
va
2. B+ range-query找 只此 近 B B+
近B* 近 始
Ja

3. B* B+ B+

9. LSM

[HBase] LSM VS B+
B+ IO

B+ 近HBase LSM 近 Log-Structured Merge-Trees


LSM HBase

3.2.6

3.2.7 BFS DFS


BFS DFS

3.3
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

3.3.1

wwwxmu
:https://www.weiweiblog.cn/13string/

想 近 近
近 2018 Java 求给定合法括号序列的深度
场 近 近 直

KMP

同 近 KMP 近 同 近 同
找S此 同找W此 KMP 变 O(m+n) ,
O(m) “ ” 同近 近 KMP
变 近 同 近 同 近 同
de
ui KMP : http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E
G
va
2%80%93Pratt_algorithm.html
Ja

KMP: https://blog.csdn.net/v_july_v/article/details/7041827
KMP ?: https://www.zhihu.com/question/21923021
KMP : https://blog.sengxian.com/algorithms/kmp
KMP : http://blog.jobbole.com/76611/
KMP : https://www.bilibili.com/video/av3246487/?fro
m=search&seid=17173603269940723925
KMP 1: https://www.bilibili.com/video/av11866460?from=search&seid=127306544
34238709250

BM

BM 同变 近 近
近 越 近 变
近 变 越 近 同 变
同变 KMP :http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Mor
ris%E2%80%93Pratt_algorithm.html

offer 题 近 同 “%20” 更 近 同 We Are


Happy. 同 We%20Are%20Happy

福 始 API

//https://www.weiweiblog.cn/replacespace/
public class Solution {

/**
* 第⼀种⽅法:常规⽅法。利⽤String.charAt(i)以及String.valueOf(char).equals(" "
* )遍历字符串并判断元素是否为空格。是则替换为"%20",否则不替换
*/
public static String replaceSpace(StringBuffer str) {

int length = str.length();


// System.out.println("length=" + length);
StringBuffer result = new StringBuffer();
for (int i = 0; i < length; i++) {
char b = str.charAt(i);
if (String.valueOf(b).equals(" ")) {
result.append("%20");
} else {
result.append(b);
}
}
return result.toString();

/**
* 第⼆种⽅法:利⽤API替换掉所⽤空格,⼀⾏代码解决问题
de
ui */
G
va
public static String replaceSpace2(StringBuffer str) {
Ja

return str.toString().replaceAll("\\s", "%20");


}
}

3.3.2
Leetcode: 题 同 越 越近
同 ""

更 1:

输⼊: ["flower","flow","flight"]
输出: "fl"

更 2:

输⼊: ["dog","racecar","car"]
输出: ""
解释: 输⼊不存在公共前缀。

直 Arrays.sort(strs) 近

public class Main {


public static String replaceSpace(String[] strs) {

// 如果检查值不合法及就返回空串
if (!checkStrs(strs)) {
return "";
}
// 数组⻓度
int len = strs.length;
// ⽤于保存结果
StringBuilder res = new StringBuilder();
// 给字符串数组的元素按照升序排序(包含数字的话,数字会排在前⾯)
Arrays.sort(strs);
int m = strs[0].length();
int n = strs[len - 1].length();
int num = Math.min(m, n);
for (int i = 0; i < num; i++) {
if (strs[0].charAt(i) == strs[len - 1].charAt(i)) {
res.append(strs[0].charAt(i));
} else
break;

}
de
ui return res.toString();
G
va
Ja

private static boolean chechStrs(String[] strs) {


boolean flag = false;
if (strs != null) {
// 遍历strs检查元素值
for (int i = 0; i < strs.length; i++) {
if (strs[i] != null && strs[i].length() != 0) {
flag = true;
} else {
flag = false;
break;
}
}
}
return flag;
}

// 测试
public static void main(String[] args) {
String[] strs = { "customer", "car", "cat" };
// String[] strs = { "customer", "car", null };//空串
// String[] strs = {};//空串
// String[] strs = null;//空串
System.out.println(Main.replaceSpace(strs));// c
}
}

3.3.3

LeetCode: 同近 微
同 微 近 "Aa" 同 : 同
1010

同 “ 同” 同近 “level” “noon” 同
—— https://baike.baidu.com/item/%E5%9B%9E%E6%96%87%E4%B8%B2/127
4921?fr=aladdin

更 1:
de
ui
G 输⼊:
va
"abccccdd"
Ja

输出:
7

解释:
我们可以构造的最⻓的回⽂串是"dccaccd", 它的⻓度是 7。

同常 想 微 同

近 微 近 “abcba”近
近 1 同 近
hashset 近 近 count++近 直

//https://leetcode-cn.com/problems/longest-palindrome/description/
class Solution {
public int longestPalindrome(String s) {
if (s.length() == 0)
return 0;
// ⽤于存放字符
HashSet<Character> hashset = new HashSet<Character>();
char[] chars = s.toCharArray();
int count = 0;
for (int i = 0; i < chars.length; i++) {
if (!hashset.contains(chars[i])) {// 如果hashset没有该字符就保存进去
hashset.add(chars[i]);
} else {// 如果有,就让count++(说明找到了⼀个成对的字符),然后把该字符移除
hashset.remove(chars[i]);
count++;
}
}
return hashset.isEmpty() ? count * 2 : count * 2 + 1;
}
}

LeetCode: 同近 同近 想 近
近 同 同

更 1:

输⼊: "A man, a plan, a canal: Panama"


输出: true
de
ui 更 2:
G
va
Ja

输⼊: "race a car"


输出: false

//https://leetcode-cn.com/problems/valid-palindrome/description/
class Solution {
public boolean isPalindrome(String s) {
if (s.length() == 0)
return true;
int l = 0, r = s.length() - 1;
while (l < r) {
// 从头和尾开始向中间遍历
if (!Character.isLetterOrDigit(s.charAt(l))) {// 字符不是字⺟和数字的情况
l++;
} else if (!Character.isLetterOrDigit(s.charAt(r))) {// 字符不是字⺟和数字
的情况
r--;
} else {
// 判断⼆者是否相等
if (Character.toLowerCase(s.charAt(l)) !=
Character.toLowerCase(s.charAt(r)))
return false;
l++;
r--;
}
}
return true;
}
}

Leetcode: LeetCode: 同 同 s近 s 同 s
1000

更1

输⼊: "babad"
输出: "bab"
注意: "aba"也是⼀个有效答案。

更2

输⼊: "cbbd"
输出: "bb"


近 直
de
ui
G
va
Ja

//https://leetcode-cn.com/problems/longest-palindromic-substring/description/
class Solution {
private int index, len;

public String longestPalindrome(String s) {


if (s.length() < 2)
return s;
for (int i = 0; i < s.length() - 1; i++) {
PalindromeHelper(s, i, i);
PalindromeHelper(s, i, i + 1);
}
return s.substring(index, index + len);
}

public void PalindromeHelper(String s, int l, int r) {


while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
if (len < r - l - 1) {
index = l + 1;
len = r - l - 1;
}
}
}

LeetCode: 同s近 s
1000
"bbbb" "bbbab"

同s近 s 1000
de
ui 更 1:
G
va
Ja

输⼊:
"bbbab"
输出:
4

"bbbb"

更 2:

输⼊:
"cbbd"
输出:
2

"bb"

dp[i][j] = dp[i+1][j-1] + 2 if s.charAt(i) == s.charAt(j) otherwise, dp[i][j] =


Math.max(dp[i+1][j], dp[i][j-1])

class Solution {
public int longestPalindromeSubseq(String s) {
int len = s.length();
int [][] dp = new int[len][len];
for(int i = len - 1; i>=0; i--){
dp[i][i] = 1;
for(int j = i+1; j < len; j++){
if(s.charAt(i) == s.charAt(j))
dp[i][j] = dp[i+1][j-1] + 2;
else
dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
}
}
return dp[0][len-1];
}
}

2018 Java 喜 变 :

1. 同"" 喜 变
2. "X" "Y" 喜 变 ,"XY" 喜 变
3. "X" 喜 变 , "(X)" 喜 变
4. 喜

更 : "","()","()()","((()))" 喜 喜 :

1. 同"" 0
2. 同"X" x, 同"Y" y, 同"XY" max(x,y)
de
ui 3. "X" x, 同"(X)" x+1
G
va

更 : "()()()" 1,"((()))" 3 喜 ,
Ja

输⼊描述:
输⼊包括⼀个合法的括号序列s,s⻓度length(2 ≤ length ≤ 50),序列中只包含'('和')'。

输出描述:
输出⼀个正整数,即这个序列的深度。

输⼊:
(())
输出:
2

import java.util.Scanner;

/**
* https://www.nowcoder.com/test/8246651/summary
*
* @author Snailclimb
* @date 2018年9⽉6⽇
* @Description: TODO 求给定合法括号序列的深度
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int cnt = 0, max = 0, i;
for (i = 0; i < s.length(); ++i) {
de
ui if (s.charAt(i) == '(')
G
va
cnt++;
Ja

else
cnt--;
max = Math.max(max, cnt);
}
sc.close();
System.out.println(max);
}
}

offer: 同 ( Integer.valueOf(string) 近 string


0)近 同 题 0 同
0

//https://www.weiweiblog.cn/strtoint/
public class Main {

public static int StrToInt(String str) {


if (str.length() == 0)
return 0;
char[] chars = str.toCharArray();
// 判断是否存在符号位
int flag = 0;
if (chars[0] == '+')
flag = 1;
else if (chars[0] == '-')
flag = 2;
int start = flag > 0 ? 1 : 0;
int res = 0;// 保存结果
for (int i = start; i < chars.length; i++) {
if (Character.isDigit(chars[i])) {// 调⽤Character.isDigit(char)⽅法判断
是否是数字,是返回True,否则False
int temp = chars[i] - '0';
res = res * 10 + temp;
} else {
return 0;
}
}
return flag != 2 ? res : -res;

public static void main(String[] args) {


// TODO Auto-generated method stub
String s = "-12312312";
System.out.println("使⽤库函数转换:" + Integer.valueOf(s));
int res = Main.StrToInt(s);
de
ui System.out.println("使⽤⾃⼰写的⽅法转换:" + res);
G
va
Ja

1.


Solution
2.


Solution
3. k


Solution
4. 增 N

Solution
5.


Solution

3.3.4

Leetcode: 本 近

0 近 中

输⼊:(2 -> 4 -> 3) + (5 -> 6 -> 4)


输出:7 -> 0 -> 8
原因:342 + 465 = 807

Leetcode

https://leetcode-cn.com/problems/add-two-numbers/solution/
de
ui 近 想 dummy近 dummy->next
G
va
Ja

近 品

Solution

l1 l2

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
//https://leetcode-cn.com/problems/add-two-numbers/description/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
//carry 表示进位数
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
//进位数
carry = sum / 10;
//新节点的数值为sum % 10
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
de
ui }
G
va
Ja

3.3.5

offer: 近 近

近 直 next
近 近 “ ”

Solution

public class ListNode {


int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}

/**
*
* @author Snailclimb
* @date 2018年9⽉19⽇
* @Description: TODO
*/
public class Solution {

public ListNode ReverseList(ListNode head) {

ListNode next = null;


ListNode pre = null;

while (head != null) {


de
ui // 保存要反转到头的那个节点
G
va
next = head.next;
// 要反转的那个节点指向已经反转的上⼀个节点(备注:第⼀次反转的时候会指向null)
Ja

head.next = pre;
// 上⼀个已经反转到头部的节点
pre = head;
// ⼀直向链表尾⾛
head = next;
}
return pre;
}

public static void main(String[] args) {

ListNode a = new ListNode(1);


ListNode b = new ListNode(2);
ListNode c = new ListNode(3);
ListNode d = new ListNode(4);
ListNode e = new ListNode(5);
a.next = b;
b.next = c;
c.next = d;
d.next = e;
new Solution().ReverseList(a);
while (e != null) {
System.out.println(e.val);
e = e.next;
}
}

5
4
3
2
1

3.3.6 k

offer: 近 k
de
ui k (L-K+1)
G
va

/ 近 node1 近 node1 k-1 近 node2


Ja

近 node1 近node2 k (L-K+1)

Solution

/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/

// 时间复杂度O(n),⼀次遍历即可
// https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?
tpId=13&tqId=11167&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-
interviews/question-ranking
public class Solution {
public ListNode FindKthToTail(ListNode head, int k) {
// 如果链表为空或者k⼩于等于0
if (head == null || k <= 0) {
return null;
}
// 声明两个指向头结点的节点
ListNode node1 = head, node2 = head;
// 记录节点的个数
int count = 0;
// 记录k值,后⾯要使⽤
int index = k;
// p指针先跑,并且记录节点数,当node1节点跑了k-1个节点后,node2节点开始跑,
// 当node1节点跑到最后时,node2节点所指的节点就是倒数第k个节点
while (node1 != null) {
node1 = node1.next;
count++;
if (k < 1) {
node2 = node2.next;
}
k--;
}
// 如果节点个数⼩于所求的倒数第k个节点,则返回空
if (count < index)
return null;
return node2;

}
}
de
ui 3.3.7 N
G
va
Ja

Leetcode: 近增 n 近

给定⼀个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第⼆个节点后,链表变为 1->2->3->5.

公意候 常

leetcode 近 Leetcode.

增 (L - n + 1) 近 L
L近

Solution

全 件 近 近更
近 增 近 L
近 近 (L - n) (L - n)
next (L - n + 2)

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
de
ui * ListNode(int x) { val = x; }
G
va
* }
Ja

*/
// https://leetcode-cn.com/problems/remove-nth-node-from-end-of-
list/description/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
// 哑结点,哑结点⽤来简化某些极端情况,例如列表中只含有⼀个结点,或需要删除列表的头部
ListNode dummy = new ListNode(0);
// 哑结点指向头结点
dummy.next = head;
// 保存链表⻓度
int length = 0;
ListNode len = head;
while (len != null) {
length++;
len = len.next;
}
length = length - n;
ListNode target = dummy;
// 找到 L-n 位置的节点
while (length > 0) {
target = target.next;
length--;
}
// 把第 (L - n)个结点的 next 指针重新链接⾄第 (L - n + 2)个结点
target.next = target.next.next;
return dummy.next;
}
}

O(L) 近 LL (L - n)
(L−n) 2L-n2L−n 近 O(L)O(L)
O(1) 什

——

** N (L-N+1)

“ k ”
node1 node2;node1 近node1 n+1 ,node2 .
node1 近node2 找L-n 此 找L
近 n+1 此

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
de
ui * ListNode next;
G
va
* ListNode(int x) { val = x; }
Ja

* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {

ListNode dummy = new ListNode(0);


dummy.next = head;
// 声明两个指向头结点的节点
ListNode node1 = dummy, node2 = dummy;

// node1 节点先跑,node1节点 跑到第 n 个节点的时候,node2 节点开始跑


// 当node1 节点跑到最后⼀个节点时,node2 节点所在的位置就是第 (L-n ) 个节点,也就
是倒数第 n+1(L代表总链表⻓度)
while (node1 != null) {
node1 = node1.next;
if (n < 1 && node1 != null) {
node2 = node2.next;
}
n--;
}

node2.next = node2.next.next;

return dummy.next;

}
}

3.3.8

offer: ⽔ 近 近

样:

1. A,B始
2. A A1 B B1 近 A1 近 A1 始
3. A2 B1 近 B1 , 近A1 B1始
4. A2 B2 近

想 ⽔ 直

Solution
de
ui
G
va
Ja

/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/
//https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?
tpId=13&tqId=11169&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-
interviews/question-ranking
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}
}

3.3.9 offer

双 近 n近 双 n n<=39

⽔ 近 近 ⽔
近 fn1 fn2 近

de
ui
G int Fibonacci(int number) {
va
if (number <= 0) {
Ja

return 0;
}
if (number == 1 || number == 2) {
return 1;
}
int first = 1, second = 1, third = 0;
for (int i = 3; i <= number; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}

public int Fibonacci(int n) {

if (n <= 0) {
return 0;
}
if (n == 1||n==2) {
return 1;
}

return Fibonacci(n - 2) + Fibonacci(n - 1);

3.3.10

1 近 2 n

a. 近1 2 近 近 n-1 近
f(n-1); b. 2 近 n-2 近 f(n-2) c. a近b
: f(n) = f(n-1) + f(n-2) d. f(1) = 1 ,
f(2) = 2 f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5近 f(n) = f(n-1) + f(n-2)
常 6 近 5 6近
5 6近 4 6近 4 近
6近 3 6 近 f(6) = f(5) + f(4)始
de
ui
G
va
1 2 3 5 8..... 1 1 2 3 5 ....... ⽔ 近
⽔ 近
Ja

int jumpFloor(int number) {


if (number <= 0) {
return 0;
}
if (number == 1) {
return 1;
}
if (number == 2) {
return 2;
}
int first = 1, second = 2, third = 0;
for (int i = 3; i <= number; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}

3.3.11

1 近 2 …… n n

n>=2近 n 1 2 n 1 近 n-1 近 f(n-1) 2


近 n-2 近 f(n-2) ...... n-1 近 1 近 f(1) n 近 0 近
f(0) n>=2 f(n)=f(n-1)+f(n-2)+...+f(1) f(n-1)=f(n-2)+f(n-3)+...+f(1)
f(n)=2*f(n-1) f(1)=1, f(n)=2^(number-1)

int JumpFloorII(int number) {


return 1 << --number;//2^(number-1)⽤位移操作进⾏,更快
}

java

1. “<<” : 近 如2 n
de
ui 2. “>>”: 近 2 n
G
va
3. “>>>” 近 0 1近 0
更 近
Ja

>> int a = 16; int b = a << 2;// 2近 16 * 2 2 16 * 4 int c = a >>


2;// 2近 16 / 2 2 近 16 / 4

3.3.12

近 ⽔ 近 ⽔
题 近 近

近 想 近

少 近 近 ⽔ 近 ⽔ 近 近

public boolean Find(int target, int [][] array) {


//基本思路从左下⻆开始找,这样速度最快
int row = array.length-1;//⾏
int column = 0;//列
//当⾏数⼤于0,当前列数⼩于总列数时循环条件成⽴
while((row >= 0)&& (column< array[0].length)){
if(array[row][column] > target){
row--;
}else if(array[row][column] < target){
column++;
}else{
return true;
}
}
return false;
}

3.3.13

题 近 同 “%20” 更 近 同 We Are Happy.


同 We%20Are%20Happy

近 同 近 append() 全
“%20”近
de
ui replaceAll(String regex,String replacement) 近
G
va
Ja

public String replaceSpace(StringBuffer str) {


StringBuffer out=new StringBuffer();
for (int i = 0; i < str.toString().length(); i++) {
char b=str.charAt(i);
if(String.valueOf(b).equals(" ")){
out.append("%20");
}else{
out.append(b);
}
}
return out.toString();
}

public String replaceSpace(StringBuffer str) {


//return str.toString().replaceAll(" ", "%20");
//public String replaceAll(String regex,String replacement)
//⽤给定的替换替换与给定的regular expression匹配的此字符串的每个⼦字符串。
//\ 转义字符. 如果你要使⽤ "\" 本身, 则应该使⽤ "\\". String类型中的空格
⽤“\s”表示,所以我这⾥猜测"\\s"就是代表空格的意思
return str.toString().replaceAll("\\s", "%20");
}

3.3.14

double 很 base int exponent base exponent


offer 近 1. 0 <0 近 0 近
近 始 2. 0近 base double 近 == 3.
题 找 此 n 近a^n =找a^n/2此*找a^n/2此始 n 近a^n = a^[(n-1)/2]
* a^[(n-1)/2] * a O(logn)

O(logn)
de
ui
G public class Solution {
va
boolean invalidInput=false;
Ja

public double Power(double base, int exponent) {


//如果底数等于0并且指数⼩于0
//由于base为double型,不能直接⽤==判断
if(equal(base,0.0)&&exponent<0){
invalidInput=true;
return 0.0;
}
int absexponent=exponent;
//如果指数⼩于0,将指数转正
if(exponent<0)
absexponent=-exponent;
//getPower⽅法求出base的exponent次⽅。
double res=getPower(base,absexponent);
//如果指数⼩于0,所得结果为上⾯求的结果的倒数
if(exponent<0)
res=1.0/res;
return res;
}
//⽐较两个double型变量是否相等的⽅法
boolean equal(double num1,double num2){
if(num1-num2>-0.000001&&num1-num2<0.000001)
return true;
else
return false;
}
//求出b的e次⽅的⽅法
double getPower(double b,int e){
//如果指数为0,返回1
if(e==0)
return 1.0;
//如果指数为1,返回b
if(e==1)
return b;
//e>>1相等于e/2,这⾥就是求a^n =(a^n/2)*(a^n/2)
double result=getPower(b,e>>1);
result*=result;
//如果指数n为奇数,则要再乘⼀次底数base
if((e&1)==1)
result*=b;
return result;
}
}

如 O找n此近
de
ui
G // 使⽤累乘
va
public double powerAnother(double base, int exponent) {
Ja

double result = 1.0;


for (int i = 0; i < Math.abs(exponent); i++) {
result *= base;
}
if (exponent >= 0)
return result;
else
return 1 / result;
}

3.3.15

近 题 近 近
近 近

近 在话 n,
近 0
近 全 始 n 全

O找n此近 O找n此

public class Solution {


public void reOrderArray(int [] array) {
//如果数组⻓度等于0或者等于1,什么都不做直接返回
if(array.length==0||array.length==1)
return;
//oddCount:保存奇数个数
//oddBegin:奇数从数组头部开始添加
int oddCount=0,oddBegin=0;
//新建⼀个数组
int[] newArray=new int[array.length];
//计算出(数组中的奇数个数)开始添加元素
for(int i=0;i<array.length;i++){
if((array[i]&1)==1) oddCount++;
}
for(int i=0;i<array.length;i++){
//如果数为基数新数组从头开始添加元素
//如果为偶数就从oddCount(数组中的奇数个数)开始添加元素
if((array[i]&1)==1)
newArray[oddBegin++]=array[i];
else newArray[oddCount++]=array[i];
}
for(int i=0;i<array.length;i++){
de
ui array[i]=newArray[i];
G
va
}
Ja

}
}

3.3.16 k

近 k

p1 近 p1 k-1 近 p2 近 p1
近p2 k

( ) n k 近
常 近 n 近 常 n-1 近
k 近 n-k+1

1. head p1 p2近 p1 k-1 近 p2


2. p1 k 近 近p2 p2 常 样
3. p1 近 p1 n p2 p1 k-1 近 p1
p2 k-1 p1 n 近p2 n-(k-1) p2 n-k+1 近
p2 k 常

/*
//链表类
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/

//时间复杂度O(n),⼀次遍历即可
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode pre=null,p=null;
//两个指针都指向头结点
p=head;
pre=head;
//记录k值
de
ui int a=k;
G
va
//记录节点的个数
Ja

int count=0;
//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第k个节点
while(p!=null){
p=p.next;
count++;
if(k<1){
pre=pre.next;
}
k--;
}
//如果节点个数⼩于所求的倒数第k个节点,则返回空
if(count<a) return null;
return pre;

}
}

3.3.17

近 近

近 近 近
近 近
1 2 近 3 2 近4 3 近

/*
public class ListNode {
de
ui int val;
G
va
ListNode next = null;
Ja

ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode next = null;
ListNode pre = null;
while (head != null) {
//保存要反转到头来的那个节点
next = head.next;
//要反转的那个节点指向已经反转的上⼀个节点
head.next = pre;
//上⼀个已经反转到头部的节点
pre = head;
//⼀直向链表尾⾛
head = next;
}
return pre;
}

3.3.18

⽔ 近 近

样:

1. A,B始
2. A A1 B B1 近 A1 近 A1 始
3. A2 B1 近 B1 , 近A1 B1始
4. A2 B2 近

/*
public class ListNode {
de
ui int val;
G
va
ListNode next = null;
Ja

ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
//list1为空,直接返回list2
if(list1 == null){
return list2;
}
//list2为空,直接返回list1
if(list2 == null){
return list1;
}
ListNode mergeHead = null;
ListNode current = null;
//当list1和list2不为空时
while(list1!=null && list2!=null){
//取较⼩值作头结点
if(list1.val <= list2.val){
if(mergeHead == null){
mergeHead = current = list1;
}else{
current.next = list1;
//current节点保存list1节点的值因为下⼀次还要⽤
current = list1;
}
//list1指向下⼀个节点
list1 = list1.next;
}else{
if(mergeHead == null){
mergeHead = current = list2;
}else{
current.next = list2;
//current节点保存list2节点的值因为下⼀次还要⽤
current = list2;
}
//list2指向下⼀个节点
list2 = list2.next;
}
}
if(list1 == null){
current.next = list2;
}else{
current.next = list1;
}
return mergeHead;
}
}
de
ui
G
va
Ja

public ListNode Merge(ListNode list1,ListNode list2) {


if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}

3.3.19

内 近 Push Pop int

内 找LIFO此 JDK
内 Stack

内近 想 push push stack1近pop


stack1 pop stack2近 stack2 pop 近 找 [pop]
[pop] [ ]此

+内
de
ui
G //左程云的《程序员代码⾯试指南》的答案
va
import java.util.Stack;
Ja

public class Solution {


Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();

//当执⾏push操作时,将元素添加到stack1
public void push(int node) {
stack1.push(node);
}

public int pop() {


//如果两个队列都为空则抛出异常,说明⽤户没有push进任何元素
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
//如果stack2不为空直接对stack2执⾏pop操作,
if(stack2.empty()){
while(!stack1.empty()){
//将stack1的元素按后进先出push进stack2⾥⾯
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}

3.3.20 ,

近 内 近 内 ⼤
内 更 1,2,3,4,5 内 近 4近5,3,2,1 内
⼤ 近 4,3,5,1,2 内 ⼤ 找 此

近 Alias 近 Alias
https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106

选 件 内近 内 近 内 近 1近 内
内 近 4近 1≠4近 内近 内近 内
近 内 近 近 内 近 件 内
近 ⼤ 内 ⼤

内1,2,3,4,5

内4,5,3,2,1
de
ui 1 件 内近 内 1≠4近 内2
G
va

内 2≠4近 内3
Ja

内 3≠4近 内4

内 4 4近 内4近⼤ 近 5近,件 内 1,2,3

内 3≠5近 内5

内 5=5近 内5,⼤ 近 3近,件 内 1,2,3

…. 近 件 内 ⼤ 内 ⼤

import java.util.ArrayList;
import java.util.Stack;
//这道题没想出来,参考了Alias同学的答案:
https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
if(pushA.length == 0 || popA.length == 0)
return false;
Stack<Integer> s = new Stack<Integer>();
//⽤于标识弹出序列的位置
int popIndex = 0;
for(int i = 0; i< pushA.length;i++){
s.push(pushA[i]);
//如果栈不为空,且栈顶元素等于弹出序列
while(!s.empty() &&s.peek() == popA[popIndex]){
//出栈
s.pop();
//弹出序列向后⼀位
popIndex++;
}
}
return s.empty();
}
}
de
ui
G
va
Ja

4.1 MySQL
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

4.1.1

SQL 找 2 此 找 此
MySQL : 3 ( )

SQL Tutorial 找SQL , 此 SQL Tutorial找SQL , 此 SQL 找



Github-MySQL 找MySQL tutorial book此 找 中 MySQL近 MySQL

MySQL 找 此

5 吧mysql

MySQL 中 著-分

MySQL MySQL 找 此四四MySQL 找 此四四MySQL 找 此

MySQL5.7 MySQL5.7 四四 MySQL

MySQL 找PXC此 四四MyCAT

4.1.2 MySQL?
MySQL 近 Java 近 MySQL 近
见 MySQL近 我 因 MySQL
近 GPL(General Public License)
MySQL 3306

4.1.3
de
ui MySQL
G
va
Ja

mysql> show engines;

MySQL 址 InnoDB, 5.7 址


InnoDB 址近 InnoDB

MySQL

mysql> show variables like '%storage_engine%';

show table status like "table_name" ;

MyISAM InnoDB

MyISAM MySQL 址找5.5 此 近 近 喜


题 近 MyISAM 经近 把
近5.5 近MySQL InnoDB找 址此近MySQL 5.5
址 InnoDB

InnoDB 址近 MyISAM
找 在 MyISAM 把 此

1. : MyISAM 经 (table-level locking) 近 InnoDB 经 (row-level


locking) 经, 经
2. MyISAM 近 只 ,
InnoDB 近 InnoDB 近
(commit) (rollback) 把 (crash recovery capabilities)
(transaction-safe (ACID compliant))
de
ui 3. MyISAM 近 InnoDB
G
va
4. MVCC InnoDB , MVCC 经 ;MVCC READ

Ja

COMMITTED REPEATABLE READ ;MVCC (optimistic)经


(pessimistic)经 ; MVCC 之 MySQL-InnoDB-MVCC

5. ......

MySQL :

“MyISAM InnoDB ” 近
近InnoDB MyISAM 近最 物 近

InnoDB 近 见 近
近 把 近 MyISAM
近 想

4.1.4

MySQL

MySQL 近
近 找
近 此 PS Java 真

MySQL

Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

4.1.5
MySQL 微 BTree 近 微
近 只 近 近 只 始 ⼼
近 BTree

MySQL BTree B B+Tree近 址

MyISAM: B+Tree data吧 也 近 B+Tree


近 Key 近 data 吧 近 data 吧
“ 物 ”
InnoDB: MyISAM近 近
B+Tree 微近 data吧
key 近 InnoDB “ 物 找
此” ⼼ 件 近件 data吧 近
MyISAM key

PS
Java 真
de
ui MySQL
G
va

4.1.6
Ja

只 近 只让 近MySQL 8.0 近

my.cnf 近 MySQL 只让

query_cache_type=1
query_cache_size=600000

MySQL 只让

set global query_cache_type=1;


set global query_cache_size=600000;

近 只
喜 只 只 说
只 让 近 只 题 题
MySQL 近 只 让

让 近MySQL 只让 只 晚 近 找 微此
近 让

近 让 只 听近最
近 让 近 MB 近
sql_cache sql_no_cache

select sql_no_cache count(*) from usr;

4.1.7 ?

更 1000 近 晚
⼼什 1000 近 ⼼什 1000
把近 ⼼什 ⼼什 近

4.1.8 (ACID)
de
ui
G
va
Ja

1. Atomicity 近 从
近 始
2. Consistency 近 近

3. Isolation 近 过近

4. Durability 近

4.1.9 ?
近 近 找
此 近

Dirty read : 近
近 近
近 “对 ”近 “对 ”
Lost to modify : 近 近

近 更 1 A=20近 2 A=20近 1
A=A-1近 2 A=A-1近 A=19近 1
Unrepeatableread : 近
近 近

Phantom read : 找T1此 近


找T2此 只 近 找T1此
近 近


4.1.10 ?MySQL ?
SQL

READ-UNCOMMITTED( ) 下 近 近
de
ui READ-COMMITTED( ) 近
G
va


Ja

REPEATABLE-READ( )

SERIALIZABLE( ) 下 近 ACID 下
近 过近 近

READ-UNCOMMITTED √ √ √

READ-COMMITTED × √ √

REPEATABLE-READ × × √

SERIALIZABLE × × ×

MySQL InnoDB 址 下 REPEATABLE-READ


SELECT @@tx_isolation;

mysql> SELECT @@tx_isolation;


+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+

SQL InnoDB 址 REPEATABLE-READ


下 Next-Key Lock 经 近 近 (
SQL Server) InnoDB 址 下 REPEATABLE-READ
下 近 SQL SERIALIZABLE( )下
下 近 经 近 下 READ-
COMMITTED( )近 InnoDB 址 REPEAaTABLE-
READ 新

InnoDB 址 SERIALIZABLE( )下

4.1.11 InnoDB
MyISAM InnoDB

MyISAM 经(table-level locking)


InnoDB 经(row-level locking) 经, 经

MySQL 经 经近 经近 近 ⼏
近 经 近 经 经 近著 经 近 近MyISAM
InnoDB 址 经
de
ui MySQL 经 经近 经 经
G
va
经 近 近 经 近 经 近 经
Ja

MySQL 经
https://blog.csdn.net/qq_34337272/article/details/80611486

InnoDB

Record lock 经
Gap lock 经近经 近 喜
Next-key lock record+gap 经 近

1. innodb 只 next-key lock


2. Next-locking keying Phantom Problem
3. 只 近 next-key lock record key
4. Gap经 死 近
5. 得gap经 找 也 近 ⼼ record lock此 A.
下 RC B. innodb_locks_unsafe_for_binlog 1

4.1.12
MySQL 近 CRUD 近 世家

给 只 只三 近

近 近 始

更 近 近
近还

近 只 Block 近 I/O 近
微近
de
ui ⼜⼼近 ⼜⼼ 近 Join 近
G
va
Join 近 始
Ja

近 200 近 近
更 近


近 MySQL 近

近 近相 Join
近 Java 真

近 微近 I/O

jar JDBC
Sharding-JDBC TDDL

Mycat 360 Atlas DDB 微

MySQL : https://segmentfault.com/a/1190000006158186

4.1.13 ?
?
乐 java 乐 jdbc 乐 redis 乐
近 ⼏近 近
近 到 近
学 近 到 近 近乐 喜
乐 乐 乐 近 ⾏ java 乐
de
ui 乐 乐 在话 近 近
G
va

socket 让
Ja

⼰ 乐 让 近
近最

4.1.14 ,id
近 1 近 近 id

id

UUID 近 近 近 只

id : 近 ID
id 近 量 更近 近 ⼊
redis id : 近 近 近
近 近 近
Twitter snowflake Github https://github.com/twitter-archive/snowflake
Leaf ID Leaf ID 近 ⽔
⽔ 近 近
Zookeeper https://tech.meituan.com/2017/04/
21/mt-leaf.html
......

4.1.15 SQL MySQL


SQL MySQL

4.1.16 MySQL
MySQL

4.1.17 SQL
SQL 常--- 能

4.2 Redis
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf
de
ui 4.2.1 redis
G
va
Ja

redis 近 redis 近
近 redis 让 近redis 经 redis
近redis LUA LRU

redis/

“ ” “ ”


让 近 让 让
近 近 让 直

让 近 想
让 近 让
de
ui
G
va
Ja

redis map/guava ?

segmentfault 近 https://segmentfault.com/q/10100000091
06416

让 让 让 Java 更近 map guava 让 近


近 jvm 近 更 近 更
让 近让

redis memcached 让 近 更 近 更 让 近让
redis memcached 近 微

4.2.2 redis
:https://www.javazhiyin.com/22943.html

redis file event handler近 近 redis


IO 后 socket近 socket

微 4

socket
IO

找 此
de
ui socket 近 近 IO 后
G
va
socket近 socket 近 ⽣ 近
Ja

4.2.3 redis memcached


redis memcached redis 让 近 redis

1. redis Redis k/v 近


list近set近zset近hash 微 memcache 近String
2. Redis ,
Memecache
3. memcached 近 始
redis cluster .
4. Memcached IO Redis IO

近 直

4.2.4 redis

String

: set,get,decr,incr,mget

String 微 key-value 近value String近 key-value


让 始 近

Hash

hget,hset,hgetall
de
ui hash string field value ⾏ 近hash 近 近
G
va
hash 微 近
Ja

hash

key=JavaUser293847
value={
“id”: 1,
“name”: “SnailClimb”,
“age”: 22,
“location”: “Wuhan, Hubei”
}

List

: lpush,rpush,lpop,rpop,lrange

list 近Redis list 近 Redis 微 近 近


近 Redis list 微

Redis list 近 近 近 什

lrange 近 近 list 只近
近 redis 近 找
此近

Set

sadd,spop,smembers,sunion

set list 近 set

近 近set 近 set
set 近 list set

近 近
Redis 近

sinterstore key1 key2 key3 将交集存在key1内

Sorted Set

zadd,zrange,zrem,zcard

set 近sorted set score近 score

近 近 近⼤ 找
此 近 Redis Sorted Set 微
de
ui 4.2.5 redis
G
va
Ja

Redis 近 redis 让
近 token 近最
近 近 近

set key 近 expire time近 近 key

key 1 近 1 近redis key 增


redis 下 100ms key近也 近


增 常 redis key 近 下
100ms key 近 CPU 直
增 key 增 增
key近 增 增 近 近 key近
redis 增 增 近 直

增 key近
近 增 近 常 key 近 redis ⼏
常 redis

4.2.6 redis (MySQL 2000w Redis 20w


Redis ?)
redis redis.conf 近 近 之
http://download.redis.io/redis-stable/redis.conf

redis 6

1. volatile-lru 找server.db[i].expires此 外
2. volatile-ttl 找server.db[i].expires此 外
3. volatile-random 找server.db[i].expires此 外
4. allkeys-lru 他 近 近 key找

5. allkeys-random 找server.db[i].dict此 外
6. no-eviction 给 近 他 近

4.0

7. volatile-lfu (server.db[i].expires) 外
8. allkeys-lfu 他 近 近 key

redis
de
ui 4.2.7 redis ( redis )
G
va
Ja


找 因 此近 因

Redis Memcached 近Redis 近 Redis


snapshotting RDB append-only
file,AOF 近 近 近

snapshotting RDB

Redis Redis 近
近 找Redis
微近 Redis 此近

Redis 近 redis.conf

save 900 1 #在900秒(15分钟)之后,如果⾄少有1个key发⽣变化,Redis就会⾃动触


发BGSAVE命令创建快照。

save 300 10 #在300秒(5分钟)之后,如果⾄少有10个key发⽣变化,Redis就会⾃动触


发BGSAVE命令创建快照。

save 60 10000 #在60秒(1分钟)之后,如果⾄少有10000个key发⽣变化,Redis就会⾃动


触发BGSAVE命令创建快照。

AOF append-only file

近AOF 近 Redis
AOF找append only file此 近 appendonly

appendonly yes

AOF Redis 近Redis AOF


AOF RDB 近 dir 近
appendonly.aof

Redis AOF 近

appendfsync always #每次有数据修改发⽣时都会写⼊AOF⽂件,这样会严重降低Redis的速度


appendfsync everysec #每秒钟同步⼀次,显示地将多个写命令同步到硬盘
appendfsync no #让操作系统决定何时进⾏同步

近 想 appendfsync everysec 近 Redis AOF


近Redis 把近
近Redis

Redis 4.0
de
ui Redis 4.0 RDB AOF 找 得近 aof-use-rdb-preamble
G
va

Ja

近AOF RDB AOF


RDB AOF , 近 AOF
RDB AOF 近

AOF

AOF AOF 近 AOF AOF


AOF 近 近 AOF

BGREWRITEAOF 近Redis AOF 让 近 让


AOF 近 AOF 近
让 AOF 近 AOF
近 AOF AOF 近 AOF

Redis

4.2.8 redis
Redis MULTI EXEC WATCH (transaction)
近 近 近
近 会近

近 ACID 也 Redis 近
找Atomicity此 找Consistency此 下 找Isolation此近 Redis
近 找Durability此

1. redis 近 看 近 找
issue: Redis 此

4.2.9

在 让 近 近 近

找 结 近 此

redis 近 章 外
de
ui ehcache让 + hystrix & 近 MySQL
G
va
redis 让
Ja

让 key 让 近 近
让 更 让 key 近
( 近 近 )
Ja
va
G
ui
de
de
ui MySQL 150 近 show variables like
G
va
'%max_connections%'; 近cpu近 近 近
近 直 近
Ja

3000

近 活 只
id 0

1 key : 让 key redis 近


SET key value EX 10086 key 种 近
近 微 key近 redis 让 key 近
近 key
1

近 近 key 表名:列名:主键名:主键值

Java 近

public Object getObjectInclNullById(Integer id) {


// 从缓存中获取数据
Object cacheValue = cache.get(id);
// 缓存为空
if (cacheValue == null) {
// 从数据库中获取
Object storageValue = storage.get(key);
// 缓存空对象
cache.set(key, storageValue);
// 如果存储数据为空,需要设置⼀个过期时间(300秒)
if (storageValue == null) {
// 必须设置过期时间,否则有被攻击的⻛险
cache.expire(key, 60 * 5);
}
return storageValue;
}
return cacheValue;
}

2 像 微近
key 近 像
“ ” 像 近 近
像 近
近 ( 近
)
de
ui
G
va
Ja

像 像 常 直 近

4.2.10 Redis Key


Redis 实 Key key 近
近 直

经找zookeeper redis 经此 找 Redis 实


Key 近 经近 此

zookeeper 经 经 近
zookeeper 近 是 经
近 经 近 是 增
近 章 经 近 经 近增

门 近 Zookeeper
de
ui
G
va

https://www.jianshu.com/p/8bddd381de06
Ja

4.2.11 ?
让 让 近让 近 近
让 近 让

让 近 晚 让 近 近
近 常

近 让 + 近让
近 近 同 近同 近

同 近 请 近 国

https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency
/redis-consistence.md

Java 1 找 Java 此- 结 直
“1”

Redis
Redis http://redisdoc.com/string/set.html

5.1 Spring
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

近 Spring 近 晚 直
近 Spring 近 之
Spring / 近
copy近 近 近 ⼼

5.1.1. Spring ?
de
ui Spring 近海 Spring http
G
va
s://spring.io/
Ja

Spring Spring Framework近 近


说 / , Web AOP找 此
Core Container Core Spring 近Beans
Context IOC 近AOP

Spring Spring 6 :

(DI)近AOP近 (events)近 近i18n近 近 近 近SpEL


品 近TestContext 近Spring MVC 近WebTestClient
近DAO 近JDBC近ORM近 XML
Web : Spring MVC Spring WebFlux Web
近JMS近JCA近JMX近 近 近 近让
Kotlin近Groovy近

5.1.2 Spring
Spring4.x 5.x Web Portlet 近
WebFlux

Spring Core , Spring IoC

Spring Aspects AspectJ


Spring AOP
Spring JDBC : Java
de
ui Spring JMS Java
G
va
Spring ORM : Hibernate ORM
Ja

Spring Web : Web


Spring Test : JUnit TestNG

5.1.3 @RestController vs @Controller


Controller

@Controller @ResponseBody 近
Spring MVC 近

@RestController JSON XML

@RestController 近 JSON XML HTTP (Response) 近


RESTful Web 近 著 找 此

@Controller +@ResponseBody JSON XML


de
ui Spring4 RESTful Web 近 @Controller
G
va
@ResponseBody 近 @Controller +@ResponseBody= @RestController 找Spring 4

Ja

@ResponseBody Controller
近 HTTP (Response) body 近 JSON XML 近
JSON

Reference:

https://dzone.com/articles/spring-framework-restcontroller-vs-controller找 此
https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-ann
otations-spring-mvc-rest.html?m=1

5.1.4 Spring IOC & AOP

Spring IoC AOP

IoC

IoC找Inverse of Control: 此 近
Spring IoC 近 Spring IoC Spring
IoC IoC Map key value ,Map

IoC 近 IoC
近 IoC
/
Service 还 近 更 Service近
Service 微 题 近 IoC 近
近 近

Spring XML Bean近 XML 近


SpringBoot

之 https://www.zhihu.com/question/23277575/answer/169698662

Spring IoC
de
ui
G
va
Ja

IoC 之

https://javadoop.com/post/spring-ioc

AOP

AOP(Aspect-Oriented Programming: ) 近
近 近

Spring AOP 近 近 近 Spring AOP JDK


Proxy近 近 近 JDK Proxy 近
Spring AOP Cglib 近 Spring AOP Cglib 近

AspectJ ,Spring AOP AspectJ 近AspectJ Java


AOP

AOP 近 近
近 见
AOP

Spring AOP AspectJ AOP

Spring AOP AspectJ Spring AOP (Proxying) 近


AspectJ (Bytecode Manipulation)

Spring AOP AspectJ 近AspectJ Java AOP


AspectJ Spring AOP 近 Spring AOP 近

近 近 近 AspectJ 近
Spring AOP
de
ui Guide
G
va

: Github 70k Star JavaGuide找 此


Ja

“1” Java + pdf

5.1.5 Spring bean

Spring bean ?

singleton : bean 更近Spring bean 更


prototype : bean 更
request : HTTP bean近 bean HTTP request
session : HTTP bean近 bean HTTP session
global-session session 吧近 portlet web 近Spring5
Portlet (更 HTML) Java Web portlet 近
servlet HTTP 近 servlet 近 portlet

Spring bean

近 更 bean
近 近

1. Bean 找 此
2. ThreadLocal 近 ThreadLocal 找

@Component @Bean

1. : @Component 近 @Bean
2. @Component 重意候 专 Spring 找
@ComponentScan 意候 重 Spring bean
此 @Bean bean,@Bean Spring
更近
3. @Bean Component 近 @Bean 要
bean Spring 近 @Bean

@Bean 更

@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}

xml
de
ui
G <beans>
va
<bean id="transferService" class="com.acme.TransferServiceImpl"/>
Ja

</beans>

更 @Component

@Bean
public OneService getService(status) {
case (status) {
when 1:
return new serviceImpl1();
when 2:
return new serviceImpl2();
when 3:
return new serviceImpl3();
}
}

Spring bean ?

@Autowired bean近 @Autowired


bean ,

@Component 近 Spring Bean 近


@Component
@Repository : Dao 近
@Service : 近 晚 近 Dao
@Controller : Spring MVC 近 Service

Spring bean ?

近 https://yemengying.com/2016/07/14/spring-
bean-life-cycle/ 近 近 https://www.cnblogs.com/zrtqsk/p/3
735273.html

Bean Spring Bean


Bean Java Reflection API Bean 更
晚 set()
Bean BeanNameAware 近 setBeanName() 近 Bean
Bean BeanClassLoaderAware 近 setBeanClassLoader() 近
ClassLoader 更
近 *.Aware 近
Bean Spring BeanPostProcessor 近
postProcessBeforeInitialization()
Bean InitializingBean 近 afterPropertiesSet()
Bean init-method 近
Bean Spring BeanPostProcessor 近
postProcessAfterInitialization()
Bean 近 Bean DisposableBean 近 destroy()
de
ui Bean 近 Bean destroy-method 近
G
va
Ja

5.1.6 Spring MVC

Spring MVC ?

近 Model1 Model2 Spring MVC

Model1 : Java 著 Model1 JavaWeb


Model1 近 Web JSP 近 JavaBean
JSP 近
福 近 始 近
de
ui 始
G
va
Model2 Servlet Demo “Java Bean(Model)+ JSP找View,此

Ja

+Servlet找Controller此 ” , JavaWeb MVC Model:


近 dao bean View 近 Controller
近 JSP

Model2 近Model2 近 Model2


近 JavaWeb MVC
Struts2近 Struts2 Spring 近Spring
Spring MVC 近 Spring MVC MVC Struts2 近 Spring MVC
近 近 Spring MVC

MVC ,Spring MVC MVC Spring MVC


Web 近 Spring Spring MVC Service
找 此 Dao 找 此 Entity 找 此 Controller ( 近
)

Spring MVC

SpringMVC ?
de
ui
G
va
Ja

Spring MVC 题 DispatcherServlet


1. 找 此 近 DispatcherServlet
2. DispatcherServlet HandlerMapping近 样 Handler
3. 样 Handler 找 Controller 此 近 HandlerAdapter

4. HandlerAdapter Handler 近
5. 近 ModelAndView 近Model 近View
View
6. ViewResolver View View
7. DispaterServlet Model View找 却⽤此
8. View 找 此

5.1.7 Spring
在话近 :“ Spring
?”

: Spring ⼒ BeanFactory ApplicationContext bean


: Spring AOP
: Spring Bean 更
: Spring jdbcTemplate hibernateTemplate Template

: 近

: Spring 时
:Spring AOP (Advice) spring MVC
Controller
......

5.1.8 Spring
de
ui Spring
G
va


Ja

1. ( )
2. 近 找 此

1. XML
2.

Spring ?

TransactionDefinition

TransactionDefinition.ISOLATION_DEFAULT: 下 近Mysql
REPEATABLE_READ下 Oracle READ_COMMITTED下 .
TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 下 近

TransactionDefinition.ISOLATION_READ_COMMITTED: 近

TransactionDefinition.ISOLATION_REPEATABLE_READ:
近 近
TransactionDefinition.ISOLATION_SERIALIZABLE: 下 近 ACID 下
近 过近 近

Spring ?

TransactionDefinition.PROPAGATION_REQUIRED 近 始

TransactionDefinition.PROPAGATION_SUPPORTS 近 始

TransactionDefinition.PROPAGATION_MANDATORY 近 始
近 活 找mandatory 此

TransactionDefinition.PROPAGATION_REQUIRES_NEW 近

TransactionDefinition.PROPAGATION_NOT_SUPPORTED 近

TransactionDefinition.PROPAGATION_NEVER 近 近 活

TransactionDefinition.PROPAGATION_NESTED 近
始 近
TransactionDefinition.PROPAGATION_REQUIRED

@Transactional(rollbackFor = Exception.class)
de
ui Exception RuntimeException
G
va
近 近
Ja

@Transactional 近 public 近 近

活 近 近

@Transactional rollbackFor , RuntimeException


, rollbackFor=Exception.class,

@Transactional 之

Spring @transactional

5.1.9 JPA

JPA

Entity(name="USER")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;

@Column(name="USER_NAME")
private String userName;

@Column(name="PASSWORD")
private String password;

private String secrect;

secrect 近 常

static String transient1; // not persistent because of static


final String transient2 = “Satish”; // not persistent because of final
transient String transient3; // not persistent because of transient
@Transient
String transient4; // not persistent because of @Transient


de
ui Spring
G
va
http://www.cnblogs.com/wmyskxz/p/8820371.html
Ja

https://www.journaldev.com/2696/spring-interview-questions-and-answers
https://www.edureka.co/blog/interview-questions/spring-interview-questions/
https://www.cnblogs.com/clwydjgs/p/9317849.html
https://howtodoinjava.com/interview-questions/top-spring-interview-questions-with-answers/
http://www.tomaszezula.com/2014/02/09/spring-series-part-5-component-vs-bean/
https://stackoverflow.com/questions/34172888/difference-between-bean-and-autowired

Java : Java V2.0 PDF


"Java " 直

Java : Java “1”

------

5.2 MyBatis
JavaGuide 近

Mybatis 近 近在话 近 近
近 在话 Mybatis 近 近 近
在话 Mybatis 微 近

近 近 近 近 被 近
近 近 近 了 近
近 近
de
ui 近 近 近 近 在
G
va
话 近 近 近
界 近 近 近 真
Ja

“ ”近

友 近 Mybatis 近 找 近 此

5.2.1 #{} ${}

${} Properties ⼰ 近 sql 近 近


${driver} com.mysql.jdbc.Driver
#{} sql ⼰ 近 Mybatis sql #{} ? 近 sql
PreparedStatement 近 sql ? ⼰ 近 ps.setInt(0,
parameterValue)近#{item.name} item name
近 param.getItem().getName()

5.2.2 Xml select|insert|updae|delete

近<resultMap> <parameterMap> <sql> <include> <selectKey>近


sql 9 近 trim|where|set|foreach|if|choose|when|otherwise|bind 近
sql 近 <include> sql 近 <selectKey>

5.2.3 Xml Dao


Dao Dao

Dao 近 Mapper 近 近
namespace⾏ 近
近 ⾏ MappedStatement id 近 近 ⽔ sql
Mapper 近 近 + 同 key 近
MappedStatement 近
更 com.mybatis3.mappers.StudentDao.findStudentById 近 namespace
com.mybatis3.mappers.StudentDao id = findStudentById MappedStatement
Mybatis 近 <select> <insert> <update> <delete> 近 样
MappedStatement

Dao 近 近 +

Dao JDK 近Mybatis JDK Dao


proxy 近 proxy 电 近 MappedStatement sql近 sql
de
ui 5.2.4 Mybatis
G
va
Ja

Mybatis RowBounds 近 ResultSet 近


近 sql 近

Mybatis 近 近 电 电
sql近 sql近 dialect 近全

更 select _ from student 近 电 sql select t._ from ( select \* from


student)t limit 0,10

5.2.5 Mybatis

Mybatis
ParameterHandler ResultSetHandler StatementHandler Executor 4 近
Mybatis JDK 近 电 电 近
4 近 电 近 InvocationHandler invoke() 近
近 电 电

Mybatis Interceptor intercept() 近 近 电


近 近

5.2.6 Mybatis

近JDBC 近Mybatis

5.2.7Mybatis sql sql


sql

Mybatis sql Xml ⾏ 近 sql近


sql 近 Mybatis 9 sql
trim|where|set|foreach|if|choose|when|otherwise|bind

近 OGNL sql 近 sql近


sql

5.2.8 Mybatis sql


de
ui <resultMap> 近 ⾏ sql
G
va
近 近 T_NAME AS NAME近 name近
近 近Mybatis 近 近 还
Ja

T_NAME AS NaMe近Mybatis

⾏ 近Mybatis 近 游
近 ⾏ 近 游

5.2.9 Mybatis

近Mybatis 只近 近 只近
只近 只近 selectOne() selectList() 始 只近
只近 selectOne() selectList()

只近 近 sql 只 近游 近
只近 只 join 只近 A 近
B 近 sql 只近

近join 只 100 近 5 近 100 常


<resultMap> <id> 近 id 近Mybatis 100
近<id> 近

近 近 近 近

更 join 只 6 近 Teacher 近 Student 近Mybatis


近 1 6 近 6 6

t_id t_name s_id

| 1 | teacher | 38 | | 1 | teacher | 39 | | 1 | teacher | 40 | | 1 | teacher | 41 | | 1 | teacher | 42 | |


1 | teacher | 43 |

5.2.10 Mybatis

Mybatis association collection 快 近association


近 collection 只 Mybatis 近 快
lazyLoadingEnabled=true|false。

近 CGLIB 近 近 电 近
a.getB().getName()近 电 invoke() a.getB() null 近
只 B sql近 B 只 近 a.setB(b)近 a b 近
a.getB().getName() 快

近 Mybatis近 喜 Hibernate近 快
de
ui 5.2.11 Mybatis Xml Xml id
G
va
Ja

Xml ⾏ 近 namespace近 id 始 namespace近


id 始会 namespace 近 门

namespace+id Map<String, MappedStatement> key 近


namespace近 id近 近id namespace近 id 近
namespace 近namespace+id

5.2.12 Mybatis

BatchExecutor

5.2.13 Mybatis Executor

Mybatis Executor
近SimpleExecutor ReuseExecutor BatchExecutor

SimpleExecutor update select 近 Statement 近 得


Statement

`ReuseExecutor update select近 sql key Statement 近 近


近 近 得 Statement 近 Map<String, Statement> 近
近 Statement

BatchExecutor update找 select近JDBC select此近 sql 全


找 addBatch() 此 近 找 executeBatch() 此 近 让 Statement 近
Statement addBatch() 会 近 executeBatch() JDBC

Executor 近 SqlSession

5.2.14 Mybatis Executor

Mybatis 近 ExecutorType 近
DefaultSqlSessionFactory SqlSession ⽔ ExecutorType

5.2.15 Mybatis Enum

Mybatis ⾏ ⼦ 近 ⾏ ⼦ 近Mybatis ⾏ ⾏
TypeHandler 近 TypeHandler setParameter() getResult()
TypeHandler 近 javaType jdbcType 近 jdbcType
javaType 近 setParameter() getResult() 近 sql ⼰
de
ui 只
G
va

5.2.16 Mybatis A include B


Ja

B A A

Mybatis 样 Xml ⾏ 样 近 近 B
近Mybatis

近Mybatis 样 A 近 A B 近 B 样 近 近
近Mybatis A 样 近 样⼼ 近 B 近 样
会近Mybatis 样 样 近 样A 近B 近A

5.2.17 Mybatis Xml Mybatis

Mybatis Xml All-In-One Configuration Xml ⾏


近 <parameterMap> 样 ParameterMap 近 样
ParameterMapping <resultMap> 样 ResultMap 近 样
ResultMapping <select> 、 <insert> 、 <update> 、 <delete> 样
MappedStatement 近 sql 样 BoundSql

5.2.18 Mybatis ORM

Hibernate ORM ⾏ 近 Hibernate 只 近


近 Mybatis 只 近
sql 近 近 ORM ⾏

近 近 近
近 晚 近 Mybatis
样 ------

5.3 Kafka

5.3.1 Kafka
Kafka 常
de
ui
G
va

1. 三之 近 近 Kafka
Ja

2. Kafka 近 ·
3. 近Kafka

Kafka

1. 近
2. 微

5.3.2 ,Kafka
Kafka 近
RocketMQ RabbitMQ Kafka

1. Scala Java 近 近

2. Kafka 近最

Kafka 近 Kafka 吧
强 近 近
LinkedIn Kafka 近 近
近 起 吧⼰ 然

近 Kafka 近Kafka

5.3.3 Kafka
JMS AMQP 吧 近 JavaGuide
在话 近 近

Queue
100 近
找 此
de
ui
G
va


Ja

近 亲
近 别 近 近

- :Kafka

-三之

三之 找Pub-Sub此 Topic 近 始
近 ⽔ 三之 近

- -

Kafka -

RocketMQ Kafka Kafka


Partition

5.3.4 Producer Consumer Broker Topic Partition


Kafka Topic 近 三之 Topic

de
ui
G
va
Ja

近Kafka

1. Producer :
2. Consumer :
3. Broker : Kafka 更 Kafka Broker Kafka Cluster

近 Broker Topic Partition

Topic : Producer 近Consumer 三之 Topic( )

Partition : Partition Topic Topic Partition 近


Topic Partition Broker 近 Topic 点相 Broker

Kafka Partition

5.3.5 Kafka
de
ui Kafka 找 Partition 此 找 Replica 此
G
va
找Partition此 leader 近 follower

Ja

leader follower leader

leader leader 向 近
leader 因 follower leader,
follower leader leader 实

Kafka Partition Replica

1. Kafka Topic Partition, Partition Broker ,


找 ⽚此
2. Partition Replica , , 近

5.3.6 Zookeeper Kafka


zookeeper Kafka Kafka zookeeper
Kafka 门近
直 ⽓ https://www.jianshu.com/p/a036405f989
c

Zookeeper 近 Kafka 找 第 微 idea


Zookeeper tool 此

ZooKeeper Kafka
de
ui 近Zookeeper Kafka
G
va

1. Broker Zookeeper Broker Broker


Ja

近 Zookeeper 要近 /brokers/ids Broker


IP
2. Topic Kafka 近 Topic Broker 近
Broker Zookeeper my-topic
近 zookeeper 第 /brokers/topics/my-
topic/Partitions/0 /brokers/topics/my-topic/Partitions/1
3. Kafka Topic Partition, Partition
Broker , Topic Partition近Kafka
Partition Broker ⽔ Broker
Partition Consumer 近 Zookeeper Partition
Consumer ⽚
4. ......

5.3.7 Kafka
近 2
近 2 三

Kafka Partition( ) 近
Partition( ) Topic( ) 近 Topic Partition

全 Partition( ) 近 Kafka
Partition( ) 近 Topic( ) Partition( )

Partition( ) 找offset此 Kafka


找offset此

近 1 Topic Partition
近 Kafka
de
ui Kafka 1 近 topic, partition, key,data找 此4
G
va
Partition 近 Partition 近 key
Ja

partition近 / id key

近 Kafka 近

1. 1 Topic Partition
2. 找 此 key/Partition

近 近

5.3.8 Kafka

(Producer) send 近

近 send 近
Kafka (Producer) send
近 get() 近 近 更

Kafka 10 Spring Boot Kafka


?

SendResult<String, Object> sendResult = kafkaTemplate.send(topic, o).get();


if (sendResult.getRecordMetadata() != null) {
logger.info("⽣产者成功发送消息到" + sendResult.getProducerRecord().topic() +
"-> " + sendRe
sult.getProducerRecord().value().toString());
}

直 全 题 近 更

ListenableFuture<SendResult<String, Object>> future =


kafkaTemplate.send(topic, o);
future.addCallback(result -> logger.info("⽣产者成功发送消息到topic:{}
partition:{}的消息", result.getRecordMetadata().topic(),
result.getRecordMetadata().partition()),
ex -> logger.error("⽣产者发送消失败,原因:{}",
ex.getMessage()));

近 也 直

Producer retries 3

3
de
ui Partition( ) 找offset此 找offset)
G
va
Consumer Partition( ) Kafka 找offset此
Ja

近 offset 近
近 近 近 近
offset

offset
offset 近 近
近 offset近 近

Kafka

Kafka 找Partition此 找Replica此 找Partition此


leader 近 follower leader 近
follower leader leader
leader 向 近

leader broker follower


leader leader follower

acks = all

acks = all acks Kafka (Producer)

acks 1近 leader acks = all

replication.factor >= 3

leader follower 近 topic replication.factor >=


3 (partition) 3 ⼜⼼近

min.insync.replicas > 1

min.insync.replicas> 1 近 2
min.insync.replicas 1近 1
de
ui 近 Kafka 近 replication.factor > min.insync.replicas
G
va
常 近 近

Ja

replication.factor = min.insync.replicas + 1

unclean.leader.election.enable = false

Kafka 0.11.0.0 unclean.leader.election.enable true false

leader 近 follower leader


follower 近
unclean.leader.election.enable = false 近 leader 因 follower
leader leader 近

5.3.9 Kafka
...

Reference
Kafka https://kafka.apache.org/documentation/
— Kafka 11 常

Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

6.1

6.1.1 (Authentication) (Authorization)


部 近
近 近

(Authentication)
de
ui
G
va
Ja

(Authorization)

找 此

Authentication 每 找更 / ID 此近 每 近
近 近Authentication /

Authorization Authentication 近 近
admin近
增 全

6.1.2 Cookie ? Cookie ? Cookie ?


de
ui
G
va
Ja

Cookie ? Cookie ?

Cookie Session 近

Cookie Cookies 总
找 此 Cookie

Cookie 更

1. Cookie 近
近Cookie 近
2. Cookie session token 近 Cookie近
session token 近 HTTP 说
3. Cookie 样 更 近 HTTP说
近 近
Cookie

Cookie

https://attacomsian.com/blog/cookies-spring-boot近 Spring Boot


Cookie

1) cookie
de
ui
G @GetMapping("/change-username")
va
public String setCookie(HttpServletResponse response) {
Ja

// 创建⼀个 cookie
Cookie cookie = new Cookie("username", "Jovan");
//设置 cookie过期时间
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
//添加到 response 中
response.addCookie(cookie);

return "Username is changed!";


}

2) Spring @CookieValue cookie

@GetMapping("/")
public String readCookie(@CookieValue(value = "username", defaultValue =
"Atta") String username) {
return "Hey! My username is " + username;
}

3) Cookie

@GetMapping("/all-cookies")
public String readAllCookies(HttpServletRequest request) {

Cookie[] cookies = request.getCookies();


if (cookies != null) {
return Arrays.stream(cookies)
.map(c -> c.getName() + "=" +
c.getValue()).collect(Collectors.joining(", "));
}

return "No cookies";


}

6.1.3 Cookie Session Session


Session 近 全
近 近 HTTP 说
Session

Cookie ( ) Session Session


Cookie Cookie Cookie

Session

SessionID 近SessionID Redis 更


近 SessionID Cookie近
SessionID 近
de
ui
G
va
Ja

1.
2. 近 Session近 Session
3. SessionID近 Cookie
4. 近Cookie
5. Cookie Session ID Session
近 近 博

Session

1. Session Cookie
2. Session

Session 晚

近Spring Session 相 更

Getting Started with Spring Session


Guide to Spring Session
Sticky Sessions with Spring Session & Redis
de
ui 6.1.4 Cookie Session
G
va
Ja

Cookie SessionID 近 Cookie SessionID 近


给 Cookie近 Seesion

近 Cookie Session 近 SessionID url


https://javaguide.cn/?session_id=xxx 近
近 SessionID

6.1.5 Cookie CSRF token


CSRF Cross Site Request Forgery 场 常

年 近 近 “ 近
路 ”近 年 近 10000 常
近 年 ,
Cookie

<a src=http://www.mybank.com/Transfer?bankId=11&money=10000>科学理财,年盈利率过
万</>

近 Session 近 Cookie SessionId,


SessionId Cookie 近 Redis
Sessionid近 SessionId近 SessionId
cookie SessionId

Session Cookie SessionId 近 近


近 token 近 token 近
local storage token,
CSRF 已 近 近 前
token 近

Cookie token 相 找Cross Site Scripting此XSS

相 找Cross Site Scripting此 CSS 找Cascading Style Sheets近


CSS此 部 近 相 XSS

XSS 加
cookie

1. CSRF 常—

6.1.6 Token? JWT? Token


de
ui 成 Session ⽓ 近 Spring Session 更
G
va
Session 近

Ja

Session Cookie此

Session 常 Token 直JWT 找JSON


Web Token此 近 Session 近
Token 近见

JWT JSON

RFC 7519 JWT

JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred
between two parties. The claims in a JWT are encoded as a JSON object that is used as the
payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption
(JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message
Authentication Code (MAC) and/or encrypted. ——JSON Web Token (JWT)

JWT 3 微 :

1. Header :候 JWT Token


2. Payload找 此: ⽔
3. Signature找 此 Payload Header ⾊(secret) Header
找 HMAC SHA256此

Token 近 Payload Header ⾊(secret)


找Token此 Token 近 Token Cookie localStorage 近
前 Cookie 近 相
吧近 HTTP Header Authorization Authorization: Bearer
Token

1.
2. JWT近
de
ui 3. Header JWT
G
va
4. 也 JWT
Ja

JWT (JSON Web Tokens) Are Better Than Session Cookies


JSON Web Tokens (JWT) Sessions
JSON Web Token
Cookie近Session近Token

6.1.7 OAuth 2.0


OAuth 说 近 OAuth 2.0
OAuth 1.0 近 OAuth 2.0 近 近 OAuth 1.0
rfc6749

近 token近

OAuth 2.0 近
OAuth 2.0 说

近 OAuth 2.0 找 此 找

OAuth 2.0
10 OAuth 2.0 说
OAuth 2.0
GitHub OAuth 更

6.1.8 SSO?
SSO(Single Sign On)
更 美 近
de
ui 6.1.9 SSO OAuth2.0
G
va
Ja

OAuth 说 近 SSO
出 美

https://medium.com/@sherryhsu/session-vs-token-based-authentication-11a6c5ac45e4
https://www.varonis.com/blog/what-is-oauth/
https://tools.ietf.org/html/rfc6749------


Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

7.1 , offer
ppxyn 体近 体近
(50-200) pr
近 你 近

7.1.1
著 Java 著 近 C C++
Java 近 Java 近 Java ⽔
近 眼 近 近 近 ⽔ 近会
近 ⽔ 近
找ps 此 近
近 5

5 4 +1 HR 近

7.1.2 ( )
1. 在话找 近 近 近 此
de
ui 2. 找 近 此近 微 近
G
va
活 近 近 近
Ja

3. 近 下 经 经
ACID MVVC
4. URL ? TCP UDP ? TCP ?
5. ? 当 常 ⽔ 什 找 内此近 问
6. JVM 近 Java 所名 ⽣
7. 常

7.1.3 ( )
1. 在话找 近 近 近 此
2.
3.
4.
5. volatile 近sychronized lock
6. ReentrantLock
7. CountDownLatch 常 常
8. AQS
9. 经 近 常
10. 经 常
11. HashMap ConcurrentHashMap HashMap 常 Hashtable 常
ConcurrentHashMap 常
12. 常
13. 常

7.1.4 ( )
1. ACM 实 近 常找 ACM近
实 近 近 近
近 近 此
2. 近 近 常 常
3. 常 ⼿ 常
4. 常找 Java Netty 近 Java
近 近 Netty 近 将 直此
5. 在话 Netty 近 近Netty TCP /
, Netty Dubbo Netty 常
Netty 中向 常 近 近
6. 吧 太 常
7. 近
8. 近B
9. 微
10. 找 候 近 领近 此
11. 常

7.1.5 ( )
近 9 近 近
时 说
de
ui 1. 近 说
G
va


Ja

2. OOM
3. 常 Java ?
4.
5. NginX ⽚ ⽚

6. 常
7. 近 近

7.1.5 (HR )
1. 在话找 近 此
2. 常 常
3. 近
4. 常 常 想 近
近 常 常
5. 常 近 近 常找 近

6. 常
7. 常

1. 近 近 近
近 将近 样近
近 近
2. 才 近 近 近 近
在话 在话 近

3. 近 近 来

4. 近 近 近 直

近 Offer

7.2 ⼗度
Anonymous 体 近Guide

7.2.1 (37 )
近3.12 近 近
近 太

常 第 近

在话 直
de
ui ...
G
va

在话 HR / 近 在话 近
Ja

在话 在话 HR
近 近 始 近
近 近

常 近 在话

在话 近 近 在话

1. 找 微 此
2.
3. 近 近
4. 候 近 近 说 说

: redis 让 原道

想 找 个 近 三 近 此近
synchronized 经 近 近 经 近 ⼊近 让 近 让 近
让 近 让 近 三 经

近 近 经 近 sql 近
where ⼼ >0近 经近 近
找 只 常
近 近 近 此

: 让 常 常

让 近 只 让
让 近 让

让 近 增 让 常

想 让 对 找 A
近 让 近 B 近 B 让 近 B 近
A 让 此

30 近 ⽼

近 近 近 近
我 回

近 直


de
ui 近 近 近 只 近
G
va

近 近 微 常
Ja

近 B+ 近 B+

J.U.C 常找 JUC此

java

直 近 ConcurrentHashMap 近 ConcurrentLinkedQueue
CountDownLatch近CyclicBarrier近 乐近

: 近 近 近
想 微 常

近 ⼊近 微

近 在话

近 近 近

7.2.2 (33 )
近 常 boss
常常常 是 将 近 找 此

下 近3.14 10 56 近 boss 近打性 近


近 转转 近
常 boss 近 近 直

下 近3.16 近 近 boss 常常常


近 头

在话近 近 直

: 近

: 想

: 近 常 常

: 近

: 近 近 近 近

de
ui 想 近 LRU 让 找 近 让
G
va
常 息 近 直此近 让

Ja

ip ip 3

: ip 乐 常

⾃ 近 近

: 近

三 sql 近

: 近 三 近 常

: 近 常直常直 经

: 常

: (1)
找原道 此;(2)
https://snailclimb.gitee.io/javaguide/#/./system-design/data-communication/mess
age-queue

: 想 让 近

: 近 想 近 让 近 让 近

: 近 想 近
近 原道

: 找 此 近 近 近 NIO 常

: NIO

: NIO 近 常

NIO 刚 近 刚 近 NIO

: 常

: 近 近 近

: 乐常

打性 近 Java 近 近 与 近会
!

: 近 TCP UDP常

: TCP直
de
ui
G
va
Ja

: 近 常

: ?

近 常wtf近

7.2.3 (46 )
3.18 近 近 boss直

在话近 近 直

: 常

: 近 近 找 此

: Spring 近 Spring 常

近 近
近 近 近

: 常

: 清清 近 常常常

Fescar找 近 近 Java
此近 近Ant Financial Fescar近 近
Fescar Seata Github https://github.com/seata/seata

: 近 近 MapReduce 常MapReduce 常

: 清清 近 近
常常常

: BP 常

: 近 见

: ⽐ ⾯ 常
de
ui : 近 觉 近 近
G
va
近 近 ....
Ja

: 近 xisuo常

常常常xisuo近 近 找 此 xisuo 直xisuo


常 西载 近 经直直直

: A B 近 xisuo 常 常

: 近 近 https://blog.csdn.net/taylor
chan2016/article/details/51039362

: 常

朋 近

: 常

: 近

近 近 HR 近 HR 近3.28 HR
近 近

7.2.4 HR
: 近 在话

....HR 直

近 直 近 A 直

HR 近 近 HR

: 近 常
de
ui : 近 近 朋 近 近 样 找 与
G
va
近 明于近 5 2000
什近 这近 近 这
Ja

: 近 近 常

怎 直直直

近 近 近
近 近 近
近 想 才 近

: HR 近
近 近 近
近 近 近 转平 近
找 近 此

: HR 近 常

: 近 更 近 近

BAT offer 近 常

近BT 常

: 近 近 近 太直

HR 近 近 offer 近 近

7.3 bingo-interview
哈 体近 近 近
近 直 直 进 近 真 近 近

7.3.1
de
ui 近眼 近 近
G
va
Bigo(YY )近 3-5 Java 近
被 些 近
Ja

近 近

7.3.2
LZ

17 会 近 近 近 Java 近

西载近 近 近
IT 近 怎 3-5 近
近 LZ 近 近
近 近 其近
近 近 作眼直

7.3.3 Bigo
怎 Java

3-5

Bigo 近 近 看 近 近
候 近 做直

7.3.4 ( )
bigo 近 近 近

在话
Java 近 些 常找 近
些 此
JVM 常找 近 GC Root 近 近

常找 近 品 内 近 此
常找 近 近 始 近
近 此

Java 常找synchronized Lock此

ArrayList LinkedList 常找ArrayList 近 近 增 近LinkedList 近
增 近 此
⼰ 常找 近ArrayList 见 ⼰ 近
近 近LinkedList⼰ 近

HashMap 微找 + 近 此
HashMap 近1.7 HashMap 找见
近 get 此
ConcurrentHashMap 常 找 经此
de
ui 经 常找 size 此
G
va
RPC 近 RPC 常找 近 socket 近
近 此
Ja

近 常( + 近
)
dubbo ⽚ ?找 近 只近 近 hash此
常找 近 近
近 此
常(socket ⽔ ⽔ )
redis 经 近 常找 近 redission 经此
key 经 常找 key 此
近 近 常找什......

经 近 近 常找什......
现 近 redission 后
近 也 key 此
近 近 内 品 找
近 近 近 近

近 近 近
近Bigo hr

7.3.5
Bigo 近 hr 近 近 近
近 近 在话 近

更近 在话近
找 在话近 候 近
近 近 ..............此
近 微 近
找 近会 近 微 啊
近 近 近 nginx 近
近 此
Spring Cloud GateWay近 nginx 近 gateWay 常
找nginx ⽚近 近gateWay 近
接 Hystrix此
接 Hystrix 常找 近 此
redis近 redis 量 常找什 量 此
常找 近 Sentinel后 近
ping 近 master 此
常 量 常 get 近
更 量 近 近 redis-cluster 量 找什......redis
量 近 想 .......... 将 近 此
近 常找 .... 近
........ 此
近 常找 近 近

近 近 常找 ......
de
ui 近 近 此
G
va
近 近 10 近 晚 近 近
常找 时 近 近
Ja

近 20 近 近 此
近 近 近 近
近 " " 找 近
HashMap 近key 近value 近 1近 游
1近 map 近 value 近 近
近 O(n^2)近 近
近 近 num近
近 num 近 O(n^2) 此

近 近 怎 内 只 近
近 近 近
近 近 近 这 么近
近 近 近 近

7.3.6
近 近 什 近
地 近 在话近 近 近

常 下 找 Spring 近 Spring 下
位 此
近 近 A B近 三
近A 三 近 B 近 A 近 常
找B 活 近 A 活 此
常找什 近 近 此
近 User 近 User
近 近 近
常找 近 近

rabbitmq近 mq 常找 近
近 此
mq 近 mq 常找

常找 近 此
常 常找 将 近 mq
近 近每 mq 近 rabbitmq
ack 此
近 近 ack 找
电近mq 近 近
已 此
近 章 近 常找什.....
......... 间 ........ 近 此
de
ui 量 常 常找 近
G
va
取 近 近 此
Ja

近 近 map近 map 近 增
map 近 增 map 5 增 近 常
找 近 map key 东 近
东5 增 近 近
近ps 近 直此

...... 近 近

近 近 近
近 近 上 近 2
6 近 近 近hr 近

近 近 ⼒ 近 近

1 直 直 直 近 近
晚 近 近 外

2 近 近 近
Bigo 近 近 近 近
近 ⼒ 主 近 ⼒ 近

3 近 近
rabbitmq demo 近 “ ” 近 近

4 近

⽂近 rabbitmq 近
近 近 Bigo

5 近 增 近
近 近 近 微 近
近 想 近 微近 近
近 想 近 微 ⾛
真近 ⼒ 时

6 近 近 近去~~~~

近 Bigo 花 近 被近 能 近会
近 近 近
近 车 近 真 近会
de
ui 7.4 2019 ⼗度
G
va
Ja

rhwayfun, https://mp.weixin.qq.com/s/msYty4vjjC0PvrwasRH5Bw ,JavaGuide

近 近 直 BB

⼗度

近 9 近 近 ⼗度
近 找 没 我
因近 此近 近 才 近 近
近 ⼗度

近 近
近 近 让 近 近
我 近 近 近

近 欢 些 近 直

2018 flag近 还 条流 近
近 近
常 近

近 常 近 近 mysql近
门 近 常 近
近 好常 近 近
近 近
近 近

近 近 ⼗度

7.4.1
近 2016 ⼗度 近 近2.5 近
会 近 ⼗度 近 近

“ 近 ⼗度 近 ”近 多多 “ 近 ”近 “ 常”近
“受 ”近 “ 近 近 ”近

近 ⼗度 近 近 ⼗度
de
ui 近 找 性近
G
va
近 此近 ⼗度 近 近
近 近
Ja

5 offer

⼼ 什 近 近
门 近 N 近 近 近 微
MySQL JDK 近 找 此
“ ”

近 近 近 喜Java 近
Java 近 Java 近
⼯近 近

近 ⼗度近 近 ⼗度 了 近
⼗度 "

关关 GitHub v2

7.4.2

近 近 N 近 10
TopK 近

近 更近

de
ui
G
va

在话
Ja

太 常找Dubbo accesslog bug 此


近 在话 近 近
Dubbo错 好近 常找 表 近
电 此
近 找 近 想什 近

常找ACID此
常找 近 近

经 经 常找 经 近 经近
经近 死 始 经 近 也 此
经 Java MySQL 常找Java 经 CAS 近 经 synchronize
mysql 经 MVCC近 近 经 select... for update 经此
HashMap 常找 近 见
经近 近 见 JDK1.8 近
HashMap 近 HashMap近
ConcurrentHashMap此 HashMap 常(Collections synchronize
Map近 ConcurrentHashMap) 常找 put get
synchronize 近 经 CAS 此
jdk1.8 ConcurrentHashMap 常找 近
经 近synchronize Lock经此 常找 近 只
近 O(N) O(logN)此
redis 常 常
GC 常找 近 此

在话
后 近 近 常 常找MySQL此
址近 InnnoDB常( 物 MVCC)
三 近 常( )
只 候
常( 近 range近
)
常( 近 近见 )
常( )
呢 常(UUID Snowflake )
Snowflake ID ⽔ 常( 近 近 ⽔ )
⽔ ID常( TDDL ID近 )
Mysql 微 ( B+ 近B+ 近
)
( 近
ID近 只 只) 只 常( 近 只
近 近 )
⼊ 常

de
ui 常
G
va
Ja

在话
本 常

常( 后 )
近 常( 近 近
后 )
Spring
GC young gc full gc 著
( )
CMS GC 常( 近很 所名近 现 )
很 所名常( VM 意候 young gc近
gc 品 近 品 young gc)
young gc 常(STW )
G1 常( )
常(young gc full gc近 Remember Set)
Remember Set 常

HRBP 近 近 ⼗度
近 match近
HR 近 于近 于HR 近 cut

⼗度 常

常找 常此
常 内常找 HR 有 近 此

SRE

HR 我 因 近

⼗度 近 Java ⼗度 们 近
我 因 近 近 1 近 近
P7 近 微 近

7.4.3
de
ui
G
va
Ja

⼗度 近 ⾼近 关关 HR近
近 HR 近
offer 近 nice

⼗度 常 常( 近 )
Java HashMap TreeMap 常(TreeMap 近 近HashMap 近 + )
TreeMap 只 常(O(logN))
HashMap 常( 近 经) 常( jdk1.8 synchronize + CAS近见
CAS也 近 ) 常(CAS找Compare And Swap此
近 死 近 ⽹ 近 看 ⼰ CPU 近
ABA ) 常( 近 ⽹ 近ABA AtomicStampedReference
近 ) 看 常(synchronize 经)
CAS synchronize 常 synchronize 常(CAS 经近 死 近
始synchronize 死 近JVM 近 CAS
CPU 近 请 近synchronize ⽹ 死 近 看
请 近 死 近 ⼰ CPU )
常(ConcurrentHashMap)
ConcurrentHashMap 常( 经)
get 经 近 常( 近volatile )
volatile 常( )
常( 近 事因近happen-before近
)
CPU 近 常( 近 成 )
近 常
近 常
近 近 近 MN少 近 1 本 MN 近
找 OS 天 近 此
( 近 近 近
)

de
ui 在话
G
va
offer 常( ⼗度 offer)
微 常( 近
Ja

)
近 近 常找 近 此

⽔ 常 (RpcContext attachment 近 Span 微 :parentSpanId +
curSpanId)
SpanId 常(UUID近 )
RpcContext ⽔ 常( )
Dubbo 常( url Invoker 要
filter Invoker ⽚ 找受 10 此近
)
Spring 更 常( 更 要 )
常( 近 后
)
常 常
本 常

HR 近 offer 近
近 offer ⼒

近会 少近
近 HR 近

7.4.4
de
ui 近 HR 近 OK
G
va
近 近
们近 好 近
Ja

找 此 被

在话
近本
近本
乐 常
IO 常

Redis 近 微?( zset) zset ?( )
只 近 只 ?( 近
近 近 O(logN))
近 ?( N问 ⽚ 近O(logN))
微 O(logN)近zset ( 近错好 近
⽹ ⽚近 )
近 Dubbo ?( 要 )错 好 常找
dubbo accesslog 此
CAS 常找 CAS 此 常找 synchronize 近
经近 经此
近 A近2*n 近n n 近 近

找 0 近 近 近

常 常找 近 此
常找看 近 近 变
近 此
近 O(N) 找 近 “ 近 0
1 近 近 ”此
近 常

近 在话

常找Guava ratelimiter近 ⾝ 此
常找 ⽇ 此
近 常找 近 死 此
常找 近 此
常找 RateLimiter 此
⽔ 常找ThreadLocal + spanId近 spanId
spanId此
Dubbo RpcContext ⽔ 常找ThreadLocal此 ThreadLocal ⽔ 乐常
找 ThreadLocal get 近 乐 ThreadLocal
ThreadLocal 乐 ThreadLocal finally
remove近 些 此
些 常找 ThreadLocal 微近 看
de
ui ThreadLocal ThreadLocal 看 近
G
va
ThreadLocal 近 ThreadLocal value
近 近 近
Ja

ThreadLocal gc
value 近 近看 些 此
乐 remove value常找 近 乐
近 近 threadLocals ThreadLocal 此
些 乐常找 此
近 常找 些 亲 此近

SpringMVC 常找 近
近 经 近 近 此
ThreadLocal 近 SpringMVC 经 常找 此
mysql 近 微找 B+ 此
B+ 常找 只 近O(logN)近 近 问 近 近

常找 此
Java ⽣ 常

近 乐
常找 近 找 此此

近 近 近 时

近 近

近 近 领近

近 ⼗度
offer近 次 近 领 近
HR

在话近 近
在话 近 近 近
近 近 近

Effective Java TCP/IP 以 微


Java Spring Zookeeper MySQL 微
再 微 Java

近 近 近
#

近博
de
ui :https://pan.baidu.com/s/1o2l1tuRakBEP0InKEh4Hzw :300d
G
va
Ja

7.5 2020

Boyn 体直 offer!们直

7.5.1
211 , , , , 后
, . , ,HR
,

近 office

7.5.2
, ,

在话, ,

Web ( SpringBoot,Redis,Mysql ,
Java , Spring,Java , )
Kafka , ,Kafka 微 ( 每 ,
Kafka , 我 )
Mysql ,B+ ( )

, , , 在话 ,
微, 微 , hold

1. ⽚ 问 ( , 所名 , ,
, 样 ,
⽔ 题 , 题 , 内 ,
道 , )
2. , target , . ,
, , ,

, , 10 ,

7.5.3
在话, ,

Redis , zset ( , ), , ,
Redis 在话 ,
de
ui 微 , , java.util.HashMap
G
va
( , ) , 喜
成 带
Ja

,成 ,

, , ,
, , ,

玩 男 ,

完 ,

. S_0 = {1} S_1={1,2,1} S_2 = {1,2,1,3,1,2,1} S_n =


{S_n-1 , n + 1, S_n-1}. (1 3 7 15... 2 n -1,
). n k, S_n(k) , S_2(2) = 1,
,
https://leetcode-cn.com/problems/next-permutation ,
, 10000<n<100000, , 1-9

7.5.4 hr
, , ,

! Redis,Mysql,JVM ,( ,
, , , ). ,
Kafka , . , 美

将, 成 , , ,
, .

, , , , 才 ,
早 , ,

⽇, 完 , ,LeetCode+
Offer , , , ,
样 . Bug free , ,
.

Offer,爱 !

/
Guide

: Github 70k Star JavaGuide找 此


“1” Java + pdf

找 此
de
ui 1. 常
G
va
2. 常
Ja

3. 常
4. id 常
5. id 常
6. RPC 常
7. RPC 常
8. RPC 常
9. Dubbo 常
10. Dubbo ⽚ 常
11. 吧 直

近 元近
近 ⼒ 直 着

9.1 法
体 近 近

de
ui 1. 微 始
G
va
2. 原道 始
Ja

3. Redis 让 始
4.
1. URL ? 2.TCP UDP ? 3.TCP ?
Java 1. , ? 2. 向 么向 常

近 常 常 ⼉ 近
“ 近 近 近 直”

近 在话 近

os:" 近 在话 近 JavaGuide 近
hr

近 近会 直 在话近

近 直 Java
近 .近 近
近 近
著 ⼼近
近 乐 样
近 , Github 2k Star 常

常 微 常

os: " 直 近 微
直"
de
ui
G
va
Ja

微 找 微近
直此

在话 直

微 宝


近 近

量 见 近
常 Dubbo Dubbo Java
RPC Dubbo RPC
Dubbo 要 ZooKeeper近 Dubbo ZooKeeper Zookeeper
近 RPC
Dubbo 近
近 近
近 全

近 MySQL近 MyCat 近
redis 让
近 近 让 近
让 让 近

Elasticsearch Elasticsearch
全 近 Elasticsearch 近 见
de
ui 近 常
G
va
Ja

1. 原道
2. 找 / 见 此

直 近

os:" 2019 近 近
直"

近 近 让
近 让 近
让 近还 章 近 近
近 近 近
想 近

is too 已近 直 找ps:
近 直此

样 ——

没 近 荐没 三
de
ui
G
va
Ja


近 见

找 此 近 找 此 近
近 见

常 想 常

os: " 笑直 获 息 常 "

1. 近 常 MQ 近
想 MQ 近 近 MQ 想 直
2. MQ 近
⽔ 直
3. 近
近 常
!
de
ui 常 常 常
G
va

os: " 直 常 常
Ja

Redis 近会 Redis 近 近 "

Redis 让 让 近

让 常 直 让

让 直

让 key 让 近 近
让 更 让 key 近

1. 让
2. 近 让
3.

MySQL 150 近 show variables like


'%max_connections%'; 近cpu近 近 近
近 直 近 3000

直 “ 3000 4000 常”
直 直

与 直 与 直 直

近 活
只 id 0

让 近

1 key : 让 key redis


近 SET key value EX 10086 key 种
近 近 微 key近 redis 让 key
近 近
key 1

近 近 key 表名:列名:主键名:主键值

2 像 微近
key 近 像
“ ”

直 像 直

os “ 近 “
找 近5 直此?” 直 像

de
ui 像
G
va
“ (bit) ”
Ja

List Map Set

1. 像 题 近 找 题

2. 近 1

1. 始
2. 1近 1近 像
近 1近 像

近 同 像 近 同 题
近 1找 近 0此
同 近 1近 找

同 像 近 同
近 1近 1近 像
近 1近 像


de
ui 像 直 让
G
va
Ja

像 Redis 像
像 近 近
像 近 近
( 近 )

像 像 常 直 近

现 直
os 近 直

直 直

URL ?

os “ 近 直 近 近
直 近 说 常”
de
ui 找 HTTP 此
G
va
Ja

1. DNS 样
2. TCP
3. HTTP
4. HTTP
5. 样却⽤
6.

https://segmentfault.com/a/1190000006879700

TCP UDP ?
de
ui UDP 近 UDP 近
G
va
UDP 近 UDP 找
此近
Ja

QQ QQ

TCP 近 TCP
TCP 近 找TCP TCP
⽔ 近 近 ⽔ 近
近 近 此近 近
近 近 说 近 ⼰
TCP

TCP ?

1. 从 TCP
2. TCP 近 近
3. TCP 也 也 近 也
也 近TCP

4. TCP
5. TCP ⽇ 让 近TCP
让 他 近 近
TCP 说 说 找TCP

6. 近
7. ARQ 近 近

8. TCP 近 近

Java 直

找 os:“ 直”此

, ?

os “
I/O ”

Java 品 近 ⼏ 近 近
近 I/O 近
开 近 晚

向 么向 常

1. ⽔近 ⽔ 向 近 么向
2. ⽔近 近 近 近

de
ui
G
va
Ja

直 直 直

直 直

常 近 近 直

2020-03-08

You might also like