1_java基础

1.JAVA中的几种基本数据类型是什么,各自占用多少字节
bit:位:计算机存储数据的的最小单位,二进制数中的一个位数,其值为0或1
byte:字节 1 byte=8bit
基本数据类型:
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
float 4字节
double 8字节
char 2字节
boolean 1 bit 即 1/8 字节
2.String类能被继承吗,为什么。
不能被继承,String类有final修饰符,被final修饰的类是不能被继承的
3.String,Stringbuffer,StringBuilder的区别
这三个类主要的区别在两个方面,即运行速度和线程安全
①运行速度,StringBuilder>StringBuffer>String
String是字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。java中对String对象的操作实际上是一个不断创建新的对象并且将旧对象回收的一个过程所以执行速度很慢,而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的动作,所以速度要比String快很多
②线程安全
StringBuilder是线程不安全的。而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区中被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字所以可以保证线程是安全的,但是StringBuilder的方法则没有该关键字,即不能保证线程安全

-----------------总结:
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作
StringBuffer:使用在多线程下载字符串缓冲区进行大量操作
4.ArrayList和LinkedList的区别以及优缺点
ArrayList和LinkedList都是实现了List接口的容器,用于储存一系列的对象引用,他们都可以对于元素的增删改查进行操作
区别:
①ArrayList实现了基于动态数组的数据结构,LinkedList是基于链表结构
②对于随机访问的get和set方法,ArrayList要优于LinkedList因为LinkedList要移动指针
③对于新增和删除操作add和remobe,LinkedList比较占优势,因为ArrayList要移动数据
优缺:
①对于ArrayList和LinkedList,在列表末尾增加一个元素的开销都是固定的
②在ArrayList集合中添加或者删除一个元素时,当前的列表所有的元素都会被移动,而LinkedList集合中添加或者删除一个元素的开销是固定的
总结:查询用ArrayList而进行增删改最好用LinkedList
5讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字
段,当new的时候,他们的执行顺序

一个类的实例化过程;
①首先会执行类中的静态代码块static(不管代码块是在类的开头还是末尾),如果这个类有父类,同样会优先查找父类中的static代码块,然后是当前类的static
②然后从父类的第一行开始执行,直至代码末尾,中间不管是赋值还是方法调用都会按顺序一一执行
③父类的构造函数,执行带参数或者不带参数的构造函数,依赖于实例化的类的构造函数有没有super父类的带参数或不带参数的构造函数
④然后,从子类的第一行开始执行,直至代码末尾处,中间不管是有赋值还是方法调用,按顺序一一执行
⑤再试子类的构造函数
⑥最后是类的方法调用,如果子类覆盖了父类的方法,执行时会先执行子类覆盖的方法,如果方法中有super.method,才会调用父类的同名method,否则不会
--------------------总结:
先静态再父子
父类静态数据->子类静态数据->父类字段->子类字段->父类构造函数->子类构造函数
6用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们
内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

①最常用的Map实现类有HashMap,ConcurrentHashMap(jdk1.8),LinkedHashMap,TreeMap,HashTable
②HashMap是非线程安全的,HashTable和ConcurrentHashMap是线程安全的,HashTable是在每个操作方法上加了synchronized来达到线程安全,ConcurrentHashMap是使用CAS(compare and swap)来保证线程安全的
③并发下可以使用ConcurrentHashMap和HashTable
④HashTable存储方式都是链表+数组,数组里面放的是当前hash的第一个数据,链表里面放的是hash冲突的数据
ConcurrentHashMap是数组+链表+红黑树
⑤默认容量都是16,负载因子都是0.75,一般扩容到原内存的2倍
7 JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。
jdk8放弃了分段锁而是用了node锁,降低锁的粒度,提高性能,并使用CAS操作和确保node的一些操作的原子性取代了锁
但是ConcurrentHashMap的一些操作使用了synchronized锁,而不是ReentrantLock,虽然说jdk8的synchronized的性能进行了优化,但是我觉得还是使用ReentrantLock锁能更多的提高性能
8. 有没顺序的 Map 实现类,如果有,他们是怎么保证有序的 。
顺序的Map实现类:LinkedHashMap,TreeMap
LinkedHashMap是基于元素进入集合的顺序或者被访问的先后顺序排序,TreeMap则是基于元素的固有顺序(由Comparator或者Comparable确定)
9. 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。
1抽象类可以有自己的实现方法,接口在jdk8以后也可以有自己的实现方法
2抽象类的抽象方法是由非抽象类的子类实现,接口的抽象方法有接口的实现类实现
3接口不能有私有的方法和对象,抽象类可以有自己的私有的方法和对象
4类不可以继承多个类,接口可以继承多个接口,类可以实现多个接口
10继承和聚合的区别在哪
继承:一个类(称为子类,子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能
聚合:关联关系的一种特例,体现的是整体与部分、拥有的关系,比如计算机与CPU,公司与员工
11反射的原理,反射创建类实例的三种方式是什么。
反射的原理:如果知道一个类的名称或者它的一个实例对象,就能把这个类中的所有方法和变量的信息(方法名,变量名,修饰符,类型,方法参数等等所有信息)找出来
反射创建类实例的三种方式:
1,Class.forName(“A”)
2,new A().getClass
3,A.class
12,反射中,class.forName和ClassLoader的区别
class.fromName()除了将类的.class文件加载到jvm中,还会对类进行解释,执行类中的static块。
ClassLoader只干一件事情,就是将.class加载到jvm中,不会执行static中的内容,只有在newInstance才会执行static块
13,Final的用途
final修饰的对象不能被修改
final修饰的类不能被集成
final修饰的方法不能被重写
14java的深拷贝与浅拷贝的区别
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
深拷贝:基本数据类型进行值传递,对引用数据类型,创建新的对象并复制其内容
15数组和链表数据结构描述,各自的时间复杂度
数组:将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是增加/删除,就要移动大量的元素。适合查询
链表:链表中的元素在内存中不是顺序储存的,而是通过存在元素中的指针链接在一起,比如要访问一个元素,需要从第一个开始一直找到所需要的元素位置,但是添加和删除很方便,只需要修改元素中的指针
①从逻辑结构上
数组必须事先定义固定的长度(元素个数),不能适应数据动态的增减
链表动态的进行储存分配,可以适应数据动态增减
②储存位置
数组储存在栈区
链表储存在堆区
③数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度为O(n)
数组插入或者删除元素的时间复杂度为O(n),链表的时间复杂度为O(1)
16泛型的好处
泛型的本质是参数化类型,也就是说所操作的数据类型被制定为一个参数,泛型的好处是编译时期检查类型安全,并且所有的强制转换都是自动和隐式的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值