概述
JAVA线程是生产及面试中重要的内容,弄清楚线程的6个状态及状态间如何转换是学好线程的基础。本文首先翻译JDK源码及文档,概述6种状态如何定义,然后根据网上资料总结各状态间如何转化,最终得(zhuan)出(zai)线程转换示意图如下:
加强彼此联系,努力实现盖娅星系!
起因是最近在调整博客的评论系统,使用到了OAuth2.0协议,就顺便学习了一下并在这里给大家分享下心得体会。本文会首先介绍OAuth2.0的相关知识,然后简单介绍gitment如何使用,最后分析gitment是如何通过OAuth从git获取用户信息的。
本博客的评论系统使用的是gitment,通过简单配置就可实现评论功能,不用关心评论保存以及维护用户。该工具是基于github实现,操作时需要获取用户github的资源及权限,这就涉及到github API中的授权机制————OAuth协议。
维基百科告诉我们,开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
最近在学习Spark调优,发现官方文档写的很详细,但网上的译文多有不准,因此本人对Spark 1.6.0版本(工作使用的是1.6版本,现在spark已出到V2.3.0)的文档进行了翻译。一来方便各位自己查阅,二来通过翻译加强理解。关于翻译,部分地方没有逐字翻译而是采用了意译,文中斜体部分是本人额外添加内容。本人水平有限如有差错还望各位批评指正。
为了方便伸手党,现将所有要点总结如下:
spark.serializer
为org.apache.spark.serializer.KryoSerializer
conf.registerKryoClasses(Array(classOf[MyClass1]))
-XX:+UseCompressedOops
进行指针压缩。spark.storage.memoryFraction
)增大计算内存(从而可以增大GC使用的空间)。1.6.0之后版本降低spark.memory.storageFraction
来实现同样的效果。checkpoint
。MEMORY_AND_DISK_SER
)避免重复计算RDD。MEMORY_ONLY_SER
级别的持久化。-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
参数关注GC情况或在SparkUI中观察。-XX:+ UseG1GC
配置使用G1 GC。spark.locality.wait
适当增加task分配时的超时时间,以获取更高的本地级别。
不再赘述,用代码再体现下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class ClientProxy {
private Object client;
public ClientProxy(Object client) {
this.client = client;
}
public Object create() {
return Proxy.newProxyInstance(client.getClass().getClassLoader(), new Class[]{client.getClass().getInterfaces()}, (proxy, method, args) -> {
System.out.println("----- before -----");
Object result = method.invoke(client, args);
System.out.println("----- after -----");
return result;
});
}
public static void main(String[] args){
//IClient仅有一个方法request,Client对其的实现是:()->Syetem.out.println("hello word!")
IClient client = new ClientProxy(new Client()).create();
client.request();
}
}
//----
before
hello word!
after
从上述代码基本可以看出动态代理使用Proxy.newProxyInstance()返回被代理的类实例。在利用反射机制执行实例方法时,可以在执行前后增加自定义的逻辑(切面)。