1,Linux下查看文件內容的命令
cat 由第一行開始顯示內容,並將所有內容輸出 tac 從最后一行倒序顯示內容,並將所有內容輸出 more 根據窗口大小,一頁一頁的現實文件內容 less 和more類似,但其優點可以往前翻頁,而且進行可以搜索字符 head 只顯示頭幾行 tail 只顯示最后幾行 nl 類似於cat -n,顯示時輸出行號 tailf 類似於tail -f
tailf logfile 動態跟蹤日志文件logfile,最初的時候打印文件的最后10行內容。
2 ,JVM:Xmx是java的一個選項,用來設置你的應用程序能夠使用的最大內存數(看好,致使你的應用程序,不是整個jvm),如果你的程序要花很大內存的話,那就需要修改缺省的設置,比如配置tomcat的時候,如果流量啊程序啊都很大的話就需要加大這個值了,不過有一點是要記住的,不要大得超過你的機器的內存,那樣你的機器會受不了的,到時候就死翹翹了。
Xms是另一個設置內存的參數,用它來設置程序初始化的時候內存棧的大小,增加這個值的話你的程序的啟動性能會得到提高。不過同樣有前面的限制,以及受到xmx的限制
3,進程的三態模型:
4,java創建一個對象的幾種方法:
4.1.使用new關鍵字這是最常見也是最簡單的創建對象的方式了。通過這種方式,我們可以調用任意的構造函數(無參的和帶參數的)。
Employee emp1 = new Employee(); 0: new #19 // class org/programming/mitra/exercises/Employee 3: dup 4: invokespecial #21 // Method org/programming/mitra/exercises/Employee."":()V
4.2.使用Class類的newInstance方法
我們也可以使用Class類的newInstance方法創建對象。這個newInstance方法調用無參的構造函數創建對象。我們可以通過下面方式調用newInstance方法創建對象:
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance(); 或者 Employee emp2 = Employee.class.newInstance(); 51: invokevirtual #70 // Method java/lang/Class.newInstance:()Ljava/lang/Object;
4.3,使用Constructor類的newInstance方法
和Class類的newInstance方法很像, java.lang.reflect.Constructor類里也有一個newInstance方法可以創建對象。我們可以通過這個newInstance方法調用有參數的和私有的構造函數。
Constructor<Employee> constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance(); 111: invokevirtual #80 // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
這兩種newInstance方法就是大家所說的反射。事實上Class的newInstance方法內部調用Constructor的newInstance方法。這也是眾多框架,如Spring、Hibernate、Struts等使用后者的原因。想了解這兩個newInstance方法的區別,請看這篇Creating objects through Reflection in Java with Example.
4.4.使用clone方法
無論何時我們調用一個對象的clone方法,jvm就會創建一個新的對象,將前面對象的內容全部拷貝進去。用clone方法創建對象並不會調用任何構造函數。
要使用clone方法,我們需要先實現Cloneable接口並實現其定義的clone方法。
Employee emp4 = (Employee) emp3.clone(); 162: invokevirtual #87 // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;
4.5.使用反序列化
當我們序列化和反序列化一個對象,jvm會給我們創建一個單獨的對象。在反序列化時,jvm創建對象並不會調用任何構造函數。
為了反序列化一個對象,我們需要讓我們的類實現Serializable接口
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj")); Employee emp5 = (Employee) in.readObject(); 261: invokevirtual #118 // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;
5,HashSet和HashMap的區別
6,StringBuffer是線程安全,而StringBuilder是線程不安全的
hashtable是線程安全的,hashmap不是線程安全的
7,try{ //執行的代碼,其中可能有異常。一旦發現異常,則立即跳到catch執行。否則不會執行catch里面的內容 }
catch { //除非try里面執行代碼發生了異常,否則這里的代碼不會執行 }
finally { //不管什么情況都會執行,包括try catch 里面用了return ,可以理解為只要執行了try或者catch,就一定會執行 finally }
8,單例模式
9,TCP/IP各層協議