180919面试总结(1)

1.内连接 外连接区别

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢失。

内连接语法如下:

select fieldlist from table1 [inner] join table2 on table1.column = table2.column

等价于

select table1.fieldlist from table1,table2 where table1.column = table2.column

1、内连接(自然连接):

INNER JOIN[JOIN]

 只有两个表相匹配的行才能在结果集中出现

2、外连接:
1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       
2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

2.描述一下springMVC的工作流程

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

springmvc是一个基于mvc的web框架。

SpringMVC的工作流程:

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler

可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析

根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染

视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

 

组件:

1、前端控制器DispatcherServlet(不需要程序员开发)

作用接收请求,响应结果,相当于转发器,中央处理器。

有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

 

3.一级缓存和二级缓存的区别

Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

开启二级缓存步骤:

1.在核心配置文件SqlMapConfig.xml中加入

<setting name="cacheEnabled" value="true"/>

 

描述

允许值

默认值

cacheEnabled

对在此配置文件下的所有cache 进行全局性开/关设置。

true false

true

2.在对应的Mapper.xml中开启二级缓存,即:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
	<!-- 开启本mapper的namespace下的二缓存
	type:指定cache接口的实现类的类型,mybatis默认使用PerpetualCache
	要和ehcache整合,需要配置type为ehcache实现cache接口的类型
	 -->
	<cache />
<!-- 下面的一些SQL语句暂时略 -->
</mapper>

3.二级缓存需要查询结果映射的pojo对象实现java.io.Serializable接口,即:

二级缓存需要查询结果映射的pojo对象实现java.io.Serializable接口实现序列化和反序列化操作,注意如果存在父类、成员pojo都需要实现序列化接口。

public class Orders implements Serializable

public class User implements Serializable

....

4.Java JDK1.5 之后 switch语句 支持的类型

Java支持的数据类型有五种

他们分别是:

byte、char、short、int、enum;

以上是JDK1.6以前的版本。

JDK1.7时,又增加了String

public class Test {

    public static void main(String[] args) {
        
        
        switch ("111") {
        case "111":
            System.out.println("111111111111111");
            break;

        default:
            break;
        }
}
}

5.Java中断线程的三种方式

1、interrupt()

2、isInterrupted()

3、interrupted()

参考文章:https://www.jb51.net/article/128207.htm

6.set是否可放入重复数据?不能的话是如何实现不放入重复数据的?

 

1.Set是一种不包含重复元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
放入Set集合中的对象必须重写equals()(实际内容)和hashCode()(内存地址)方法。
2.应该说set不允许键(key)重复,但是允许(值)value重复

 

Set 的add方法:

比较的是对象的hashCode方法返回的值重写hashCode方法就必须重写equals方法(java中自定义对象的比较原理)
对象的比较:
add方法的参数是个对象。集合会调用这个对象的equals、hashCode方法和已经存在的对象比较

hashCode先比较,如果一样再调用equals

	//set.add新添加对象的内部原理
	MyClass c2=new MyClass(2);
	for(Object myclass:set){
		if(myclass.hashCode()==c2.hashCode()){
			if(myclass.equals(c2)){
				return;
	  		}
			else{
				//equals不一样也添加成功
	 	 	} 
		}
		else{
			//hashCode不一样直接添加成功
		}
	}
	//HashSet 使用add方法过滤重复,使用hashCode、equals方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值