Java 11升级

Java 11已于2018-09-25发布,作为一个LTS版本,值得重点关注。但从Java 8升级上来还是会碰到不少问题。

1、 project需要增加jaxb依赖,否则编译报错。

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

增加下面的依赖:

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>

Rust错误处理(转)

转自:https://zhuanlan.zhihu.com/p/25506762,修改排版等内容

人孰无过,过而能改,善莫大焉。程序运行过程中总是会出现各种各样的问题,导致程序出现异常或错误,这些异常和错误本身不是 bug,但是如果不处理好的话就会成为 bug。不同编程语言提供了不同的机制来处理错误和异常,一般分为两大类:把错误当作值来处理;抛出异常。

Rust 提供以下基础设施做错误处理:

Option, 
Result,
unwrap, 
expect,
combinators,
try! macro,
Error trait,
From trait,
Carrier trait/Try trait,

Rust 并没有提供基于 exception 的错误处理机制,虽然 panic! 宏在让进程挂掉时也抛出堆栈,同时也可以用 std::panic::catch_unwind 捕捉 panic,但是极其不推荐用来处理常规错误。

Java动态代理应用基础

0、代理的本质

如果把对象间方法的调用理解为client到server之间的通信,那么Proxy的本质是实现一个具有特定功能的中间人。在Java中存在多种方式实现对对象方法调用的代理。

有了中间人之后,就可以对调用进行hook,达到如下目的:

1)控制调用流程,如权限控制、隐藏、监控调用记录等;

2)篡改调用方提供的Request(即Input),如对分布式操作进行Map;

Java多线程与并发基础

1)Thread & ThreadPoolExecutor

Thread例子如下:

for(int i=0; i<100; i++){
  Thread t = new Thread(){
    @Override
    public void run() {
      //job details
    }
  };
  t.start();
  try{ 
    t.join();
  }
  catch(InterruptedException ex){
    ex.printStackTrace();
  }
}

相应的,ThreadPoolExecutor例子如下:

JVM App exploit

Bytecode level: for break in.

Model is attack a normal running Java process or a going to run Java applet. Maybe something like Inject.

1) escape sandbox (SecurityManager) from Applet, or from constraint, for example Load From Uncontrolled source with custom policy;

2) classLoader hijack;