Skip to content

Commit c575e47

Browse files
committed
图解索引下推
1 parent a0f9843 commit c575e47

File tree

5 files changed

+25
-24
lines changed

5 files changed

+25
-24
lines changed

Java/JVM高频面试题.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ WeakReference<String> weakRef = new WeakReference<String>(str);
353353

354354
## GC是什么?为什么要GC?
355355

356-
GC`Gabage Collection`,即垃圾收集。内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的
356+
GC`Garbage Collection`),垃圾回收,是Java与C++的主要区别之一。作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码。这是因为在Java虚拟机中,存在自动内存管理和垃圾清理机制。对JVM中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,保证JVM中的内存空间,防止出现内存泄露和溢出问题
357357

358358
## Minor GC 和 Full GC的区别?
359359

@@ -734,11 +734,13 @@ class Person {
734734

735735
## 如何排查 OOM 的问题?
736736

737-
排查 OOM 的方法:
737+
> 线上JVM必须配置`-XX:+HeapDumpOnOutOfMemoryError``-XX:HeapDumpPath=/tmp/heapdump.hprof`,当OOM发生时自动 dump 堆内存信息到指定目录
738738
739-
- 增加JVM参数 `-XX:+HeapDumpOnOutOfMemoryError``-XX:HeapDumpPath=/tmp/heapdump.hprof`,当 OOM 发生时自动 dump 堆内存信息到指定目录;
740-
- jstat 查看监控 JVM 的内存和 GC 情况,评估问题大概出在什么区域;
741-
- 使用 MAT 工具载入 dump 文件,分析大对象的占用情况 。
739+
排查 OOM 的方法如下:
740+
741+
- 查看服务器运行日志日志,捕捉到内存溢出异常
742+
- jstat 查看监控JVM的内存和GC情况,评估问题大概出在什么区域
743+
- 使用MAT工具载入dump文件,分析大对象的占用情况
742744

743745

744746

Java/Java基础面试题.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ JRE是运行基于Java语言编写的程序所不可缺少的运行环境。也
118118
- 静态多态性:通过重载实现,相同的方法有不同的參数列表,可以根据参数的不同,做出不同的处理。
119119
- 动态多态性:在子类中重写父类的方法。运行期间判断所引用对象的实际类型,根据其实际类型调用相应的方法。
120120

121-
3、抽象。把客观事物用代码抽象出来。
121+
4、抽象。把客观事物用代码抽象出来。
122122

123123
## Java的基本数据类型有哪些?
124124

@@ -301,11 +301,11 @@ String类是final的,它的所有成员变量也都是final的。为什么是f
301301

302302
字符串常量池(String Pool)保存着所有字符串字面量,这些字面量在编译时期就确定。字符串常量池位于堆内存中,专门用来存储字符串常量。在创建字符串时,JVM首先会检查字符串常量池,如果该字符串已经存在池中,则返回其引用,如果不存在,则创建此字符串并放入池中,并返回其引用。
303303

304-
## object常用方法有哪些
304+
## Object常用方法有哪些
305305

306306
Java面试经常会出现的一道题目,Object的常用方法。下面给大家整理一下。
307307

308-
object常用方法有`toString()``equals()``hashCode()``clone()`等。
308+
Object常用方法有`toString()``equals()``hashCode()``clone()`等。
309309

310310
**toString**
311311

@@ -429,7 +429,7 @@ public class Cat {
429429

430430
**clone**
431431

432-
java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的。Object对象有个clone()方法,实现了对
432+
Java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的。Object对象有个clone()方法,实现了对
433433

434434
象中各个属性的复制,但它的可见范围是protected的。
435435

@@ -493,7 +493,7 @@ public class Person {
493493

494494
当前线程调用对象的wait()方法之后,当前线程会释放对象锁,进入等待状态。等待其他线程调用此对象的notify()/notifyAll()唤醒或者等待超时时间wait(long timeout)自动唤醒。线程需要获取obj对象锁之后才能调用 obj.wait()。
495495

496-
**notity**
496+
**notify**
497497

498498
obj.notify()唤醒在此对象上等待的单个线程,选择是任意性的。notifyAll()唤醒在此对象上等待的所有线程。
499499

@@ -1032,15 +1032,16 @@ if (obj instanceof String) {
10321032
}
10331033
```
10341034

1035+
## 什么是反射?
10351036

1037+
动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
10361038

1039+
在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法。对于任意一个对象,能够调用它的任意一个方法和属性。
10371040

1041+
## 反射有哪些应用场景呢?
10381042

1039-
> 本文已经收录到github仓库,此仓库用于分享Java相关知识总结,包括Java基础、MySQL、Spring Boot、MyBatis、Redis、RabbitMQ、计算机网络、数据结构与算法等等,欢迎大家提pr和star!
1040-
>
1041-
> github地址:https://github.com/Tyson0314/Java-learning
1042-
>
1043-
> 如果github访问不了,可以访问gitee仓库。
1044-
>
1045-
> gitee地址:https://gitee.com/tysondai/Java-learning
1043+
1. JDBC连接数据库时使用`Class.forName()`通过反射加载数据库的驱动程序
1044+
2. Eclispe、IDEA等开发工具利用反射动态解析对象的类型与结构,动态提示对象的属性和方法
1045+
3. Web服务器中利用反射调用了Sevlet的service方法
1046+
4. Spring AOP的特性也是依赖反射实现的
10461047

Java/Java集合面试题.md

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,18 +196,13 @@ return h&(length-1); //第三步 取模运算
196196
### 红黑树的特点?
197197

198198
- 每个节点或者是黑色,或者是红色。
199-
- 根节点是黑色。
200-
- 每个叶子节点(`NIL`)是黑色。
199+
- 根节点和叶子节点(`NIL`)是黑色的。
201200
- 如果一个节点是红色的,则它的子节点必须是黑色的。
202201
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
203202

204-
### 为什么使用红黑树而不使用AVL树?
205-
206-
ConcurrentHashMap 在put的时候会加锁,使用红黑树插入速度更快,可以减少等待锁释放的时间。红黑树是对AVL树的优化,只要求部分平衡,用非严格的平衡来换取增删节点时候旋转次数的降低,提高了插入和删除的性能。
207-
208203
### 在解决 hash 冲突的时候,为什么选择先用链表,再转红黑树?
209204

210-
因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡,而单链表不需要。当元素小于 8 个的时候,链表结构可以保证查询性能。当元素大于 8 个的时候, 红黑树搜索时间复杂度是 `O(logn)`,而链表是 `O(n)`此时需要红黑树来加快查询速度,但是插入和删除节点的效率变慢了。如果一开始就用红黑树结构,元素太少,插入和删除节点的效率又比较慢,浪费性能
205+
因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡,而单链表不需要。所以,当元素个数小于8个的时候,采用链表结构可以保证查询性能。而当元素个数大于8个的时候, 红黑树搜索时间复杂度是 `O(logn)`,而链表是 `O(n)`此时使用红黑树可以加快查询速度
211206

212207
### HashMap 的长度为什么是 2 的幂次方?
213208

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
## MySQL
8383

8484
1. [【大厂面试】—— MySQL高频面试题50道](数据库/MySQL高频面试题.md)(**知乎1k+收藏,推荐** :+1:)
85+
2. [图解索引下推](https://mp.weixin.qq.com/s/W1XQYmihtSdbLWQKeNwZvQ)(推荐 :+1:)
8586
3. [MySQL执行计划](数据库/MySQL执行计划.md)(推荐 :+1:)
8687

8788
## Redis

工具/progit2.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,8 @@ git remote add pb https://github.com/paulboone/ticgit
452452
git remote remove origin
453453
```
454454

455+
### 给origin设置多个远程仓库
456+
455457
如果想要给origin设置两个远程仓库地址(git add会报错),可以使用`git remote set-url --add origin url`来设置。
456458

457459
```bash

0 commit comments

Comments
 (0)