1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-07-28 12:22:17 +08:00

Compare commits

...

4 Commits

Author SHA1 Message Date
guide
04a9edb307 [docs update]操作系统替换为哈工大李治军老师主讲的 2022-04-14 14:58:54 +08:00
guide
aef31f195a Update java-basic-questions-01.md 2022-04-14 13:25:57 +08:00
guide
a71b7cebdc Update memory-area.md 2022-04-14 09:39:19 +08:00
guide
7d45aaba78 Update mysql-index.md 2022-04-14 09:23:23 +08:00
4 changed files with 24 additions and 12 deletions

View File

@ -42,11 +42,23 @@ head:
- **[《操作系统设计与实现》](https://book.douban.com/subject/2044818/)** :操作系统的权威教学教材。
- **[《Orange'S:一个操作系统的实现》](https://book.douban.com/subject/3735649/)** 从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。配合《操作系统设计与实现》一起食用更佳!
如果你比较喜欢看视频的话,我建议你可以看看北京交通大学的慕课[《操作系统》](https://www.icourse163.org/course/NJTU-1003245001)
如果你比较喜欢看视频的话,推荐哈工大李治军老师主讲的慕课 [《操作系统》](https://www.icourse163.org/course/HIT-1002531008),内容质量吊打一众国家精品课程
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/booksimage-20201204131429567.png)
课程的大纲如下:
这个视频课程基本把操作系统的体系结构、设计机理及实现方法和技术相关重要的知识点介绍的差不多了。
![课程大纲](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books/image-20220414144527747.png)
主要讲了一个基本操作系统中的六个基本模块: CPU 管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块 。
课程难度还是比较大的,尤其是课后的 lab。如果大家想要真正搞懂操作系统底层原理的话对应的 lab 能做尽量做一下。正如李治军老师说的那样:“纸上得来终觉浅,绝知此事要躬行”。
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books/image-20220414145210679.png)
如果你能独立完成几个 lab 的话,我相信你对操作系统的理解绝对要上升几个台阶。当然了,如果你仅仅是为了突击面试的话,那就不需要做 lab 了。
说点心里话,我本人非常喜欢李治军老师讲的课,我觉得他是国内不可多得的好老师。他知道我们国内的教程和国外的差距在哪里,也知道国内的学生和国外学生的差距在哪里,他自己在努力着通过自己的方式来缩小这个差距。真心感谢,期待李治军老师的下一个课程。
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books/image-20220414145249714.png)
还有下面这个国外的课程 [《深入理解计算机系统 》](https://www.bilibili.com/video/av31289365?from=search&seid=16298868573410423104) 也很不错。

View File

@ -92,7 +92,7 @@ InnoDB 引擎中,其数据文件本身就是索引文件。相比 MyISAM
在 MySQL 的 InnoDB 的表中当没有显示的指定表的主键时InnoDB 会自动先检查表中是否有唯一索引且不允许存在null值的字段如果有则选择该字段为默认的主键否则 InnoDB 将会自动创建一个 6Byte 的自增主键。
![](http://101.43.132.98:98/images/cluster-index.png)
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/open-source-project/cluster-index.png)
### 二级索引(辅助索引)
@ -110,7 +110,7 @@ InnoDB 引擎中,其数据文件本身就是索引文件。相比 MyISAM
二级索引:
![](http://101.43.132.98:98/images/no-cluster-index.png)
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/open-source-project/no-cluster-index.png)
## 聚集索引与非聚集索引

View File

@ -574,9 +574,9 @@ class BasicTypeVar{
}
```
### 包装类型的常量池技术了解么?
### 包装类型的缓存机制了解么?
Java 基本类型的包装类的大部分都实现了常量池技术
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能
`Byte`,`Short`,`Integer`,`Long` 这 4 种包装类默认创建了数值 **[-128127]** 的相应类型的缓存数据,`Character` 创建了数值在 **[0,127]** 范围的缓存数据,`Boolean` 直接返回 `True` or `False`
@ -629,7 +629,7 @@ public static Boolean valueOf(boolean b) {
如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。
两种浮点数类型的包装类 `Float`,`Double` 并没有实现常量池技术
两种浮点数类型的包装类 `Float`,`Double` 并没有实现缓存机制
```java
Integer i1 = 33;
@ -653,7 +653,7 @@ Integer i2 = new Integer(40);
System.out.println(i1==i2);
```
`Integer i1=40` 这一行代码会发生装箱,也就是说这行代码等价于 `Integer i1=Integer.valueOf(40)` 。因此,`i1` 直接使用的是常量池中的对象。而`Integer i2 = new Integer(40)` 会直接创建新的对象。
`Integer i1=40` 这一行代码会发生装箱,也就是说这行代码等价于 `Integer i1=Integer.valueOf(40)` 。因此,`i1` 直接使用的是缓存中的对象。而`Integer i2 = new Integer(40)` 会直接创建新的对象。
因此,答案是 `false` 。你答对了吗?

View File

@ -226,11 +226,11 @@ HotSpot 虚拟机中字符串常量池的实现是 `src/hotspot/share/classfile/
JDK1.7 之前字符串常量池存放在永久代。JDK1.7 字符串常量池和静态变量从永久代移动了 Java 堆中。
![](pictures/java内存区域/method-area-jdk1.6.png)
![](./pictures/java内存区域/method-area-jdk1.6.png)
![](pictures/java内存区域/method-area-jdk1.7.png)
![](./pictures/java内存区域/method-area-jdk1.7.png)
![](pictures/java内存区域/method-area-jdk1.8.png)
![](./pictures/java内存区域/method-area-jdk1.8.png)
**JDK 1.7 为什么要将字符串常量池移动到堆中?**