2017 Java面试大全(一)

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

可以包括多个类,但是只有一个public的类,并且,这个public的类名必须和文件名相同。

2.Java有没有goto?

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

3.&与&&的区别。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。当且仅当运算符两侧表达式都为true时,运算结果为true;若两侧有任一表达式为false,运算结果都为false。

&&运算符具有短路功能,即当第一个表达式的值为false时,将不再对第二个表达式进行判断。比如:if(str != null && str.equals("")),当str 为 null 时,前面表达式为false,将不会再执行后边的表达式,也就不会抛出空指针异常;但是对于if(str != null & str.equals(""))表达式,则会对两个表达式都进行判断而抛出空指针异常;

&还可以用作按位与的运算符,表示按位与。当运算符两侧的表达式的值不是bool类型时,&表示按位与操作。我们通常会使用0x0f来按位与一个整数,从而获得该整数的最低4个bit位。例如:0x31&0x0f的结果为0x01。

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

在Java中,跳出多重嵌套循环,一般有两种方法;一种是通过在外层循环定义一个标号,然后在内层用使用了该标号的break语句,即可跳出循环; 另一种方法则是定义一个flag标志来控制每一层循环的条件,通过内层控制该flag的值(true or false)来跳出循环。代码示例如下:

// 方法一:

1 ok:2 for (int i = 0; i < 100; i++){3 for (int j = 0; j < 100; j++){4 for (int k = 0; k < 100; k++){5 if (k == 5)6 breakok;7 }8 }9 }

// 方法二:

1 bool flag = true;2 for (int i = 0; i < 100 && flag; i++){3 for (int j = 0; j < 100 && flag; j++){4 for (int k = 0; k < 100 && flag; k++){5 if (k == 5)6 flag = false;7 }8 }9 }

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

在switch(value)中,value只能是整型表达式或枚举常量,其中,整型表达式可以是int基本类型或Internet包装类型。因为byte,short,char可以隐式转换为int,所以这些类型及其包装类型都可以作为switch的值;但是long,String不可以隐式转换为整型,不符合switch语句的语法规范,所以不能用于switch语句。

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

由于s1 + 1在计算时会自动提升表达式的类型,计算结果为int型,而int不能隐式转换为short,当把结果再赋给short类型的s1时,编译器将会报强制类型转换的错误; 而对于s1 += 1, += 是Java语言规定的运算符,Java编译器会对他进行特殊处理,将不会有任何错误,可以正常编译。

7.char型变量中能否存储一个中文汉字?为什么?

char型变量存储的是Unicode编码的字符,而汉字是Unicode编码的,所以char型变量中当然可以存储汉字。但是对于一些特殊的汉字可能没有被Unicode编码包含,那么这些字符不能存储在char型变量中。另外,Unicode编码占两个字节,所以,char型变量也占两个字符。

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

2<<3;

将一个数左移n位,就相当于这个数乘以了2的n次方;2乘以8就等于2乘以2的3次方,也就是2<<3;并且移位运算直接由cpu支持,所以效率最高。

9.请设计一个一百亿的计算器(本题非个人整理)

首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以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)提供加减乘除的功能

1 public classBigInteger{2

3 intsign;4

5 byte[] val;6

7 publicBiginteger(String val) {8

9 sign =;10

11 val =;12

13 }14

15 publicBigInteger add(BigInteger other) {16

17

18

19 }20

21 publicBigInteger subtract(BigInteger other) {22

23

24

25 }26

27 publicBigInteger multiply(BigInteger other){28

29

30

31 }32

33 publicBigInteger divide(BigInteger other){34

35

36

37 }38

39

40

41 }

10.使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是引用变量不能变,而引用变量所指向的对象中的内容可以改变。举个例子来说:final StringBuffer a = new StringBuffer("aaa");

对于语句 a = new StringBuffer("");执行时编译器将会报告错误;但是对于语句 a.append("bbb");则可以编译通过。

今天的经验就到这里,请关注小李后续的文章,将会奉上更多的经验!

版权所有,允许转载,转载请注明出处,侵权必究!

2017java面试_2017 Java面试大全(一)相关推荐

  1. 面试系列-Java面试总则

    Java基础 1.Map.Set.List集合差别及联系详解 2.HashSet类是如何实现添加元素保证不重复的 3.HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安 ...

  2. (Java面试)Java面试越来越难,不加油卷起来,怎么拿到大厂offer!!

    前言 最近看到一则很现实的故事:陆路最近心态很崩.和他同期一道进公司的陈琪又升了一级,可是明明大家在进公司时,陈琪不论是学历还是工作经验,样样都不如自己,眼下不过短短的两年时间便一跃在自己的职级之上, ...

  3. java高级开发工程师面试,java面试简历系统

    Kafka宕机引发的高可用问题 问题要从一次Kafka的宕机开始说起. 笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的RabbitMQ,而是采用了设计之初就为日志处理而生的 ...

  4. 【面试】Java面试常见问题汇总(不含答案)、面试指导学习笔记

    面试常见问题角度 String是基本数据类型吗? int和Integer有什么区别? HashMap和HashTable的区别,及其实现原理. ArrayList/HashMap的源码.如何实现源码 ...

  5. java数据结构与算法面试,java面试手写代码

    前言 总有一天你会明白,你的努力终究没有白费 年前辞职,人算不如天算,突如其来的疫情完全把自己的计划给打碎了,面试难度简直不亚于一场江苏高考题,后悔.焦虑不安.失眠成了我的生活状态. 从三月底开始投递 ...

  6. java基础面试,java面试评价表评语

    前言 当你准备跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是两个字--凉凉!而在如今的市场,什么多线程.高并发.分布式.负载均衡.集群.微服 ...

  7. 2022面试,Java面试项目推荐,15个项目吃透两个offer拿到手软

    项目名称:JeeSite 项目所用技术栈:Spring.Spring MVC.MyBatis.Apache Shiro.Bootstrap UI等 项目简介:JeeSite 是一个 Java EE 企 ...

  8. Java高级开发面试,Java面试没有项目经验

    技术焦虑 现在的技术圈子很火热,任何技术点,任何知识,只要你肯搜索,都能找到资料.但是现在技术圈确实有一个不好的地方,就是贩卖焦虑.这种贩卖焦虑的点并不在于形式,而是一种普遍的心态.特别是对于那种知识 ...

  9. 【面试】JAVA面试基础知识总结

    1.==和equals的区别 == 如果比较基本类型,比较的是值 == 如果比较引用类型,比较的是内存地址 equlas是Object类的方法,本质上与==一样,但是有些类重写了equals方法,比如 ...

最新文章

  1. 《陶哲轩实分析》引理17.2.4证明_导数的唯一性
  2. strstr c语言字符串,C字符串处理strstr, strindex
  3. 1001种玩法 | 1001种玩法--数据存储(2)
  4. 为什么大家都只谈薪资,却不谈梦想?
  5. android 监听安装来源_Android编程监听APK安装与删除等过程的方法
  6. 有规律字段拆分(2005的解决方案)
  7. 哈希表存在的问题及解决方案
  8. Sublime Text 使用介绍、全套快捷键及插件推荐
  9. Super Jumping! Jumping! Jumping! 最长上升子序列+DP
  10. Sass--伪类嵌套
  11. response.contenttype
  12. npm ERR! code EINTEGRITY 解决方案
  13. .net pdf转图片_如何将PDF转图片?PDF转图片免费方法!
  14. 乌班图16.04网卡驱动安装
  15. db2 正则匹配_SQL正则表达式
  16. 2007-2018年软考高级之系统分析师真题及答案解析
  17. ai面试的优缺点_被AI程序面试是一种怎样的体验?该如何准备!!!
  18. 阿辉,Bullet In The Head
  19. html的网页主题标记是什么,html标记是什么
  20. 用SSD也是一种性能提升手段

热门文章

  1. BI与大数据之间的差距有哪些
  2. 大数据分析平台在企业的重要性
  3. 浙大计算机科学与技术FPGA,Computer Science 计算机科学与技术系 重要国际学术会议...
  4. AcWing 860. 染色法判定二分图(染色法)
  5. Spark分组取TopN
  6. 机器学习模型可解释性进行到底——特征重要性(四)
  7. Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
  8. DevOps:软件架构师行动指南2.2 云的特性
  9. 如何设置dedecms自定义表单必填项?
  10. 开源代码motion