一

{"type":"编程笔记"}


  • Home

  • Archives
  • Search

openjdk asmtools usage examples

Posted on 2019-04-28   |   In java

asmtools

AsmTools 由一组(Java 类文件)汇编程序/反汇编程序组成:

  1. Jasm / Jdis: 一种汇编语言,提供类似 Java 的成员签名声明,同时提供符合 Java VM 规范的字节码指令助记符。Jasm 还为 classfile 属性中常见的构造提供高级语法。Jasm 编码测试对于对字节代码进行排序非常有用,因为 Javac 编译的代码通常不会对字节代码进行排序。

  2. JCod / JDec: 一种汇编语言,提供类文件结构的字节码容器。

AsmTools 是完全自反的,Java 二进制(.class)文件可以被反汇编成文本表示,而文本表示又可以汇编回同一个二进制文件。

Downloads

https://wiki.openjdk.java.net/display/CodeTools/asmtools 下载 jar 包或者在 github 上搜索下载 asmtools.jar。

Read more »

cross origin resource sharing - cors

Posted on 2019-04-09   |   In web

Preflight request

一个 CORS 预检请求是用于检查服务器是否支持 CORS 即跨域资源共享。

它一般是用了以下几个 HTTP 请求首部的 OPTIONS 请求:Access-Control-Request-Method 和 Access-Control-Request-Headers,以及一个 Origin 首部。

当有必要的时候,浏览器会自动发出一个预检请求;所以在正常情况下,前端开发者不需要自己去发这样的请求。

这里先看个简单的例子,下文有详细说明预检请求过程,一个客户端可能会在实际发送一个 DELETE 请求之前,先向服务器发起一个预检请求,用于询问是否可以向服务器发起一个 DELETE 请求:

OPTIONS /resource/fooAccess-Control-Request-Method: DELETEAccess-Control-Request-Headers: origin, x-requested-withOrigin: https://foo.bar.org

如果服务器允许,那么服务器就会响应这个预检请求,并且其响应首部 Access-Control-Allow-Methods 会将 DELETE 包含在其中:

HTTP/1.1 200 OKContent-Length: 0Connection: keep-aliveAccess-Control-Allow-Origin: https://foo.bar.orgAccess-Control-Allow-Methods: POST, GET, OPTIONS, DELETEAccess-Control-Max-Age: 86400
Read more »

tcp 参数 so_linger 说明及测试

Posted on 2019-03-27   |   In linux

java Socket SO_LINGER 设置方法源码

9991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
/** * Enable/disable {@link SocketOptions#SO_LINGER SO_LINGER} with the * specified linger time in seconds. The maximum timeout value is platform * specific. * * The setting only affects socket close. * * @param on     whether or not to linger on. * @param linger how long to linger for, if on is true. * @exception SocketException if there is an error * in the underlying protocol, such as a TCP error. * @exception IllegalArgumentException if the linger value is negative. * @since JDK1.1 * @see #getSoLinger() */public void setSoLinger(boolean on, int linger) throws SocketException {    if (isClosed())        throw new SocketException("Socket is closed");    if (!on) {        getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(on));    } else {        if (linger < 0) {            throw new IllegalArgumentException("invalid value for SO_LINGER");        }        if (linger > 65535)            linger = 65535;        getImpl().setOption(SocketOptions.SO_LINGER, new Integer(linger));    }}

Socket SO_LINGER 参数设置说明

SO_LINGER 这个参数是控制 socket 关闭后的行为,不看系统底层的实现,只从上面 java 代码的实现来看,这个方法的二个参数on和linger有以下三种组合:

on = false

这是默认行为,当on为false时,linger对应的设置就没有意义,当 socket 主动 close,调用的线程会马上返回,不会阻塞,残留在缓冲区中的数据将继续发送给对端,并且与对端进行 FIN-ACK 协议交换,最后进入 TIME_WAIT 状态。

on = true, linger > 0

调用 close 的线程将阻塞,发生两种可能的情况:

  1. 是剩余的数据继续发送,进行关闭协议交换;
  2. 就是超时过期,剩余的数据将被删除,进行 FIN-ACK 交换。

on = true, linger = 0

这种方式就是所谓hard-close,这个方式是讨论或者争论最多的用法,任何剩余的数据都被立即丢弃,并且 FIN-ACK 交换也不会发生,替代产生 RST ,让对端抛出connection reset的 SocketException 。

Read more »

vim plugin vim-space doc

Posted on 2019-03-23   |   In linux

vim-space.vim

vim 中处理空格相关的工具集。

 git clone https://github.com/yuweijun/vim-space.git

安装

使用vundle管理安装如下:

set nocompatiblefiletype offset rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()" Plugin ...Plugin 'yuweijun/vim-space'call vundle#end()filetype plugin indent on

使用vim-plug管理安装的配置如下:

call plug#begin('~/.local/share/nvim/plugged')" Plug ...Plug 'yuweijun/vim-space'call plug#end()
Read more »

vim killer plugin - vim easy align

Posted on 2019-03-20   |   In vim

vim-easy-align

一个功能强大的排版对齐工具,但实际上组合键使用有一定难度,并不完全像插件名称所示的那么简单。

安装

使用 vim-plug 管理插件,加入以下配置到.vimrc中后再执行PlugInstall。

Plug 'junegunn/vim-easy-align'

配置组合键映射

在.vimrc中加入以下配置:

xmap ga <Plug>(EasyAlign)nmap ga <Plug>(EasyAlign)

按键说明

  1. ga组合键激活:EasyAlign命令
  2. Enter回车键设置左/中/右对齐方式,连续按回车可切换对齐方式
  3. 根据第几个指定的分隔符进行对齐,默认使用第一个分隔符
    • 1 第一个分隔符对齐
    • 2 第二个分隔符对齐
    • * 所有分隔符对齐
    • ** 所有分隔符对齐,左对齐和右对齐循环
    • - 即-1,最后一个分隔符对齐
    • -2 倒数第二个分隔符对齐
  4. 分隔符如<Space>, =, :, ., |, &, #, ,,或者在按Ctrl-X之后使用正则表达式进行分隔对齐

测试文本对齐

apple   =redgrass+=greensky-=   blue

然后将以上内容保存到一个文本文件中,并执行以下组合键,关于 vim 的 text objects command 可以参考这里的说明。

  • vipga=
    • visual-select inner paragraph
    • Start EasyAlign command (ga)
    • Align around =
    • 在可视模式下选中段落,并使用ga激活EasyAlign插件,在第一个=位置对齐选中的段落
  • gaip=
    • Start EasyAlign command (ga) for inner paragraph
    • Align around =
    • 使用ga激活EasyAlign插件,然后选中段落,并在第一个=位置执行对齐操作
Read more »
123…99
yuweijun

yuweijun

492 posts
12 categories
RSS
GitHub Twitter
© 2021 yuweijun
Powered by Hexo
Theme - NexT.Mist.KISS