Skip to content

Commit 01a6790

Browse files
committed
剩下菜单栏和左侧菜单,优质文章
1 parent 4436da9 commit 01a6790

File tree

220 files changed

+6027
-1025
lines changed

Some content is hidden

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

220 files changed

+6027
-1025
lines changed

README.md

Lines changed: 73 additions & 300 deletions
Large diffs are not rendered by default.

_navbar.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@
77
* [Go语言学习路线](docs/xuexiluxian/go.md)
88
* [操作系统学习路线](docs/xuexiluxian/os.md)
99
* [前端学习路线](docs/xuexiluxian/qianduan.md)
10-
* [回到主页](README.md)
1110

_sidebar.md

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,63 +5,48 @@
55
* [Java面渣逆袭](README.md?id=Java面渣逆袭)
66
* [Java概述](README.md?id=java概述)
77
* [Java基础语法](README.md?id=java基础语法)
8-
* [面向对象](README.md?id=面向对象)
9-
* [字符串String](README.md?id=字符串String)
10-
* [数组](README.md?id=数组)
8+
* [Java面向对象编程](README.md?id=Java面向对象编程)
9+
* [字符串&数组](README.md?id=字符串&数组)
1110
* [集合框架(容器)](README.md?id=集合框架(容器))
11+
* [Java输入输出](README.md?id=Java输入输出)
1212
* [异常处理](README.md?id=异常处理)
1313
* [常用工具类](README.md?id=常用工具类)
14-
* [Java8新特性](README.md?id=Java8新特性)
14+
* [Java新特性](README.md?id=Java新特性)
1515
* [Java重要知识点](README.md?id=java重要知识点)
1616
* [Java并发编程](README.md?id=Java并发编程)
1717
* [Java虚拟机](README.md?id=Java虚拟机)
1818
* [Java企业级开发](README.md?id=Java企业级开发)
19-
* [基建篇](README.md?id=基建篇)
20-
* [Maven](README.md?id=Maven)
21-
* [Git](README.md?id=Git)
22-
* [Nginx](README.md?id=Nginx)
23-
* [日志服务](README.md?id=日志服务)
24-
* [工具篇](README.md?id=工具篇)
25-
* [Intellij-IDEA](README.md?id=Intellij-IDEA)
26-
* [辅助工具](README.md?id=辅助工具)
27-
* [框架篇](README.md?id=框架篇)
28-
* [SpringBoot](README.md?id=SpringBoot)
29-
* [Spring](README.md?id=Spring)
19+
* [开发工具](README.md?id=开发工具)
20+
* [IDE/编辑器](README.md?id=IDE/编辑器)
21+
* [Spring](README.md?id=Spring)
22+
* [SpringBoot](README.md?id=SpringBoot)
23+
* [辅助工具/轮子](README.md?id=辅助工具)
3024
* [安全篇](README.md?id=安全篇)
3125
* [分布式](README.md?id=分布式)
3226
* [Elasticsearch](README.md?id=Elasticsearch)
3327
* [ZooKeeper](README.md?id=ZooKeeper)
3428
* [高性能](README.md?id=高性能)
3529
* [消息队列](README.md?id=消息队列)
3630
* [高可用](README.md?id=高可用)
37-
* [实战篇](README.md?id=实战篇)
38-
* [开源项目](README.md?id=开源项目)
39-
* [问题解析](README.md?id=问题解析)
40-
* [代码优化](README.md?id=代码优化)
41-
* [性能调优](README.md?id=性能调优)
4231
* [数据库](README.md?id=数据库)
43-
* [Redis](README.md?id=Redis)
4432
* [MySQL](README.md?id=MySQL)
33+
* [Redis](README.md?id=Redis)
4534
* [MongoDB](README.md?id=MongoDB)
4635
* [计算机基础](README.md?id=计算机基础)
4736
* [数据结构](README.md?id=数据结构)
4837
* [前端](README.md?id=前端)
4938
* [求职面试](README.md?id=求职面试)
50-
* [八股文](README.md?id=八股文)
51-
* [面试经验](README.md?id=面试经验)
52-
* [简历](README.md?id=简历)
39+
* [面试题集合](README.md?id=面试题集合)
40+
* [背诵版八股文](README.md?id=背诵版八股文)
41+
* [优质面经](README.md?id=优质面经)
42+
* [面试准备](README.md?id=面试准备)
5343
* [城市选择](README.md?id=城市选择)
5444
* [学习资源](README.md?id=学习资源)
55-
* [资料下载](README.md?id=资料下载)
56-
* [资源推荐](README.md?id=八资源推荐)
57-
* [在线图文教程](README.md?id=在线图文教程)
58-
* [在线视频教程](README.md?id=在线视频教程)
59-
* [优质书单](README.md?id=优质书单)
60-
* [学习建议](README.md?id=学习建议)
61-
* [程序人生](README.md?id=程序人生)
62-
* [码农生活](README.md?id=码农生活)
63-
* [闲聊唠嗑](README.md?id=闲聊唠嗑)
64-
* [人生建议](README.md?id=人生建议)
45+
* [PDF下载](README.md?id=PDF下载)
46+
* [图文教程](README.md?id=图文教程)
47+
* [视频教程](README.md?id=视频教程)
48+
* [优质书单](README.md?id=优质书单)
49+
* [学习建议](README.md?id=学习建议)
6550
* [知识库建设](README.md?id=知识库建设)
6651
* [联系作者](README.md?id=联系作者)
6752
* [心路历程](README.md?id=心路历程)

docs/README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@ actions:
2121
## 推荐阅读
2222

2323
- [CS 学习指南👉](/xuexiluxian/) : 一份涵盖 Java、C 语言、C++、Python、Go、前端、操作系统的全方位 CS 学习路线!清晰且有效!
24-
- [编程喵喵🐱实战项目学习教程](https://github.com/itwanger/codingmore-learning) :codingmore(Spring Boot+Vue 的前后端分离项目,一款值得一试的开源知识库学习网站)的学习教程,需要项目经验的 Java 开发者必备!
2524
- [Java程序员常读书单📚,附下载地址](https://gitee.com/itwanger/JavaBooks) : 助力Java 程序员构建最强知识体系,涵盖Java、设计模式、数据库、数据结构与算法、大数据、架构等等,再也不用辛苦去找下载地址了。
25+
- [编程喵喵🐱实战项目学习教程](https://github.com/itwanger/codingmore-learning) :codingmore(Spring Boot+Vue 的前后端分离项目,一款值得一试的开源知识库学习网站)的学习教程,需要项目经验的 Java 开发者必备!
26+
- [优质文章精选集📗](/sidebar/) :精选一些 Java 程序员应该读一读的优质文章,帮你少走一些弯路!
27+
2628

2729
## PDF
2830

29-
- [最全最硬核的Java面试 “备战” 资料](https://mp.weixin.qq.com/s/US5nTxbC2nYc1hWpn5Bozw)
30-
- [深入浅出 Java 多线程](https://mp.weixin.qq.com/s/pxKrjw_5NTdZfHOKCkwn8w)
31-
- [GitHub 星标 115k+的 Java 教程](https://mp.weixin.qq.com/s/d7Z0QoChNuP9bTwAGh2QCw)
32-
- [重学 Java 设计模式](https://mp.weixin.qq.com/s/PH5AizUAnTz0CuvJclpAKw)
33-
- [LeetCode 题解 Java 版](https://mp.weixin.qq.com/s/wvzB1p9_Yu7n7Ak83DrrdA)
31+
- [👏下载→最全最硬核的Java面试 “备战” 资料](https://mp.weixin.qq.com/s/US5nTxbC2nYc1hWpn5Bozw)
32+
- [👏下载→深入浅出 Java 多线程](https://mp.weixin.qq.com/s/pxKrjw_5NTdZfHOKCkwn8w)
33+
- [👏下载→GitHub 星标 115k+的 Java 教程](https://mp.weixin.qq.com/s/d7Z0QoChNuP9bTwAGh2QCw)
34+
- [👏下载→重学 Java 设计模式](https://mp.weixin.qq.com/s/PH5AizUAnTz0CuvJclpAKw)
35+
- [👏下载→LeetCode 题解 Java 版](https://mp.weixin.qq.com/s/wvzB1p9_Yu7n7Ak83DrrdA)
3436

3537
## 公众号
3638

docs/baguwen/java-basic-34.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
2-
3-
----
4-
先来看一下大纲吧,是不是有一种很满足的感觉?
5-
[TOC]
6-
71
---
2+
category:
3+
- 求职面试
4+
tag:
5+
- 面试题集合
6+
---
7+
8+
# Java:34道精选高频面试题
89

910
## 1.介绍一下 java 吧
1011

1112
java 是一门**开源的跨平台的面向对象的**计算机语言.
1213

13-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-01.png)
14+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-01.png)
1415

1516
跨平台是因为 java 的 class 文件是运行在虚拟机上的,其实跨平台的,而**虚拟机是不同平台有不同版本**,所以说 java 是跨平台的.
1617

1718
面向对象有几个特点:
1819

19-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-02.png)
20+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-02.png)
2021

2122
- 1.**封装**
2223
- 两层含义:一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者'封装'在一个不可分割的**独立单元**(即对象)中
@@ -54,7 +55,7 @@ java 是一门**开源的跨平台的面向对象的**计算机语言.
5455
5556
## 2.java 有哪些数据类型?
5657

57-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-03.png)
58+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-03.png)
5859

5960
java 主要有两种数据类型
6061

@@ -130,7 +131,7 @@ try{
130131
## 7.arrayList 和 linkedList 的区别?
131132

132133

133-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-04.png)
134+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-04.png)
134135

135136
- 1.ArrayList 是实现了基于**数组**的,存储空间是连续的。LinkedList 基于**链表**的,存储空间是不连续的。(LinkedList 是双向链表)
136137

@@ -159,7 +160,7 @@ try{
159160

160161
## 10.那么 hashMap 线程不安全怎么解决?
161162

162-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-05.png)
163+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-05.png)
163164

164165
- 一.给 hashMap **直接加锁**,来保证线程安全
165166
- 二.使用 **hashTable**,比方法一效率高,其实就是在其方法上加了 synchronized 锁
@@ -177,7 +178,7 @@ try{
177178

178179
## 12.介绍一下 hashset 吧
179180

180-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-06.png)
181+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-06.png)
181182

182183
上图是 set 家族整体的结构,
183184

@@ -203,7 +204,7 @@ HashSet 是**基于 HashMap 实现**的,底层**采用 HashMap 来保存元素
203204

204205
## 16.volatile 有什么作用?
205206

206-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-07.png)
207+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-07.png)
207208

208209
- **1.保证内存可见性**
209210
- 可见性是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上就能看到。
@@ -239,7 +240,7 @@ Integer a = 1,Integer b = 1,a==b 结果为**true**
239240

240241
## 19.JMM 是什么?
241242

242-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-08.png)
243+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-08.png)
243244

244245
JMM 就是 **Java内存模型**(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)**屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果**
245246

@@ -316,7 +317,7 @@ public class Singleton {
316317

317318
## 22.volatile 有什么作用
318319

319-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-09.png)
320+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-09.png)
320321

321322
- 1.**保证内存可见性**
322323
- 当一个被volatile关键字修饰的变量被一个线程修改的时候,其他线程可以立刻得到修改之后的结果。当一个线程向被volatile关键字修饰的变量**写入数据**的时候,虚拟机会**强制它被值刷新到主内存中**。当一个线程**读取**被volatile关键字修饰的值的时候,虚拟机会**强制要求它从主内存中读取**
@@ -347,7 +348,7 @@ try {
347348
在 Java1.6 之前的版本中,synchronized 属于重量级锁,效率低下,**锁是** cpu 一个**总量级的资源**,每次获取锁都要和 cpu 申请,非常消耗性能。
348349

349350
**jdk1.6 之后** Java 官方对从 JVM 层面对 synchronized 较大优化,所以现在的 synchronized 锁效率也优化得很不错了,Jdk1.6 之后,为了减少获得锁和释放锁所带来的性能消耗,引入了偏向锁和轻量级锁,**增加了锁升级的过程**,由无锁->偏向锁->自旋锁->重量级锁
350-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-10.png)
351+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-10.png)
351352

352353
增加锁升级的过程主要是**减少用户态到核心态的切换,提高锁的效率,从 jvm 层面优化锁**
353354

@@ -361,7 +362,7 @@ cas 叫做 CompareAndSwap,**比较并交换**,很多地方使用到了它,
361362

362363
当一个线程需要修改一个共享变量的值,完成这个操作需要先取出共享变量的值,赋给 A,基于 A 进行计算,得到新值 B,在用预期原值 A 和内存中的共享变量值进行比较,**如果相同就认为其他线程没有进行修改**,而将新值写入内存
363364

364-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-11.png)
365+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-11.png)
365366

366367
**CAS的缺点**
367368

@@ -382,7 +383,7 @@ ReentrantLock有两种模式,一种是公平锁,一种是非公平锁。
382383

383384
**公平锁**
384385

385-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-12.png)
386+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-12.png)
386387

387388
- 第一步:**获取状态的 state 的值**
388389
- 如果 state=0 即代表锁没有被其它线程占用,执行第二步。
@@ -396,7 +397,7 @@ ReentrantLock有两种模式,一种是公平锁,一种是非公平锁。
396397

397398
**非公平锁**
398399

399-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-13.png)
400+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-13.png)
400401

401402
- 获取状态的 state 的值
402403
- 如果 state=0 即代表锁没有被其它线程占用,则设置当前锁的持有者为当前线程,该操作用 CAS 完成。
@@ -499,7 +500,7 @@ public class Demo {
499500

500501
## 29.线程池的执行流程?
501502

502-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-14.png)
503+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-14.png)
503504

504505
- 判断线程池中的线程数**是否大于设置的核心线程数**
505506
- 如果**小于**,就**创建**一个核心线程来执行任务
@@ -547,13 +548,13 @@ Object obj = new Object();
547548
## 33.聊聊 ThreadLocal 吧
548549

549550
- ThreadLocal其实就是**线程本地变量**,他会在每个线程都创建一个副本,那么在线程之间访问内部副本变量就行了,做到了线程之间互相隔离。
550-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-15.png)
551+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-15.png)
551552
- ThreadLocal 有一个**静态内部类 ThreadLocalMap**,ThreadLocalMap 又包含了一个 Entry 数组,**Entry 本身是一个弱引用**,他的 key 是指向 ThreadLocal 的弱引用,**弱引用的目的是为了防止内存泄露**,如果是强引用那么除非线程结束,否则无法终止,可能会有内存泄漏的风险。
552553
- 但是这样还是会存在内存泄露的问题,假如 key 和 ThreadLocal 对象被回收之后,entry 中就存在 key 为 null ,但是 value 有值的 entry 对象,但是永远没办法被访问到,同样除非线程结束运行。**解决方法就是调用 remove 方法删除 entry 对象**
553554

554555
## 34.一个对象的内存布局是怎么样的?
555556

556-
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/java-basic-34-16.png)
557+
![](https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/baguwen/basic-34-16.png)
557558

558559
- **1.对象头**:
559560
对象头又分为 **MarkWord****Class Pointer** 两部分。

docs/collection/hashmap-interview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
category:
33
- 求职面试
44
tag:
5-
- Java
5+
- 面试题集合
66
---
77

88
# Java HashMap精选面试题

0 commit comments

Comments
 (0)