2024年Java最全手把手教你用 FastDFS 构建分布式文件管理系统,mysql锁面试题

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

cd /usr/local

tar -zxvf V1.0.43.tar.gz

cd libfastcommon-1.0.43/

./make.sh

./make.sh install

3.一个安装包

接下来我们下载 Tracker,注意,由于 Tracker 和 Storage 是相同的安装包,所以下载一次即可(2.2 小节中不用再次下载)。

安装文件可以从 FastDFS 的 GitHub 仓库上下载,下载地址:https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz

考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。

下载成功后,将下载文件拷贝到 /usr/local 目录下,然后依次执行如下命令安装:

cd /usr/local

tar -zxvf V6.06.tar.gz

cd fastdfs-6.06/

./make.sh

./make.sh install

安装成功后,执行如下命令,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs 目录下:

cd conf/

cp ./* /etc/fdfs/

4.配置

接下来进入 /etc/fdfs/ 目录下进行配置:

打开 tracker.conf 文件:

vi tracker.conf

修改如下配置:

默认端口是 22122,可以根据实际需求修改,我这里就不改了。然后下面配置一下元数据的保存目录(注意目录要存在)。

5.启动

接下来执行如下命令启动 Tracker:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

如此之后,我们的 Tracker 就算安装成功了。

2.2 Storage 安装

简单起见,这里我们搭建一个 Storage 实例即可。Storage 安装也需要 libevent 和 libfastcommon,这两个库的安装参考上文,这里我不在细说。

Storage 本身的安装,也和 Tracker 一致,执行命令也都一样,因为我这里将 Tracker 和 Storage 安装在同一台服务器上,所以不用再执行安装命令了(相当于安装 Tracker 时已经安装了 Storage 了)。

唯一要做的,就是进入到 /etc/fdfs 目录下,配置 Storage:

vi storage.conf

这里一共配置三个地方,分别是 base_path、store_path0 以及 tracker_server ,tracker_server 模板有两个地址,我们这里只有一个,配置完成后,记得注释掉另外一个不用的。

配置完成后,执行如下命令启动 Storage:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

这两个启动完成后,现在就可以做文件的上传了,但是一般如果是图片文件,我们还需要提供一个图片的访问功能,目前来说最佳方案当然是 Nginx 了,所以我们这里连同 Nginx 一起配置好,再来做测试。

2.3 Nginx 安装

Nginx 可以算是 FastDFS 的重要搭档。

Nginx 的安装分为两个步骤:

  • 安装 Nginx

  • 首先在 Storage 下安装 fastdfs-nginx-module

第一步简单,松哥之前专门写过一篇文章扫盲 Nginx,所以 Nginx 安装大家直接参考这里:Nginx 极简入门教程!

接下来看第二步。

首先下载 fastdfs-nginx-module,下载地址:https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz

考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。

下载完成后,将下载的文件拷贝到 /usr/local 目录下。然后进入 /usr/local 目录,分别执行如下命令:

cd /usr/local

tar -zxvf V1.22.tar.gz

然后将 /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf 文件拷贝到 /etc/fdfs/ 目录下,并修改该文件的内容:

vi /etc/fdfs/mod_fastdfs.conf

接下来,回到第一步下载的 nginx 安装文件的解压目录中,执行如下命令,重新配置编译安装:

./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src

make

make install

安装完成后,修改 nginx 的配置文件,如下:

vi /usr/local/nginx/conf/nginx.conf

在这里配置 nginx 请求转发。

配置完成后,启动 nginx,看到如下日志,表示 nginx 启动成功:

ngx_http_fastdfs_set pid=9908

疑问:fastdfs-nginx-module 有啥用

看了整个安装过程之后,很多小伙伴有疑问,到头来还是 nginx 本身直接找到了图片文件目录,fastdfs-nginx-module 到底有啥用?

前面我们说过,Storage 由很多组构成,每个组又是一个小的集群,在每一个组里边,数据会进行同步,但是如果数据还没同步,这个时候就有请求发来了,该怎么办?此时fastdfs-nginx-module 会帮助我们直接从源 Storage 上获取文件。

安装成功了。

3.Java 客户端调用


安装成功后,接下来我们就用 Java 客户端来测试一下文件上传下载。

首先我们来创建一个普通的 Maven 工程,添加如下依赖:

net.oschina.zcx7878

fastdfs-client-java

1.27.0.0

然后,在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties,内容如下:

fastdfs.connect_timeout_in_seconds = 5

fastdfs.network_timeout_in_seconds = 30

fastdfs.charset = UTF-8

fastdfs.http_anti_steal_token = false

fastdfs.http_secret_key = FastDFS1234567890

fastdfs.http_tracker_http_port = 80

fastdfs.tracker_servers = 192.168.91.128:22122

fastdfs.connection_pool.enabled = true

fastdfs.connection_pool.max_count_per_entry = 500

fastdfs.connection_pool.max_idle_time = 3600

fastdfs.connection_pool.max_wait_time_in_ms = 1000

这里的配置基本上都能见名知义,我就不挨个解释了。这里先配置下 fastdfs.tracker_servers,这是 Tracker 的地址,根据实际情况配置即可。

fastdfs.http_secret_key 配置这里先不用管它,后面我会跟大家解释。

3.1 文件上传

配置完成后,先来看文件上传,代码如下:

@Test

void testUpload() {

try {

ClientGlobal.initByProperties(“fastdfs-client.properties”);

TrackerClient tracker = new TrackerClient();

TrackerServer trackerServer = tracker.getConnection();

StorageServer storageServer = null;

StorageClient1 client = new StorageClient1(trackerServer, storageServer);

NameValuePair nvp[] = null;

//上传到文件系统

String fileId = client.upload_file1(“C:\Users\javaboy\Pictures\picpick\1.png”, “png”,

nvp);

logger.info(fileId);

} catch (Exception e) {

e.printStackTrace();

}

}

这里,首先加载配置文件,然后构造一个 TrackerClient 对象,接着再根据这个对象获取到一个 TrackerServer,然后创建一个 StorageClient1 实例。NameValuePair 中保存的是文件的元数据信息,如果有的话,就以 key/value 的方式来设置,如果没有的话,直接给一个 null 即可。

最后,调用 client 的 upload_file1 方法上传文件,第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数就是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径。执行该方法,打印日志如下:

2020-02-29 17:46:03.017 INFO 6184 — [ main] o.j.fastdfs.FastdfsApplicationTests : group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png

group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就是文件的路径,此时,在浏览器中输入 http://192.168.91.128/group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就可以看到上传的图片了。

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

[外链图片转存中…(img-3sVef33W-1714889811076)]

[外链图片转存中…(img-rZdymNmq-1714889811076)]

[外链图片转存中…(img-0LaJOlR5-1714889811076)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值