java小白面试题
-
java有几种基本数据类型?各是哪些?各自范围是多少?
java有8种数据类型,分别是:int、short、long、float、double、byte、char、boolean 其中有6种数字型:int、short、long、byte (四种整型)、double、float(俩种浮点型) 有1种字符型:char 有1种布尔型:boolean
-
超出long的范围的数四则运算可用BigDecimal
import java.math.BigDecimal; import java.math.BigInteger; /** * @Auther:wjw * @Date:2022/5/26 - 05 - 26 - 20:47 * @Description: PACKAGE_NAME * @version: 1.0 */ public class 超出long的范围 { public static void main(String[] args) { //查看long的最大值 long a = Long.MAX_VALUE; //查看long的最小值 long b = Long.MIN_VALUE; //查看long的最大值+1 long c = Long.MAX_VALUE + 1; //查看long的最大值-1 long d = Long.MIN_VALUE - 1; System.out.println(a); //9223372036854775807 System.out.println(b); //-9223372036854775808 System.out.println("long的最大值+1:" + c); //-9223372036854775808 System.out.println("long的最小值-1:" + d); //9223372036854775807 //超出long的范围的数相加 BigDecimal bd = new BigDecimal(a); bd = bd.add(bd); System.out.println("long的最大值的2倍:" + bd); //18446744073709551614 } }
-
一个char占几个字节?可以存多少个汉字?
java中的一个char占用2个字节。java采用unicode,2个字节来表示一个字符。 一个数字 或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字节的第一个字节都为0,就是浪 费了点空间。存汉字就占满了2个字节。
-
equals()和 == 的区别?
= = 是运算符,equals是来自于Object类定义的一个方法。 = = 判断两个变量名的值是否指向同一个内存空间地址(如果都指向同一个 内存空间地址的话就返回true) 因此运行结果为false = = 可以用于基本数据类型和引用数据类型,equals只能用于引用类型。 = = 俩端如果是基本数据类型,就是判断值是否相同,equals再重写之后, 判断俩个对象的属性值是否相同;equals如果不重写其实就是 = = 号
int a = 1; int b = 1;//a已经开辟了1的一个地址空间,b直接指向1对应的地址空间就可以了 System.out.println(a == b);//true String s1 = new String("hello"); String s2 = new String("hello"); String s3 = new String("hello"); System.out.println(s1 == s2);//false s2 = s3; s1 = s3; System.out.println(s1 == s2);//true
-
为什么重写equals后还要重写hashcode?
重写equals可以让我们自己定义判断俩个对像是否相同的条件,Object中定义的hashcode方 法生成的哈希码能保证同一个类的对象的哈希码一定是不同的;当equals返回为true,我们在逻 辑上可以认为是 一个对象,但查看哈希码,发现哈希码不同,和equals方法返回结果违背,重写 hashcode之后,我们可以自定义哈希码的生成规则。 Object中定义的hashcode方法生成的哈希码根对象本身的属性值是无关的,重写hashcode之 后,我们可以自定义哈希码的生成规则,可以通过对象的属性值计算出哈希码。 hashmap中借助equals和hashcode方法来完成数据的存储。重写hashcode可以将根据对象的 内容查询转换为根据索引查询。
-
什么是重写?什么是重载?二者的区别?
1、重写: 重写(Override)是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父 类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调 用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
2、重载: 重载(Overload)是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法, 它们参数列表不同,则称为方法的重载(Overload) 3、区别:重载实现于一个类中;重写实现于子类中。
-
Arraylist和linkedlist的区别,优缺点。
ArrayList,与LinkedList都是属于实现了List接口的类。首先从名字前缀开始看 ,Array 表示数组,Link表示链表。 所以ArrayList底层是基于动态数组的。而LinkedList底层是基于双向链表的。 ArrayList必须是连续内存的,而LinkedList不要求连续内存。 ArrayList查询快,增加和删除慢;LinkedList增加和删除快,查询慢。 ArrayList 底层为动态数组,所以查询时是直接通过访问下标,查询效率高。而增加、删除 时,为了保证内存的连续,增加和删除某一位置后,后方元素都得向前移动一位,最坏情况就是删 除第一个元素,则后面第2个到第n个元素都得往前移动一位。所以增加删除慢。 LinkedList底层为双向链表,不必保证内存上的连续,所以增删快,而查询时必须要经历从 头到尾的遍历,所以查询慢。 为什么说ArrayList是基于动态数组呢?一般的数组,容量确定了就不可以再更改,也无法超 过。但是ArrayList可以,例如当数组元素数已满时调用了add方法向尾部添加一个元素,则此时会 进行扩容,ArrayList会自动创建一个更大的数组,并将所有元素拷贝到新数组中,而原数组会被抛 弃,会被GC回收。扩容后新数组的容量为原来的1.5倍。
-
什么是线程?线程和进程有什么区别?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作 单位。我们可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如 果一个线程完成一个任务要100毫秒,那么用十个线程完成该任务只需10毫秒。 区别:一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个 应用。 而线程是在进程中执行的一个任务。线程是进程的子集,一个进程可以有很多线程,每条线程 并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。 别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 有两种创建线程的方法:一是实现Runnable接口,然后将它传递给Thread的构造函数,创建 一个Thread对象;二是直接继承Thread类。
-
主键和索引的概念、区别?
-
什么是分布式?
分布式系统是一组独立的计算机以网络链接组成的服务系统,对用户来说是一个统一的体系。 因为分布式系统建立在网络之上,由多个独立操作系统组成,所以分布式系统对比独立部署并运行 于单一操作系统之上的软件系统来说存在要解决通信和共识等问题。
-
String类能否被继承?String和StringBuffer有什么区别?
-
请求方式有什么?
-
面向对象编程有哪些特点?
1、封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的 访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数 据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 2、继承:继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。继承就是子类继承 父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子 类具有父类相同的行为。 3、多态:多态同一个行为具有多个不同表现形式或形态的能力,是指一个类实例(对象)的相同方法 在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口,这意味 着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式 予以调用。
-
java中访问控制符
-
Integer和int有什么区别
Integer是int的包装类;int是基本数据类型; Integer变量必须实例化后才能使用;int变量不需要; Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; Integer的默认值是null;int的默认值是0。
-
final、finally、finalize的区别。
-
java中的锁机制
什么是锁? 在并发环境下,多个线程会对同一个资源进行争抢,所以就会导致数据出现不一致的问题,为 了解决这一个问题,就引入了锁机制,通过一个抽象的锁来对资源进行锁定。
linux常用命令