[知了堂学习笔记]面试题整理_04

1.说说对java EE的理解

Java EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。
Java EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EJB,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。

2.java EE包含的技术

java EE 有13中核心技术,包含JDBC、JNDI、EJB、RMI、java IDL/CORBA、JSP、java Servlet、XML、JMS、JTA、JTS、javaMail、JAF技术,其中在我做过的项目中,我接触过JDBC、JSP、Servlet、XML等技术。
1、JDBC(Java Database Connectivity)   JDBC API为访问不同的数据库提供了一种统一的途径,像ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。
2、JNDI(Java Name and Directory Interface)   JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。
3、EJB(Enterprise JavaBean)   JAVA EE技术之所以赢得广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现JAVA EE的唯一途径。正是由于JAVA EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。
4、RMI(Remote Method Invoke)   正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。
5、Java IDL/CORBA   在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。
6、JSP(Java Server Pages)   JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
7、Java Servlet   Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
8、XML(Extensible Markup Language)   XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。 XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。
9、JMS(Java Message Service)   JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另 一种方式来对您的应用与旧的后台系统相集成。
10、JTA(Java Transaction Architecture)   JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。
11、JTS(Java Transaction Service)   JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。
12、JavaMail   JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。
13、JAF(JavaBeans Activation Framework)   JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF

3.java的体系结构

这里写图片描述

4.多态的应用场景

多态通过重写和重载两种方式体现。
重写必须满足以下条件:1.方法名、参数、返回值相同。2.子类方法不能缩小父类方法的访问权限。3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。4.存在于父类和子类之间。5.方法被定义为final不能被重写。
重载必须满足以下条件:1.参数类型、个数、顺序至少有一个不相同的方法名。3.存在于父类和子类、同类中。

5.java动态语言的理解

动态语言是指程序在运行中可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。
java也是动态语言,主要体现在反射机制,动态编译,动态执行javascript代码,动态字节码操作,动态转换类型方面。

6.接口和抽象类
这里写图片描述

7.集合框架
http://blog.csdn.net/wunian_930124/article/details/60954706

8.谈谈对同步的理解

a)线程同步的方式包括:互斥锁、读写锁、条件变量、信号量和令牌。
b)互斥锁和读写锁:提供对临界资源的保护,当多线程试图访问临界资源时,都必须通过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源)当读写线程获取锁的频率差别不大时,一般采用互斥锁,如果读线程访问临界资源的频率大于写线程,这个时候采用读写锁较为合适,读写锁允许多个读线程同时访问临界资源,读写线程必须互斥访问临界资源。读写锁的实现采用了互斥锁,所以在读写次数差不多的情况下采用读写锁性能没有直接采用互斥锁来的高。
c)条件变量:提供线程之间的一种通知机制,当某一条件满足时,线程A可以通知阻塞在条件变量上的线程B,B所期望的条件已经满足,可以解除在条件变量上的阻塞操作,继续做其他事情。
d)信号量:提供对临界资源的安全分配。如果存在多份临界资源,在多个线程争抢临界资源的情况下,向线程提供安全分配临界资源的方法。如果临界资源的数量为1,将退化为锁。
e)令牌:一种高级的线程同步的方法。它既提供锁的安全访问临界资源的功能,又利用了条件变量使得线程争夺临界资源时是有序的。
f)概念
i.就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。
ii.在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性

9.说说设计模式

10.JDBC和ORM框架的区别

a)JDBC
i.JDBC操作步骤
1.使用JDBC编程需要连接数据库,注册驱动和数据库信息
2.操作Connection,打开 Statement 对象 。
3.通过Statement执行SQL, 返回结果到ResultSet对象。
4.使用ResultSet读取数据,然后通过代码转化为具体的POJO对象。
5.关闭数据库的相关资源。
ii.JDBC的缺点
1.工作量相对较大。我们需要先连接,然后处理JDBC底层事务,处理数据类型。我们还需要操作Connection对象、Statement对象和ResultSet对象去拿到数据,并准确的关闭它们
2.我们要对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。
b)ORM
i.ORM模型
1.ORM模型就是数据库的表和简单Java对象(Plain Ordinary Java Object,简称POJO)的映射关系模型。
ii.ORM模型的作用
1.它主要解决数据库数据和POJO对象的相互映射。我们通过这层映射就可以简单的把数据库表的数据转化为POJO。以便程序员更加容易的理解和应用Java程序.而且程序员一般只需要了解Java应用而无需对数据库进行深入的了解。此外,ORM模型提供了统一的规则使得数据库的数据通过配置便可轻易的映射到POJO上。
c)Hibernate
i.优点
1.消除了代码的映射规则,它全部被分离到XML或者注解里面去配置。
2.无需再管理数据库连接,它也配置到XML里面。
3.一个会话中,不要操作多个对象,只要操作Sesison即可。
4.关闭资源只需要关闭一个Session即可。
ii.缺点
1.全表映射带来的不便,比如更新时需要发送所有的字段。
2.无法根据不同的条件组装不同的SQL。 
3.对多表关联和复杂的SQL查询支持较差。需要自己写SQL,返回后,需要自己将数据组装到POJO中。
4.不能有效支持存储过程。
5.虽然有HQL,但是性能较差,大型互联网往往需要优化SQL,而Hibernate做不到。
d)Mybatis
是为了解决Hibernate的不足。一个关自动映射的框架MyBatis应运而生。之所以称之为半自动。是国为它需要手动匹配提供POJO、SQL和映射关系。而全表的Hibernate只需要提供POJO和映射关系即可。
i.优点:
1.易于上手和掌握。
2.sql写在xml里,便于统一管理和优化。
3.解除sql与程序代码的耦合。
4.提供映射标签,支持对象与数据库的orm字段关系映射
5.提供对象关系映射标签,支持对象关系组建维护
6.提供xml标签,支持编写动态sql。
ii.缺点:
1.sql工作量很大,尤其是字段多、关联表多时,更是如此。
2.sql依赖于数据库,导致数据库移植性差。
3.由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
4.字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)
5.DAO层过于简单,对象组装的工作量较大。
6.不支持级联更新、级联删除。
7.编写动态sql时,不方便调试,尤其逻辑复杂时。
8.提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。
9.若不查询主键字段,容易造成查询出的对象有“覆盖”现象。
10.参数的数据类型支持不完善。(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)
11.多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)
12.缓存使用不当,容易产生脏数据。

11.说说对servlet 多线程单实例的理解

a)处理原理
i.servlet中的init方法只有在启动(例如web容器启动,要看loadOnStartup的设置)的时候调用,也就是只初始化一次,这就是单实例。
ii.servlet在处理请求的时候 调用的是service方法,这个方法可以处理多个客户端的请求。
b)注意
i.JSP 在web容器中”翻译成servlet”由容器执行,web 容器本身就是提供的多线程,A,B,C 3个访问,建立3个独立的线程组,然后运行一个servlet。依次执行。
ii.这就解决了多用户同一实例实行的困惑。
iii.要注意几点:
1:servlet首先不是现成线程的。
2:Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。Servlet容器会自动使用线程池等技术来支持系统的运行
3:设定jsp:<%@ page isThreadSafe=”false”%>来实现单线程。

12.jsp的运行原理

13.说说对物理分页的理解

a)好处是效率高,不好的地方就是不同数据库有不同的搞法。
b)mysql的limit
c)分页:mysql,sqlserver,oracle的分页语句
假设页数为pageNum,每页显示的记录数为pageSize;
d)MySQL的分页语句最简单:
i.select * from table_name limit (pageNum-1)*pageSize,pageNum*pageSize;
e)SQLServer的分页:
i.select top pageSize * from tabe_name where id not in (selec top (pageNum-1)*pageSize id from table_name);
ii.其中的id必须保证在表中的值是唯一的,如果一个字段做不到,可以用多个字段联合起来,就跟联合主键类似。例如,我可以把id换成name,class两个字段,则语句改为
1.select top pageSize * from tabe_name where name,class not in (selec top (pageNum-1)*pageSize name,class from table_name);
f)Oracle的分页:
i.//pageNum:当前页,pageSize:一页的记录数
ii.select *
iii.from(select t.*,rownum rn
iv.from (select * from tb_users) t) where rn > (pageNum-1)*pageSize and rn <= pageNum*pageSize;
1.注意:rownum分页时必须重新命名。

14.springMVC运行机制
这里写图片描述

15.spring 事务

a)概念
i.事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。
1.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
2.一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
3.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
4.持 久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
ii.通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
iii.实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。
b)需要事务的理由
i.事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。
c)事务的类型
i.Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
d)JDBC
i.JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。
ii.使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
e)JTA
i.JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。

16.spingmvc的运行原理
这里写图片描述


请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值