本身天天總結的一些小知識 隨時更新

 

1.  經常使用命令javascript

netstat –a 查看全部的監聽端口css

netstat –an |find /i 「listening/established」>c:\result.txt將監聽/通訊端口結果保存到c盤html

-a 顯示全部鏈接和監聽端口java

-n 以數字形式顯示地址和端口號。 此選項通常與 -a選項組合使用web

-o 顯示與每一個鏈接相關的所屬進程 ID。spring

開始 運行netstatsql

listening表示處於偵聽狀態 便是開放chrome

established表示創建鏈接數據庫

time-wait表示結束鏈接,曾經有過訪問,可是已經結束了apache

關閉某個端口

關閉某個端口方法先netstat –ao 查看端口所在的pid,再tasklist查看pid所對應的的進程,再經過任務管理器關閉該進程

tasklist查看pid所對應的的進程

mstsc/-console 打開遠程桌面

ipconfig  查看ip

 

 

2.  background:url(../images/my_19.jpg) 這裏的兩個點是什麼路徑?

在相對路徑中./表示本文件所在的文件夾,../表示上一級../../表示上上一級的文件夾

3.  document.createElement()的用法

document.createElement()是在對象中建立一個對象,要與appendChild() 或 insertBefore()方法聯合使用。其中,appendChild() 方法在節點的子節點列表末添加新的子節點。insertBefore() 方法在節點的子節點列表任意位置插入新的節點

4.  chrome開發者工具

 

 

5.   wordPress

WordPress 是一種使用 PHP 語言開發的 Blog 引擎,用戶能夠在支持 PHP 和 MySQL 數據庫的服務器上架設本身的 Blog。也能夠認爲 WordPress 就是一個我的信息發佈平臺。

6.  原子性

數據庫事務:一個原子事務要麼完整執行,要麼乾脆不執行。 這意味着,工做單元中的每項任務都必須正確執行。若是有任一任務執行失敗,則整個工做單元或事務就會被終止。即此前對數據所做的任何修改都將被撤銷。若是全部任務都被成功執行,事務就會被提交,即對數據所做的修改將會是永久性的。

7.  裸機備份和熱備份區別

exp/imp是「拍照留念」
archivelog mode的物理backup是「錄像記錄」。

拍照只能是單點的,而「錄像記錄」容許你看到錄像期間的任何一點

8.  頁面打開和關閉時js加載的函數

< body onload = " SetupLeak() "  onunload = " BreakLeak() " > 

9.  js中給dom對象添加屬性
X<div id="test" class="hello"></div>

var test = document.getElementById("test");

test.adang = "adang";

alert(test.adang);

咱們會發現,已經給這個id爲test的DOM元素添加了一個叫作adang的屬性了,而後在js中,能夠調用這個屬性。我在寫js的時候常常用到這種方法,能夠很方便地對某個dom對象添加一些特殊的數據,感受DOM對象就像一個很好用的容器,能夠放一堆數據進去。

script type="text/javascript">
window.onload=function(){
   var test = document.getElementById("test");
   alert(test.adang);
}
</script>
<body>
<div id="test" adang="adang"></div> 
</body>
</html>
=====================================================

此次把擴展的屬性寫到了html標籤上。IE下正常輸出adang,FF下輸出的是undefined。

可是很奇怪的,若是使用DOM提供的方法getAttribute(""),不管是在IE下,仍是FF下,均可以獲得咱們寫在標籤中的自定義屬性。

因此,爲了兼容,咱們要使用getAttribute("")來獲取自定義的標籤屬性的值。

10. sql中的執行順序  

(1).FROM 子句, 組裝來自不一樣數據源的數據

如left join on 先將兩個表按照條件組成一個表,而後再進行where條件篩選

   (2).WHERE 子句, 基於指定的條件對記錄進行篩選
   (3).GROUP BY 子句, 將數據劃分爲多個分組
   (4).使用聚合函數進行計算
   (5).使用 HAVING 子句篩選分組
   (6).計算全部的表達式
   (7).使用 ORDER BY 對結果集進行排序

  1. 1.  
  2. 2.  
  3. 3.  
  4. 4.  
  5. 5.  
  6. 6.  
  7. 7.  
  8. 8.  
  9. 9.  

11. 顯示遊標和隱式的區別

隱式遊標:查詢單行記錄。
Oracle自動在後臺使用的遊標,用戶不參與任何操做!因此對客戶是隱藏的不顯示的!

顯示遊標:查詢多行記錄。
在PL/SQL如何返回進行多行記錄並族行進行讀取,

在F:\數據庫\基礎知識\oracle顯式和隱式遊標.htm裏面介紹了何時使用遊標能夠不打開關閉的狀況

12. spring源代碼分析

BeanFactory:Bean實例被IOC容器進行管理,有它本身的生命週期—>和普通java對象的區別

 

  1. Spring中Assert的使用

AssertAPI

Typically used to validate method arguments rather than configuration properties 一般用來驗證方法參數

詳細用法可可參見F:\java學習\spring\Assert.docx

  1. ServletContext  HtppSession HttpRequest HtppResponse

容器初始化 ServletContext

每一個登陸用戶對應一個HtppSession

每次請求對應一個HttpRequest,HttpResponse

13. elipse泛型報錯解決方法

首先將"Compiler compliance level」設置成1.5以上

 

而後將installed JRES換成1.5的()

 

14. JDK和JRE的區別  餐廳 vs 廚房+餐廳

 

 

 

JDK和JRE的區別,JDK包含了JRE和其餘的一些類庫,且多了server端的虛擬機

若是安裝了jdk,會發現電腦上有兩套JRE。JDK其實已經包括了JRE。

在jsk外層的bin裏面包含有javac等lib裏面包含有開發用的工具類tools.jar等

jdkJRE

server與client裏面的jvm.dll這就是真正的jvm.dll所在(JVM), 在運行由jvm.cfg決定默認java.exe調用的jvm.dll,在jvm.cfg裏面

-server KNOWN
-client KNOWN   server排在前面就默認用server的jvm

client和server中的jvm.dll區別

%JAVA_HOME%/jre/bin/client/jvm.dll
%JAVA_HOME%/jre/bin/server/jvm.dll
   Jvm動態庫有client和server兩個版本,分別針對桌面應用和服務器應用作了相應的優化,client版本加 載速度較快,server版本加載速度較慢但運行起來較快。
   讓Tomcat 使用Server版本的jvm吧  在開始菜單 tomcat5 ->tomcat config的java屬性中 有一項 jvm路徑 指向server目錄下的jvm就好了。

15. 怎麼將多餘的電腦內存當成虛擬硬盤

詳見http://itbbs.pconline.com.cn/diy/15907840.html

 

16. 爲何eclipse不設置jdk也能打開

eclipse是出了名的自動化,他自己集成有JDK。
其實所謂環境變量就是一個路徑,讓程序在編譯時可以經過這一變量找到java存在的路徑。
因此通常要配置環境變量。
而eclipse本身帶有JDK,編譯時調用JDK是從它自帶的JDK裏調用,路徑都是固定好的,因此就不存在配置環境變量的問題了。

假如你本身裝了JDK,須要在命令提示行裏編譯你寫的java文件,或者使用editplus編輯編譯,則須要配置環境變量。

 

17. 關於java的反射及類加載的過程 class的獲取 

看了熔岩的博客http://lavasoft.blog.51cto.com/62575/15433/

深刻研究class類,獲取class的三個方法,我以爲不是很認同

首先 ClassName.class.getDeclareFields();//相似這種方法能夠獲得本類(不包括繼承的字段)的字段,

可是並不會將類加載到jvm中,個人理解是他只是簡單的獲取這個類的字節碼文件

其次,這個Class.forName(「完整類名」),這個纔會加載類

最後,那個getClass()方法必須首先建立出來對象纔可行 或者ClassName.class.getClass();跟第一個相似

直接 ClassName.class.getClass();相似這種,獲取類的字段,方法,構造器,是不會加載類的

         方法列表

Method

.invoke(obj,Object[]args)

從中調用底層方法的對象/用於方法調用的參數  靜態方法能夠省略obj

返回方法處理結果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

類加載

早上犯2的問題。SqlMapClientDaoSupport的實現類裏面大量調用了getSqlMapClientTemplate()這個方法來得到ibatis的curd操做,而後我反編譯了這個SqlMapClientDaoSupport類,發現這個方法是 public final修飾的,我就想了不是除了靜態方法,別的方法不是不能在別的方法內部調用嗎?尼瑪,搞錯了,只有main方法內部,在沒有建立實例的狀況下,才只能調用靜態方法。

只有實例才能調用非靜態方法,你調用這個實例的某個方法A,天然也能再A裏面調用這個實例的方法B

 

 

18. 動態代理

virtual method invocation虛擬方法調用

public interface InvocationHandler

InvocationHandler is the interface implemented by the invocation handler of a proxy instance.

Each proxy instance has an associated invocation handler. When a method is invoked on a proxy instance, the method invocation is encoded and dispatched to the invokemethod of its invocation handler.//調用處理器是一個被一個調用處理的代理實例實現的接口。每一個代理實例都關聯一個調用處理器,當一個方法被一個代理實例反射調用時,就會被其invoke方法處理

java.lang.reflect.Proxy

1.對於有經過接口定義業務方法的類,如何動態建立代理實例

Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods.

public static Object newProxyInstance(ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h)
                               throws IllegalArgumentException

第二個傳入的參數interfaces,代理實現的接口列表

經過如上方法建立一個代理,在代理裏面傳入 調用處理器,目標對象的接口

因此這個目標對象必須是接口的實現,且能夠將目標對象傳入處理器

1.     建立目標類target

2.     建立InvocationHandler實現類,即處理器handler,能夠傳入target

3.     由Proxy靜態方法建立target的代理實例,須要傳入target的全部接口及handler

4.     當代理實例執行方法時,handler就會調用年invoke方法

在invoke方法裏面經過傳入的targret,及執行方法和參數來進行,方法反射執行,及aop邏輯

2.對於沒有經過接口定義業務方法的類,如何動態建立代理實例

Cglib動態代理

具體實例見F:\workspace\Test\src\com\spring\aop\proxy\CglibProxy.java

  1. 建立Cglib代理類實現MethodInterceptor接口,在代理類interceptor(。。。)裏面實現實現處理邏輯
  2. 而後由代理類得到代理實例,當代理實例執行方法時就會執行代理類裏面的interceptor()方法

19. 堆棧問題

堆棧問題詳見個人博客http://www.cnblogs.com/javahuang/articles/3054400.html

20. ibatis的sql中何時須要用到 <![CDATA[  ]]>

<  >  &  這三個符號的時候

21. equals  ==  「」及null

今天extjs從前臺穿過來的數據 我debug發現其值爲」」,而後咱們頭給改爲了 ==null,給哥改錯了

我給改爲了.equals(「」),才最終跑起來

22. eclipse打開報錯

修改方法:eclipse.ini   將 -Xmx512m   改小

23. spring配置文件中id和name區別

通常bean都是對應的id,bean裏面的property對應的就是name

24. ServletContext和ApplicationCcontext

一個是整個web容器,一個是spring容器,其中後者包含在前者裏面

25. synchronized關鍵字

private final Map singletonCache = new HashMap();

synchronized (this.singletonCache) {

         sharedInstance = this.singletonCache.get(beanName);

      }

個人理解是synchronized關鍵字對這個map加鎖,進行同步操做

26. 將當前對象放入屬性構造器

public class XmlBeanFactory extends DefaultListableBeanFactory {

    private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

}

27. elipse安裝插件

將下載的插件jar包直接放入eclipse下面的plugins目錄下面

28. eclipse是怎麼編譯的

eclipse中,不管是java文件仍是xml文件等等,假如你給classes目錄中的編譯文件刪掉了,只須要將src隨便修改下,按ctrl+s就會自動從新編譯

29. java路徑問題

http://www.cnblogs.com/javahuang/archive/2013/05/28/3103760.html

eclipes默認的當前目錄就是你的工程目錄

相對於當前用戶目錄的相對路徑System.getProperty("user.dir")返回的路徑,項目的根路徑

咱們使用的相對路徑,應該使用相對於當前classpath的相對路徑

this.getClass().getClassLoader().getResourceAsStream("com/Book.xml") 這個相對路徑是相對於當前的classpath

獲取當前classpath的絕對路徑獲取方法

System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));//類加載器的路徑

System.out.println(ParseTest.class.getClassLoader().getResource(""));//獲得當前classpath的絕對路徑

個人理解:右鍵-項目-JavaBuildPath-Source-Default output folder這個路徑就是當前的classpath路徑

.表明當前目錄..表明當前目錄的上級目錄

InputStream input = this.getClass().getClassLoader().getResourceAsStream("Book.xml");

這個book.xml是放在當前的classpath下面的(classes目錄下面)個人理解是類加載器會到classpath下面加載類,因此相對路徑默認的就是這個classpth

 

 

30. 加載類的兩種方法ClassLoaderhttp://www.ibm.com/developerworks/cn/java/j-lo-classloader/

類加載器(class loader)用來加載 Java 類到 Java 虛擬機中。通常來講,Java 虛擬機使用 Java 類的方式以下:Java 源程序(.java 文件)在通過 Java 編譯器編譯以後就被轉換成 Java 字節代碼(.class 文件)。類加載器負責讀取 Java 字節代碼,並轉換成 java.lang.Class類的一個實例。每一個這樣的實例用來表示一個 Java 類。經過此實例的 newInstance()方法就能夠建立出該類的一個對象。實際的狀況可能更加複雜,好比 Java 字節代碼多是經過工具動態生成的,也多是經過網絡下載的。

ClassLoadUtil.class.getClassLoader().loadClass(String classname);得到類加載器而後加載類

Class.forName(String classname,boolean initialize,ClassLoader classLoader) 類名、是否初始化該類、使用的類加載器

31. String的方法

String.sunString(index);//返回的是從index開始的子字符串

source.contains(dest);//返回的是source裏面裏否含有dest

source.lastIndexOf(str,fromIndex);//從fromindex處開始反向搜索str第一次出現位置的索引值

32. 接口

爲何電腦主板上還要有內存插槽,顯卡插槽?多浪費機箱空間啊? 直接用電烙鐵把顯卡和內存的引腳一根一根焊到主板上不就得了。 若是你焊錯位置了,說明你焊工很差。 每次拆裝的的時候再繼續用電烙鐵。 請專家們指教

就像吃飯同樣,你實現了吃飯的功能,具體你是怎麼吃得,系統無論,系統只須要知道你想吃飯就好了。

public class JMSMessageListenerServlet extends HttpServlet implements ServletContextListener{

         public void contextInitialized(ServletContextEvent arg0) {

}}

你實現了這個ServletContextListener,在ServletContext建立的時候就會調用這個初始化方法,而且可以得到ServletContext

33. Serializable,Cloneable

Serializable接口

http://blog.csdn.net/yakihappy/article/details/3979373

咱們有時候將一個java 對象變成字節流的形式傳出去或者從一個字節流中恢復成一個
java 對象,例如,要將java 對象存儲到硬盤或者傳送給網絡上的其餘計算機,這個過程
咱們能夠本身寫代碼去把一個java 對象變成某個格式的字節流再傳輸,可是,jre 自己
就提供了這種支持,咱們能夠調用OutputStream的writeObject方法來作,若是要讓java
幫咱們作,要被傳輸的對象必須實現serializable 接口,這樣,javac 編譯時就會進行特
殊處理,編譯的類才能夠被writeObject方法操做,這就是所謂的序列化。須要被序列化
的類必須實現Serializable 接口,該接口是一個mini 接口,其中沒有須要實現的方法,
implements Serializable只是爲了標註該對象是可被序列化的。
例如,在web 開發中,若是對象被保存在了Session 中,tomcat 在重啓時要把Session
對象序列化到硬盤,這個對象就必須實現Serializable接口。若是對象要通過分佈式系統
進行網絡傳輸或經過rmi 等遠程調用,這就須要在網絡上傳輸對象,被傳輸的對象就必
須實現Serializable接口。

Clobeable接口

標記接口,

假設x是一個非空對象,應該有:
x.clone()!=x 爲true,就是說他們不是同一個對象.
x.clone().getClass()==x.getClass() 爲true,他們是同一個類型Class.
x.equals(x.clone()) 爲true,邏輯上應該至關.

ShadowClone和DeepClone,都是調用super.clone(),可是後者作了強制類型轉換

 

 

34. XML的解析

SAX   JDOM   DOM  DOM4J

sax解析SimpleAPI for xml

思路:首先寫業務類(處理器),須要繼承處理器或者實現相應的處理接口,加載XMLReader驅動,獲得解析器,將處理器註冊到解析器上,而後解析器解析xml的時候就會觸發相應處理器上面的方法

解析器:XMLReaderreader=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser")

ContentHandler 是SAX最重要的接口,包含全系列方法。

咱們使用的時候只須要繼承DefaultHandler該類爲4個接口提供了接口實現類     

SAXParser和XMLReader

http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html. take a look at the link for XML reader and have a look athe following link for sax parser.http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html.

Using different parser's depends on what you want your parser to do. If your modifying, deleting contents in xml you can use W3C Dom parser. If you just want to parse and get elements you can use SAX parser. There are a few out there. So it really depends on what you want.

還有一個區別是 XMLReader能夠直接parse(uri) SAXParser必須得帶上parse(inputStream,defaultHandler);帶上事件處理器

DOM解析

解析器 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

               DocumentBuilder builder = factory.newDocumentBuilder(); 

 

  1. Document document = builder.parse(inputStream);  --得到整個dom樹
  2. Element element = document.getDocumentElement(); --得到元素
  3. NodeList bookNodes = element.getElementsByTagName("book");由元素名得到節點 
  4. Element bookElement = (Element) bookNodes.item(i);--遍歷節點,獲得每一個子節點
  5. bookElement.getAttribute("id")—獲得元素節點的屬性
  6. NodeList childNodes = bookElement.getChildNodes();--獲取元素的全部子節點
  7. childNodes.item(j).getFirstChild().getNodeValue() --獲取節點的文本值

 

JDOM解析

  1.  SAXBuilder builder = new SAXBuilder();  
  2.             org.jdom.Document doc = builder.build(new File("F:/xmltest.xml"));  
  3.             Element foo = doc.getRootElement();  
  4.             List allChildren = foo.getChildren();  

JDOM使用起來比較簡單是對DOM的封裝,返回的對象通常都是javacollection

 

 

 

區別:sax解析是從文檔開始,解析每一個元素開始和結束,元素中間文本內容的時候都會觸發相應的解析方法

dom解析先將整個xml所有加載,組成一顆dom

 

35. StringBuffer和StringBuilder的區別

StringBuffer 與 StringBuilder 中的方法和功能徹底是等價的,只是
StringBuffer 中的方法大都採用了 synchronized 關鍵字進行修飾,因
此是線程安全的,而 StringBuilder 沒有這個修飾,能夠被認爲是線程
不安全的。

StringBuffer 始於 JDK 1.0
StringBuilder 始於 JDK 1.5

從 JDK 1.5 開始,帶有字符串變量的鏈接操做(+),JVM 內部採用的是
StringBuilder 來實現的,而以前這個操做是採用 StringBuffer 實現的。

StringBuffer.append(char[],offset,len);//將字符數組從index=offset開始的len個字符插入到StringBuffer中

//the characters to be appended; the index of the first char to append; the number of chars to append

36. left  outer join和 left inner join區別

left outer join 等價於left join

lef inner join是將兩個表相匹配的記錄出如今結果表中

37. 清掉firefox頁面緩存(修改js刷新)

在FireFox 的地址欄目輸入:about:config

network.http.use-cache

設置爲false

在彈出的界面中找到以下項目:

 

browser.cache.check_doc_frequency

 

缺省設置爲3,改成1

 

Set how often to check accuracy of cached documents 設定檢查是否須要更新緩存文檔的頻率

 

    0 : Once per session 每一個進程一次 每次啓動Firefox時檢查

    1 : Each time 每次訪問此頁時檢查

    2 : Never 不檢查

3 : When appropriate/automatically 自動

38. oracle外鍵

外鍵約束是表級約束

constraint 約束名foreign key(約束字段名)references 關聯表名(關聯字段名)

 on delete cascade--級聯刪除,主表刪除,從表跟着刪除

on delete set null--主表數據刪除,關聯數據置空

39. oracle函數

  decode/to_char函數 decode(biz.biz_type, 1, entity.msgtitle||'['||to_char(oper.created_time,'yyyy-MM-dd HH24:mi:ss')||']', entity.msgtitle) as msgtitle

 

40. varhchar,char,varchar2

在oralce中,例如name char(默認的長度是1)固定長度

varchar2(22)這個是可變長度,最大長度爲22

oracle中不能直接用varchar和varchar2

41. session

Ibatis和Hibernate中的Session含義相似,均是表明了數據庫的一個會話。在一個會話中,能夠操做數據庫。

而servlet中的session表明的是一個HTTP會話。它隱含了「面向鏈接」和/或「保持狀態」這樣兩個含義,也能夠理解爲一類用來在客戶端與服務器之間保持狀態的存儲結構,能夠在session中存放相關會話數據

 

42. 類

匿名內部類 http://blog.csdn.net/liuzhidong123/article/details/6561521

 

new 父類構造器(參數列表)|實現接口()//匿名內部類實現一個接口或者繼承一個類

 {

  //匿名內部類的類體部分

 }

 關於匿名內部類還有以下兩條規則:
 1)匿名內部類不能是抽象類,由於系統在建立匿名內部類的時候,會當即建立內部類的對象。所以不容許將匿名內部類
 定義成抽象類。
 2)匿名內部類不等定義構造器,由於匿名內部類沒有類名,因此沒法定義構造器,但匿名內部類能夠定義實例初始化塊,
 經過實例初始化塊來完成構造器須要完成的事情。

  若是匿名內部類須要訪問外部類的局部變量,則必須使用final修飾符來修飾外部類的局部變量

43. 線程Thread

多個線程同時調用同一個實例的方法,只要不共享這個實例的成員變量,不發生同步問題,各自完成各自的操做

對於多線程資源共享的問題,同步機制採用了「以時間換空間」的方式:訪問串行化,對象共享化。而ThreadLocal採用了「以空間換時間」的方式:訪問並行化,對象獨享化。前者僅提供一份變量,讓不一樣的線程排隊訪問,然後者爲每個線程都提供了一份變量,所以能夠同時訪問而互不影響

當多個線程使用同一個實例的成員變量,ThreadLocal的作法是將成員變量放到ThreadLocal裏面,並能夠經過initialValue()初始化值。

而後能夠經過set()get()方法直接獲取值。。。當多個線程同時使用該變量時,每一個線程都會獲得該變量的副本,因此相互之間是不會受到影響的。

用戶能夠根據本身須要,將一些非線程安全的變量以ThreadLocal存放

Service-Oriented Architecture 面向服務架構

ThreadLocal其實就是實例的成員變量能夠初始化值,當多個線程同時使用這個實例時,使用的是這個成員變量的副本,因此每一個線程對這個變量副本進行操做時,不影響其餘線程

44. HTPP報文

 

accept:接收什麼類型的響應

cookie

referer:請求是從哪一個url傳過來的

cache-control:請求但願相應返回的內容在客戶端緩存的時間

  1. //獲取指定名稱的報文頭屬性的值  
  2. java.lang.String getHeader(java.lang.String name)

 

  1. //獲取報文頭中的Cookie(讀取Cookie的報文頭屬性)  
  2.  Cookie[]   getCookies() ;  
  3.   
  4. //獲取客戶端本地化信息(讀取 Accept-Language 的報文頭屬性)  
  5. java.util.Locale    getLocale()   
  6.   
  7. //獲取請求報文體的長度(讀取Content-Length的報文頭屬性)  
  8. int getContentLength();  

 

 

 

響應報文

 

 

  • 1xx 消息,通常是告訴客戶端,請求已經收到了,正在處理,別急...
  • 2xx 處理成功,通常表示:請求收悉、我明白你要的、請求已受理、已經處理完成等信息.
  • 3xx 重定向到其它地方。它讓客戶端再發起一個請求以完成整個處理。
  • 4xx 處理髮生錯誤,責任在客戶端,如客戶端的請求一個不存在的資源,客戶端未被受權,禁止訪問等。
  • 5xx 處理髮生錯誤,責任在服務端,如服務端拋出異常,路由出錯,HTTP版本不支持等

相應報文頭有個ETag屬性,補充Cache-Control,若是這個ETag沒有發生變化,那麼瀏覽器能夠直接從緩存獲取輸出,若是變化了,則能夠從服務器重新獲取輸出頁面。

45. 創建本身的異常處理類

建立一個類繼承Throwable或者其子類

添加構造方法

 

public class MySecondException extends Throwable {   

public MySecondException() {   

super();   

}   

public MySecondException(String msg) {   

super(msg);   

}   

public MySecondException(String msg, Throwable cause) {   

super(msg, cause);   

}   

public MySecondException(Throwable cause) {   

super(cause);   

}   

}  

例如在項目中

   public FrameworkAuthenticationException(String description,

            Throwable rootException)

    {

        this(AUTHENTICATION_SESSION_LOST, description, rootException);

}

 

FrameworkException extends RuntimeException

 

 

 

只須要在定義的異常類中一直super(…)FrameException就能拋出帶有異常代碼額異常描述的異常

最終目的是給這個FrameworkException的如上三個成員變量賦值

這個地方不知道是爲何

只要在異常類中重寫toString方法,就能夠自定義最終顯示頁面上的異常信息

46. 存儲過程當中的匿名塊和命名塊

使用declare或begin關鍵字開頭的叫匿名塊,每次使用均須要進行編譯,不能存儲在數據庫中且不能被其餘PL/SQL調用。而你所謂的存儲過程,存儲函數,觸發器等叫命名塊,一經編譯後面就可直接調用,且能夠存儲在數據庫中,被其餘PL/SQL 調用。

47. 存儲過程遊標

create or replace procedure getcur(p_rc out sys_refcursor)  

    is  

     begin  

          open p_rc for 'select * from item';  

end getcur;  

 sys_refcursor這個是oracle自帶的返回遊標的類型。 

--Fetch遊標
--
使用的時候必需要明確的打開和關閉
declare 
       --類型定義
       cursor c_job
       is
       select empno,ename,job,sal
       from emp
       where job='MANAGER';
       --定義一個遊標變量
       c_row c_job%rowtype;
begin
       open c_job;
         loop
           --提取一行數據到c_row
           fetch c_job into c_row;
           --判讀是否提取到值,沒取到值就退出
           --取到值c_job%notfound 是false
           --取不到值c_job%notfound 是true
           exit when c_job%notfound;
           dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
         end loop;
       --關閉遊標
      close c_job;
end;
 
declare 
      CURSOR
      c_dept(p_deptNo number)
      is
      select * from emp where emp.depno=p_deptNo;
      r_emp emp%rowtype;
begin                                    --for in loop就不須要明確打開和關閉遊標
        for r_emp in c_dept(20) loop
            dbms_output.put_line('員工號:'||r_emp.EMPNO||'員工名:'||r_emp.ENAME||'工資:'||r_emp.SAL);
        end loop;
end;

fetch

48. 存儲過程

在java代碼中,PreparedStatement須要單個執行插入,executeUpdate().,executeQuery()

存儲過程要用CallableStatement,,prepareCall(…),cs.rege….(index,type);

create or replace proname(…)

is

begin

….

end proname;

49. JDBC全解析

註冊驅動,構造鏈接

具體的實例見我寫的JDBC操做實例

statement每次執行sql語句,相關數據庫都要執行sql語句的編譯

preparedstatement是預編譯得,   preparedstatement支持批處理

statement執行update必須有參數

preparedStatement在建立時已經預編譯了,沒有參數

ResultSet能得到結果集的元數據,可以進行各類指針操做,假如在語句中設置了type和Concurrency能夠在結果集中進行更新和插入操做

CallableStatement可以進行存儲過程的執行

遊標

ResultSet()結果集,能夠當作結果的集合,rs.next();等每一個函數能夠看作是對遊標的操做,rs既能操做遊標上下移動,又能對當前遊標對應的記錄進行操做,並且可以進行修改和插入、刪除操做 注意:對遊標進行刪改操做時,必須設定(若是數據庫記錄改動了,不反映到rs裏面;能用rs更新數據庫中的表面;),同時取結果集的sql必須明確字段,不能用select*from(此sql默認結果集只讀)conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

50. JVM內存結構和6大區域

PC Register(PC寄存器) 記錄當前線程執行字節碼的行號(線程私有)

JVM 線程私有,保存基本類型變量及對象的指針                                      -Xss

堆(Heap)JVM用來存儲對象實例以及數組值的區域                                                   -Xms(JVM可申請的最小heap內存)  -Xmx(最大)

方法區域(MethodArea 方法區域存放了所加載的類的信息(名稱、修飾符等)、類中的靜態變量、類中定義爲final類型的常量、類中的Field信息、類中的方法信息  持久代XX:PermSize(最小)-XX:MaxPermSize

運行時常量池(RuntimeConstant Pool)類中的固定的常量信息、方法和Field的引用信息等 空間從方法區分配

本地方法堆棧(NativeMethod Stacks)JVM採用本地方法堆棧來支持native方法的執行,此區域用於存儲每一個native方法調用的狀態。

51. 用notepad++格式化xml

插件xmlTools,Pretty print(XML only - with line breaks)     Ctrl+Alt+Shift+B

52. Collections

經常使用的方法,

53. 鎖

wait(),notify(),notifyAll()不屬於Thread類,而是屬於Object基礎類,也就是說每一個對像都有wait(),notify(),notifyAll()的功能。由於都個對像都有鎖,鎖是每一個對像的基礎,固然操做鎖的方法也是最基礎了。

wait():

等待對象的同步鎖,須要得到該對象的同步鎖才能夠調用這個方法,不然編譯能夠經過,但運行時會收到一個異常:IllegalMonitorStateException。

調用任意對象的 wait() 方法致使該線程阻塞,該線程不可繼續執行,而且該對象上的鎖被釋放。

notify():

喚醒在等待該對象同步鎖的線程(只喚醒一個,若是有多個在等待),注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。

調用任意對象的notify()方法則致使因調用該對象的 wait()方法而阻塞的線程中隨機選擇的一個解除阻塞(但要等到得到鎖後才真正可執行)。

notifyAll():

喚醒全部等待的線程,注意喚醒的是notify以前wait的線程,對於notify以後的wait線程是沒有效果的。

1.有synchronized的地方不必定有wait,notify

2.有wait,notify的地方必有synchronized.這是由於wait和notify不是屬於線程類,而是每個對象都具備的方法,並且,這兩個方法都和對象鎖有關,有鎖的地方,必有synchronized。

54. CVS

Concurrent Version System版本控制系統

55. RMI

RMI說白了,就是提供了一種遠程的方法調用。 這種調用簡單方便,能夠傳遞複雜java對象。如今流行的j2ee中的EJB的底層實現技術就是RMI,EJB的調用就是通過封裝的,更高級的RMI調用。 

  1. 定義一個遠程接口的接口,該接口中的每個方法必須聲明它將產生一個RemoteException異常。 
    二、定義一個實現該接口的類。 
    三、使用RMIC程序生成遠程實現所需的殘根和框架。 

cd到classpath目下到rmic classname  若是有包名記得帶包名
四、建立一個服務器,用於發佈2中寫好的類。 
5. 建立一個客戶程序進行RMI調用。 
六、啓動rmiRegistry並運行本身的遠程服務器和客戶程序。

JRMP(java遠程消息交換協議)  java remote message protocol

 

1、RMI(遠程方法調用)的組成

一個正常工做的RMI系統由下面幾個部分組成: 

·遠程服務的接口定義 
·遠程服務接口的具體實現 
·樁(Stub)和框架(Skeleton)文件 
·一個運行遠程服務的服務器 
·一個RMI命名服務,它容許客戶端去發現這個遠程服務 
·類文件的提供者(一個HTTP或者FTP服務器) 
·一個須要這個遠程服務的客戶端程序 

 

56. oracle刪除用戶和表空間

對於單個user和tablespace 來講, 可使用以下命令來完成。

 步驟一:  刪除user

drop user ×× cascade

說明: 刪除了user,只是刪除了該user下的schema objects,是不會刪除相應的tablespace的。

步驟二: 刪除tablespace

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

--刪除空的表空間,可是不包含物理文件
drop tablespace tablespace_name;
--刪除非空表空間,可是不包含物理文件
drop tablespace tablespace_name including contents;
--刪除空表空間,包含物理文件
drop tablespace tablespace_name including datafiles;
--刪除非空表空間,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--若是其餘表空間中的表有外鍵等約束關聯到了本表空間中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

57. Servlet中的response和request

javax.servlet.http.HttpServletResponse

response.addHeader("Pragma", "no-cache");向已存在的消息頭添加值

response.setIntHeader("c-result-status", resultStatus);向消息頭中新添加屬性

 

 

58. web項目導入jar包

新建了web項目經過右鍵build path導入jar包能正常編譯,可是當我部署到tomcat裏面就報錯classNotFoundException,打開tomcat部署目錄,發如今web-info/lib下面沒有我導入的jar包

裏面eclipse引用library (即我build path的jar包)是爲了編譯代碼生成WEB-INF/classes裏面的class文件使用,使用eclipse j2ee IDE時,會將WEB-INF/lib中全部的lib自動加入到library中,而我bp的jar包不會到lib裏面,因此須要手動拷貝

 

struts2須要導入的基礎jar

struts2-core-2.0.6.jar
xwork-2.0.4.jar
ognl-2.6.11.jar
freemarker-2.3.8.jar
commons-logging-1.0.4.jar

59. web.xml全解

url-pattern

精確路徑匹配   /test /*  /test會匹配前面

最長路徑匹配  /test/*  /test/a/*  /test/a/會匹配後面

擴展匹配   *.action

 

路徑映射」/’開頭」/*」結尾

」*.」開頭拓展映射

 「/」 是用來定義default servlet映射

 剩下的都是用來定義詳細映射的。好比: /aa/bb/cc.action

/*.action 沒法斷定是路徑映射仍是拓展映射     是指url-pattern包含/*.action

/hello.action是能夠的   /hello.*是不行的 /*/*也是不行的*只能出現一次  /test/*/haha/*也不行

若是同時配置了struts2servlet,url-pattern /*對全部鏈接進行攔截,那麼servlet配置url-pattern就沒有做用,能夠指定struts2url-pattern或者指定struts2load-on-startup

 

                        |-- Context Path --|-- Servlet Path -|--Path Info--|
http://www.myserver.com     /mywebapp        /helloServlet      /hello
                        |-------- Request URI  ----------------------------|
 

60. 修改java文件不重啓tomcat的方法

<Context docBase="E:\apache-tomcat-6.0.14\webapps\abs" path="/abs" reloadable="false" source="org.eclipse.jst.j2ee.server:abs"/></Host>

61. struts2

<package name="com.cdb" extends="struts-default,

繼承以後能使用struts-default裏面定義的攔截器

struts.xml 爲Struts 2的核心配置文件。struts.xml文件主要負責管理應用中的Action映射,以及該Action包含的Result定義等。
struts.xml中主要配置Struts項目的一些全局的屬性,用戶請求和響應Action之間的對應關係,以及配置Action中可能用到的參數,以及處理結果的返回頁面。還包括各類攔截器的配置等。

AOP    棧結構,1.執行失敗,返回resultCode給上層攔截器返回2.執行成功,返回invocation.invoke(),繼續調用下一個攔截器3.若是已經到最內層action,執行action,返回resultCode,依次返回給攔截器返回

若是將R=invocation.invoke()寫在result以前,那麼R以前代碼在執行action以前執行,R以後代碼在執行action以後執行

PreResultListener 用法有待研究

struts-default.xml裏面定義了一系列的攔截器

 

 

62. ibatis

spring集成ibatis

  1. 配置dataSource
  2. 配置sqlMapClient(dataSource configLocation lobHandler)

注:lobHandler必須配置,不然會報錯;confiLocation裏面的ibatis配置文件必須有sql-map的配置

 

17類加載

SqlMapClientTempleate這個類是ibatis的真正具體curd操做類,該類已經存在setSqlMapClent()方法,這個類須要SqlMapClient,因此在spring配置時,須要在其實現類裏面注入屬性SqlMapClient,SqlMapClientTemplate的實現類就能經過getSqlMapClientTemplat()獲得SqlMapClientTemplate來進行相應的curd操做

  public final void setSqlMapClient(SqlMapClient sqlMapClient)

  {

    if (!(this.externalTemplate))

      this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);

  },而後經過這個方法獲得這個類,進行相應的curd操做 

public final SqlMapClientTemplate getSqlMapClientTemplate()

  {

    return this.sqlMapClientTemplate;

           }

因此須要配置好這個SqlMapClient,這個類須要注入以下3個屬性,缺一不可,不然應用啓動時會報錯

 

須要在SqlMapClientTemplate的實現

ibatis中的SqlMapClient繼承了SqlMapTran和SqlMapExecutor,後者包含curd方法

SqlMapClientTemplate是spring的方法,其CURD歸根到底仍是調用SqlMapExecutor的方法

com.ibatis.sqlmap.client.SqlMapClient 這個是ibaisd的接口,繼承了SqlMaoExecutor和SqlMapTransactionManager接口

我理解的resultClassresultMap

前一段一直對ibatis的queryForList很迷茫,想一想

63. spring

org.springframework.core.io.Resource 

加載文件資源

Spring 定義了一個 org.springframework.core.io.Resource 接口,Resource 接口是爲了統一各類類型不一樣的資源而定義的,Spring 提供了若干 Resource 接口的實現類,這些實現類能夠輕鬆地加載不一樣類型的底層資源,並提供了獲取文件名、URL 地址以及資源內容的操做方法。

訪問文件資源

假設有一個文件地位於 Web 應用的類路徑下,您能夠經過如下方式對這個文件資源進行訪問:

  • 經過 FileSystemResource 以文件系統絕對路徑的方式進行訪問;
  • 經過 ClassPathResource 以類路徑的方式進行訪問;
  • 經過 ServletContextResource 以相對於Web應用根目錄的方式進行訪問。

註解

@scope等價於scope屬性 @PostConstruct等價於init-method @PreDestroy等價於destory-method

@

Spring中BeanFactory與ApplicationContext的差異

後者是前者功能的拓展,如我今天使用的@autowire在前者一直報空指針異常。。。

ApplicationContext ctx = new ClassPathXmlApplicationContext("sayLanguage.xml");

64. spring整合srruts2

大概思路是:在web.xml裏面配置struts2的fliter,配置spring的監聽器,初始化spring容器

在spring配置文件中,能夠用<context:component-scan base-package="com.yyl.rp,com.rp.yyl" />,該配置會掃描com.yyl.rp和com.rp.yyl下面的全部類,若是有相似service註解,就會將其初始化成spring容器的一個bean。當一個請求到達web容器時,建立了一個action實例,若是在action容器裏面存在@Autowire註解,那麼此時若是有插件spring-struts2-plugin.jar,該插件的做用是從spring容器中取得autowire類型對應的bean給它注入到action實例裏面。

65. log4j.properties

log4j.rootLogger = [ level ] , appenderName1 定義根Logger,全部>=level級別的日誌都會被輸出

 

#set logger level and assign appenders

log4j.rootLogger=DEBUG, stdout, A1

#log4j.rootLogger=ERROR, A1

log4j.logger.JMSLOG=ALL, JMSLOG

 

log4j.appender.A1=org.apache.log4j.RollingFileAppender

log4j.appender.A1.file=e:/abs_logs/abs_log-

log4j.appender.A1.MaxFileSize=10MB

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss.SSS}[%c]-[%p] %m%n

 

66. HTML中標籤

link 標籤是單獨出現的

屬性

href -- 指定須要加載的資源(CSS文件)的地址URI

media -- 媒體類型,參見CSS教程

rel -- 指定連接類型  告訴瀏覽器你link進來的是個樣式表文件

rev -- 指定連接類型

type -- 包含內容的類型,通常使用type="text/css"

meta

<meta> 元素可提供有關頁面的元信息(meta-information),好比針對搜索引擎和更新頻度的描述和關鍵詞。

<meta> 標籤位於文檔的頭部,不包含任何內容。<meta> 標籤的屬性定義了與文檔相關聯的名稱/值對。

 

<meta http-equiv="Content-Type" content="html/json; charset=utf-8" />

HTML中td元素的nowrap屬性表示禁止單元格中的文字自動換行。

<p><span style="color:red;font-family:楷體">呵呵</span></p>p是段落

<table align=」left/right/center」> table位於左中右測試結果http://www.w3school.com.cn/tiy/t.asp?f=html_table_align2

 

67. oracle執行計劃  sql優化

A update sta_ctrt a set a.loan_quty_type_cd=(select nvl(b.identlevel,0) identlevel from etr.etr_loan b where a.ctrt_no=b.loan_no)

where exists(select 1 from etr.etr_loan c where a.ctrt_no=c.loan_no);

B merge   into sta_ctrt a

using   etr.etr_loan b

on      (a.ctrt_no=b.loan_no)

when matched then update set a.loan_quty_type_cd=nvl(b.identlevel,13);

A

Bmerge的語法是用表b中的每條記錄來跟表a進行匹配,若是知足了就執行then操做

 

 

rownum 僞字段

1 Oracle executes your query.  執行query

2 Oracle fetches the first row and calls it row number 1. 將查詢出來的第一行rownum設置爲1

3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row.

判斷rownum是否符合條件,若是符合則返回該行,不然丟棄

4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).

將下一行的rownum+1

5 Go to step 3.

因此where rownum>n rownum=n返回的數據一直會爲空  (n>1)

能夠select * from(select rownum,a.* from tablename a) b

rowid在整個row的生命週期內是惟一的。

在Oracle的邏輯存儲中,表空間由各類類型的段(Storage)組成,而段則由區(extent)組成,區是段分配存儲的單位。當創建一個表段時,Oracle爲該段分配初始區,若是以後因爲數據的插入,初始區裝滿後,將繼續分配下一個區。

 

68. java回調函數

a實現某個接口,b預留了該接口,建立b對象,將a放進去,執行b的方法,至關於執行a的

69. try catch finally

若是在try裏面發生了異常,在異常開始的地方終止運行,而後執行finally裏面的代碼。

若是在try和finally裏面都有return的話,先執行try裏面的代碼,而後執行finally裏面的代碼,最後返回值爲finally裏面的return

if()else if(){}else if(){}else{},若是第一個if語句知足了,後面的else都不會執行

相關文章
相關標籤/搜索