您的位置:首页 > 职场人生

送上一篇应付Java 面试的秘籍(Java 初级)

2015-08-12 00:53 483 查看
当有打算换份工作的时候,常常会被问到一些很基本的问题问道,都是一些很久不用,或者用处不大,又或者太强调概念的内容。
本文的目的搜集这么问题,让大家解除上面的烦恼!

//问题1: 类似整形变量的取值范围是什么?
Integer rage: - 2E31~ 2E31-1
........  ,  ........  ,  ........  ,  ........
.可以取值(0,1)
正确的解法:如上点表示位数,共32位,除去符号(次方减1),除去0,(正范围的值在减一)。因为计算得到 Int的取值范围如下//- 2E(32位-1)~ 2E(32位-1)-1

顺便列举一下基本数据类型占据的位宽


byte,boolean 1

int, float 4

short,char 2

long,double 8

另外,你也可以取巧的回答:
    System.out.println(Integer.MIN_VALUE);
    System.out.println(Integer.MAX_VALUE);

问题2: 左右移位运算举例考察
左移运算的概念: 所有位全部左移,左边超出部分丢弃,尾部补0
安装2进制到10进制转换,移动的位置是2进制值(0,1)*2E‘N’(N代表位位置),相当于讲数字本身乘以2的N次方
我看这又开始咧咧了,你写个(0,1)这算怎么回事?我只想说,你把0移动几位他的值是多少?
int i = 2;
System.out.println(i<< 2);//2*2*2或者说2* 2EN
右移移运算的概念:所有位全部向又移动,右边超出部分丢弃,原来最左边是0补0,是1补1。(保持符号位不变)
int j =-8;
System.out.println(j >> 2);//相当于8/2/2 或者说-8/2E2 (取整)
System.out.println(j >>> 2);// 无符号为右移,表示无论如何最边都补0 (即无符号位位移)

顺便提下 逻辑运算 与 位运算
&&,||,! VS &,|,^(异或),~(补码)
解释:补码表示0变1,1变0

送你的 -> 自动装箱,拆箱的注意事项
不用直接比较自动被装箱的两个对象相等(Not useful)
Integer ii = 200;
Integer jj = 200;
System.out.println("ii == jj? =>" + (ii == jj? "Yes,Equal":"No,unqual").toString());
Integer ii2 = 100;
Integer jj2 = 100;
System.out.println("ii2 == jj2? =>" + (ii2 == jj2? "Yes,Equal":"No,unqual").toString());
因为-128~127 这种数字是在内存中被缓存了。(这是100与200的差异)

问题3: 数组,记得正确的申明与初始化的方式
int[] a1 = {1, 2,3};
int[] a2 = new int[10];
int[] a3 = new int[]{1,2,3};

问题4: 考考你String内存复用的问题 (String, immutable object)
String str1 = "Hello ";
String str2 = "Velly";
String str4 = "Hello Velly";
String str3 = (str1 + str2).intern();
System.out.println("str3 == str4, if use intern() =>" + (str3 == str4? "Yes,Equal":"No,Unqual"));

     答案是Yes,intern表示优先使用缓存对象,所有Str4在缓存里有了,那么就复用吧。所有Object ID会是一样的
  //Ensure you know StringBuilder
  //关于正则,则每种语言都差不多啦(伪代码提示一下)
Regular Expression: Nothing to say.
String.matches()
Compile Pattern with "Pattern.compile("regular expression")"
Reuse pattern_compiled.matcher(String) with Matcher Object.
If matcher and matcher.find(): //matcher with group([index])
//问题5:The difference between Class.this.filed_name and this.filed_name. Class.this.field_name: A reference to a class instance's filed name

this.field_name : A reference to the instance filed name.
Generally, There is no difference to simple class. E.G., In person class, Person.this.name is equal to this.name.
But this syntax is very useful to visit a parent Class in non-static nest class. For example:\
Class Person(){

Person(String name){
this.name = name;
}

Class GreenMan(){
GreenMan(Color color){
this.color = color;
}
public myColor(){
Sysout.print(Person.this.name + " said:" +" I'm " + this.color.toString();
}
}


<未完待续>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: