知识点记录
????KeepAlive的連接活躍時間當(dāng)然是受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接就會中斷,再新建第二個連接。???
????所以,一般情況下,圖片較多的網(wǎng)站應(yīng)該把KeepAlive設(shè)為On。但是KeepAliveTimeOut應(yīng)該設(shè)置為多少秒就是一個值得討論的問題了。
????如果KeepAliveTimeOut設(shè)置的時間過短,例如設(shè)置為1秒,那么APACHE就會頻繁的建立新連接,當(dāng)然會耗費(fèi)不少的資源;反過來,如果KeepAliveTimeOut設(shè)置的時間過長,例如設(shè)置為300秒,????????
????那么?APACHE中肯定有很多無用的連接會占用服務(wù)器的資源,也不是一件好事。???
????所以,到底要把KeepAliveTimeOut設(shè)置為多少,要看網(wǎng)站的流量、服務(wù)器的配置而定。???
????其實(shí),這和MySql的機(jī)制有點(diǎn)相似,KeepAlive相當(dāng)于mysql_connect或mysql_pconnect,KeepAliveTimeOut相當(dāng)于wait_timeout。?
????# Timeout: The number of seconds before receives and sends time out.
????#Timeout:接收和發(fā)送數(shù)據(jù)的超時設(shè)置,秒數(shù)
????比如Timeout=n 秒,是不是說,比如一個http的tcp連接建立好后,服務(wù)器端最多等待n秒,如果這n秒鐘客戶端沒有發(fā)來請求,服務(wù)器端會斷開連接?
8.eclipse中的refactor工具: ????Push Down 和 Pull Up,分別實(shí)現(xiàn)將類方法或者屬性從一個類移動到其子類或父類中。 9.linux最大線程數(shù) http://hi.baidu.com/dburu/blog/item/f4a61ffae4403d8059ee90bb.html ????幾個命令: ????????查看最大線程數(shù):cat /proc/sys/kernel/threads-max ????????ulimit -a ???????? 10.Node.js的應(yīng)用場景: ????但這些場景均不是Node所擅長的。Node更擅長處理體積小的請求以及基于事件的I/O,使用Node解決客戶端和服務(wù)器之間的快速溝通,使用表單提交將大量的數(shù)據(jù)發(fā)送給服務(wù)器,使用PHP和Perl來處理重型數(shù)據(jù)庫操作以及動態(tài)HTML頁面的生成。使用Node運(yùn)行于服務(wù)器端來處理體積不大的請求。不管是采用Rails還是Spring以及各式各樣的服務(wù)端容器,只要按需索取即可。一定要明白你需要解決的問題是什么,基于此采取最佳解決方案,而不是基于你當(dāng)下所掌握的技能來解決遇到的問題。 Node的簡單的初衷 學(xué)習(xí)Node可能會有些吃力,但是非常值得的。為什么?因?yàn)槟阏趯で蠡贘avaScript的web應(yīng)用的解決方案。這意味著你已有的JavaScript編程技能不會丟掉,當(dāng)你需要使用PHP或者Perl時,你必須重新學(xué)習(xí)一門新的語言,而Node不必如此大動干戈。學(xué)習(xí)新語言帶來的問題比學(xué)習(xí)他們帶來的好處要大的多。 學(xué)習(xí)Node所面臨的挑戰(zhàn)是,你需要更加活躍思維,將程序拆成低耦合的小片段,然后像組裝數(shù)組一樣的組裝他們。但Node和基于事件的I/O并不能解決所有問題,但確定的是,很多關(guān)鍵問題,只能依靠Node來解決。 11.精而不散 ????當(dāng)你越來越深入你的編程時,你會發(fā)現(xiàn)你不必每個工具、API和所使用的框架都達(dá)到精通。將刀用在刀刃上,不要將錘子當(dāng)成鉆頭來使用。了解每個工具所適用的場景和能解決的問題,然后找到這個工具的最適合的應(yīng)用場景。如果你想變成超人式的通才(程序員往往什么都想知道),你離“專家”也就越來越遠(yuǎn),所謂專家,就是指在一兩個方面達(dá)到非常精通。當(dāng)然,每個老板都希望能找到超人式的通才,但這種人往往可遇不可求。 12.思科、華為等設(shè)備基本配置大全(強(qiáng)烈推薦) ???? http://down.51cto.com/data/339087# 13.java編碼規(guī)范: ????注釋規(guī)范: ????① 代碼的版權(quán)信息。 ????② 類描述信息,描述類的主要職責(zé)和用處。 ????③ 方法描述信息,描述方法是做什么的,如何調(diào)用,最好給出調(diào)用代碼示例。 ????④ JavaDoc tags ,用來生成 Html 形式的 API 文檔 ????⑤ 內(nèi)部實(shí)現(xiàn)注釋,用于描述復(fù)雜的算法,長方法,從為什么要這么做角度去 描述? ???? ????1)盡可能在類描述中加入代碼調(diào)用示例,使用<pre></pre>標(biāo)記,提示JavaDoc 工具不要改變格式.? ????2)使用@deprecated 廢棄方法,不要刪掉它。? ????3)對一些基本數(shù)據(jù)類型和不太可能通過繼承進(jìn)行擴(kuò)展的類,應(yīng)聲明為final,提高效率。? ????4)每個方法不超過25行 ????5)里氏代換原則是繼承復(fù)用的基石。? ????6)編寫代碼前,先編寫注釋(可以認(rèn)為是偽代碼) ,先想后寫 ????7) ????8) ????9) ????10) ????11) ????12) ????13) ????14) ????15) ????16) ????17) ????18) ????19) ????20) 14.泛型方法簽名相同,返回值相同,編譯不通過,原因是是jvm支持簽名相同,返回值相同的方法。 ???泛型方法簽名相同,返回值不同,編譯可通過,原因是是jvm支持簽名不同,返回值相同的方法,只是java語法不支持,但是通過泛型又可以。 http://topic.csdn.net/u/20090912/22/faeba87b-25e8-4110-bc1b-791a8aca78e6.html 15.if(1>2) ????String a = "1"; //編譯錯誤 ????原因:java語法限制,if后面要跟一個statement,而一個變量的聲明卻不能算作是一個statement,所以無法通過。 ????建議:所有if語句都用{}包圍 16.form提交主要有下面3種方式:????application/x-www-form-urlencoded:窗體數(shù)據(jù)被編碼為名稱/值對。這是標(biāo)準(zhǔn)的編碼格式。這是默認(rèn)的方式
????multipart/form-data:窗體數(shù)據(jù)被編碼為一條消息,頁上的每個控件對應(yīng)消息中的一個部分。二進(jìn)制數(shù)據(jù)傳輸方式,主要用于上傳文件
????text/plain:窗體數(shù)據(jù)以純文本形式進(jìn)行編碼,其中不含任何控件或格式字符。 17.REST的優(yōu)點(diǎn)
可以利用緩存Cache來提高響應(yīng)速度
通訊本身的無狀態(tài)性可以讓不同的服務(wù)器的處理一系列請求中的不同請求,提高服務(wù)器的擴(kuò)展性
瀏覽器即可作為客戶端,簡化軟件需求
相對于其他疊加在HTTP協(xié)議之上的機(jī)制,REST的軟件依賴性更小
不需要額外的資源發(fā)現(xiàn)機(jī)制
在軟件技術(shù)演進(jìn)中的長期的兼容性更好 18.servlet轉(zhuǎn)發(fā)和重定向的底層實(shí)現(xiàn)區(qū)別: ????sendRedirect???轉(zhuǎn)發(fā)? : 實(shí)際上指定的是瀏覽器的location,因此無論是不是絕對路徑,最后都要被轉(zhuǎn)化為絕對路徑的形式, ???????????????????????????對于參數(shù)的傳遞只通過URL。 ????forward????????重定向:?實(shí)際上通過轉(zhuǎn)發(fā)流完成。服務(wù)端對client的發(fā)送數(shù)據(jù)的過程是通過先將數(shù)據(jù)輸出到緩沖區(qū),然后將緩沖區(qū)發(fā)送到 ???????????????????????????client,合適緩沖區(qū)會發(fā)送呢?三種情況: ???????????????????????????1).緩沖區(qū)滿。2).request請求完成。3).程序調(diào)用flush等方法。 ??????????????????????????????????????????????????????如果在<JSP:FORWORD>之前有很多輸出, 前面的輸出已使緩沖區(qū)滿,將自動輸出到客戶端, ???????????????????????????那么這種重定向方式將不起作用,這一點(diǎn)應(yīng)該特別注意。??? 19.java序列化的到底是什么 ??????請記住序列化機(jī)制只保存對象的類型信息,屬性的類型信息和屬性值,和方法沒有什么關(guān)系,你就是給這個類增加10000個方法,序列化內(nèi)容也不會增加任何東西,不要想當(dāng)然的臆測自己不了解的知識,動手去做! 20.Ajax是否能跨域請求,解決的辦法: ????????http://blog.csdn.net/beidou321/article/details/6490479 21.遍歷map的同時刪除元素,如何避免ConcurrentModificationException. http://www.blogjava.net/EvanLiu/archive/2008/08/31/224453.html ??? 產(chǎn)生ConcurrentModificationException的原因就是: ????執(zhí)行remove(Object o)方法之后,modCount和expectedModCount不相等了。 ????然后當(dāng)代碼執(zhí)行到next()方法時,判斷了checkForComodification(),發(fā)現(xiàn)兩個數(shù)值不等, ????就拋出了該Exception。要避免這個Exception,就應(yīng)該使用remove()方法。 ????也是同樣的原因,但沒有對應(yīng)的add()方法。 ???? ????Iterator 是工作在一個獨(dú)立的線程中,并且擁有一個 mutex 鎖。 ????Iterator 被創(chuàng)建之后會建立一個指向原來對象的單鏈索引表,當(dāng)原來的對象數(shù)量發(fā)生變化時, 這個索引表的內(nèi)容不會同步改變,所以當(dāng)索引指針往后移動的時候就找不到要迭代的對象,所以按照 fail-fast 原則 Iterator 會馬上拋出 java.util.ConcurrentModificationException 異常。所以 Iterator 在工作的時候是不允許被迭代的對象被改變的。但你可以使用 Iterator 本身的方法 remove() 來刪除對象, Iterator.remove() 方法會在刪除當(dāng)前迭代對象的同時維護(hù)索引的一致性。 22.java定時器,計劃任務(wù). Timer類的用法。 ????Timer time = new Timer(); ????timer = new Timer(); ????timer.schedule(new TimerTask() { ???????? @Override ????????public void run() { ?????????????LiveUsers lu = LiveUsers.getInstance(); ???????? } ????}, 0, 15); ????停止任務(wù): ????time.cancle(); 23.關(guān)于Servlet的多線程是如何實(shí)現(xiàn)?
- ????Servlet是單例的,一個servlet只在此servlet被第一次請求時創(chuàng)建一個實(shí)例,而之后的操作都是由容器來管理,容器啟動多個線程調(diào)用這個servlet。
- ????Servlet是運(yùn)行在Servlet容器中的,由Servlet容器來負(fù)責(zé)Servlet實(shí)例的查找、創(chuàng)建以及整個生命周期的管理
- ????Servlet整個生命周期可以分為四個階段:類裝載及實(shí)例創(chuàng)建階段、實(shí)例初始化階段、服務(wù)階段以及實(shí)例銷毀階段。
- ????
- ????struts中action跟servlet也是同樣原理,單例,創(chuàng)建一次,使用N次。所以也要使用實(shí)例字段,除非不會改變的值。?
????struts2中action那就不一樣了,他為每次請求都創(chuàng)建一次,使用一次,創(chuàng)建一次。?所以他可以把頁面上表單寫成自己實(shí)例字段。接受攔截器值注入。
- DAO的公共接口中的方法是否拋出檢查過的異常?
- 如果是的話,拋出何種檢查過的異常?
- 在DAO實(shí)現(xiàn)類中如何處理異常?
- DAO方法應(yīng)該拋出有意義的異常。
- DAO方法不應(yīng)該拋出 java.lang.Exception.java.lang.Exception 太一般化了。它不傳遞關(guān)于底層問題的任何信息。
- DAO方法不應(yīng)該拋出 java.sql.SQLException.SQLException 是一個低級別的 JDBC 異常。一個DAO應(yīng)該力爭封裝JDBC而不是將JDBC公開給應(yīng)用程序的其余部分。
- 只有在可以合理地預(yù)期調(diào)用者可以處理異常時,DAO 接口中的方法才應(yīng)該拋出檢查過的異常。如果調(diào)用者不能以有意義的方式處理這個異常,那么考慮拋出一個未檢查的(運(yùn)行時)異常。
- 如果數(shù)據(jù)訪問代碼捕獲了一個異常,不要忽略它。忽略捕獲的異常的 DAO 是很難進(jìn)行故障診斷的。
- 使用鏈接的異常將低級別的異常轉(zhuǎn)化為高級別的異常。
- 考慮定義標(biāo)準(zhǔn) DAO 異常類。Spring Framework (參閱 參考資料)提供了很好的一套預(yù)定義的 DAO 異常類。
- SCP 用法:http://www.cnblogs.com/codinglog/archive/2009/11/17/1605021.html
- 利用secureCRT自帶工具 sz 和 rz,注:大文件rar等,加上參數(shù) be 上傳如 rz -be (b表示binary)不要用ascii
- 理工puzzty附帶的exe :pscp 多用于windows向linux傳東西 pscp file root@IP:/home
- 1. 資源重用?
由于數(shù)據(jù)庫連接得到重用,避免了頻繁創(chuàng)建、釋放連接引起的大量性能開銷。在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增進(jìn)了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性(減少內(nèi)存碎片以及數(shù)據(jù)庫臨時進(jìn)程/線程的數(shù)量)。?
2. 更快的系統(tǒng)響應(yīng)速度?
數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫連接置于池中備用。此時連接的初始化工作均已完成。對于業(yè)務(wù)請求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫連接初始化和釋放過程的時間開銷,從而縮減了系統(tǒng)整體響應(yīng)時間。?
3. 新的資源分配手段?
對于多應(yīng)用共享同一數(shù)據(jù)庫的系統(tǒng)而言,可在應(yīng)用層通過數(shù)據(jù)庫連接的配置,實(shí)現(xiàn)數(shù)據(jù)庫連接池技術(shù),幾年錢也許還是個新鮮話題,對于目前的業(yè)務(wù)系統(tǒng)而言,如果設(shè)計中還沒有考慮到連接池的應(yīng)用,那么…….快在設(shè)計文檔中加上這部分的內(nèi)容吧。某一應(yīng)用最大可用數(shù)據(jù)庫連接數(shù)的限制,避免某一應(yīng)用獨(dú)占所有數(shù)據(jù)庫資源。?
4. 統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏?
在較為完備的數(shù)據(jù)庫連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的連接占用超時設(shè)定,強(qiáng)制收回被占用連接。從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄漏。一個最小化的數(shù)據(jù)庫連接池實(shí)現(xiàn):? - 介紹及java實(shí)現(xiàn)???? http://www.soft6.com/tech/8/89970.html
????????????執(zhí)行后 返回false 頁面不跳轉(zhuǎn) 保存在當(dāng)前位置 38.直接定義action的目標(biāo),不寫java類。相當(dāng)于一個轉(zhuǎn)發(fā) ????????<!-- 直接導(dǎo)航的的 Action 定義 --> ????????<action name="index" > ????????????<result >/jsp/login.jsp</result> ????????</action> ????十分有用,對于攔截器只攔截jsp的問題 迎刃而解。 39.struts2 標(biāo)簽中插入css屬性: ????struts2標(biāo)簽有兩個應(yīng)用css的屬性:cssClass和cssStyle。cssClass是你在css文件中創(chuàng)建的class的名稱;cssStyle是一個css格式化串(內(nèi)聯(lián)的style)。 ????使用示例如下: ?????<s:checkbox cssClass="mycheckbox" label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/> ????這是css文件: ??????<style> ??????????.mycheckbox{ ????????????/* Your style here */ ??????????} ??????</style> 40.在Struts2中使用servlet?: ????我們?nèi)粝朐趕truts2中使用servlet只需要在struts2配置文件中加入一個constant即可: ????<constantname="struts.action.excludePattern"value="/YourServletPattern"/> ????注: ????????include在英語中是“包含” ????????exclude是它的反義詞 41.改變struts中的.action擴(kuò)展名 ??????<constant?name="struts.action.extension"?value="html"/>放于<struts 之后和<package 之前 42.struts2 的action實(shí)現(xiàn)SessionAware接口,獲取 session的原理。 ????原來默認(rèn)攔截器在處理過程中發(fā)現(xiàn)action實(shí)現(xiàn)了sessionaware接口,便會調(diào)用實(shí)現(xiàn)的setSession方法,將actioncontext中的session注入到目標(biāo)Action 中的session。源碼分析:http://hi.baidu.com/winters1224/blog/item/7299e907c2681798d43f7cc2.html 43.遠(yuǎn)程登錄linux的shell,中文亂碼問題 ????vi /etc/sysconfig/i18n 改為: LANG="zh_CN.GB18030"? LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"? SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"? SYSFONT="lat0-sun16" 44.生成的.class字節(jié)碼文件 當(dāng)中一些名字中包含$之類的是什么? 45.全局?jǐn)r截器過濾非法用戶請求(未登錄等) <interceptors> <!-- 配置未登錄進(jìn)行操作的攔截Q--> <interceptor name="loginInterceptor" class="cn.redcdn.scweb.interceptor.SessionInterceptor"> </interceptor> <!-- 重新封裝一個默認(rèn)的攔截器棧Q --> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="loginInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!-- 為這個包設(shè)置默認(rèn)的攔截器Q--> <default-interceptor-ref name="myDefaultStack" /> <!-- 設(shè)置全局的返回Z--> <global-results> <result name="gotologin">/index.jsp</result> </global-results> 如果要不攔截某個action那么,在某一個action中加入默認(rèn)的攔截器就可以覆蓋全局?jǐn)r截器。?? <action name="regist" class="cn.redcdn.scweb.action.RegistAction"> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/login_complete.jsp</result> <result name="error"></result> </action> 46.threadlocal是什么?用處及用法?綁定數(shù)據(jù)庫連接的意義?弊端? 47.struts2 action 返回類型 result 有幾種 。默認(rèn)的不寫是的是什么類型。參數(shù)傳遞相關(guān)? 48.默認(rèn)的action,當(dāng)訪問不存在action時候就會訪問默認(rèn)action。否則會報一堆錯誤。 http://archive.cnblogs.com/a/2125048/ 49. 一個典型的log4j配置
log4j.rootLogger=DEBUG?
#將DAO層log記錄到DAOLog,allLog中 ?使用時可以get("DAO")
log4j.logger.DAO=DEBUG,A2,A4?
#將邏輯層log記錄到BusinessLog,allLog中?
log4j.logger.Businesslog=DEBUG,A3,A4?
#A1--打印到屏幕上?
log4j.appender.A1=org.apache.log4j.ConsoleAppender?
log4j.appender.A1.layout=org.apache.log4j.PatternLayout?
log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n?
#A2--打印到文件DAOLog中--專門為DAO層服務(wù)?
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender?
log4j.appender.A2.file=DAOLog?
log4j.appender.A2.DatePattern='.'yyyy-MM-dd?
log4j.appender.A2.layout=org.apache.log4j.PatternLayout?
log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}?
method:%l%n%m%n?
#A3--打印到文件BusinessLog中--專門記錄邏輯處理層服務(wù)log信息?
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender?
log4j.appender.A3.file=BusinessLog?
log4j.appender.A3.DatePattern='.'yyyy-MM-dd?
log4j.appender.A3.layout=org.apache.log4j.PatternLayout?
log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}?
method:%l%n%m%n?
#A4--打印到文件alllog中--記錄所有l(wèi)og信息?
log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender?
log4j.appender.A4.file=alllog?
log4j.appender.A4.DatePattern='.'yyyy-MM-dd?
log4j.appender.A4.layout=org.apache.log4j.PatternLayout?
log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}?
method:%l%n%m%n
struts.properties配置文件
#指定Struts2處于開發(fā)狀態(tài)
struts.devMode? =? false
#指定Struts 2 配置文件改變后,?? Web框架是否重新加載Struts 2配置文件
struts.configurations.xml.reload = true
開發(fā)狀態(tài)是什么: Once you set this attribute to true Struts will check the config file for every request. This will save lot of development time as you need not restart server for struts.xml changes.? ? ??轉(zhuǎn)載于:https://www.cnblogs.com/biGpython/archive/2012/03/24/2415647.html
總結(jié)
- 上一篇: ESET最近发现了一款新的Android
- 下一篇: 使用Kinect制作变身钢铁侠