你的位置:首页 > Java教程

[Java教程]java面试第三弹


1、两电脑都在同一个网络环境中,A 电脑访问不到 B 电脑的共享文件。此现象可能是哪些方面所导致?怎样处理?

    首先要确定是否在同一个工作组内,然后看看是否有防火墙之类的,最后确定文件是否已经共享

2.事务如何使用?写个Demo实现在一个事物中,新增和更新同时操作?

  beginTrans 用于开启一个事务,RollbackTrans用于回滚事务,CommitTrans用于提交所有事务处理结果,即确认事务处理。

    dome:

create database aaa --创建一个数据库gouse aaa  --选择aaa这个数据库create table bbb(  ID int not null primary key, --账户  moneys money --转账金额)用这个表创建一个存储过程:create procedure mon -- 创建存储过程,定义几个变量@toId int, --接收转账的账户@fromId int, --转出自己的账户@momeys money --转出的金额asbegin tran --开始执行事务update bb set moneys=moneys-@momeys where ID=@fromID -执行的第一个操作,转账出钱,减去转出的金额update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的金额,增加if @@error<>0 --判断如果两条语句有任何一条出现错误begin rollback tran –开始执行事务的回滚,恢复的转账开始之前状态return 0endgoelse  --如何两条都执行成功begin commit tran 执行这个事务的操作return 1endgo

  oracle默认在执行语句时就开启一个事务的,所以只需要rollback或commit就行了。

  3.字节流与字符流的区别

     字节流是最基本的,字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

     字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串。

  4.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

     序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作。

     将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

  Serializable接口的作用:标注该对象是可被序列化的

   5.描述一下JVM加载class文件的原理机制? 

    JVM(java虚拟机)中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

   6.heap和stack有什么区别。

      heap是堆,stack是栈

      stack的空间是由操作系统自动分配和释放的,heap的空间是手动申请和释放的, heap常用new关键词来分配。

      stack空间有限,heap的空间是很大的自由区

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

       GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

    8.垃圾回收的优点和原理。并考虑2种回收机制。

       垃圾回收使Java程序员在编写程序的时候不再需要考虑内存管理。因为有垃圾回收的机制,java中的对象不会再有“作用域”的概念。

       垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存

       垃圾回收通常是一个单独低级别的线程

       回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收      (回答这四个就应该够HR喝一壶了。)

     9.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

    当程序员创建对象时,GC(垃圾回收器)就开始监控这个对象的地址、大小以及使用情况。

    GC采用有向图的方式记录和管理堆(heap)中的所有对象

    可以。

        程序员可以手动执行System.gc();通知GC运行,但是根据java语言规范并不保证GC一定会执行

      10.什么时候用assert。

     assertion(断言),是在软件开发过程中常用的调试方式。很多语言都是支持这种机制

         它是程序中的一条语句,对一个boolean进行检查。

    一个正确程序必须保证这个boolean表达式值是true;如果该值是false,说明程序已经处于不正确状态下。系统将给处警告或者退出

         assertion的检查通常是关闭的。

   dome:

package com.huawei.interview;public class AssertTest {	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub		int i = 0;		for(i=0;i<5;i++) {			System.out.println(i);		}		//假设程序不小心多了一句--i;		--i;		assert i==5;	}}

 

  

 

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

           会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误

  12.能不能自己写个类,也叫java.lang.String?

          可以但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String。

  13.Spring AOP 的原理。

    Aop(Aspect Oriented Programming),也就是面向方面编程技术,aop基于ioc的基础。是对oop的有益补充。

    AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。

  14.Spring怎么实现控制翻转(原理)

 依赖注入让 Spring 的 Bean 以被指文件组织在一起,而不是以硬编码的方式耦合在一起。程序完成无须理会被调用者的实现,也不无须主动定位工  厂,这是最好的解耦方式。实例之间的依赖关系由 IoC 容器负责管理。

15.Scope的作用域

  默认是单例模式,即scope="singleton"。另外scope还有prototype、request、session、global session作用域。

 scope="prototype"多例。再配置bean的作用域时,它的头文件形式如下:

<bean id="role" scope="singleton"/>

 

   16.一个项目加载缓慢,spring怎么解决问题。

   1.扫描注解Bean

    写比较精确的扫描路径,

   2.延迟加载你的bean

    常见的方式是在配置文件中在<beans>上加:default-lazy-init="true" 

   3.删除无用属性

   4.项目分模块开发