1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Merge pull request #1 from Snailclimb/master

更新
This commit is contained in:
haiqiang 2019-03-10 08:22:36 +08:00 committed by GitHub
commit f2d155e15d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 574 additions and 191 deletions

View File

@ -0,0 +1,96 @@
> 作者ppxyn。本文来自读者投稿同时也欢迎各位投稿**对于不错的原创文章我根据你的选择给予现金(50-200)、付费专栏或者任选书籍进行奖励!所以,快提 pr 或者邮件的方式(邮件地址在主页)给我投稿吧!** 当然,我觉得奖励是次要的,最重要的是你可以从自己整理知识点的过程中学习到很多知识。
**目录**
<!-- MarkdownTOC -->
- [前言](#前言)
- [一面\(技术面\)](#一面技术面)
- [二面\(技术面\)](#二面技术面)
- [三面\(技术面\)](#三面技术面)
- [四面\(半个技术面\)](#四面半个技术面)
- [五面\(HR面\)](#五面hr面)
- [总结](#总结)
<!-- /MarkdownTOC -->
### 前言
在接触 Java 之前我接触的比较多的是硬件方面用的比较多的语言就是C和C++。到了大三我才正式选择 Java 方向到目前为止使用Java到现在大概有一年多的时间所以Java算不上很好。刚开始投递的时候实习刚辞职也没准备笔试面试很多东西都忘记了。所以刚开始我并没有直接就投递阿里毕竟心里还是有一点点小害怕的。于是我就先投递了几个不算大的公司来练手就是想着刷刷经验而已或者说是练练手ps还是挺对不起那些公司的。面了一个月其他公司后我找了我实验室的学长内推我后面就有了这5次面试。
下面简单的说一下我的这5次面试4次技术面+1次HR面希望我的经历能对你有所帮助。
### 一面(技术面)
1. 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
2. 聊聊项目(就是一个很普通的分布式商城,自己做了一些改进),让我画了整个项目的架构图,然后针对项目抛了一系列的提高性能的问题,还问了我做项目的过程中遇到了那些问题,如何解决的,差不读就这些吧。
3. 可能是我前面说了我会数据库优化然后面试官就开始问索引、事务隔离级别、悲观锁和乐观锁、索引、ACID、MVVC这些问题。
4. 浏览器输入URL发生了什么? TCP和UDP区别? TCP如何保证传输可靠性?
5. 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树
6. 后面又问了很多JVM方面的问题比如Java内存模型、常见的垃圾回收器、双亲委派模型这些
7. 你有什么问题要问吗?
### 二面(技术面)
1. 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
2. 操作系统的内存管理机制
3. 进程和线程的区别
4. 说下你对线程安全的理解
5. volatile 有什么作用 sychronized和lock有什么区别
6. ReentrantLock实现原理
7. 用过CountDownLatch么什么场景下用的
8. AQS底层原理。
9. 造成死锁的原因有哪些,如何预防?
10. 加锁会带来哪些性能问题。如何解决?
11. HashMap、ConcurrentHashMap源码。HashMap是线程安全的吗Hashtable呢ConcurrentHashMap有了解吗
12. 是否可以实习?
13. 你有什么问题要问吗?
### 三面(技术面)
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. 你有什么问题要问吗?
### 四面(半个技术面)
三面面完当天晚上9点接到面试电话感觉像是部门或者项目主管。 这个和之前的面试不大相同,感觉面试官主要考察的是你解决问题的能力、学习能力和团队协作能力。
1. 让我讲一个自己觉得最不错的项目。然后就巴拉巴拉的聊,我记得主要是问了项目是如何进行协作的、遇到问题是如何解决的、与他人发生冲突是如何解决的这些。感觉聊了挺久。
2. 出现 OOM 后你会怎么排查问题?
3. 自己平时是如何学习新技术的?除了 Java 还回去了解其他技术吗?
4. 上一段实习经历的收获。
5. NginX如何做负载均衡、常见的负载均衡算法有哪些、一致性哈希的一致性是什么意思、一致性哈希是如何做哈希的
6. 你有什么问题问我吗?
7. 还有一些其他的,想不起来了,感觉这一面不是偏向技术来问。
## 五面(HR面)
1. 自我介绍(主要讲能突出自己的经历,会的编程技术一语带过)。
2. 你觉得你有什么优点和缺点?如何克服这些缺点?
3. 说一件大学里你自己比较有成就感的一件事情,为此付出了那些努力。
4. 你前面跟其他面试官讲过一些你做的项目吧?可以给我讲讲吗?你要考虑到我不是一个做技术的人,怎么让我也听得懂。项目中有什么问题,你怎么解决的?你最大的收获是什么?
5. 你目前有面试过其他公司吗?如果让你选,这些公司和阿里,你选哪个?(送分题,回答不好可能送命)
6. 你期望的工作地点是哪里?
7. 你有什么问题吗?
### 总结
1. 可以看出面试官问我的很多问题都是比较常见的问题,所以记得一定要提前准备,还要深入准备,不要回答的太皮毛。很多时候一个问题可能会牵扯出很多问题,遇到不会的问题不要慌,冷静分析,如果你真的回答不上来,也不要担心自己是不是就要挂了,很可能这个问题本身就比较难。
2. 表达能力和沟通能力太重要了,一定要提前练一下,我自身就是一个不太会说话的人,所以,面试前我对于自我介绍、项目介绍和一些常见问题都在脑子里练了好久,确保面试的时候能够很清晰和简洁的说出来。
3. 等待面试的过程和面试的过程真的好熬人,那段时间我压力也比较大,好在我私下找到学长聊了很多,心情也好了很多。
4. 面试之后及时总结,面的好的话,不要得意,尽快准备下一场面试吧!
我觉得我还算是比较幸运的最后也祝大家都能获得心仪的Offer。

View File

@ -61,7 +61,7 @@ Servlet接口定义了5个方法其中**前三个方法与Servlet生命周期
- java.lang.String getServletInfo() - java.lang.String getServletInfo()
- ServletConfig getServletConfig() - ServletConfig getServletConfig()
**生命周期:** **Web容器加载Servlet并将其实例化后Servlet生命周期开始**,容器运行其**init()方法**进行Servlet的初始化请求到达时调用Servlet的**service()方法**service()方法会根据需要调用与请求对应的**doGet或doPost**等方法当服务器关闭或项目被卸载时服务器会将Servlet实例销毁此时会调用Servlet的**destroy()方法**。**init方法和destory方法只会执行一次service方法客户端每次请求Servlet都会执行**。Servlet中有时会用到一些需要初始化与销毁的资源因此可以把初始化资源的代码放入init方法中销毁资源的代码放入destroy方法中这样就不需要每次处理客户端的请求都要初始化与销毁资源。 **生命周期:** **Web容器加载Servlet并将其实例化后Servlet生命周期开始**,容器运行其**init()方法**进行Servlet的初始化请求到达时调用Servlet的**service()方法**service()方法会根据需要调用与请求对应的**doGet或doPost**等方法当服务器关闭或项目被卸载时服务器会将Servlet实例销毁此时会调用Servlet的**destroy()方法**。**init方法和destroy方法只会执行一次service方法客户端每次请求Servlet都会执行**。Servlet中有时会用到一些需要初始化与销毁的资源因此可以把初始化资源的代码放入init方法中销毁资源的代码放入destroy方法中这样就不需要每次处理客户端的请求都要初始化与销毁资源。
参考《javaweb整合开发王者归来》P81 参考《javaweb整合开发王者归来》P81

View File

@ -370,16 +370,26 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
## 30. 线程有哪些基本状态? ## 30. 线程有哪些基本状态?
参考《Java 并发编程艺术》4.1.4节。 Java 线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态图源《Java 并发编程艺术》4.1.4节)。
Java 线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态。
![Java线程的状态](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-29/Java%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81.png) ![Java线程的状态](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-29/Java%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81.png)
线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示: 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示图源《Java 并发编程艺术》4.1.4节)
![Java线程状态变迁](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-29/Java%20%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81%E5%8F%98%E8%BF%81.png) ![Java线程状态变迁](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-29/Java%20%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81%E5%8F%98%E8%BF%81.png)
由上图可以看出:
线程创建之后它将处于 **NEW新建** 状态,调用 `start()` 方法后开始运行,线程这时候处于 **READY可运行** 状态。可运行状态的线程获得了 cpu 时间片timeslice后就处于 **RUNNING运行** 状态。
> 操作系统隐藏 Java虚拟机JVM中的 RUNNABLE 和 RUNNING 状态,它只能看到 RUNNABLE 状态(图源:[HowToDoInJava](https://howtodoinjava.com/)[Java Thread Life Cycle and Thread States](https://howtodoinjava.com/java/multi-threading/java-thread-life-cycle-and-thread-states/)),所以 Java 系统一般将这两个状态统称为 **RUNNABLE运行中** 状态 。
![RUNNABLE-VS-RUNNING](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/RUNNABLE-VS-RUNNING.png)
当线程执行 `wait()`方法之后,线程进入 **WAITING等待**状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 **TIME_WAITING(超时等待)** 状态相当于在等待状态的基础上增加了超时限制,比如通过 `sleeplong millis`方法或 `waitlong millis`方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 **BLOCKED阻塞** 状态。线程在执行 Runnable 的` run() `方法之后将会进入到 **TERMINATED终止** 状态。
## 31 关于 final 关键字的一些总结 ## 31 关于 final 关键字的一些总结
final关键字主要用在三个地方变量、方法、类。 final关键字主要用在三个地方变量、方法、类。
@ -412,17 +422,29 @@ final关键字主要用在三个地方变量、方法、类。
### 异常处理总结 ### 异常处理总结
- try 块用于捕获异常。其后可接零个或多个catch块如果没有catch块则必须跟一个finally块。 - **try 块:**用于捕获异常。其后可接零个或多个catch块如果没有catch块则必须跟一个finally块。
- catch 块用于处理try捕获到的异常。 - **catch 块:**用于处理try捕获到的异常。
- finally 块无论是否捕获或处理异常finally块里的语句都会被执行。当在try块或catch块中遇到return语句时finally语句块将在方法返回之前被执行。 - **finally 块:**无论是否捕获或处理异常finally块里的语句都会被执行。当在try块或catch块中遇到return语句时finally语句块将在方法返回之前被执行。
**在以下4种特殊情况下finally块不会被执行** **在以下4种特殊情况下finally块不会被执行**
1. 在finally语句块中发生了异常。 1. 在finally语句块第一行发生了异常。 因为在其他行finally块还是会得到执行
2. 在前面的代码中用了System.exit()退出程序。 2. 在前面的代码中用了System.exit(int)退出程序。 exit是带参函数 若该语句在异常语句之后finally会执行
3. 程序所在的线程死亡。 3. 程序所在的线程死亡。
4. 关闭CPU。 4. 关闭CPU。
下面这部分内容来自issue:<https://github.com/Snailclimb/JavaGuide/issues/190>
**关于返回值:**
如果try语句里有return返回的是try语句块中变量值。
详细执行过程如下:
1. 如果有返回值,就把返回值保存到局部变量中;
2. 执行jsr指令跳到finally语句里执行
3. 执行完finally语句后返回之前保存在局部变量表里的值。
4. 如果tryfinally语句里均有return忽略try的return而使用finally的return.
## 33 Java序列化中如果有些字段不想进行序列化 怎么办 ## 33 Java序列化中如果有些字段不想进行序列化 怎么办
对于不想进行序列化的变量使用transient关键字修饰。 对于不想进行序列化的变量使用transient关键字修饰。

View File

@ -37,7 +37,7 @@ AQS是一个用来构建锁和同步器的框架使用AQS能简单且高效
### 2 AQS 原理 ### 2 AQS 原理
> 在面试中被问到并发知识的时候大多都会被问到“请你说一下自己对于AQS原理的理解”。下面给大家一个示例供大家参加面试不是背题大家一定要假如自己的思想,即使加入不了自己的思想也要保证自己能够通俗的讲出来而不是背出来。 > 在面试中被问到并发知识的时候大多都会被问到“请你说一下自己对于AQS原理的理解”。下面给大家一个示例供大家参加面试不是背题大家一定要加入自己的思想,即使加入不了自己的思想也要保证自己能够通俗的讲出来而不是背出来。
下面大部分内容其实在AQS类注释上已经给出了不过是英语看着比较吃力一点感兴趣的话可以看看源码。 下面大部分内容其实在AQS类注释上已经给出了不过是英语看着比较吃力一点感兴趣的话可以看看源码。
@ -336,7 +336,8 @@ public class CyclicBarrierExample2 {
public static void test(int threadnum) throws InterruptedException, BrokenBarrierException { public static void test(int threadnum) throws InterruptedException, BrokenBarrierException {
System.out.println("threadnum:" + threadnum + "is ready"); System.out.println("threadnum:" + threadnum + "is ready");
try { try {
cyclicBarrier.await(2000, TimeUnit.MILLISECONDS); /**等待60秒保证子线程完全执行结束*/
cyclicBarrier.await(60, TimeUnit.SECONDS);
} catch (Exception e) { } catch (Exception e) {
System.out.println("-----CyclicBarrierException------"); System.out.println("-----CyclicBarrierException------");
} }

View File

@ -20,7 +20,7 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
使用原子的方式更新基本类型 使用原子的方式更新基本类型
- AtomicInteger原子类 - AtomicInteger原子类
- AtomicLong长整型原子类 - AtomicLong长整型原子类
- AtomicBoolean :布尔型原子类 - AtomicBoolean :布尔型原子类
@ -29,8 +29,8 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
使用原子的方式更新数组里的某个元素 使用原子的方式更新数组里的某个元素
- AtomicIntegerArray数组原子类 - AtomicIntegerArray数组原子类
- AtomicLongArray长整数组原子类 - AtomicLongArray长整数组原子类
- AtomicReferenceArray :引用类型数组原子类 - AtomicReferenceArray :引用类型数组原子类
**引用类型** **引用类型**
@ -41,8 +41,8 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
**对象的属性修改类型** **对象的属性修改类型**
- AtomicIntegerFieldUpdater:原子更新整字段的更新器 - AtomicIntegerFieldUpdater:原子更新整字段的更新器
- AtomicLongFieldUpdater原子更新长整字段的更新器 - AtomicLongFieldUpdater原子更新长整字段的更新器
- AtomicStampedReference :原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。 - AtomicStampedReference :原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。
下面我们来详细介绍一下这些原子类。 下面我们来详细介绍一下这些原子类。
@ -53,7 +53,7 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
使用原子的方式更新基本类型 使用原子的方式更新基本类型
- AtomicInteger原子类 - AtomicInteger原子类
- AtomicLong长整型原子类 - AtomicLong长整型原子类
- AtomicBoolean :布尔型原子类 - AtomicBoolean :布尔型原子类

View File

@ -25,9 +25,9 @@
JDK提供的这些容器大部分在 `java.util.concurrent` 包中。 JDK提供的这些容器大部分在 `java.util.concurrent` 包中。
- **ConcurrentHashMap** 线程安全的HashMap - **ConcurrentHashMap:** 线程安全的HashMap
- **CopyOnWriteArrayList:** 线程安全的List在读多写少的场合性能非常好远远好于Vector. - **CopyOnWriteArrayList:** 线程安全的List在读多写少的场合性能非常好远远好于Vector.
- **ConcurrentLinkedQueue**高效的并发队列,使用链表实现。可以看做一个线程安全的 LinkedList这是一个非阻塞队列。 - **ConcurrentLinkedQueue:** 高效的并发队列,使用链表实现。可以看做一个线程安全的 LinkedList这是一个非阻塞队列。
- **BlockingQueue:** 这是一个接口JDK内部通过链表、数组等方式实现了这个接口。表示阻塞队列非常适合用于作为数据共享的通道。 - **BlockingQueue:** 这是一个接口JDK内部通过链表、数组等方式实现了这个接口。表示阻塞队列非常适合用于作为数据共享的通道。
- **ConcurrentSkipListMap:** 跳表的实现。这是一个Map使用跳表的数据结构进行快速查找。 - **ConcurrentSkipListMap:** 跳表的实现。这是一个Map使用跳表的数据结构进行快速查找。

View File

@ -168,4 +168,4 @@ synchronized 是依赖于 JVM 实现的,前面我们也讲到了 虚拟机团
**④ 性能已不是选择标准** **④ 性能已不是选择标准**
在JDK1.6之前synchronized 的性能是比 ReenTrantLock 差很多。具体表示为synchronized 关键字吞吐量线程数的增加下降得非常严重。而ReenTrantLock 基本保持一个比较稳定的水平。我觉得这也侧面反映了, synchronized 关键字还有非常大的优化余地。后续的技术发展也证明了这一点,我们上面也讲了在 JDK1.6 之后 JVM 团队对 synchronized 关键字做了很多优化。**JDK1.6 之后synchronized 和 ReenTrantLock 的性能基本是持平了。所以网上那些说因为性能才选择 ReenTrantLock 的文章都是错的JDK1.6之后性能已经不是选择synchronized和ReenTrantLock的影响因素了而且虚拟机在未来的性能改进中会更偏向于原生的synchronized所以还是提倡在synchronized能满足你的需求的情况下优先考虑使用synchronized关键字来进行同步优化后的synchronized和ReenTrantLock一样在很多地方都是用到了CAS操作**。 在JDK1.6之前synchronized 的性能是比 ReenTrantLock 差很多。具体表示为synchronized 关键字吞吐量线程数的增加下降得非常严重。而ReenTrantLock 基本保持一个比较稳定的水平。我觉得这也侧面反映了, synchronized 关键字还有非常大的优化余地。后续的技术发展也证明了这一点,我们上面也讲了在 JDK1.6 之后 JVM 团队对 synchronized 关键字做了很多优化。**JDK1.6 之后synchronized 和 ReenTrantLock 的性能基本是持平了。所以网上那些说因为性能才选择 ReenTrantLock 的文章都是错的JDK1.6之后性能已经不是选择synchronized和ReenTrantLock的影响因素了而且虚拟机在未来的性能改进中会更偏向于原生的synchronized所以还是提倡在synchronized能满足你的需求的情况下优先考虑使用synchronized关键字来进行同步优化后的synchronized和ReenTrantLock一样在很多地方都是用到了CAS操作**。

View File

@ -21,7 +21,8 @@
## 2 运行时数据区域 ## 2 运行时数据区域
Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。
![运行时数据区域](https://user-gold-cdn.xitu.io/2018/4/27/16306a34cd8a4354?w=513&h=404&f=png&s=132068) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/JVM运行时数据区域.png)
这些组成部分一些是线程私有的,其他的则是线程共享的。 这些组成部分一些是线程私有的,其他的则是线程共享的。
**线程私有的:** **线程私有的:**
@ -235,7 +236,7 @@ JDK1.4中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**通
**验证:** **验证:**
```java ```java
String s1 = new String("abc");// 堆内存的地 String s1 = new String("abc");// 堆内存的地
String s2 = "abc"; String s2 = "abc";
System.out.println(s1 == s2);// 输出false,因为一个是堆内存,一个是常量池的内存,故两者是不同的。 System.out.println(s1 == s2);// 输出false,因为一个是堆内存,一个是常量池的内存,故两者是不同的。
System.out.println(s1.equals(s2));// 输出true System.out.println(s1.equals(s2));// 输出true

View File

@ -1,36 +1,28 @@
# Java 设计模式
下面是自己学习设计模式的时候做的总结,有些是自己的原创文章,有些是网上写的比较好的文章,保存下来细细消化吧! 下面是自己学习设计模式的时候做的总结,有些是自己的原创文章,有些是网上写的比较好的文章,保存下来细细消化吧!
## 创建型模式: **系列文章推荐:**<https://design-patterns.readthedocs.io/zh_CN/latest/index.html>
> ### 创建型模式概述: ## 创建型模式
### 创建型模式概述
- 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。 - 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
- 创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。 - 创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
![创建型模式](https://user-gold-cdn.xitu.io/2018/6/16/1640641afcb7559b?w=491&h=241&f=png&s=51443) ![创建型模式](https://user-gold-cdn.xitu.io/2018/6/16/1640641afcb7559b?w=491&h=241&f=png&s=51443)
> ### 创建型模式系列文章推荐: ### 常见创建型模式详解
- **单例模式:** - **单例模式:** [深入理解单例模式——只有一个实例](https://blog.csdn.net/qq_34337272/article/details/80455972)
- **工厂模式:** [深入理解工厂模式——由对象工厂生成对象](https://blog.csdn.net/qq_34337272/article/details/80472071)
- **建造者模式:** [深入理解建造者模式 ——组装复杂的实例](http://blog.csdn.net/qq_34337272/article/details/80540059)
- **原型模式:** [深入理解原型模式 ——通过复制生成实例](https://blog.csdn.net/qq_34337272/article/details/80706444)
[深入理解单例模式——只有一个实例](https://blog.csdn.net/qq_34337272/article/details/80455972) ## 结构型模式
- **工厂模式:** ### 结构型模式概述
[深入理解工厂模式——由对象工厂生成对象](https://blog.csdn.net/qq_34337272/article/details/80472071)
- **建造者模式:**
[深入理解建造者模式 ——组装复杂的实例](http://blog.csdn.net/qq_34337272/article/details/80540059)
- **原型模式:**
[深入理解原型模式 ——通过复制生成实例](https://blog.csdn.net/qq_34337272/article/details/80706444)
## 结构型模式:
> ### 结构型模式概述:
- **结构型模式(Structural Pattern)** 描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构 - **结构型模式(Structural Pattern)** 描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构
![结构型模式(Structural Pattern)](https://user-gold-cdn.xitu.io/2018/6/16/164064d6b3c205e3?w=719&h=233&f=png&s=270293) ![结构型模式(Structural Pattern)](https://user-gold-cdn.xitu.io/2018/6/16/164064d6b3c205e3?w=719&h=233&f=png&s=270293)
@ -40,48 +32,25 @@
![结构型模式](https://user-gold-cdn.xitu.io/2018/6/16/1640655459d766d2?w=378&h=266&f=png&s=59652) ![结构型模式](https://user-gold-cdn.xitu.io/2018/6/16/1640655459d766d2?w=378&h=266&f=png&s=59652)
> ### 结构型模式系列文章推荐: ### 常见结构型模式详解
- **适配器模式:** - **适配器模式:**
- [深入理解适配器模式——加个“适配器”以便于复用](https://segmentfault.com/a/1190000011856448)
[深入理解适配器模式——加个“适配器”以便于复用](https://segmentfault.com/a/1190000011856448) - [适配器模式原理及实例介绍-IBM](https://www.ibm.com/developerworks/cn/java/j-lo-adapter-pattern/index.html)
- **桥接模式:** [设计模式笔记16桥接模式(Bridge Pattern)](https://blog.csdn.net/yangzl2008/article/details/7670996)
[适配器模式原理及实例介绍-IBM](https://www.ibm.com/developerworks/cn/java/j-lo-adapter-pattern/index.html) - **组合模式:** [大话设计模式—组合模式](https://blog.csdn.net/lmb55/article/details/51039781)
- **装饰模式:** [java模式—装饰者模式](https://www.cnblogs.com/chenxing818/p/4705919.html)、[Java设计模式-装饰者模式](https://blog.csdn.net/cauchyweierstrass/article/details/48240147)
- **桥接模式:** - **外观模式:** [java设计模式之外观模式门面模式](https://www.cnblogs.com/lthIU/p/5860607.html)
- **享元模式:** [享元模式](http://www.jasongj.com/design_pattern/flyweight/)
[设计模式笔记16桥接模式(Bridge Pattern)](https://blog.csdn.net/yangzl2008/article/details/7670996)
- **组合模式:**
[大话设计模式—组合模式](https://blog.csdn.net/lmb55/article/details/51039781)
- **装饰模式:**
[java模式—装饰者模式](https://www.cnblogs.com/chenxing818/p/4705919.html)
[Java设计模式-装饰者模式](https://blog.csdn.net/cauchyweierstrass/article/details/48240147)
- **外观模式:**
[java设计模式之外观模式门面模式](https://www.cnblogs.com/lthIU/p/5860607.html)
- **享元模式:**
[享元模式](http://www.jasongj.com/design_pattern/flyweight/)
- **代理模式:** - **代理模式:**
- [代理模式原理及实例讲解 IBM出品很不错](https://www.ibm.com/developerworks/cn/java/j-lo-proxy-pattern/index.html)
[代理模式原理及实例讲解 IBM出品很不错](https://www.ibm.com/developerworks/cn/java/j-lo-proxy-pattern/index.html) - [轻松学Java 中的代理模式及动态代理](https://blog.csdn.net/briblue/article/details/73928350)
- [Java代理模式及其应用](https://blog.csdn.net/justloveyou_/article/details/74203025)
[轻松学Java 中的代理模式及动态代理](https://blog.csdn.net/briblue/article/details/73928350)
[Java代理模式及其应用](https://blog.csdn.net/justloveyou_/article/details/74203025)
## 行为型模式 ## 行为型模式
> ### 行为型模式概述 ### 行为型模式概述
- 行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。 - 行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
- 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 - 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
@ -95,27 +64,16 @@
![行为型模式](https://user-gold-cdn.xitu.io/2018/6/28/164467dd92c6172c?w=453&h=269&f=png&s=63270) ![行为型模式](https://user-gold-cdn.xitu.io/2018/6/28/164467dd92c6172c?w=453&h=269&f=png&s=63270)
- **职责链模式:** - **职责链模式:**
- [Java设计模式之责任链模式、职责链模式](https://blog.csdn.net/jason0539/article/details/45091639)
[Java设计模式之责任链模式、职责链模式](https://blog.csdn.net/jason0539/article/details/45091639) - [责任链模式实现的三种方式](https://www.cnblogs.com/lizo/p/7503862.html)
- **命令模式:** <https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/command.html> 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。
[责任链模式实现的三种方式](https://www.cnblogs.com/lizo/p/7503862.html) - **解释器模式:** <https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/mediator.html>
- **命令模式:**
- **解释器模式:**
- **迭代器模式:** - **迭代器模式:**
- **中介者模式:** - **中介者模式:**
- **备忘录模式:** - **备忘录模式:**
- **观察者模式:** - **观察者模式:** <https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/observer.html>
- **状态模式:**<https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/state.html>
观察者模式也是非常常用的设计模式下面这个博客简单介绍了观察者模式的简单定义、解决了一个什么问题用一个气象站和气象看板的例子去描述一对多的关系中观察者模式的应用并且还介绍了jdk内置的观察者模式接口。 - **策略模式:**<https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html>
[Java设计模式之观察者模式](https://zhanglijun1217.github.io/blog/2018/12/24/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E2%80%94%E2%80%94%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F-md/)
- **状态模式:**
- **策略模式:**
策略模式作为设计原则中开闭原则最典型的体现也是经常使用的。下面这篇博客介绍了策略模式一般的组成部分和概念并用了一个小demo去说明了策略模式的应用。 策略模式作为设计原则中开闭原则最典型的体现也是经常使用的。下面这篇博客介绍了策略模式一般的组成部分和概念并用了一个小demo去说明了策略模式的应用。

111
README.md
View File

@ -1,58 +1,58 @@
# Java 学习/面试指南 # Java 学习/面试指南
**一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字“1”即可免费无套路获取。**
**【限时福利】** 极客时间[《Java 并发编程面试必备》](#Java并发编程专栏)专栏限时特惠,购买之后的小伙伴加 [我的微信](#联系我) 报上自己的极客时间大名可以找我会把24元返现退给大家减轻各位学习成本。
为了优化大家的阅读体验,我重新进行了排版,并且增加了较为详细的[目录](#目录)供大家参考!对本仓库提过有价值的 issue 或 pr 的小伙伴将出现在 [Contributor](#Contributor) 这里。另外, 由于我个人能力有限,很多知识点我可能没有涉及到,所以你可以对其他知识点进行补充。**对于不错的原创文章我根据你的选择给予现金奖励、付费专栏或者书籍进行奖励!所以,快提 pr 或者邮件的方式(邮件地址在主页)给我投稿吧!** 当然,我觉得奖励是次要的,最重要的是你可以从自己整理知识点的过程中学习到很多知识。
<div align="center"> <div align="center">
<img src="http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/49833984.jpg" width=""/> <img src="http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/49833984.jpg" width=""/>
</br> </br>
微信交流群添加 [我的微信](#我的微信) 后回复关键字“加群”即可入群。
</div> </div>
## 阅读之前必看
1. **加群:** 微信交流群添加 [我的微信](#联系我) 后回复关键字“加群”即可入群。
2. **Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
3. **《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
4. **关于贡献者:** 对本仓库提过有价值的 issue 或 pr 的小伙伴将出现在 [Contributor](#Contributor) 这里。
5. **欢迎投稿:** 由于我个人能力有限,很多知识点我可能没有涉及到,所以你可以对其他知识点进行补充。**对于不错的原创文章我根据你的选择给予现金(50-300)、付费专栏或者任选书籍进行奖励!所以,快提 pr 或者邮件的方式(邮件地址在主页)给我投稿吧!** 当然,我觉得奖励是次要的,最重要的是你可以从自己整理知识点的过程中学习到很多知识。
## 目录 ## 目录
* [:coffee: Java](#coffee-java) * [Java](#java)
* [Java/J2EE 基础](#javaj2ee-基础) * [Java/J2EE 基础](#javaj2ee-基础)
* [Java 集合框架](#java-集合框架) * [Java 集合框架](#java-集合框架)
* [Java 多线程](#java-多线程) * [Java 多线程](#java-多线程)
* [Java BIO,NIO,AIO](#java-bionioaio) * [Java BIO,NIO,AIO](#java-bionioaio)
* [Java 虚拟机 jvm](#java-虚拟机-jvm) * [Java 虚拟机 jvm](#java-虚拟机-jvm)
* [:open_file_folder: 数据结构与算法](#open_file_folder-数据结构与算法) * [设计模式](#设计模式)
* [数据结构与算法](#数据结构与算法)
* [数据结构](#数据结构) * [数据结构](#数据结构)
* [算法](#算法) * [算法](#算法)
* [:computer: 计算机网络与数据通信](#computer-计算机网络与数据通信) * [计算机网络与数据通信](#计算机网络与数据通信)
* [网络相关](#网络相关) * [网络相关](#网络相关)
* [数据通信\(RESTful,RPC,消息队列\)总结](#数据通信restfulrpc消息队列总结) * [数据通信\(RESTful,RPC,消息队列\)总结](#数据通信restfulrpc消息队列总结)
* [:iphone: 操作系统](#iphone-操作系统) * [操作系统](#操作系统)
* [Linux相关](#linux相关) * [Linux相关](#linux相关)
* [:pencil2: 主流框架/软件](#pencil2-主流框架软件) * [主流框架/软件](#主流框架软件)
* [Spring](#spring) * [Spring](#spring)
* [ZooKeeper](#zookeeper) * [ZooKeeper](#zookeeper)
* [:floppy_disk: 数据存储](#floppy_disk-数据存储) * [数据存储](#数据存储)
* [MySQL](#mysql) * [MySQL](#mysql)
* [Redis](#redis) * [Redis](#redis)
* [:punch: 架构](#punch-架构) * [架构](#架构)
* [:musical_note: 面试必备](#musical_note-面试必备) * [面试必备\(Essential content for the interview\)](#面试必备essential-content-for-the-interview)
* [备战面试](#备战面试) * [备战面试\(Preparing for an interview\)](#备战面试preparing-for-an-interview)
* [最最最常见的Java面试题总结](#最最最常见的java面试题总结) * [BATJ真实面经\(BATJ real interview experience\)](#batj真实面经batj-real-interview-experience)
* [Java学习/面试开源仓库推荐](#java学习面试开源仓库推荐) * [最常见的Java面试题总结\(Summary of the most common Java interview questions\)](#最常见的java面试题总结summary-of-the-most-common-java-interview-questions)
* [:art: 闲谈](#art-闲谈) * [闲谈](#闲谈)
* [:envelope: 说明](#envelope-说明) * [说明](#说明)
## 待办 ## 待办
* [ ] Java 8 新特性总结 * [ ] Java 8 新特性总结
* [ ] Java 多线程类别知识重构
* [x] BIO,NIO,AIO 总结 * [x] BIO,NIO,AIO 总结
* [ ] Netty 总结 * [ ] Netty 总结
* [ ] 数据结构总结重构 * [ ] 数据结构总结重构
## :coffee: Java ## Java
### Java/J2EE 基础 ### Java/J2EE 基础
@ -60,7 +60,6 @@
* [J2EE 基础知识回顾](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/J2EE基础知识.md) * [J2EE 基础知识回顾](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/J2EE基础知识.md)
* [Java常见关键字总结static、final、this、super](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/final、static、this、super.md) * [Java常见关键字总结static、final、this、super](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/final、static、this、super.md)
### Java 集合框架 ### Java 集合框架
* [这几道Java集合框架面试题几乎必问](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/这几道Java集合框架面试题几乎必问.md) * [这几道Java集合框架面试题几乎必问](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/这几道Java集合框架面试题几乎必问.md)
@ -72,7 +71,6 @@
### Java 多线程 ### Java 多线程
* [多线程系列文章](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/多线程系列.md)
* [并发编程面试必备synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/synchronized.md) * [并发编程面试必备synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/synchronized.md)
* [并发编程面试必备:乐观锁与悲观锁](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/面试必备之乐观锁与悲观锁.md) * [并发编程面试必备:乐观锁与悲观锁](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/面试必备之乐观锁与悲观锁.md)
* [并发编程面试必备JUC 中的 Atomic 原子类总结](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/Multithread/Atomic.md) * [并发编程面试必备JUC 中的 Atomic 原子类总结](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/Multithread/Atomic.md)
@ -95,7 +93,7 @@
* [设计模式系列文章](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/设计模式.md) * [设计模式系列文章](https://github.com/Snailclimb/Java_Guide/blob/master/Java相关/设计模式.md)
## :open_file_folder: 数据结构与算法 ## 数据结构与算法
### 数据结构 ### 数据结构
@ -108,7 +106,7 @@
* [算法总结——几道常见的子符串算法题 ](https://github.com/Snailclimb/Java_Guide/blob/master/数据结构与算法/搞定BAT面试——几道常见的子符串算法题.md) * [算法总结——几道常见的子符串算法题 ](https://github.com/Snailclimb/Java_Guide/blob/master/数据结构与算法/搞定BAT面试——几道常见的子符串算法题.md)
* [算法总结——几道常见的链表算法题 ](https://github.com/Snailclimb/Java_Guide/blob/master/数据结构与算法/Leetcode-LinkList1.md) * [算法总结——几道常见的链表算法题 ](https://github.com/Snailclimb/Java_Guide/blob/master/数据结构与算法/Leetcode-LinkList1.md)
## :computer: 计算机网络与数据通信 ## 计算机网络与数据通信
### 网络相关 ### 网络相关
@ -123,13 +121,13 @@
* [消息队列总结:新手也能看懂,消息队列其实很简单](https://github.com/Snailclimb/Java-Guide/blob/master/计算机网络与数据通信/message-queue.md) * [消息队列总结:新手也能看懂,消息队列其实很简单](https://github.com/Snailclimb/Java-Guide/blob/master/计算机网络与数据通信/message-queue.md)
* [一文搞懂 RabbitMQ 的重要概念以及安装](https://github.com/Snailclimb/Java-Guide/blob/master/计算机网络与数据通信/rabbitmq.md) * [一文搞懂 RabbitMQ 的重要概念以及安装](https://github.com/Snailclimb/Java-Guide/blob/master/计算机网络与数据通信/rabbitmq.md)
## :iphone: 操作系统 ## 操作系统
### Linux相关 ### Linux相关
* [后端程序员必备的 Linux 基础知识](https://github.com/Snailclimb/Java-Guide/blob/master/操作系统/后端程序员必备的Linux基础知识.md) * [后端程序员必备的 Linux 基础知识](https://github.com/Snailclimb/Java-Guide/blob/master/操作系统/后端程序员必备的Linux基础知识.md)
* [Shell 编程入门](https://github.com/Snailclimb/Java-Guide/blob/master/操作系统/Shell.md) * [Shell 编程入门](https://github.com/Snailclimb/Java-Guide/blob/master/操作系统/Shell.md)
## :pencil2: 主流框架/软件 ## 主流框架/软件
### Spring ### Spring
@ -142,7 +140,7 @@
* [可能是把 ZooKeeper 概念讲的最清楚的一篇文章](https://github.com/Snailclimb/Java_Guide/blob/master/主流框架/ZooKeeper.md) * [可能是把 ZooKeeper 概念讲的最清楚的一篇文章](https://github.com/Snailclimb/Java_Guide/blob/master/主流框架/ZooKeeper.md)
* [ZooKeeper 数据模型和常见命令了解一下,速度收藏!](https://github.com/Snailclimb/Java_Guide/blob/master/主流框架/ZooKeeper数据模型和常见命令.md) * [ZooKeeper 数据模型和常见命令了解一下,速度收藏!](https://github.com/Snailclimb/Java_Guide/blob/master/主流框架/ZooKeeper数据模型和常见命令.md)
## :floppy_disk: 数据存储 ## 数据存储
### MySQL ### MySQL
@ -155,45 +153,44 @@
* [Redlock分布式锁](https://github.com/Snailclimb/Java_Guide/blob/master/数据存储/Redis/Redlock分布式锁.md) * [Redlock分布式锁](https://github.com/Snailclimb/Java_Guide/blob/master/数据存储/Redis/Redlock分布式锁.md)
* [如何做可靠的分布式锁Redlock真的可行么](https://github.com/Snailclimb/Java_Guide/blob/master/数据存储/Redis/如何做可靠的分布式锁Redlock真的可行么.md) * [如何做可靠的分布式锁Redlock真的可行么](https://github.com/Snailclimb/Java_Guide/blob/master/数据存储/Redis/如何做可靠的分布式锁Redlock真的可行么.md)
## :punch: 架构 ## 架构
* [一文读懂分布式应该学什么](https://github.com/Snailclimb/Java_Guide/blob/master/架构/分布式.md) * [一文读懂分布式应该学什么](https://github.com/Snailclimb/Java_Guide/blob/master/架构/分布式.md)
* [8 张图读懂大型网站技术架构](https://github.com/Snailclimb/JavaGuide/blob/master/架构/8%20张图读懂大型网站技术架构.md) * [8 张图读懂大型网站技术架构](https://github.com/Snailclimb/JavaGuide/blob/master/架构/8%20张图读懂大型网站技术架构.md)
* [【面试精选】关于大型网站系统架构你不得不懂的10个问题](https://github.com/Snailclimb/JavaGuide/blob/master/架构/【面试精选】关于大型网站系统架构你不得不懂的10个问题.md) * [【面试精选】关于大型网站系统架构你不得不懂的10个问题](https://github.com/Snailclimb/JavaGuide/blob/master/架构/【面试精选】关于大型网站系统架构你不得不懂的10个问题.md)
## :musical_note: 面试必备 ## 面试必备(Essential content for the interview)
### 备战面试 ### 备战面试(Preparing for an interview)
* [【备战面试1】程序员的简历就该这样写](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/程序员的简历之道.md) * [【备战面试1】程序员的简历就该这样写](https://github.com/Snailclimb/JavaGuide/blob/master/EssentialContentForInterview/PreparingForInterview/程序员的简历之道.md)
* [【备战面试2】初出茅庐的程序员该如何准备面试](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/interviewPrepare.md) * [【备战面试2】初出茅庐的程序员该如何准备面试](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/PreparingForInterview/interviewPrepare.md)
* [【备战面试3】Java程序员必备书单](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/books.md) * [【备战面试3】7个大部分程序员在面试前很关心的问题](https://github.com/Snailclimb/JavaGuide/blob/master/EssentialContentForInterview/PreparingForInterview/JavaProgrammerNeedKnow.md)
* [【备战面试4】美团面试常见问题总结附详解答案](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/美团面试常见问题总结.md) * [【备战面试4】Java程序员必备书单](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/PreparingForInterview/books.md)
* [【备战面试5】Github上开源的Java面试/学习相关的仓库推荐](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/PreparingForInterview/JavaInterviewLibrary.md)
* [【备战面试6】美团面试常见问题总结附详解答案](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/PreparingForInterview/美团面试常见问题总结.md)
### BATJ真实面经(BATJ real interview experience)
### 最最最常见的Java面试题总结 * [5面阿里,终获offer(2018年秋招)](https://github.com/Snailclimb/JavaGuide/blob/master/EssentialContentForInterview/BATJrealInterviewExperience/5面阿里,终获offer.md)
这里会分享一些出现频率极其极其高的面试题,初定周更一篇,什么时候更完什么时候停止。 ### 最常见的Java面试题总结(Summary of the most common Java interview questions)
* [第一周2018-8-7](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/最最最常见的Java面试题总结/第一周2018-8-7.md) (为什么 Java 中只有值传递、==与equals、 hashCode与equals) * [第一周2018-8-7](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/MostCommonJavaInterviewQuestions/第一周2018-8-7.md) (为什么 Java 中只有值传递、==与equals、 hashCode与equals)
* [第二周2018-8-13](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/最最最常见的Java面试题总结/第二周(2018-8-13).md)(String和StringBuffer、StringBuilder的区别是什么String为什么是不可变的、什么是反射机制反射机制的应用场景有哪些......) * [第二周2018-8-13](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/MostCommonJavaInterviewQuestions/第二周(2018-8-13).md)(String和StringBuffer、StringBuilder的区别是什么String为什么是不可变的、什么是反射机制反射机制的应用场景有哪些......)
* [第三周2018-08-22](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/这几道Java集合框架面试题几乎必问.md) Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别、HashMap的底层实现、HashMap 和 Hashtable 的区别、HashMap 的长度为什么是2的幂次方、HashSet 和 HashMap 区别、ConcurrentHashMap 和 Hashtable 的区别、ConcurrentHashMap线程安全的具体实现方式/底层具体实现、集合框架底层数据结构总结) * [第三周2018-08-22](https://github.com/Snailclimb/Java-Guide/blob/master/Java相关/这几道Java集合框架面试题几乎必问.md) Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别、HashMap的底层实现、HashMap 和 Hashtable 的区别、HashMap 的长度为什么是2的幂次方、HashSet 和 HashMap 区别、ConcurrentHashMap 和 Hashtable 的区别、ConcurrentHashMap线程安全的具体实现方式/底层具体实现、集合框架底层数据结构总结)
* [第四周(2018-8-30).md](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/最最最常见的Java面试题总结/第四周(2018-8-30).md) (主要内容是几道面试常问的多线程基础题。) * [第四周(2018-8-30).md](https://github.com/Snailclimb/Java-Guide/blob/master/EssentialContentForInterview/MostCommonJavaInterviewQuestions/第四周(2018-8-30).md) (主要内容是几道面试常问的多线程基础题。)
### Java学习/面试开源仓库推荐 ## 闲谈
* [盘点一下Github上开源的Java面试/学习相关的仓库看完弄懂薪资至少增加10k](https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/JavaInterviewGithub.md) * [选择技术方向都要考虑哪些因素](https://github.com/Snailclimb/Java-Guide/blob/master/闲谈/选择技术方向都要考虑哪些因素.md)
* [结束了我短暂的秋招,说点自己的感受](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/2018%20%E7%A7%8B%E6%8B%9B.md)
## :art: 闲谈 * [【2018总结】即使平凡也要热爱自己的生活](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/2018%20summary.md)
* [Java项目 Github Trending 月榜](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/JavaGithubTrending/JavaGithubTrending.md)
* [选择技术方向都要考虑哪些因素](https://github.com/Snailclimb/Java-Guide/blob/master/其他/选择技术方向都要考虑哪些因素.md)
* [结束了我短暂的秋招,说点自己的感受](https://github.com/Snailclimb/JavaGuide/blob/master/%E5%85%B6%E4%BB%96/2018%20%E7%A7%8B%E6%8B%9B.md)
* [这7个问题可能大部分Java程序员都比较关心吧](https://github.com/Snailclimb/JavaGuide/blob/master/%E9%9D%A2%E8%AF%95%E5%BF%85%E5%A4%87/java%20programmer%20need%20know.md)
* [【2018总结】即使平凡也要热爱自己的生活](https://github.com/Snailclimb/JavaGuide/blob/master/%E5%85%B6%E4%BB%96/2018%20summary.md)
*** ***
## :envelope: 说明 ## 说明
### 介绍 ### 介绍
@ -223,12 +220,6 @@
![我的微信](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-2/JavaGuide.jpg) ![我的微信](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-2/JavaGuide.jpg)
### Java并发编程专栏
微信扫描下方二维码购买之后我会将自己得到的24元返现都还给你减轻各位的学习成本
![ Java并发编程专栏](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-2/Java并发编程实战.jpg)
### Contributor ### Contributor
下面是笔主收集的一些对本仓库提过有价值的pr或者issue的朋友人数较多如果你也对本仓库提过不错的pr或者issue的话你可以加我的微信与我联系。下面的排名不分先后 下面是笔主收集的一些对本仓库提过有价值的pr或者issue的朋友人数较多如果你也对本仓库提过不错的pr或者issue的话你可以加我的微信与我联系。下面的排名不分先后
@ -262,6 +253,6 @@
### 公众号 ### 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。我是 ThoughtWorks 准入职Java工程师。专注Java知识分享开源 Java 学习指南——JavaGuide12k+ Star的作者。公众号多篇文章被各大技术社区转载。公众号后台回复关键字“1”可以领取一份我精选的Java资源哦可以扫描下方二维码或者通过微信的搜一搜搜索ID“Java_Guide”即可。 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) ![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334)

View File

@ -499,7 +499,7 @@ public class DesDemo {
- **这种算法是在DES算法的基础上发展出来的类似于三重DES。** - **这种算法是在DES算法的基础上发展出来的类似于三重DES。**
- **发展IDEA也是因为感到DES具有密钥太短等缺点。** - **发展IDEA也是因为感到DES具有密钥太短等缺点。**
- **DEA的密钥为128位这么长的密钥在今后若干年内应该是安全的。** - **IDEA的密钥为128位这么长的密钥在今后若干年内应该是安全的。**
- **在实际项目中用到的很少了解即可。** - **在实际项目中用到的很少了解即可。**
#### 代码实现: #### 代码实现:

View File

@ -108,18 +108,17 @@ public class Solution {
思路很简单先利用Arrays.sort(strs)为数组排序,再将数组第一个元素和最后一个元素的字符从前往后对比即可! 思路很简单先利用Arrays.sort(strs)为数组排序,再将数组第一个元素和最后一个元素的字符从前往后对比即可!
```java ```java
//https://leetcode-cn.com/problems/longest-common-prefix/description/
public class Main { public class Main {
public static String replaceSpace(String[] strs) { public static String replaceSpace(String[] strs) {
// 如果检查值不合法及就返回空串
if (!chechStrs(strs)) {
return "";
}
// 数组长度 // 数组长度
int len = strs.length; int len = strs.length;
// 用于保存结果 // 用于保存结果
StringBuffer res = new StringBuffer(); StringBuilder res = new StringBuilder();
// 注意:=是赋值,==是判断
if (strs == null || strs.length == 0) {
return "";
}
// 给字符串数组的元素按照升序排序(包含数字的话,数字会排在前面) // 给字符串数组的元素按照升序排序(包含数字的话,数字会排在前面)
Arrays.sort(strs); Arrays.sort(strs);
int m = strs[0].length(); int m = strs[0].length();
@ -135,9 +134,29 @@ public class Main {
return res.toString(); return res.toString();
} }
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;
}
}
}
return flag;
}
// 测试 // 测试
public static void main(String[] args) { public static void main(String[] args) {
String[] strs = { "customer", "car", "cat" }; String[] strs = { "customer", "car", "cat" };
// String[] strs = { "customer", "car", null };//空串
// String[] strs = {};//空串
// String[] strs = null;//空串
System.out.println(Main.replaceSpace(strs));// c System.out.println(Main.replaceSpace(strs));// c
} }
} }

View File

@ -123,7 +123,7 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把
- RoutingKey 为一个点号“.”分隔的字符串(被点号“.”分隔开的每一段独立的字符串称为一个单词),如 “com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”; - RoutingKey 为一个点号“.”分隔的字符串(被点号“.”分隔开的每一段独立的字符串称为一个单词),如 “com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”;
- BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串; - BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串;
- BindingKey 中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“#”用于匹配一个单词,“#”用于匹配多规格单词(可以是零个)。 - BindingKey 中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“.”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。
![topic 类型交换器](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/73843.jpg) ![topic 类型交换器](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/73843.jpg)

View File

@ -0,0 +1,113 @@
本文数据统计于 1.1 号凌晨,由 SnailClimb 整理。
### 1. JavaGuide
- **Github地址** [https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)
- **star**: 18.2k
- **介绍**: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。
![JavaGuide](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/96151465.jpg)
概览:
![JavaGuide](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-24/1352784.jpg)
### 2. mall
- **Github地址** [https://github.com/macrozheng/mall](https://github.com/macrozheng/mall)
- **star**: 3.3k
- **介绍**: mall项目是一套电商系统包括前台商城系统及后台管理系统基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
![mall](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/11382760.jpg)
概览:
![mall](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/99819963.jpg)
### 3. advanced-java
- **Github地址**[https://github.com/doocs/advanced-java](https://github.com/doocs/advanced-java)
- **star**: 3.3k
- **介绍**: 互联网 Java 工程师进阶知识完全扫盲
![advanced-java](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/95209476.jpg)
概览:
![advanced-java](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/18005792.jpg)
### 4. matrix
- **Github地址**[https://github.com/Tencent/matrix](https://github.com/Tencent/matrix)
- **star**: 2.5k
- **介绍**: Matrix 是一款微信研发并日常使用的 APMApplication Performance Manage当前主要运行在 Android 平台上。 Matrix 的目标是建立统一的应用性能接入框架,通过各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。
![matrix](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/8991895.jpg)
### 5. miaosha
- **Github地址**[https://github.com/qiurunze123/miaosha](https://github.com/qiurunze123/miaosha)
- **star**: 2.4k
- **介绍**: 高并发大流量如何进行秒杀架构,我对这部分知识做了一个系统的整理,写了一套系统。
![miaosha](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/79382302.jpg)
### 6. arthas
- **Github地址**[https://github.com/alibaba/arthas](https://github.com/alibaba/arthas)
- **star**: 8.2k
- **介绍**: Arthas 是Alibaba开源的Java诊断工具深受开发者喜爱。
![arthas](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/73394671.jpg)
### 7 spring-boot
- **Github地址** [https://github.com/spring-projects/spring-boot](https://github.com/spring-projects/spring-boot)
- **star:** 32.6k
- **介绍** 虽然Spring的组件代码是轻量级的但它的配置却是重量级的需要大量XML配置,不过Spring Boot 让这一切成为了过去。 另外Spring Cloud也是基于Spring Boot构建的我个人非常有必要学习一下。
**关于Spring Boot官方的介绍**
> Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”可能是run Application或java -jar 或 tomcat 或 maven插件run 或 shell脚本便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)
![spring-boot](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/29649807.jpg)
### 8. tutorials
- **Github地址**[https://github.com/eugenp/tutorials](https://github.com/eugenp/tutorials)
- **star**: 10k
- **介绍**: 该项目是一系列小而专注的教程 - 每个教程都涵盖Java生态系统中单一且定义明确的开发领域。 当然它们的重点是Spring Framework - SpringSpring Boot和Spring Securiyt。 除了Spring之外还有以下技术核心JavaJacksonHttpClientGuava。
![tutorials](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/94425339.jpg)
### 9. qmq
- **Github地址**[https://github.com/qunarcorp/qmq](https://github.com/qunarcorp/qmq)
- **star**: 1.1k
- **介绍**: QMQ是去哪儿网内部广泛使用的消息中间件自2012年诞生以来在去哪儿网所有业务场景中广泛的应用包括跟交易息息相关的订单场景 也包括报价搜索等高吞吐量场景。
![arthas](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/73394671.jpg)
### 10. symphony
- **Github地址**[https://github.com/b3log/symphony](https://github.com/b3log/symphony)
- **star**: 9k
- **介绍**: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。
![symphony](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/11577890.jpg)
### 11. incubator-dubbo
- **Github地址**[https://github.com/apache/incubator-dubbo](https://github.com/apache/incubator-dubbo)
- **star**: 23.6k
- **介绍**: 阿里开源的一个基于Java的高性能开源RPC框架。
![incubator-dubbo](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/53068060.jpg)
### 12. apollo
- **Github地址**[https://github.com/ctripcorp/apollo](https://github.com/ctripcorp/apollo)
- **star**: 10k
- **介绍**: Apollo阿波罗是携程框架部门研发的分布式配置中心能够集中化管理应用不同环境、不同集群的配置配置修改后能够实时推送到应用端并且具备规范的权限、流程治理等特性适用于微服务配置管理场景。
![apollo](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/89386993.jpg)

View File

@ -0,0 +1,114 @@
### 1. JavaGuide
- **Github地址** [https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)
- **star**: 22.8k
- **介绍**: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。
![JavaGuide](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/JavaGuide.png)
**概览:**
![JavaGuide](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-24/1352784.jpg)
### 2. advanced-java
- **Github地址**[https://github.com/doocs/advanced-java](https://github.com/doocs/advanced-java)
- **star**: 7.9k
- **介绍**: 互联网 Java 工程师进阶知识完全扫盲
![advanced-java](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/advanced-java.png)
**概览:**
![advanced-java](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/18005792.jpg)
### 3. fescar
- **Github地址**[https://github.com/alibaba/fescar](https://github.com/alibaba/fescar)
- **star**: 4.6k
- **介绍**: 具有 **高性能****易用性****微服务架构****分布式事务** 的解决方案。(特点:高性能且易于使用,旨在实现简单并快速的事务提交与回滚。)关于 fescar 的更详细介绍可以查看:[Github 上日获 800多 star 的阿里微服务架构分布式事务解决方案 FESCAR开源啦](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247484888&idx=2&sn=ff9fe077c95959ec777c866a425bddbe&chksm=fd9853b9caefdaaf52a1b7caecc697938c2c1c5f6916527d1309ef01aba70c6546bdba6a9657&token=96044853&lang=zh_CN#rd)
![fescar](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/fescar.png)
### 4. mall
- **Github地址** [https://github.com/macrozheng/mall](https://github.com/macrozheng/mall)
- **star**: 5.6 k
- **介绍**: mall项目是一套电商系统包括前台商城系统及后台管理系统基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
![mall](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/mall.png)
**概览:**
![mall](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-1/99819963.jpg)
### 5. miaosha
- **Github地址**[https://github.com/qiurunze123/miaosha](https://github.com/qiurunze123/miaosha)
- **star**: 4.4k
- **介绍**: 高并发大流量如何进行秒杀架构,我对这部分知识做了一个系统的整理,写了一套系统。
![miaosha](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/miaosha.png)
### 6. flink
- **Github地址**[https://github.com/apache/flink](https://github.com/apache/flink)
- **star**: 7.1 k
- **介绍**: Apache Flink是一个开源流处理框架具有强大的流和批处理功能。
![flink](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/flink.png)
关于Flink 更加详细的介绍可以查看这篇文章https://www.cnblogs.com/feiyudemeng/p/8998772.html
### 7. cim
- **Github地址**[https://github.com/crossoverJie/cim](https://github.com/crossoverJie/cim)
- **star**: 1.8 k
- **介绍**: cim(cross IM) 适用于开发者的即时通讯系统。
![cim](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/cim.png)
**系统架构:**
![cim系统架构](https://camo.githubusercontent.com/16f644ac7e2ab8cf8b8784408b1c70baf15634f4/68747470733a2f2f7773312e73696e61696d672e636e2f6c617267652f303036744e6252776c793166796c646769697a68756a3331356f3072346e306b2e6a7067)
### 8. symphony
- **Github地址**[https://github.com/b3log/symphony](https://github.com/b3log/symphony)
- **star**: 10k
- **介绍**: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。
![symphony](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/symphony.png)
### 9. spring-boot
- **Github地址** [https://github.com/spring-projects/spring-boot](https://github.com/spring-projects/spring-boot)
- **star:** 32.6k
- **介绍** 虽然Spring的组件代码是轻量级的但它的配置却是重量级的需要大量XML配置,不过Spring Boot 让这一切成为了过去。 另外Spring Cloud也是基于Spring Boot构建的我个人非常有必要学习一下。
**关于Spring Boot官方的介绍**
> Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”可能是run Application或java -jar 或 tomcat 或 maven插件run 或 shell脚本便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)
![spring-boot](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/spring-boot.png)
### 10. arthas
- **Github地址**[https://github.com/alibaba/arthas](https://github.com/alibaba/arthas)
- **star**: 9.5k
- **介绍**: Arthas 是Alibaba开源的Java诊断工具。
![arthas](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/arthas.png)
**概览:**
当你遇到以下类似问题而束手无策时,`Arthas`可以帮助你解决:
0. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception
1. 我改的代码为什么没有执行到?难道是我没 commit分支搞错了
2. 遇到问题无法在线上 debug难道只能通过加日志再重新发布吗
3. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug线下无法重现
4. 是否有一个全局视角来查看系统的运行状况?
5. 有什么办法可以监控到JVM的实时运行状态
`Arthas`支持JDK 6+支持Linux/Mac/Winodws采用命令行交互模式同时提供丰富的 `Tab` 自动补全功能,进一步方便进行问题的定位和诊断。

View File

@ -0,0 +1,64 @@
### 1. JavaGuide
- **Github地址** [https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)
- **Star**: 27.2k (4,437 stars this month)
- **介绍**: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。
### 2.DoraemonKit
- **Github地址** <https://github.com/didi/DoraemonKit>
- **Star**: 5.2k (3,786 stars this month)
- **介绍**: 简称 "DoKit" 。一款功能齐全的客户端( iOS 、Android )研发助手,你值得拥有。
### 3.advanced-java
- **Github地址**[https://github.com/doocs/advanced-java](https://github.com/doocs/advanced-java)
- **Star**:11.2k (3,042 stars this month)
- **介绍**: 互联网 Java 工程师进阶知识完全扫盲。
### 4. spring-boot-examples
- **Github地址**<https://github.com/ityouknow/spring-boot-examples>
- **star**: 9.6 k (1,764 stars this month)
- **介绍**: Spring Boot 教程、技术栈示例代码,快速简单上手教程。
### 5. mall
- **Github地址** [https://github.com/macrozheng/mall](https://github.com/macrozheng/mall)
- **star**: 7.4 k (1,736 stars this month)
- **介绍**: mall项目是一套电商系统包括前台商城系统及后台管理系统基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
### 6. fescar
- **Github地址**[https://github.com/alibaba/fescar](https://github.com/alibaba/fescar)
- **star**: 6.0 k (1,308 stars this month)
- **介绍**: 具有 **高性能****易用性****微服务架构****分布式事务** 的解决方案。(特点:高性能且易于使用,旨在实现简单并快速的事务提交与回滚。)
### 7. h4cker
- **Github地址**<https://github.com/The-Art-of-Hacking/h4cker>
- **star**: 2.1 k (1,303 stars this month)
- **介绍**: 该仓库主要由Omar Santos维护包括与道德黑客/渗透测试数字取证和事件响应DFIR漏洞研究漏洞利用开发逆向工程等相关的资源。
### 8. spring-boot
- **Github地址** [https://github.com/spring-projects/spring-boot](https://github.com/spring-projects/spring-boot)
- **star:** 34.8k (1,073 stars this month)
- **介绍** 虽然Spring的组件代码是轻量级的但它的配置却是重量级的需要大量XML配置,不过Spring Boot 让这一切成为了过去。 另外Spring Cloud也是基于Spring Boot构建的我个人非常有必要学习一下。
**关于Spring Boot官方的介绍**
> Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”可能是run Application或java -jar 或 tomcat 或 maven插件run 或 shell脚本便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)
### 9. arthas
- **Github地址**[https://github.com/alibaba/arthas](https://github.com/alibaba/arthas)
- **star**: 10.5 k (970 stars this month)
- **介绍**: Arthas 是Alibaba开源的Java诊断工具。
### 10. tutorials
- **Github地址**[https://github.com/eugenp/tutorials](https://github.com/eugenp/tutorials)
- **star**: 12.1 k (789 stars this month)
- **介绍**: 该项目是一系列小而专注的教程 - 每个教程都涵盖Java生态系统中单一且定义明确的开发领域。 当然它们的重点是Spring Framework - SpringSpring Boot和Spring Securiyt。 除了Spring之外还有以下技术核心JavaJacksonHttpClientGuava。

View File

@ -0,0 +1,4 @@
- [2018 年 12 月](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/JavaGithubTrending/2018-12.md)
- [2019 年 1 月](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/JavaGithubTrending/2019-1.md)
- [2019 年 2 月](https://github.com/Snailclimb/JavaGuide/blob/master/闲谈/JavaGithubTrending/2019-2.md)