/images/avatar.jpg

我的个人博客

Map的遍历方式

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 package MapTest; import java.util.Iterator; import java.util.Map; import java.

常用函数

将字符串转换为字符: 1 2 String str = "42"; char[] chars = str.toCharArray(); 去除字符串的空格: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 String trim //trim()方法移除字符串两侧(头尾)的空白字符(空格、tab键、换行符) String strip 1、trim()方法不足之处 trim()早在Java早期就存在,当时Unicode还没有完全发展到我们今天广泛使用的标准。 trim()方法移除字符串两侧的空白字符(空格、tab键、换行符) 支持Unicode的空白字符的判断应该使用isWhitespace(int)。 此外,开发人员无法专门删除缩进空白或专门删除尾随空白。 简单得说就是,trim()方法无法删除掉Unicode空白字符,但用Character.isWhitespace©方法可以判断出来。 2、strip()方法 JAVA11(JDK11)中的strip()方法,适用于字符首尾空白是Unicode空白字符的情况,通过一段代码来具体看一下, public static void main(String[] args) { String s = “\t abc \n”; System.

给不同版本Pytorch指定特定CUDA版本

参考 在服务器上安装不同版本的pytorch 先创建一个虚拟环境 1 conda create -n pytorch1.0 python=3.7 切换到该虚拟环境(这样就不会影响原有的环境了) 1 conda activate pytorch1.0 方法一: 1 conda install pytorch=1.0.0 torchvision -c pytorch 这样就会安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Collecting package metadata (current_repodata.

video-based pose transfer method

Dance Dance Generation: Motion Transfer for Internet Videos 该文章可以实现在复杂背景下的pose transfer。 In summary, our contributions include the following. We demonstrate personalized motion transfer on videos from the Internet. We propose a novel two-stage frame-work to synthesize people performing new movements and fuse them seamlessly with background scenes. (主要贡献:实现复杂背景下的姿态转换) We perform qualitative and quantitative evaluations validating the superiority of our method over existing state-of-the-art. method: (主要的思想是先将利用语义分割图将前景中的人物进行分割,采用STN 将前景人物与目标人物进行对齐。随后通过第二阶段进行修正)

计算机网络基础

网络基础知识 TCP/IP是通信协议的统称 TCP/IP就是IP,TCP,HTTP等协议的集合。 简单的说,协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。两台计算机之间必须能够支持相同的协议,并准守相同协议进行处理,这样才能实现相互通信。 分组交换协议 分组交换协议是指将大数据分割成一个个叫做包的较小单位进行传输的方法。 协议的分层 每个分层都接受由它下一层所提供的特定服务,并且负责为它的上一层提供特定的服务。上下层之间进行交互时所遵守的约定称为接口。同一层之间的交互叫做“协议”。 传输方式的分类 面向有连接型与面向无连接型 通过网络发送数据可以大致分为面向有连接型与面向无连接型。 面向有连接型:字发送数据数据之前,需要在收发主机之间建立一条通信线路。就好比人们平常打电话 (如TCP协议) 面向无连接型:不要求建立和断开连接。发送端可以在任何时候自由发送数据。反之,接收端也永远不知道自己会在何时收到数据。因此在面向无连接型时,接收端常常需要确认是否接收到数据。就好比去邮局寄包裹 (如UDP协议,IP协议) 电路交换和分组交换 网络通信方式大致可以分为两种:电路交换和分组交换。 电路交换历史久远,主要用于过去的电话网 电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。 分组交换则是比较新的通信技术,TCP/IP则是采用了分组交换技术(重点介绍)。 让连接到通信电路的计算机将所要发送的数据分为多个数据包,按照一定的顺序排列之后分别发送。这就是分组交换。有了分组交换,数据被细分之后,所有计算机就可以一齐收发数据。 每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。 在一个邮局通信系统中,邮局收到一份邮件之后,先存储下来,然后把相同目的地的邮件一起转发到下一个目的地,这个过程就是存储转发过程,分组交换也使用了存储转发过程。 地址 TCP/IP通信中使用MAC地址、IP地址、端口号等信息作为地址标识。甚至在应用层中,可以使用电子邮件地址作为网络通信的地址。 地址应该具有唯一性和层次性 MAC地址和IP地址在标识一个通信主体时虽然都具有唯一性,但是其中只有IP具有层次性。 TCP/IP的基础知识 参考 互联网进行通信时需要相应的网络协议,TCP/IP原本就是为使用互联网而开发制定的协议族。 因此互联网的协议就是TCP/IP,TCP/IP就是互联网的协议。 http是应用层协议,tcp是传输层协议,IP是网络层协议,不是同一层的协议,协议是一层层打包的。 像这样**[以太[IP[TCP[http[应用数据]]** OSI与TCP/IP的区别和联系 ISO制定了OSI模型,OSI参考模型中各个分层的作用: ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员(IEFT)自己开发的TCP/IP协议栈获得了更为广泛的应用。如图所示,是TCP/IP参考模型和OSI参考模型的对比示意图。 TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层。 在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络接口层。 网络7层协议,4层,5层? 7层指OSI模型,包括物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 4层指TCP/IP,包括网络接口层、网络层、传输层、应用层 5层只是OSI和TCP/IP的综合,是业界产生出来的非官方协议模型,但是很多具体的应用。实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。五层体系结构包括:物理层、数据链路层、网络层、传输层、应用层、。 下面将针对“5层”进行介绍 TCP/IP分层模型与通信示例 每个分层中都会对所发送的数据附加一个首部,在这个首部中包含了必要的信息 网络中传输的数据包由两部分组成:一部分是协议要用到的首部,另一部分是上层传过来的数据。 在数据包的首部明确表明了协议应该如何读取数据。 TCP/IP各层对邮件的收发处理: 每个包首部至少都会有两个信息:一个是发送端和接收端地址(以太网会用MAC地址,IP会用IP地址,TCP会用端口号,即使是应用程序,也会用电子邮件这样的信息作为一种地址标识);另一个是上层协议的协议类型(一个标识位,用来标识上一层的协议信息)。 什么是端口 分层中的包信息: 1.物理层(硬件) bit,byte,帧的区别和联系 1byte=8bit 在网络中,网络设备将“bit”组成一个个的byte,然后这些字节“封装”成帧,在网络上传输。为什么要把数据“封装”成帧呢?因为用户数据一般都比较大,有的可以达到MB字节,一下子发送出去十分困难,于是就需要把数据分成许多小份,再按照一定的次序发送出去。 以太网的帧值总是在一定范围内浮动,最大的帧值是1518字节,最小的帧值是64字节。在实际应用中,帧的大小是由设备的MTU(最大传输单位)即设备每次能够传输的最大字节数自动来确定的。

Linux基础

Linux中的命令行界面称为shell (图形界面称为GUI)。 bash shell(bash)是大多数Linux系统的默认shell,还用很多其他的shell ,例如ksh和csh。 文本模式登录后所取得的程序被称为壳(shell),这是因为这只程序负责最外面跟使用者(我们)打交道,所以被戏称为“壳” 在Linux中的shell为bash shell也只是一个普通的用户程序。它仅仅需要从键盘读取数据、向显示器输出数据和运行其他程序的能力。 可以将一系列shell命令放到一个文件中,然后将此文件作为shell的输入来运行。包含shell命令的文件称为shell脚本。 Linux应用程序 Linux的命令行用户界面(shell)中包含大量的标准应用程序。这些程序大致可以分为以下6类: 文件和目录操作命令 过滤器 程序设计工具,如编辑器和编译器 文档处理 系统管理 其他 常用指令: cal : 日历查看 date:日期查看 shift+pageup /shift+pageup:向上翻页/向上翻页 内核结构 运行在硬件之上的为操作系统,其作用为控制硬件并且为其他程序提供系统调用接口。这些系统调用允许用户创立并管理进程、文件以及其他资源。 Linux具有三种不同的接口:真正的系统调用接口,库函数接口,由标准应用程序构成的接口。 内核位于硬件之上,负责实现I/O设备和存储管理单元的交互,并控制CPU对前苏诉设备的访问。 最底层:最底层包含中断处理程序,它们是与设备交互的主要方式,以及底层的分派机制 中间层:中间层为内核的三个主要部件,I/O部件,内存管理部件,进程管理部件。 I/O部件: 内存管理部件:任务包括维护虚拟内存到物理内存的映射,维护最近被访问页面的缓存以及实现一个好的页面置换算法,并根据需要把需要的数据和代码页读入内存中。 进程管理部件:主要任务是进程的创建和终止 最顶层:最顶层为到内核的系统调用接口。所有系统调用都来自这里,其触发一个陷入,并将系统从用户态转换到受保护的内核态,继而将控制权交给上诉的内核部件之一。 Linux中的进程 在大多数单用户的工作站中,即使用户已经退出登录了,仍然会有很多后台进程,称为守护进程。计划任务是一种典型的守护进程。它每个几分钟运行一次来检查是否有工作需要它完成。 在Linux中,系统调用fork将会创建一个与原始进程完全一样的进程副本。调用fork函数的进程称为父进程,新的进程称为子进程。 进程以其PID来命名 Linux中,进程间可以通过消息传递的方式进行通信。有两种方式: 管道:一个进程子啊管道中写入字节流,另一个进程从这个管道中读取字节流。管道是同步的,因为当一个进程试图从一个管道中读取数据,这个进程就会被挂起直到管道中有数据为止。 shell中的管线就是用管道技术实现的,例如sort <file | head,有两个进程sort,head 软中断:一个进程可以给另一个进程发送信号,进程可以告诉操作系统当信号到来时他们希望发生什么事件。相关的选择有忽略这个信号、抓取这个信号或被这个信号杀死。 Linux中进程与线程的实现 每一个进程都有运行用户程序的用户模式。 但是当它的某个线程调用系统调用之后,进程就会陷入内核模式并且运行在内核上下文中,他将使用不同的内存映射并且拥有对所有机器资源的访问权。它还是同一个进程,但是现在拥有更高的权限,同时拥有自己的内核堆栈以及内核程序计数器。