2025年軟通動力面試題集_第1頁
2025年軟通動力面試題集_第2頁
2025年軟通動力面試題集_第3頁
2025年軟通動力面試題集_第4頁
2025年軟通動力面試題集_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Struts的運行機制:Web應用初始化時,控制器加載分析配置文獻(struts-config.xml),獲得ActionMapping,配置應用程序ActionServlet接受顧客祈求ActionServlet根據應用程序配置填充ActionFormActionServlet根據ActionMapping調用Action的execute措施Action調用業務邏輯類(Model),在簡樸的程序中也可以在Action的execute措施中執行業務處理業務邏輯類將處理成果返回給Action,Action將處理成果保留在合適的作用域范圍之內(session、request等)Action的execute措施向ActionServlet返回ActionForward指明下一步調用的Action或JSP視圖JSP視圖獲得保留在作用域之中的業務處理成果并負責顯示HTML頁面大家最佳用自已的話來總結出來!常用的集合以及簡介:(應重點復習)常用集合set、map、listset、map是collection接口的子接口set接口的實現類:(無序,不可反復)HashSet、TreeSetList接口的實現類(有序,可反復):ArrayList(數據列表)、linkedList(鏈表)Map接口的實現類:(鍵值對,根據key去查value)HashMap、TreeMap、Hashtable。ArrayList和linkedList的區別(略)ArrayList是用數組實現的,便于搜索和查找,由于數組有下標,不擅長插入和刪除操作。Linkedlist是鏈表實現的,鏈表是一種個節點鏈接起來的,擅長插入和刪除,搜索和查詢的效率比較低。HashMap、HashTable區別(略)HashMap不一樣步,空鍵值,效率高HashTable同步,非空鍵值,效率較低。遍歷map的措施:使用Map接口提供的措施entrySet();importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;publicclassMapTest{ publicstaticvoidmain(String[]args){ Map<Object,Object>map=newHashMap<Object,Object>(); map.put("a","中國"); map.put("b","ABC"); map.put("c",1000); /*for(Iterator<Entry<Object,Object>>it=map.entrySet().iterator();it.hasNext();){ Entry<Object,Object>entry=it.next(); System.out.println(entry); System.out.println(entry.getKey()); System.out.println(entry.getValue()); }*/ for(Iterator<Object>it=map.keySet().iterator();it.hasNext();){ Objectkey=it.next(); System.out.println(key); Objectvalue=map.get(key); System.out.println(value); } }}4.字符串相加用“+”和append()的區別用“+“號每加一次創立一種對象,例如:字符串常量池中有原字符串:”abc” 之後要加”de”,加過之後內存中會有”abc”、”abcde”兩個字符串!但”abc”會失去原本指向它的引用變成垃圾回收機制回收的對象!Append()只是將字符串追加到原字符串的尾部,一直都是一種對象!垃圾回收機制原理:當一種對象賦值為null或者沒有指導指向他的時候,那么這個對象就符合垃圾回收機制回收的范圍,java虛擬機會不定期的對垃圾進行回收,回收對象之前會調用被回收對象的finalize()措施!注意Java虛擬機何時來回收垃圾不確定!怎樣實現多線程:繼承Thread類或者實現Runnable接口那種好處多:由于java是單繼承因此一般會采用實現Runnable接口兩種實現方式的區別:繼承Thread類可以創立本類對象直接調用start()措施運行線程(也就是說本類對象就是一種線程個人理解)實現Runnable接口必須用Threadthread=newThread()來獲得一種線程!7.代碼的重構:代碼的輸入、輸出不變,只是變化中間實現代碼!8.MVC思想是model、view、controller的縮寫,model代表業務邏輯(通過javabean、EJB組建實現)、view是應用表達面(由jsp頁面產生)、controller是提供應用處理過程的控制(一般是一種servlet)。通過這種設計模式把應用邏輯、處理過程、顯示邏輯提成不一樣的組件實現,可提高組件的交互和重用性。9.struts1和struts2的區別(見最終一頁)10:講解一下Spring11:hibernate是怎么工作的原理:1.讀取并解析配置文獻2.讀取并解析映射信息,創立SessionFactory3.打開Sesssion4.創立事務Transation5.持久化操作6.提交事務7.關閉Session8.關閉SesstionFactory12:hibernate的一級和二級緩存是什么Hibernate提供了兩級緩存,第一級是Session的緩存。由于Session對象的生命周期一般對應一種數據庫事務或者一種應用事務,因此它的緩存是事務范圍的緩存。第一級緩存是必需的,Session的緩存是內置的,不能被卸載。第二級緩存是一種可插拔的的緩存插件,它是由SessionFactory負責管理。由于SessionFactory對象的生命周期和應用程序的整個過程對應,因此第二級緩存是進程范圍的緩存,第二級緩存是可選的,可以在每個類或每個集合的粒度上配置第二級緩存。當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,假如配置了二級緩存,那么從二級緩存中查;查不到,再查詢數據庫,把成果按照ID放入到緩存。13:hibernate的連接池14:怎么接受dwr返回的數組或集合15:怎么讀取一種文本文獻(流)16:javascript中這樣去掉字符串的空格17:用ajax的時候怎么運行後臺返回的javascript代碼18:存儲過程是用來干什么的19:怎么終止一種線程拋出異常和等待run()措施結束。20.消極鎖和樂觀鎖?21.Oracle中實現序列用什么關鍵字?Sequence22.數據庫中有哪些函數?23.解析XML的措施?DOM解析和SAX解析DOM:處理大型文獻時其性能下降的非常厲害。這個問題是由DOM的樹構造所導致的,這種構造占用的內存較多,并且DOM必須在解析文獻之前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現于DOM,SAX是事件驅動型的XML解析方式。它次序讀取XML文獻,不需要一次所有裝載整個文獻。當碰到像文獻開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一種事件,顧客通過在其回調事件中寫入處理代碼來處理XML文獻,適合對XML的次序訪問24.用遞歸法求n的階乘?25.Orcale中左右連接用“+”怎樣連接Oracle數據庫左連接“+”在右邊,右連接“+”在左邊。26.Equals措施和==的區別。 equals()措施是用來比較兩個字符串值與否相等==是用來比較對象引用與否相等(也就是與否為同一種對象)27.線程池的問題。線程池就像數據庫連接池同樣,是一種對象池。所有的對象池均有一種共同的目的,那就是為了提高對象的使用率,從而到達提高程序效率的目的。例如對于Servlet,它被設計為多線程的(假如它是單線程的,你就可以想象,當1000個人同步祈求一種網頁時,在第一種人獲得祈求成果之前,其他999個人都在郁悶地等待),假如為每個顧客的每一次祈求都創立一種新的線程對象來運行的話,系統就會在創立線程和銷毀線程上花費很大的開銷,大大減少系統的效率。因此,Servlet多線程機制背後有一種線程池在支持,線程池在初始化初期就創立了一定數量的線程對象,通過提高對這些對象的運用率,防止高頻率地創立對象,從而到達提高程序的效率的目的。28.struts1的某些配置問題web.xml和struts-config.xml中的某些配置。JavaScript的一種操作流程。某些簡樸的sql語句,例如說目前數據庫中有10記錄,規定你寫一種語句保留第二條和第五條記錄,將其他的記錄所有刪除。存儲過程、觸發器Throw和Throws的區別throw語句用來明確地拋出一種“異常”。throws用來標明一種組員函數也許拋出的多種“異?!痹诋惓2蹲綍rtry,catch,finally中可不可以沒有catch語句塊??梢?,但try塊不能單獨執行,背面必須跟catch或者finally、或者兩者均有。面向對象有哪些特性,你怎樣理解?抽象、繼承、封裝、多態什么是多線程?線程的狀態有那幾種?創立線程的措施?啟動線程用什么措施?線程同步包括的措施?答:多線程是為了同步完畢多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。線程是在同一時間需要完畢多項任務的時候實現的。線程狀態有:就緒、運行、掛起、結束。啟動線程用start()措施。線程同步包括的措施:線程睡眠sleep()、線程讓步:yield()、等待其他線程結束join()等。String、stringBuffer、StringBuilder的區別String字符串常量StringBuffer字符串變量(線程安全)StringBuilder字符串變量(非線程安全)String是不可變的對象,因此在每次對String類型進行變化的時候其實都等同于生成了一種新的String對象,然後將指針指向新的String對象,因此常常變化內容的字符串最佳不要用String對StringBuffer對象自身進行操作,而不是生成新的對象,再變化對象引用垃圾回收機制的原理?final,finally,finalize的區別?回收機制就是當某些資源被創立使用之後或不在調用的話就會變成垃圾,垃圾的話會占用空間,這時候就需要釋放空間給其他程序使用,因此JAVA擁有自動垃圾回收機制,會在合適的時候自動調用垃圾回收釋放資源,程序員也可以手動調用釋放資源等等final是全局變量申明的時候使用,意思是這個變量不可被修改,不可被override(重載),一般用于申明常量,或者系統設置的值。例子:publicstaticfinalStringa="123"意思是:公共的(所有范圍可見),靜態的(系統中只存在一種),final的(不可被更改)變量a,值是123finally是在try-catch-finally塊中配套使用,作用是,不管代碼執行了try還是catch,最終一定會執行finally裏面的代碼例如:try{這裏寫某些也許出現異常的代碼}catch(Exceptione){出現了異常就執行這裏的代碼。否則不執行}finally{無論有無異常,都執行這裏的代碼}finalize是召喚垃圾搜集器的命令,使用後,系統就安排一次垃圾回收不過不是立即執行,執行的時間點是無法確定的。沒有尤其的規定的話一般不需要使用finalize,交給gc自已管理就好。內存的泄露以及溢出是怎么回事?內存溢出就是你規定分派的java虛擬機內存超過了系統能給你的,系統不能滿足需求,于是產生溢出。內存泄漏是指你向系統申請分派內存進行使用(new),可是使用完了後來卻不償還(delete),成果你申請到的那塊內存你自已也不能再訪問,該塊已分派出來的內存也無法再使用,伴隨服務器內存的不停消耗,而無法使用的內存越來越多,系統也不能再次將它分派給需要的程序,產生泄露。一直下去,程序也逐漸無內存使用,就會溢出。數據庫連接池的原理?數據庫連接池的基本思想就是為數據庫連接建立一種“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一種,使用完畢之後再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更為重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量﹑使用狀況,為系統開發﹑測試及性能調整提供根據。數組和鏈表的區別?棧以及隊列的特點以及區別?數組處理一組數據類型相似的數據,但不容許動態定義數組的大小,即在使用數組之前必須確定數組的大小。而在實際應用中,顧客使用數組之前有時無法精確確定數組的大小,只能將數組定義成足夠大小,這樣數組中有些空間也許不被使用,從而導致內存空間的揮霍。

鏈表是一種常見的數據組織形式,它采用動態分派內存的形式實現。需要時可以用new分派內存空間,不需要時用delete將已分派的空間釋放,不會導致內存空間的揮霍。數組中的數據在內存中的按次序存儲的,而鏈表是隨機存儲的!

要訪問數組中的元素可以按下標索引來訪問,速度比較快,假如對他進行插入操作的話,就得移動諸多元素,因此對數組進行插入操作效率很低!

由于連表是隨機存儲的,鏈表在插入,刪除操作上有很高的效率(相對數組),假如要訪問鏈表中的某個元素的話,那就得從鏈表的頭逐一遍歷,直到找到所需要的元素為止,因此鏈表的隨機訪問的效率就比數組要低遞歸的算法?例如階乘和fif數列的實現。常用的某些算法,如冒泡,二分查找,折半查找,選擇排序等等java中多態是怎樣實現的?重載和覆蓋的區別?注意代碼的重構不是重載!多態有兩種形式:靜態時多態與動態時多態.靜態時多態的體現形式是(overloading重載),動態時多態的體現形式是(overriding重寫)重寫Overriding是父類與子類之間多態性的一種體現,假如在子類中定義某措施與其父類有相似的名稱和參數,我們說該措施被重寫

(Overriding)重載Overloading是一種類中多態性的一種體現,假如在一種類中定義了多種同名的措施,它們或有不一樣的參數個數或有不一樣的參數類型,則稱為措施的重載(Overloading)。Overloaded的措施是可以變化返回值。接口和抽象類的區別?1、定義時,abstract抽象類,interface接口2、我們只能說一種類繼承(extends)抽象類。一種類實現(implement)哪個接口3、抽象類不一定只有抽象措施,還可以有一般措施,不過抽象類一定有抽象措施4、接口可以看作是極端化的抽象類,接口1>屬性必須是常量(staticfinal),且為public2>措施全是抽象措施,且為public3>無構造措施共同點:都不能直接實例化jsp和servlet的區別?jsp的內置對象?jsp的原則動作?jsp的頁面元素有哪些?四種會話跟蹤技術是什么?servlet是不是線程安全的?servlet生命周期?動態include和靜態include區別?重定向和祈求轉發的區別?servlet中怎樣從頁面獲取參數?jsp的四種作用于范圍是什么?Jsp是Servlet的技術擴展,本質上是Servlet的簡易方式,Jsp側重于視圖而Servlet側重于控制業務邏輯。Jsp內置對象九個:request、response、out、session、application、pagecantext、page、config、Exception 會話跟蹤技術:session、cookie、重寫url、隱藏表單域Jsp原則動作:usebean、setProperty、getProperty、forward、include 不是,servlet處在服務器進程中,它通過多線程方式運行其service措施,一種實例可以服務于多種祈求,并且其實例一般不會銷毀,因此你的項目中假如只有一種servlet,那么web容器就只會創立一種實例 通過request.getParameter()來獲取頁面參數作用域范圍由小到大:page、request、session、application47.jstl的包括哪些標簽庫?怎樣實現迭代?包括:關鍵標簽(包括通用標簽、條件標簽、迭代標簽)、I18N與國際化標簽、SQL標簽、XML標簽、function標簽使用迭代標簽forEach來遍歷48.過濾器的原理?過濾器的生命周期?監聽器的原理hibernate的映射原理?hibernate的查詢方式有哪些?關聯關系的映射怎么理解?三種查詢方式:HQL、條件查詢、原生SQL查詢,命名SQL、oracle和sqlserver區別?怎樣優化oracle數據庫?oracle的某些常用系統函數?Oracle跨平臺,SqlServer只能運行在window平臺上。為何要用索引?索引的分類?視圖是什么?答:提高查詢的執行速度,強制實行數據庫的唯一性,提高表與表之間的鏈接速度。匯集索引和非匯集索引(SQLServer)原則索引、組合索引、唯一索引、反向索引、位圖索引(Oracle)視圖是一張虛擬表,該表提供對一種或多種表中列的訪問,它是從一種或多種表中派生出來的對象。存儲過程你是怎么理解的?怎樣實現?答:我感覺存儲過程就像java中的措施同樣,輸入參數就是措施傳的參數,而輸出參數就像措施的返回值同樣。Java中通過CallAbleStatement接口實現了對存儲過程的調用。觸發器、游標的某些基本知識!oracle數據庫的某些特殊之處如簇、序列等怎樣理解簇是用來存儲表的措施,這些表互相聯絡親密并一般相連在磁盤的相似區域上,共享同一列的一組表,用于檢索時提高效率oracle中沒有sqlserver中的標識列,只能通過創立序列來實現這一功能。權限的問題怎樣處理?Ajax的javaScript代碼怎樣實現?Ajax的某些框架?單例模式和工廠模式怎樣實現?單列模式:(餓漢式)publicclassCar{ privateCar(){}//私有的構造措施使別的類不能通過new來創立本類是類只能通過我們下面的措施來獲得對象 privatestaticCarbaoma=newCar();//靜態類類型的變量保證對象只有一種 publicstaticCargetCar(){//注意措施定義為靜態的再別的類中就可以用本類類名來調用此措施得到本類對象 returnbaoma;}}單列模式使本類對象只有一種,只能通過措施調用來獲得對象,并且無論你掉用多少次措施,得到的都是一種實例。類的加載次序父類靜態塊>子類的靜態塊>程序的入口(main)>父類的初始化塊>父類的構造措施>子類的初始化塊>子類的構造措施怎樣處理數據庫差異例如顧客剛開始使規定用SqlServer之後需求變化要使用Oracle:使用hibernate只需要變化方言即可使用sql原則語句Session和cookie的區別一種抽象類與否可以繼承一種一般類可以,但被繼承的類必須要有明確的構造措施什么時候用接口?抽象類?當你寫一種類時,也許面臨部分代碼也許會發生變化

你可以把這些代碼封裝成(接口或抽象類或基礎類中的)一種或多種措施

1、假如所有抽象出的措施不確定性很高,就定義為接口來封裝,所有措施抽象,由實現類所有實現

2、假如部分抽象出的措施不確定性很高,就定義為抽象類來封裝,能確定的措施實現,不確定的措施抽象,由實現類部分實現,部分重寫(不變就不重寫啦)

3、假如所有抽象出的措施確定性很高,就定義為基礎類,所有措施提供基本實現,由子類去重寫(不變就不用寫子類啦)函數和存儲過程的區別

1.

一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。

2.

對于存儲過程來說可以返回參數,而函數只能返回值或者表對象。

3.

存儲過程一般是作為一種獨立的部分來執行,而函數可以作為查詢語句的一種部分來調用,由于函數可以返回一種表對象,因此它可以在查詢語句中位于FROM關鍵字的背面。

4.

當存儲過程和函數被執行的時候,SQLManager會到procedurecache中去取對應的查詢語句,假如在procedurecache裏沒有對應的查詢語句,SQLManager就會對存儲過程和函數進行編譯。

Procedurecache中保留的是執行計劃(executionplan),當編譯好之後就執行procedurecache中的executionplan,之後SQLSERVER會根據每個executionplan的實際狀況來考慮與否要在cache中保留這個plan,評判的原則一種是這個executionplan也許被使用的頻率;另一方面是生成這個plan的代價,也就是編譯的耗時。保留在cache中的plan在下次執行時就不用再編譯了。Struts1和struts2比較:Action類

Struts1規定Action類要擴展自一種抽象基類。Struts1的一種共有的問題是面向抽象類編程而不是面向接口編程。

Struts2的Action類實現了一種Action接口,連同其他接口一起實現可選擇和自定義的服務。Struts2提供一種名叫ActionSupport的基類實現一般使用的接口。雖然,Action接口不是必須的。任何使用execute措施的POJO對象可以被當作Struts2的Action對象使用。

程模型

Struts1Action類是單例類,因只有一種示例控制所有的祈求。單例類方略導致了一定的限制且給開發帶來了額外的煩惱。Action資源必須是程安全或者同步的。

Struts2Action對象每一種祈求都實例化對象,因此沒有程安全的問題。(實踐中,servlet容器生許多丟的對象對于每一種祈求,多于一種的對象并不影響垃圾搜集)

Servlet依賴

Struts1的Action類依賴于servletAPI以HttpServletRequest和HttpServletResponse作參數傳給execute措施當Action被調用時。

Struts2的Action不和容器有關。Servlet上下文被體現簡樸的Maps,容許Action被獨立的測試。Struts2的Action可以訪問最初的祈求和對應,假如需要的話。然而,其他的架構元素少或者排除直接訪問HttpServletRequest或者HttpServletResponse的需要。易測性

測試Struts1的重要障礙是execute措施暴露了ServletAPI。第三方的擴展,Struts測試用例,提供Struts1的集合對象。

Struts2的Action可以通過實例化Action測試,設置屬性,然後調用措施。依賴注入的支持也是測試變得更簡樸。

溫馨提示

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

評論

0/150

提交評論