1. 程式人生 > >180919面試總結(1)

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方法