JAVA初级工程师面试36问(三)

JAVA初级工程师面试36问(三)_第1张图片

第十三问: 描述一下JVM加载class文件的原理机制?

 

   JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件.

 

第十四问: 谈谈你对抽象类和接口的异同点?

 

      1.抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。

       2.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。

       3.接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。

       4.抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

 

第十五问: try{}catch{}finally{}在try里面假如存在return语句,那finally{}里的代码会不会被执行.如何执行?

 

       会执行,但是是在方法返回调用者前执行。不过实际中 在finally中改变返回值的做法是很少你的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值.

 

第十六问: 谈谈sleep()方法wait()方法,它们有什么区别?

 

       1.sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复。

        2.wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。(记住这个主要考察sleep 不会放弃锁,  wait是放弃锁)

 

第十七问: 事务的ACID是指什么?


1.原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
2.一致性(Consistent):事务结束后系统状态是一致的;
3.隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;
4. 持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。

 

第十八问: 请简单说明下转发(forward)和重定向(redirect)的区别? 

 

       主要记住(forward地址栏不会发生变化,是服务器自己内部调用资源给你,  redirect地址栏会发生变化,是客户端请求了两次服务器,这个一般答出来就ok 了   其它的就是自己添加描述语言了 )


     1.forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

      2. redirect是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,但是可以从一个网站redirect到其他网站。

forward更加高效,所以在满足需要时尽量使用forward(通过调用RequestDispatcher对象的forward()方法,该对象可以通过ServletRequest对象的getRequestDispatcher()方法获得),并且这样也有助于隐藏实际的链接;在有些情况下,比如需要访问一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect()方法实现)。

 

 (温馨提示:很多问题问的只要回答出最核心问题就行,面试官一般会从你回答的众多内容中去获取他要知道的 其它的描述性语言就是自己组装了,要了就是显得更实际,不那么官方,不要,当然也没有关系,不过尽量在回答问题时候不要太官方,不然显得跟个背答案一样.)

   

未完待续.....

 

你可能感兴趣的:(java基础工程师面试三十六问)