JavaSE 面试题

面试题

1、作用域public,private,protected,以及不写时的区别
1、访问控制权限修饰符来控制元素的访问范围
2、访问控制权限修饰符包括:
public    表示公开的,在任何位置都可以访问 
protected  同包、子类
缺省       同包 ,跨包不能访问
private    表示私有的,只能在本类中访问
3、访问控制权限修饰符可以修饰类、变量、方法.....
4、当某个数据只希望子类使用,使用protected进行修饰。
5、修饰符的范围
 pirvate<缺省<protected<public
2、 int 和Integer 有什么区别?
1、Integer是int的包装类,int则是java的一种基本数据类型 
2、Integer变量必须实例化后才能使用,而int变量不需要 
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 
4、Integer的默认值是null,int的默认值是0
3、 数组的创建方式有哪几种?

第一种: int[] moneys= new int[]{88,128,168,228};
第二种写法 int[] moneys ={80,70,90,100};
第三种写法 数据类型[] 数组的名称 = new 数据类型[数据的长度]

4.java 中会存在内存泄漏吗,请简单描述 22

存在
java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,
尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,
即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。
由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,
例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。

5.GC 是什么? 为什么要有GC?

gc是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,
java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。

6.java 中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,
就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

7.内部类的实现方式?

1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类

8.符串操作:如何实现字符串的反转及替换
9.、error 和exception 有什么区别?

Error:错误,是Throwable的子类,用于描述那些无法捕获和处理的错误情况,属于非常严重的错误,StackOverflowError
Exception:异常,是Throwable的子类,用于描述那些可以捕获和处理的例外情况,属于不太严重的错误,ArrayIndexOutOfBoundsException

10、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

1、继承Thread类 1、同步代码块
2、实现Runnable接口 2、同步方法
3、线程池 3、使用重入锁实现线程同步 Lock 实例化ReentrantLock

11、sleep() 和wait() 有什么区别?

sleep()是使线程暂停执行一段时间的方法。wait()也是一种使线程暂停执行的方法
1、原理不同。
sleep()方法是Thread类的静态方法,它会使此线程暂停执行一段时间,而把执行机会让给其他线程,等到计时时间一到,此线程会自动苏醒。
而wait()方法是Object类的方法,直到其他线程用调用notify()或notifyAll()时才苏醒过来,开发人员也可以给它指定一个时间使其自动醒来
2、对锁的处理机制不同。
调用sleep()方法并不会释放锁。而wait()方法则不同,当调用wait()方法后,线程会释放掉它所占用的锁
3、使用区域不同。
wait()方法必须放在同步控制方法或者同步语句块中使用,而sleep方法则可以放在任何地方使用。

12、说出一些常用的类,包,接口,请各举5 个

String类,Object类,Thread类,Date类,ArrayList,Throwable类
lang包,util包,io包,net包,org包
Runnable接口,Collection,Map,List,Set

13、String s=new String(“xyz”);创建了几个对象?

2个吧,常量池一个,堆中一个;

14如何格式化日期?

Date date = new SimpleDateFormat(“yyyy-MM-dd”).parse(“2019-08-31”);

15、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗

jvm默认处理的方式:【一层一层向上抛,jvm接收到之后结束自己】
try:试一试
try语句块中,是可能会运行失败的代码,try语句是用于对异常进行检测
catch:抓住、捕获
抓住try语句中出现的异常,并且定义异常处理的方式
finally:也是一个代码块,在这个代码块中的代码,一定会执行,无论上面描述的哪种情况,都会执行。
甚至在代码中有return语句,都会先执行finally中的代码。
throw:抛出,用于抛出一个异常对象,创建一个异常对象,使用throw关键字抛出,实现了程序的结束或者跳转
throws:抛出,用于声明一个异常类型,throw出现在方法中, throws出现在方法参数小括号的后面
throw后面只能跟一个异常对象;throws可以跟很多个异常类型

16启动一个线程是用run()还是start()?

start()

17.线程池的作用

1.重用线程池的线程,避免因为线程的创建和销毁锁带来的性能开销
2.有效控制线程池的最大并发数,避免大量的线程之间因抢占系统资源而阻塞
3.能够对线程进行简单的管理,并提供一下特定的操作如:可以提供定时、定期、单线程、并发数控制等功能

4.面向对象的三大特性理解。

封装:封装之后才会形成真正的“对象”,真正的“独立体”;封装就意味着以后的程序可以重复使用。
封装将复杂的功能封装起来,对外开放一个接口,简单调用即可。
并且这个事物应该适应性比较强,在任何场合都可以使用。
封装之后,对于事物本身,提高了安全性

继承:
让类与类之间产生关系,为多态打下基础
继承“基本”的作用是:代码复用,减少代码量。
继承最“重要”的作用是:有了继承才有了以后“方法的覆盖”和“多态机制”。
继承只支持单继承

多态:多态必须在继承的前提下实现
多态的两种体现形式 第一种是 以父类作为参数, 第二种是以父类作为返回值
通过继承实现的不同对象调用相同的方法,进而有不同的行为

5.请简述静态以及静态特点。

静态的数据 都存在内存里的静态空间里 ,静态区间又在方法区里 实现 数据的共享:可以节省内存,在开发里尽量少使用
1. 静态是 随着 class 的加载 而加载 ( 影响用户的体验度)
2. 静态优先于对象的存在,不依赖与对象
3.静态的调用方式不同,可以通过类型直接调用,也就可以通过对象名调用 ,但是一般建议通过类名直接调用

6.写出对接口和抽象类的理解。

接口和抽象类的区别:
1、接口是行为的抽象可以有静态方法,抽象方法和默认方法,抽象类中可以有所有的方法。
2、接口和抽象类都不能实例化,接口需要类来实现后实例化实现类,抽象类需要类来继承然后实例化子类。
3、抽象类只能单继承,接口可以多继承接口(jdk1.7),接口还可以多实现。
4、接口中的属性是static final类型的,抽象类中的属性跟普通类中的属性没有区别。
5、接口中的方法默认就是抽象的不需要加abstract,抽象类中的抽象方法需要加abstract关键字

7.StringBuilder、String、StringBuffer之间的联系与区别。

String被final所修饰,所以它是不可变的,从它被创建直至被销毁,它的字符序列都没有改变,我们对它的一系列操作都是通过创建新的String对象来完成的
(安全性与效率)当只在单线程中使用时,选用效率更高的StringBuilder,而如果应用于多线程,应选用更安全的StringBuffer

8.写出集合框架各个类以及底层存储形式。

见博客

9.异常的处理方式。
10.多线程的实现方式。
    1、继承Thread  2、实现Runnable接口  3、线程池
11.请写单例 模式,是否存在线程安全问题?如存在,如何解决。
  1、私有的属性   这个属性是当前类(外部不能来访问这个属性)
  2、私有的构造   不让外部来实例化这个类,使用私有的构造
  3、公有的方法   提供一个对外的方法,让别人进行访问
  使用双重锁方式
12.网络编程的三个要素,分别简述。

(1)IP地址:网络中每一台计算机的唯一标识,通过IP地址找到指定的计算机。

(2)端口:用于标识进程的逻辑地址,通过端口找到指定进程。

(3)协议:定义通信规则,符合协议则可以通信,不符合不能通信。

13.请简述对反射的理解。

java提供动态的运行机制,这个机制也能称之为反射机制
在程序运行期间,对于任意一个类,都能知道这个类所有的属性
和方法(公开的私有的都可以获取到),且可以通过反射机制调用该类中所有的方法,访问所有属性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值