文章字数:149,阅读全文大约需要1分钟
现象
使用dhtmlx
的grid
组件时发现进行刷新操作之后浏览器的Network
疯狂增加条目,即一直在请求后端。
排查
- 通过请求定位到那个功能有问题
- 后端打断点,发现返回的数据数量和
total
的值不一致。 - 原因是我在后台做了数据过滤,但是没有重新给
total
赋值 - 组件发现数据不完整,于是重新请求。
- 因为后端代码的原因,再次请求也是不完整的。于是无限循环
文章字数:844,阅读全文大约需要3分钟
dockerfile
1 | FROM nginx |
FROM
基于那个镜像做的定制RUN
执行后面的命令,执行一次会生成一层镜像,避免镜像膨胀过大,多个命令可以用&&
连接,而不是多个RUN
1 | COPY [--chown=<user>:<group>] <源路径1>... <目标路径> |
[--chown=<user>:<group>]
: 可选,更改复制到容器内文件的拥有者和所属组<源路径>
可以是文件或目录,也可以是通配符。需要满足go
的filepath.Match
规则<目标路径>
容器内的路径,不存在会自动创建COPY
tar
压缩文件时使用,可以自动解压到目标目录gzip
,bzip2
,xz
压缩格式两种使用格式
1 | RUN <命令行命令> |
多个命令一起执行
1 | RUN <命令行命令> \ |
RUN
cmd
命令,可被启动时传入的cmd
覆盖。作用即设置默认cmd
命令cmd
只有最后一条有用--entrypoint
覆盖CMD
一样,容器启动后的默认执行的,一般搭配CMD
一起使用,组合成一条命令1 | FROM nginx |
这样运行时会执行
1 | nginx -c /etc/nginx/nginx.conf |
然后可以通过修改cmd
达到参数变化的效果
1 | docker run nginx:test -c /etc/nginx/new.conf |
1 | ENV <key> <value> |
1 | ENV NODE_VERSION 7.2.0 |
ENV
类似,只是作用域不同。ARG
设置的智能在dockerfile
里有效果--build-arg <参数名>=<值>
覆盖-v
覆盖1 | VOLUME ["<路径1>", "<路径2>"...] |
1 | EXPOSE <端口1> [<端口2>...] |
1 | USER <用户名>[:<用户组>] |
1 | HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 |
dockerfile
使用FROM
调用次dockerfile
时会执行1 | ONBUILD <其它指令> |
metadata
1 | LABEL <key>=<value> <key>=<value> <key>=<value> ... |
文章字数:1482,阅读全文大约需要5分钟
Image
: 相当于一个root
文件系统。Container
: 是镜像在运行中的实例,和镜像的关系类似于类和实例。Repository
: 用于保存镜像Docker Hub 提供了大量镜像集合供使用。Registry
: 包含多个仓库,每个仓库有多个标签Tag
。通常用<仓库名>:<标签>
指定镜像,标签为镜像版本号,不写默认为latest
client
: 用户可以通过客户端,利用命令行或其他工具和docker的守护进程通讯host
: 物理或虚拟机器,用于执行Docker
守护进程和容器卸载旧版本(docker、docker.io、docker-engine)
1 | sudo apt-get remove docker docker-engine docker.io containerd runc |
当前为Docker Engine-Community
软件包 docker-ce
更新仓库索引
1 | sudo apt-get update |
安装https
依赖包
1 | sudo apt-get install \ |
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
或者
1 | curl -sSL https://get.daocloud.io/docker | sh |
1 | docker run ubuntu:15.10 /bin/echo "hello world" |
run
命令代表运行容器ubuntu:15.10
指定ubuntu
镜像15.10
标签的镜像实例。如果不存在此镜像,Docker
会从镜像仓库Docker Hub
中下载公共镜像/bin/echo "hello world"
在容器启动后执行的命令1 | docker run -i -t ubuntu:15.10 /bin/bash |
-i
允许容器内的标准输入STDIN
进行交互-t
在新容器内指定一个伪终端或终端exit
命令或者CTRL+D
可以退出容器1 | docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" |
-d
后台执行-c
启动后执行命令1 | docker ps |
1 | docker logs 5917eac21c36 |
1 | docker stop 5917eac21c36 |
1 | docker run --name=myName ... |
标题 | 含义 |
---|---|
CONTAINER ID | 容器 ID |
IMAGE | 使用的镜像 |
COMMAND | 启动容器时运行的命令 |
CREATED | 容器的创建时间 |
PORTS | 容器的端口信息和使用的连接类型(tcp\udp) |
NAMES | 自动分配的容器名称 |
STATUS | 容器状态 |
状态 | 含义 |
---|---|
created | 已创建 |
restarting | 重启中 |
running/up | 运行中 |
removing | 迁移中 |
paused | 暂停 |
exited | 停止 |
dead | 死亡 |
1 | docker command --help |
1 | docker pull ubuntu |
1 | docker run -it ubuntu /bin/bash |
-it
即-i -t
,开启交互,打开终端/bin/bash
镜像名后面跟的是命令,当前命令是希望开启容器后打开交互式的shell
1 | exit |
1 | docker run -itd --name ubuntu-test ubuntu /bin/bash |
-d
即不进入容器-it
是打开输入,并开启终端1 | docker exec ubuntu-test |
exec
命令进入后exit
不会停止容器attach
命令进入后exit
会停止容器,不建议使用docker exec --help
查看更多参数1 | docker export 1e560fca3906 > ubuntu.tar |
1 | cat docker/ubuntu.tar | docker import - test/ubuntu:v1 |
也可以导入路径或是网络地址
1 | docker import http://example.com/exampleimage.tgz example/imagerepo |
1 | docker rm -f xxxxxxx |
1 | docker container prune |
1 | docker run -d -p imageName |
-d
后台运行-p
容器内部网络端口映射到外部主机-p 80:8098
可以指定容器内部的80
端口映射到外部主机的8098
端口上-p 127.0.0.1:80:8098
端口映射的同时绑定容器的ipdocker port xxxxx
可以查看具体容器的端口映射情况1 | docker run -v /home/dock:usr/docker ubuntu64 |
-v 宿主机目录:镜像目录
-v 宿主机目录:镜像目录:ro
指定只读1 | docker run -it --volumes-from xxxxx ubuntu64 /bin/bash |
--volumes-from
挂载数据卷,一般是一个容器挂载宿主目录,然后其他容器再将这个容器当做数据卷挂载。1 | docker images |
1 | docker search httpd |
列名 | 含义 |
---|---|
NAME | 镜像仓库名称 |
DESCRIPTION | 镜像描述 |
OFFICIAL | 是否是官方发布 |
STARS | 点赞数 |
AUTOMATED | 是否是自动构建 |
1 | docker pull httpd |
1 | docker rmi httpd |
如果当前镜像不满足要求,可以直接对镜像的实例进行修改,然后保存快照形成镜像
运行一个实例,并修改内容
1 | docker run -t -i ubuntu:15.10 /bin/bash |
保存为快照
1 | docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 |
-m
提交描述
-a
镜像的作者
e218edb10161
容器id,提交那个容器
runoob/ubuntu:v2
创建的镜像名
1 | docker build -t runoob/centos:6.7 ./dockerFile |
-t
指定创建的镜像名./dockerFile
dockerFile地址1 | docker login |
1 | docker logout |
1 | docker search ubuntu |
1 | docker pull ubuntu |
1 | # 标记镜像 |
1 | docker nerwork create -d bridge test-net |
-d
指定网络类型,有bridge
和overlay
1 | $ docker run -itd --name test1 --network test-net ubuntu /bin/bash |
1 | ping test1 |
/etc/docker/daemon.json
1 | { |
1 | docker run -it --rm ubuntu cat etc/resolv.conf |
1 | docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu |
-rm
退出时自动清理内部文件系统-h HOSTNAME
设置主机名,会被写到/etc/hostname
和/etc/hosts
--dns--search=test.com
设置搜索域,当搜索名为host
的主机时,还会多搜索一个host.test.com
-dns
指定dns文章字数:398,阅读全文大约需要1分钟
本质是策略模式,一个接口,多个实现。根据不同策略选择,进行不同的策略。
java spi
例子1 | public static void main(String[] args) throws Exception { |
META-INF.services
文件夹内创建com.test.service.testService
文件,即接口名称命名的文件
其中指定了此接口指定的实现类,可用spi
获取
1 | com.test.service.impl.testServiceImpl1 |
dubbo spi
@SPI
注释标记的接口都可以使用dubbo spi
进行拓展1 | <dependency> |
LoadBalance
负载均衡1 | public class MyLoadBalance implements LoadBalance { |
中创建接口全名的文件
com.alibaba.dubbo.rpc.cluster.LoadBalance`java
自带的spi
稍微不同,需要指定一个名称1 | myLoad=com.test.service.impl.MyLoadBalance |
1 | <dubbo:reference id="TestService" interface="com.test.service.TestService" loadbalance="myLoad"/> |
spi
原理文章字数:177,阅读全文大约需要1分钟
org.apache.dubbo.config.annotation.Service
org.apache.dubbo.config.annotation.Reference
常用属性
timeout
: 超时时间(毫秒)version
服务版本,需要与服务提供在设置的一致group
服务分组,一个接口有多个实现时,可以使用分组区分,需要与服务提供者设置的一致retires
重试次数,默认0loadbalance
负载均衡策略:random(随机), roundrobin(轮询), leastactive(最少活跃调用)url
可以直连服务提供着,当注册中心宕机时,可以使用这个参数直连registry
注册中心服务列表,多个注册中心用逗号隔开actives
每个服务消费者最大并发调用数protocol
指定服务提供方协议文章字数:430,阅读全文大约需要1分钟
服务方
Protocol.export
创建)。消费方
Protocol.referInvoker
,用于发送网络请求服务提供者
1 | // Spring rmi 中转对象 |
本质是策略模式,一个接口,多个实现。根据不同策略选择,进行不同的策略。
java spi
例子1 | public static void main(String[] args) throws Exception { |
META-INF.services
文件夹内创建com.test.service.testService
文件,即接口名称命名的文件
其中指定了此接口指定的实现类,可用spi
获取
1 | com.test.service.impl.testServiceImpl1 |
dubbo spi
@SPI
注释标记的接口都可以使用dubbo spi
进行拓展1 | <dependency> |
LoadBalance
负载均衡1 | public class MyLoadBalance implements LoadBalance { |
中创建接口全名的文件
com.alibaba.dubbo.rpc.cluster.LoadBalance`java
自带的spi
稍微不同,需要指定一个名称1 | myLoad=com.test.service.impl.MyLoadBalance |
1 | <dubbo:reference id="TestService" interface="com.test.service.TestService" loadbalance="myLoad"/> |
spi
原理文章字数:866,阅读全文大约需要3分钟
ECharts是百度开源的前端可视化工具,纯js图标库
echart-gl还提供了3D的图表,这里只列举2D图表
以下图可以混搭使用
折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、 饼图(环形图)、雷达图、地图、和弦图、力导布局图
名称 | 描述 |
---|---|
拖拽重计算 | 可以通过拖拽的方式提取、整合当前图表的数据;多表之间交换数据 |
数据视图 | 将图表数据输出成文本,并可以直接编辑 |
动态类型切换 | 折线图、柱状图自由切换 |
图例开关 | 通过点击图例,可以隐藏/显示部分数据 |
数据区域选择 | 通过拖动滑块,选择展示的数据区域 |
多图联动connect | 多张图之间事件共享,保存图片时自动拼接。多张图公用一个区域选择以及详细信息查看等,用于展示相关数据的不同视角。 |
值域漫游 | 基于坐标的图标(地图、散点图)是通过颜色表明数组大小的,此功能可以只显示某个区域的数值 |
炫光特效 | 可以在地图上展示好看的光电以及标线 |
大规模散点图 | 900 x 400的区域就可以显示36W组,上百万的散点数据也能轻松展示 |
数据动态加载 | 每次setOption之后echart会自动获取不同的地方,并进行平滑转换 |
标线辅助 | k线图可以画辅助标线 |
多维度堆积 | 多组数据叠加 |
子区域地图 | 通过主地图类型拓展出子区域地图 |
GeoJson地图扩展 | 压缩的地图拓展 |
事件交互 | 获取用户与图标的交互数据 |
文章字数:274,阅读全文大约需要1分钟
记录几个ffmpeg的命令,其中有推hls流的。
1 | hls: |
文章字数:589,阅读全文大约需要2分钟
Flex
即弹性布局,设置容器内部空间如何布局display: flex
display: inline-flex
flex
之后,子元素float
、clear
、vertical-align
都会失效flex
容器即flex container
flex item
flex container
1 | cross start ^ |
flex item
1 | ^ |
属性名 | 作用 | 属性值 | 含义 |
---|---|---|---|
flex-direction | 主轴方向 | row | 从左向右,默认 |
- | - | row-reverse | 从右向左 |
- | - | column | 从上到下 |
- | - | column-reverse | 从下到上 |
flex-wrap | 主轴换行模式 | nowrap | 不换行,默认 |
- | - | wrap | 换行,多余的在下 |
- | - | wrap-reverse | 换行,多余在上 |
flex-flow | 主轴方向及换行 | flex-flow: |
主轴方向 换行 |
justify-content | 主轴对齐方式 | flex-start | 向主轴开端对齐,默认 |
- | - | flex-end | 向主轴末尾对齐 |
- | - | center | 居中 |
- | - | space-between | 两端对齐,项目间间隔相等 |
- | - | space-around | 每个项目两侧间隔都相等 |
align-items | 交叉轴对齐方式 | flex-start | 交叉轴开端对齐 |
- | - | flex-end | 交叉轴末尾对 |
- | - | center | 居中对齐 |
- | - | baseline | 项目的第一行文字基线对齐 |
- | - | stretch | 如果未设置高度,或者auto,占满整个容器 |
align-content | 换行之后各行对齐方式 | flex-start | 对齐交叉轴起点 |
- | - | flex-end | 对齐交叉轴终点 |
- | - | center | 居中 |
- | - | space-between | 交叉轴两端对齐 |
- | - | space-around | 交叉轴间间隔相等 |
- | - | stretch | 占满整个交叉轴,默认 |
属性名 | 作用 | 属性值 | 含义 |
---|---|---|---|
order | 项目排列顺序 | int | 小的靠前 |
flex-grow | 项目放大比例 | int | 默认0,不放大 |
flex-shrink | 项目缩小比例 | int | 默认1,空间不足按比例缩小 |
flex-basis | 主轴再分配多余空间前,项目占用的空间 | px | 默认auto,及项目本身大小 |
flex | 放大、缩小比例、空间分配三个合并 | none,flex-grow flex-shrink flex-basis | 默认 0 1 auto |
align-self | 元素交叉轴对齐方式 | auto | 继承父元素align-items,默认 |
- | - | flex-start | 交叉轴起点对齐 |
- | - | flex-end | 交叉轴终点对齐 |
- | - | center | 中心对齐 |
- | - | baseline | 项目第一行文字对齐 |
- | - | stretch | 占满容器(未设置高度) |