转载自:https://cloud.tencent.com/developer/article/1833131
docker容器启动后怎么修改端口映射?在docker run创建并运行容器的时候,可以通过-p指定端口映射规则。但是,也会遇到刚开始忘记设置端口映射或者设置错了需要修改的情况。当docker start运行容器后,并没有提供一个-p选项或设置,让你修改指定端口映射规则。
通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。
方法一:删除原有容器,重新建新容器这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就比较麻烦了。
方法二:利用docker commit新构镜像docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。
1、停止docker容器
1d ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html
Swift提供了三种主要集合类型,称为数组、集合和字典,用于存储值集合。数组是有序的值集合。集合是唯一值的无序集合。字典是键值关联的无序集合。
../_images/CollectionTypes_intro_2x.png
Swift 中的数组、集合和字典始终清楚可以存储的值和键的类型。这意味着您不能错误地将错误类型的值插入集合中。这也意味着您可以对从集合中检索的值类型有信心。
注意
Swift的数组、集合和字典类型作为通用集合实现。有关泛型类型和集合的更多信息,请参阅泛型。
收藏品的可变性如果您创建一个数组、集合或字典,并将其分配给变量,则创建的集合将是可变的。这意味着您可以在集合创建后通过添加、删除或更改集合中的项目来更改(或突变)。如果您将数组、集合或字典分配给常量,则该集合是不可变的,其大小和内容无法更改。
注意
在集合不需要更改的所有情况下,创建不可变集合是良好做法。这样做使您更容易对代码进行推理,并使S ...
编程分享
未读翻译自:https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html
除了基本运算符中描述的运算符外,Swift还提供了几个高级运算符来执行更复杂的值操作。这些包括您将熟悉的C和Objective-C的所有位和位移位运算符。
与C中的算术运算符不同,Swift中的算术运算符默认不会溢出。溢出行为被困住,并报告为错误。要选择溢出行为,请使用Swift的第二组默认溢出的算术运算符,例如溢出加法运算符(&+)。所有这些溢出运算符都以安培和(&)开头。
当您定义自己的结构、类和枚举时,为这些自定义类型提供您自己的标准Swift运算符的实现可能会很有用。Swift可以轻松提供这些运算符的定制实现,并准确确定它们对您创建的每个类型的行为。
您不限于预定义的运算符。Swift允许您自由定义自己的自定义内缀、前缀、后缀和赋值运算符,并具有自定义优先级和关联性值。这些运算符可以像任何预定义运算符一样在您的代码中使用和采用,您甚至可以扩展现有类型以支持您定义的自定义运算符。
按位运算符按位运算符使您能够操作数据 ...
1. Tomcat 安装/服务启动与关闭1.1. Linux ContOS7 安装 Tomcat9为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐。
更多命令学习推荐:
1.1.1. 下载Linux版Tomcat包tar.gz:Linux环境下的压缩包,免安装!
1、手动在Tomcat官网下载,并使用XFTP将文件上传至Linux指定目录下(为便于管理建议放在当前用户/home/XXX目录下)。
2、使用命令下载。(默认文件保存在当前登录用户所在目录)
1wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
1.1.2. 解压安装Tomcat91、在/usr/local目录下新建目录Apache。(用于存放Tomcat的安装位置)。
2、进入下载好的Tomcat压缩包地址路径,解压Tomcat至/usr/local ...
介绍内容包含:Vue.js是什么、Vue项目搭建。
Vue 官方文档
1. Vue.js 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
2. Vue项目搭建2.1. 什么是vue-cliVue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供:
通过 @vue/cli 实现的交互式的项目脚手架。
通过 @vue/cli + @vue/cli-service-global 实现的零配置原型开发。
一个运行时依赖 (@vue/cli-service),这个依赖:(1)可升级;(2)基于 webpack 构建,并带有合理的默认配置;(3)可以通过项目内的配置文件进行配置;(4)可以通过插件进行扩展。
一个丰富的官方插件集合,集成 ...
1. 引入B站视频1.1. 效果https://www.notion.so//player.bilibili.com/player.html?aid=420367466&bvid=BV1N3411q7z7&cid=401728312&page=1&as_wide=1&high_quality=1&danmaku=0
代码:
1<iframe src="//player.bilibili.com/player.html?aid=420367466&bvid=BV1N3411q7z7&cid=401728312&page=1&as_wide=1&high_quality=1&danmaku=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="tr ...
编程分享
未读
以折叠面板的形式进行组件描述,点击对应的面板会展示对应信息。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103/** * @description 将扁平化数据 转换成 树状结构 * @param {Array} arrayList 扁平化的数据 * @param {String} pidStr parentId的key名 * @param {String} idStr id的key名 * @param {String} childrenStr children的key名 ...
前往 Github
1. PubSubJS 介绍PubSubJS是一个用JavaScript编写的基于主题的发布/订阅库。
PubSubJS具有同步解耦,因此主题是异步发布的。这有助于保持程序的可预测性,因为在消费者处理主题时,主题的发起者不会被阻止。
对于冒险家来说,PubSubJS还支持同步主题发布。这可能会在某些环境中(浏览器,不是所有环境)加快速度,但也可能导致一些非常难以推理的程序,即一个主题触发同一执行链中另一个主题的发布。
单一流程PubSubJS旨在用于单个进程,不是多进程应用程序(如Node.js –具有许多子进程的集群)的好候选程序。如果您的Node.js应用程序是一个单一的进程应用程序,那么您就很好。如果它是(或将要)一个多进程应用程序,您可能最好使用redis Pub/Sub或类似
主要功能
无依赖项
同步解耦
ES3兼容。PubSubJS应该能够在可以执行JavaScript的任何地方运行。浏览器、服务器、电子书阅读器、旧手机、游戏机。
AMD/CommonJS模块支持
不修改订阅者(jQuery自定义事件修改订阅者)
易于理 ...
编程分享
未读1. 相关信息描述1.1. 数据库并发场景描述表中有一属性,记录着当前记录被查询的次数。每一次查询之后会把处理过程甩给event(观察者模式)。如果一段时间内访问量变大会出现并发问题。并发会导致数据的不准确。
1.2. 什么是乐观锁
乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号等于数据库表当前版本号,则予以更新,否则认为是过期数据。
2. 实现2.1. 场景描述SpringBoot + Mysql ...
外网 访问内网服务器。
1. frp(提供软件服务)
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
frp github | bilibili 视频教程 | frp中文文档 | frp下载地址 | 官方示例
1.1. 阅读frp中文文档移步到官网 -> frp中文文档
frp需要配置两端,客户端和服务端,服务端是具有公网ip的服务器,客户端是内网中的服务器。
1.2. 下载frp下载地址
根据操作系统选择对应的版本。
1.3. 配置 服务端和客户端
目录介绍:frpc前缀的文件 ...