精华内容
下载资源
问答
  • 一面 介绍项目 java 线程池的实现原理,threadpoolexecutor关键参数解释 hashmap的原理,容量为什么是2的幂次 为什么要同时重写hashcode和equals ConcurrentHashMap如何实现线程安全? 介绍Java多线程的5大状态,...

    一面

    1. 介绍项目
    2. java 线程池的实现原理,threadpoolexecutor关键参数解释
    3. hashmap的原理,容量为什么是2的幂次
    4. 为什么要同时重写hashcode和equals
    5. ConcurrentHashMap如何实现线程安全?
    6. 介绍Java多线程的5大状态,以及状态图流转过程
    7. 介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景
    8. B+树和红黑树时间复杂度
    9. 如果频繁老年代回收怎么分析解决
    10. JVM内存模型,新生代和老年的回收机制
    11. mysql limit分页如何保证可靠性

    二面

    1. 了解哪些排序算法,讲讲复杂度
    2. 手撕归并排序
    3. Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?
    4. redis的hash数据结构最多能存储多少个元素
    5. 自己如何实现RPC?
    6. mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别
    7. 什么是幻读,如何解决
    8. 事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?
    9. 乐观锁与悲观锁的使用场景

    三面:

    1. 自我介绍
    2. 参与的并发项目,从设计到部署,按照流程讲一遍。
    3. 项目相关你用过redis,用在什么场景,怎么使用的?
    4. mysql同步机制原理,有哪几种同步方法
    5. 数据库主从同步如何实现,事务如何实现
    6. 谈谈你对SOA和微服务的理解,以及分布式架构从应用层面涉及到的调整和挑战。
    7. 阿里系中间件metaQ及原理与现有的kafka有什么异同
    8. 在阿里有了解过什么中间件吗?实现原理?与其他开源消息队列有什么特点?
    9. 为什么选择换公司?
    10. 三年到五年的职业规划?

    最后

    针对以上面试题,小编已经把面试题+答案整理好了,想要获取这份面试题+答案的朋友帮忙点赞后,戳这里免费领取就可以了

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    面试专题

    image

    除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

    image

    image

    -1626684795660)]

    [外链图片转存中…(img-pjPyvq0y-1626684795661)]

    image

    展开全文
  • 一面 介绍项目 java 线程池的实现原理,threadpoolexecutor关键参数解释 hashmap的原理,容量为什么是2的幂次 为什么要同时重写hashcode和equals ConcurrentHashMap如何实现线程安全? 介绍Java多线程的5大状态,...

    一面

    1. 介绍项目
    2. java 线程池的实现原理,threadpoolexecutor关键参数解释
    3. hashmap的原理,容量为什么是2的幂次
    4. 为什么要同时重写hashcode和equals
    5. ConcurrentHashMap如何实现线程安全?
    6. 介绍Java多线程的5大状态,以及状态图流转过程
    7. 介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景
    8. B+树和红黑树时间复杂度
    9. 如果频繁老年代回收怎么分析解决
    10. JVM内存模型,新生代和老年的回收机制
    11. mysql limit分页如何保证可靠性

    二面

    1. 了解哪些排序算法,讲讲复杂度
    2. 手撕归并排序
    3. Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?
    4. redis的hash数据结构最多能存储多少个元素
    5. 自己如何实现RPC?
    6. mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别
    7. 什么是幻读,如何解决
    8. 事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?
    9. 乐观锁与悲观锁的使用场景

    三面:

    1. 自我介绍
    2. 参与的并发项目,从设计到部署,按照流程讲一遍。
    3. 项目相关你用过redis,用在什么场景,怎么使用的?
    4. mysql同步机制原理,有哪几种同步方法
    5. 数据库主从同步如何实现,事务如何实现
    6. 谈谈你对SOA和微服务的理解,以及分布式架构从应用层面涉及到的调整和挑战。
    7. 阿里系中间件metaQ及原理与现有的kafka有什么异同
    8. 在阿里有了解过什么中间件吗?实现原理?与其他开源消息队列有什么特点?
    9. 为什么选择换公司?
    10. 三年到五年的职业规划?

    最后

    针对以上面试题,小编已经把面试题+答案整理好了,想要获取这份面试题+答案的朋友帮忙点赞后,戳这里免费领取就可以了

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

    面试专题

    image

    除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

    image

    image

    -1626170854593)]

    [外链图片转存中…(img-jTCSqZSv-1626170854594)]

    image

    展开全文
  • Docker 来点好玩的

    千次阅读 2017-05-19 22:10:03
    经过上篇docker入门后,肯定有点抱怨,还是没有体验到docker的威力。现在我们来点好玩的。 装个ubuntu 以前我们装ubuntu,都是要费老大的力气,有了docker,我们装个ubuntu玩玩。 docker run -t -i ubuntu:14.04 /...

    经过上篇docker入门后,肯定有点抱怨,还是没有体验到docker的威力。现在我们来点好玩的。

    装个ubuntu

    以前我们装ubuntu,都是要费老大的力气,有了docker,我们装个ubuntu玩玩。

    docker run -t -i ubuntu:14.04 /bin/bash

    好了,你装好了ubuntu了,可以在里面随便玩,玩坏了!没事,删掉重建一个。

    这里跟我们之前创建启动容器的方式不一样,多了一些参数。我们来找--help帮忙

    docker run --help 
    
    //截取部分
    -t, --tty                         Allocate a pseudo-TTY
        --ulimit value                Ulimit options (default[])
        
    -i, --interactive                 Keep STDIN open even if not attached

    -t 分配一个交互终端, -i 让我们能输入字符 ;两个结合起来就能进行交互。最后/bin/bash 是让容器ubuntu启动时bash运行。

    为了方便管理,我们创建创建容器的时候,可以初始化一个name

    docker run -t -i --name robin_test ubuntu:14.04 /bin/bash

    image
    最后面可以看到名字变了,之前我们都没有初始化名字,docker会帮我们随机生成一个。name 是唯一的,当第二次执行上面耳朵命令,会失败,因为容易里已经存在robin_test这个容器。

    如何退出了? 直接Ctrl + d 或者 exit 就能退出了,docker ps 查看,发现刚才运行的容器没有运行,Ctrl + d 退出,容器也会停止运行。

    退出了,怎么让刚才的容器重新跑起来?

    docker start id/name

    docker ps 可以看到,容器正在运行,有人想问,我想进入到这个ubuntu容器里去啊!怎么做?

    docker attach id/name

    后台运行,日志

    我们在实际开发中,一般不会run的时候就登陆到容器里去,而是把应用部署到容器里,以后台保护进程来运行。

    docker run -t -i -d --name robin_test ubuntu:14.04 /bin/bash
    
    //在原来额基础上加上-d参数就行, daemon (守护)
    // 为了你以后想登陆进去,我加上了 -t  -i 交互参数

    问题来了,我的应用布置上去了,我怎么看运行状态啊!就是docker的日志。为了方便演示,我们创建启动一个新容器,让他一直打印helloWorld

    启动一个新容器

    docker run --name loop -d ubuntu:14.04 /bin/sh -c "while [ true ]; do echo helloWorld; sleep 1; done"

    然后执行下面的一条查看日志,就可以看到我们神奇的helloWorld了

    docker logs [容器名]
    docker logs [容器名] -f  //实时查看
    docker logs [容器名] -f --tail 100 //加上行数
    docker logs [容器名] -f t --tail 0  //日志显示时间

    image

    解释下/bin/sh -c "..." ,先来man下sh(dash) , command interpreter 指令解释器,-c 将字符串解析成指令执行。
    image

    容易运行时一些系统信息

    我们经常在linux上部署应用,会查看一些系统信息,我们也可以查看运行容器的一些进程,cpu内存使用情况等。

    1. 先来看看进程,任然查看刚才的loop容器

    docker top loop

    可以看到
    image
    这里有两个进程,一个是while循环,一个是sleep睡眠。

    1. 再来看看应用的cpu内存一些信息

    docker stats loop

    可以看到loop占用了多少内存,多少cpu,以及io的统计。
    image

    不登陆容器执行command

    这里来点更有意思的,我们运行的容器,我能不能让他执行一些命令,可是我启动的时候,没有以交互方式run的,现在也登陆不进去。我想修改配置,怎么办啊!

    哈哈!等你看完下面的,这些问题都变得so easy!!!

    1. 先来一个tomcat镜像

    docker run -d --name test -p 8080:8080 tomcat
    1. 运行docker ps 可以看到你的tomcat已经跑起来的,而且端口有映射8080映射到主机的8080上。
      image

    2. 用浏览器访问下host:8080 ,出现经典的tomcat主页。

    好戏才开始

    1. 在tomcat的ROOT下创建一个hello.html,这里需要用到docker exec

    docker exec -d test touch /usr/local/tomcat/webapps/ROOT/hello.html

    先来了解下docker exec,docker exec --help解释为【Run a command in a running container】在容器里执行指令,-d 在后台执行这个指令,test是容器名;touch /usr/local/tomcat/webapps/ROOT/hello.html这里是容器里需要执行的指令。

    访问下hello.html 发现能访问,但是什么也没有,一个空白页。没错,你只是创建了一个hello.html页面,没有写入任何东西。

    1. 给你新建的文件写点东西

    docker exec test /bin/sh -c "echo helloWorld>/usr/local/tomcat/webapps/ROOT/hello.html"

    在访问下页面,页面上显示helloWorld,有东西了,很爽吧!很简单,用sh -c来执行下命令。

    1. 将文件里的内容 cat 下

    docker exec test /bin/sh -c "cat /usr/local/tomcat/webapps/ROOT/hello.html"

    这里千万别加-d参数,不然看不到任何输出信息。

    补充:大家可能有疑惑,我怎么知道tomcat的路径啊!这里先给大家引入一个查看容器详情的指令,docker inspect,执行docker inspect test 可以看到很长一段json格式的信息,我们先别看那么多,反正也看不懂,别把自己弄糊涂了!
    image

    现在你应该知道路径了吧!

    以交互的方式再进入运行的tomcat

    docker exec -it test /bin/bash

    好了,进入到了交互界面了,退出的话直接exit就行,但是容器是没有停止的。

    之前我们run的时候可以以交互模式进入的,退出容器也停止了,不推荐。这里我们小总结下:启动images的时候,以-d守护进程启动,然后进入交互里的数,就docker exec -it test /bin/bash方式。

    今天先到这了,接下来你可以去好好装逼了,下期再见。

    展开全文
  • docker

    2019-07-12 19:13:00
    docker 虚拟化工具 docker 的一些基本命令 例子 docker 镜像 ,容器是从镜像启动的起点环境 docker 容器,虚拟化的运行单位 dockerfile 打镜像工具 格式规范 格式,例子 docker-compose 管理容器工具 格式...

    docker 虚拟化工具

    docker 的一些基本命令 

    例子

    docker 镜像 ,容器是从镜像启动的起点环境

    docker 容器,虚拟化的运行单位

    dockerfile 打镜像工具 格式规范

    格式,例子

    docker-compose 管理容器工具 格式规范

    格式,例子

     

    练习:

    1)通过docker 启动一个可包好的现成容器,

         指定 端口,目录, 运行脚本 等 等 

    2) 通过makefile 打包好几个基本开发环境

        jdk tomcat环境,jdk main方法环境

        指定环境变量,挂载目录等操作

         通过在 linux镜像基础上用makefile 格式构建环境

    3)通过 docker-compose 进行,demo代码的自动打包,构建,运行。

         自动从git拉取代码,通过maven构建。

         通过jkens 配置自动定时构建测试环境。

      通过jkens 指定的shell 启动docker  管理 docker容器。

     

     

     

     最简单,最基本的docker打包流程

     1) 生成一个Dockerfile文件

           touch Dockerfile

     2)   写入内容如下

      FROM bba097ee5ee1  #【bba097ee5ee1为镜像ID】
      CMD  top  #容器启动后执行一个命令

    3)根据当前目录下的Dockerfile内容编译生成一个新的镜像 例:id= 73c7d25ff74c

        docker build . 

    4)运行docker 镜像 

           docker run -i  73c7d25ff74c

    5)进入容器

        docker ps -a 查看容器id

       sudo docker exec -it 775c7c9ee1e1 /bin/bash 

     

     

       docker 常用命令

    $ docker ps // 查看所有正在运行容器 
    $ docker stop containerId // containerId 是容器的ID 
    $ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID 
    $ docker stop $(docker ps -a -q) //  stop停止所有容器 
    $ docker rm $(docker ps -a -q) //   remove删除所有容器

     docker images |sed -n '2,$p'|awk '{print $3}'|xargs -i echo {} //删除所有镜像

         docker images |sed -n '/8-jdk-alpine/!p'|sed -n '2,$p'|awk '{print $3}'|xargs -i docker rmi {} //删除除 8-jdk-alpine 以外的所有镜你

       docker build .

    docker run -p 192.168.99.100:8080:8080  94051f6e8f3c 

    mvn 常用命令
    mvn compile
    mvn install 
    mvn test-compile
    mvn test
    mvn package

     

     docker kill 0f115428397c  杀死容器进程

     docker rm -f 0f115428397c 强制移除容器

      

    针对spring Cloud实战代码的一个打包脚本:

    顺便练一下 shell,贴一下,以后要查方便一点

    主要是sed 中正则转义问题,文件生成行号再处理问题,sed awk基本使用格式问题。

    docker 基本命令

    demo目录是模板目录 路径是 /e/docker/demo
    demo/
    Dockerfile
    run.sh*
    simple-service-0.0.1-SNAPSHOT.jar
    -----------------镜像生成开始----------------
    bulid.sh #编译 maven并复制到工作目录 ,再打包成docker 镜像
    m.sh #编译子脚本
    copy.sh #复制子脚本
    package.sh #找到每个Jar forech bulidimage.sh
    bulidimage.sh #针对单个jar 进行打包动作
    -----------------镜像生成完成------------------

    -----------------在docker 运行容器开始-------------
    runDocker.sh #针对工作目录找到 chapter(章节)
    chapter-run.sh #找到每个Jar forech single-run.sh
    single-run.sh #针对每个jar参数 完成端口映射等启动docker的动作
    -----------------在docker 运行完成-------------
    bulid.sh

    ll /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning |grep spmia-chapter |awk '{print $9}'|sed 's/\///g'|xargs -i ./m.sh {}
    ll /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning |grep spmia-chapter |awk '{print $9}'|sed 's/\///g'|xargs -i ./copy.sh {}
    ll /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning |awk '{print $9}' > .dockerignore
    docker images |sed -n '/8-jdk-alpine/!p'|sed -n '2,$p'|awk '{print $3}'|xargs -i docker rmi -f {} 
    ll /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning |grep spmia-chapter |awk '{print $9}'|sed 's/\///g'|xargs -i ./package.sh {}

    bulidimage.sh

    echo $1    
    fallPath=`echo $1| sed 's/\//\\\\\//g' `
    echo fallPath: ${fallPath} 
    path=`echo $1|sed "s/\/[^\/]\{0,100\}$//g"`
    echo path: ${path} 
    path2=`echo ${path}| sed 's/\//\\\\\//g'`
    echo path2: ${path2}
    chapterName=`echo $1|sed "s/.\{0,100\}spmia-//g" |sed "s/-master.\{0,100\}//g "` 
    echo chapterName: ${chapterName}
    jarName=`echo $1|sed "s/.\{0,100\}master\///g"` 
    echo jarName: ${jarName}
    serverName=`echo ${jarName}|sed  "s/-0.0.1-SNAPSHOT.jar//g"` 
    echo ${serverName} 
    jarShortName=`echo ${jarName}|sed  "s/.jar//g"` 
    echo ${jarShortName} 
    
    #echo cat ./demo/start.sh| sed 's/simple-service/'${serverName}'/g'| sed 's/simple-service-0.0.1-SNAPSHOT.jar/'${jarName}'/g'  > ${path}/start.sh
    cat ./demo/run.sh| sed 's/simple-service/'${serverName}'/g'| sed 's/simple-service-0.0.1-SNAPSHOT.jar/'${jarName}'/g'  > ${path}/start.sh
    
    
    cat ./demo/Dockerfile | sed 's/simple-service-0.0.1-SNAPSHOT.jar/'${fallPath}'/g'  | sed 's/simple-service/'${serverName}'/g' | sed 's/start.sh/'${path2}'\/start.sh/g'  > ${path}/${serverName}-Dockerfile
     
    cat .dockerignore |sed 's/demo//g'|sed 's/'${chapterName}'//g' >.dockerignore
    
    
    echo docker build -f ${path}/${serverName}-Dockerfile   -t  ${serverName}-${chapterName}/latest: .
    docker build -f ${path}/${serverName}-Dockerfile  -t  ${chapterName}-${serverName}:latest . 

    chapter-run.sh

    echo $1
    find ./$1 | sed -n '/jar$/p'|awk '{print $0}' |sed -n '=;p'|sed -n '{N;s/\n/ /;p;d}'|xargs -i ./single-run.sh {}

    copy.sh

    rm -rf /e/docker/$1
    mkdir /e/docker/$1
    cd /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning/$1
    find /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning/$1/* | sed -n '/jar$\|docker\/Dockerfile$/p'| xargs -i  cp -r {} /e/docker/$1

    m.sh

    cd /e/zhl/code.ing/code.root.git/learning/SpringCloud_learning/$1
    mvn compile
    mvn install

    package.sh

    echo $1
    find ./$1 | sed -n '/jar$/p' |xargs -i ./bulidimage.sh {}

    runDocker.sh

    echo " begin" > history-docker-run
    docker stop $(docker ps -a -q)
    sleep 1
    docker rm $(docker ps -a -q)
    sleep 1
    ll  |grep spmia-chapter |awk '{print $9}'|sed 's/\///g'|xargs -i ./chapter-run.sh {}

    single-run.sh

    #echo $1     
    #echo val: ${fallPath} 
    val=`echo $1|awk '{print $2}' ` 
    #echo val: ${val} 
    
    
    chapterName=`echo  ${val}|sed "s/.\{0,100\}spmia-//g" |sed "s/-master.\{0,100\}//g "` 
    #echo chapterName: ${chapterName}  
    
    chapterNumber=`echo ${chapterName}|sed "s/chapter//g"` 
    echo chapterNumber: ${chapterNumber}
    
    nr=`echo $1|awk '{print $1}' ` 
    echo nr: ${nr} 
    
    jarName=`echo ${val}|sed "s/.\{0,100\}master\///g"` 
    echo jarName: ${jarName}
    
    serverName=`echo ${jarName}|sed  "s/-0.0.1-SNAPSHOT.jar//g"` 
    echo ${serverName} 
    
    path=`echo ${val}|sed "s/\/[^\/]\{0,100\}$//g"`
    echo path: ${path} 
      
    echo  docker run -p 192.168.99.100:8${chapterNumber}${nr}:8080  ${chapterName}-${serverName}:latest
    echo  docker run -p 192.168.99.100:8${chapterNumber}${nr}:8080  ${chapterName}-${serverName}:latest >>  history-docker-run
    echo begin >${path}/${chapterName}-${serverName}.txt
    
    docker run -p 192.168.99.100:8${chapterNumber}${nr}:8080   -p 192.168.99.100:8761:8761  -p 192.168.99.100:8888:8888  -p 192.168.99.100:8085:8085 -p 192.168.99.100:5432:5432  -p 192.168.99.100:5555:5555  -p 192.168.99.100:2181:2181   -p 192.168.99.100:9411:9411  ${chapterName}-${serverName}:latest  & > ${path}/${chapterName}-${serverName}.log

    demo/
    Dockerfile

    FROM bba097ee5ee1
    RUN  apk update && apk upgrade && apk add netcat-openbsd
    RUN mkdir -p /usr/local/simple-service
    ADD simple-service-0.0.1-SNAPSHOT.jar /usr/local/simple-service/
    ADD start.sh run.sh
    RUN chmod +x run.sh
    CMD ./run.sh

    run.sh

    #!/bin/sh
    echo "********************************************************"
    echo "Starting simple-service "
    echo "********************************************************"
    java -jar /usr/local/simple-service/simple-service-0.0.1-SNAPSHOT.jar

    simple-service-0.0.1-SNAPSHOT.jar

     

    一个好玩的shll 先记一下以后看

    Mytest() 
    { 
        echo $1
    
    } 
    if [ "$1" == "Mytest" ]; then 
    then
    
             shift
    
             Mytest $*
    
             exit 0
    
    fi
    #
    ll || xargs -n 1 -i  $0 Mytest {}

    行转列(awk):

    awk -F "+" '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] " ";print ""}}' file.txt

    列转行(tr):

    cat file.txt |tr "\n" ","|sed -e 's/,$/\n/'

    shell脚本常见变量

    变量    含义
    $0    当前脚本的文件名
    $n    传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
    $#    传递给脚本或函数的参数个数
    $*    传递给脚本或函数的所有参数
    $@    传递给脚本或函数的所有参数。被双引号(” “)包含时,与 $* 稍有不同
    $?    上个命令的退出状态,或函数的返回值。成功返回0,失败返回1
    $$    当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
    $* 和 $@ 都是将参数一个一个返回
    
    "$*"将所有参数当做一个整体字符串返回 , "$@"将参数一个一个返回
    
    命令    含义
    -eq    等于
    -ne    不等于
    -gt    大于
    -lt    小于
    ge    大于等于
    le    小于等于
    
    操作符    作用
    -d    测试文件是否为目录类型
    -e    测试文件是否存在
    -f    判断是否为一般文件
    -r    测试当前用户是否有权限读取
    -w    测试当前用户是否有权限写入
    -x    测试当前用户是否有权限执行
    2:实例
      下面使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;
    
    如果返回值为非零的值,则意味着目录不存在:
    
    [root@linuxprobe ~]# [ -d /etc/fstab ]
    [root@linuxprobe ~]# echo $?
    1
      再使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:
    
    [root@linuxprobe ~]# [ -f /etc/fstab ]
    [root@linuxprobe ~]# echo $?
    0
      逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,
    
    因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。
    
    [root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
    Exist
      除了逻辑“与”外,还有逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录
    
    的用户是否为非管理员身份:
    
    [root@shizhan2 sh]# echo $USER
    root
    [root@shizhan2 sh]#  [ $USER = root ] || echo "user"
    [root@shizhan2 sh]# su - hadoop
    [hadoop@shizhan2 ~]$ [ $USER = root ] || echo "user"
    user
      第三种逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;
    
    原本测试错误的结果则将其变成正确的。
    
    [linuxprobe@linuxprobe ~]$ exit
    logout
    [root@linuxprobe root]# [ $USER != root ] || echo "administrator"
    administrator
      先判断当前登录用户的USER变量名称是否等于root,然后用逻辑运算符“非”进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户了。最后若条件成立则会根据逻
    
    辑“与”运算符输出user字样;或条件不满足则会通过逻辑“或”运算符输出root字样,而如果前面的&&不成立才会执行后面的||符号。
    
    [root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
    root
      使用规范的整数比较运算符来进行操作数字,不能将数字与字符串、文件等内容一起操作
    
    操作符    作用
    -eq    是否等于
    -ne    是否不等于
    -gt    是否大于
    -lt    是否小于
    -le    是否等于或小于
    -ge    是否大于或等于
      我们先测试一下10是否大于10以及10是否等于10(通过输出的返回值内容来判断):
    
    [root@linuxprobe ~]# [ 10 -gt 10 ]
    [root@linuxprobe ~]# echo $?
    1
    [root@linuxprobe ~]# [ 10 -eq 10 ]
    [root@linuxprobe ~]# echo $?
    0
      free命令,它可以用来获取当前系统正在使用及可用的内存量信息。接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,
    
    再用awk '{print $4}'命令只保留第四列,最后用FreeMem=`语句`的方式把语句内执行的结果赋值给变量
    
    复制代码
    [root@linuxprobe ~]# free -m
                total     used     free     shared     buffers     cached
    Mem:        1826      1244     582      9          1           413
    -/+ buffers/cache:    830 996
    Swap:       2047      0        2047
    [root@linuxprobe ~]# free -m | grep Mem:
    Mem:        1826      1244     582      9 
    [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
    582
    [root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
    [root@linuxprobe ~]# echo $FreeMem 
    582
    复制代码
      我们使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样:
    
    [root@linuxprobe ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
    Insufficient Memory
      字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值),理解起来也比较简单。
    
    字符串比较中常见的运算符如表4-5所示:
    
    操作符    作用
    =    比较字符串内容是否相同
    !=    比较字符串内容是否不同
    -z    判断字符串内容是否为空
      接下来通过判断String变量是否为空值,进而判断是否定义了这个变量:
    
    [root@linuxprobe ~]# [ -z $String ]
    [root@linuxprobe ~]# echo $?
    0
      再尝试引入逻辑运算符来试一下。当用于保存当前语系的环境变量值LANG不是英语(en.US)时,则会满足逻辑测试条件并输出“Not en.US”(非英语)的字样:
    
    [root@linuxprobe ~]# echo $LANG
    en_US.UTF-8
    [root@linuxprobe ~]# [ $LANG != "en.US" ] && echo "Not en.US"
    Not en.US
      
    View Code

     

    转载于:https://www.cnblogs.com/heling/p/11177947.html

    展开全文
  • docker-symfony:使用Dockerdocker-compose运行Symfony应用程序
  • Docker实战

    2021-08-24 15:50:54
    Docker安装Nginx docker run -d --name nginx -p 主机端口:80 -p 主机端口:443 -v /home/docker/nginx/html/:/usr/share/nginx/html/ nginx ????Docker安装Tomcat docker run --name apache -d -e TZ=UTC -v ...
  • Docker进阶

    2021-08-24 15:41:06
    我的博客链接:...docker volume inspect 卷名 # 查看数据卷所在的路径 ????指定路径挂载 docker run -v 主机目录:容器内目录 ????具名挂载 docker run -v 卷名(不是目录了):容器内 目录 ????匿名
  • Docker - Docker for Windows 10

    万次阅读 2017-12-10 12:38:09
    总结:win10使用docker for windows版只适合Hyper-V模拟机 具体参考下面 前言 大概是兩年前,稍微玩了一點點的 Docker,不過當時的 Docker ,底層還是使用 Linux 核心, 所以不用說,自然也只有 Linux 的...
  • Docker基础

    2018-11-01 16:45:41
    什么是Docker Docker:an open source project to pack,ship and run any application as a lightweight container. 将任何应用以轻量级的形式来打包,发布和运行 Docker可以被粗糙地理解为轻量级的虚拟机。 ...
  • Docker入门

    2020-04-01 10:19:54
    Docker简介 docker mac 安装 安装:www.docker.com -> download docker for mac ls #.dmg open Docker.dmg docker info 配置:docker -> preferences -> Advanced -> Registry mirrors + 国内镜像加速...
  • 今天小编要开始编写新系列的文章啦, 本次围绕的主角是 “Docker”。 “早就有其他博主早就写过啦,阅读量杠杠的” “是谁? 是谁在说话?” 当然确实早已有其他博主写过docker相关的博客,但是那又怎样? 他...
  • docker入门

    2019-12-12 15:56:24
    linux下:sudo wget -qO- ... sudo usermod -aG docker 用户名 (允许非root用户使用doctor) 安装完成检查安装信息: docker info docker命令小结 docker pull获取image docker build创...
  • centos安装docker

    2016-11-27 22:54:04
    docker
  • const inquirer = require('inquirer'); const fs = require('fs');...const FILENAME = 'docker-log'; const COMPOSENAME = 'docker-compose.yml'; const dockerBuild = () => { return exec('docke...
  • Docker Cookbook Docker Cookbook提供了用于安装docker以及构建,管理和运行docker容器的资源。 范围 本菜谱与Docker,Inc.发行的容器引擎有关。它不涉及Docker生态系统工具或诸如cgroups或aufs之类的必备技术。 ...
  • Docker案例实操,Docker搭建Ghost

    千次阅读 2019-04-02 14:07:39
    实例1:Docker启动nginx,更改初始化界面 docker images 列出所有镜像 docker run -p 14001:80 -d nginx docker run 是基本命令,创建一个新的容器,后面可以跟命令,形如:docker run [OPTIONS] IMAGE ...
  • docker-compose 是什么 熟悉docker的人都知道Dockerfile用来构件单个镜像服务的,想要运行服务,要输入复杂的 run 命令来启动并配置服务。 对于服务间依赖以及服务的环境变量、网络参数、文件挂载等操作,当然可以...
  • 我创建它只是为了好玩。 快速开始 将构建文件下载到您的Docker主机服务器 选项1:从openldap-server.tar.gz下载所有文件 wget tar -xzvf openldap-server.tar.gz mv docker-compose.yml.example docker-compose....
  • docker-compose 是什么 熟悉docker的人都知道Dockerfile用来构件单个镜像服务的,想要运行服务,要输入复杂的 run 命令来启动并配置服务。 对于服务间依赖以及服务的环境变量、网络参数、文件挂载等操作,当然可以...
  • Docker容器 说明: Docker for Odoo 版权: 2020 Fabio Castelli(Muflone) 执照: GPL-2 + 源代码: : 文档: : 系统要求 Docker(使用v.19.03测试) Docker compose(使用v.1.25.1进行测试) 安装 使用...
  • 适用于Java / Jakarta EE开发人员的有效Docker和Kubernetes 该存储库显示了在将Docker和Kubernetes与Java / Jakarta EE应用程序结合使用时要考虑的几个关键权衡。 该资源库托管了演讲或实验的演示(如果您正在使用...
  • 初识Docker

    2017-08-12 21:55:00
    最近总是会看到关于Docker的文章,大概了解了一下,就想在自己电脑试试。 1.下载并安装Docker for windows。需要win10系统。其他windows系统想要安装貌似要麻烦点了。 2.创建一个asp.net Core WepApi程序。 3....
  • Docker镜像一、Docker镜像是什么?1.UnionFS(联合文件系统)2.Docker镜像加载原理:3.分层的镜像4.为什么Docker要采用这种分层结构?5.Docker镜像的特点5.Docker镜像commit操作补充 一、Docker镜像是什么? 1....
  • 博客docker-on-rails 制作博客以了解ruby的好处并通过docker使其对云友好 基于的项目, :rocket: 环境设定 克隆此项目: git clone https://github.com/LuisCusihuaman/docker-on-rails.git 复制默认环境变量: ...
  • 为什么要使用 Docker? Docker 容器的启动在秒级 Docker 对系统资源利用率高,一台主机上可以同时运行数千个Docker容器。 Docker 基本不消耗系统资源,使得运行在Docker里面的应用的性能很高。 相比于传统的虚拟化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,942
精华内容 776
关键字:

docker好玩