自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 资源 (2)
  • 收藏
  • 关注

原创 Redis学习笔记(七):底层数据结构和对象

第一章:数据结构与对象一、简单动态字符串(SDS)在Redis中默认字符串的表示使用了简单动态字符串(Simple Dynamic String),而没有使用C语言中的传统字符串(字面量,string literal)。字面量只用来表示一些无需修改的内容。而大部分没内容,如key和字符串value都使用SDS表示。SDS的定义:struct sdshdr{ // 记录buf数组中已经使用的字节数 // 等于SDS所保存的字符串长度 int len; // 记录bu

2021-04-07 11:37:10 1776

原创 SpringBoot中搭建thymeleaf网页遇到Cannot resolve MVC View ‘###‘的问题

原因是配置文件pom.xml中thymeleaf版本与springBoot版本有冲突要引入的thymeleaf依赖是这个: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </depend

2020-12-04 14:48:43 3009

原创 IEAD无法修改maven home directory问题

Idea 2020.2版本之后,无法设置maven home directory为自定义的地址(设置之后每次打开设置还是原来的地址),如果想设置为自己的地址,可以将.mvn/wrapper/maven-wrapper.properties删掉,之后就能设置为自己的地址。...

2020-12-04 14:47:00 2886 2

原创 动手实现简易Spring Ioc和AOP、Spring Bean的生命周期、循环依赖问题

一、简易 Ioc 实现最简单的 IOC 容器只需4步即可实现,如下:加载 xml 配置文件,遍历其中的标签获取标签中的 id 和 class 属性,加载 class 属性对应的类,并创建 bean遍历标签中的标签,获取属性值,并将属性值填充到 bean 中将 bean 注册到 bean 容器中下面就是实现的代码,其中包含的文件作用分别是:SimpleIOC:IOC 的实现类,实现了上面所说的4个步骤SimpleIOCTest: IOC 的测试类Car: IOC 测试使用的 bean

2020-11-22 15:19:25 1924

原创 设计模式(五):代理模式、复合模式、真实世界的模式

十一、代理模式1、概念代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。2、类图首先是Subject,它为RealSubject和Proxy提供接口。通过实现统一接口,Proxy在RealSubject出现的地方取代它RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象客户和RealSubject

2020-11-22 15:19:09 1755

原创 设计模式(四):模板方法模式、迭代器和组合模式、状态模式

八、模板方法模式1、概念模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板就是一个方法,更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责。这可以保证算法的结构保持不变,同时由子类提供部分实现。2、例子将泡茶和冲咖啡的制作步骤通过模板方法模式进行改造//抽象超类中定义了 模板方法public abstract class CaffeineBeverage {

2020-11-22 15:18:58 1630

原创 tf-idf 算法中idf为何使用对数?直接用比值或者其他函数不行吗?

首先介绍一下什么是TF-IDF,然后我们再对问题解答。已经对TF-IDF有一定了解的同学可以直接跳到最后阅读。TF-IDF是什么TF-IDF是一种用于资讯检索与资讯探勘的常用加权技术,一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度,主要用于文本分类的特征选择。在TF-IDF统计中,字词的重要性随着它在一种文件中出现的次数成正比增加,但同时会随着它在语料库中出...

2020-11-22 15:11:59 736

原创 Apriori算法是什么?适用于什么情境?

Apriori适用于什么场景?Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。例如什么商品集合顾客会在同一次购物中购买?最著名的例子莫过于啤酒与尿布的故事。看似两个无关的商品,沃尔玛却发现它们经常被一起购买。这是为什么呢?沃尔玛经过分析后发现,美国的家庭主妇们经常会让她们的丈夫在回家的路上顺道买一些尿布给孩...

2020-11-22 15:11:39 5559 1

原创 Python 的 map 和 reduce 和 Hadoop 的 MapReduce 有什么关系?

结论先说结论,Python 的 map 和 reduce 是Python的内置函数,而 Hadoop 的 MapReduce 是一个计算框架。两者之间没有直接的关系。但是他们的部分计算操作思想是类似的。下面分别介绍下这三个内容。Python的Map下面是Python中Map类的定义(学过Java的同学不要将两者弄混,在Java中Map是一个存储键值的数据结构,相当于Python中的字典...

2020-11-22 15:11:22 355

原创 设计模式(三):模板方法模式、迭代器和组合模式、状态模式

八、模板方法模式1、概念模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板就是一个方法,更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责。这可以保证算法的结构保持不变,同时由子类提供部分实现。2、例子将泡茶和冲咖啡的制作步骤通过模板方法模式进行改造//抽象超类中定义了 模板方法public abstract class CaffeineBeverage {

2020-09-16 14:07:19 1903

原创 设计模式(二):单例模式、命令模式、适配器模式和外观模式

五、单例模式1、概念单例模式确保一个类只有一个实例,并且提供一个全局访问点2、实现单例模式有多种实现方式,不同的实现方式有不同的特点//多线程不安全的单例模式//!!!错误的单例,不建议使用public class Singletion{ private static Singletion instance; private Singletion(){} public static Singletion getInstance(){ i

2020-09-14 08:58:17 1916

原创 设计模式(一):设计模式简介、策略模式、观察者模式、装饰者模式、工厂模式

一、设计模式入门1、面向对象基础抽象封装多态继承2、面向对象原则封装变化:找出程序中会变化得方面,然后将其和固定不变的方面相分离多用组合,少用继承针对接口编程,不针对实现编程为交互对象之间的松耦合设计而努力对扩展开放,对修改关闭依赖倒置原则:要依赖抽象,不要依赖具体类。只和朋友交谈别找我,我会找你类应该只有一个改变的理由3、策略模式定义算法簇,分别封装起来,让它们之间可以相互替换,让算法的变化独立于使用算法的客户。例子:编写各种各样的鸭子类,定义基本的行为呱

2020-09-12 20:34:37 1904

原创 MyBatis-Plus使用笔记(二):MyBatis-Plus增删改查、Wapper条件查询、分页、逻辑删除、性能分析、

一、insert1、插入操作测试:@SpringBootTestclass MybatisPlusApplicationTests { @Autowired UserMapper userMapper; @Test void insertUser() { User user = new User(); user.setName("Ada"); user.setAge(30); user.setEmai

2020-06-19 14:22:39 3793

原创 MyBatis-Plus使用笔记(一):SpringBoot集成MyBatis-Plus

一、创建并初始化数据库1、创建数据库:mybatis_plus2、创建 User 表其表结构如下:[email protected]@[email protected]@[email protected]其对应的数据库 Schema 脚本如下

2020-06-18 23:10:45 1784

原创 Docker学习笔记(三):DockerFile简介、DockerFile构建镜像、发布镜像

DockerFile详解1、DockerFile基本介绍DockerFile是用来构建Docker镜像文件,是由一系列命令和参数构成的脚本。构建步骤:编写一个Dockerfile文件docker build 构建成为一个镜像docker run运行一个镜像docker push 发布镜像(Docker Hub,阿里云仓库)可以看到从Docker Hub点击某个镜像的某个版本号,进去之后看到就是Dockerfile文件,以CentOS 7为例:2、DockerFile构建过程基础:

2020-06-17 22:36:44 1914

原创 Docker学习笔记(二):Docker镜像原理、Docker数据卷(挂载)作用和使用

Docker镜像详解1、镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。所有应用打包成docker镜像,就可以直接跑起来2、UnionFS(联合文件系统)UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite sever

2020-06-17 15:25:28 2668 1

原创 Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令

Docker概述1、简介docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,并且容器开销极其低。docker官网:https://www.docker.com/docker文档:https://docs.docker.com/docker hub:https://hub.doc

2020-06-16 18:02:53 1471

原创 Netty学习笔记(五):Netty实现简易版Dubbo RPC

第 9 章 实现简易版 dubbo RPC一、RPC 基本介绍RPC(RemoteProcedure Call)— 远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程RPC 能够实现两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样:常见的 RPC 框架有: 比较知名的如阿里的Dubbo、 google的gRPC、 Go语言的rpcx、 Apache的thrift,Spring 旗下的 S

2020-06-14 10:27:13 1005

原创 Netty学习笔记(四):Netty应用(群聊、心跳机制、长连接)、Protobfuf、编解码器、TCP粘包和拆包

第 5 章 Netty 应用实例一、Netty 应用实例-群聊系统1、要求编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) ,实现多人群聊 。服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发 得到)2、实现服务器端public class ChatGroupServer { private static final int PORT = 6

2020-06-13 16:31:51 1199

原创 Netty学习笔记(三):Netty简介、线程模型、Netty应用实例、Netty核心组件介绍

第 4 章 Netty 详解一、Netty简介1、NIO 存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,必须对多线程 和网络编程非常熟悉,才能编写出高质量的 NIO 程序。开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流

2020-06-11 19:09:54 1175

原创 Netty学习笔记(二):NIO简介、缓冲区(Buffer)、通道(Channel)、选择器(Selector)、NIO编程、零拷贝、AIO

第 3 章 JavaNIO 编程一、简介1、基本概念JavaNIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的 输入/输出的新特性,被统称为 NIO(也称为 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO 有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)NIO 是 面向缓冲

2020-06-09 23:35:38 1618

原创 Netty学习笔记(一):Netty简介、三种IO方式、BIO工作机制、BIO应用实例

第 1 章 Netty 背景介绍一、Netty简介Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Clients 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景二、应用场景在分布式系统中,各

2020-06-06 23:48:45 1177

原创 Java并发学习笔记(十):线程安全集合类、ConcurrentHashMap原理、LinkedBlockingQueue 原理、CopyOnWriteArrayList

JUC七、线程安全集合类概述线程安全集合类可以分为三大类:遗留的线程安全集合如 Hashtable , Vector(直接用synchronized修饰方法,效率低)使用 Collections 装饰的线程安全集合(装饰器模式,使用synchronized修饰方法),如:Collections.synchronizedCollectionCollections.synchronizedListCollections.synchronizedMapCollections.synch

2020-06-05 22:59:01 1281

原创 Java并发学习笔记(九):Semaphore、CountdownLatch、CyclicBarrier

JUC四、Semaphore1、基本使用信号量,用来限制能同时访问共享资源的线程上限。public static void main(String[] args) { //创建Semaphore 对象,参数用户限定共享变量的个数 Semaphore semaphore = new Semaphore(3); //10线程同时运行 for (int i = 0; i < 10; i++) { new Thread(()->{

2020-06-05 10:34:51 928

原创 Java并发学习笔记(八):AQS(AbstractQueuedSynchronizer)、ReentrantLock 原理、读写锁使用和原理

J.U.C一、AQS 原理1、概述AQS 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取 锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问

2020-06-03 23:50:44 1127

原创 Java并发学习笔记(七):线程池、自定义线程池、任务调度线程池、Tomcat线程池、Fork/Join

并发工具一、线程池线程池是指管理一组同构工作线程的线程的资源池。线程池与**工作队列(Work Queue)模切相关,工作队列中保存了所有等待知心的任务。线程池中的工作线程(Work Thread)**的任务很简单:从工作队列中获取一个任务,执行任务,然后返回线程池并等待下一个任务。使用线程池的好处是:通过重用现有的线程而不是创建新线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销。当请求到达时,工作线程通常已经存在,因此不会由于等待创建工作线程而延迟任务的执行,从而提高响应性

2020-06-03 13:13:31 1838

原创 Java并发学习笔记(六):不可变、final、保护性拷贝、享元模式、final原理、无状态

不可变一、 日期转换的问题1、引入下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) { new Thread(() -> { try { System.out.println(sdf.parse("1951-04-21"));

2020-06-01 15:42:44 1105

原创 Java并发学习笔记(五):乐观锁、CAS(比较交换)使用和原理、原子整数、原子引用、原子数组、原子累加器、Unsafe

乐观锁(非阻塞)一、CAS(比较交换) 与 volatile1、引入现在需要在多线程的情况下对一个账户扣款操作,除了使用synchronized方法, 还可以使用AtomicInteger 的解决问题: private AtomicInteger balance; ... public void withdraw(Integer amount) { // 需要不断尝试,直到成功为止 while (true) { int pre

2020-05-31 13:51:23 1160

原创 Java并发学习笔记(四):Java内存模型(JMM)、可见性、有序性、volatile使用、volatile原理、线程安全单例、Happens-Before

Java内存模型一、简介Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。其中所指的变量包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的。工作原理:Java内存模型规定了所有变量都存储在主内存(Main Memory)中,每条线程还有自己的工作内存(Work Memory,可以与高速缓存类比),现成的工作内存保存了该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值等

2020-05-30 15:45:25 1205 1

原创 Java并发学习笔记(三):Wait\Notify、保护性暂停、生产者消费者、Park\Unpark、线程状态转换、活跃性、ReentryantLock、顺序控制

一、Wait和Notify1、原理Wait和Notify用于等待。其原理为:Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态WAITING 线程会在 Owner 线程调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片BLOCKED 线程会在 Owner 线程释放锁时唤醒2、相关API

2020-05-29 16:05:57 1489

原创 Java并发学习笔记(二):synchronized使用、synchronized原理、Monitor管程、轻量级锁、自旋优化、偏向锁、锁消除

共享模型之管程一、引入看看下面的例子,两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int counter = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Runnable() { public void run() {

2020-05-28 19:55:43 1366 1

原创 Java并发学习笔记(一):线程和进程、线程的基本使用、线程相关方法、线程运行原理、线程的状态

简介一、进程与线程1、进程:进程是由指令和数据组成的,但这些指令要运行,数据要读写,就必须将指令加载到CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络设备。进程就是用来加载指令、管理I/O、管理内存当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就启动了一个进程进程可以视为程序的一个运行实例(程序是静态的,进程是动态的),大部分程序可以运行多个进程(浏览器、记事本等),也有的程序只运行一个进程(360等)2、线程:一个进程中可以有一到多个进程一个进程就是一段指令流,将

2020-05-26 23:37:59 1352

原创 JVM学习笔记(七):即时编译器、提前编译器、编译器优化技术、方法内联、逃逸分析

后端编译与优化如何把字节码看作是程序的中间表达形式,那么编译器无论何时、在何种状态下把Class文件转换为本地基础设施(硬件指令集、操作系统)相关的二进制机器码,它都可以视为整个编译过程的后端后端编译主要包括即时编译(Just In Time)和提前编译(Ahead Of Time),下面分别来介绍一下这两种形式即时编译器目前主流的两款商用Java虚拟机(HotSpot、OpenJ9)里,Java程序最初都是通过解释器(Interpreter)进行执行的,当虚拟机发现某个方法或者代码块的运行特别频繁

2020-05-24 17:35:38 1794

原创 JVM学习笔记(六):Javac编译器、语法糖、泛型

前端编译与优化编译器概述Java中的编译器主要分为三种:前端编译器:把*.java文件转变为*.class文件的过程。代表有JDK的Javac即时编译器:(常称为JIT编译器,Just In Time Compiler)运行期把字节码转变为本地机器的过程。代表有HotSpot虚拟机的C1,C2编译器提前编译器:(常称为AOT编译器,Ahead Of Time Compiler)直接把程序编译成目标机器指令相关的二进制代码的过程Java中即时编译器在运行期的优化过程,支撑了程序执行效率的不断提

2020-05-22 16:14:39 740

原创 JVM学习笔记(五):运行时栈帧结构、方法调用、基于栈的字节码解释执行引擎

虚拟机字节码执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎是由软件自行实现的,因此可以不受物理条件制约,定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式Java虚拟机通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备。但是从外观上,所有的Java虚拟机的执行引擎输入和输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的

2020-05-21 11:41:21 834

原创 JVM学习笔记(四):类加载过程、类加载器、双亲委派

虚拟机类加载机制简介Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就被称为虚拟机的类加载机制。特点:与编译时进行连接的语言不同,Java语言的类型加载、连接和初始化过程都在程序运行期间完成。这样做的会让类加载时稍微增加一些性能开销,但好处是提供了极高的扩展性和灵活性。例如提供了接口与实现的动态绑定(动态多态)。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载

2020-05-18 14:54:14 793

原创 JVM学习笔记(三):类文件结构、字节码指令简介

类文件结构Java虚拟机规范简介平台无关性(一次编写,到处运行):运行在各种不同硬件平台和操作系统上的Java虚拟机都在可以载入和执行同一种平台无关的字节码,从而实现程序的“一次编写,到处运行”。任何一个Class文件都对应着唯一的一个类或者接口的定义信息(但是反过来说,类或者接口并不一定都定义在文件中(譬如类和接口也可以动态生成,直接送入类加载器))。Class文件是一组以8个字节为基础单位的二进制流,各个项目按照严格的顺序紧凑地排列在文件,中间没有任何分隔符。Class文件由两种数据结构组成

2020-05-16 12:37:46 803

原创 JVM学习笔记(二):垃圾回收、垃圾回收算法、垃圾回收器(Serial、Parallel、CMC、G1)、内存分配原则实战

垃圾回收一、判断对象是否可以被回收1、引用计数计数法内容:在对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一;当引用失效时,计数器就减一;任何时刻计数器为零的对象都是不可能在被使用的缺点:无法解决对象之间的循环引用问题。如下图所示对象A和对象B,他们之间相互引用,除此之外再无任何引用,则他们的引用计数器值都为1,但实际上这两个对象都不可能在被访问了,而且无法被回收。2、可达性分析算法内容:通过一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始根据引用关系向下搜索,

2020-05-13 17:53:49 1544

原创 Nginx入门

Nginx基本概念什么是Nginx?Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。什么是正向代理?如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。什么是反向代理?反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只 需要将请求发送到反向代理服务器,由反

2020-05-13 17:43:50 543

原创 Docker修改容器内部文件的方法

Docker修改容器内部文件的方法一共有三种,下面进行一一介绍。1、进入容器内部修改使用下面的命令以命令行的形式可以进入容器的内部对文件进行修改。docker exec -it 容器ID /bin/bash不过里面没有vim,需要自行安装,安装代码如下所示。不过不推荐这种形式,因为里边的文件是临时的,容器被删除之后,配置就失效了,需要从新配置。apt-get updateapt-get install vim2、通过docker cp拷贝进行修改可以通过下面的代码将需要修改的文件拷贝出来

2020-05-11 21:15:56 35045

Mooc项目数据库脚本.rar

Mooc项目数据库建表语句。

2020-06-19

hit-oslab-linux-20110823.tar

hit-oslab-linux-20110823.tar

2017-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除