Java基础-Basic

Java有哪些基础数据类型?[面试3.0]

整数类型(byte,short,int,long)
浮点类型(float,double)
字符型(char,string)
布尔型(boolean)

引用数据类型有哪些?[面试3.0]

类(class)
接口(interface)
数组([])

Java语言的四大特性是什么?[面试3.0]

封装: 把拥有共性的属性或方法归到一个类中,方便使用
继承: 继承父类,可拥有天生父类的特性
多态: 子类以父类方式出现,实现分别在多个子类各自内部实现
抽象: 是对事物,行为的抽象,抽象类为了继承而存在

用最有效率的方法计算2乘以8(What is the most efficient way to calculate 2 multiply 8?)[面试3.0]

2<<3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)

Math.round(11.5) 等于多少(What is Math.round(11.5) equal to?)?Math.round(-11.5)等于多少?(What is Math.round(-11.5) equal to?)[面试3.0]

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11,四舍五入的原理是在参数上加0.5然后进行下取整

float f=3.4;是否正确?(float f=3.4; is that right?)[面试3.0]

不正确, 3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting)会造成精度损失,因此需要强制类型转换float f = (float)3.4; 或者写成 float f = 3.4F;

short s1 = 1; s1 = s1 + 1;有错吗?(short s1 = 1; s1 = s1 + 1; Is there anything wrong?)short s1 = 1; s1 += 1;有错吗?(short s1 = 1; s1 += 1; Is there anything wrong?)[面试3.0]

第一个错了,short不能和Integer直接相加,第二个正确s1+=1有一个隐式的类型转化过程

Java注释有哪些?(What are Java annotations?)[面试3.0]

单行注释
格式: // 注释文字
多行注释
格式: /* 注释文字 /
文档注释
格式: /
* 注释文字 */

访问修饰符有哪些?(What are the access modifiers?)[面试3.0]

public: 对所有类可见(Visible to all classes)?使用对象:类,接口,变量,方法(Use object: class, interface, variable, method)
private: 在同一类内可见(Visible within the same class)?使用对象:变量,方法, 注意:不能修饰类?外部类?(Use object: variable, method, notify: Cannot modify class(Outer class))
default: (即缺省,什么也不写(write nothing),不使用任何关键字(do not use any keywords)?: 在同一包内可见(Visible within the same pakage),不使用任何修饰符(Don’t use any modifiers),使用对象:类,接口,变量,方法(Use object: class, interface, variable, method)
protected: 对同一包内的类和所有子类可见(Visible to classes and all subclasses in the same package)?使用对象:变量,方法, 注意:不能修饰类(外部类).(Use object: variable, method, notify: Cannot modify class(Outer class))

&和&&的区别?(what is the difference between & and &&?)[面试3.0]

&运算符有两种用法:(1)按位与(&),(2)逻辑与(&&)
1.bitwise and operation
按位与运算将两个运算分量的对应位按位遵照以下规则进行计算:
0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1?
即同为1的位,结果为1,否则结果为0
设3的内部表示为
00000011
5的内部表示为
00000101
则3&5的结果为
00000001

2.logic and operation
两边条件都为true时,结果才为true;
如果有一个为false,结果就为false;

final finally finalize区别?(what is the difference between final finally finalize?)[面试3.0]

final可以修饰类,变量,方法,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量表
示该变量是一个常量不能被重新赋值

finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码放到finally代码块
中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码

finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调
用,当我们调用System.gc()方法的时候,由垃圾回收器调用finalize()

this关键字是什么(what is this keyword),super关键字是什么?[面试3.0]

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针
super可以理解为是指向自己超类对象的一个指针,而这个超类指的是离自己最近的一个父类

static存在的主要意义?(The main significance of static existence?)[面试3.0]

static的主要意义是在于创建独立于具体对象的域变量或者方法?以致于即使没有创建对象,也能使用属性和调用方法

static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能?static块可以置于类中的任何地方,类中可以有多个static块?在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次?因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行?

break,continue,return的区别?(what is the difference between break,contine and return?)[面试3.0]

break结束当前的循环体
continue跳出本次循环,继续执行下次循环
return程序返回,不再执行下面的代码

如何跳出当前的多重嵌套循环?(How to get out of the current multiple nested loop?)[面试3.0]

要想跳出多重循环,可以在外面的循环语句前定义一个标记,然后在里层循环体的代码中使用带有标记的break语句

什么是Java多态的?(What is Java polymorphism?)[面试3.0]

子类继承父类(extends)
类实现接口(implements)

不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性

抽象类和接口的对比?(what is the difference between abstract class and interface?)[面试3.0]

相同点
接口和抽象类都不能实例化
都位于继承的顶端,用于被其他实现或继承
都包含抽象方法,其子类都必须覆写这些抽象方法

不同点:

情况抽象类接口
声明抽象类使用abstract关键字声明接口使用interface关键字声明
实现子类使用extends关键字来继承抽象类?如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现子类使用implements关键字来实现接口?它需要提供接口中所有声明的方法的实现
构造器抽象类可以有构造器接口不能有构造器
访问修饰符抽象类中的方法可以是任意访问修饰符接口方法默认修饰符是public?并且不允许定义为private或者protected
多继承一个类最多只能继承一个抽象类一个类可以实现多个接口
字段声明抽象类的字段声明可以是任意的接口的字段默认都是static和final的

内部类的分类有哪些?(what are the classifications of inner classes?)[面试3.0]

静态内部类
定义在类内部的静态类,就是静态内部类?
静态内部类可以访问外部类所有的静态变量,而不可访问外部类的非静态变量;
成员内部类
定义在类内部,成员位置上的非静态类,就是成员内部类
成员内部类可以访问外部类所有的变量和方法,包括静态和非静态,私有和公有,成员内部类依赖于外部类的实例
局部内部类
定义在方法中的内部类,就是局部内部类
定义在实例方法中的局部类可以访问外部类的所有变量和方法,定义在静态方法中的局部类只能访问外部类的静态变量和方法
匿名内部类
匿名内部类就是定义在方法中的没有名字的内部类,除了没有名字,匿名内部类还有以下特点:
匿名内部类必须继承一个抽象类或者实现一个接口
匿名内部类不能定义任何静态成员和静态方法
当所在的方法的形参需要被匿名内部类使用时,必须声明为final,(因为生命周期不同,若方法的参数被回收时,它的引用可能还在内部类中使用)
匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法

构造器(constructor)是否可被重写(override)?(is constructor can override?)[面试3.0]

构造器不能被继承,因此不能被重写,但可以被重载
constructor can not be inherit so, it can not be override, but it could be overload

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性
Method overload and override are ways to achieve polymorphism,the difference is that the former implements compile-time polymorphism, and the latter implements runtime polymorphism

重载:方法名相同参数列表不同(The method name is the same and the parameter list is different)
重写:方法名,参数列表必须相同(Method name, parameter list must be the same)

对象相等判断(Object equality judgment)[面试3.0]

==和equals的区别是什么(what is the difference between == and equals?)
==:它的作用是判断两个对象的地址是不是相等(Its role is to determine whether the addresses of two objects are equal)
equals():比较两个对象的内容相等(Compares the contents of two objects for equality)

两个obj,如果equals()相等,hashCode()一定相等
两个obj,如果hashCode()相等,equals()不一定相等?Hash散列值有冲突的情况,虽然概率很低?

Two obj, if equals () is true, hashCode () must be equal
Two objs, if hashCode () is equal, equals () may not be equal(Hash hash values are in conflict, although the probability is low)

值传递和引用传递有什么区别?(What is the difference between value passing and reference passing?)[面试3.0]

值传递: 指的是在方法调用时,传递的参数是按值的拷贝传递,也就是说传递后就互不相关了
引用传递: 指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址?传递前和传递后都指向同一个引用

什么是反射机制?反射机制有哪些特点?(What is a reflection mechanism and what are its characteristics?)[面试3.0]

动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制
反射机制优缺点
优点:运行期类型的判断,动态加载类,提高代码灵活度
缺点:性能比直接的java代码要慢很多

String str="i"与String str=new String(“i”)一样吗?(is a and b the same?)[面试3.0]

不一样,因为内存的分配方式不一样,String str=“i"的方式,java虚拟机会将其分配到常量池中,而String str = new String(“i”)则会被分到堆内存中
no, Because the way of memory allocated is different, the way of String str"i”, java virtual machine allocate it to constant pool, and String str = new String(“i”) will be allocate into stack memory.

String s = new String(“xyz”);创建了几个字符串对象
how many objects does String s = new String(“xyz”); created

两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象
it’s two. one is “xyz” in the static area, another is an object created in the stack by using “new”

String为什么是不可变的?why String is immutable?
because String is based on char[], the char[] is final

Java支持的基本数据类型有哪几种?[面试3.0]

byte,short,int,long,float,double,boolean,char

String s=“a”+“b”+"c"创建了几个对象?String a=new String(“b”+“c”);又创建了几个对象?[面试3.0]

第一个问题: “a”+“b”+“c"在编译期已经常量折叠为"abc”,答案:一个对象
第二个问题:
字符串常量 “b” 被JVM存放在数据段区常量池中
字符串常量 “c” 被JVM存放在数据段区常量池中
“b”+"c"又生成了一个字符串被JVM存放在数据段区常量池中
new String(“b”+“c”)对象被JVM存放在堆中
答案:四个对象

下面哪些是Thread类的方法?[面试3.0]

A.start() B.run() C.exit() D:getPriority()
答案:ABD,其中C是System的方法

Integer x=10,y=10;System.out.println(x==y);输出什么?为什么?[面试4.0]

答案:true,因为Integer内部做了缓存-128到127的整型值都会被缓存起来

java.lang.Error和java.lang.Exception的父类是什么?[面试3.0]

答案:Throwable

子类继承父类若实例化子类程序执行情况?[面试5.0]

答案:先执行父类和子类的static再执行父类的{}以及构造函数,然后执行子类的{}以及构造函数

0.6332的数据类型是?[面试3.0]

A.float B.double C.Float D.Double
答案:B,如果为float型需要加上f显示说明

Java接口的修饰符可以为?[面试3.0]

A.private B.protected C.final D.abstract
答案:CD,而且final和abstract不能同时出现

Array和ArrayList的区别是什么?[面试5.0]

初始化:Array初始化必须指定长度,ArrayList不用
连续性:Array是连续存放的,ArrayList可能不连续
同构性:Array只能存同构元素,ArrayList可以存放异构元素(因为内部是Object类型)
修改元素:Array不能在指定位置插入元素,ArrayList可以

SynchronizedMap是什么?什么时候线程不安全?[面试3.0]

SynchronizedMap是一个同步包装器,是Collections.synchronizedMap的内部类,里面的方法都实现了对当前对象的synchronized同步
线程不安全的情况:虽然所有方法都实现了同步,若单单调用一个方法如:addEntry时是线程安全的,但若多段代码在一起:如先用containsKey判断key是否存在,再用remove删除元素
这时整块代码就不会同步了,因为两个线程方式都通过containsKey时,其中一个线程已经remove调了这个元素,但另外一个线程将会遇到remove一个空元素
解决方法:就是对该代码块进行同步(这样效率就低了)
线程不安全的情况2:当我们遍历Map时使用keySet然后使用Iterator迭代,这时keySet和Iterator都是Map的一个视图,当一个线程正在迭代Map中的元素时,另一个线程可能正在修改其中的元素,此时,就会抛出ConcurrentModificationException异常
解决方法:直接返回元素的副本而不是视图,这个可以通过集合类的 toArray()方法实现(但创建副本的方式效率比之前有所降低)
解决方法2:迭代的时候锁住整个集合(这样效率就更低了)

强软弱虚四种引用知道吗?[面试5.0]

强引用: 一般new出来的对象都是强引用,不再引用时回收,否则不回收
软引用: 当内存不足时可以被回收,非常适合于创建缓存
弱引用: 若一个对象的所有引用都是弱引用的话,下次GC会回收该对象,一般用在集合类中,特别是哈希表
虚引用: 如果一个对象与虚引用关联,则跟没有引用与之关联一样,主要用于跟踪垃圾回收的过程,比如能在某个对象回收时得到一个通知

你使用过哪些jdk命令,并说明各个的作用是什么?[面试5.0]

jps: 用于显示指定系统内所有HotSpot虚拟机进程
jstat: 监视虚拟机各种运行状态如:类装载,内存,GC等
jmap: 用于生成堆转储快照dump文件
jstack: 用于生成虚拟机当前时刻线程快照threaddump
jinfo: 用来查看和调整虚拟机各项参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023年Java面试宝典

您的鼓励是对我的肯定,共建希望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值