BAT面试题&&答案——JAVA篇(1)

版权声明:转载本博客文章时,请注明文章来源,并附上源链接 https://blog.csdn.net/pkorochi/article/details/83538553

前言

今早看到首页蹦出来的一篇标题是一篇文章,内容还没仔细看,这个表我吓了一大跳。回想当年拿着4000块实习的苦日子,现在的大学毕业生实在幸福了。BAT爸爸们不是一般的土豪啊。但要进BAT也不是那么容易的,少不了过五关斩六将的各种面试。

互联网大厂应届生校招薪酬

想起大学时当家教的经历,突然又教一下学生,过过当老师的瘾了。于是找了一份BAT等大公司的面试题汇总,逐一加上答案和参考资料,跟同学们分享交流。希望各位应届的同学看了都能当上大厂的码农,不用当小厂的码畜。

ps:

  • 面试题的量很大,我会分批持续更新,做成一个系列
  • 每题下面除了答案之外,我还会附上参考资料,想更深入了解与答案相关的知识,可以查阅这些资料
  • 答案加上了我自身的理解,如有错漏或者看不懂的地方,可以通过qq跟我交流,我的企鹅号是244095135
  • 如果要转载的请先与我联系并注明出处,尊重别人的劳动成果是一个人的基本素质

JAVA面试题(1)

1.java中==和equals和hashCode的区别

== 对两个变量进行值的比较
equals 对两个变量进行内存地址的比较
hashcode 获取变量在集合中所存储的区域

参考资料

https://blog.csdn.net/tiantiandjava/article/details/46988461

http://wiki.jikexueyuan.com/project/java-enhancement/java-twentysix.html

2.int、char、long各占多少字节数

类型 存储需求 bit 数 取值范围 备注
int 4字节 4*8 -2147483648~2147483647 即 (-2)的31次方 ~ (2的31次方) - 1
short 2字节 2*8 -32768~32767 即 (-2)的15次方 ~ (2的15次方) - 1
long 8字节 8*8   即 (-2)的63次方 ~ (2的63次方) - 1
byte 1字节 1*8 -128~127 即 (-2)的7次方 ~ (2的7次方) - 1
float 4字节 4*8   float 类型的数值有一个后缀 F(例如:3.14F)
double 8字节 8*8   没有后缀 F 的浮点数值(例如:3.14)默认为 double
boolean 1字节 1*8 true、false
char 2字节 2*8   Java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节。(因为java使用的是unicode编码)

参考资料

https://www.jianshu.com/p/fd560bc39adb

3.int与integer的区别

  1. Integer是int的包装类;int是基本数据类型; 
  2. Integer变量必须实例化后才能使用;int变量不需要; 
  3. Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; 
  4. Integer的默认值是null;int的默认值是0。

参考资料

https://blog.csdn.net/chenliguan/article/details/53888018

4.谈谈你对java多态的理解

  • 多态的定义:相同类项的变量执行同一个方法时,呈现出不同的行为特征这就是多态。
  • 多态的实现方法:
  1. 子类继承父类
  2. 子类重写父类的方法
  3. 父类引用指向子类对象
  4. 通过父类引用调用子类重写后的方法,执行具有子类特征的行为

参考资料

https://blog.csdn.net/woshiermingerming/article/details/52324861?utm_source=blogxgwz6

5.String、StringBuffer、StringBuilder区别

String 字符串常量,实际是一个不可变的对象,每个对其内容进行变更都相当于重新生成这个对象。在字符串需要频繁更改时,很耗性能,不推荐使用
StringBuffer 字符串变量,线程安全。推荐在需要频繁更改字符串的场景中使用,可通过toString()转换成String对象
StringBuilder 字符串变量,非线程安全。性能比StringBuffer高出10%-15%,但由于其线程不安全的特性,多数场景下不推荐使用

参考资料

https://blog.csdn.net/kingzone_2008/article/details/9220691

6.什么是内部类?内部类的作用

  • 内部类的定义:定义在一个类内部的类
  • 内部类的作用:
  1. 可通过private和protected限制类的访问权限
  2. 内部类拥有外围类的所有元素的访问权限
  3. 可实现多重继承
  4. 可以避免修改接口而实现同一个类中两种同名方法的调用。

参考资料

https://blog.csdn.net/mid120/article/details/53644539

7.抽象类和接口区别

抽象类(abstract class):不能实例化的类,内部可包含抽象方法,可通过extend被其他类继承

接口的定义(interface):抽象方法的集合,可通过implements被其他类实现

区别:

抽象类 接口
抽象类可包含一般方法,抽象方法 接口只包含抽象方法
继承抽象类的子类如果是抽象类可以不实现父类的抽象方法,否则必须实现所有的抽象方法 实现接口的类需要实现接口中的所有方法

抽象类可以有构造器

接口不能有构造器

抽象方法可以有public、protected和default等修饰符

接口方法默认修饰符是public。不可以使用其它修饰符

一个子类只能存在一个父类,所以不能继承多于一个抽象类

一个类可以实现多个接口
抽象类添加新方法时,可以提供默认的实现,不需要改动先有的代码 接口添加新方法时,所有实现了该接口的类都要添加对新方法的实现

参考资料

https://www.jianshu.com/p/038f0b356e9a 

8.抽象类的意义

  1. 为子类提供一个公共的类型;
  2. 封装子类中重复内容(成员变量和方法);
  3. 定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。

参考资料:

https://www.jianshu.com/p/4ed470d0cf38

9.接口的意义

  1. 功能性:一个类可以实现多个接口,接口作为抽象类不能被多继承这一缺陷的补充,完善了java的面向对象能力
  2. 规范性:在多人协作的项目中,可以由架构师先行编写主要的接口,确定要实现的主要功能,同时也规范了这些功能的方法命名
  3. 扩展性:用接口来引用实现了该接口的类,如果接口对应的功能需要大面积改动,只需要替换实现它的类就可以了,原理类似C++中父类指针指向子类对象的多态调用
  4. 安全性:系统提供对外服务时,只提供接口,这样可以防止泄露方法实现细节

参考资料

https://blog.csdn.net/Caide3/article/details/68490883

10.抽象类与接口的应用场景

  1. 需要一些有默认实现的方法时,用抽象类
  2. 基础功能会平凡增删的情况,用抽象类
  3. Java不支持多继承,可以用实现多个接口的形式来解决
  4. 没有特殊需要时,推荐使用接口,保留扩展性

参考资料

https://www.jianshu.com/p/b7ddefc7588c

猜你喜欢

转载自blog.csdn.net/pkorochi/article/details/83538553
今日推荐