盖娅计划

加强彼此联系,努力实现盖娅星系!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

JAVA线程状态及状态间转换介绍

发表于 2019-03-07 | 更新于 2021-01-21 | 分类于 JAVA

概述

JAVA线程是生产及面试中重要的内容,弄清楚线程的6个状态及状态间如何转换是学好线程的基础。本文首先翻译JDK源码及文档,概述6种状态如何定义,然后根据网上资料总结各状态间如何转化,最终得(zhuan)出(zai)线程转换示意图如下:
线程状态转化图

阅读全文 »

OAuth 2.0介绍及实战

发表于 2019-02-08 | 更新于 2021-01-21 | 分类于 网络安全

前言

起因是最近在调整博客的评论系统,使用到了OAuth2.0协议,就顺便学习了一下并在这里给大家分享下心得体会。本文会首先介绍OAuth2.0的相关知识,然后简单介绍gitment如何使用,最后分析gitment是如何通过OAuth从git获取用户信息的。
本博客的评论系统使用的是gitment,通过简单配置就可实现评论功能,不用关心评论保存以及维护用户。该工具是基于github实现,操作时需要获取用户github的资源及权限,这就涉及到github API中的授权机制————OAuth协议。
维基百科告诉我们,开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

阅读全文 »

Hexo介绍

发表于 2019-01-22

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.

阅读全文 »

关于这个博客

发表于 2019-01-22 | 分类于 随笔

为什么写博客

最近在查关于图数据库的资料,忽然发现同事写的一篇博客。哈?!他竟然在写博客,哇!他竟然坚持了3年多了,嗯…是时候开始写博客,把看到的东西总结消化成纹章了。所以这个博客就出现了,正好使闲置的云服务器和域名有了用处。

阅读全文 »

Spark调优(v1.6.0)

发表于 2019-01-22 | 更新于 2021-01-21 | 分类于 spark

前言

最近在学习Spark调优,发现官方文档写的很详细,但网上的译文多有不准,因此本人对Spark 1.6.0版本(工作使用的是1.6版本,现在spark已出到V2.3.0)的文档进行了翻译。一来方便各位自己查阅,二来通过翻译加强理解。关于翻译,部分地方没有逐字翻译而是采用了意译,文中斜体部分是本人额外添加内容。本人水平有限如有差错还望各位批评指正。
为了方便伸手党,现将所有要点总结如下:

  1. spark是基于内存的分布式计算框架。比MR快但是不如MR稳定。为了其稳定且更快需要更高效的使用内存资源,官方建议从数据序列化和内存调优入手。
  2. 网络传输数据,shuffle操作,持久化等都会触发数据序列化行为。
  3. 在SparkConf将序列化方式调为kryo,即设spark.serializer为org.apache.spark.serializer.KryoSerializer
  4. 在使用kryo时自定义类需要提前注册。conf.registerKryoClasses(Array(classOf[MyClass1]))
  5. 尽量使用原始类型变量少用引用类型变量,如用数组代替List,用JSON代替Map,使用fastutil提供的容器。
  6. 在 spark-env.sh增加JVM参数-XX:+UseCompressedOops 进行指针压缩。
  7. 对于1.6.0之前的版本减少存储内存区域的大小(spark.storage.memoryFraction)增大计算内存(从而可以增大GC使用的空间)。1.6.0之后版本降低spark.memory.storageFraction来实现同样的效果。
  8. 对重复使用的RDD做好持久化,要使用带序列化的持久化级别,特别重要的RDD不但要持久化还要设置checkpoint。
  9. 在使用checkpoint前必须要持久化(考虑使用MEMORY_AND_DISK_SER)避免重复计算RDD。
  10. 对于巨大的RDD使用MEMORY_ONLY_SER级别的持久化。
  11. 增加-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps参数关注GC情况或在SparkUI中观察。
  12. 特别注意java GC(minor gc)时会阻塞所有task,如果频繁GC会导致shuffle读操作一直失败,出现shuffle临时文件找不到的情况。
  13. spark关于GC的调优核心思路是不让临时的RDD进入老年代。
  14. 频繁minor GC但没发生多少次major GC时为Eden分配更多内存。
  15. 通过-XX:+ UseG1GC配置使用G1 GC。
  16. 适当增大的并行度,推荐每个CPU核上应并性运行2-3个task。
  17. 将大变量(如配置文件)通过广播的方式共享,这样同一个executor只会保留1份数据否则每个task都会保存一份数据。
  18. 通过spark.locality.wait适当增加task分配时的超时时间,以获取更高的本地级别。
    阅读全文 »

JAVA动态代理实质

发表于 2019-01-22 | 更新于 2021-01-21 | 分类于 JAVA

动态代理介绍

不再赘述,用代码再体现下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public 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()返回被代理的类实例。在利用反射机制执行实例方法时,可以在执行前后增加自定义的逻辑(切面)。

阅读全文 »
1…56
Phoenix Luo

Phoenix Luo

骆潇龙开脑洞的地方

56 日志
13 分类
42 标签
© 2022 Phoenix Luo 京ICP备19007490号
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Pisces v6.7.0
本站总访问量 次 | 有人看过我的博客啦