Docker 基础 - 2

容器操作系统类型

Busybox

集成了一百多个最常用 Linux 命令和工具的软件工具箱.

包含cat echo grep find mount telnet

Busybox 是Linux 系统的瑞士军刀

Debian/Ubuntu

CentOS/Fedora

CoreOS

官网链接

Linux发行版, 针对容器技术.

创建自定义操作系统的镜像

基于commit 命令创建

支持用户提交自己对容器的修改, 并生成新的镜像. 命令格式为:

docker commit CONTAINER [REPOSITORY[:TAG]]

创建步骤

  1. 使用OS镜像创建容器

  2. 配置软件源为国内软件源, 如 ali

    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    
  3. 执行 apt-get update 更新软件包缓存

  4. 通过 apt-get 安装服务(比如安装 ssh): apt-get install openssh-server

  5. 创建目录:需要目录 /var/run/sshd 存在, 手动创建: mkdir -p /var/run/sshd. 此时已经可以启动服务: /usr/sbin/sshd -D &

  6. 修改服务配置, 取消pam登陆限制: sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

  7. 其他操作:在 root 用户目录下创建 .ssh 目录, 并复制需要登陆的公钥信息(1. 直接从用户目录下的 .ssh/id_rsa.pub 文件拷贝 2. ssh-keygen -t rsa 生成)到 authorized_keys 中: mkdir -p /root/.ssh && vi /root/.ssh/authorized_keys . 公钥信息格式示例如下:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtuqN2zGhhVBTVCCoNa8hPvGu3xo8+UsqG+AxW0jEUvQYhr6/IEXiIAk41HzjeEZVYKGGr08Jh8n5xxmBW4AyH/1DaU1Ej3m0dOuZ09HAUJfY7WnrtO8GrZtQT2KhI6P2pwnOJU3fm6eRLLVzL2oSyhBQ8ca/njwAyHXOVJiPOpO3cokOPa2BzziWqslmFKyWQdaf6rBwYKF+2eoFrVk0QepoJtc6OfgIyuQEi+gJXste6QiPJRYgFQoYlv/bzYnnrG7Zs0qVCi6SfIRF7twVXUNW/hkPbGxsKZTLAvITS3tOR2nRt6pibT46RM/+ebiuT0fZ/e/xl3w4QygGTB2Xl casey@ubuntu
    
  8. 其他步骤:创建自动启动的 SSH 服务的可执行文件 run.sh , 并添加可执行权限: vi /run.sh; chmod +x run.sh

    #!/bin/bash
    /usr/sbin/sshd -D
    
  9. 最后, 退出容器 exit

保存镜像

sudo docker commit <container id> ubuntu-sshd

启动镜像

sudo docker run -p 10122:22 -d ubuntu /run.sh

使用

可以通过 ssh 服务进行连接

ssh <container ip> -p 10122 -l root

使用 Dockerfile 创建(重点关注)

Docker hun 上我的ubuntu-sshd镜像

Dockerfile示例

## OS镜像
FROM ubuntu:16.04

## 维护者
LABEL maintainer="CaseyCui cuikaidong@foxmail.com"

## 1. 备份官方源
## 2. 创建/var/run/sshd文件夹(正常启动SSH服务需要)
## 3. 创建root用户目录下.ssh目录
RUN mv /etc/apt/sources.list /etc/apt/sources.list.default \
    && mkdir -p /var/run/sshd \
    && mkdir -p /root/.ssh

## 拷贝阿里镜像源信息到/etc/apt/sources.list
COPY sources.list /etc/apt/sources.list

## 拷贝公钥到/root/.ssh目录
COPY authorized_keys /root/.ssh/authorized_keys

## 拷贝运行脚本run-sshd.sh到根目录下
COPY run-sshd.sh /run-sshd.sh

## 1. 安装openssh-server
## 2. 修改时区为**中国/上海**(ubuntu新版本需要安装 *tzdata*,通过**链接**方式使之生效)
## 3. 修改SSH服务的安全登录配置,取消pam登录限制
## 4. run-sshd.sh增加执行权限
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
        openssh-server \
        tzdata \
    && rm -rf /var/lib/apt/lists/* \
    && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && dpkg-reconfigure -f noninteractive tzdata \  
    && sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd \
    && chmod +x /run-sshd.sh

## 开放端口
EXPOSE 22

## 增加挂载点/tmp
VOLUME /tmp

## 设置启动命令
CMD ["/run-sshd.sh"]

自动化修改时区

ubuntu 16.04 之前:

echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

ubuntu 16.04 及之后:

&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata

前提: 需要安装 tzdata 包:

apt-get -yq install tzdata
ENV 环境变量

ENV环境变量全局生效, 有时可能会有负面效果.

如: ENV DEBIAN_FRONTEND noninteractive 会把所有操作设置为非交互式的.

尽量不要像上边那样使用, 建议的用法是: 在有需要时, 和执行的命令一起执行, 如:

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends tzdata # -q: quiet

.dockerignore文件

## 忽略文件夹 .git/
.git

## 忽略临时文件
*.swp

run.sh 脚本

##!/bin/bash
/usr/sbin/sshd -D

创建镜像

在 Dockerfile 目录下执行:

sudo docker build -t caseycui/ubuntu-sshd .

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文转载于网络 如有侵权请联系删除

相关文章

  • linux删除用户名命令,linux删除用户命令

    大家好,又见面了,我是你们的朋友全栈君。Linux下删除以后的时候我们需要通过相关的命令来实现。下面由学习啦小编为大家整理linux删除用户命令的相关知识,希望对大家有帮助!linux删除用户命令简介userdel是一个底层用于删除用户的工具。在Debian上,我们通常会使用deluser命令。userdel会查询系统账户文件,例如/etc/password和/etc/group。那么它会删除所有和用户名相关的条目。在我们删除它之前,用户名必须存在。linux删除用户命令的用法由于userdel会修改系统账户文件,那么我们需要root特权来运行它。不然我们会遇到一个报错信息“只有root权限才能执行这项操作”或者类似的信息。在我们得到特权后,我们可以通过输入userdel从你的控制台删除用户。下面是一个默认使用userdel的样例。$sudouserdelpasadena或者#userdelpasadena正如你所见,我们不能没有root权限而删除用户pasadena。当我们有权限时,系统不会给出错误信息,这意味着用户已经成功删除。完全删除用户家目录不带选项使用userdel,只会删除

  • 缓存高效近邻搜索的图重新排序(CS)

    图搜索是近邻搜索中最成功的算法趋势之一。几个最流行和经验上最成功的算法的核心是沿着修剪过的近邻图的简单行走。此类算法始终在嵌入搜索等应用的工业速度基准测试中表现出色。然而,图遍历应用程序经常遭受糟糕的内存访问模式,近邻搜索也不例外。我们的测量表明,诸如分层可导航小世界图(HNSW)之类的流行搜索索引可能具有较差的缓存未命中性能。为了解决这个问题,我们将图重新排序算法应用于近邻图。图重新排序是一种内存布局优化,可将内存中经常访问的节点组合在一起。我们展示了将几种重新排序算法应用于基于HNSW索引的领先的基于图的近邻方法的详尽实验。我们发现重新排序将查询时间提高了40%,并且我们证明了重新排序图所需的时间与构建索引所需的时间相比可以忽略不计。原文题目:GraphReorderingforCache-EfficientNearNeighborSearch原文:Graphsearchisoneofthemostsuccessfulalgorithmictrendsinnearneighborsearch.Severalofthemostpopularandempiricallysuccessf

  • Win10系统下Pytorch1.7 + tensorflow2.x +CUDA10.1 安装与配置

    引言最近把tensorflow跟pytorch都重新安装了,发现我以前安装的CUDA10.0的版本无法跟tensorflow2.x适配了,于是我又重新卸载安装了CUDA10.1+cuDNN8.0.x的版本,然后发现我的Win10上又跟以前一样可以运行tensorflow或者pytorch了。下面就说一下我是如何在Windows10系统下完成这些配置的。首先看一下软件版本信息:CUDA10.1cuDNN7.6.5tensorflow2.2.0pytorch1.7python3.6.5VS2017安装CUDA10.1+cuDNN与配置在安装之前请先确认一下,你的电脑上有独立的N卡,没有N就不用看了!有N卡的继续往下看。首先是下载CUDA10.1与cuDNN7.6.5,这个需要到官方网站上下载相关的版本软件,下载到之后,首先安装CUDA10.1,安装好之后,解压缩cuDNN7.6.5,然后把解压缩好的cuDNN7.6.5中的lib/x64目录与bin目录下的全部文件copy到安装好的CUDA10.1对应的目录中去,分别如下:##libcopyto cudnn-10.1-windows10-x

  • 如何展现云计算安全领导力

    网络安全和云计算技术领域专家就如何有效展现云计算安全领导力分享了一些见解和体会。展现云安全领导力时需要考虑什么? 企业的决策者必须将其各个领域的安全放在首位,而对于云计算来说,这一点并没有什么不同。但是,存储设备生产商希捷公司最近发布的一个研究报告表明,尽管安全是数据存储策略中经常被提及的驱动因素,但在大中型企业工作的行业专业人士中,有三分之二的人表示其安全性不足。考虑到这一点,企业的决策者如何有效地展现云计算安全领导力?确保完全可见首先,企业领导者必须确保员工对从目标到性能的所有云计算运营和应用程序具有完全的可见性。Netskope公司EMEA地区首席信息安全官NeilThacker表示:“企业决策者可以通过获得对云计算的真正了解对其组织真正意义的全面可见性和洞察力,来证明其在组织中的云安全领导地位。而只关注他们在AWS、Azure或谷歌云基础设施或MS365或GSuit的部署,那么可能会丧失80%以上的云计算资产。例如,企业拥有一个正在使用的所有云计算服务的实时清单,通常包括1000多个云计算应用程序,每个应用程序都代表一种风险。企业领导者应了解每种应用程序的业务和技术目标,同时还

  • 通俗点聊聊算法 - 排序(3)快速排序,亲测

    这些天做题的时候吃了不少快速排序不熟的亏,我痛下决心,一定要自己写出快速排序的几种实现方法!1、什么是快速排序快速排序是很重要的算法,和傅里叶变化等算法并称二十世纪最伟大的十大算法。快速排序的核心思维就是“分而治之”,就像封建王朝的“分封制”。将一大块“领土”,依据“嫡庶长幼”,分为不同部分,各个部分在自行细分,直到分无可分之后,便等级森严了。说白点,就是在序列中找个元素充当中间量,大的往后,小的往前,一分为二,二分为四,四分为八···那么,快速排序的技术核心,便呼之欲出了。其一就是这个中间量怎么找,其二就是怎么移动各个元素。2、基准元素的选择这个元素的选择啊,并不是说要遵循什么准则,你可以选序列头,序列尾,序列中间元素,都可以。 不过选完之后把基准元素放到序列头的位置。为了简单,后面我就直接选首元素了。3、元素的分配3.1双边遍历这个方法呢,如果对快慢指针和双指针不是很了解的朋友可以现在了解一下。首先啊,确定基准为4,左指针指向第一个元素,右指针指向尾巴。右指针开始,向前遍历,找到第一个大于基准的元素就停下,轮到左指针,同理。当两个指针都停下之后,将两个指针所指向的值互换位置。重复上

  • sql 存储过程

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。存储过程的概念存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。存储过程的优点1、存储过程允许标准组件式编程存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。 2、存储过程能够实现较快的执行速度如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储

  • git:pull --force 强制覆盖本地的分支

    版权声明:本文为博主原创文章,转载请注明源地址。https://blog.csdn.net/10km/article/details/84669270git拉取命令(pull)的标准格式是:$gitpull<远程主机名><远程分支名>:<本地分支名>复制一般我们简写成$gitpull复制代表从远程分支拉取到当前的本地分支。 有的时候,已经知道远程分支与本地分支有不同的commit,比如本地分支有一个临时的commit,远程分支并没有。是不能简单执行gitpull的,会报错。 此时如果只是想放弃本地的临时提交,强制将远程仓库的代码覆盖到本地分支。就要用到--force参数,强制拉取功能 gitmanual中关于--force参数的说明 命令格式如下:$gitpull--force<远程主机名><远程分支名>:<本地分支名>复制示例:$gitpull--forceoriginmaster:master Fromhttps://gitee.com/l0km/myprj +e072b6b...d5a5684master-

  • 简单易学的机器学习算法——SVD奇异值分解

    一、SVD奇异值分解的定义  假设是一个的矩阵,如果存在一个分解:其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵。这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩阵,称为右奇异矩阵。二、SVD奇异值分解与特征值分解的关系  特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征。然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵。这里,和是方阵,和为单位矩阵,为的特征向量,为的特征向量。和的特征值为的奇异值的平方。三、SVD奇异值分解的作用和意义  奇异值分解最大的作用就是数据的降维,当然,还有其他很多的作用,这里主要讨论数据的降维,对于的矩阵,进行奇异值分解取其前个非零奇异值,可以还原原来的矩阵,即前个非零奇异值对应的奇异向量代表了矩阵的主要特征。可以表示为五、实验的仿真  我们在手写体上做实验,原始矩阵为原始矩阵对应的图像为对应图像经过SVD分解后的奇异值矩阵为部分奇异值矩阵取前14个非零奇异值前14个非零奇异值还原原始矩阵B,还原后的图像为还原后的图像对比图像对比图像MATLAB代码%%测试奇异值分解过程

  • 深耕数据挖掘,实现互联互通,在银行风控管理中 ,我国大数据技术应用举足轻重 | 大咖周语录

    当前,大数据已成为科技、经济、社会等各领域的关注焦点。在我国,80%的数据掌握在政府手中,如何激活政府数据,通过数据资产运营进行数据价值激活,将成为支撑国家大数据战略的有力路径。编辑|张宏官网|www.datayuan.cn微信公众号ID|datayuancn赫捷院士:我国肿瘤大数据刚刚起步7月29日,在中国卫生信息学会健康医疗大数据肿瘤专业委员会暨慢病防治联盟指导委员会成立大会上,中国科学院院士、国家癌症中心主任、中国医学科学院肿瘤医院院长赫捷表示,大数据将为肿瘤研究和临床治疗提供新的思路,也会给肿瘤治疗带来跨时代的变革。“我国肿瘤大数据仍处于刚刚起步阶段,还有很多事情要去做。”赫捷院士同时强调,这并不代表我国肿瘤大数据研究一片空白。赫捷院士认为,建立国家级的肿瘤大数据平台和国家重大数据库过程中,各个医疗机构要加强质量控制、强化准入机制,高度重视网络系统的安全问题,在信息采集和上报过程中始终坚持以国家利益为首的长远大局观,形成全面参与、共同建立国家级的肿瘤大数据库的协同机制,以实际行动推动肿瘤治疗制度的规范化。在赫捷看来,国家级的肿瘤大数据平台的建立,能够填补以医院为基础的癌症监查网

  • 【译】Spring的@EnableCaching注解

    Spring的@EnableCaching注解 @EnableCaching注解是springframework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cachemanager了。 当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个postprocessor,这会扫描每一个springbean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。 如果你对缓存感兴趣并想了解更多,请阅读springcaching.本文会帮助你了解如何使用@EnableCaching注解。 接下来的例子演示了@EnableCaching的用法。在代码中,我缓存了Book类找那个的方法。 代码   //Book.java   importorg.springframework.cache.annotation.Cacheable;   publicclassBook{ &

  • 【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

    摘自:https://www.cnblogs.com/binghe001/p/12663557.html 【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!   前言 很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中,就更别提如何构建高并发系统了! 究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,结合高并发专题下的其他文章,学以致用。 电商系统架构 在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢。简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间内就会被抢购一空。比如每年的618、双11大促,小米新品促销等业务场景,就是典型的秒杀业务场景。 我们可以将电商系统的架构简化成下图所示。 由图所示,我们可以简单的将电商系统的核心层分为:负载均衡层、应用层和持久层。接下来,我们就预估下每一层的并发量。 假如负载均衡层使用的是高性能的N

  • Linux gdb调试器用法全面解析

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/21cnbao/article/details/7385161更多精华文章请扫描下方二维码关注Linux阅码场   GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序。让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。当程序被停住时,可以检查此时程序中所发生的事,并追索上文。动态地改变程序的执行环境。不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须。而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程序为例演示gdb调试器的用法。  1intadd(inta,intb)2{3returna+b;4}56main()7{8intsum[10]=9{100,0,0,0,0,0,0,0,0,011};12inti;1314i

  • 关于marquee首次加载出现闪跳问题

    关于实现文字公告横向滚动,跑马灯效果的其一方法,可用marquee标签实现 marquee标签不是w3c推荐的标签,在W3C官方文档中也无法查询到这个标签,虽然已经过时,但是功能还是十分强大的,设置滚动效果简单。 1<divclass="scrollArea"> 2  <marquee 3    width="960" 4    direction='left' 5    scrollamount="6" 6   behavior="scroll" 7    contenteditable="true"> 8{{scrollMessage}} 9</marquee> 10</div>复制 问题:当页面首次加载时,文字还没有滚动完,就会出现突然闪跳重新开始滚动!!! 原因:首次加载页面时,marquee标签会认为内容宽度只有静态布局时的宽度 解决:动态创建数据后构建marquee标签 1<divclass="scrollArea"v-if="scrollMessage"> 2  <marquee 3  width="

  • centos7 源码安装PHPmyadmin

    安装phpMyAdmin   phpMyAdmin是一个使用PHP语言编写的免费软件,旨在通过Web界面管理MySQL数据库。phpMyAdmin支持MySQL和MariaDB上的各种操作。用户可以通过Web界面执行数据库的常用操作(数据库管理,表,字段,索引,用户,权限,视图,函数等),以及直接执行任何SQL语句。   1. 创建phpMyAdminWeb目录 1 [root@hming-server218-web ~ ]# mkdir /app/data/phpMyAdmin -p 2. 将phpMyAdmin软件包解压到/app/data/phpMyAdmin 目录下     下载地址:https://www.phpmyadmin.net/downloads/     cd/home/web/www     wget https://files.phpmyadmin.net/phpMyAdmin/4.7.8/phpMyAdmin-4.7.8

  • 关于verilog中的移位运算和乘法

    移位运算和乘法 乘2就是左移一位,左移的位数,就是n,2=2的1次方,所以左移一位 同理,乘4就是左移两位,乘8就是左移三位 那么乘3、6、7该怎么办呢?3等于2的2次方-1,所以乘5就等于左移两位再减去本身 6等于2的2次方加上2的1次方,所以就是这个数本身左移两位再加上这个数本身左移一位,如此反复  

  • 验证码生成

      importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; importjava.awt.Graphics2D; importjava.awt.RenderingHints; importjava.awt.geom.AffineTransform; importjava.awt.image.BufferedImage; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; importjava.util.Arrays; importjava.util.Random; importjavax.imageio.ImageIO; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse;   publiccl

  • 物理不可克隆函数-PUF

      时间:2022/09/05   一.简介 PUF技术是一组微型延迟电路,其通过提取芯片制造过程中的差异,生成无数个独特的、不可预测的“密钥”。输入也称为激励(Challenge),输出也称为响应(Response),PUF的一组输入输出称为激励——响应对(Challenge——ResponsePair,CRP)。激励和响应之间的关系仅仅由设备的某些物理差异决定,由于芯片制造过程中产生的差异,具有不可复制的特性,因此,PUF技术使得芯片具有防伪功能。   二.特性 理想PUF具有唯一性、单向性和不可破坏性[47]。设PUF模块为P,任意的两个激励为?1、?2,将激励输入PUF模块产生响应记为PUF(P,?1)=?1。则理想PUF的三个特性可以描述为: 1.唯一性 对于同一个PUF模块,如果激励相同(?1=?2),那么,如公式2-1所示,经过该PUF模块产生的响应相同的概率为1;对于不同的PUF模块,如公式2-2所示,即使激励相同(?1=?2),响应相同的概率为0。 2.单向性 PUF模块所产生的响应是不可预测的,对于任意的响应?1(∀?1∈resp

  • 洛谷[SHOI2002]滑雪题解

    什么破题啊 简直就是浪费我时间! 我每天还被我xf定目标了不知道嘛!   题目 朴素的搜索只能得90分 #include<cstdio> #include<iostream> usingnamespacestd; constintN=110; boolvis[N][N]; intn,m,mp[N][N],ans; intdx[4]={-1,1,0,0},dy[4]={0,0,-1,1}; intread(){ ints=0,w=1; charch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch)){s=s*10+ch-'0';ch=getchar();} returns*w; } voiddfs(intxx,intyy,intsum){ ans=max(ans,sum); for(inti=0;i<4;i++){ intx=dx[i]+xx,y=dy[i]+yy; if(x>=1&&x<=n&&

  • TCP中的定时器

    1、建立连接定时器(connection-establishmenttimer)   顾名思义,这个定时器是在建立连接的时候使用的,我们知道,TCP建立连接需要3次握手,如下图所示:   建立连接的过程中,在发送SYN时,会启动一个定时器(默认应该是3秒),如果SYN包丢失了,那么3秒以后会重新发送SYN包的(当然还会启动一个新的定时器,设置成6秒超时),当然也不会一直没完没了的发SYN包,在/proc/sys/net/ipv4/tcp_syn_retries可以设置到底要重新发送几次SYN包。 2、重传定时器(retransmissiontimer)   重传定时器在TCP发送数据时设定,在计时器超时后没有收到返回的确认ACK,发送端就会重新发送队列中需要重传的报文段。使用RTO重传计时器一般有如下规则: 当TCP发送了位于发送队列最前端的报文段后就启动这个RTO计时器;    如果队列为空则停止计时器,否则重启计时器;  当计时器超时后,TCP会重传发送队列最前端的报文段;  当一个或者多个报文段被累计确认后,这个或者这些报文段会被清除出队列

  • 两种atm取款方式

    1.//函数密码账号functionUser(username,password,account){this.username=username;this.password=password;this.account=account;}//用户.原型.获得钱=运行(钱)User.prototype.getMoney=function(money){this.account-=~~money;//这账单alert(`取款金额为${money},当前账户余额为${this.account}`);}User.prototype.saveMoney=function(money){this.account+=~~money;alert(`存款金额为${money},当前账户余额为${this.account}`);}User.prototype.query=function(){alert(`当前账户余额为${this.account}`);}2.复制 functionAtm(){this.userList=[];}Atm.prototype.start=function(){this.cre

  • hdu acm-1047 Integer Inquiry(大数相加)

    IntegerInquiry TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):11678    AcceptedSubmission(s):2936 ProblemDescription One ofthefirstusersofBIT'snewsupercomputerwasChipDiller.He extendedhisexplorationofpowersof3togofrom0to333andhe exploredtakingvarioussumsofthosenumbers.``Thissupercomputer isgreat,''remarkedChip.``IonlywishTimothywereheretoseethese results.''(Chipmovedtoanewapartment,onceonebecameavailableon the

相关推荐

推荐阅读