diff --git a/_config.butterfly.yml b/_config.butterfly.yml
index 330494f..13af49a 100644
--- a/_config.butterfly.yml
+++ b/_config.butterfly.yml
@@ -11,16 +11,16 @@ nav:
menu:
首页: / || fas fa-home
留言板: /contact/ || fas fa-comments
- NAS基础: /categories/nasbase/ || fas fa-cube
- NAS服务: /categories/nasservice/ || fas fa-server
+ NAS技术: /categories/nas/ || fas fa-server
+# NAS从零开始: /categories/fromzero/ || fas fa-cube
# 标签: /tags/ || fas fa-tags
# 文章归档: /archives || fas fa-archive
分类||fas fa-archive:
+ 技术随笔: /categories/other/
Linux基础: /categories/linux/
网络基础: /categories/network/
- NAS基础: /categories/nasbase/
- NAS服务: /categories/nasservice/
- 技术随笔: /categories/other/
+ NAS技术: /categories/nas/
+ NAS从零开始: /categories/fromzero/
工具||fas fa-wrench:
网站导航: https://nav.dreamlyn.cn
B站字幕转换: /html/bsrt.html
diff --git a/_config.yml b/_config.yml
index 05a9eb8..8f4a09f 100644
--- a/_config.yml
+++ b/_config.yml
@@ -72,8 +72,8 @@ default_category: uncategorized
category_map:
Linux基础: linux
网络基础: network
- NAS基础: nasbase
- NAS服务: nasservice
+ NAS技术: nas
+ NAS从零开始: fromzero
技术随笔: other
tag_map:
diff --git a/source/_posts/fromzero/使用VirtualBox虚拟机安装群晖系统.md b/source/_posts/fromzero/使用VirtualBox虚拟机安装群晖系统.md
new file mode 100644
index 0000000..2a8b6f7
--- /dev/null
+++ b/source/_posts/fromzero/使用VirtualBox虚拟机安装群晖系统.md
@@ -0,0 +1,166 @@
+---
+title: 使用VirtualBox虚拟机安装群晖7.1系统
+abbrlink: 1751037144
+date: 2024-04-03 11:10:00
+tags:
+categories:
+keywords:
+description:
+cover:
+---
+>VirtualBox为开源软件,较Vmware更加轻量,在此推荐使用VirtualBox来安装群晖系统。
+>本文主要介绍群晖(DS920+)在VirtualBox虚拟机上的详细安装教程。
+
+# 下载并安装VirtualBox
+
+到[VirtualBox官网](https://www.virtualbox.org/wiki/Downloads)下载最新版的VirtualBox,安装时如图一路下一步即可。
+看到如下界面表示安装完成。
+
+
+
+
+
+# 下载群晖引导
+
+在此给出目前最新版群晖引导的[下载地址](https://oss.dreamlyn.cn/nas/黑群晖/arpl-zh_CN-1.1-beta2a.vmdk-flat.zip)。
+
+# 添加虚拟机
+
+如图在系统中找打合适的位置创建NAS目录,解压刚才下载的群晖引导,并将里面的内容拷贝到创建的目录。
+
+
+
+打开VirtualBox,点击`新建`创建虚拟机。
+
+
+
+如图,名字随便起,文件夹选择刚才创建的文件夹,类型选Linux,版本选Other Linux(64-bit)
+
+
+
+硬件部分按需选择,这里我内存设置4G,cpu4核。
+
+
+
+虚拟硬盘处选择使用已有的虚拟硬盘文件。
+
+
+
+在弹出的框中点击注册
+
+
+
+随后找到先前创建的目录并选择`arpl.vmdk`
+
+
+
+点击完成
+
+
+
+随后再对虚拟机进行配置,点击设置。
+
+
+
+选择存储后,点击添加虚拟硬盘,这块新加的虚拟硬盘是真正安装存储群晖系统的地方,应适当大一些。
+
+
+
+点击创建,选择VDI(VirtualBox磁盘映像)并点击下一步。
+
+
+
+点击下一步
+
+
+
+设置磁盘大小并点击完成。
+
+
+
+选中刚才创建的磁盘并点击选择。
+
+
+
+
+点击网络,将网络连接设置成桥接模式。
+
+
+
+随后点击确定并在主界面点击启动
+
+
+
+# 配置并启动引导
+
+点击启动后,稍等片刻,在如下界面按下回车键开始对引导进行配置。
+
+
+
+看到如下配置后,说明引导已正常启动。
+
+
+
+我们在浏览器中输入红框框出来的地址,`192.168.31.119:7681`进入如下界面。
+
+
+
+选中选择型号并回车,在转到的界面中选择DS920+
+
+
+
+随后选择版本,这里选择42661
+
+
+
+选择SN码,直接选择生成随机SN。
+
+
+
+在插件中选择添加插件并添加`cpuinfo`插件
+
+
+
+插件的加载参数为空,确认
+
+
+
+随后直接选中编译引导并回车,待编译完成后选中启动并回车。
+
+
+
+# 安装群晖系统
+
+下载群晖助手并安装启动,[下载地址](https://template-mine.oss-cn-beijing.aliyuncs.com/nas/blog/synology-assistant-7.0.3-50049.exe)
+
+如图,扫描群晖系统(期间可能需要关闭防火墙)。
+
+
+
+找到DSM未安装的那个就是刚才用虚拟机安装的NAS,我们用浏览器访问对应的IP地址`http://192.168.31.119:5000/`进入如下界面,点击安装。
+
+
+
+从以下链接下载DSM系统
+
+```
+https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS920%2B_42661.pat
+```
+
+点击浏览,并选择刚才下载的DSM系统,点击下一步。
+
+
+
+点继续。
+
+
+
+随后进入安装界面,待进度走到100%后,我们就完成了虚拟机中群晖系统的安装。
+
+
+
+
+
+
+
+
diff --git a/source/_posts/nasserver/NAS中安装Traefik.md b/source/_posts/nas/NAS中安装Traefik.md
similarity index 99%
rename from source/_posts/nasserver/NAS中安装Traefik.md
rename to source/_posts/nas/NAS中安装Traefik.md
index f0eeab4..d6ac87f 100644
--- a/source/_posts/nasserver/NAS中安装Traefik.md
+++ b/source/_posts/nas/NAS中安装Traefik.md
@@ -4,7 +4,7 @@ tags:
- 网络
- NAS技术
- 反向代理
-categories: NAS服务
+categories: NAS技术
description: NAS中安装Traefik作反向代理
abbrlink: 2636364671
date: 2023-02-30 11:02:22
diff --git a/source/_posts/nasserver/NAS中安装docker-compose.md b/source/_posts/nas/NAS中安装docker-compose.md
similarity index 97%
rename from source/_posts/nasserver/NAS中安装docker-compose.md
rename to source/_posts/nas/NAS中安装docker-compose.md
index b734fdf..fe48b2c 100644
--- a/source/_posts/nasserver/NAS中安装docker-compose.md
+++ b/source/_posts/nas/NAS中安装docker-compose.md
@@ -4,7 +4,7 @@ tags:
- docker
- NAS技术
- 反向代理
-categories: NAS服务
+categories: NAS技术
description:
abbrlink: 3251282051
date: 2024-02-28 8:02:22
diff --git a/source/_posts/nasserver/NAS中安装npm.md b/source/_posts/nas/NAS中安装npm.md
similarity index 98%
rename from source/_posts/nasserver/NAS中安装npm.md
rename to source/_posts/nas/NAS中安装npm.md
index c6565a4..854b117 100644
--- a/source/_posts/nasserver/NAS中安装npm.md
+++ b/source/_posts/nas/NAS中安装npm.md
@@ -4,7 +4,7 @@ tags:
- docker
- NAS技术
- 反向代理
-categories: NAS服务
+categories: NAS技术
description: NAS中安装nginx proxy manager作反向代理
abbrlink: 4049218885
date: 2024-02-28 11:02:22
diff --git a/source/_posts/nasbase/NAS使用DDNS.md b/source/_posts/nas/NAS使用DDNS.md
similarity index 99%
rename from source/_posts/nasbase/NAS使用DDNS.md
rename to source/_posts/nas/NAS使用DDNS.md
index b8c7bd4..7ffbfcc 100644
--- a/source/_posts/nasbase/NAS使用DDNS.md
+++ b/source/_posts/nas/NAS使用DDNS.md
@@ -3,7 +3,7 @@ title: NAS使用DDNS
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
abbrlink: 28082
date: 2023-08-22 11:02:22
keywords:
diff --git a/source/_posts/nasserver/NAS使用timymediamanager刮削海报.md b/source/_posts/nas/NAS使用timymediamanager刮削海报.md
similarity index 99%
rename from source/_posts/nasserver/NAS使用timymediamanager刮削海报.md
rename to source/_posts/nas/NAS使用timymediamanager刮削海报.md
index 8ed84fe..809c09e 100644
--- a/source/_posts/nasserver/NAS使用timymediamanager刮削海报.md
+++ b/source/_posts/nas/NAS使用timymediamanager刮削海报.md
@@ -5,7 +5,7 @@ date: 2024-02-29 14:22:51
tags:
- NAS技术
- 影音系统
-categories: NAS服务
+categories: NAS技术
keywords:
description:
cover:
diff --git a/source/_posts/nasbase/NAS双网口改桥接模式.md b/source/_posts/nas/NAS双网口改桥接模式.md
similarity index 99%
rename from source/_posts/nasbase/NAS双网口改桥接模式.md
rename to source/_posts/nas/NAS双网口改桥接模式.md
index c1a346c..8254015 100644
--- a/source/_posts/nasbase/NAS双网口改桥接模式.md
+++ b/source/_posts/nas/NAS双网口改桥接模式.md
@@ -3,7 +3,7 @@ title: NAS双网口改桥接模式
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
abbrlink: 3026110258
date: 2024-02-22 11:02:22
keywords:
diff --git a/source/_posts/nasserver/Nastool中IYUU插件问题修复.md b/source/_posts/nas/Nastool中IYUU插件问题修复.md
similarity index 95%
rename from source/_posts/nasserver/Nastool中IYUU插件问题修复.md
rename to source/_posts/nas/Nastool中IYUU插件问题修复.md
index 9f59edf..2c559f2 100644
--- a/source/_posts/nasserver/Nastool中IYUU插件问题修复.md
+++ b/source/_posts/nas/Nastool中IYUU插件问题修复.md
@@ -5,7 +5,7 @@ tags:
- NAS技术
- 影音系统
- PT
-categories: NAS服务
+categories: NAS技术
description:
abbrlink: 4049218886
date: 2024-03-08 11:02:22
diff --git a/source/_posts/nasbase/Traefik将acme.json 分割成证书.md b/source/_posts/nas/Traefik将acme.json 分割成证书.md
similarity index 98%
rename from source/_posts/nasbase/Traefik将acme.json 分割成证书.md
rename to source/_posts/nas/Traefik将acme.json 分割成证书.md
index b1b5ce4..3059710 100644
--- a/source/_posts/nasbase/Traefik将acme.json 分割成证书.md
+++ b/source/_posts/nas/Traefik将acme.json 分割成证书.md
@@ -2,7 +2,7 @@
title: Traefik将acme.json 分割成证书
tags:
- 网络
-categories: NAS基础
+categories: NAS技术
abbrlink: 60950
date: 2023-06-22 11:02:22
keywords:
diff --git a/source/_posts/nasserver/使用frp进行内网穿透.md b/source/_posts/nas/使用frp进行内网穿透.md
similarity index 99%
rename from source/_posts/nasserver/使用frp进行内网穿透.md
rename to source/_posts/nas/使用frp进行内网穿透.md
index 485eabf..e130a2c 100644
--- a/source/_posts/nasserver/使用frp进行内网穿透.md
+++ b/source/_posts/nas/使用frp进行内网穿透.md
@@ -3,7 +3,7 @@ title: 使用frp进行内网穿透
tags:
- 网络
- NAS技术
-categories: NAS服务
+categories: NAS技术
abbrlink: 25460
date: 2023-02-25 11:02:22
keywords:
diff --git a/source/_posts/nasbase/外网访问NAS.md b/source/_posts/nas/外网访问NAS.md
similarity index 99%
rename from source/_posts/nasbase/外网访问NAS.md
rename to source/_posts/nas/外网访问NAS.md
index f879018..2827279 100644
--- a/source/_posts/nasbase/外网访问NAS.md
+++ b/source/_posts/nas/外网访问NAS.md
@@ -3,7 +3,7 @@ title: 外网访问NAS
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
abbrlink: 4218199689
date: 2024-02-22 11:02:22
keywords:
diff --git a/source/_posts/nasserver/威联通NAS安装旁路由.md b/source/_posts/nas/威联通NAS安装旁路由.md
similarity index 99%
rename from source/_posts/nasserver/威联通NAS安装旁路由.md
rename to source/_posts/nas/威联通NAS安装旁路由.md
index 3a2c361..122f5c0 100644
--- a/source/_posts/nasserver/威联通NAS安装旁路由.md
+++ b/source/_posts/nas/威联通NAS安装旁路由.md
@@ -3,7 +3,7 @@ title: 威联通NAS安装旁路由
tags:
- 网络
- NAS技术
-categories: NAS服务
+categories: NAS技术
abbrlink: 34692
date: 2022-02-26 11:02:22
keywords:
diff --git a/source/_posts/nasbase/将花生壳域名的服务商改为DNSPod.md b/source/_posts/nas/将花生壳域名的服务商改为DNSPod.md
similarity index 98%
rename from source/_posts/nasbase/将花生壳域名的服务商改为DNSPod.md
rename to source/_posts/nas/将花生壳域名的服务商改为DNSPod.md
index fede94b..d786649 100644
--- a/source/_posts/nasbase/将花生壳域名的服务商改为DNSPod.md
+++ b/source/_posts/nas/将花生壳域名的服务商改为DNSPod.md
@@ -2,7 +2,7 @@
title: 将花生壳域名的服务商改为DNSPod
tags:
- 网络
-categories: NAS基础
+categories: NAS技术
abbrlink: 40925
date: 2022-03-21 11:02:22
keywords:
diff --git a/source/_posts/nasbase/找不到群晖NAS的解决办法.md b/source/_posts/nas/找不到群晖NAS的解决办法.md
similarity index 99%
rename from source/_posts/nasbase/找不到群晖NAS的解决办法.md
rename to source/_posts/nas/找不到群晖NAS的解决办法.md
index aea489a..3fa1972 100644
--- a/source/_posts/nasbase/找不到群晖NAS的解决办法.md
+++ b/source/_posts/nas/找不到群晖NAS的解决办法.md
@@ -3,7 +3,7 @@ title: 找不到群晖NAS的解决办法
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
abbrlink: 2241717723
date: 2023-02-22 11:02:22
keywords:
diff --git a/source/_posts/nasbase/网络文件夹目前是以其他用户名和密码进行映射的.md b/source/_posts/nas/网络文件夹目前是以其他用户名和密码进行映射的.md
similarity index 98%
rename from source/_posts/nasbase/网络文件夹目前是以其他用户名和密码进行映射的.md
rename to source/_posts/nas/网络文件夹目前是以其他用户名和密码进行映射的.md
index ae3294d..e0f52e8 100644
--- a/source/_posts/nasbase/网络文件夹目前是以其他用户名和密码进行映射的.md
+++ b/source/_posts/nas/网络文件夹目前是以其他用户名和密码进行映射的.md
@@ -5,7 +5,7 @@ date: 2024-03-12 16:39:26
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
keywords:
description: 在使用局域网内的映射盘来访问NAS的共享文件夹时,发现无法映射成功,提示指定的网络文件夹目前是以其他用户名和密码进行映射的。在查找相关资料后找到问题的解决办法,在此做下记录。
cover:
diff --git a/source/_posts/nasbase/群晖DSM降级教程.md b/source/_posts/nas/群晖DSM降级教程.md
similarity index 99%
rename from source/_posts/nasbase/群晖DSM降级教程.md
rename to source/_posts/nas/群晖DSM降级教程.md
index 8539f56..9cc6a9f 100644
--- a/source/_posts/nasbase/群晖DSM降级教程.md
+++ b/source/_posts/nas/群晖DSM降级教程.md
@@ -5,7 +5,7 @@ date: 2024-02-29 08:20:22
tags:
- 网络
- NAS技术
-categories: NAS基础
+categories: NAS技术
keywords:
description:
cover:
diff --git a/source/_posts/nasserver/群晖NAS安装旁路由.md b/source/_posts/nas/群晖NAS安装旁路由.md
similarity index 99%
rename from source/_posts/nasserver/群晖NAS安装旁路由.md
rename to source/_posts/nas/群晖NAS安装旁路由.md
index ca22a2b..ac9845b 100644
--- a/source/_posts/nasserver/群晖NAS安装旁路由.md
+++ b/source/_posts/nas/群晖NAS安装旁路由.md
@@ -3,7 +3,7 @@ title: 群晖NAS安装旁路由
tags:
- 网络
- NAS技术
-categories: NAS服务
+categories: NAS技术
abbrlink: 43311
date: 2022-02-25 11:02:22
keywords:
diff --git a/source/_posts/other/MySQL索引设计原则.md b/source/_posts/other/MySQL索引设计原则.md
deleted file mode 100644
index 5baba0d..0000000
--- a/source/_posts/other/MySQL索引设计原则.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: MySQL索引设计原则
-tags: Java技术
-categories: 技术随笔
-abbrlink: 167789376
-date: 2024-03-14 16:40:20
-keywords:
-description:
-cover:
----
-
-# 代码先行,索引后上
-一般应该等到主体业务功能开发完毕,把涉及到该表相关sql都要拿出来分析之后再建立索引。
-
-# 联合索引尽量覆盖条件
-设计一个或者两三个联合索引(尽量少建单值索引),让每一个联合索引都尽量去包含sql语句里的where、order by、group by的字段,还要确保这些联合索引的字段顺序尽量满足sql查询的最左前缀原 则。
-
-# 不要在小基数字段上建立索引
-索引基数是指这个字段在表里总共有多少个不同的值,比如一张表总共100万行记录,其中有个性别字段, 其值不是男就是女,那么该字段的基数就是2。
-如果对这种小基数字段建立索引的话,还不如全表扫描了,因为你的索引树里就包含男和女两种值,根本没法进行快速的二分查找,那用索引就没有太大的意义了。
-一般建立索引,尽量使用那些基数比较大的字段,就是值比较多的字段,那么才能发挥出B+树快速二分查找的优势来。
-
-# 长字符串我们可以采用前缀索引
-尽量对字段类型较小的列设计索引,比如说什么tinyint之类的,因为字段类型较小的话,占用磁盘空间也会比较小,此时你在搜索的时候性能也会比较好一点。
-当然,这个所谓的字段类型小一点的列,也不是绝对的,很多时候你就是要针对varchar(255)这种字段建立索引,哪怕多占用一些磁盘空间也是有必要的。
-对于这种varchar(255)的大字段可能会比较占用磁盘空间,可以稍微优化下,比如针对这个字段的前20个字符建立索引,就是说,对这个字段里的每个值的前20个字符放在索引树里,
-类似于 KEY index(name(20),age,position)。此时你在where条件里搜索的时候,如果是根据name字段来搜索,那么此时就会先到索引树里根据name
-字段的前20个字符去搜索,定位到之后前20个字符的前缀匹配的部分数据之后,再回到聚簇索引提取出来完整的name字段值进行比对。
-但是假如你要是order by name,那么此时你的name因为在索引树里仅仅包含了前20个字符,所以这个排序是没法用上索引的, group by也是同理。所以这里大家要对前缀索引有一个了解。
-
-# where与order by冲突时优先where
-在where和order by出现索引设计冲突时,到底是针对where去设计索引,还是针对order by设计索引?到底是让where去用上索引,还是让order by用上索引?
-一般这种时候往往都是让where条件去使用索引来快速筛选出来一部分指定的数据,接着再进行排序。
-因为大多数情况基于索引进行where筛选往往可以最快速度筛选出你要的少部分数据,然后做排序的成本可能会小很多。
-
-# 基于慢sql查询做优化
-可以根据监控后台的一些慢sql,针对这些慢sql查询做特定的索引优化。
diff --git a/source/_posts/other/java中的类加载器.md b/source/_posts/other/java中的类加载器.md
deleted file mode 100644
index 1825716..0000000
--- a/source/_posts/other/java中的类加载器.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: java中的类加载器
-tags: Java技术
-categories: 技术随笔
-abbrlink: 3639892104
-date: 2024-03-06 16:22:05
-keywords:
-description:
-cover:
----
-> java中的类加载器主要有三种:
-> 引导类加载器
-> 扩展类加载器
-> 应用类加载器
-
-# 通过代码了解类加载器
-
-```
-public class TestJDKClassLoader {
- public static void main(String[] args) {
- //打印类加载器
- System.out.println(String.class.getClassLoader()); //不是java对象,打印null
- System.out.println(DESKeyFactory.class.getClassLoader());
- System.out.println(TestJDKClassLoader.class.getClassLoader());
- //类加载器之间的关系
- System.out.println();
- ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
- ClassLoader extClassLoader = appClassLoader.getParent();
- ClassLoader bootstrapLoader = extClassLoader.getParent();
- System.out.println(appClassLoader);
- System.out.println(extClassLoader);
- System.out.println(bootstrapLoader);
-
- System.out.println();
- System.out.println("bootstrapLoader加载以下文件:");
- URL[] urLs = Launcher.getBootstrapClassPath().getURLs();
- for (URL url : urLs) {
- System.out.println(url);
- }
-
- System.out.println();
- System.out.println("extClassLoader加载以下文件:");
- System.out.println(System.getProperty("java.ext.dirs"));
-
- System.out.println();
- System.out.println("appClassLoader加载以下文件");
- System.out.println(System.getProperty("java.class.path"));
-
- }
-}
-```
-
-# 双亲委派机制
-
-JVM在进行类加载时有个双亲委派机制,当它需要去加载类时,自己先不去加载,而是委托给父加载器加载,父加载器又直接委派它的父加载器,直到找到引导类加载器时,他才会去对类进行加载,这时候如果加载不到,也就是在它所管辖的范围内找不到这个类,就会进行委托的退回,说,啊,我不行,还是你自己来吧,这样一直退回到能加载这个类的时候,才会对类进行加载。
-总结起来就是所有类都会优先使用最顶层的类加载器去加载,从而保证了系统的安全性和类加载的唯一性。
-比如我是一个黑客,在用户的系统里写了一个String类,这个类里面做了一些危害系统的代码,这时候双亲委派机制就能有效的避过这个类,他是应用类加载器要加载String时,会委派给上层,上层在委派给上上层,一直到引导类加载器,引导类加载器会直接使用Java自带的String类。
-
-# 全盘负责委托机制
-
-“全盘负责”是指当一个ClassLoder装载一个类时,除非显式的使用另外一个ClassLoder,否则该类所依赖及引用的类也由这个ClassLoder载入
-
-# 自定义类加载器
-
-自定义类加载器只需要继承`java.lang.ClassLoader`类,该类有两个核心方法,一个是`loadClass(String, boolean)`,实现了双亲委派机制,还有一个方法是`findClass`,默认实现是空方法,所以我们自定义类加载器主要是重写`findClass`方法.
-打破双亲委派机制主要就是通过重写`loadClass`方法,去掉它的递归委派的代码。
-
-测试代码
-
-```
-public class MyClassLoaderTest {
- static class MyClassLoader extends ClassLoader {
- private String classPath;
- public MyClassLoader(String classPath) {
- this.classPath = classPath;
- }
- private byte[] loadByte(String name) throws Exception {
- name = name.replaceAll("\\.", "/");
- FileInputStream fis = new FileInputStream(classPath + "/" + name + ".class");
- int len = fis.available();
- byte[] data = new byte[len];
- fis.read(data);
- fis.close();
- return data;
- }
- protected Class> findClass(String name) throws ClassNotFoundException {
- try {
- byte[] data = loadByte(name);
- // defineClass 将一个字节数组转为 Class 对象,
- // 这个字节数组是 class 文件读取后最终的字节数组
- return defineClass(name, data, 0, data.length);
- } catch (Exception e) {
- e.printStackTrace();
- throw new ClassNotFoundException();
- }
- }
- //双亲委派机制
- //沙箱安全机制:自己写的java.lang.String.class类不会被加载,这样可以防止核心API库被随意篡改
- //避免类的重复加载:当父亲已经加载了该类时,就没必要子classloader再加载一次,保证被加载类的唯一性。
- //下面通过重写loadClass来打破双亲委派机制
- protected Class> loadClass(String name, boolean resolve)
- throws ClassNotFoundException {
- synchronized (getClassLoadingLock(name)) {
- // First, check if the class has already been loaded
- Class> c = findLoadedClass(name);
- if (c == null) {
- if (!name.startsWith("com.locaris")) {
- c = this.getParent().loadClass(name);
- } else {
- c = findClass(name);
- }
- sun.misc.PerfCounter.getFindClasses().increment();
- }
- if (resolve) {
- resolveClass(c);
- }
- return c;
- }
-
- }
- }
- public static void main(String args[]) throws Exception {
- // 初始化自定义类加载器,会初始化父类 ClassLoader
- // 其中会把自定义类加载器的父类加载器,设置为应用程序类加载器 AppClassLoader
- MyClassLoader classLoader = new MyClassLoader("D:/test");
- // D 盘创建 test/com/swordsman/jvm 几级目录,将 User 类的复制类 User1 丢入该目录
- Class clazz = classLoader.loadClass("com.youren.jvm.User");
- Object obj = clazz.newInstance();
- Method method = clazz.getDeclaredMethod("sout", null);
- method.invoke(obj, null);
-
- // 这里因为双亲委派机制的原因,
- // 如果 User1 也在 classpath 下,类加载器就是 AppClassLoader
- // 只在 D:/test 下就是自定义加载器
- System.out.println(clazz.getClassLoader().getClass().getName());
- }
-}
-```
diff --git a/source/_posts/other/java程序启动时都发生了什么.md b/source/_posts/other/java程序启动时都发生了什么.md
deleted file mode 100644
index 3a7d727..0000000
--- a/source/_posts/other/java程序启动时都发生了什么.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: java程序启动时都发生了什么
-tags: Java技术
-categories: 技术随笔
-abbrlink: 1818557386
-date: 2024-03-06 14:22:05
-keywords:
-description:
-cover:
----
-
-> 本文主要介绍在我们执行java -jar xxx.jar时都发生了什么,附框图。
-
-当我们执行这个命令时:
-1. java命令会去调用jvm.dll来创建java虚拟机
-2. java虚拟机创建一个引导类加载器,并使用它加载sun.misc.Launcher类
-3. Launcher类创建一些其他的类加载器,比如appclassloader,随后appclassloader会去加载Main.class类。 其中main class是从jar包中的MANIFEST.MF文件找到的。
-
-
-
-加载的过程如下:
-1. 首先把类从硬盘加载到jvm内存,具体是在方法区
-2. 然后对类进行验证,主要是验证这个类的字节码是否符合Java的规范,比如某个字节放Java的主版本,次版本,某个字节放类的常量个数等。
-3. 之后进行准备,主要是对类内的静态变量分配内存并赋予默认值.
-4. 随后进行解析,把类内部的符号变量替换为一些静态地址.
-5. 最后进行初始化,对静态变量赋予初始值。
-
-
-
-> 个人理解:
-> 类加载过程就是读取.class文件到内存中,将其放在方法区内,然后在Java堆区创建一个java.lang.Class对象,通过Class对象来访问方法区中类的数据结构。类加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
diff --git a/source/_posts/other/使用Hexo搭建个人博客.md b/source/_posts/other/使用Hexo搭建个人博客.md
index f086025..e44240d 100644
--- a/source/_posts/other/使用Hexo搭建个人博客.md
+++ b/source/_posts/other/使用Hexo搭建个人博客.md
@@ -93,8 +93,8 @@ default_category: uncategorized
category_map:
Linux基础: linux
网络基础: network
- NAS基础: nasbase
- NAS服务: nasservice
+ NAS技术: nasbase
+ NAS技术: nasservice
技术随笔: other
tag_map:
Linux基础: linux
diff --git a/source/_posts/other/使用jolcore库查看Java对象大小.md b/source/_posts/other/使用jolcore库查看Java对象大小.md
deleted file mode 100644
index 6698081..0000000
--- a/source/_posts/other/使用jolcore库查看Java对象大小.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: 使用jolcore库查看Java对象大小
-tags: Java技术
-categories: 技术随笔
-abbrlink: 155251202
-date: 2024-03-011 14:22:05
-keywords:
-description:
-cover:
----
-
-> 对象大小可以用jolcore包查看,本篇介绍jolcore的基本使用
-
-
-# 引入依赖
-
-```
-
- org.openjdk.jol
- jol-core
- 0.9
-
-```
-# 具体使用
-```
-ClassLayout layout = ClassLayout.parseInstance(new Object());
-System.out.println(layout.toPrintable());
-```
-
-# 测试代码
-```
-import org.openjdk.jol.info.ClassLayout;
-public class JOLSample {
- public static void main(String[] args) {
- ClassLayout layout = ClassLayout.parseInstance(new Object());
- System.out.println(layout.toPrintable());
- System.out.println();
- ClassLayout layout1 = ClassLayout.parseInstance(new int[]{1,2,3,4,5});
- System.out.println(layout1.toPrintable());
- System.out.println();
- ClassLayout layout2 = ClassLayout.parseInstance(new A());
- System.out.println(layout2.toPrintable());
- }
- // -XX:+UseCompressedOops 默认开启的压缩所有指针
- // -XX:+UseCompressedClassPointers 默认开启的只压缩对象头里的类型指针Klass Pointer
- // Oops:Ordinary Object Pointers
- //堆内存大于32G时,指针压缩会失效。
- //堆内存小于4G时,不需要启用指针压缩,jvm会直接去除高32位地址。
- public static class A {
- //8B mark word
- //4B Klass Pointer
- int id = 6; //4B
- String name; //4B
- byte b; //1B
- Object o; //4B
- }
-}
-```
-# 打印结果
-
-```
-java.lang.Object object internals:
- OFFSET SIZE TYPE DESCRIPTION VALUE
- 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
- 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
- 8 4 (object header) 00 1c 2f c5 (00000000 00011100 00101111 11000101) (-986768384)
- 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
-Instance size: 16 bytes
-Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
-
-[I object internals:
- OFFSET SIZE TYPE DESCRIPTION VALUE
- 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
- 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
- 8 4 (object header) 68 0b 2f c5 (01101000 00001011 00101111 11000101) (-986772632)
- 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
- 16 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)
- 20 4 (alignment/padding gap)
- 24 20 int [I. N/A
- 44 4 (loss due to the next object alignment)
-Instance size: 48 bytes
-Space losses: 4 bytes internal + 4 bytes external = 8 bytes total
-
-com.locaris.jvm.JOLSample$A object internals:
- OFFSET SIZE TYPE DESCRIPTION VALUE
- 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
- 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
- 8 4 (object header) 10 f6 9c c5 (00010000 11110110 10011100 11000101) (-979569136)
- 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
- 16 4 int A.id 6
- 20 1 byte A.b 0
- 21 3 (alignment/padding gap)
- 24 8 java.lang.String A.name null
- 32 8 java.lang.Object A.o null
-Instance size: 40 bytes
-Space losses: 3 bytes internal + 0 bytes external = 3 bytes total
-```