筆記們2自學(xué)2學(xué)習(xí)2itstime①Filter是基于函數(shù)回調(diào)而Interceptor則_第1頁
筆記們2自學(xué)2學(xué)習(xí)2itstime①Filter是基于函數(shù)回調(diào)而Interceptor則_第2頁
筆記們2自學(xué)2學(xué)習(xí)2itstime①Filter是基于函數(shù)回調(diào)而Interceptor則_第3頁
筆記們2自學(xué)2學(xué)習(xí)2itstime①Filter是基于函數(shù)回調(diào)而Interceptor則_第4頁
筆記們2自學(xué)2學(xué)習(xí)2itstime①Filter是基于函數(shù)回調(diào)而Interceptor則_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

參考 ①:FilterInterceptorJava②:FilterServletInterceptorServlet③:FilterInterceptoraction參考 參考 ①:GMT:GreenwichMeanTime標(biāo)準(zhǔn)時(shí)間。這是以英國天文臺觀測結(jié)果得出的時(shí)間,這是英國②:UT:UniversalTime③:UTC:CoordinatedUniversalTime協(xié)調(diào)世界時(shí)。因?yàn)榈厍蜃赞D(zhuǎn)越來越慢,每年都會比前一年多出零點(diǎn)幾秒,每隔幾年協(xié)調(diào)世界時(shí)組織都會給世界時(shí)+1秒,讓基于原子鐘的世界時(shí)和基于天文學(xué)(人類感知)的標(biāo)準(zhǔn)時(shí)間相差不UTC,這是現(xiàn)在使用的世界標(biāo)準(zhǔn)時(shí)間。協(xié)調(diào)世界時(shí)不與任何地區(qū)位置相關(guān),也不代表0時(shí)區(qū)上。GMT=UTC+0作者: utf-8GBK編碼格式,那么此時(shí)顯示的肯定是亂碼了。GBKutf-8GBKutf-8打開,那只能怪你自己了。參考 ①:==equals對類型來說:==比較的是內(nèi)存地址。equals方法默認(rèn)也是比較內(nèi)存地址,可以根據(jù)自己的規(guī)則去覆寫equals。Stringequals。HashMapHashTable。equals方法來逐個(gè)進(jìn)行比較,這個(gè)方法確實(shí)可行。但是如果集合中已經(jīng)存在一萬條數(shù)據(jù)或者的數(shù)據(jù),如果采用equals方法去逐一比較,效率必然是一個(gè)問題。hashCode()計(jì)算出對象實(shí)例的哈希碼,在對象進(jìn)行散列時(shí)作為key存入。之所以有hashCode方法,因?yàn)樵谂康膶ο蟊容^中,hashCodeequalshashCode方法,一下子能定位到它應(yīng)該旋轉(zhuǎn)的物理位置,若該位置沒有元素,可直接;若該位置有元素,就調(diào)用它的equals方法與新元素進(jìn)行比較,若相同則不存,不相同,就放到該位置的鏈表末端。當(dāng)這個(gè)類的對象需要向各種hash集合中的時(shí)候,得寫,寫后效率提升會很高equals(Objectobj)hashCode()equals(Objectobj)truehashCode()hashCode()相等,equals()不一定相等。對象的多態(tài):向上,向下參考 1、java參考:參考2(使用場景):https://z JavaJavaJava的反射機(jī)制。第法:通過對象名.getClass()這種方式使用的比較少第二種方式:通過類名.class來獲取第三種方式Class.forName(“完整的包名+類名”)這種方式比較常用SpringXMLBean1new的方式去創(chuàng)建對象,但最起碼的你要把類的全限定名告訴人家吧,這樣才知道你需要反2MethodMethod3:3反射方法:肯定需要類的全限定名,反射哪個(gè)方法,方法的傳參結(jié)構(gòu)。最終生成了一個(gè)不包含任何內(nèi)容Method,即Method1:簡單說明動態(tài)即不直接去調(diào)用一個(gè)對象,而是通過(對象)調(diào)用這個(gè)對象,對象也可以決定是不是真的需要去調(diào)用這個(gè)對象2:有哪些動態(tài)①:JDK動態(tài)(被的類需要有接口②:CGLIB動態(tài)(被的類無需有接口3:spring是如何使用動態(tài)4責(zé)任鏈模式就是多個(gè)上述所說的器(動態(tài)對象)同一個(gè)對象被觀察對象中商品,例如某某倉庫。當(dāng)倉庫中新增了一件商品后,被觀察者會告訴它的觀察者們,淘寶,京東等,又新增商品了,可以銷售了參考 工廠模式:new創(chuàng)建一個(gè)產(chǎn)品類,為了簡化操作我們可以創(chuàng)建一個(gè)工廠類,由這個(gè)工廠類負(fù)責(zé)創(chuàng)建所需-->轎車類-->又細(xì)分了,、汽車廠-->大巴車類-->又細(xì)分了,車、長途客車-->-->總結(jié):普通工廠解決的是一類汽車的問題,例如轎車類,即您只需要向工廠描述需要什么類型的轎車,比如轎車或轎車,就可以獲得指定的轎車。如果想生產(chǎn)多種類汽車,那么普通工廠的內(nèi)部邏輯將變得復(fù)雜起來。參考參考 參考3(模式和裝飾模式結(jié)構(gòu)型模式(7種):適配器模式、橋接模式、裝飾器模式、組合模式、外觀模式、享元模式、模解釋器模式(interpreter模式)、狀態(tài)模式、策略模式、責(zé)任鏈模式。new一句話:在不修改目標(biāo)類的情況下,通過對象對目標(biāo)功能進(jìn)行擴(kuò)展類似于發(fā)布訂閱模式,一個(gè)對象可以給它的多個(gè)對象發(fā)布通知參考:JRE:javaJDK:java開發(fā)工具包,jdkjavajreJVMjrejre的一部分,是一個(gè)虛構(gòu)出來的計(jì)算機(jī)。Jvmjvmjava編譯器和操作系統(tǒng)之間的虛擬處理器,可執(zhí)行字節(jié)碼程序。Javajvmjvm將每條指令翻局部變量表(LocalVariables),基本類型直接在棧幀中,類型則指向堆內(nèi)存。Java中的堆是用來對象本身的以及數(shù)組(對象和數(shù)組是存放在Java棧中的)。堆是被所有線程共享的,在JVM 與堆一樣,是被線程共享的區(qū)域。在方法區(qū)中,了每個(gè)類的信息(包括類的名稱、方法信息、字段信息)、JVMCPUCPU的內(nèi)核只會執(zhí)行一條線程中的指令。因此,為了能夠使得每個(gè)線程都程切換后能夠恢復(fù)在切換之前的程參考:JVM在整個(gè)流程中所處的位置。JVM內(nèi)存模型。JVM①:程序計(jì)數(shù)器(PC寄存器只會執(zhí)行一條線程中的指令。因此,為了能夠使得每個(gè)線程 程切換后能夠恢復(fù)在切換之前的程序執(zhí)行位置,注:并且不能互相擾,因此,可以這么說,程序計(jì)數(shù)器是每個(gè)線程所私有的。由于程序計(jì)數(shù)器中的數(shù)據(jù)所占Java①:局部變量表(LocalVariables),基本類型直接在棧幀中,類型則指向堆內(nèi)存②:操作數(shù)棧(Operand行本地方法(NativeMethod)服務(wù)的。Java中的堆是用來對象本身的以及數(shù)組(數(shù)組是存放在Java棧中的)。堆是被所有線程共享的,在JVM中只與堆一樣,是被線程共享的區(qū)域。在方法區(qū)中,了每個(gè)類的信息(包括類的名稱、方法信息、字段信息)、靜態(tài)量和符 。在方法區(qū)中有一個(gè)非常重要的部分就是運(yùn)行時(shí)常量池,它是每一個(gè)類或接口的常量池的運(yùn)行時(shí)表示Stringintern方法。5、JVM虛擬機(jī)自動回收機(jī)6、jvm①:jvmjavajava程序時(shí),jvm實(shí)例就產(chǎn)生了,mainjvm7、JVM參數(shù)配置(JVM調(diào)優(yōu)的基礎(chǔ)參考:JVM目前總體看來:JVMJVM參數(shù)配置的基礎(chǔ),JVMJVM的調(diào)優(yōu)。參考1-JVM內(nèi)存模型詳解:/article/details/參考2-JVM回收詳解 注:這個(gè)其實(shí)就把內(nèi)存模型->回收原理->參數(shù)配置整個(gè)流程中主要的內(nèi)容說明白了參考3-參考2的拓展:②:能夠使GC(回收器)更加高效的運(yùn)行- m、-Xmx(MaxHeapSize)-XX:PermSize200m1024m-XX:MaxPermSize-XX:NewSize(-Xns)年輕代內(nèi)存初始大小-XX:MaxNewSize(-Xmn)- EdenSurvivor8- 看完如下內(nèi)容后,我們應(yīng)該知道如何選擇合適自己服務(wù)器的回收方式了參考:參數(shù):、JVM狀態(tài),用于程序員JVM調(diào)優(yōu)及故障排查gcgcgclogdump快照回收器:具體使用哪個(gè)回收器回收實(shí)現(xiàn)算法包含:標(biāo)記-清除。。標(biāo)記整理。:串行收集器:并行收集器多條收集線程并行工作,在多核CPU下效率更高,應(yīng)用線程仍然處于等待狀態(tài):CMS收集器(ConcurrentMarkCMS收集器是縮短暫停應(yīng)用時(shí)間為目標(biāo)而設(shè)計(jì)的,是基于標(biāo)記-4:G1CMSGC參 描- - - - - CMS收集器(并發(fā)收集器 - FullGC后開始壓縮和整理,0FullGC- 80%CMSFull- G1- GC后還存活,就進(jìn)入老年代,0Java8參考 參考2:1、函數(shù)式接口、lambda表達(dá)式、方法,之間的關(guān)注:也可以用@FunctionalInterface進(jìn)行注解表示這是一個(gè)函數(shù)式接口,也告訴了別人不要亂往這里添加其它抽象②:lambdalambda依賴于函數(shù)式接口。一句話:lambda③:方法方法是指,在lambda表達(dá)式中,可以類或?qū)ο笾械姆椒?,用來?shí)現(xiàn)函數(shù)式接口中的抽象方法函數(shù)式接口、lambda表達(dá)式、方法、默認(rèn)方法、加強(qiáng)了對日期的處理、optional、stream、允許在jvm上運(yùn)行js參考(講的太好了streamlist.stream過濾、排序、到新的集合等??傮w來說,更加簡單直觀的看到了對list進(jìn)行了什么操作。if流,的本質(zhì),集合+LambdaJava集合的功能強(qiáng)化。Java8Stream是對集合(Collection)對象功能的增強(qiáng),它專注于對集合對象進(jìn)行各種非常便利、高效的聚合操作(aggregateoperation)(bulkdataoperation)。StreamAPILambda表同時(shí)它提供串行和并行兩種模式進(jìn)行匯聚操作,并發(fā)模式能夠充分利用多核處理器的優(yōu)勢fork/join并行方式來拆分任務(wù)和加速處理過程。通常編寫并行代碼很難而且容易出錯,StreamAPI無需編寫一行多線程的代碼,就可以很方便地寫出高性能的并發(fā)程序。所以說,Java8java.util.stream是一個(gè)函數(shù)式語言+多核時(shí)代綜合參考(講的很好LambdaLambda表達(dá)式。函數(shù)式接口是指只了一個(gè)抽象方法的接口,可以有多個(gè)靜態(tài)方法、默認(rèn)方法,如下所示:publicinterfaceCalculation{intcalculate(inta,intb);}@FunctionalInterface注解表示被標(biāo)注的接口將被設(shè)計(jì)成一個(gè)函數(shù)式接口,不是必須的,它主要是在接口違背函數(shù)式接口原則時(shí)會出現(xiàn)編譯錯誤。比如修改Calculation接口,再添加一個(gè)抽象方法就會出現(xiàn)Multiplenon-overridingmethodsfoundininterfacecom.cf.demo.lambda.Calculation//編譯錯誤:Multiplenon-overriding methodsfoundininterfacecom.cf.demo.lambda.CalculationpublicinterfaceCalculation{intcalculate(inta,intb);intcalculate2(inta,int}注意:Object類的方法是特例,即使接口了多個(gè)Object類的方法,也不會被算入“只了一個(gè)抽象方法”的計(jì)數(shù)Calculation接口是正確的函數(shù)式接口:publicinterfaceCalculation{intcalculate(inta,intb);booleanequals(Object}口,如需要在Lambda表達(dá)式中拋異常時(shí),這種情況就需要自定義一個(gè)函數(shù)式接口,并異常。publicinterfaceFunctionalDefaultMethods{voidmethod();defaultvoiddefaultMethod()System.out.println(“o,isdefault}}2、LambdaLambda表達(dá)式由參數(shù)列表、箭頭(Lambda操作符)、Lambda主體三個(gè)部分組成。Lambda表達(dá)式的參數(shù)列表要和函數(shù)式接口的參數(shù)列表相對應(yīng),LambdadoArithmetic方法,Calculation來完成不同的計(jì)算:publicstaticintdoArithmetic(inta,intb,Calculationcalculation){returncalculation.calculate(a,b);}intresult=doArithmetic(3,2,newCalculation(){publicintcalculate(inta,intb){returna*b;}Lambdaintresult=doArithmetic(3,2,(inta,intb)->a*括號。參數(shù)類型可以省略,因?yàn)镴ava編譯器能通過上下文推斷出數(shù)據(jù)類型,無需顯示的:intresult=doArithmetic(3,2,(a,b)->a*b);Lambda主體只有一個(gè)語句時(shí),可以省略{}return,(inta,intb)->a*b)就是省略之后的寫法,我們也可以使用完整的intresult=doArithmetic(3,2,(a,b)->{returna*b;當(dāng)需要在Lambda表達(dá)式中使用‘外部局部變量’時(shí),這個(gè)‘外部局部變量’默認(rèn)是final的,‘外部局部變量’這里是指非LambdadoArithmetic方法,添加一個(gè)‘外部局部變量’,為乘積賦個(gè)初始值,以下代intinitialValue=intresult=doArithmetic(3,2,(a,b)->a*b+initialValue=2;//Variableusedinlambdaexpressionshouldbefinaloreffectivelyfinal符::前,方法的名稱放在后面,目標(biāo)可以是類名也可以是對象名。通過以下三個(gè)例子來介紹方法的三種使用方Arithmetic類,Arithmetic類包含一個(gè)靜態(tài)方法和一個(gè)實(shí)例方法:publicclassArithmeticpublicstaticintmultiply(inta,intb){returna*b;}publicintadd(inta,intb){returna+b;}}指向靜態(tài)方法的方法intmultiplyResult=doArithmetic(3,2,Arithmetic::multiply);指向現(xiàn)有對象的實(shí)例方法的方法Arithmeticarithmetic=newintaddResult=doArithmetic(3,2,arithmetic::add);指向任意類型實(shí)例方法的方法,這種情況有個(gè)特點(diǎn),就是在一個(gè)對象的方法,而這個(gè)對象本身是Lambda的calculateInteger:publicinterfaceCalculationintcalculate(Integera,Integer}abintresult=doArithmetic(3,2, pareTo等于 對于一個(gè)現(xiàn)有構(gòu)造函數(shù),可以使用它的名稱和new來創(chuàng)建一個(gè)它的:ClassName::new。再使用構(gòu)造函數(shù)時(shí),String對象的publicstaticStringgenerateString(r<String>r){returnr.get();}publicstaticStringgenerateString(Stringvalue,Function<String,String>function){returnfunction.apply(value);}分別使用構(gòu)造函數(shù)StringresultgenerateString(String::new);//String()構(gòu)造方法result=generateString(" oLambda",String::new);//String(Stringoriginal)構(gòu)造方法參考 參考 參考 ①:java自帶注解:例如@Override②:元注解(元老注解-自命名):②:@Retention(標(biāo)明注解被保留的階段或表示什么時(shí)候到這個(gè)注解 ed(javadoc文檔①:可見注解的方式為:public@interface①:@Target4②:@Retention表示什么時(shí)候到這個(gè)自定義注解:Class代表編譯后注解,SOURCE代表源文件注解RUNTIME代表運(yùn)行時(shí)到注解參考:參考 torHashMapJDK1.8JDK1.7VSJDK1.8什么是說道樹先講什么是二叉樹 集合就是一個(gè)放數(shù)據(jù)的容器,準(zhǔn)確的說是放數(shù)據(jù)對象的容器集合類存放的都是對象的,而不是對象的本身3種:set(集)、list(列表)map(映射)①:集合用于對象的容器,對象是用來封裝數(shù)據(jù),對象多了也需要集中式管理②:數(shù)組可以基本數(shù)據(jù)類型,也可以數(shù)據(jù)類型;集合只能數(shù)據(jù)類型③:數(shù)組的元素必須是同一個(gè)數(shù)據(jù)類型;集合的對象可以是不同數(shù)據(jù)類型通過使用JDK自帶的集合類,可以降低代碼和學(xué)習(xí)新API成本MapCollectionCollection接口的子接口包括:SetListList接口的實(shí)現(xiàn)類主要有:ArrayList、LinkedList、Stack以及Vector8、樹是一種特殊的二叉查找樹。樹的每個(gè)結(jié)點(diǎn)上都有位表示結(jié)點(diǎn)的顏色,可以是紅(Red)或黑(Black)節(jié)點(diǎn))也是黑色[注意:這里葉子結(jié)點(diǎn),是指為空(NILNULL)的葉子結(jié)點(diǎn)!]。每個(gè)結(jié)點(diǎn)到葉子結(jié)點(diǎn)NIL所經(jīng)過的黑色結(jié)點(diǎn)的個(gè)數(shù)一樣的。[確保沒有一條路徑會比其他路徑長出倆倍,所以樹是樹的基本操作是添加、刪除。在對樹進(jìn)行添加或刪除之后,都會用到旋轉(zhuǎn)方法。為什么呢?道理很簡單,添加或刪除樹中的結(jié)點(diǎn)之后,樹的結(jié)構(gòu)就發(fā)生了變化,可能不滿足上面三條性質(zhì),也就不再是一顆樹了,而是一顆普通的樹。而通過旋轉(zhuǎn)和變色,可以使這顆樹重新成為樹。簡單點(diǎn)說,旋轉(zhuǎn)和變色的目的是讓樹保持紅 參考:參考2(自定義編譯時(shí)異常和運(yùn)行時(shí)異常):參考3:注:javathrowthrows關(guān)鍵字,后面講。Error是“錯誤”,Exception是“異?!盓rror子類中,不僅僅包括上圖中的兩個(gè),但這個(gè)不是我們學(xué)習(xí)的重點(diǎn),沒必要了解太多。Exception子類中,有RuntimeException,RuntimeExceptionRuntimeException的以外thrownew自定義對象拋出。調(diào)用方法時(shí)會產(chǎn)生提示出錯thrownew自定義對象拋出!throws拋出異常UML參考 參考(java線程狀態(tài)及轉(zhuǎn)換)(非常好 參考2:參考 ⑤:狀JavaEE規(guī)范(13個(gè)參考 參考參考(13規(guī)范中EJB的理解 ①:EJBjavaJ2EESpringIOCIOC答:控制反轉(zhuǎn)是一種通過描述(這種描述在java中可以是xml或注解),通過第去產(chǎn)生或獲取特定對象的方式答:IOC(控制反轉(zhuǎn))是一種設(shè)計(jì)思想,springioc容器控制各種資源對象的創(chuàng)建和管理,然后應(yīng)用程序可直接new去創(chuàng)建,實(shí)現(xiàn)了依賴解耦。SpringIOC1、SpringIOC①:SpringIoCBeanFactoryApplicationContext兩個(gè)接口,ApplicationContextBeanFactoryBeanFactoryApplicationContextSpringIoC②:ApplicationContext的實(shí)現(xiàn)類有ClassPathXmlApplicationContext,我們可以使用這個(gè)對象我們寫的xml配置去初SpringIoC容器中獲取我們想要的對象了。2、SpringIoC3、SpringBeanSpringIoCBeanBean而言,在容器中存在其生命周期,它的初始化和銷毀也需要一SpringBean生命周期的知識了。BeanBeanSpringIOCSpringIOCBean而服務(wù)的,需要SpringBeanIOCIOC注:通俗易懂:注入指的是將屬性注入到類中(iocBean裝入到某個(gè)類中去使用23②:setter注:這三種注入方式,可以通過,xml1②:在@Configuration③:在@Component2、注入(自動注入)byType注:按照名稱(byName)Autowired例如:一個(gè)接口有多個(gè)實(shí)現(xiàn),那么就需要@Qualifier和@Autowired注:@Resource可以先按名稱(byName)再按類型(byType)自動進(jìn)行裝注入,如果指定了名稱,只能按J2EE規(guī)范,@Autowired和@Qualifierspring規(guī)范。參考:參考 31、@Profile①:@ProfileDataSourceBeanBean②:讓@ProfileProfileProfile就都不會注入。怎么在啟動服務(wù)時(shí)指定呢?5、spring中如何加載.propertiesspring中如何加載.properties文件?通過@PropertySource注解1:pojo中:5、springelSpringelSpringAOP1、SpringAOP答:動態(tài),動態(tài)又分JDK動態(tài)(類需要有接口)、CGLIB動態(tài)(類不需要實(shí)現(xiàn)接口)Spring會根據(jù)類是否實(shí)現(xiàn)來接口,來選擇JDK或CGLIB動態(tài)2、SpringAOP1、SpringAOP①:SpringAOPAOP框架,用@Aspect注解一個(gè)類,這個(gè)類即變?yōu)橐粋€(gè)切面類,切面類中包含各個(gè)通知方法(例如前置、后置、返回、異常、環(huán)繞通知),通知方法上通過正則表達(dá)式指定哪些類的哪些方法,被的這些方法就是切點(diǎn)。然后啟動功能,并將切面注入到容器中,切面就會起作用了,所以對被的類是沒有侵②:SpringAOP不僅可以方法,也可以在現(xiàn)有的類中添加自定義的類和方法③:SpringAOP生成對象的過程稱為織入切面、通知(前置、后置、返回、異常、環(huán)繞通知)切面就是在一個(gè)怎樣的環(huán)境工作,被切面 器 的一個(gè)方法就是切點(diǎn),切點(diǎn)又分前置、后置、返回SpringAOP在現(xiàn)有的類中添加自定義的類和方法。2、SpringAOP注:SpringAOPAOP3AspectJSpring①:創(chuàng)建切面,切面中的各個(gè)方法上的正則表達(dá)式,用于指定哪些類中的哪些方法②:啟用器(注解@EnableAspectJAuto),并注入器到Bean中使其生效③:如果有多個(gè)切面,可通過@OrderAOPSpringJDBC①:加載數(shù)據(jù)庫驅(qū)動(或驅(qū)動程序配置數(shù)據(jù)源有幾種方法?(自己總結(jié)①:第數(shù)據(jù)庫連接池(如DBCP)。如果使用了spring,可以使用spring提供的內(nèi)部類Web服務(wù)器(容器?)JNDI使用JdbcTempldate前,需要將數(shù)據(jù)源(即DataSource接口的實(shí)現(xiàn)類)注入到JdbcTemte中,然后就可以使用了。注入的數(shù)據(jù)源不限于,spring實(shí)現(xiàn)的簡單數(shù)據(jù)源SimpleDriverDataSourceDBPC數(shù)據(jù)庫連接池實(shí)現(xiàn)的數(shù)據(jù)源xmljavaconfig初始化JDBCTemte時(shí)需要指定數(shù)據(jù)源,可見類中裝配了兩個(gè)數(shù)據(jù)源,最終使用的是DBCP的數(shù)據(jù)源Spring參考:Spring注:事務(wù)管理器的跟結(jié)構(gòu)為:tformTransactionManagerSpringMyBatis,使用的事務(wù)管理器是③:有了事務(wù)管理器,并且打開了事務(wù)功能。還需要配置事務(wù)定義器,事務(wù)定義器又可通過@Transactional配置進(jìn)行配置,事務(wù)定義器中可設(shè)置事務(wù)級別,事務(wù)超時(shí)時(shí)間等。然后事務(wù)就正常工作了。注:xml配置方式不常用。xml配置方式需要配置一個(gè)事務(wù)器和哪些類。為啥還需要配置哪些類?因?yàn)锧Transactional直接注釋到指定類或方法了。注(總結(jié)原有基礎(chǔ)包含:數(shù)據(jù)源配置,jdbcTemte注入數(shù)據(jù)源。增加“數(shù)據(jù)源事務(wù)管理器”,事務(wù)就交由事務(wù)管理器進(jìn)行管理了,不再由jdbcTemte進(jìn)行管理ACID原子性、一致性、性、永久性性:多個(gè)事務(wù)之間是相互的,不能存在相互影響。據(jù)也不會。2、簡單說下事務(wù)的級①:說事務(wù)級別前,需要理解下面幾個(gè)概念:幻不臟①:幻讀(幻想讀):事務(wù)T1一條指定where條件的語句,返回結(jié)果集。此務(wù)T2插入一行新記錄,恰好滿足T1的where條件。然后T1使用相同的條件再次查詢,結(jié)果集中可以看到T2插入的記錄,這條新就是幻想讀。②:不可重復(fù):事務(wù)T1一行記錄,緊接著事務(wù)T2修改了T1剛剛的記錄,然后T1再次查詢,發(fā)現(xiàn)與第③:臟讀:事務(wù)T1更新了一行記錄,還未提交所做的修改,這個(gè)T2了更新后的數(shù)據(jù),然后T1執(zhí)行回滾操作,取消剛才的修改,所以T2所的行就無效,也就是臟數(shù)據(jù)。注②:然后再說級別(未提一件事,你就給我重新敘述一遍,讓你再敢隱瞞在網(wǎng)上學(xué)的級別,如下(下圖中作者提到的dirtyread相當(dāng)于下面的 MITTED(未提交、未提交讀(存在問題:臟讀))幻想讀、不可重復(fù)讀和臟讀都允許②:READCOMMITTED(已提交、提交讀(存在問題:不可重復(fù)度))允許幻想讀、不可重復(fù)讀,不允許臟④:SERIALIZABLE(事務(wù)串行化執(zhí)行、串行化、序列化(不存在任何問題))3、簡單說下Spring中的事務(wù)行(面試)spring有幾種行為?都是什么,比較常用的是那些(面試)spring事務(wù)控制中的級別REQUIERS_NEW、NESTED有什么區(qū)別REQUIES_NEWNESTEDNESTED就會使用創(chuàng)建新事務(wù)的方法。te的事務(wù)管理器的根接口均為:tformTransactionManager3個(gè)方法,如下:①:獲取事務(wù)狀態(tài)(212、代買13-5使用的是默認(rèn)事務(wù)定義類1、式事務(wù),通過xml配置或注解方式來實(shí)現(xiàn)事務(wù)控制,不需要開發(fā)者自己寫代xml12xmljava②:式事務(wù):通過xml配置,或java配DefaultTransactionDefinition(默認(rèn)事物定義類)Spring1、SpringMVCSpring參考:Web服務(wù)上,Spring5SpringWebFluxWeb服務(wù)開發(fā)框架,它與傳統(tǒng)的WebMVC相比具體有哪些優(yōu)勢呢?今天我們就針對這個(gè)話題展開討論。WebFlux的應(yīng)用提供了一個(gè)很好的場景。我們知道在一個(gè)微服務(wù)系統(tǒng)中,存在數(shù)十乃至數(shù)百I/OI/O操跨服務(wù)之間的網(wǎng)絡(luò)請求。針對這種場景,WebFlux是一種非常有效的解決方案。注:上面說的非常對,例如微服務(wù)的一個(gè)鏈路可能調(diào)用了很多服務(wù),結(jié)果調(diào)用到某個(gè)服務(wù)(SpringMVC服務(wù))的時(shí)候,正好這個(gè)服務(wù)線程數(shù)滿了,結(jié)果可想而知,SpringMVC直接丟棄了這個(gè)請求,這樣是不好的。SpringWebMVC在實(shí)現(xiàn)上并不允許在整個(gè)請求生命周期中都采用非阻塞式的操作方式。因此,Spring在盡量沿用原有的開發(fā)模式以及API設(shè)計(jì)上提供了支持異步非阻塞的SpringWebFlux框架。在使用WebFlux和WebMvc實(shí)際的使用并沒有太大的區(qū)別,實(shí)際上WebFlux的組件基本都是SpringMvc組件Spring1、SpringBoot參考:SpringSpring1SpringMVCinput-name保持一致,springmvcinput-name,springmvc④:用@PathVariableget⑤:@RequestBodyjsonspringmvc3Model--ModelAndView--RedirectAttribute--4、springmvc如何在request、session獲取、對象=②:注解@SessionAttribute(requiredtrue)和注解 =注:思考:springmvc如何 呢?即不通過原始方式request存。5、參考:①:preHandle()方法:在請求處理之前進(jìn)行調(diào)用(HandlerController方法調(diào)用之前②:postHandle()方法:在請求處理后,視圖被渲染之前執(zhí)行(HandlerController方法調(diào)用之后 pletion()DispatcherServlet渲染了對應(yīng)的視圖之后執(zhí)行注:如果只想實(shí)現(xiàn)3個(gè)方法中的1、2個(gè)的時(shí)候,使用HandlerInterceptorAdapter即可參考:①:WebMvcConfigurerAdapter注解(spring5后就不建議使用了,以后會棄用②:WebMvcConfigurerWebMvcConfigurationSupport①:FilterInterceptorJava②:FilterServletInterceptorServlet③:FilterInterceptoraction②:業(yè)務(wù)校驗(yàn)。例如商品數(shù)量最大件數(shù)參考:html、pdf、excel、json等,都需要通過其對應(yīng)的視圖解析器去解析出來。①:邏輯視圖渲染:數(shù)據(jù)模型-->視圖解析器-->②:非邏輯視圖渲染:數(shù)據(jù)模型-->json,pdfjsp就需要視圖解析jspjsp,需要通過視圖解析器去定位。SpringMVCSpringMVCSpring參考 OSI2、TCP/IPUDP3、TCPUDP4、TCP參考 注:讀東西一定要認(rèn)真仔細(xì)的讀,不要心浮氣躁,這樣才能真真的理解并。-1、httpwww參考 HypertanerPlWWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少;它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等,這就是為什么在瀏覽器中看到的網(wǎng)頁地址都是以“tp:開頭的原因。WWW是信息網(wǎng)的縮寫,英文全稱為“WorldWideWeb”,中文名字為“網(wǎng)”,””等,常簡稱為Web。分為Web客戶端和Web服務(wù)器程序,WWW可以讓W(xué)eb客戶端(常用瀏覽器)瀏覽Web服務(wù)器上的頁面,是一個(gè)由許多互相的超文本組成的系統(tǒng),通過互聯(lián)網(wǎng)。WWWHTTPwwwhttp和打開 /看到的網(wǎng)頁內(nèi)容是一樣的就OK了HTTP②:HTTP①:get②:headget,只不過服務(wù)器響應(yīng)中沒有內(nèi)容,僅用于獲取報(bào)頭(響應(yīng)頭)③:trace③:optionsURLHTTP頭中包含一個(gè)名為“Allow”的頭,值是所支持的方法,如“GET,POST”。options參考:客戶機(jī)通過這個(gè)頭告訴服務(wù)器,請求完后是關(guān)閉還是保持客戶機(jī)通過這個(gè)頭告訴服務(wù)器,想的主機(jī)名用來說明請求從哪里發(fā)起的,包括且僅僅包括協(xié)議和CORSresponseheader:Access-Control-Allow-Origin。客戶機(jī)通過這個(gè)頭告訴服務(wù)器,它是從哪個(gè)資源來服務(wù)器的。(一般用于防盜鏈服務(wù)器通過這個(gè)頭,響應(yīng)完是保持還是關(guān)閉HTTPTransfer_EncodinghttpHTTPhttpContent-LengthVary字段用于列出一個(gè)響應(yīng)字段列表,告訴緩存服務(wù)器遇到同一個(gè)URL對應(yīng)著不同版本文檔的情況時(shí),如何緩存和302服務(wù)器通過這個(gè)頭,告訴瀏覽器以的方式打開數(shù)據(jù)服務(wù)器通過這個(gè)頭,告訴瀏覽器把回送的數(shù)據(jù)緩存多長時(shí)間。-10Cache-Control6、MIME①:MIME(MultipurposeInternetMailExtensions)是描述消息內(nèi)容類型的標(biāo)準(zhǔn),用來表示文檔、文件或字節(jié)流的性質(zhì)和MIME消息能包含文本、圖像、音頻、以及其他應(yīng)用程序的數(shù)據(jù)瀏覽器通常使用MIME類型(而不是文件擴(kuò)展名)來確定如何處理URL,因此Web服務(wù)器在響應(yīng)頭中添加正確的MIME類型非常重要。如果配置不正確,瀏覽器可能會無法解析文件內(nèi)容,將無法正常工作,并且的文件也MIME注:MIME/分隔而組成,不允許有空格。type表示可以被分多個(gè)子類的獨(dú)立類別,subtype表示細(xì)分后的每個(gè)類型。MIMEMIME①:text/in表示文本文件的默認(rèn)值②:application/octet-streamMIME.html、普通文本.txt:text/RTF.rtfapplication/rtfGIF圖形.gif:image/gifJPEG.jpeg、.jpgimage/jpegau聲音文件.au:audio/basicMIDI音樂文件mid、.midi:audio/midi、audio/x-midiRealAudio音樂文件.ra、.ram:audio/x-pn-realaudioMPEG文件.mpg、.mpeg: AVI文件 GZIP.gzapplication/x-gzipTAR文件.tar:application/x-tar注:一般是指網(wǎng)頁中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁的編碼,決定瀏覽器將以什么形式、什么編碼這個(gè)文件,這就是經(jīng)常看到一些PHP網(wǎng)頁點(diǎn)擊的結(jié)果卻是一個(gè)文件或一張的原因。<formencType=””>中默認(rèn)的encType,form表單數(shù)據(jù)被編碼為key/value格 html②:傳輸xml、純文本、json格式的:text/xml、text/in、④:傳輸各種格式:image/gif、image/jpeg、pdf、word文檔:application/pdf、⑦:傳輸音頻(mp3)、(mp4、 /mpeg4、①:http長JavaMQ就是消息隊(duì)列。是軟件和軟件進(jìn)行通信的中間件產(chǎn)品,作用如下:①:異步處理-②:應(yīng)用解耦-③:削峰填谷-④:日志處理--消息隊(duì)列一般都內(nèi)置了高效的通信機(jī)制,因此也可以用在純的消息通訊。100%不丟消息,因?yàn)樵诎踩矫孀龅亩啵阅芸赡苌晕⒉钜恍?。②:ActiveMQ:為萬級(性能)。優(yōu)點(diǎn):支持語言較多。缺點(diǎn):較老的技術(shù),速度慢 MQ:為十萬級(性能最好)Rabbitmq100%mqActivemqRabbitMQ③:server服務(wù)(rabbitMQbroker):ServerVirtualHost(vhost),4、簡單介紹下,mqserverRabbitMQ①:消息(message):消息在隊(duì)列中④:隊(duì)列(queue):用于消息RabbitMQ①:簡單模式(一對一②:工作模式(一對一③:發(fā)布訂閱模式(一對多④:路由模式(一對多⑤:通配符模式(路由通配符模式、模式)(一對多①:數(shù)據(jù)被的頻率遠(yuǎn)大于寫的次數(shù)RedisRedis①:Redis②:Redis6③:Redis這是RestTemte類默認(rèn)的序列化方式。的類需要實(shí)現(xiàn)Serializable接口是StringRedisTemte默認(rèn)的序列化方式,key和value都會采用此方式進(jìn)行序列化Serializable與Jackson2JsonRedisSerializer大致相同,會額外序列化對象的包命和類一句話:RedisTemte可以操作對象、字符串,并且可以設(shè)置序列化方式。StringRedisTemte只能操作字符串StringRedisTemte默認(rèn)使用的序列化方式是StringRedisSerializer。RedisTemte可以設(shè)置各個(gè)類型的key、value的序列化方式,例如設(shè)置String和hash類型的key、value,都為6、Redis命令被加入到執(zhí)行隊(duì)列中),在執(zhí)行命令的過程中,作的數(shù)據(jù)不會被其他進(jìn)程影響(因?yàn)槠渌M(jìn)程想要操作相同exec命令。精簡:redis可以將多個(gè)語句放到一個(gè)事務(wù)中執(zhí)行,在執(zhí)行命令的過程中,數(shù)據(jù)不會被其他線程所影響。事務(wù)確認(rèn)提交前,也可某些值是否變化,如果發(fā)生了變化,則回滾事務(wù)。①:mulit②:watch:某些鍵。當(dāng)被的鍵在事務(wù)執(zhí)行前被修改,則事務(wù)會被回滾③:unwatch:取消某些鍵②:pipelineRedismq答:不會,RedisKey2、RedisKey有幾種方式?(面試②:惰性回收是指當(dāng)一個(gè)超時(shí)的鍵,被再次get命令時(shí),將觸發(fā)Redis將其從內(nèi)存中清空10、Redislua①:RDB(快照備份Redis緩存。RDB①:saveRedis主線程備份,因此備份時(shí),Redis②:bgsaveRedisRedis6種策略中的一種進(jìn)行淘汰鍵值。注:Redisnoeviction方式(重要)。volatile-random方式。14、Redis主從:即多臺redis集群,一臺redis作為寫服務(wù)器,其他作為讀服務(wù)器。主從同步過程:基于主從配置,哨兵是在主從配置基礎(chǔ)上,主服務(wù)器,如果主服務(wù)器掛掉,哨兵自動切換從服務(wù)器為主服務(wù)器。3、Codis參考:Codis①:由第開發(fā),codis是客戶端和redis之間的中間件,codis的多個(gè)redis實(shí)例構(gòu)成一個(gè)集群,codis根據(jù)key向不同的redis服務(wù)器或數(shù)據(jù)。codiscodisrediscodisZookeeperETCDredis自家產(chǎn)品,去中心化,不需要zookeeper或ETCD去cluster和redis實(shí)例之間的關(guān)系配置Codis集群需要配置中心,cluster不需要(去中心化)Codispipeline,clusterCodis1024個(gè),cluster16384codisCodis后續(xù)升級無法保障,cluster15、SpringRedis①:配置緩存管理器作用:將redis分區(qū),使用注解的時(shí)候,需要指定將緩存到哪個(gè)區(qū)中參考:參考2:h 1、MongoDBMongoDB更類似MySQL,支持字段索引、游標(biāo)操作,其優(yōu)勢在于查詢功能比較強(qiáng)大,擅長查詢JSON數(shù)據(jù),能Redis是一個(gè)開源(BSD)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)系統(tǒng),支持多種類型的數(shù)據(jù)結(jié)構(gòu),可用作數(shù)據(jù)庫,高速緩存2、MongoDBRedis1RedisLRUMongoDBlinuxmmap2Redishash、set、listMongoDB3當(dāng)物理內(nèi)存不夠用的時(shí)候,redismongodbredis但是,mongodb不一樣,只要,業(yè)務(wù)上能保證,冷熱數(shù)據(jù)的讀寫比,使得熱數(shù)據(jù)在物理內(nèi)存中,mmapmongodb4mongodb依賴內(nèi)存,TPS較高;Redis依賴內(nèi)存,TPSRedisMongoDB5mongodb1.8binlog方式(MySQL同樣采用該方式)Redis依賴快照進(jìn)行持久化;AOF增強(qiáng)可靠性;增強(qiáng)可靠性的同時(shí),影響性能MongoDBRedis6mongodb內(nèi)置數(shù)據(jù)分析功能(mapreduce);Redis7Redis事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行;mongodb8MongoDB集群技術(shù)比較成熟,Redis3.01、不sql,意味著可以更精確定位sql語句(如果沒有sql,還真可能不好定位sql問題),可以對sql進(jìn)行優(yōu)化和3MapperXMLSQLSessionFactory③:SQLSessionFactorySqlSessionSqlSession二、Mybatis1、Mybatis先說明下,Mybatisxmlmybatis給系統(tǒng)設(shè)置一些運(yùn)行參數(shù),包含數(shù)據(jù)庫的用戶名、等javajdbc可以給mybatis一些插件mapper-xmlmapper-xml③:用類引入映射注:selectRowBounds3、update5、sql抽出公共部分,用于各個(gè)sqltrimwhere1=1參考文檔:數(shù)據(jù)庫應(yīng)試知識擴(kuò)充createcheck(xxxin())primarykeyforeignkey(xxx)referencesxxx_table(xxx)notnullalteradd、modify、drop、renamecolumnxxxtocreatecreateviewxxxcreateorrecetrigger觸發(fā)器名createorreceprocedure過程名droptabletruncatetable參考:參考參考:參考(k8s):參考Dockerdocker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者將應(yīng)用及應(yīng)用依賴打包為鏡像,進(jìn)行容器化運(yùn)行(容器是由鏡像實(shí)例化而來)docker機(jī)器上,實(shí)現(xiàn)一次打包,到處運(yùn)行。Dockerdocker機(jī)器上,Dockerk8s參考(k8s):參考Docker:Docker是一個(gè)開源的應(yīng)用容器引擎,開發(fā)者可以打包他們的應(yīng)用及依賴到一個(gè)可移植的容器中,發(fā)布到Linux機(jī)器上,也可實(shí)現(xiàn)虛擬化。k8s:k8s是一個(gè)開源的容器集群管理系統(tǒng),可以實(shí)現(xiàn)容器集群的自動化部署、自動擴(kuò)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論