黑马程序员技术交流社区

标题: 100家IT 名企面试必考面试题java系列 [打印本页]

作者: 播妞    时间: 2017-9-21 11:48
标题: 100家IT 名企面试必考面试题java系列
据官方数据统计,在全球编程语言工程师的数量上,JavaEE 以 900 万的程序员数量位居首位,很多软件的开发都离不开它。

自从黑马程序员授课以来,深受社会上广大编程爱好的喜爱,我们的课程一直被其他机构争相模仿,我们坚信只有教育机构自身能力的不断提升,才能带动整体教育行业的前进。根据黑马程序员毕业学员面试经验,整理 100 家 IT 名(阿里、百度、腾讯、)企面试题,黑马程序员为了帮助更多爱好并想学习编程的同学,整理了这篇资源帖子,只为帮助更多的人受益。
一、Java 基础部分

1.JAVA 的基本数据类型有哪些 ?   String 是不是基本数据类型 ?

Java  有 8 种基本数据类型:        byte        int        short        long        double        float        Boolean        char

byte        int        short        long        都属于整数类型.

Double        float        属于浮点类型.

Boolean        为布尔类型

Char  为字符型

String 不是基本数据类型.它定义的为对象

2.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?


可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。

3.Java 有没有 goto?

java 中的保留字,现在没有在 java 中使用。

4.说说&和&&的区别.

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都

true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。

&&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式,例如,对

if(str != null && !str.equals(“”))表达式,当 str 为 null 时,后面的表达式不会执行,所以不会出现 NullPointerException 如果将&&改为&,则会抛出 NullPointerException 异常。If(x==33 & ++y>0) y 会增长,If(x==33 && ++y>0)不会增长

&还可以用作位运算符,当&操作符两边的表达式不是 boolean 类型时,&表示按位与操作,

我们通常使用 0x0f 来与一个整数进行&运算,来获取该整数的最低 4 个 bit 位,例如,0x31 & 0x0f 的结果为 0x01。

备注:这道题先说两者的共同点,再说出&&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

5.在 JAVA 中如何跳出当前的多重嵌套循环?


Java 中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环

体的代码中使用带有标号的 break 语句,即可跳出外层循环。例如, ok:

for(int i=0;i<10;i++){

for(int j=0;j<10;j++){

System.out.println(“i=” + i + “,j=” + j);

if(j == 5) break ok;

}

}

另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

int arr[][] = {{1,2,3},{4,5,6,7},{9}};

boolean found = false;

for(int i=0;i<arr.length && !found;i++){

for(int j=0;j<arr.length;j++){

System.out.println(“i=” + i + “,j=” + j);

if(arr[j]        == 5) {

found = true;

break;

}

}

}

6.switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?

switch(expr1)中,expr1 只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是 int 基本类型或 Integer 包装类型,由于,byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int 类型,所以,它们不能作用于 swtich 语句中。

7.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 运算时会自动提升表达式的类型,所以结果是 int 型,再赋值给 short 类型 s1 时,编译器将报告需要强制转换类型的错误。

对于 short s1 = 1; s1 += 1;由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。

8.char 型变量中能不能存贮一个中文汉字?为什么?

char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以, char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:unicode 编码占用两个字节,所以,char 类型的变量也是占用两个字节。

9.用最有效率的方法算出 2 乘以 8 等於几?

2 << 3,

因为将一个数左移 n 位,就相当于乘以了 2 的 n 次方,那么,一个数乘以 8 只要将其左移 3 位即可,而位运算 cpu 直接支持的,效率最高,所以,2 乘以 8 等於几的最效率的方法是 2 << 3。

10.请设计一个一百亿的计算器

首先要明白这道题目的考查点是什么,一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,二是要具备一定的面向对象的设计思想。

首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以 byte 类型的整数为例,它用 1 个字节进行存储,表示的最大数值范围为-128 到+127。-1 在内存中对应的二进制数据为 11111111,如果两个-1 相加,不考虑 Java 运算时的类型提升,运算后会产生进位,二进制结果为 1,11111110,由于进位后超过了 byte 类型的存储空间,所以进位部分被舍弃,即最终的结果为 11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128 在内存中对应的二进制数据为10000000,如果两个-128 相加,不考虑 Java 运算时的类型提升,运算后会产生进位,二进制结果为 1,00000000,由于进位后超过了 byte 类型的存储空间,所以进位部分被舍弃,即最终的结果为 00000000,也就是 0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于 Java 中涉及表达式运算时的类型自动提升,我们无法用 byte 类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:

int a = Integer.MAX_VALUE;

int b = Integer.MAX_VALUE;

int sum = a + b;

System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

先不考虑 long 类型,由于 int 的正数范围为 2 的 31 次方,表示的最大数值约等于2*1000*1000*1000,也就是 20 亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:

1)这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数(2)有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中(3)提供加减乘除的功能

public class BigInteger{

int sign;

byte[] val;

public Biginteger(String val){

sign = ;

val = ;

}

public BigInteger add(BigInteger other){

}

public BigInteger subtract(BigInteger other){

}

public BigInteger multiply(BigInteger other){

}

public BigInteger divide(BigInteger other){

}

}

备注:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看 jdk 中自带java.math.BigInteger 类的源码。面试的人也知道谁都不可能在短时间内写出这个类的完整代码的,他要的是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的最终结果就放弃答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的思想意识就可以了,毕竟别人可能连题目的意思都看不懂,什么都没写,你要敢于答这道题,即使只答了一部分,那也与那些什么都不懂的人区别出来,拉开了距离,算是矮子中的高个,机会当然就属于你了。另外,答案中的框架代码也很重要,体现了一些面向对象设计的功底,特别是其中的方法命名很专业,用的英文单词很精准,这也是能力、经验、专业性、英语水平等多个方面的体现,会给人留下很好的印象,在编程能力和其他方面条件差不多的情况下,英语好除了可以使你获得更多机会外,薪水可以高出一千元。
因整理的面试题较多,大家可以回帖下载PDF版本,播妞提醒,PDF中共有265道题汇总,大家可以回帖下载哦

作者: 一梦三年    时间: 2017-9-21 19:12
阿斯顿飞洒几滴发生大幅杀跌
作者: YuanMxy    时间: 2017-9-22 18:40
好好学习天天向上
作者: YuanMxy    时间: 2017-9-22 18:41
好好学习天天向上
作者: 18732697514    时间: 2017-9-22 19:30
求面试宝典
作者: 18732697514    时间: 2017-9-22 19:32
求面试题
作者: 乌龟    时间: 2017-9-22 20:47
666666666666666666666666666
作者: Cxxian❤    时间: 2017-9-22 23:40
很稳老哥
作者: Yin灬Yan    时间: 2017-9-23 00:00
吼哈  我来拿pdf   
作者: Lavenderの    时间: 2017-9-23 08:21
加油,fighting!!!
作者: uuiop    时间: 2017-9-23 11:39
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢

作者: qiuyuexin    时间: 2017-9-23 11:59
sssssssssssssss
作者: ThinkingOutLoud    时间: 2017-9-23 17:27
THANK YOU FENGXIANG
作者: 13995949217    时间: 2017-9-23 18:00
感谢感谢

作者: Oliverwqcwrw    时间: 2017-9-23 20:44
赞赞赞赞赞赞666666666
作者: 梦编之程    时间: 2017-9-23 21:09
谢谢谢谢
作者: 忆流年ZhBy    时间: 2017-9-23 22:44
谢谢谢谢
作者: 忆流年ZhBy    时间: 2017-9-23 22:51
谢谢  东西呢

作者: 抹茶起司    时间: 2017-9-23 23:46
回帖啦 我要题
作者: pagemyron    时间: 2017-9-24 16:24
66666666666
作者: 空城灬    时间: 2017-9-24 16:30
给力  给力
作者: 旧梦空城灬    时间: 2017-9-24 16:34
资源能免费就好了
作者: victory_x    时间: 2017-9-24 16:45
感谢整理分享,黑马有你更精彩。
作者: Misaniy    时间: 2017-9-24 18:19
6666666666666
作者: 15059320049    时间: 2017-9-24 19:16
好东西啊
作者: 宇凉真    时间: 2017-9-24 20:13
好东西啊,谢谢楼主分享
作者: Elroy    时间: 2017-9-24 20:53
有心人,加油
作者: 哈哈京剧    时间: 2017-9-24 22:08
和工程预付的冬天的
作者: FamilyGlory    时间: 2017-9-24 23:18
感谢论坛论坛论坛
作者: FamilyGlory    时间: 2017-9-24 23:30
播妞播妞播妞播妞播妞
作者: liub    时间: 2017-9-25 09:54
kankan1111
作者: zjc2333    时间: 2017-9-25 10:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 记忆里停摆的钟    时间: 2017-9-25 15:01
这是最新的?

作者: qq1194821410    时间: 2017-9-25 17:52
好好学习
作者: csc    时间: 2017-9-25 17:59
谢谢楼主
作者: su36306    时间: 2017-9-25 20:21
6666666666666666666666666666666666666666666666666666666666666666
作者: xgwhsgws    时间: 2017-9-25 21:03
感谢楼主,以后面试少走弯路

作者: tavis    时间: 2017-9-26 08:34
到位不错
作者: 快乐的程序员@11    时间: 2017-9-26 09:25
非常牛逼

作者: fengyuzi    时间: 2017-9-26 11:58
不错的面试题

作者: 986565479    时间: 2017-9-26 15:28
强无敌!
作者: 哼哈二将    时间: 2017-9-26 15:54
厉害了  我的姐

作者: 张春碧    时间: 2017-9-26 21:57
回帖下载,这个坑挖的好
作者: 黑马278    时间: 2017-9-26 23:19
学习学习
作者: pdswxl    时间: 2017-9-26 23:46
新手,过来学习
作者: sunny9407    时间: 2017-9-27 00:13
谢谢。。。。。。。。。。。。。。。。
作者: 午夜幽灵    时间: 2017-9-27 08:47
{:8_470:}
作者: zhoulanqing    时间: 2017-9-27 11:41
ggigoobuguhui
作者: 李伟锋    时间: 2017-9-27 14:54
来看看,Java试题是必看的呀
作者: wzw501311328    时间: 2017-9-27 16:12
hahahhahaha
作者: 168241296    时间: 2017-9-27 19:31
asdsadadasda
作者: ywygg    时间: 2017-9-27 23:00
非PC机器上面做开发
作者: X_iaY_u    时间: 2017-9-28 00:33
感谢panniu的分享
作者: bug太上皇    时间: 2017-9-28 08:00

作者: niuheng    时间: 2017-9-28 12:35
31566546646564564
作者: sennn    时间: 2017-9-28 22:26
666666666666666
作者: 15386728696    时间: 2017-9-29 11:47
1111111111111111
作者: 你94太年轻    时间: 2017-9-29 16:32
真的太感谢楼主了,谢谢你
作者: longskyer    时间: 2017-9-29 17:10
资料资料资料资料资料
作者: 吻入深邃    时间: 2017-9-29 20:11
o(* ̄︶ ̄*)o
作者: 江枫渔火    时间: 2017-9-29 20:16
zhanceng lihailou
作者: 江枫渔火    时间: 2017-9-29 20:18
ssssssssssssssss
作者: Kirei    时间: 2017-9-29 21:56
伤心啊数据线

作者: di99gemingzi    时间: 2017-9-30 11:44
6566666666666
作者: luckily525    时间: 2017-9-30 11:59
赞一个
作者: haosun33    时间: 2017-9-30 12:59
非常感谢
作者: iMoney    时间: 2017-9-30 13:15
好东西好东西好好好
作者: fashionkillyou    时间: 2017-9-30 14:16
第六题是不是有点不对呢?

switch目前可以匹配的类型:
基本数据类型: byte short int char  
引用数据类型: 枚举(jdk1.5)String (jdk1.7)
作者: Studio1    时间: 2017-9-30 16:04
回帖                                 
作者: wyx123    时间: 2017-9-30 18:51
支持黑马,这个团队帮助了我很多。
作者: 东方飒    时间: 2017-10-1 17:22
阿斯顿飞洒几滴发生大幅杀跌
作者: h573312511    时间: 2017-10-1 21:53
很好很强大!!!!!
作者: wqh0109663    时间: 2017-10-2 08:23
什么都想学怎么办。。。。。。。
作者: Hello_cc    时间: 2017-10-2 09:56

好好学习天天向上
作者: aa2503060    时间: 2017-10-2 15:25
好。。。。。。。。。。。。。。。。。。。。。。。
作者: 13609068793    时间: 2017-10-2 15:53
+1学习学习
作者: dichen    时间: 2017-10-3 16:29
好好学习,天天向上
作者: leopoldsunny    时间: 2017-10-3 17:01
非常巴适!感谢楼主分享
作者: itmask    时间: 2017-10-3 22:54
还有一个月,加油

作者: 丶唯萌Pro    时间: 2017-10-4 18:18
学习一下

作者: 机锋小摩托    时间: 2017-10-4 20:58
赞一个!
作者: hpu145    时间: 2017-10-4 22:45
好好学习
作者: 随遇而安666    时间: 2017-10-5 00:40
我要回复哈
作者: z_zhang    时间: 2017-10-5 12:17

好好学习天天向上
好好学习天天向上
好好学习天天向上
好好学习天天向上
好好学习天天向上
作者: rememple    时间: 2017-10-5 13:40
感恩楼主!!!
作者: rememple    时间: 2017-10-5 13:49
为啥购买了然而不能下载。。。。
作者: ycy1992911    时间: 2017-10-5 18:36
好好学习天天向上
作者: pdsxingyu    时间: 2017-10-5 22:40
这个真好谢谢了 辛苦了
作者: 枝间    时间: 2017-10-5 22:47
谢谢了!!!
作者: 榕树长枫叶    时间: 2017-10-6 10:04
这就是学习动力
作者: smile_cherry    时间: 2017-10-6 11:28
~\(≧▽≦)/~啦啦啦
作者: qps704109323    时间: 2017-10-6 14:50
传智修正297期
作者: lonely1314    时间: 2017-10-6 15:28
给力给力给力给力给力给力给力
作者: hpu145    时间: 2017-10-6 17:52
666666666666666666666
作者: luhan    时间: 2017-10-6 19:25
来来来来


作者: MoonZero    时间: 2017-10-6 23:22
好好学习天天向上
作者: rememple    时间: 2017-10-6 23:44
thanks!!
作者: 郭钊荣    时间: 2017-10-7 14:30
谢谢,播妞辛苦了~~~
作者: 默家迪    时间: 2017-10-7 14:47
每天学习,坚持不懈
作者: 踏歌    时间: 2017-10-7 20:44
膜拜膜拜




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2