- 浏览: 374659 次
- 性别:
- 来自: 杭州
最新评论
-
surpassno:
很不错,学习了
一个对象占用多少字节? -
ysyzww:
你这么牛逼,你父母知道吗
maven使用技巧 -
妖人不要跑:
JDK中反序列化对象的过程(ObjectInputStream#readObject) -
lanhz:
谢楼主,构建成功了
Mac OSX 10.9 上build openjdk8和openjdk7 -
zqb666kkk:
通过了吗 ?????
淘宝北京专场java面试题(2011-12-31)
文章列表
上篇文章后半部分提到,我们在估算1亿条整数放到内存中,会占用多大的内存的时候,仅仅按照每个Integer 32bit算了,即按照原始类型int来估算的,结果严重超出预料。
仔细想想,对象在jvm中是怎么存的呢?
首先,java对象要包含的基本数据至少要有两部分:
1、类以及超类的实例声明的实例变量;
2、指向类数据的引用,jvm需要通过此引用找到该对象的(可能存在的)方法表、类型信息。其中类型信息包括类型基本信息、常量池、字段信息、方法信息、类变量信息、指向Class的引用、指向ClassLoader的引用等。这些类数据都放在方法区。
另外,还有一些其他信息:
3、多个线程 ...
提取出某日访问百度次数最多的那K个IP
基本思路:ip最多2^32个,放入内存也要40G,基本不现实。所以只有用外排序,把ip分割成到不同的小文件里,然后统计次数后,汇总。另外,ip本质就是一32bit的数值,不要拘泥于字符串表示的ip。
思路也可参考此处问题一
基于以上思路,看代码:
package com.kingdee.gmis.mass.data.ips;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader ...
TOP K堆就是堆,只是TOP K堆只用维护固定数量的元素,每次加进来新的,都要判断是否替换掉堆顶元素,如果需要,则删除堆顶元素,放入新元素,并重新构造堆。可以参考这里
package com.kingdee.gmis.common;
import java.util.Random;
/**
*
* @author hua_fan
*
*/
public class TopNHeap<T extends Comparable<? super T>> {
private int size;
private int ...
堆排序算法,详细内容参考这里和这里,堆排序除了排序外,还可以用来从一堆数种选取top K(最大/小)个的对象/数字
以下是一个最小堆的实现代码,当然,也可以做最大堆用,T实现Comparable接口的时候,compareTo返回值颠倒下就行了。
package com.kingdee.gmis;
/**
*
* @author hua_fan
*
*/
public class HeapSort<T extends Comparable<? super T>> {
private int size;
private ...
大学没有好好上机敲算法,虽然考试前一周多时间把教材从头至尾完整看了一遍,也基本理解了,但是没有好好去敲过最基本的数据结构和算法。
毕业后又一个大学都过去了,没有认真再学习,工作中也没怎么写过,当然也不是完全没写过,还是写了个Huffman编码树和C4.5决策树展示算法的。
忽然觉得还是需要学习下的,于是就捡起来吧。一边敲点网上面试题的实现,一边捡起数据结构和算法。就算工作中真的再也用不到,至少也可以锻炼下思维吧。
接下来一系列内容,主要用Java实现,偶尔也会用Javascript来实现。
Java里操蛋的泛型
- 博客分类:
- java
BT的#java泛型#,我只想创建个泛型实例!
悲惨的是就连ArrayList<T>里边的elementData都是Object[]...不是T[]...
更悲惨的是,Collections.sort<T>处的T还是extends Comparable呢
等到实现代码里头调用到Arrays.sort的时候,传进去的就只是Object[]了
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = ...
先写个例子,用Java启动tomcat
package com.yymt.pf.rpc.loadbalance;
import java.io.File;
import java.io.IOException;
public class ExecFileUtil {
public static void main(String[] args) throws IOException {
run("cmd /C start startup.bat", null, new File(
"E:\\develop_tools\\apa ...
perl命令非完全记录2
- 博客分类:
- perl
>>@variable声明数组变量,如@arr=()//空元素;$arr[0]访问数组第一个元素
>>qw quoted word加引号的单词,可以用来声明字符串数组:@arr = qw(hello world) 等价于 @arr = ('hello','world')
>>%variable声明hash表,%hash_var=(1,'a',2,'b');或者%hash_var2 = ('a' => 'aa','b' => 'bb')
>>$var{key}访问hash某个key的值。如$hash_var{1} == ' ...
前几天,又是工作上的问题。发现一个对象实例在instanceof XXX的时候,竟然返回了false,看看对象的内部结构,明明跟XXX的内部定义一样的。于是乎开始怀疑instanceof是不是有bug了,因为之前在创建一数组,在调了一圈之后,instaceof Array竟然也是false。不过后来阿飞调试之后,发现完全是因为跨页面传递了对象导致的。。。现将问题重现一下:
1、创建一个页面outer.html,并添加一个iframe
<iframe align="center" border="1" width="70%" t ...
近来工作中遇到一问题,查看单据信息的时候,要禁用刷新功能。这里列出一个初步的实现: 1、打开新页面的时候,要这样打开:
<a href="#" onclick="window.open('child.html','content','toolbar=no,menubar=no,location=no')">
这样在IE下边,新打开的页面会没有工具条、菜单栏和地址栏。而在FireFox里边,却依然有地址栏,会导致光标在地址栏的时候,仍然可以刷新。2、在新页面里,要禁用掉F5,F6和Ctrl+R
var initFn = functio ...
先看一个例子:
Gmis.ext.Animal = function() {
this.run = function() {
Gmis.util.printMessage("Animal run");
};
this.swim = function() {
Gmis.util.printMessage("Animal swimming");
};
this.shout = function() {
Gmis.util.printMessage("Animal shout&quo ...
本文列举了《JavaScript高级程序设计:第二版》书中讲到的6种创建JavaScript对象的模式,这里有英文版下载。
代码里边用到的一些公用方法本文后边有附。附件为源码。
1、原型链
Gmis.inheritance.Animal = function(nickname, legCount, characters) {
this.nickname = nickname;
this.legCount = legCount;
this.characters = characters;
}
Gmis.inheritance.Animal.prototype = {
con ...
本文列举了《JavaScript高级程序设计:第二版》书中讲到的8种创建JavaScript对象的模式,这里有英文版下载
代码里边用到的一些公用方法本文后边有附
1、最简单的方式
/******************************************************************************************
* 1、最简单的方式
* 缺点:如果创建类似的对象,会出现大量的重复代码
*/
var person1 = new Object();
person1.nickname = 'maitian';
person1.a ...
1、开发工具
一般使用eclipse的spket插件做JavaScript的开发,支持ExtJs和jQuery等的自动完成和链接源码功能
2、调试工具
2.1、IE8内置的调试工具。IE8的调试工具目前并不太好用,页面刷新后,可能会加载新的脚本文件,导致在原来文件中打的断点不起作用;直接查看全局变量值也不是很方便,不像firefox一样,把鼠标放上去就可以看到;调用堆栈信息显示的也不直观,如果某个文件过大,点到相关文件的堆栈链接进文件的时候,会近1分钟才有反应。
这里有些资料可供参考:IE8“开发人员工具”使用详解上(各级菜单详解),IE8"开发人员工具" ...
这部分主要介绍bit string/binary、reference、port identifier、pid、record。这些数据类型都是erlang的数据类型,python是没有这些数据类型的
1、bit string和binary
binary是一种用来存储大量raw type数据的数据类型,binary存储数据比lists和tuples的空间效率高。如果binary可打印字符串,就会输出为字符串,否则就输出为整数序列。参考资料
29> <<67,68,69>>.
<<"CDE">>
32> < ...