/proc

/proc 在GUN/Linux操作系统中,/proc 是一个位于内存中的伪文件系统(in-memory pseudo-file system)。该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存、磁盘io、设备挂载信息和硬件配置信息等。proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。proc目录也是内核提供给我们的查询中心,我们可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。在Linux系统中,许多工具的数据来源正是proc目录中的内容。例如,lsmod命令就是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名。 cat /proc/pagetypeinfo 查看内存碎片情况 cat / proc / pagetypeinfo 我看到三种types的内存区域; DMA DMA32 正常 Linux如何select一个内存区域来分配一个新的页面? 写入/读取受内存保护的进程的内存 我怎样才能减less最小的Linux进程的内存占用量 区分Java应用程序mmaped内存和Linux上的JVM mmapped内存 使用C用户空间代码读取Linux / proc接口的最佳方法是什么? 在Linux程序中跟踪积极使用的内存 找出一个进程在Linux上使用多less内存页面 OSError:无法从python subprocess.call分配内存 python subprocess.Popen错误与OSError:一段时间后不能分配内存 Shell脚本循环在CygWin下耗尽内存 在fork ()中重复的段? 这些内存区域仅为32位系统定义,而不在64位中定义。 记住这些是我们正在讨论的内核可访问的main memory 。 在32 bit (4GB)系统中,内核与用户空间之间的分割为1:3 。 含义内核可以访问1GB和用户空间3GB。 内核的1GB分割如下: Zone_DMA (0-16MB): 永久映射到内核地址空间。 出于兼容性原因,较旧的ISA设备只能处理较低的16MB主内存。 Zone_Normal (16MB-896MB): 永久映射到内核地址空间。 许多内核操作只能使用ZONE_NORMAL所以它是性能最关键的区域,并且是内核主要分配的内存。 ZONE_HIGH_MEM (896MB以上): 没有永久映射到内核的地址空间。 内核可以访问整个4GB的主内存。 内核的1GB通过Zone_DMA & Zone_Normal和用户的3GB通过ZONE_HIGH_MEM 。 使用英特尔的Physical Address Extension (PAE) ,可以获得4个额外的位来寻址主存储器,产生36位,总共可以访问64GB的内存。 增量地址空间 (36位地址 – 32位地址)是ZONE_HIGH_MEM用于映射到用户访问的主存储器 (即2GB – 4GB之间)的位置。 ...

2011-10-27 · 1 min · 80 words · -

input tag

input tag Optional Attributes: type: button,…. value:Specifies the value of an input element Event Attributes: ondblclick: Script to be run on a mouse double-click.

2011-10-27 · 1 min · 24 words · -

glibc

glibc glibc 是非常底层的系统库,千万不要自己手动更新,网上有很多教训。 glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。 glib glib是GTK+的基础库,它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成,可以在[http://www.gtk.org gtk网站]下载其源代码。是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。GTK+是可移植的,当然glib也是可移植的,你可以在linux下,也可以在windows下使用它。使用gLib2.0 (glib的2.0版本) 编写的应用程序,在编译时应该在编译命令中加入pkg-config –cflags –libs glib-2.0,如: gcc pkg-config –cflags –libs glib-2.0 hello.c -o hello 使用glib最有名的就是GNOME了。 eglibc eglic是二进制兼容glibc的,就是说如果代码使用的是eglic的库,那么换成glic之后无需重新编译。glibc为了实现最优化处理,致使在空间占用上越来越为人诟病。eglibc的主要特性是更好的支持嵌入式架构,支持不同的shell(GLIBC只支持bash),支持-Os,可配置组件,稳定分支修正了一些重要Bug等。 查看 glibc 版本, glibc version ldd --version # ldd命令为 glibc 提供 dpkg -s libc6 | grep Ver https://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%92%8C%20glib%E7%9A%84%E5%8C%BA%E5%88%AB.html https://shixiangwang.github.io/home/cn/post/2020-09-28-note-about-glibc/

2011-10-26 · 1 min · 46 words · -

servlet中init()和service()方法的区别

servlet中init()和service()方法的区别 首先要明确servlet的生命周期和HTTP协议. Serlvet接口只定义了一个服务方法就是service,而HttpServlet类实现了该方法并且要求调用下列的方法之一: doGet: 处理GET请求 doPost: 处理POST请求 当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST 操作。然后它调用下面的一个方法: doGet 或 doPost。如果请求是GET就调用doGet方法,如果请求是POST就调用doPost方法。doGet和doPost都接受请求 (HttpServletRequest)和响应(HttpServletResponse)。 get和post这是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。 在servlet开发中,以doGet()和doPost()分别处理get和post方法。 另外还有一个doService(), 它是一个调度方法,当一个请求发生时,首先执行doService(),不管是get还是post。在HttpServlet这个基类中实现了一个角度, 首先判断是请求时get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。你也可以直接过载doService()方法,这样你可以不管是get还是post。都会执行这个方法。 service()是在javax.servlet.Servlet接口中定义的, 在 javax.servlet.GenericServlet 中实现了这个接口, 而 doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类. 所有可以这样理解, 其实所有的请求均首先由 service() 进行处理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判断请求类型是 Get 还是 Post, 然后调用对应的 doGet/doPost 执行. doGet: 处理GET请求 doPost: 处理POST请求 doPut: 处理PUT请求 doDelete: 处理DELETE请求 doHead: 处理HEAD请求 doOptions: 处理OPTIONS请求 doTrace: 处理TRACE请求 通常情况下,在开发基于HTTP的servlet时,开发者只需要关心doGet和doPost方法,其它的方法需要开发者非常的熟悉HTTP编程,因此 这些方法被认为是高级方法。 而通常情况下,我们实现的servlet都是从HttpServlet扩展而来。 doPut和doDelete方法允许开发者支持HTTP/1.1的对应特性; doHead是一个已经实现的方法,它将执行doGet但是仅仅向客户端返回doGet应该向客户端返回的头部的内容; doOptions方法自动的返回servlet所直接支持的HTTP方法信息; doTrace方法返回TRACE请求中的所有头部信息。 对于那些仅仅支持HTTP/1.0的容器而言,只有doGet, doHead 和 doPost方法被使用,因为HTTP/1 ...

2011-10-23 · 2 min · 286 words · -

servlet hello world

servlet hello world 要运行Servlet,则需要JSP/Servlet container,建议初学者用Tomcat. Tomcat 7.0.xx: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.xx/bin/apache-tomcat-7.0.xx.tar.gz 然后把这个压缩包解压到: /home/wiloon/opt/apache-tomcat-7.0.xx 然后再配置环境变量;添加三个系统变量: JAVA_HOME="/opt/jvm/jdk1.7.0" TOMCAT_HOME="/home/wiloon/program/apache-tomcat-7.0.xx" CLASSPATH: %JAVA_HOME%/lib;%TOMCAT_HOME%/lib Tomcat的环境变量就配置完毕了,下面检验Tomcat是否能够运行: 转到/home/wiloon/program/apache-tomcat-7.0.xx/bin这个目录,运行sh startup.sh,在浏览器中输入http://localhost:8080,出现欢迎界面,则表示Tomcat没问题了。然后写入你的第一个Servlet。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>"); out.println("This is my first Servlet"); out.println("</title></head><body>"); out.println("<h1>Hello,World!</h1>"); out.println("</body></html>"); } } 然后照样用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servlet.* ...

2011-10-23 · 1 min · 94 words · -

python timed task, 定时任务

python timed task, 定时任务 while True sleep Timeloop threading.Timer sched schedule APScheduler Celery Apache Airflow while True: + sleep() 主要缺点: 只能设定间隔,不能指定具体的时间,比如每天早上8:00 sleep 是一个阻塞函数,也就是说 sleep 这一段时间,程序什么也不能操作。 Timeloop库 Timeloop是一个库,可用于运行多周期任务。这是一个简单的库,它使用decorator模式在线程中运行标记函数。 threading.Timer threading 模块中的 Timer 是一个非阻塞函数,比 sleep 稍好一点,timer最基本理解就是定时器,我们可以启动多个定时任务,这些定时器任务是异步执行,所以不存在等待顺序执行问题。 内置模块sched sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行任务。同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。 比threading.Timer更好,不需要循环调用。 调度模块schedule schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。schedule允许用户使用简单、人性化的语法以预定的时间间隔定期运行Python函数(或其它可调用函数)。 任务框架 APScheduler APScheduler(advanceded python scheduler)基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个Python定时任务系统。 它有以下三个特点: 类似于 Liunx Cron 的调度程序(可选的开始/结束时间) 基于时间间隔的执行调度(周期性调度,可选的开始/结束时间) 一次性执行任务(在设定的日期/时间运行一次任务) APScheduler有四种组成部分: 触发器(trigger) 包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的。 作业存储(job store) 存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。 执行器(executor) 处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。 调度器(scheduler) 是其他的组成部分。你通常在应用只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。通过配置executor、jobstore、trigger,使用线程池(ThreadPoolExecutor默认值20)或进程池(ProcessPoolExecutor 默认值5)并且默认最多3个(max_instances)任务实例同时运行,实现对job的增删改查等调度控制 分布式消息系统Celery Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具, 也可用于任务调度。Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,Celery 不会是一个好选择。 数据流工具 Apache Airflow Apache Airflow 是Airbnb开源的一款数据流程工具,目前是Apache孵化项目。以非常灵活的方式来支持数据的ETL过程,同时还支持非常多的插件来完成诸如HDFS监控、邮件通知等功能。Airflow支持单机和分布式两种模式,支持Master-Slave模式,支持Mesos等资源调度,有非常好的扩展性。被大量公司采用。 ...

2011-10-23 · 1 min · 78 words · -

网关,路由

网关,路由 网关 网关实质上是一个网络通向其他网络的IP地址。 比如有网络A和网络B 网络A的IP地址范围为"192.168.1.1~192.168.1.254",子网掩码为255.255.255.0 网络B的IP地址范围为"192.168.2.1~192.168.2.254",子网掩码为255.255.255.0 在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机 (或集线器) 上,TCP/IP协议也会根据子网掩码 (255.255.255.0) 判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。 如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。 只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢? 网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器 (实质上相当于一台路由器) 、代理服务器 (也相当于一台路由器) 。 默认网关 如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。 默认网关必须是电脑自己所在的网段 (将IP地址和子网掩码作与运算,得到网段) 中的IP地址,而不能填写其他网段中的IP地址。 自动网关 自动网关设置就是利用DHCP服务器来自动给网络中的电脑分配IP地址、子网掩码和默认网关。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。 路由器 理解IP路由器原理及工作机制 一个路由器其实就是一个超小型的电脑,而且操作系统大多为Linux,但是在做这些操作的时候你可能并不知道IP路由是如何工作的。本文将助你理解IP路由的原理,以及它是如何工作的。 IP路由涉及到IP数据报文的转发。如果主机与目的主机直接相连,那么主机可以直接发送IP报文到目的主机,这个过程比较简单。例如,通过点对点的链接或通过网络共享。如果主机与目的主机没有直接相连,那么主机会将IP报文发送给默认的路由器,然后由路由器来决定往哪发送IP报文。 普通的主机与路由器之间的根本区别在于,主机不会将一个报文从一个接口转发到另一个接口,而路由器可以转发报文,大多数的多用户系统都可以被配置,从而被当作路由器来用。 因此,一个普通路由算法可以被用在路由器上,同样也可以用在一台普通主机上。当一台主机可以用作路由器时,我们通常说这台主机嵌入了路由器的功能。这种具备嵌入路由器功能的主机平常不会转发报文,除非我们对它进行了配置,使它开启这种功能。 IP层维护着一张路由表,当收到数据报文时,它用此表来决策接下来应该做什么操作。当从网络侧接收到数据报文时,IP层首先会检查报文的IP地址是否是主机自身的地址相同,如果数据报文中的IP地址是主机自身的地址,那么报文将被发送到传输层相应的协议中去。 如果报文中的IP地址不是主机自身的地址,并且主机配置了具备路由的功能,那么报文将被转发;否则,报文就被丢弃。 路由表中的数据一般是以条目形式存在,路由表条目包含以下主要的条目项: 目的IP地址: 此字段表示目标的IP地址。这个IP地址可以是某一台主机的地址,也可以是一个网络地址。如果这个条目包含的是一个主机地址,那么它的主机ID标记为非零;如果这个条目包含的是一个网络地址,那么它的主机ID被标记为零。 下一个路由器的IP地址: 为什么我们使用"下一个"的说法,是因为下一个路由器并不总是最后的目的路由器,但它很可能是一个中间路由器。条目给出下一个路由器的地址是用来转发从相应接口收到的IP数据报文。 标志: 这个字段提供了另一组重要信息,如目的IP地址(之前提到的)是一个主机地址还是一个网络地址。此外,从标志中可以得知下一个路由器(之前提到的)真的是一个路由器还是一个直接相连的接口。 网络接口规范: 一些数据报文的网络接口规范,这个规范跟随报文一起传播。 如果我们现在想简单而形象地描述路由过程,我们将会看到: 一旦主机(被配置成具备路由功能)的IP层接收到从网络侧来的数据报文,它将核实数据包中的目的IP地址,如果此IP不是主机的IP地址,那么包将通过路由表转发。 如果任何条目的第一个字段完全匹配目的IP地址或部分匹配目的IP地址,那么它将指示下一个路由器的IP地址。这是一个重要的信息,因为这些信息直接告诉主机数据包应该转发到哪一个"下一个路由器"去。而条目中所有其它的字段将提供更多辅助的信息来为路由转发做决定。 首先,路由表会去搜索一个"目的IP地址"字段与数据报文中目的IP地址完全相同的条目。这就意味着IP地址的主机ID与网络ID完全的匹配。如果找到,则数据包被发送到相应接口或中间路由器。 如果没有找到一个完全的匹配IP,那么就接着搜索相匹配的网络ID。如果找到,那么该数据报文会被转发到指定的路由器。所以我们看到,这个网络上的所有主机都通过这个路由表中的单个(这个)条目来管理。 如果上述步骤失败,即没有默认路由器,那么该数据报文最终无法被转发。任何无法投递的数据报文都将产生一个ICMP主机不可达或ICMP网络不可达的错误,并将此错误返回给生成此数据报文的应用程序。 在路由表中包含与网络相关的路由条目是一个很大的优点。其优点在于,拥有一个与完整网络相关的条目,能够避免包含此网络中所有单独的主机条目,这使得路由表的大小降到一个可收受的数量级,这样就非常好。 网关和路由器的区别 对于路由器的设置,很多朋友们都还不大了解,或许听过,但是设置的时候会很迷糊,不知道如何下手。设置宽带路由器时,你会发现在在"高级路由"设置中有两个选项: 网关和路由器。今天我们来讲讲这两个的区别。 网关 简而言之,网关是网络的进口和出口 (网关还有其他功能,如协议翻译……) ,网关定义网络的边界。 路由器使用一系列算法决定网络间的最短路径。 路由器使用静态路由或动态路由来决定网络间的最短路径。静态路由需要管理员手动设置,而动态路由使用一些协议来动态发现网络间的路径并判断最短路径。通常,对于小型网络使用静态路由,大型复杂网络使用动态路由。 现在,路由器集成了网关的功能,所以路由器也具有网关的功能。 从网关和路由器的定义来看,如果只是简单地连接两个网络,那么只需要网关就足够了。 假定只有两个网络: 网络A和网络B 要使网络A和网络B能够通信,只使用网关将这两个网络连接即可,因为只有两个网络,不需要决定网络间最短路径。 如果需要连接多个网络,为了保证网络的可靠性,网络结构需要设计为全网状或部分网状,这样,为了网络间的通信,需要网关和路由器两种设备,因为当前路由器集成了网关的功能,所以只使用路由器一种设备就可以了。 假定有4个网络: 网络A、网络B、网络C、网络D 要使这4个网络之间能够通信,另外为了保证网络的可靠性,将这4个网络进行全网状连接,如下图: 例如,此时从网络A到网络D就有两条路径,所以需要使用路由器来决定网络间的最短路径。 下面来看看宽带路由器中"高级路由"中的网关和路由器选项: 网关: 如果此宽带路由器是网络上唯一一台连接Internet的路由器,选择网关。此时宽带路由器作为网络的进/出口。计算机基础教程 路由器: 如果网络中还有其他路由器,选择路由器。 总结: 1、对于家庭共享上网,只需要使用网关即可,所以在宽带路由器中选择"网关"选项 2、对于大型企业网络内部,或大型企业网络连接Internet,由于网络中可能存在其他路由器,所以应当选择宽带路由器中的"路由器"选项,以决定网络间的最短路径 PS: 默认网关 有时在Windows中设置网络时,我们经常会看到"默认网关"的设置 ...

2011-10-23 · 1 min · 97 words · -

servlet-api.jar

servlet-api.jar 用于在servlet环境下开发程序的一组api,虽然叫servlet-api.jar但其实包里除了大部分的接口外还有一些javabean和抽象类、之所以叫api是因为这个包是开发基于servlet规范的标准接口(这个接口的含义和java里的interface不同,不要混淆)。 既然开发jsp、servlet的程序,就应该知道这是基于http(请求、响应)协议的,那么在这里请求和响应就对应为servlet-api.jar中的ServletRequest和ServletResponse接口,接口中定义了作为一个请求和一个响应信息应该具备的方法,比如从请求信息中可以获取客户端的ip,用户提交的信息等等,从响应信息中可以获取客户端的输出流,响应类型等等,当然中间的过程是由servlet容器封装好的,等我们开发servlet时会直接使用这些接口来编写具体的业务代码,其他的处理过程就全由容器处理了。 当然这个jar的接口是按照servlet规范编写的,面向标准接口编程的好处就是我们开发出的一个web工程即可以部署到tomcat、也可以部署到weblogic或其他servlet容器下运行,所有的servlet容器都使用了相同接口所以我们可以无缝移植(定义标准很重要),还记得jdbc吧?只要用接口访问数据库即可,你不必担心底层是什么数据库。 但也许你不会在每个应用服务器下都搜到这个名字的jar(tomcat里有),因为不同的servlet容器的功能不同,比如一些功能强大的服务器除了实现了基础的servlet规范外还支持一些javaee的规范(如ejb,jms等等),所以这组api可能会被不同的厂商封装到自己的jar中,如weblogic就放到了weblogic.jar中.

2011-10-23 · 1 min · 5 words · -

HTTP basic

HTTP basic get/post 1.HTTP请求格式: 在HTTP请求中,第一行必须是一个请求行 (request line) ,用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部 (header) 小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体 (body) ]。 重定向 Redirect 重定向是指当浏览器请求一个URL时,服务器返回一个重定向指令,告诉浏览器地址已经变了,麻烦使用新的URL再重新发送新请求。 例如,我们已经编写了一个能处理/hello的HelloServlet,如果收到的路径为/hi,希望能重定向到/hello 如果浏览器发送GET /hi请求,RedirectServlet将处理此请求。由于RedirectServlet在内部又发送了重定向响应,因此,浏览器会收到如下响应: HTTP/1.1 302 Found Location: /hello 当浏览器收到302响应后,它会立刻根据Location的指示发送一个新的GET /hello请求,这个过程就是重定向: ┌───────┐ GET /hi ┌───────────────┐ │Browser│ ────────────> │RedirectServlet│ │ │ <──────────── │ │ └───────┘ 302 └───────────────┘ ┌───────┐ GET /hello ┌───────────────┐ │Browser│ ────────────> │ HelloServlet │ │ │ <──────────── │ │ └───────┘ 200 └───────────────┘ 观察Chrome浏览器的网络请求,可以看到两次HTTP请求: 并且浏览器的地址栏路径自动更新为/hello。 重定向有两种: 一种是302响应,称为临时重定向,一种是301响应,称为永久重定向。两者的区别是,如果服务器发送301永久重定向响应,浏览器会缓存/hi到/hello这个重定向的关联,下次请求/hi的时候,浏览器就直接发送/hello请求了。 重定向有什么作用?重定向的目的是当Web应用升级后,如果请求路径发生了变化,可以将原来的路径重定向到新路径,从而避免浏览器请求原路径找不到资源。 HttpServletResponse提供了快捷的redirect()方法实现302重定向。 http2 https://halfrost.com/http2-http-frames/ ...

2011-10-23 · 1 min · 147 words · -

Conditional Get

Conditional Get HTTP条件Get HTTP条件Get是HTTP协议为了减少不必要的带宽浪费,提出的一种方案。详见http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP条件Get使用的时机: 客户端之前已经访问过某网站,并打算再次访问该网站 HTTP条件Get使用的方法: 客户端向服务器发送一个包询问是否在上一次访问网站的时间后是否更改了页面,如果服务器没有更新,显然不需要把整个网页传给客户端,客户端只要使用本地缓存即可,如果服务器对照客户端给出的时间已经更新了客户端请求的网页,则发送这个更新了的网页给用户。 下面是具体的发送接受报文: 客户端发送查询请求: ```java GET / HTTP/1.1 Host: www.sina.com.cn:80 If-Modified-Since:Thu, 4 Feb 2010 20:39:13 GMT Connection: Close 下面是当没有更新时服务器的相应: ```java HTTP/1.0 304 Not Modified Date: Thu, 04 Feb 2010 12:38:41 GMT Content-Type: text/html Expires: Thu, 04 Feb 2010 12:39:41 GMT Last-Modified: Thu, 04 Feb 2010 12:29:04 GMT Age: 28 X-Cache: HIT from sy32-21.sina.com.cn Connection: close 如果服务器网页已经更新就会发送把客户端的请求当作一个普通的Get请求发送相应报文 HTTP/1.0 200 OK Date: Thu, 04 Feb 2010 12:49:46 GMT Server: Apache Last-Modified: Thu, 04 Feb 2010 12:49:05 GMT Accept-Ranges: bytes X-Powered-By: mod_xlayout_jh/0.0.1vhs.markIII.remix Cache-Control: max-age=60 Expires: Thu, 04 Feb 2010 12:50:46 GMT Vary: Accept-Encoding X-UA-Compatible: IE=EmulateIE7 Content-Length: 452785 Content-Type: text/html Age: 11 X-Cache: HIT from sy32-27.sina.com.cn Connection: close /*.......网页内容....... */

2011-10-23 · 1 min · 112 words · -

Wireshark

Wireshark Wireshark (前称Ethereal) 是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 网络封包分析软件的功能可想像成 “电工技师使用电表来量测电流、电压、电阻” 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。 在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。 应用 Wireshark使用目的以下是一些使用Wireshark目的的例子: 网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识当然,有的人也会"居心叵测"的用它来寻找一些敏感信息…… Wireshark不是入侵侦测软件 (Intrusion DetectionSoftware,IDS) 。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark撷取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark不会对网络封包产生内容的修改,它只会反映出目前流通的封包资讯。 Wireshark本身也不会送出封包至网络上。 发展简史 1997年底,GeraldCombs需要一个能够追踪网络流量的工具软件作为其工作上的辅助。因此他开始撰写Ethereal软件。Ethereal在经过几次中断开发的事件过后,终于在1998年7月释出其第一个版本v0.2.0。自此之后,Combs收到了来自全世界的修补程式、错误回报与鼓励信件。Ethereal的发展就此开始。不久之后,GilbertRamirez看到了这套软件的开发潜力并开始参予低阶程式的开发。1998年10月,来自NetworkAppliance公司的GuyHarris在寻找一套比tcpview (另外一套网络封包撷取程式) 更好的软件。于是他也开始参与Ethereal的开发工作。1998年底,一位在教授TCP/IP课程的讲师RichardSharpe,看到了这套软件的发展潜力,而后开始参与开发与加入新协定的功能。在当时,新的通讯协定的制定并不复杂,因此他开始在Ethereal上新增的封包撷取功能,几乎包含了当时所有通讯协定。 自此之后,数以千计的人开始参与Ethereal的开发,多半是因为希望能让Ethereal撷取特定的,尚未包含在Ethereal默认的网络协定的封包而参予新的开发。2006年6月,因为商标的问题,Ethereal更名为Wireshark。 [TCP ZeroWindow]: 接收者向发送者发送的一种窗口警告,告诉发送者你的接收窗口已满,暂时停止发送。 wireshark 时序图 菜单>统计>TCP流图形>时间序列 窗口尺寸 菜单>统计>TCP流图形>窗口尺寸 https://www.codenong.com/cs106112955/ Wireshark 过滤 port 按端口过滤 # 一个端口 tcp.port == 25 # 多个端口 tcp.port == 25 or tcp.port == 80 按目标端口过滤 tcp.dstport == 25 显示来自10.230网段的封包 ip.src == 10.230.0.0/16 wireshark http ssdp 过滤方法 http&&!(udp.dstport == 1900) ip.addr == 10.1.1.1 ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 ...

2011-10-22 · 1 min · 77 words · -

nuxus

nuxus Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件 (artifact) ,但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。 下载和安装 你可以从 http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,笔者使用的是1.9.2.3版本。 Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。 WAR方式安装 你需要有一个能运行的web容器,这里以Tomcat为例,加入Tomcat的安装目录位于_D:programapache-tomcat-7.0.21_ ,首先我们将下载的_nexus-webapp-1.9.2.3.war_ 重命名为_nexus.war_ ,然后复制到__D:programapache-tomcat-7.0.21_webappsnexus.war_ ,然后运行startup.bat。访问http://127.0.0.1:8080/nexus .

2011-10-19 · 1 min · 18 words · -

ip-guard, [0x7FFFBB83E044] ANOMALY: use of REX.w is meaningless (default operand size is 64)

“ip-guard, [0x7FFFBB83E044] ANOMALY: use of REX.w is meaningless (default operand size is 64)” HKEY_LOCAL_MACHINE\SOFTWARE\TEC\Ocular.3\agent\config 字符串类型, key: hookapi_filterproc_external value: cmd.exe;wsl.exe foo.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\TEC\Ocular.3\agent\config] "hookapi_filterproc_external"="cmd.exe;wsl.exe"

2011-10-19 · 1 min · 27 words · -

JdbcTemplate

JdbcTemplate https://segmentfault.com/a/1190000010907688 https://www.cnblogs.com/gongxr/p/8053010.html jdbcTemplate 获取刚插入的主键 id https://blog.csdn.net/liuao107329/article/details/79126118 jdbctemplate unit test https://blog.csdn.net/kerongao/article/details/110872832 https://www.baeldung.com/spring-jdbctemplate-testing

2011-10-17 · 1 min · 12 words · -

Zipkin

Zipkin Zipkin 是一个基于 Java 开发的、开源的、分布式实时数据跟踪系统 (Distributed Tracking System) https://zipkin.io/

2011-10-16 · 1 min · 9 words · -

df command

df command 文件系统类型, 磁盘分区类型 df -T df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置; 举例: df -lh Filesystem 容量 已用 可用 已用% 挂载点 /dev/hda8 11G 6.0G 4.4G 58% / /dev/shm 236M 0 236M 0% /dev/shm /dev/sda1 56G 22G 35G 39% /mnt/sda1 我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中; 其它的参数请参考 man df disk free 的缩写;用于显示目前Linux系统上的文件系统的磁盘使用情况统计, df 是用 superblock 的信息统计磁盘占用的. df -h # 查看 inode 使用情况 df -hi df -t ext4 -h # 查看文件系统类型 df -T -h # inode 使用统计 df -i df命令可以获取硬盘被占用了多少空间, 目前还剩下多少空间等信息, 它也可以显示所有文件系统对i节点和磁盘块的使用情况。 ...

2011-10-16 · 2 min · 302 words · -

CGI

CGI CGI(Common Gateway Interface),通用网关接口 通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。 CGI: 通用网关接口 Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端 HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的: 先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言" (到目前为止工作都在客户端) ,浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。 功能 绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。 运行环境 CGI程序最初在UNIX操作系统上CERN或NCSA格式的服务器上运行。 在其它操作系统 (如: Windows NT及Windows 95等) 的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。 处理步骤 ⑴通过Internet把用户请求送到服务器。 ⑵服务器接收用户请求并交给CGI程序处理。 ⑶CGI程序把处理结果传送给服务器。 ⑷服务器把结果送回到用户。 服务器配置 CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。 配置: 根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。 ⑴CREN格式服务器的配置: 编辑CREN格式服务器的配置文件 (通常为/etc/httpd.conf) 在文件中加入: Exec cgi-bin//home/www/cgi-bin/.exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: http://edgar.stern.nyn.***/cgi-bin/。命令中的第二个参数表示CGI程序目录放在系统中的真实路径。 CGI目录除了可以跟网络文件放在同一目录中,也可以放在系统的其它目录中,但必须保证在你的系统中也具有同样的目录。在对服务器完成设置后,须重新启动服务器 (除非HTTP服务器是用inetd启动的) 。 ⑵NCSA格式服务器的配置 在NCSA格式服务器上有两种方法进行设置: ①在srm.conf文件 (通常在conf目录下) 中加入: Script Alias/cgi-bin/cgi-bin/。Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。 ②在srm.conf文件加入: Add type application/x-httpd-cgi.cgi。此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。 在用上述方法之一设置服务器后,都得重新启动服务器 (除非HTTP服务器是用inetd启动的) 。 编写语言 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中: · Perl (Practical Extraction and Report Language) · Bourne Shell或者Tcl (Tool Command Language) ...

2011-10-16 · 2 min · 253 words · -

HTTP protocol, HTTP response status codes, 状态码/响应代码

HTTP protocol, HTTP response status codes, 状态码/响应代码 http header RFC 2616 规范说明了处理 HTTP Header 应该是大小写不敏感的。 Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive. golang gin 默认会把 header name 转成首字母大写 Envoy 默认会将 Header 转换为小写 Envoy 只支持两种规则: 全小写 (默认使用的规则) 首字母大写 (默认没有启用) User-Agent 标识用户代理 Referer 告诉服务器用户从哪里来 If-Modified-Since 主要用来检查cache是否过期 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本 (hypertext) ,这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会 (World Wide Web Consortium) 和Internet工作小组 (Internet Engineering Task Force) 共同合作研究,最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本HTTP 1.1。 ...

2011-10-16 · 3 min · 530 words · -

通讯协议

通讯协议 通讯协议, TCP/IP 开放系统互联协议中最早的协议之一,它为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。TCP/IP协议定义了在互联网络中如何传递、管理信息(文件传送、收发电子邮件、远程登录等),并制定了在出错时必须遵循的规则。 简介 通信协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程。 电脑与电脑之间的沟通必须讲述相同的语言,才能互相传输信息,自然资料在国际互联网上传递,每一份都要符合一定的规格 (即是相同的语言) ,否则中国送出的资料,在美国那边要怎么收下呢? 这些规格 (语言) 的规定都是事先在会议桌上讲好的,一般我们称之为"协议" (protocol) ,而这种在网络上负责定义资料传输规格的协议,我们就统称为通讯协议。 其实每一种网络所使用的通讯协议都不太一样,但就以我们最常用的Internet为例,当资料要送到Internet上时,就必须要使用Internet用的通讯协议。 详细介绍 TCP/IP TCP (Transmission Control Protocol, 传输控制协议) . TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,TCP和IP(网际协议),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如: 远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。 TCP/IP是用于计算机通信的一组协议,它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。 之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。 IP (Internet Protocol, 国际互联网通讯协议) 它们组合成互联网的语言,因为Internet是由全世界很多大大小小的网络连接而成,所以大家必须遵守它的语言 (TCP/IP) 才能顺利跟别人沟通。 http://imgsrc.baidu.com/baike/abpic/item/8697397f0a64693228388aa3.jpg 不过如果你来到别的网络,就等于是来到一个陌生的国家,使用的通讯协议,也就换作另一套了!由此可知TCP/IP只是网络上众多通讯协议的其中一种而已。 在Internet上每一台机器都要有一个IP 每一台连接到Internet上的电脑,为了要让资料能够正确且顺利地传输,它会为每一台机器定义一个IP,也就等于是给你的电脑装上门牌号码;因为资料在电脑之间传输,就和车子在都市中跑来跑去有点像,如果有了IP (门牌号码) ,网络的设备马上便能得知,这一份资料是要送到哪一台电脑去。 IPX/SPX IPX/SPX是基于施乐的XEROX'S Network System (XNS) 协议,而SPX是基于施乐的XEROX'S SPP (Sequenced Packet Protocol: 顺序包协议) 协议,它们都是由novell公司开发出来应用于局域网的一种高速协议。它和TCP/IP的一个显著不同就是它不使用ip地址,而是使用网卡的物理地址即 (MAC) 地址。在实际使用中,它基本不需要什么设置,装上就可以使用了。由于其在网络普及初期发挥了巨大的作用,所以得到了很多厂商的支持,包括microsoft等,到现在很多软件和硬件也均支持这种协议。 NetBEUI NetBEUI (NetBios Enhanced User Interface) ,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win9x系列、Windows NT等。NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。总之NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在"网络邻居"传送数据。所以建议除了TCP/IP协议之外,局域网的计算机最好也安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。 网络通信协议 RS-232-C RS-232-C是OSI基本参考模型物理层部分的规格,它决定了连接器形状等物理特性、以0和1表示的电气特性及表示信号意义的逻辑特性。 RS-232-C是EIA发表的,是RS-232-B的修改版。本来是为连接模拟通信线路中的调制解调器等DCE及电传打印机等DTE拉接口而标准化的。现在很多个人计算机也用RS-232-C作为输入输出接口,用RS-232-C作为接口的个人计算机也很普及。 RS-232-C的如下特点: 采用直通方式,双向通信,基本频带,电流环方式,串行传输方式,DCE-DTE间使用的信号形态,交接方式,全双工通信。RS-232-C在ITU建议的V.24和V.28规定的25引脚连接器在功能上具有互换性。 RS-232-C所使用的连接器为25引脚插入式连接器,一般称为25引脚D-SUB。DTE端的电缆顶端接公插头,DCE端接母插座。 RS-232-C所用电缆的形状并不固定,但大多使用带屏蔽的24芯电缆。电缆的最大长度为15m。使用RS-232-C在200K位/秒以下的任何速率都能进行数据传输。 RS-449 http://baike.baidu.com/albums/278358/278358.html#0$fab3ac117148de44ca80c4b3 ...

2011-10-16 · 1 min · 135 words · -

One or more PGP signatures could not be verified

One or more PGP signatures could not be verified gpg -recv-key <KEYID> https://bbs.archlinux.org/viewtopic.php?id=191954 Two PGP Keyrings for Package Management in Arch Linux http://allanmcrae.com/2015/01/two-pgp-keyrings-for-package-management-in-arch-linux/embed/#?secret=zQHTu5bbvd

2011-10-16 · 1 min · 23 words · -