前言
笔者目前从事java开发,14年毕业后,有幸加入了一家一流的互联网企业,前一段时间,由于个人原因换工作,面试了大大小小十几家公司。现在再回顾面试经历,发现终归有一个规律可循,有一些共性的技术要了解,写此文档,一方面为了巩固下相关的知识,另一方面,如果有幸帮到一些正在找工作的朋友,实乃我的幸事。
java基础
基础
可变对象与不可变对象
可变对象与不可变对象是指对象在实例化后是否可以还可以被改变,其内部属性是否可以改变。不可变的对象的优势在于多线程是线程安全的。注意这个与
final
没有关系,final
表示的是该引用是否可以被重新被赋给一个新对象。
比如String
对象就是一个不可变对象,其的各种函数返回值为String
的函数都返回的是一个新对象。Integer与Long的缓存问题
Integer
与Long
中都有一个缓存,大小都为-128~127,即当使用valueOf()
创建Integer
与Long
类型的对象,并且值大小为-128~127 之间时,会返回缓存中的对象。这里面的考查点就是比较两个整型或者两个长整型变量是否相等,以及装箱与拆箱用的是哪个函数。如下,答案分别为true,false,true,falseInteger a = 1; Integer b = 1; System.out.println(a == b); System.out.println(new Integer(1) == new Integer(1)); System.out.println(Integer.valueOf(1) == Integer.valueOf(1)); System.out.println(Integer.valueOf(200) == Integer.valueOf(200));
字符串拼接
StringBuilder
与StringBuffer
StringBuilder
是线程不安全对象,而StringBuffer
是线程安全对象,String
对象的 ‘+’号操作,在jdk1.6以后,在编译的时候,自动会被编译成StringBuilder
对象操作。所以如果是连续的多个String
相加,则可以直接用’+’号进行拼接,但是如果是在一个循环中对同一个对象相加,则还是需要采用StringBuilder
,如下String start = "a"; for(int i = 0; i <= 10; i++){ start = start + i; }
在上面的例子中,尽量用
StringBuilder
替换 ‘+’号,如果采用上面的方法,就会在for
循环过程中会成多个临时的String
对象。线程
开启一个新线程
方案1:定义一个新类,继承
Thread
,实现run
方法