Java复习

 

  1. 1.  SSM

每个字母代表什么,每个架构充当的角色  

spring(平台 中间连接器) spingMVC(控制器) mybatis(持久层 相当于dao层)

2. springMVC工作流程

1、用户发送请求到前端控制器(DispatcherServlet)。

2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。

3、找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。

4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。

5、处理器适配器去执行Handler。

6、处理器执行完给处理器适配器返回ModelAndView。

7、处理器适配器向前端控制器返回ModelAndView。

8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。

9、视图解析器向前端控制器返回View。

10、前端控制器对视图进行渲染。

11、前端控制器向用户响应结果。

前端控制器(DisatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。

处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。

处理器(Handler):就是我们常说的controller控制器啦,由程序员编写。

处理器适配器(HandlerAdapter):可以将处理器包装成适配器,这样就可以支持多种类型的处理器。

视图解析器(ViewResovler):进行视图解析,返回view对象(常见的有JSP,FreeMark等)。

 

3.SpringMVC与struts2的区别:

①Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter。

 

②Spring MVC 会稍微比 Struts2 快些。Spring MVC 是基于方法设计, 而 Sturts2 是基于类, 每次发一次请求都会实例一个 Action。

③Spring MVC 使用更加简洁, 开发效率Spring MVC确实比struts2 高: ajax 的请求更方便。

④Struts2 的 OGNL 表达式使页面的开发效率相比Spring MVC 更高些。

扩展:OGNL

OGNL相对其它表达式语言具有下面几大优势:

1)支持对象方法调用。

2)支持类静态的方法调用和值访问。

3)支持赋值操作和表达式串联。

4)访问OGNL上下文(OGNL context)和ActionContext。

5)操作集合对象。

6)可以直接new一个对象。

扩展:OGNL语法

执行方法:对象.方法() 'abcd'.toUpperCase()

静态资源:@全限定类名  @方法|字段  @System@out.println(@Math@PI)

获得root内容:属性名

获得context内容:#key

root内容赋值:   属性名=值   username='jack‘

表达式串联:表达式1,表达式2, ...username='jack' , password='1234'

创建List集合:{ … , … , … }   {'jack','rose','tom'}

创建Map集合:#{k:v , k2:v2 , … }  #{'ds':'你猜','dzd':'再猜'}                

创建对象:new 对象()  new com.yinggu.User()

当前对象:#this

投影:表达式.{表达式}  #this.{username + password}

过滤:集合.{符号 …}

 集合.{?#this} 集合中的所有内容

 #this.{?#this.age > 18}

 集合.{^#this} 集合中的第一个内容

 集合.{$#this} 集合中的最后一个内容

4.mybatis的介绍及优点$,#

MyBatis是一个数据持久层(ORM对象关系映射)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。

MyBatis的优点:

1.基于SQL语法,简单易学。

2.能了解底层组装过程。

3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。

4.程序调试方便

5.hibernate与mybatis的对比

  MyBatis

1、是一个SQL语句映射的框架(工具)。

2、注重POJO与SQL之间的映射关系。不会为程序员在运行期自动生成 SQL。

3、自动化程度低、手工映射SQL,灵活程度高。

4、需要开发人员熟炼掌据SQL语句。

    Hibernate

1、主流的ORM框架、提供了从 POJO 到数据库表的全套映射机制。

2、会自动生成全套SQL语句。

3、因为自动化程度高、映射配置复杂,api也相对复杂,灵活性低。

4、开发人同不必关注SQL底层语句开发。

MyBatis应用场景:

         需求多变的互联网项目,例如电商项目。

Hibernate应用场景:

         需求明确、业务固定的项目,例如OA项目、ERP项目等。

6.数据库连接池机制

(1) 程序初始化时创建连接池

(2) 使用时向连接池申请可用连接

(3) 使用完毕,将连接返还给连接池

(4) 程序退出时,断开所有连接,并释放资源

7.最大最小连接池

最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.

最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作

8.Struts2核心功能:

   1)Action的实现方面,可以是一个普通的POJO。

   2)线程模型方面,Action是一个请求对应一个实例(新new一个对象),没有线程安全方面的问题。

   3) Servlet依赖方面,Action不再依赖于Servlet API,有利于测试实现TDD(Test-Driven Development,测试驱动开发)。封装请求参数,可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。

   4)表达式语言方面,整合了OGNL 。OGNL(Object Graph NavigationLanguage)对象图形导航语言。

9.Strusts2的工作原理

 

客户端初始化一个指向Servlet容器(例如Tomcat)的请求

这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;

如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;

ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;

ActionProxy创建一个ActionInvocation的实例。

ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

Struts2核心组件介绍

ActionMapper:通过method参数将请求转发到具体的action

ActionProxy代理:是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法。归根到底,最后调用的是DefaultActionInvocation.invokeAction()方法。

ActionInvocation:就是Action的调用者。ActionInvocation在Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。

Interceptor拦截器:是Struts 2的一个强有力的工具,有许多功能(feature)都是构建于它之上,如国际化、校验等。

10.Spring

核心 控制反转Ioc 面向切面AOP

好处:

l    方便解耦,简化开发  (高内聚低耦合)

Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理

     spring工厂是用于生成bean

l    AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

 

l    声明式事务的支持

     只需要通过配置就可以完成对事务的管理,而无需手动编程

l    方便程序的测试

     Spring对Junit4支持,可以通过注解方便的测试Spring程序

l    方便集成各种优秀框架

     Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

l    降低JavaEE API的使用难度

     Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

依赖注入对象可以采用手工装配或自动装配

l  手动装配

使用xml配置

构造函数注入

属性setter方法注入

l  自动装配

  byType:按类型装配 。

  byName:按名称装配。

  constructor装配。

  autodetect 不确定装配。

常用的自动装配注解有以下几种:@Autowired,@Resource,@Inject,@Qualifier,@Named。@Autowired注解是byType类型的,这个注解可以用在属性上面,setter方面上面以及构造器上面。使用这个注解时,就不需要在类中为属性添加setter方了。但是这个属性是强制性的,也就是说必须得装配上,如果没有找到合适的bean能够装配上,就会抛出异常。这时可以使用required=false来允许可以不被装配上,默认值为true。当required=true时,@Autowired要求必须装配,但是在没有bean能装配上时,就会抛出异常:NoSuchBeanDefinitionException,如果required=false时,则不会抛出异常。另一种情况是同时有多个bean是一个类型的,也会抛出这个异常。此时需要进一步明确要装配哪一个Bean,这时可以组合使用@Qualifier注解,值为Bean的名字即可。@Qualifier注解使用byName进行装配,这样可以在多个类型一样的bean中,明确使用哪一个名字的bean来进行装配。@Qualifier注解起到了缩小自动装配候选bean的范围的作用。注意:@Autowired注解是spring提供的,所以会依赖spring的包。还有一个byType的注解@Inject,与@Autowired注解作用一样,也是byType类型,而且是java ee提供的,完全可以代替@Autowired注解,但是@Inject必须是强制装配的,没有required属性,也就是不能为null,如果不存在匹配的bean,会抛出异常。@Autowired与@Qualifier可以组合

使用,@Inject也有一个组合的注解,就是@Named注解,与@Qualifier作用一样,也是byName,但是不是spring的,是java ee标准的。这样就出现了两套自动装配的注解组合,@Autowired与@Qualifier是spring提供的,@Inject与@Named是java ee的。但是@Qualifier注解在java ee中也有一样,作用与spring的@Qualifier注解一模一样,只是所在的包不一样。不过建议大家使用spring的。最后还有一个@Resouce注解, 这个注解也是java ee的,也是byName类型的,原理同@Qualifier和@Named是一样的。

 

注解:

除了@Component外,Spring提供了3个功能基本和@Component等效的注解

@Repository 用于对DAO实现类进行标注。

@Service 用于对Service实现类进行标注。      这三个注解是为了让标注类本身的用途清晰,

@Controller 用于对Controller实现类进行标注。

11.Java web

三大指令三种指令为:

page指令

include指令

taglib指令

page指令用于设置页面的各种属性,如导入包、指明输出内容类型、控制Session等。page指令一般位于JSP页面的开头部分,一个JSP页面可包含多条page指令。

include指令用于在当前JSP中包含其他文件。被包含的文件可以是JSP、HTML或文本文件。包含的过程发生在将JSP翻译成Servlet时,当前JSP和被包含的JSP会融合到一起,形成一个Servlet,然后进行编译并运行。

taglib指令用于指定JSP页面所使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签。

六大标签

Jsp中有6个动作标签:include、forward、useBean、getProperty、setProperty、plugin。

<jsp:include>标签表示包含一个静态的HTML或者动态的JSP文件。

<jsp:forward>标签表示重定向一个静态html/jsp的文件,或者是一个程序段。

<jsp:useBean>标签表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。

<jsp:setProperty>标签表示用来设置Bean中的属性值。

<jsp:getProperty>标签表示获取Bean属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。

<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件,因此有可能的话还要下载一个java插件用于执行它。

九大内置对象:

12.Servlet运行周期:

Servlet生命周期概括为以下几个阶段:

1) 装载Servlet:这项操作一般是动态执行的,有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet;

2) 创建一个Servlet实例:容器创建Servlet的一个实例对象;

3) 初始化:容器调用init()方法对Servlet实例进行初始化;

4) 服务:当容器接收到对此Servlet的请求时,将调用service()方法响应客户的请求;

5) 销毁:容器调用destroy()方法销毁Servlet实例。

13.重定向和请求转发的区别

1、请求转发只能将请求转发给同一个Web应用中的组件,而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。   范围

2、重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发访问过程结束后,浏览器地址栏保持初始的URL地址不变。  url地址栏变化

3、请求转发的调用者与被调用者之间共享相同的request对象和response对象;而重定向的调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。  对象问题

14.Servlet与jsp的区别:

1.JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类。

2.Jsp的工作原理:JSP页面在执行的时候都会被服务器端的JSP引擎转换为Servlet(.java),然后又由JSP引擎调用Java编译器,将Servelet(.java)编译为Class文件(.class),并由Java虚拟机(JVM)解释执行。

3.Servlet的应用逻辑是在Java文件中,从Java代码中动态输出HTML,并且完全和表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

15.怎么解决中文乱码

首先你在设置各种编码的时候应该设置为UTF8 设置的地方有jsp页面的字符编码,

首先页面的字符编码设置需要时utf8

客户端与服务器端的乱码可以看看是不是tomcat的编码不对,

然后还有就是你请求的时候 是否设置了字符编码

如果使用了Struts2框架,在strust.xml文件中添加如下代码

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

还有一种最保险的方法是添加自定义编码过滤器,或者使用spring自带的过滤器

在服务器获取到正确数据后,插入到数据库却出现乱码,很有可能是数据库的编码问题 

数据库安装时,创建数据库以及创建表的时候为了防止字符编码都应该将其设置为UTF8

16.AOP是做什么的

1.1.1     什么是AOP

     AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码

     经典应用:事务管理、性能监视、安全检查、缓存 、日志等

Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码

1.1.2   AOP与OOP

  1.1.3   AspectJ

AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

    AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入

17.事务

1.1  什么事事务

事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。

1.2  事务的ACID

事务必须服从ISO/IEC所制定的ACID原则。

ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)

事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。

事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

事务的持久性:表示已提交的数据在事务,如果服务器发生故障,数据的状态都应该正确。

1.3  常见的事务管理器

     DataSourceTransactionManager,jdbc开发时事务管理器,采用JdbcTemplate

     HibernateTransactionManager,hibernate开发时事务管理器,整合hibernate

1.4  api详解

TransactionStatus getTransaction(TransactionDefinition definition) ,事务管理器 通过“事务详情”,获得“事务状态”,从而管理事务。

void commit(TransactionStatus status)  根据状态提交

void rollback(TransactionStatus status) 根据状态回滚

 

 

18.web.Xml可以干嘛

过滤器 监听器 加载spring的文件配置 servlet配置 

19.jquery中$.get()提交和$.post()提交有区别吗?

相同点:都是异步请求的方式来获取服务端的数据;

异同点:

1、请求方式不同:$.get()?方法使用GET方法来进行异步请求的。$.post()?方法使用POST方法来进行异步请求的。

2、参数传递方式不同:get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器的,这种传递是对用户不可见的。

3、数据传输大小不同:get方式传输的数据大小不能超过2KB?而POST要大的多

4、安全问题:GET方式请求的数据会被浏览器缓存起来,因此有安全问题。

20、写出一个简单的$.ajax()的请求方式?

$.ajax({

    url:'http://www.baidu.com',

    type:'POST',

    data:data,

    cache:true,

    headers:{},

    beforeSend:function(){},

    success:function(){},

    error:function(){},

    complete:function(){}              请求完成后回调函数 (请求成功或失败之后均调用)。

})

21.Ajax的优缺点及工作原理?

1.1  定义和用法:

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。Ajax 是一种用于创建快速动态网页的技术。Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

1.2  优点:

1.减轻服务器的负担,按需取数据,最大程度的减少冗余请求

2.局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验

3.基于xml标准化,并被广泛支持,不需安装插件等,进一步促进页面和数据的分离

1.3  缺点:

1.AJAX大量的使用了javascript和ajax引擎,这些取决于浏览器的支持.在编写的时候考虑对浏览器的兼容性.

2.AJAX只是局部刷新,所以页面的后退按钮是没有用的.

3.对流媒体还有移动设备的支持不是太好等

1.4  AJAX的工作原理:

1.创建ajax对象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))

2.判断数据传输方式(GET/POST)

3.打开链接 open()

4.发送 send()

5.当ajax对象完成第四步(onreadystatechange)数据接收完成,判断http响应状态(status)200-300之间或者304(缓存)执行回调函数

22.Web

1.1  HTML5 中的一些有趣的新特性:

用于绘画的 canvas 元素

用于媒介回放的 video 和 audio 元素

对本地离线存储的更好的支持

新的特殊内容元素,比如 article、footer、header、nav、section

新的表单控件,比如 calendar、date、time、email、url、search

 

1.2  浏览器支持

最新版本的 Safari、Chrome、Firefox 以及 Opera 支持某些 HTML5 特性。Internet Explorer 9 将支持某些 HTML5 特性。

1.3  什么是Bootstrap

Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目       网址:http://www.bootcss.com/

1.4Bootstrap优点

Bootstrap 让前端开发更快速、简单。所有开发者都能快速上手、所有设备都可以适配、所有项目都适用    Bootstrap 是完全开源的。它的代码托管、开发、维护都依赖 GitHub 平台

 

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

1.5  js的几种方式

Indexof()

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 

substring()

substring(start,stop) 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。

 

mouseenter 事件在鼠标指针进入 div 元素时触发,唯一的区别是 onmouseenter 事件不支持冒泡。
onmouseover 事件在鼠标指针进入 div 元素时触发 ,在子元素上也会触发(p 和 span)。

 

八大数据类型

基本数据类型包括byte、int、char、long、float、double、boolean和short。

 

Break  continue

break再循环中的作用是 跳出一个循环或者结束一个循环

continue立即结束本次循环,继续执行下一次循环

 

==与equals区别

==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样。换句话说:基本类型比较用==,比较的是他们的值。默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。

 

静态变量 实例变量的区别

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

 

Integer与int区别

1、Integer是int的包装类,int则是java的一种基本数据类型

2、Integer变量必须实例化后才能使用,而int变量不需要

3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值

4、Integer的默认值是null,int的默认值是0

5. 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法

 

Math.RoundMath.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

将括号内的数+0.5之后,向下取值,

OverloadOverride的区别。(多态的体现)

Overload是重载,同一方法内,是有相同的方法名,但参数类型或个数彼此不同

Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法

 

面向对象的特征有哪些方面  封装、继承、多态

封装就是把对象的属性方法结合在一起,并尽可能隐蔽对象的内部细节,形成不可分割的独立单元

继承是软件重用的一种形式,他通过吸收现有类的数据与方法,并增加新功能或者修改现有功能来创建新类。

多态是指父类中定义的属性或方法被子类继承之后,可以具有不同的表现方式

 

List map set

list和set都是单列集合,他们有一个共同的父接口---collection。list是依次列出一个结合中的所有的元素,若集合中有重复的,同样列出,有序;set列出的集合中是不允许有重复的,也就是说里面有一个A对象和一个B对象,若是A.equals(B)==ture,那么用set方法列出的只会有一个,set集合默认是有序的,正向排序。一般遍历set里面的元素时使用iterator

map<key,value> 它是一个双列的集合。里面有一个key,和一个value,其中value是真正存储值得变量。map存储的数据是无序的,其键(key)不能重复,但是其值(value)是可以重复的。

 

Collection Collections的区别。

Collection是集合类的上级接口,继承与他的接口主要有Set和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

冒泡 插入 选择 二分

 

  

JDBC步骤

1. 加载数据库驱动

2. 创建数据库连接

3. 创建PreparedStatement对象

4. 编写并且运行sql语句

5. 处理结果 返回结果集

6. 关闭释放资源

Statement Preparestatement区别

PreparedStatement接口是Statement接口的子接口,它继承了Statement的所有功能。

PrepardStatement接口有两大特点:

执行速度要快于Statement对象

SQL语句中提供参数,提高程序的灵活性和执行效率

PreparedStatement 是只编译一次,多次运行   可以防止sql注入

Statement 是每次执行,每次都重新编译

 

map常用的方法

Map集合:该集合存储键(K)值(V)对,一对一往里存,而且要保证键的唯一性。

    1、添加

        put(K key,V value)

        putAll(Map<? extends K,? extends V> m)

    2、删除

        clear()

        remove(Object key)

    3、判断

        containsValue(Object value)

        containsKey(Object key)

        isEmpty()

    4、获取

        get(Object key)

        size()

        values()

hqlsql

1、首先,hql是面向对象查询的;sql是面向数据库做查询。

2、hql的语法结构:from  + 类名+类对象 +where+类对象属性的条件;

      sql的语法结构:from  +数据库表名+ where +表字段条件

3、新增:hql不需要再用insert语句,只需构造新增对象后调用save()方法

4、修改:hql不需要再用update语句,只需得到修改对象后调用update()方法

5、删除:hql不需要再用delete语句,只需得到要删除的对象后调用delete()方法

mysql递归  插件  包名 分页

oracle 11g  spring4.0  struts  2.3.5  hibernate3.0

 

关键字Exists与in的区别

 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

内连接   (inner join)

select *  from table1 innerjoin tbale2 on table1.id=table2.id;显示内连接

Select * from 表1,表2 where 表2.列名= 表1.列名;      隐似内连接

这条sql语句返回结果   两个表都存在的数据

 

左连接   (left join)

select *  from table1 left join tbale2 on table1.id=table2.id

这条sql语句返回结果   table1表中的数据全部返回   table2表中的数据只返回满足where条件的

 

右链接   (right join)

select * from table1 right join table2 on table1.id=table2.id

这条sql语句返回结果   table2表中的数据全部返回    table1表中的数据只返回满足where条件的

 

union和union all,destinct

union 将两个表连接后删除其重复的项。

union all 将两个表连接都不删除其重复的项。

distinct 表示不显示重复的查询

 

分页语句:

mysql方案:select * from t order by id limit 10,30

oracle分页:30

select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow

 

2 .数据操纵语言DML
数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE

3.
数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
表 视图 索引 同义词 簇

DDL操作是隐性提交的!不能rollback 

Get post

1 、get请求 请求参数会显示在地址栏中  不安全

       post请求 地址栏只显示请求资源的url 不显示请求参数 相对安全

2  、get请求 请求参数存放在请求首行中  http对请求首行限制1kb

       post请求  请求参数存放在请求体中  请求体没有大小限制

      post可以发送大数据

3、 get请求的参数不能通过request.setCharacterEncoding("gbk")来设置编码

      request.setCharacterEncoding("gbk")只能设置请求体的编码集

==========================================================================

递归读取文件夹的文件

 

 

补充:

使用Hibernate的基本流程是

配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。

 

AOP的作用。

将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

面向切面编程(AOP)就是对软件系统不同关注点的分离,开发者通过拦截方法调用并在方法调用前后添加辅助代码。

 

Ioc通俗易懂详解:

https://blog.csdn.net/liunianqingshi/article/details/78144489

 

abstract class和interface有什么区别?

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

 

事务:

spring支持编程式事务管理和声明式事务管理两种方式。

编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

 

 

说明一个Bean的生命周期活动

  • Bean的建立, 由BeanFactory读取Bean定义文件,并生成各个实例
  • Setter注入,执行Bean的属性依赖注入
  • BeanNameAware的setBeanName(), 如果实现该接口,则执行其setBeanName方法
  • BeanFactoryAware的setBeanFactory(),如果实现该接口,则执行其setBeanFactory方法
  • BeanPostProcessor的processBeforeInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processBeforeInitialization()方法
  • InitializingBean的afterPropertiesSet(),如果实现了该接口,则执行其afterPropertiesSet()方法
  • Bean定义文件中定义init-method
  • BeanPostProcessors的processAfterInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processAfterInitialization()方法
  • DisposableBean的destroy(),在容器关闭时,如果Bean类实现了该接口,则执行它的destroy()方法
  • Bean定义文件中定义destroy-method,在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

 

posted @ 2021-03-30 21:32  贪睡地蜗牛  阅读(79)  评论(0编辑  收藏  举报