程序员的自我修养
Home » 标签 » Java

gc老生常谈

0条评论1,511次浏览

算是笔记吧。看了很多次的jvm、gc,但都没记住。这次遇到了自己写得线上服务出现了oom+死锁+频繁full gc(扶额),总算是记住了jvm和gc的基础知识。也是醉了。

jvm模型

主要分3个模块吧:堆、栈、本地方法栈。

堆=young(eden + survivor(from + to)) + tenured + permanent,也有说permanent不属于堆的,不过从gc日志来看我更倾向前者,但从gc参数来看应该是后者。

结合java8的gc来看:

young

par new generation就是新生代young,其大小等于eden区+from/to区,注意这里不是eden+from+to。为什么呢?因为你永远不能同时使用from和to。eden、from和to的比例默认是8:1:1,可以通过参数-XX:SurvivorRatio调节。

新对象的分配发生eden区域内,当新对象(非大对象)无法在该区域分配时便引发Minor GC。大对象放不下的时候直接去tenured区分配。Minor GC就是将eden+from/to的存活对象copy到to/from中去,顺带存活了若干次的会放到tenured区,而且放不下的也会去old区。
(更多…)

分类:Java语言
标签:,

mapreduce二次排序

0条评论1,085次浏览

之前离职的哥们的mr任务留了一堆的坑,他把value当成排序过的,于是reduce里面全部是如此统计dau、设备数的:

心好累,手动微笑。

正所谓前人挖坑后人填,我不入地狱谁入地狱。于是开始一个个mr的改代码。

方法一:用set统计

用set的好处就是改动极小,但存在oom的风险。实际跑了下线上的数据,果然oom了。摔!

方法二:bloom filter

好处是改动也不大,也不会oom,但就统计的结果可能会比实际的值要小。考虑到数据量也没有大到要用bloom filter的地步,且希望数据尽量的精准,放弃!

方法三:mr二次排序

(更多…)

标签:,

战5渣系列——还是String的split方法

3条评论5,688次浏览

发现最近弱爆了,说多了都是泪,不想说了,因为我是战5渣。

背景简介

今天写MR程序发现一直报数组越界的错误。这么简单的异常还不是分分钟解决?结果,恩,改了10次以后,发现还是不对。具体出错的代码已经可以确定,如下:

原因排查

显然单纯的看代码是没有问题的,结合具体的数据才可能出错,比如分隔后的数组长度不到4——这是我的第一反应。更准确的说,是我编码的时候就想到了,所以采用了value.toString().split("\t",4)这个方法。根据我的第一篇博文中记录的经验,String的split方法会将数组后面为空的字符串截取掉,需要采用split(String regex, int limit)方法才能正确的获取到想要的长度。

所以若是经验正确无误,那怎么也不会报数组越界的错误吧,顶多会在parseLong的地方报无法转换的错。但事实就是一直报数据越界的错误,改了10次其它地方都无果。
(更多…)

分类:Java语言, 战5渣
标签:,

LeetCode编程练习(2)

7条评论10,058次浏览

Max Points on a Line

题目

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

答案

思路:时间复杂度O(n^3)的情况下是肯定可以算出结果的,那么意味着通过空间换时间应该是可以让时间复杂度达到O(n^2),这是我自己发明的定律。首先定义静态内部类Line,用于表示两点计算出来的直线,考虑到Double类型的精度损失问题,Line采用三个属性来保证精度上的完整性。然后重写hashCode()equals(..)方法,使得同一条直线相等,且在Hash值上相等。如此通过2个 \(n(n-1)\over 2\) 次循环即可获取到结果,时间复杂度为O(n^2)。
(更多…)

分类:Java语言
标签:,

LeetCode编程练习(1)

1条评论10,851次浏览

看到Leetcode 编程训练这篇文章,于是也开始尝试扫题。上面的题目基本是毫无实际用处的,但是训练下编程还是可以的。做题过程中感受到了一些平常没有的感觉(不要问我是不是查克拉流动的感觉,我还没具体的感受到),反正感觉应该对自己挺有用的。不过,也出现了很多让人想吐槽的bug(或者是我太弱了,还无法理解原因)。

Min Stack

题目

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

答案V1

采用一个TreeMap来保证随时可以获取到最小值(好处是最大值也能获取到,虽然题目中没有这个要求),提交答案后得到结果:Memory Limit Exceeded
(更多…)

分类:Java语言
标签:,

一个简单的OO问题

0条评论1,864次浏览

问题

一个同事发来的题目:学校有三种人员,第一种为教师,属性包括名字、教工号、电话、地址;第二种为学生,属性包括名字、学号、电话、地址、平均成绩;第三种为辅工,属性包括名字、辅工号、电话、地址、工种。使用你学到的面向对象设计的方法,实现这三种人员的类表示,并实现三种人员的添加、修改、删除,可在内存进行增删改的操作,不需要永久保存。

注,可使用List保存人员,如没有使用OO设计方法,本期作业不通过,仅使用类不是OO设计。

答案v1

大致扫了一眼题目,是一个简单的OO设计问题。于是第一版答案很快出来了。

抽象父类Staff

阅读全文>>

标签:, ,

SVD与PCA

4条评论16,049次浏览

奇异值分解

奇异值分解,singular value decomposition(SVD)是线性代数中一种重要的矩阵分解。

记得大学时学习线性代数中的特征值特征向量时,我就一直思考这个玩意算出来到底有啥用,难不成就是一群热(xian)爱(de)专(dan)研(teng)的人弄出来的数学小把戏?然后随着时间的推移,这些纯理论的东西就基本忘光了。大学的知识往往都这样的,和实际不接轨,学的时候不知道有啥用,等用的时候就忘的差不多了。

现在,在我学习线性代数后的第8年,我终于知道特征值这个玩意有啥用了。首先,先回忆下什么是特征值和特征向量吧。

特征值

对于一个方阵,其特征值和特征向量满足:

\(A\nu=\lambda\nu\)

求出所有的特征值和特征向量后,就得出了方阵A的特征值分解:

\(A=Q\Sigma Q^{-1}\)

其中 \(Q\) 是特征向量按照与特征值的对应顺序组合而成 \((\nu_1,\nu_2,..)\)\(\Sigma\) 是由特征值组成的一个对角矩阵。那么对于方阵A的特征值分解的意义又何在呢?先看下面这个例子,对于矩阵A(为了简单起见,设为对角矩阵):

\(A=\left(\begin{array}{ccc}100 & 0 & 0 \\0 & 10 & 0 \\0 & 0 & 1 \\\end{array}\right)\)

阅读全文>>

Spark 1.1.0 Basic Statistics(下)

2条评论6,163次浏览

Hypothesis testing

Hypothesis testing,假设检验。Spark目前支持皮尔森卡方检测(Pearson’s chi-squared tests),包括适配度检定和独立性检定。

皮尔森卡方检测

皮尔森卡方检测是最著名的卡方检测方法之一,一般提到卡方检测时若无特殊说明则代表使用的是皮尔森卡方检测。皮尔森卡方检测可以用来进行适配度检测独立性检测

适配度检测

适配度检测,Goodness of Fit test,验证一组观察值的次数分配是否异于理论上的分配。\(H_0\) 假设(虚无假设,null hypothesis)为一个样本中已发生事件的次数分配会服从某个特定的理论分配。通常情况下这个特定的理论分配指的是均匀分配,目前Spark默认的是均匀分配。

独立性检测

独立性检测,independence test,验证从两个变量抽出的配对观察值组是否互相独立。其虚无假设是:两个变量呈统计独立性。

检测三个步骤

  1. 计算卡方检定的统计值“ \(\chi^2\) ”:把每一个观察值和理论值的差做平方后、除以理论值、再加总
  2. 计算 \(\chi^2\) 统计值的自由度“df”
  3. 依据研究者设定的置信水平,查出自由度为df的卡方分配临界值,比较它与第1步骤得出的 \(\chi^2\) 统计值,推论能否拒绝虚无假设

适配度检测示例

场景

将五角星的5个角分别标记为1,2,3,4,5。现在旋转若干次五角星,记录每个角指向自己的次数。

第一个的结果为(1,7,2,3,18),第二个五角星的结果为(7,8,6,7,9)。现做出虚无假设:五角星的每个角指向自己的概率是相同的。

阅读全文>>

Spark 1.1.0 Basic Statistics(上)

1条评论3,811次浏览

Spark 1.1.0于2014年9月11日发布,此次的版本将mllib完善了不少,如添加了Basic Statistics、添加了决策树的Java实现等等。现对1.1.0的新功能进行一次初步探索。

Summary statistics

Summary statistics主要提供基于列的统计信息,包括6个统计量:均值、方差、非零统计量个数、总数、最小值、最大值。

测试数据

测试代码

阅读全文>>

分类:Apache Spark
标签:,

MapReduce库类

0条评论2,000次浏览

FieldSelection

FieldSelection包含FieldSelectionMapper、FieldSelectionReducer和FieldSelectionHelper,根据字面意思就可以了解其作用:用于选择field。直接上示例:

测试数据

代码示例

其中第三行用于选择输出的field。冒号之前的为key的field,之后为value的field。"0,3:1,2,4-"的意思为:选择第1、4列为key,选择第2、3、5及其以后的列为value。此外还可以使用类似“4-7”这样的方式来选择一个范围。为了直观的区分key和value,第五行将key和value的分隔符设置为“|”。

阅读全文>>

标签:,
3123
profile
  • 文章总数:81篇
  • 评论总数:247条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1250天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • Anonymous: :?: :razz: :sad:
  • Anonymous: 牛
  • Anonymous: 楼主你好,我偶尔也会 遇到Reconnect due to socket error: java.nio.channels.ClosedCha...
  • Anonymous: sdfs
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到 ,怎么得到近似矩阵 (用spark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是 Jacob迭代法,一次迭代O (n^3),迭代次数不清楚 ...
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: :smile: :grin: :eek:
  • 李雪璇: 想要完整代码,可以帮 忙发给我吗