Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链表表现,,Vector内部用数组实现. 2 读写机制 ArrayList在执行插入元素超过当前数组预定义的最大值时,数组需要扩容,扩容需要调用底层System.arraycopy()方法进行大量的数组复制操作,在删除元素时并不会减少数组容量,可以调用trimToSize()方法缩小数组容量,在查找元…
理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针,虚拟机由类型指针指向的类型确定对象的类型. 对象实例:变量和方法,是父类继承或子类定义. 对齐填充:类似占位符的作用,因为内存使用都会被填为八字节的倍数. 1. int和integer JDK1.5引入了自动装箱与自动拆箱功能,java可根据上下文实现int/Integer,double/Doub…
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,...让应用开发者可以只关心自身业务. 静态代理:事先写好代码类,可以手工编写,也可以用工具生成.缺点是每个业务类都要有一个对应代理类,非常不灵活. 动态代理:运行时自动生成代理对象.缺点是生成代理对象和调用代理对象都要额外花费时间, JDK动态代理:基于java反射机制实现,必须要实现了接口的业务类…
在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引用有什么区别?具体使用场景是什么? 经典回答:不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾收集的影响. 强引用特点:我们平常典型编码Object obj=new Object()中obj就是强引用.通过关键字new创建的对象所关联的引用就是强引用.当JVM内存空间不足,JVM宁愿抛出Ou…
java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度,腾讯,美团,去哪儿等互联网公司,基本都是以java为首要编程语言的.即使在最新的云计算领域,java仍然是AWS,google app engine等平台上,使用最多的编程语言,甚至在微软的Azure云上,java也已微弱劣势排在前三,所以,在这些大公司的面试中,基本都会以java为切入点,考评一个…
本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何定义异常. 解决不了异常的捕获不如抛出. 捕获不了异常的捕获不是好捕获,什么异常都捕获的捕获不是好捕获,解决不了异常的捕获一定是坏捕获. 捕获不是俄罗斯转盘,99分的捕获不如抛出,因为缺的1分可能是致命的. 世界上存在永远不会出错的程序吗?这也许只会出现在程序员的梦中.随着编程语言和软件的诞生,异常…
本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK(java开发工具,包括JRE,javac,诊断工具) "一次编译,到处执行"java平台依靠JVM和.class字节码文件屏蔽不同平台软件硬件差异.认为C/C++是面向操作系统的编程,java是面向虚拟机的编程. 通过增加一个间接地中间层来"解耦"是计算机领域常用的一…
线程 字符 操作频繁度 1 String (1)String的创建机制 由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其运行机制是:创建一个字符串时,首先检查常量池中是否有值相同的字符串对象,如果存在相同字符串则直接使用常量池中的字符串引用,如果不存在新建字符串对象并放入常量池,但是,例外通过new方法创建的String对象是不检查常量池,而是直接在堆或栈中创建对象,并且不会把对象放入常量池. 举例: String…
java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finalize有什么不同? 经典回答: final可以用来修饰类.方法.变量.分别有不同的意义,final修饰的class代表不可以继承拓展,final修饰的变量不可以被修改,final修饰的方法不可以被重写. finally则是java保证重点代码一定会被执行的一种机制.例如try-finally来进行类似…
找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司. 面试是没什么道理可讲的,它的题目有的不合情理.脱离实际.有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少(否则你赶快去买彩票, 说不定中).所以如果你看完此文后,请不要抱怨说这些问题都能用IDE来解决.你必须在任何情况下准确回答这些问题,在面试中如果出现一两题回答不准确很有可能你就被拒…