分享
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
Java高级架构面试知识整理:
今天我们就来看下Docker镜像bolingcavalry/openjdksrc11:0.0.2的制作过程,看看它做了哪些事情来简化下载过程;
环境信息
-
操作系统:Ubuntu 16.04.5 LTS;
-
Docker:18.06.1-ce;
准备材料
本次镜像用到了以下材料:
-
Dockerfile:制作Docker镜像的脚本文件;
-
cmd.sh:容器启动后执行的命令脚本;
-
OpenJDK11源码压缩包(参考《Ubuntu环境下载OpenJDK11源码》);
您可以选择直接从GitHub下载上述所有内容,地址和链接信息如下表所示:
| 名称 | 链接 | 备注 |
| :-- | :-- | :-- |
| 项目主页 | https://github.com/zq2599/openjdksrc11 | 该项目在GitHub上的主页 |
| git仓库地址(https) | https://github.com/zq2599/openjdksrc11.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh) | git@github.com:zq2599/openjdksrc11.git | 该项目源码的仓库地址,ssh协议 |
要注意的问题
制作镜像前有两个问题先考虑好:
-
基础镜像尽量小,由于容器启动后要执行一些shell命令,所以选用仅含bash工具的bash:5.0-rc;
-
OpenJDK11源码包不小(超过1G),因此做成的镜像也很大,用户下载镜像时,一旦网络问题下载失败,docker会自动重试,此时是重新下载,这意味着之前的下载都白做了,为了缓解这个问题,可以把整个源码压缩包分割成多个小文件,这样虽然整体大小不变,但是失败时重新下载的文件是很小的,在linux环境执行以下命令,将整个OpenJDK11源码压缩包分割成多个最大10兆的文件:
split -b 10m jdk11.tar.gz jdk11-
编写Dockerfile
Dockerfile内容如下,可见大部分内容是复制文件的操作,其余部分已有详细的注释,就不多说了:
Docker image of source for OpenJDK
VERSION 0.0.2
Author: bolingcavalry
#基础镜像使用bash:5.0-rc,特点是体积小
FROM bash:5.0-rc
#作者
MAINTAINER BolingCavalry zq2599@gmail.com
#定义源码存放目录
ENV SRC_PATH /src
#定义OpenJDK源码文件夹名称
ENV OPENJDK_SRC_PACKAGE_NAME jdk11
#创建目录
RUN mkdir $SRC_PATH
#把分割过的源码复制到工作目录,这么写可以保证每个文件layer都不大,这样下载镜像时如果中途失败,就不用重新下载一个巨大的layer
COPY ./$OPENJDK_SRC_PACKAGE_NAME-af $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-an $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-av $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bd $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bl $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bt $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cb $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cj $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cr $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cz $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dh $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dp $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dx $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ef $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ag $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ao $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-aw $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-be $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bm $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bu $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cc $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ck $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cs $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-da $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-di $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dq $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dy $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-eg $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ah $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ap $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ax $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bf $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bn $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bv $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cd $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cl $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ct $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-db $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dj $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dr $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dz $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-eh $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-aa $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ai $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-aq $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ay $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bg $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bo $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bw $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ce $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cm $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cu $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dc $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dk $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ds $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ea $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ei $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ab $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-aj $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ar $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-az $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bh $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bp $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-bx $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cf $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cn $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-cv $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dd $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dl $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-dt $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-eb $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ej $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ac $SRC_PATH/
COPY ./$OPENJDK_SRC_PACKAGE_NAME-ak $SRC_PATH/
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
T20E-1715104655141)]
[外链图片转存中…(img-UJev85ne-1715104655141)]
[外链图片转存中…(img-RFrMlMOq-1715104655141)]