【一】深度学习中常用的Linux命令汇总
1.man:man command,可以查看某个命令的帮助文档,按q退出帮助文档
2.cd:用于切换目录,cd - 可以在最近两次目录之间来回切换
3.touch:touch file创建文件。
4.ls:ls -lh可以列出当前目录下文件的详细信息。
5.pwd:pwd命令以绝对路径的方式显示用户当前的工作目录
6.cat:cat file显示文件内容。
7.mkdir:mkdir dir可以创建一个目录;mkdir -p dir/xxx/xxx可以递归创建目录。
8.cat:cat file显示文件内容,按q退出。
9.more:more file显示文件内容,按q退出。
10.grep:筛选命令,比如我想查找当前目录下的py文件(ls -lh | grep .py)
11.whereis:可以查找含有制定关键字的文件,如whereis python3
重定向 > 和 >>:Linux 允许将命令执行结果重定向到一个文件,将本应显示在终端上的内容输出/追加到指定文件中。其中>表示输出,会覆盖原有文件;>>表示追加,会将内容追加到已有文件的末尾。
12.cp:cp dst1 dst2复制文件;cp -r dst1 dst2复制文件夹。
13.mv:mv dst1 dst2可以移动文件、目录,也可以给文件或目录重命名。
14.zip:zip file.zip file压缩文件;zip dir.zip -r dir压缩文件夹。
15.unzip:unzip file.zip解压由zip命令压缩的.zip文件。
16.tar:
tar -cvf file.tar dir打包文件夹
tar -xvf file.tar解包
tar -czvf file.tar.gz dir压缩文件夹
tar -zxvf file.tar.gz解压
17.chmod:chmod -R 777 data将整个data文件夹修改为任何人可读写。
18.ps:ps aux列出所有进程的详细信息。
19.kill:kill PID根据PID杀死进程。
20.df:df -h 查看磁盘空间。
21.du:du -h dir查看文件夹大小。
22.top:实时查看系统的运行状态,如 CPU、内存、进程的信息。
23wget:wget url从指定url下载文件。
24.ln:ln -s dst1 dst2建立文件的软链接,类似于windows的快捷方式;ln dst1 dst2建立文件的硬链接。无论哪种链接,dst1都最好使用绝对路径。
25.top:我们可以使用top命令实时的对系统处理器的状态进行监视。
26.apt-get:用于安装,升级和清理包。
27.vim:对文件内容进行编辑。
28.nvidia-smi:对GPU使用情况进行查看。
29.nohup sh test.sh &:程序后台运行且不挂断。
30.find:这个命令用于查找文件,功能强大。find . -name "*.c"表示查找当前目录及其子目录下所有扩展名是.c的文件。
【二】计算机多线程和多进程的区别?
进程和线程的基本概念:
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态的概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内的调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
线程的意义:
每个进程都有自己的地址空间,即进程空间,在网络环境下,一个服务器通常需要接收不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。线程的执行过程是线性的,尽管中间会发生中断或者暂停,但是进程所拥有的资源只为该线状执行过程服务,一旦发生线程切换,这些资源需要被保护起来。进程分为单线程进程和多线程进程,单线程进程宏观来看也是线性执行过程,微观上只有单一的执行过程。多线程进程宏观是线性的,微观上多个执行操作。
进程和线程的区别:
地址空间:同一进程中的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享进程的资源如内存、I/O、CPU等,但是进程之间的资源是独立的。(一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃可能导致整个进程都死掉。所以多进程比多线程健壮。进程切换时,消耗的资源大、效率差。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。)
执行过程:每个独立的线程都有一个程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。(线程是基于进程的)
线程是处理器调度的基本单元,但进程不是。
两者均可并发执行。
进程和线程的优缺点:
线程执行开销小,但是不利于资源的管理和保护。
进程执行开销大,但是能够很好的进行资源管理和保护。
何时使用多进程,何时使用多线程:
对资源的管理和保护要求高,不限制开销和效率时,使用多进程。(CPU密集型任务)
要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。(I/O密集型任务)
【三】TCP/IP四层模型的相关概念
TCP/IP四层模型:
-
应用层:负责各种不同应用之间的协议,如文件传输协议(FTP),远程登陆协议(Telnet),电子邮件协议(SMTP),网络文件服务协议(NFS),网络管理协议(SNMP)等。
-
传输层:负责可靠传输的TCP协议、高效传输的UDP协议。
-
网络层:负责寻址(准确找到对方设备)的IP,ICMP,ARP,RARP等协议。
-
数据链路层:负责将数字信号在物理通道(网线)中准确传输。
四层模型逻辑:
发送端是由上至下,把上层来的数据在头部加上各层协议的数据(部首)再下发给下层。
接受端则由下而上,把从下层接收到的数据进行解密和去掉头部的部首后再发送给上层。
层层加密和解密后,应用层最终拿到了需要的数据。
【四】OSI七层模型的相关概念
【五】Linux中的进程状态种类
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中,受阻,在等待某个条件的形成或等待接受到信号)
- 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
- 僵死(进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
【六】Linux中ps aux指令与grep指令配合管理进程
ps相关指令
ps命令(Process Status)是最基本同时也是非常强大的进程查看命令。
- ps a 显示现行终端机下的所有程序,包括其他用户的程序。
- ps -A 显示所有程序。
- ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
- ps -e 此参数的效果和指定"A"参数相同。
- ps e 列出程序时,显示每个程序所使用的环境变量。
- ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
- ps -H 显示树状结构,表示程序间的相互关系。
- ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
- ps s 采用程序信号的格式显示程序状况。
- ps S 列出程序时,包括已中断的子程序资料。
- ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
- ps u 以用户为主的格式来显示程序状况。
- ps x 显示所有程序,不以终端机来区分。
ps aux | more 指令
这个指令可以显示进程详细的状态。
参数解释:
- USER:进程的所有者。
- PID:进程的ID。
- PPID:父进程。
- %CPU:进程占用的CPU百分比。
- %MEM:进程占用的内存百分比。
- NI:进程的NICE值,数值越大,表示占用的CPU时间越少。
- VSZ:该进程使用的虚拟内存量(KB)。
- RSS:该进程占用的固定内存量(KB)。
- TTY:该进程在哪个终端上运行,若与终端无关,则显示?。若为pts/0等,则表示由网络连接主机进程。
- WCHAN:查看当前进程是否在运行,若为-表示正在运行。
- START:该进程被触发启动时间。
- TIME:该进程实际使用CPU运行的时间。
- COMMAND:命令的名称和参数。
- STAT状态位常见的状态字符:
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);+ 位于后台的进程组;
ps aux | grep xxx命令
如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
例如我想要查看Python 的所有进程,可以在终端输入如下命令:
ps aux | grep python
便可以把Python相关的进程全部都打印到终端供我们查看。相关参数和之前的ps aux | more一致。
进程结束命令
我们可以使用kill命令来结束进程。
如下面的指令所示:
kill PID //杀掉进程
kill -9 PID //强制杀死进程
【七】Git,GitLab,SVN的相关知识
Git
Git是当前主流的一种开源分布式版本控制系统,可以有效、快速的进行项目版本管理。
Git没有中央服务器,不同于SVN这种需要中央服务器的集中式版本控制系统。
Git的功能:版本控制(版本管理,远程仓库,分支协作)
Git的工作流程:
Git的常用命令:
git init 创建仓库
git clone 克隆github上的项目到本地
git add 添加文件到缓存区
git commit 将缓存区内容添加到仓库中
GitLab
GitLab是一个基于Git实现的在线代码仓库软件,可以基于GitLab搭建一个类似于GitHub的仓库,但是GitLab有完善的管理界面和权限控制,有较高的安全性,可用于企业和学校等场景。
SVN
SVN全名Subversion,是一个开源的版本控制系统。不同于Git,SVN是集中式版本控制系统。
SVN只有一个集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
SVN的特点是安全,效率,资源共享。
SVN的常用操作:
Checkout 检出代码
Update 更新代码
Commit 提交代码
Add 提交新增文件
Revert to this version + commit 撤销已经提交的代码
【八】协程的相关概念
协程(Coroutine,又称微线程)运行在线程之上,更加轻量级,协程并没有增加线程总数,只是在线程的基础之上通过分时复用的方式运行多个协程,大大提高工程效率。
协程的特点:
- 协程类似于子程序,但执行过程中,协程内部可中断,然后转而执行其他的协程,在适当的时候再返回来接着执行。协程之间的切换不需要涉及任何系统调用或任何阻塞调用。
- 协程只在一个线程中执行,发生在用户态上的一个逻辑。并且是协程之间的切换并不是线程切换,而是由程序自身控制,协程相比线程节省线程创建和切换的开销。
- 协程中不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
协程适用于有大量I/O操作业务的场景,可以到达很好的效果,一是降低了系统内存,二是减少了系统切换开销,因此系统的性能也会提升。
在协程中尽量不要调用阻塞I/O的方法,比如打印,读取文件等,除非改为异步调用的方式,并且协程只有在I/O密集型的任务中才会发挥作用。
【九】Linux系统的相关概念
Linux系统是一种操作系统(Operating System简称OS),它是软件的一部分,是硬件基础上的第一层软件,即硬件和应用软件沟通的桥梁。
Linux系统系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序。Linux系统内核指的是提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。Linux发行套件系统是由 Linux系统内核与各种常用应用软件的集合产品。
在Linux系统中一切都是文件。在linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,Linux系统中的一切文件都是从“根(/)”目录开始的,并按照树形结构来存放文件,且定义了常见目录的用途,文件和目录名称严格区分大小写。
Linux系统的文件目录结构
- /usr:这是一个非常重要的目录,包含绝大多数的(多)用户工具和应用程序,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /lib:存放着系统开机时会用到的函数库,以及在/bin和/sbin下命令会调用的函数库,几乎所有的应用程序都需要用到这些共享库。
- /var:存放不断扩充的内容,如经常被修改的目录、文件(包括各种日志文件)等。
- /boot:存放启动Linux时所需的一些核心文件(linux内核文件),包括一些引导程序文件、链接文件、镜像文件等。
- /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,该目录名一般以用户账号命名,包含保存的文件、个人设置等。
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理命令。
- /bin:这个存放的是当前用户的系统管理命令(cat、cp、ps等)。
- /etc:存放所有的系统管理所需的配置文件和子目录(例如人员的帐号密码文件,各种服务的起始文件等)。
- /tmp:存放一些临时文件,在系统重启时临时文件将被删除。
- /snap:Ubuntu 16.04及之后版本引入了snap包管理器,与之相关的目录、文件(包括安装文件)位于/snap中。
- /lost+found:该目录一般情况下是空的,当系统非法关机后会在该目录生成一些遗失的片段。
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到该目录下。
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /root:该目录为系统管理员用户主目录。
- /opt:该目录存放安装的第三方软件,如Oracle数据库就可以安装到该目录下。
- /mnt:挂载其他的文件系统(含硬盘分区)的目录。
- /lib64:类似lib目录,存放64位库文件。
- /srv:可以视作service的缩写,是一些网络服务启动后,这些服务需要取用的数据目录,常见的服务例如www,ftp等。
- /proc:这个目录本身是一个虚拟文件系统,它放置的数据都是在内存当中,不占用硬盘的容量。
- /sys:这个目录其实跟/proc非常的相似,也是一个虚拟的文件系统主要也是记录与内核相关的信息,不占用硬盘容量。
- /dev:在linux中任何的设备和接口设备都是以文件的形式存在于这个目录当中。你只要到通过访问这个目录下的某个文件就相当于访问某个设备。
Linux系统种类
- 红帽企业版Linux:RedHat是全世界内使用最广泛的Linux系统。它具有极强的性能与稳定性,是众多生成环境中使用的(收费的)系统。
- Fedora:由红帽公司发布的桌面版系统套件,用户可以免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RedHat系统中,因此Fedora也成为RedHat系统的试验版本。
- CentOS:通过把RedHat系统重新编译并发布给用户免费使用的Linux系统,具有广泛的使用人群。
- Deepin:在中国发行,对优秀的开源成品进行集成和配置。
- Debian:稳定性、安全性强,提供了免费的基础支持,在国外拥有很高的认可度和使用率。
- Ubuntu:是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力。Ubuntu与Fedora都是极其出色的Linux桌面系统,而且Ubuntu也可用于服务器领域。
【十】Linux系统和Windows系统的区别?
- Linux系统更稳定且有效率。
- Linux系统是免费(或少许费用),而Windows系统是商业化主导。
- Linux系统漏洞少且快速修补。
- Linux系统支持多用户同时使用计算机。
- Linux系统有更加安全的用户与文件权限策略。
- Linux系统可以访问源代码并根据用户的需要修改代码,而Windows系统不能访问源代码。
- Linux系统更能支持多种深度学习配套软件,但是windows系统能支持大量的视频游戏软件。
【十一】POC验证测试的概念
POC(Proof of Concept),即概念验证。通常是企业进行产品选型时或开展外部实施项目前,进行的一种产品或供应商能力验证工作。主要验证内容:
- 产品的功能。产品功能由企业提供,企业可以根据自己的需求提供功能清单,也可以通过与多家供应商交流后,列出自己所需要的功能。
- 产品的性能。性能指标也是由企业提供,并建议提供具体性能指标所应用的环境及硬件设备等测试环境要求。
- 产品的API适用性。
- 产品相关技术文档的规范性、完整性。
- 涉及到自定义功能研发的,还需要验证API开放性,供应商实施能力。
- 企业资质规模及企业实施案例等。
验证内容归根结底,就是证明企业选择的产品或供应商能够满足企业提出的需求,并且提供的信息准确可靠。
POC测试工作的前提:
- 前期调研充分,并已经对产品或供应商有了比较深入的沟通了解。
- 企业对自己的产品需求比较清晰。
POC测试工作参与者:
使用用户代表、业务负责人、项目负责人、技术架构师、测试工程师、商务经理等。
POC测试工作准备文档:
- POC测试工作说明文档。内容包括测试内容、测试要求(如私有化部署)、测试标准、时间安排等。
- 功能测试用例。主要确认功能可靠性,准确性。内容包括功能名称、功能描述等。
- 场景测试用例。主要测试企业团队实施响应速度、实施能力、集成能力。这部分通常按照企业需求而定,不建议太复杂,毕竟需要供应商实施,拖的太久企业耐性受到影响,时间也会被拉长。
- 技术测评方案。主要验证产品的性能、功能覆盖情况、集成效率、技术文档的质量。
- 商务测评方案。主要包括企业实力、企业技术人才能力、版权验证、市场背景、产品报价等。
POC测试工作的主要流程:
第一阶段:工作启动
由商务或者对外代表对供应商发布正式邀请并附POC测试工作说明。
建立POC协同群。以满足快速沟通,应答。
涉及到私有化部署的,需要收集供应商部署环境要求,并与供应商一起进行部署工作,同时企业参与人员对部署工作情况做好记录。
第二阶段:产品宣讲及现场集中测试
供应商根据企业提供的POC测试工作说明及相应测试模块的用例或方案进行产品现场测试论证。
企业参与人员参与功能测试,并填写记录和意见。此阶段供应商往往需进行现场操作指导。
第三阶段:技术测评
供应商根据企业提供的技术要求给出相关支持技术文档,企业进行现场对比,根据实际情况进行统计记录。并保留供应商提供的资料和对比记录。
涉及到场景demo设计的,建议企业对实施人员能力、实施时长、实施准确性进行对比。
第四阶段:间歇性测试工作
该阶段是在第一阶段启动时,就可以开始了。测试功能外,还包括关键用户使用的体验心得、易用性评价。该部分允许企业用户主观评价,建议可以扩大范围组织间歇性测试,并做好测试用户记录。间歇时间1天或者多天根据实际情况安排。
第五阶段:商务验证
供应商根据企业提供的商务测评方案,积极配合工作。涉及到客户核实的,还需要企业进行考证。该部分工作也是从第一阶段启动时,就可以开始了。
第六阶段:背书归档、分析总结
每个阶段的工作都需要记录好参与人、时间、工作时间,并将测试过程中企业的、供应商的文档分类归档。对每个阶段进行分析对比,总结评价。最后进行整体工作分析总结。
POC工作按照不同企业和程度,测试的方式和投入力度不一样。但是目的都是相同的——验证产品或供应商能力是否满足企业需求。
【十二】Docker的相关概念及常用命令
Docker简介
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
Docker可以打包代码以及相关的依赖到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。
Docker的应用场景:
- Web应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务器环境中部署/调整数据库或其它的后台应用。
Docker架构
Docker包括三个基本单元:
- 镜像(Image):Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最简系统的root文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker容器使用
Docker客户端
Docker客户端非常简单,我们可以直接输入docker命令来查看到Docker客户端的所有命令选项。也可以通过命令docker command --help更深入的了解指定的Docker命令使用方法。
docker
容器使用
获取本地没有的镜像。如果我们本地没有我们想要的镜像,我们可以使用 docker pull 命令来载入镜像:
docker pull 镜像
启动容器。以下命令使用ubuntu镜像启动一个容器,参数为以命令行模式进入该容器:
docker run -it 镜像 /bin/bash
参数解释:
- -i:允许你对容器内的标准输入 (STDIN) 进行交互。
- -t:在新容器内指定一个伪终端或终端。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式Shell。
我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。
要退出终端,直接输入exit或者CTRL+D。
启动已经停止运行的容器。查看所有的容器的命令如下:
docker ps -a
我们也可以用docker ps命令查看正在运行的容器。
docker ps
我们可以使用 docker start 启动一个已停止的容器:
docker start 容器
想要后台运行容器,我们可以过 -d 指定容器的运行模式:
docker run -itd --name 指定创建的容器名 容器 /bin/bash
加了 -d 参数默认不会进入容器,想要进入容器需要使用下面的指令进入容器:
- docker attach
- docker exec:推荐大家使用 docker exec 命令,因为使用此命令退出容器终端,不会导致容器的停止。
docker attach 容器 //如果从这个容器退出,会导致容器的停止。
docker exec -it 容器 /bin/bash //如果从这个容器退出,不会导致容器的停止。
想要停止容器,其命令如下:
docker stop 容器ID
停止的容器重启命令:
docker restart 容器ID
删除容器:
docker rm -f 容器ID
Docker镜像使用
列出镜像列表。我们可以使用 docker images 来列出本地主机上的镜像。
docker images
各个参数解释:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
查找镜像:
docker search 镜像
各个参数解释:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
删除镜像:
docker rmi 镜像
Docker镜像的修改和自定义
docker镜像的更新
在启动docker镜像后,写入一些文件、代码、更新软件等等操作后,退出docker镜像,之后在终端输入如下命令:
docker commit -m="..." -a= "..." 容器ID 指定要创建的目标镜像名称
参数解释:
- commit:固定格式
- -m:提交的描述信息
- -a:指定镜像作者
接着可以用docker images查看镜像是否更新成功。(注意:不要创建名称已存在的镜像,这样会使存在的镜像名称为none,从而无法使用)
镜像名称修改和添加新标签
更改镜像名称(REPOSITORY):
docker tag 容器ID 新名称
更改镜像tag,不修改名称:
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
Docker容器和本机之间的文件传输
主机和容器之间传输文件的话需要用到容器的ID全称。
从本地传输到容器中:
docker cp 本地文件路径 容器name:/root/(容器路径)
从容器传输到本地上:
docker cp 容器name:/root/(容器路径) 本地文件路径
Docker挂载宿主机文件目录
docker可以支持把一个宿主机上的目录挂载到镜像的目录中。
在启动docker镜像时,输入如下命令:
docker run -it -v /宿主机绝对路径:/镜像内挂载绝对路径 容器REPOSITORY /bin/bash
通过-v参数,冒号前为宿主机目录,冒号后为镜像内挂载的路径,必须为绝对路径。
如果宿主机目录不存在,则会自动生成,镜像里也是同理。
默认挂载的路径权限为读写。如果指定为只读可以用:ro
docker run -it -v /宿主机绝对路径:/镜像内挂载绝对路径:ro 容器REPOSITORY /bin/bash
【十三】深度学习中常用的文件格式汇总
- csv:可用于方便的存储数据与标签。
- txt:最常见的文件格式,可用于存储数据路径与数据label。
- Json:是一种轻量级的数据交换格式,常用于保存数据label。
- Yaml:是一种数据序列化语言,通常用于编写配置文件,比如将网络模型配置参数与训练参数解耦至Yaml文件中,方便训练与优化。
- Cfg:Darknet中经典的保存网络模型结构的文件格式。
- Protobuf:是一个高效的结构化数据存储格式,可以存储神经网络的权重信息,在caffe中经常出现它的身影。
【十四】TCP和UDP的区别?
- TCP面向连接,UDP是无连接的;
- TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
- TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道;
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
- TCP面向字节流(可能出现黏包问题),本质上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的(不会出现黏包问题);
- UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
- TCP首部开销20字节;UDP的首部开销小,只需8个字节。