刚在51JOB网站上看到这些题目 说先把这些题目放在简历上才有效
请论坛的各路牛人指点一二,保证人人有分1.接口和抽象类的区别,如果想让一个类实现多重继承,能实现吗?
2.谈谈对数据库事务的理解?
3.xml有哪些解析技术?区别是什么?
4.如何修改tomcat启动内存参数?
5.软件系统常使用分层架构,请简单说明一下你对分层架构的理解?为了混口饭吃,先谢谢各位了,还有面试的时候要注意些什么啊?

解决方案 »

  1.   

    1.java中一个类可以实现多个接口只能继承一个类。 java中是不能实现多重继承的。
    2.对数据的原子性。
    3.有DOM,SAX,STAX等
    DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问  SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 STAX: STAX:Streaming API for XML (StAX) 
    4.修改tomcat下bin/Catalina.bat文件 
    5.个人理解:分层(mvc)这样更好的团队合作,各司其责,更容易维护和扩展。
      

  2.   

      LS的说的差不多
        这些都是比较基本的,你到网上下载java面试题都会有的。
      

  3.   

    软件系统常使用分层架构,请简单说明一下你对分层架构的理解? 
    我自己认为:(MVC)为了各层的只负责自己的功能,没有其它的代码,如:表现层只显示的代码,而没有业务实现的代码...这样便于维护,也让客户不知道你的底层是怎样做的...
      

  4.   

    2脏读 dirty   reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction   1   修改了一行数据,然后   Transaction   2   在   Transaction   1   还未提交修改操作之前读取了被修改的行。如果   Transaction   1   回滚了修改操作,那么   Transaction   2   读取的数据就可以看作是从未存在过的。     
      不可重复的读 non-repeatable   reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction   1   读取一行数据,然后   Transaction   2   修改或删除该行并提交修改操作。当   Transaction   1   试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。     
      虚读 phantom   read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction   1   读取满足某种搜索条件的一些行,然后   Transaction   2   插入了符合   Transaction   1   的搜索条件的一个新行。如果   Transaction   1   重新执行产生原来那些行的查询,就会得到不同的行。
    事务场景是这样的:
    对于同一个银行帐户A内有200元,甲进行提款操作100元,乙进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题:
    1、第一类丢失更新:首先甲提款时帐户内有200元,同时乙转帐也是200元,然后甲乙同时操作,甲操作成功取走100元,乙操作失败回滚,帐户内最终为200元,这样甲的操作被覆盖掉了,银行损失100元。
    2、脏读:甲取款100元未提交,乙进行转帐查到帐户内剩有100元,这是甲放弃操作回滚,乙正常操作提交,帐户内最终为0元,乙读取了甲的脏数据,客户损失100元。
    3、虚读:和脏读类似,是针对于插入操作过程中的读取问题,如丙存款100元未提交,这时银行做报表进行统计查询帐户为200元,然后丙提交了,这时银行再统计发现帐户为300元了,无法判断到底以哪个为准?
     大家好像觉得统计这个东西肯定是时时更新的,这种情况很正常;但是如果统计是在一个事务中的时候就不正常了,比如我们的一个统计应用需要将统计结果分别输出到电脑屏幕和远程网络某台计算机的磁盘文件中,为了
     提高性能和用户响应我们分成2个线程,这时先完成的和后完成的统计数据就可能不一致,我们就不知道以哪个为准了。
    4、不可重复读:甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,这时乙在准备最后更新的时候又进行了一次查询,发现结果是100元,这时乙就会很困惑,不知道该将帐户改为100还是0。
    和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已提交的数据。
    5、第二类丢失更新:是不可重复读的一种特例,如上,乙不做第二次查询而是直接操作完成,帐户内最终为100元,甲的操作被覆盖掉了,银行损失100元。感觉和第一类丢失更新类似。在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有三种问题,归结如下:
    1、丢失更新
    如果两个事务都要更新数据库一个字段X,x=100
    事务A             事务B
    读取X=100     
                      读取X=100
    写入x=X+100
                      写入x=X+200
    事务结束x=200
                      事务结束x=300
    最后x==300
    这种情况事务A的更新就被覆盖掉了、丢失了。
    丢失更新说明事务进行数据库写操作的时候可能会出现的问题。
    2、不可重复读
    一个事务在自己没有更新数据库数据的情况,同一个查询操作执行两次或多次的结果应该是一致的;如果不一致,就说明为不可重复读。
    还是用上面的例子
    事务A             事务B
    读取X=100     
                      读取X=100
    读取X=100     
                      写入x=X+100
    读取X=200     
    事务结束x=200
                      事务结束x=200
    这种情况事务A多次读取x的结果出现了不一致,即为不可重复读。
    再有一情况就是幻影
    事务A读的时候读出了15条记录,事务B在事务A执行的过程中删除(增加)了1条,事务A再读的时候就变成了14(16)条,这种情况就叫做幻影读。
    不可重复读说明了做数据库读操作的时候可能会出现的问题。
    3、脏读(未提交读)
    防止一个事务读到另一个事务还没有提交的记录。
    如:
    事务A             事务B
                      读取X=100
                      写入x=X+100
    读取X=200     
                      事务回滚x=100
    读取X=100     
    事务结束x=100x锁 排他锁 被加锁的对象只能被持有锁的事务读取和修改,其他事务无法在该对象上加其他锁,也不能读取和修改该对象
    s锁 共享锁 被加锁的对象可以被持锁事务读取,但是不能被修改,其他事务也可以在上面再加s锁。
    封锁协议:
    一级封锁协议:
    在事务修改数据的时候加x锁,直到事务结束(提交或者回滚)释放x锁。一级封锁协议可以有效的防止丢失更新,但是不能防止脏读不可重复读的出现。
    二级封锁协议:
    在一级封锁的基础上事务读数据的时候加s锁,读取之后释放。二级封锁协议可以防止丢失更新,脏读。不能防止不可重复读。
    三级封锁协议:
    在一级封锁的基础上事务读数据的时候加s锁,直到事务结束释放。二级封锁协议可以防止丢失更新,脏读,不可重复读。