Skip to content

Commit 1267e3a

Browse files
committed
MySQL高频面试题
1 parent 952f6a8 commit 1267e3a

File tree

6 files changed

+818
-31
lines changed

6 files changed

+818
-31
lines changed

Java/Java并发面试题.md

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,13 @@
5757

5858
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
5959

60-
> 大家好,我是大彬。最近在面试,看了很多面经,抽空将Java并发编程常见的面试题总结了一下,在这里分享给大家~
60+
> 首先给大家分享一个github仓库,上面放了**200多本经典的计算机书籍**,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
61+
>
62+
> github地址:https://github.com/Tyson0314/java-books
63+
>
64+
> 如果github访问不了,可以访问gitee仓库。
65+
>
66+
> gitee地址:https://gitee.com/tysondai/java-books
6167
6268
## 线程池
6369

@@ -66,7 +72,7 @@
6672
### 为什么使用线程池?
6773

6874
- **降低资源消耗**。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
69-
- **提高响应速度**。当任务到达时,任务可以不需要的等到线程创建就能立即执行
75+
- **提高响应速度**。当任务到达时,可以不需要等到线程创建就能立即执行
7076
- **提高线程的可管理性**。统一管理线程,避免系统创建大量同类线程而导致消耗完内存。
7177

7278
### 线程池执行原理?
@@ -128,7 +134,7 @@ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveT
128134
}
129135
```
130136

131-
- RejectedExecutionHandler:当队列和线程池都满了时,根据拒绝策略处理新任务。
137+
- RejectedExecutionHandler:当队列和线程池都满了的时候,根据拒绝策略处理新任务。
132138

133139
```java
134140
AbortPolicy:默认的策略,直接抛出RejectedExecutionException
@@ -280,7 +286,7 @@ private static void test2() {
280286
### 创建线程有哪几种方式?
281287

282288
- 通过扩展Thread类来创建多线程
283-
- 通过实现Runnable接口来创建多线程,可实现线程间的资源共享
289+
- 通过实现Runnable接口来创建多线程
284290
- 实现Callable接口,通过FutureTask接口创建线程。
285291
- 使用Executor框架来创建线程池。
286292

@@ -339,8 +345,7 @@ class Runnable1 implements Runnable{
339345

340346
实现Runnable接口比继承Thread类所具有的优势:
341347

342-
1. 资源共享,适合多个相同的程序代码的线程去处理同一个资源
343-
2. 可以避免java中的单继承的限制
348+
1. 可以避免java中的单继承的限制
344349
3. 线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类
345350

346351
**Callable 创建线程代码**
@@ -542,13 +547,13 @@ volatile关键字的两个作用:
542547

543548
AQS,AbstractQueuedSynchronizer,抽象队列同步器,定义了一套多线程访问共享资源的同步器框架,许多并发工具的实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch。
544549

545-
AQS使用一个volatile的int类型的成员变量state来表示同步状态,通过CAS修改同步状态的值。当线程调用 lock 方法时 ,如果 state=0,说明没有任何线程占有共享资源的锁,可以获得锁并将 state=1。如果 state=1,则说明有线程目前正在使用共享变量,其他线程必须加入同步队列进行等待。
550+
AQS使用一个volatile的int类型的成员变量state来表示同步状态,通过CAS修改同步状态的值。当线程调用 lock 方法时 ,如果 state=0,说明没有任何线程占有共享资源的锁,可以获得锁并将 state加1。如果 state不为0,则说明有线程目前正在使用共享变量,其他线程必须加入同步队列进行等待。
546551

547552
```java
548553
private volatile int state;//共享变量,使用volatile修饰保证线程可见性
549554
```
550555

551-
同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态(独占或共享 )构造成为一个节点(Node)并将其加入同步队列并进行自旋,当同步状态释放时,会把首节中的后继节点对应的线程唤醒,使其再次尝试获取同步状态。
556+
同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态(独占或共享 )构造成为一个节点(Node)并将其加入同步队列并进行自旋,当同步状态释放时,会把首节点中的后继节点对应的线程唤醒,使其再次尝试获取同步状态。
552557

553558
![](https://gitee.com/tysondai/img/raw/master/image-20210910000456607.png)
554559

@@ -832,7 +837,7 @@ currentTime.remove();
832837

833838
### ThreadLocal使用场景有哪些?
834839

835-
ThreadLocal 适用场景:每个线程需要有自己单独的实例,且需要在多个方法中共享实例,即同时满足实例在线程间的隔离与方法间的共享。比如Java web应用中,每个线程有自己单独的 Session 实例,就可以使用ThreadLocal来实现。
840+
ThreadLocal 适用场景:每个线程需要有自己单独的实例,且需要在多个方法中共享实例,即同时满足实例在线程间的隔离与方法间的共享,这种情况适合使用ThreadLocal。比如Java web应用中,每个线程有自己单独的 Session 实例,就可以使用ThreadLocal来实现。
836841

837842

838843

@@ -1147,12 +1152,3 @@ public final void lazySet(int i, int newValue)//最终 将index=i 位置的元
11471152
- AtomicMarkableReference :原子更新带有标记的引用类型。该类将 boolean 标记与引用关联起来
11481153

11491154

1150-
1151-
> 给大家分享一个github仓库,上面放了**200多本经典的计算机书籍**,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
1152-
>
1153-
> github地址:https://github.com/Tyson0314/java-books
1154-
>
1155-
> 如果github访问不了,可以访问gitee仓库。
1156-
>
1157-
> gitee地址:https://gitee.com/tysondai/java-books
1158-

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@
6868

6969
## MySQL
7070

71-
1. [MySQL基础知识总结](数据库/mysql基础.md)
72-
2. [MySQL面试知识点总结](数据库/mysql进阶.md)(必看 :+1:)
71+
1. [【大厂面试】——MySQL高频面试题50道](数据库/MySQL高频面试题.md)(必看 :+1:)
72+
2. [MySQL基础知识总结](数据库/mysql基础.md)
7373
3. [MySQL执行计划](数据库/Mysql执行计划.md)(必看 :+1:)
7474

7575
## Redis
@@ -138,7 +138,7 @@
138138

139139
[计算机网络常见面试题总结](网络/计算机网络高频面试题.md) (精选30题,非常适合面试前阅读!必看 :+1:
140140

141-
[session和cookie](网络/session和cookie.md)
141+
[session和cookie详解](网络/session和cookie.md)
142142

143143
# 工具
144144

0 commit comments

Comments
 (0)