面试题精选1

基础语法

1.String、StringBuilder、StringBuffer的区别?

String位字符串常量,所以String对象一旦创建是不可更改的
运行速度的区别
StringBuilder>StringBuffer>String
线程安全区别:
StringBuffer的许多方法都带有synchronized关键字,所以可以保证线程的安全性,但是StringBuilder没有带此关键字,所以不能够保证线程的安全性,有时候可能会出现一些错误操作,所以,使用单线程的话是要StringBuilder,多线程的话,使用StringBuffer会更加安全。
总结:
1.String是只读字符串,引用字符串内容是不能被改变的。
2.StringBuilder和StringBuffer表示的字符串对象可以直接被修改,StringBuilder单线程环境下使用,效率要比StringBuffer要高,StringBuffer加锁则更加安全。
**

2.equals与==的区别?

1."= =“可以判断基本类型,也可以判断引用类型
判断基本类型比较的是值
判断引用类型比较的是地址值,即判断的是否为同一个对象
2.equals判断两个对象是否相等
如果没有重写Object类的equals方法: 源码中是使用”=="进行比较
重写equals方法,判断的是两个对象的内容是否相等

3.是否可以继承String类?为什么用final修饰?

不能,String是被final修饰的类,不能被继承;
为了效率和安全
1.只有字符串不可变,字符串池才有可能实现
2.只有字符串不可变,所以多线程是安全的,同一个字符串实例可以被多个线程共享
3.因为字符串是不可变的,所以在被创建时已经被hashcode缓存了,不需要重新计算,使得字符串很适合做map中的键
4.如果字符串是可变的,会引起很严重的安全问题

4.什么是面向对象编程?

面向对象编程的基本思想就是类 方法 继承封装多态 等概念来进行程序设计,从现实世界中实际存在的事物(对象)出发来构造软件系统,尽可能的运用人类的自然思想进行程序设计

5.面向对象的三大特征

继承:子类继承父类可以使子类拥有父类所有的行为和属性,还可以追加行为和属性。继承只支持单继承不支持多继承,单支持多层继承。
封装:将事物的行为(方法)和属性抽取出来封装成一个类,提高复用性
多态:父类引用指向子类实现,实现多态的前提条件:必须要继承重写向上转型三个条件

6.JDK,JRE,JVM

JDK:开发者工具包,包含了JRE,JVM
JRE:开发环境,包含JVM和核心类库
JVM:虚拟机

7.Java基本数据类型

四类八种

整数 浮点数 布尔 字符

byte short int long float double boolean char

8.什么是方法签名

方法名称和参数类型

9.Java中的访问修饰符

private default protected public

10.final有什么用?和finally,finalize有什么区别?

final称为最终的意思,被final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量为常量,不能被重新赋值。

finally: 一般用在try-catch结构中,作用为:不管是否出现异常,finally的代码都会执行

finalize: 是Object类的方法,用于垃圾回收器中

11.this和super的区别

this指向的是自身的一个对象,代表本身对象
super指向的是自己的一个超类对象,这个超类对象是最近的一个父类
this()调用的是本类的其他构造方法
super()调用的是父类的构造方法

12 break,continue,return的区别及作用?

break:跳出当前循环
continue:结束当前循环进行下一次循环
return:结束方法

13. 抽象类能被final修饰吗?

不能,final修饰的类不能被继承,而抽象类本身必须要被继承的,相互冲突,所以不能被修饰

14.static修饰的方法能调用非static修饰的变量和方法吗?

不能,因为静态方法创建出来的的时候,非静态资源还没创建出来,所以静态方法只能调用静态方法和变量

15.局部内部类和匿名内部类访问的互补变量的时候,为什么必须要加上final?

因为生命周期不一致,局部变量保存在栈中,方法结束后,非final修饰的变量会被销毁,而局部内部类对于局部变量的引用依然存在,调用局部变量的时候就会出错

16.重载(Overload)和重写 (Override) 的区别

重载: 方法名称相同 参数类型不同 参数类型:参数数量 参数类型 参数顺序
重写:发生在父子类中 方法的名称参数必须相同 抛出异常小于父类,访问修饰符大于等于父类

17构造器(constructor)是否能被重写(override)

构造器不能被继承,所以不能被重写,但是可以被重载

18 Java中创建对象的方式有哪些

1.使用new关键字
2.使用Class类的newInstance方法
3.使用Constructor的newInstance方法
4.使用clone方法
5.使用反序列化

集合

1.Arraylist和LinkList的区别

Arraylist查询速度快(不准确),尾部增删除快,头部增删慢,随机访问速度快;
Linkedlist头尾增删速度快,中间不高,性能远比arraylist差,不适合做查询;,如果要进行查询使用hashMap

1.是否保证线程安全: ArrayList和LinkedList都不保证线程安全;
2.底层数据结构:Arraylist底层使用的是数组;LinkedList底层使用的是双链表;
3.插入和删除是否受元素位置的影响;
ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响
LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响。
4.是否支持快速随机访问:LinkedList不支持高效的随机元素访问,ArrayList实现了RandomAcces接口,所以有随机访问功能
5.内存空间占用:
ArrayList的空间浪费主要结尾会预留一定的容量空间
LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间

2.hashMap底层原理

JDK8以前:数组加链表
JDK8以后:数组+双链表+红黑树

3.HashMap的resize过程是什么样的?

采用hash表数据加链表的形式,1.8以后引入了红黑树的数据结构,初始化数组长度为16,当数组长度为0.75时扩容,链表长度大于8时转为红黑树,红黑树的长度小于6时转为链表结构数组中的元素容量超过了阙值的0.75就会触发扩容。

4.HashMap经常用在哪些领域

1.电子商务的应用中使用HashMap作为缓存
2.金融领域出于性能的考虑经常使用HashMap和ConcurrentHashMap
3.controller层向前台返回数据可以用map封装数据
4.mybatis中的map可以作为参数或封装结果集

5.HashMap与Hashtable的区别?

1.hashmap去掉了HashTable的contains方法,但是加上了containsvalue()和containskey()方法
2.hashTable同步到,而且HashMap非同步的,效率上比hashTable要高
3.hashMap允许空键值,而hashTable不允许

6.List,Map,Set三个接口,存取元素各有什么特点?

List有序可重复
Set无需不重复
Map一般都是键值对key-value值,value可多值.

7.HashSet是如何保证元素唯一性的呢?

通过元素的两个方法 hashcode和equals来完成的

8.TreeSet怎么对集合中的元素进行排序?

TreeSet底层数据结构是二叉树
1.让元素自身具备比较性,需要元素对象实现Conparator接口的比较器,覆盖compare方法

9.map集合的两者取出方式?

1.通过map.keyset先得到map集合的键,再根据键得到value值
2.通过map.entrySet直接得到键值对

10 Collection和Collections的区别?

Collection是集合类的上级接口,继承他的接口主要是Set和List
Collections是工具类,有很多操作集合的方法

11 ConcurrentHashMap的工作原理及代码实现

ConcurrentHashMap引入了分割(Segment)的概念,支队Map的一部分(Segment)进行上锁,这样保证同步的时候,锁住的不是整个Map

12 HahsCode的方法和作用

hashCode()的作用是获取哈希码,也称为散列码,实际上返回的是一个int整数。哈希码的作用是确定该对象在哈希表中的索引位置
不同的对象可能会有相同的hashCode,在比较一个对象是否相等时,首先需要比较对象的hashCode是否相等,其次比较equal是否相等

因此,equals方法被重写过的话,hashCode方法也必须被重写,如果没有重写,在该class的两个对象无论如何也不会相等

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值