Java面试进阶部分集合

框架基础

反射:反射是Java开发的一类动态相关机制。因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念。

怎么表达反射?

能用反射做什么?

PS:某面试题:Java中创建实例化对象有哪些方式?

①最常见的创建对象方法,使用new语句创建一个对象。

②通过工厂方法返回对象,例:String s =String.valueOf()。(工厂方法涉及到框架)

③动用反射机制创建实例化对象,Class类的三种方法或者通过类类型的newInstance()实例方法。

④调用对象的clone()方法。(俗称克隆方法)

⑤通过I/O留的反序列化手段,调用ObjectInputStream对象的readObject()方法。

注解:日常开发中,注解的使用简化了不少代码,同时也减少了程序员的日常工作量。

Java注解可以细分为JDK注解和第三方注解。其具体使用方法,下次有机会再说。

ORM

认识Hibernate和Mybatis之前,必然要先了解一下什么是ORM?

ORM是三个单词的缩写:Object/Relationship Mapping。翻译过来就是“对象/关系映射”。

为什么要有ORM?

在用面向对象思想编写应用程序的时候,最终都是把对象的信息保存在关系型数据库中,这样我们就需要编写很多与底层数据库相关的SQL语句。显然这样是很不便捷的,ORM框架技术就可以解决这些繁琐的问题。

ORM存在的意义?

彻底抛弃书写SQL语句的思想,完全使用面向对象的思想开发。

为什么要抛弃程序中书写SQL语句的思想?

①不同的数据库使用的SQL语法不同,例:同样一段SQL脚本,能在T-SQL中运行,但不一定能保证可以在PL-SQL中运行。

②同样的功能在不同的数据库有不同的实现方式,例:分页SQL。

③程序过分依赖SQL,对程序的移植、扩展和维护带来很大的麻烦。

Hibernate框架

Hibernate是Java领域内的一款开源的ORM框架技术。

Hibernate的机制原理:

①Hibernate对JDBC进行非常轻量级的封装。

(从本质上而言,最终Hibernate还是通过JDBC来进行对数据库的操作,只不过在JDBC的基础上进行了一定的封装)

②与EBJ(本身是JavaEE的规范,重量级的ORM框架技术)不同,Hibernate属于轻量级的ORM框架技术。

③Hibernate介于数据库层和业务逻辑层之间,起到持久化层的作用。

HQL数据查询基础

检索对象——from子句

选择——select子句

限制——where子句

排序——order by子句

HQL和SQL语句不同,HQL中from子句是必须的,可以没有select子句。

Hibernate的常用属性:

cascade:设置级联关系。

inverse:设置由哪一方维护关联关系。

例:下面的这段代码集合了常用属性以及表与表之间的多对一和一对多关系。

<hibernate-mapping>

<class name="" table="">

<id name="id" type="java.lang.Long">

<column name="ID" />

<generator class="increment" />

</id>

<many-to-one name="" class=""

fetch="">

<column name="" />

</many-to-one>

......

<set name="" inverse="true"  cascade="all" lazy="false">

<key>

<column name="" />

</key>

<one-to-many class="" />

</set>

</class>

</hibernate-mapping>

Struts2框架

Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。

http://www.jianshu.com/p/46f870043522

Struts2动态方法的调用:

例:

①指定method属性的方法。

<action name="" method="" class="">

<result>/index.jsp</result>

</action>

②感叹号的方式。

<action name="" class="">

<result>/index.jsp</result>

</action>

<constant name="structs.enable.DynamicMethodInvocation" value="true"></constant>

③通配符的方式。

<action name="_*" method="{1}" class="">

<result>/index.jsp</result>

<result>/{1}.jsp</result>

</action>

在使用通配符方式的时候,如果要使用多个method的话,可以再在method="{1}{2}..."里面这样添加,同时需要修改name=""里面的名字+后缀_*_*...,还要配置所需要的<result>/{}.jsp</result>标签

Struts2访问servlet api:

Struts2拦截器工作原理:

思路:

当Struts在执行一个action的时候,会在action执行之前去执行一些拦截器,如果有多个拦截器会依次进行执行。

①首先执行拦截器一,执行拦截器一的处理方法并做一些处理操作。

②如果还有其它的拦截器,将执行拦截器二、拦截器三…进行拦截。

③当所有的拦截器都执行之后,将执行action操作,并调用action中的业务处理方法进行业务的处理。

④调用完之后,会返回一个字符串结果,也就是Result结果集。然后进行视图的匹配。

⑤再将前面执行的拦截器进行反向的再执行一次,最终响应到客户端。

Spring框架

Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架和开源框架。

Spring框架的好处:

①从大小和开销两个方面而言Spring都是轻量级的。

②通过控制反转的技术达到松耦合的目的。

③提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑和系统级服务进行内聚性的开发。

④包含并管理应用对象的配置和生命周期,从这个意义上讲它是一种容器。

⑤将简单的组件配置、组合成为复杂的应用,从这个意义上讲它是一种框架。

什么是Spring的IOC?

思路:

①当业务的对象进入了Spring的容器。

(Your Business Objects)→(The Spring Container)

②然后通过配置的原数据来生产出符合系统需要的对象。

(Configuration Metadata)→(The Spring Container)→(Fully Configured system)

③当要使用这些对象的时候去Spring容器里面直接拿出来用就可以了。

什么是Spring的AOP?

AOP:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

主要功能有:日志记录、性能统计、安全控制、事务处理、异常处理等。

注:

预编译方式:AspectJ。

动态代理方式:JDK动态代理和CGLib动态代理。(也就是SpringAOP和JbossAOP)

Spring的AOP用途:

①提供了声明式的的企业服务,特别是EJB的替代服务的声明。

②允许用户定义自己的方法,以完成OOP和AOP的互补使用。

Spring的事务管理

Spring的事务管理高层抽象主要包括3个接口:

TransactionDefinition定义事务传播行为(7种):

Spring MVC框架

Spring MVC是一种前端控制器的实现形式,它的基本概念分为静态概念 和 动态概念。

静态概念:如图下示。DispatcherServlet就是Spring MVC的前端控制器。

思路:

①当浏览器端用户的请求通过DispatcherServlet进行了分发,到达Cotroller层。

②到达Cotroller层之后,便生产出我们所需要的业务数据Model。

③然后Model层再通过DispatcherServlet进行传递给我们的View层。

④最后完成了最终的页面呈现。

总结:MVC将业务逻辑和页面实现了分离,其核心就是通过DispatcherServlet实现的。

动态概念:如图下示。

思路:

①当浏览器的请求Request到达DispatcherServlet。(因为DispatcherServlet也是一个Servlet,所有的Request能够被它拦截到)

②然后DispatcherServlet会搜索寻找到一个Mapping,也就是HandlerMaping,并将其功能代理给了HandlerMaping。

③然后HandlerMaping根据本身的配置,找到需要用到的Controller和HandlerInterceptor。

④然后把Controller和HandlerInterceptor制成一个可执行的链条,也就是Handler/HandlerAdapter的适配器。

⑤Handler/HandlerAdapter的适配器将信息返回给了DispatcherServlet,DispatcherServlet便开始调用这个一般化的处理器Handler/HandlerAdapter。

⑥Controller的目的就是生成ModelAndView模型,并且返还给DispatcherServlet。

⑦DispatcherServlet是不会管理视图显示的,所以它就调用ViewResolver视图解析器并通过该方法返回到View对象。(ViewResolver的作用是告诉DispatcherServlet哪个视图是用来解析当前这种场景的)

⑧然后ModelAndView将模型数据传递到View,完成了页面呈现。

Spring MVC拦截器工作流程:

 

 

Mybatis框架

Mybatis和Hibernate一样,是一款开源的ORM框架的技术。

Mybatis的机制原理:

①Mybatis支持普通的SQL查询、存储过程和高级映射的持久层框架。

②Mybatis将大量的SQL语句从程序里面剖离出来,配置在配置文件中,实现SQL的灵活配置。

OGNL表达式:

Mybatis框架和Hibernate框架比较:

①“全自动化”的Hibernate对数据库结构提供了完整的封装和全套映射机制。

②“半自动化”的Mybatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象。

③Hibernate会自动生成SQL语句,而MyBatis不会在运行期间自动生成SQL语句执行。

四、工具篇

JUnit单元测试

JUnit是一套基于测试驱动开发的测试框架。

注:

JUnit4不需要继承junit.framework.TestCase类。

JUnit3中所有的方法都必须使用@Test注解,并且需要在方法名前加test作为前缀,需要继承junit.framework.TestCase类。

版本管理工具SVN

SVN是一个开放源代码的版本控制系统。

举个例子:

①个人的代码→口袋里的钱

②版本控制工具中的代码→卡里的钱

③版本控制工具中的客户端→卡

④版本控制工具中的服务端→刷卡机

注:在实际版本管理当中,你所写的代码,需要提交给服务端,然后别人要修改你的代码,就会从服务端更新当前目录下的代码,再进行修改和提交。所以,“卡里的钱”可以理解为团队公有的代码体系。

项目管理工具maven

maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

注:

maven也是一套强大的自动化的管理工具,覆盖了编译、测试、运行、清理、打包和部署,整个项目构建的周期。

它还提供了一个仓库的概念,统一的帮助开发人员管理项目所依赖的第三方的架包,最大可能的避免环境配置不同所产生的问题(在你的电脑上能运行,在我的电脑上就不能运行)。

原文地址:https://www.cnblogs.com/qlqwjy/p/8463151.html

时间: 2024-10-30 13:57:13

Java面试进阶部分集合的相关文章

Java面试准备之集合框架

集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序).可重复 有序的 collection,可以对列表中每个元素的插入位置进行精确地控制.可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素.可存放重复元素,元素存取是有序的. List接口中常用类: ?Vector:线程安全,但速度慢,已被ArrayList替代.底层数据结构是数组结构 ?Ar

Java面试必问之---HashMap

本文有些长,贴的源码较多,请各位看官自备花生瓜子啤酒饮料矿泉水小板凳,且听我慢慢道来. Java面试都会问集合,集合必问HashMap,CurrentHashMap,后面的套路就肯定会问多线程.线程安全等等,今天就来学习下HashMap,不对,是补习下. 1.HasMap的属性 先看下HashMap的继承体系,它继承自抽象类AbstractMap,实现了Map.Cloneable.Serializable接口,还有较常用的子类LinkedHashMap也实现了Map接口. public clas

【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)

[JAVA秒会技术之秒杀面试官]秒杀Java面试官--集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/article/category/6876287

《Java面试全解析》1000道面试题大全详解(转)

<Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃了阿里钉钉团队的 offer 回到了西安. 从 2015 年四月开始在一家上市公司担任研发经理的职位,至今也快 5 年了,一路上见了很多也面试了很多人技术人,大部分面试的结果很令我沮丧,这也是我出这本书的原因之一,帮助更多的人搞懂技术最核心的知识. 为了写好这个专栏内容,我先后拜访了一二十家互联网公司,与不同

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

java 面试 -- 4

Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大).本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应

Java 面试-- 1

JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能.不管你是面试各个级别的JAVA工程师.架构师.还是项目经理,这个系列文章都是你最宝贵的资

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或