国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

基礎(chǔ)知識匯總(一)

2019-11-14 09:38:13
字體:
供稿:網(wǎng)友
0.bootstrap常用英語:typography 排版Glyphicon 字形圖標(biāo)breadcrumb 面包碎屑(這里是用來在導(dǎo)航中顯示當(dāng)前頁面的位置)Pagination 分頁badges 徽章(舉例顯示4條未讀消息的提示,帶圓形背景)jumbotron 超大屏幕tooltip 提示工具插件popover 彈出框插件affix 附加導(dǎo)航插件text-muted muted柔和的,意思是文字顏色淡灰色scheme 策劃計劃schema 概要,計劃,圖表;tab 選項卡1. java中的一個byte,其范圍是-128~127的.byte是一個字節(jié)保存的,有8個位,即8個0、1。8位的第一個位是符號位,也就是說0000 0001代表的是數(shù)字1 1000 0000代表的就是-1所以正數(shù)最大位0111 1111,也就是數(shù)字127,  負數(shù)最大為1111 1111,也就是數(shù)字-1282.byte b;//指定變量b為byte型 (最小值-128 最大值127) 一個常量,保存 byte 類型可取的最大值,即 27-1。(127)  一個常量,保存 byte 類型可取的最小值,即 -27。(-128)    ---------------------------------------------------  short s;//指定變量s為short型   保存 short 可取的最大值的常量,最大值為 215-1。(32 767)  保存 short 可取的最小值的常量,最小值為 -215。(-32 768)   --------------------------------------------------- int i;//指定變量i為int型  值為 231-1 ( 2147483647 二十一億)的常量,它表示 int 類型能夠表示的最大值。  值為 -231 的常量,它表示 int 類型能夠表示的最小值。   ---------------------------------------------------  long l;//指定變量l為long型 3.String是不可變的。也就是說只要用String定義了一個對象,當(dāng)對他進行修改的時候,都是新建一個String,而不是在原有的基礎(chǔ)上修改而成的。StringBuffer可變。線程安全~所以效率比StringBuilder低一點。StringBuilder可變字符串,可通過aappend等方法對字符串進行修改。線程不安全,是sun為了追求極致寫的。效率比StringBuffer高。3.1.int和Integer的區(qū)別int 是基本數(shù)據(jù)類型,而Integer是一個對象,也是引用類型。 int定義的不易擴展,而Integer定義的,可以借助里面的方法來進行擴展。Integer i = null;說白了,Integer就是一個引用,可以指向null。而int必須賦數(shù)字。Java是一個近乎純潔的面向?qū)ο缶幊陶Z言,但是為了編程的方便還是引入了基本數(shù)據(jù)類型,但是為了能夠?qū)⑦@些基本數(shù)據(jù)類型當(dāng)成對象操作,Java為每 一個基本數(shù)據(jù)類型都引入了對應(yīng)的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉(zhuǎn)換。Java 為每個原始類型提供了包裝類型:     - 原始類型: boolean,char,byte,short,int,long,float,double     - 包裝類型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Doubleint基本數(shù)據(jù)運算速度快,而在map、list等只能裝Object的容器中,就只能使用Integer等外覆類。4.****************************Set、List和Map可以看做集合的三大類。Set存儲的零散的元素且不允許有重復(fù)元素(數(shù)學(xué)中的集合也是如此),List是線性結(jié)構(gòu)的容器,適用于按數(shù)值索引訪問元素的情形。     List集合是有序集合,集合中的元素可以重復(fù),訪問集合中的元素可以根據(jù)元素的索引來訪問。    Set集合是無序集合,集合中的元素不可以重復(fù),訪問集合中的元素只能根據(jù)元素本身來訪問(也是不能集合里元素不允許重復(fù)的原因)。     Map集合中保存Key-value對形式的元素,訪問時只能根據(jù)每項元素的key來訪問其value。 ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),Vector中的方法由于添加了synchronized修飾,因此Vector是線程安全的容器,但性能上較ArrayList差,因此已經(jīng)是Java中的遺留容器。(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、PRoperties都是遺留容器)對于Set、List和Map三種集合,最常用的實現(xiàn)類分別是HashSet、ArrayList和HashMap三個實現(xiàn)類。1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。2.對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。LinkedList 采用的將對象存放在獨立的空間中,而且在每個空間中還保存下一個鏈接的索引 但是缺點就是查找非常麻煩 要叢第一個索引開始.是批量隨機的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList.因為ArrayList每插入一條數(shù)據(jù),要移動插入點及之后的所有數(shù)據(jù)。  這一點我做了實驗。在分別有200000條“記錄”的ArrayList和LinkedList的首位插入20000條數(shù)據(jù),LinkedList耗時約是ArrayList的20分之1。Vector:線程同步HashSet:(無序)哈希表是通過使用稱為散列法的機制來存儲信息的,元素并沒有以某種特定順序來存放;LinkedHashSet:(插入順序)以元素插入的順序來維護集合的鏈接表,允許以插入的順序在集合中迭代;  TreeSet:(升序)提供一個使用樹結(jié)構(gòu)存儲Set接口的實現(xiàn),對象以升序順序存儲,訪問和遍歷的時間很快。HashSet<String> hs = new HashSet<String>();          hs.add("B");          hs.add("A");          hs.add("D");          hs.add("E");          hs.add("C");          hs.add("F");          System.out.println("HashSet 順序:/n"+hs);                    LinkedHashSet<String> lhs = new LinkedHashSet<String>();          lhs.add("B");          lhs.add("A");          lhs.add("D");          lhs.add("E");          lhs.add("C");          lhs.add("F");          System.out.println("LinkedHashSet 順序:/n"+lhs);                    TreeSet<String> ts = new TreeSet<String>();          ts.add("B");          ts.add("A");          ts.add("D");          ts.add("E");          ts.add("C");          ts.add("F");          System.out.println("TreeSet 順序:/n"+ts);//輸出結(jié)果HashSet 順序:[D, E, F, A, B, C]LinkedHashSet 順序:[B, A, D, E, C, F]TreeSet 順序:[A, B, C, D, E, F]********set和map區(qū)別***********set里元素都是散養(yǎng)的且不重復(fù),map鍵值對,允許多鍵對一值,但不能一鍵對多值,因為你根本知道選哪個才對。set里放對象,map里放鍵值對。首先加入元素的形式,set:List<Employee> list = new ArrayList<Employee>();     // Java 7的鉆石語法(構(gòu)造器后面的尖括號中不需要寫類型)     list.add(new Employee(Bob YANG, 22, Shanghai, 10086, waiter)); map:Map<String, String> map = new HashMap<String, String>();    map.put("obama", "present");set中的元素可以是{[name=Bob YANG, age=22, address=Shanghai, phone=10086, job=waiter],[...],[...],[...]}map中的元素則是這個樣子的{obama=present, justin=singer, mao=chairman}hashmap,linkdedhashmap,treemap區(qū)別HashMap 隨機排列,允許一個鍵為null,允許多條值為null,不支持線程的同步,最常用的Map,它根據(jù)鍵的HashCode值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值TreeMap 升序排列LinkedHashMap 插入順序排列,是HashMap的一個子類,Hashtable 與HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導(dǎo)致了 Hashtable在寫入時會比較慢。**********HashTable與HashMap的區(qū)別************第一:我們從他們的定義就可以看出他們的不同,HashTable基于Dictionary類,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可將鍵映射到相應(yīng)值的類的抽象父類,而AbstractMap是基于Map接口的骨干實現(xiàn),它以最大限度地減少實現(xiàn)此接口所需的工作。第二:HashMap可以允許存在一個為null的key和任意個為null的value,但是HashTable中的key和value都不允許為null。5.*********棧,堆,方法區(qū)*********================方法區(qū)(非堆):是各個線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機加載的類信息、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機中所管理的內(nèi)存中區(qū)域最大的一塊,是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機啟動時創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內(nèi)存。java堆是垃圾收集器管理的主要區(qū)域。java虛擬機棧:線程私有的,它的生命周期與線程相同。每個方法被執(zhí)行的時候都會同時創(chuàng)建一個棧幀,用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每個方法被調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著一個棧幀在虛擬機中從入棧到出棧的過程。====================堆區(qū): 1.存儲的全部是對象,每個對象都包含一個與之對應(yīng)的class的信息。(class的目的是得到操作指令) 2.jvm只有一個堆區(qū)(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身 棧區(qū): 1.每個線程包含一個棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型的對象和自定義對象的引用(不是對象),對象都存放在堆區(qū)中 2.每個棧中的數(shù)據(jù)(原始類型和對象引用)都是私有的,其他棧不能訪問。 3.棧分為3個部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。 方法區(qū): 1.又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享。方法區(qū)包含所有的class和static變量。 2.方法區(qū)中包含的都是在整個程序中永遠唯一的元素,如class,static變量。======================棧里存放的是值類型(int、float等)的值和引用類型(String、你自己創(chuàng)建的類對象等)在堆中的地址;堆中存放引用類u型的值,如果堆中某個值的地址在棧中沒有被指向,他就會被GC回收。方法區(qū)存儲所有的類和靜態(tài)變量。小總結(jié):方法區(qū)放類信息、靜態(tài)變量;堆放對象;棧線程私有,放基本類型變量(如int)和對象地址(在堆里的地址)。6.***************inputstream的.read(byte[] b)這個方法是先規(guī)定一個數(shù)組長度,將這個流中的字節(jié)緩沖到數(shù)組b中,返回的這個數(shù)組中的字節(jié)個數(shù),這個緩沖區(qū)沒有滿的話,則返回真實的字節(jié)個數(shù),到未尾時都返回-1byte[] buffer = new byte[512];int bytesReaded;while((bytesReaded = in.read(buffer)) != -1) {out.write(buffer, 0, bytesReaded);}總結(jié),每次in.read(buffer)返回的都是512,唯獨最后一次返回的是該多少是多少,比如37。7.**********簡單工廠模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式。就是專門寫一個類,他有一個方法根據(jù)傳入的參數(shù)不同,返回不同的對象。所謂簡單工廠模式, 就是將容易變化的地方, 考慮用一個獨立Class來進行創(chuàng)造實體(Object)的過程.目的: 合并創(chuàng)造實體的動作, 統(tǒng)一以變量處理之. 使得新增實體種類時, 可以不修改到已有程序.public class Animal{}public class Cat extends Animal{}public class Dog extends Animal{}public class Fish extends Animal{}/** 工廠類 */public class AnimalFactory {public static getAnimal(String name){Animal animal = null;if("Cat".equals(name)){animal = new Cat();}else if("Dog".equals(name)){animal = new Dog();}else if("Fish".equals(name)){animal = new Fish();}return animal;}}public class Test{ public static void main(String[] args){ Animal a1 = AnimalFactory.getAnimal("Cat"); }}8.*******Object serialization 允許你將實現(xiàn)了Serializable接口的對象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。舉個例子:網(wǎng)絡(luò)傳輸?shù)臅r候,可以傳字符串,亦可以傳對象object,例如socket,傳字符串的時候接收方很容易解析出來,但是,傳一個對象的時候,對方讀完字節(jié)流后,不知道你傳的什么對象,所以沒辦法給轉(zhuǎn)成原來的對象并解析對象的屬性,這時候就要用到序列化和反序列化。類實現(xiàn)序列化接口,socket發(fā)送這個對象的字節(jié)流,接收方到流后就可以將流反序列化成對象,然后使用對象的方法和屬性。9.********java單例模式確保一個類只有一個實例,自行提供這個實例并向整個系統(tǒng)提供這個實例。特點:1,一個類只能有一個實例;2,自己創(chuàng)建這個實例;3,整個系統(tǒng)都要使用這個實例。單例模式,能避免實例重復(fù)創(chuàng)建;單例模式,應(yīng)用于避免存在多個實例引起程序邏輯錯誤的場合;單例模式,較節(jié)約內(nèi)存。餓漢式class Singleton {private static Singleton instance=new Singleton();private Singleton(){}static Singleton getInstance() {return instance;}}懶漢式class Singleton {private static Singleton instance=null;private Singleton(){}static Singleton getInstance() {if(instance==null)instance=new Singleton();return instance;}}10.*******MySQL的left join技術(shù)表book+---------+-----------+-------+--------+| book_id | book_name | price | author |+---------+-----------+-------+--------+|       1 | javaSE    |    20 | ligang ||       2 | javaEE    |    30 | lihua  |+---------+-----------+-------+--------+表employee+----+---------+--------+--------+-------+---------------------+| id | name    | dept   | salary | level | date                |+----+---------+--------+--------+-------+---------------------+|  1 | tom     | 開發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||  2 | jack    | 開發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 ||  3 | dana    | 董事會 |  15000 |     1 | 2000-02-01 00:04:06 ||  4 | lorenzo | 董事會 |  30000 |     1 | 2000-01-01 00:05:19 ||  5 | sonen   | 銷售部 |   3000 |     3 | 2015-01-04 00:06:02 ||  6 | conor   | 銷售部 |   1800 |     3 | 2014-04-12 00:06:52 ||  7 | bisping | 銷售部 |   2600 |     3 | 2014-01-18 00:17:50 |+----+---------+--------+--------+-------+---------------------+ select * from book left join employee on book.book_id=employee.id; +---------+-----------+-------+--------+----+------+--------+--------+-------+---------------------+| book_id | book_name | price | author | id | name | dept   | salary | level | date                |+---------+-----------+-------+--------+----+------+--------+--------+-------+---------------------+|       1 | javaSE    |    20 | ligang |  1 | tom  | 開發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||       2 | javaEE    |    30 | lihua  |  2 | jack | 開發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 |+---------+-----------+-------+--------+----+------+--------+--------+-------+---------------------+select * from employee left join book on employee.id = book.book_id;+----+---------+--------+--------+-------+---------------------+---------+-----------+-------+--------+| id | name    | dept   | salary | level | date                | book_id | book_name | price | author |+----+---------+--------+--------+-------+---------------------+---------+-----------+-------+--------+|  1 | tom     | 開發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 |       1 | javaSE    |    20 | ligang ||  2 | jack    | 開發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 |       2 | javaEE    |    30 | lihua  ||  3 | dana    | 董事會 |  15000 |     1 | 2000-02-01 00:04:06 | NULL    | NULL      | NULL  | NULL   ||  4 | lorenzo | 董事會 |  30000 |     1 | 2000-01-01 00:05:19 | NULL    | NULL      | NULL  | NULL   ||  5 | sonen   | 銷售部 |   3000 |     3 | 2015-01-04 00:06:02 | NULL    | NULL      | NULL  | NULL   ||  6 | conor   | 銷售部 |   1800 |     3 | 2014-04-12 00:06:52 | NULL    | NULL      | NULL  | NULL   ||  7 | bisping | 銷售部 |   2600 |     3 | 2014-01-18 00:17:50 | NULL    | NULL      | NULL  | NULL   |+----+---------+--------+--------+-------+---------------------+---------+-----------+-------+--------+也就是說,left join就是兩個表按某種條件焊接在一起,比如id相同,既然前頭left join后頭,那么前頭自然在左邊,后頭在右邊。左邊的沒有內(nèi)容了,右邊的即使有內(nèi)容也不顯示;左邊有多余,右邊沒有也得按null顯示。以左表為中心,返回左表中符合條件的所有記錄以及右表中聯(lián)結(jié)字段相等的記錄——當(dāng)右表中無相應(yīng)聯(lián)接記錄時,返回空值select * from book right join employee on book.book_id=employee.id;+---------+-----------+-------+--------+----+---------+--------+--------+-------+---------------------+| book_id | book_name | price | author | id | name    | dept   | salary | level | date                |+---------+-----------+-------+--------+----+---------+--------+--------+-------+---------------------+|       1 | javaSE    |    20 | ligang |  1 | tom     | 開發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||       2 | javaEE    |    30 | lihua  |  2 | jack    | 開發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 || NULL    | NULL      | NULL  | NULL   |  3 | dana    | 董事會 |  15000 |     1 | 2000-02-01 00:04:06 || NULL    | NULL      | NULL  | NULL   |  4 | lorenzo | 董事會 |  30000 |     1 | 2000-01-01 00:05:19 || NULL    | NULL      | NULL  | NULL   |  5 | sonen   | 銷售部 |   3000 |     3 | 2015-01-04 00:06:02 || NULL    | NULL      | NULL  | NULL   |  6 | conor   | 銷售部 |   1800 |     3 | 2014-04-12 00:06:52 || NULL    | NULL      | NULL  | NULL   |  7 | bisping | 銷售部 |   2600 |     3 | 2014-01-18 00:17:50 |+---------+-----------+-------+--------+----+---------+--------+--------+-------+---------------------+select * from employee right join book on book.book_id=employee.id;+----+------+--------+--------+-------+---------------------+---------+-----------+-------+--------+| id | name | dept   | salary | level | date                | book_id | book_name | price | author |+----+------+--------+--------+-------+---------------------+---------+-----------+-------+--------+|  1 | tom  | 開發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 |       1 | javaSE    |    20 | ligang ||  2 | jack | 開發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 |       2 | javaEE    |    30 | lihua  |+----+------+--------+--------+-------+---------------------+---------+-----------+-------+--------+左連接與右連接前頭后頭的位置很容易混淆,這里的左右不是絕對對稱的,這里我得出一個結(jié)論:A left join B, B left join A, A right join B, B right join A,到底A、B誰在前頭誰在后頭,不要試圖用單詞的意思來理解,那樣一定會犯錯,就按最最簡單的方式,A與B寫出時誰在前誰在后,無論中間是left join還是right join,先寫的永遠都在前頭,后寫的永遠在后頭。下面來點提升練習(xí)題:現(xiàn)在修改一下book表:select * from book;+----+------------------+-------+--------+| id | name             | price | author |+----+------------------+-------+--------+|  1 | javaSE           |    20 | ligang ||  2 | javaEE           |    30 | lihua  ||  3 | thinking in java |    80 | bruce  ||  4 | effective java   |    60 | frank  ||  5 | american history |    25 | kerry  ||  6 | house design     |    30 | lee    |+----+------------------+-------+--------+=======================================================================================================select e.id, e.name, b.id, b.name from employee e left join book b on e.id = b.id where e.id<7;+----+---------+----+------------------+| id | name    | id | name             |+----+---------+----+------------------+|  1 | tom     |  1 | javaSE           ||  2 | jack    |  2 | javaEE           ||  3 | dana    |  3 | thinking in java ||  4 | lorenzo |  4 | effective java   ||  5 | sonen   |  5 | american history ||  6 | conor   |  6 | house design     |+----+---------+----+------------------+select e.id, e.name, b.id, b.name from employee e left join book b on e.id = b.id and b.price > 30 where e.id<7;+----+---------+------+------------------+| id | name    | id   | name             |+----+---------+------+------------------+|  1 | tom     | NULL | NULL             ||  2 | jack    | NULL | NULL             ||  3 | dana    |    3 | thinking in java ||  4 | lorenzo |    4 | effective java   ||  5 | sonen   | NULL | NULL             ||  6 | conor   | NULL | NULL             |+----+---------+------+------------------+select e.id, e.name, b.id, b.name from employee e left join book b on e.id = b.id and b.price > 30 where b.id<7;+----+---------+----+------------------+| id | name    | id | name             |+----+---------+----+------------------+|  3 | dana    |  3 | thinking in java ||  4 | lorenzo |  4 | effective java   |+----+---------+----+------------------+=======================================================================================================where采用的book的id,左邊又是book,所以book執(zhí)行到底,列出6個。select b.id, b.name, e.id, e.name from book b left join employee e on e.id = b.id and b.price > 30 where b.id < 7;+----+------------------+------+---------+| id | name             | id   | name    |+----+------------------+------+---------+|  1 | javaSE           | NULL | NULL    ||  2 | javaEE           | NULL | NULL    ||  3 | thinking in java |    3 | dana    ||  4 | effective java   |    4 | lorenzo ||  5 | american history | NULL | NULL    ||  6 | house design     | NULL | NULL    |+----+------------------+------+---------+where采用e.id,book在左邊,此時只出現(xiàn)book.price大于30的項。為什么此時只有兩項?因為employee的1、2、5、6行都是null。select b.id, b.name, e.id, e.name from book b left join employee e on e.id = b.id and b.price > 30 where e.id < 7;+----+------------------+----+---------+| id | name             | id | name    |+----+------------------+----+---------+|  3 | thinking in java |  3 | dana    ||  4 | effective java   |  4 | lorenzo |+----+------------------+----+---------+一個小小的左連接,卻妙趣無窮,用的時候再做測驗吧。11.int(1)與int(11)有什么區(qū)別?  int(M),這里的M代表的并不是存儲在數(shù)據(jù)庫中的具體的長度,以前總是會誤以為int(3)只能存儲3個長度的數(shù)字,int(11)就會存儲11個長度的數(shù)字,這是大錯特錯的。其實當(dāng)我們在選擇使用int的類型的時候,不論是int(3)還是int(11),它在數(shù)據(jù)庫里面存儲的都是4個字節(jié)的長度,在使用int(3)的時候如果你輸入的是10,會默認給你存儲位010,也就是說這個3代表的是默認的一個長度,當(dāng)你不足3位時,會幫你不全,當(dāng)你超過3位時,就沒有任何的影響。要查看出不同效果記得在創(chuàng)建類型的時候加 zerofill這個值,表示用0填充,否則看不出效果的。create table t (t int(3) zerofill);insert into t set t = 10;select * from t;+——+| t |+——+| 010 |+——+12.varchar(20) 與 varchar(256)的區(qū)別?最大允許長度不一樣。存入的最大長度限制為20, 那就沒有必要弄成varchar(256)。varchar(256)意為最大允許你存儲256個字符。如果你能確保最大長度為不超過20, 則varchar(20)為合重的設(shè)計。你存儲一個長度為20的字符串,varchar(20)和varchar(256)所占用的物理空間大小是一樣的。存入“helloWord” 時,varchar255比varchar(20) 占用相同字節(jié)數(shù)。13.JDK1.5版本到JDK1.7版本的特性JDK1.5新特性:1.自動裝箱與拆箱2.枚舉3.泛型(Generic) 4.For-Each循環(huán) JDK 1.6新特性:1.支持Win7+ 的aero特效,即半透明2. common annotation,插入式注解處理,在編譯期間而不是運行期間處理注解JDK 1.7新特性:1.switch中可以使用字串了2.<>鉆石運算符,泛型自動推斷3.安全的加減乘除,Math.safe....4..數(shù)字字面量下劃線支持,age_of_jack=8;....5.支持二進制文字。例如:int binary = 0b1001_1001;6、在try catch異常撲捉中,一個catch可以寫多個異常類型,用"|"隔開7、jdk7之前,你必須用try{}finally{}在try內(nèi)使用資源,在finally中關(guān)閉資源,不管try中的代碼是否正常退出或者異常退出。jdk7之后,你可以不必要寫finally語句來關(guān)閉資源,只要你在try()的括號內(nèi)部定義要使用的資源。jAVA8 十大新特性1、接口的默認方法實現(xiàn)。方法實現(xiàn),只需要使用 default關(guān)鍵字即可2、Lambda 表達式。1、簡化匿名類的編寫。2、支持函數(shù)式編程。3、Stream 接口,可以將多個操作依次串起來。4.localtime,localzone,localdate,localdatetime  定義了一個沒有時區(qū)信息的時間14.枚舉是一種類型,用于定義變量,以限制變量的賦值 賦值時通過"枚舉名.值"來取得相關(guān)枚舉中的值public enum Season {winter, spring, summer, fall;}表示Season(季節(jié))的值只能是枚舉里面定義的 winter, spring, summer, fall(春夏秋冬);看起來很象是特殊的class, 它也可以有自己的變量,可以定義自己的方法,可以實現(xiàn)一個或者多個接口。所有枚舉值都是public , static , final的。15.取整 Math. floor round ceilfloor 向下取整。返回不大于的最大整數(shù) round。加0.5再向下取整。算法為Math.floor(x+0.5),即將原來的數(shù)字加上0.5后再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。ceil  向上取整。則是不小于他的最小整數(shù)看例子  Math.floor Math.round Math.ceil1.4 1 121.5 1 221.6 1 22-1.4 -2 -1 -1-1.5 -2 -1 -1-1.6 -2 -2 -116.封裝,繼承,多態(tài)Person => Teacher,Student,一句話,三大特性都有了。封裝:屬于同一類事物的共性(包括屬性與方法)歸到一個類中繼承:個性對共性的屬性與方法的接受,并加入個性特有的屬性與方法多態(tài):多態(tài)的概念發(fā)展出來,是以封裝和繼承為基礎(chǔ)的。多態(tài)就是在抽象的層面上實施一個統(tǒng)一的行為,到個體(具體)的層面上時,這個統(tǒng)一的行為會因為個體(具體)的形態(tài)特征而實施自己的特征行為。17.char能不能存儲漢字?java中的一個char的確是2個字節(jié)。java采用unicode,2個字節(jié)來表示一個字符。一個數(shù)字或英文或漢字都是一個字符,只不過數(shù)字和英文時,存儲的2個字節(jié)的第一個字節(jié)都為0,就是浪費了點空間。存漢字就占滿了2個字節(jié)。18. final finalize finally區(qū)別?final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally 是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize 是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等19.Collection 和Collections的區(qū)別? 1、java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。 Collection   ├List   │├LinkedList   │├ArrayList   │└Vector   │ └Stack   └Set  2、java.util.Collections 是一個包裝類。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類不能實例化,就像一個工具類,服務(wù)于Java的Collection框架。Collections.sort(list);reverse(List list):反轉(zhuǎn)指定List集合中元素的順序shuffle(List list):對List中的元素進行隨機排序(洗牌)sort(List list):對List里的元素根據(jù)自然升序排序sort(List list, Comparator c):自定義比較器進行排序swap(List list, int i, int j):將指定List集合中i處元素和j出元素進行交換rotate(List list, int distance):將所有元素向右移位指定長度,如果distance等于size那么結(jié)果不變binarySearch(List list, Object key):使用二分搜索法,以獲得指定對象在List中的索引,前提是集合已經(jīng)排序max(Collection coll):返回最大元素max(Collection coll, Comparator comp):根據(jù)自定義比較器,返回最大元素min(Collection coll):返回最小元素min(Collection coll, Comparator comp):根據(jù)自定義比較器,返回最小元素fill(List list, Object obj):使用指定對象填充frequency(Collection Object o):返回指定集合中指定對象出現(xiàn)的次數(shù)replaceAll(List list, Object old, Object new):替換20.冒泡排序int[] arr={6,3,8,2,9,1};   第一趟排序:    第一次排序:6和3比較,6大于3,交換位置:  3  6  8  2  9  1    第二次排序:6和8比較,6小于8,不交換位置:3  6  8  2  9  1    第三次排序:8和2比較,8大于2,交換位置:  3  6  2  8  9  1    第四次排序:8和9比較,8小于9,不交換位置:3  6  2  8  9  1    第五次排序:9和1比較:9大于1,交換位置:  3  6  2  8  1  9    第一趟總共進行了5次比較, 排序結(jié)果:      3  6  2  8  1  9---------------------------------------------------------------------第二趟排序:    第一次排序:3和6比較,3小于6,不交換位置:3  6  2  8  1  9    第二次排序:6和2比較,6大于2,交換位置:  3  2  6  8  1  9    第三次排序:6和8比較,6大于8,不交換位置:3  2  6  8  1  9    第四次排序:8和1比較,8大于1,交換位置:  3  2  6  1  8  9    第二趟總共進行了4次比較, 排序結(jié)果:      3  2  6  1  8  9---------------------------------------------------------------------第五趟排序:    第一次排序:1和2比較,2大于1,交換位置:  1  2  3  6  8  9    第二趟總共進行了1次比較, 排序結(jié)果:  1  2  3  6  8  9---------------------------------------------------------------------第一趟比較5次,過來一遍,一定能找到最大的那個,下一趟比較就不需要再比誰最大了,因為最大的已經(jīng)有了。第二趟比較4次一定可以找到二大的,下一趟就不用管最大、二大了。第三趟比較3次一定找到三大最后一個不用比較了,它一定是最小的,所以只需要arr.length-1趟。每一趟的比較次數(shù)也不同,越來越少,因為最大、二大已經(jīng)知道,無須再比。可以這么想:第n趟比較總共會比較多少次呢?首先后頭是n-1個不管(比如說第3趟開始時,最大、二大已經(jīng)有了,后頭3-1=2個不管);前頭第一個不管,因為比較最少需要2個,第一個是基礎(chǔ);然后拿第一個和剩余的一一映射,看看有多少根映射,就有多少次。那么也就是:a[0]-->a[1]; a[0]-->a[2]; a[0]-->a[3],共比較三次。a[4]a[5]分別是二大、最大。for(int i=1;i<arr.length;i++){    for(int j=1;j<arr.length-i;j++){    //交換位置}  代碼實現(xiàn):arr.lenth=6,我們這里就寫6。    for(int i=0;i<6-1;i++){//外層循環(huán)控制排序趟數(shù)      for(int j=0;j<6-1-i;j++){//內(nèi)層循環(huán)控制每一趟排序多少次        if(arr[j]>arr[j+1]){ //第一次比較,a[0]和a[1],大于就替換位置,小于就不變。          int temp=arr[j]; //第二次比較,a[1]和a[2],....          arr[j]=arr[j+1]; //一直比到a[5]          arr[j+1]=temp;        }      }    } 21.向上轉(zhuǎn)型和向下轉(zhuǎn)型向上轉(zhuǎn)型:將子類對象轉(zhuǎn)為父類對象。父類指向子類引用對象會遺失除與父類對象共有的其他方法,也就是在轉(zhuǎn)型過程中,子類的新有的方法都會遺失掉,在編譯時,系統(tǒng)會提供找不到方法的錯誤。Animal a 引用指向 new Bird();子類對象當(dāng)成父類對象,只能調(diào)用父類的成員,如果子類重寫了父類的方法就根據(jù)這個引用指向調(diào)用子類重寫的這個方法(這個方法就是覆蓋override)。這個調(diào)用過程就稱為“動態(tài)綁定”。向下轉(zhuǎn)型:父類轉(zhuǎn)子類。 情況一:如果父類引用的對象如果引用的是指向的子類對象,那么在向下轉(zhuǎn)型的過程中是安全的。也就是編譯是不會出錯誤的。情況二:如果父類引用的對象是父類本身,那么在向下轉(zhuǎn)型的過程中是不安全的,編譯不會出錯,但是運行時會出現(xiàn)java.lang.ClassCastException錯誤。它可以使用instanceof來避免出錯此類錯誤。class Animal {public void eat() {System.out.println("animal eatting...");}}class Bird extends Animal {public void eat() System.out.println("bird eatting...");}public void fly() {System.out.println("bird flying...");}}向下轉(zhuǎn)型:main(String[] args) {Animal ab = new Bird(); // 向上轉(zhuǎn)型,這種情況太常見了,List<T> list=new ArrayList<T>;// 原來這種寫法只能用ArrayList重寫List的方法,不能用ArrayList特有的方法ab.eat();ab.fly();//這句報錯!此處提示在Animal中沒有定義fly方法。}向下轉(zhuǎn)型:2種情況main(String[] args) {Animal ab = new Bird(); // 向下,指向子類對象,不報錯Bird b = (Bird) ab;b.eat();b.fly();}main(String[] args) {Animal ab = new Animal(); // 向下,指向父類對象,報錯Bird b = (Bird) ab;b.eat();b.fly();}22. Servlet簡介> Server + let        > 意為:運行在服務(wù)器端的小程序。        > Servlet實際上就是一個接口。            - 狹義上的Servlet,指的就是Servlet接口            - 廣義上的我們認為凡是實現(xiàn)Servlet接口的類,我們都稱他是一個Servlet *****        > Servlet的作用:            1.接收用戶發(fā)送的請求            2.調(diào)用其他的java程序來處理請求            3.根據(jù)處理結(jié)果,返回給用戶一個頁面23.緩存是什么?作用就像倉庫中臨時堆放貨物的地方一樣,貨物從運輸車輛上放下時臨時堆放在緩存區(qū)中,然后再搬到內(nèi)部存儲區(qū)中長時間存放。貨物在這段區(qū)域中存放的時間很短,就是一個臨時貨場。 最初緩存只有一級,后來處理器速率又提升了,一級緩存不夠用了,于是就添加了二級緩存。二級緩存是比一級緩存速率更慢,容量更大的內(nèi)存,主要就是做一級緩存和內(nèi)存之間數(shù)據(jù)臨時交換的地方用。為了適應(yīng)速率更快的處理器,已經(jīng)出現(xiàn)了三級緩存了,它的容量更大,速率相對二級緩存也要慢一些,但是比內(nèi)存可快多了。24.什么是Web緩存?Web緩存是指一個Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會根據(jù)進來的請求保存輸出內(nèi)容的副本;當(dāng)下一個請求來到的時候,如果是相同的URL,緩存會根據(jù)緩存機制決定是直接使用副本響應(yīng)訪問請求,還是向源服務(wù)器再次發(fā)送請求。Web緩存的作用1.減少網(wǎng)絡(luò)帶寬消耗:無論對于網(wǎng)站運營者或者用戶,帶寬都代表著金錢,過多的帶寬消耗,只會便宜了網(wǎng)絡(luò)運營商。當(dāng)Web緩存副本被使用時,只會產(chǎn)生極小的網(wǎng)絡(luò)流量,可以有效的降低運營成本。2.降低服務(wù)器壓力:給網(wǎng)絡(luò)資源設(shè)定有效期之后,用戶可以重復(fù)使用本地的緩存,減少對源服務(wù)器的請求,間接降低服務(wù)器的壓力。同時,搜索引擎的爬蟲機器人也能根據(jù)過期機制降低爬取的頻率,也能有效降低服務(wù)器的壓力。3.減少網(wǎng)絡(luò)延遲,加快頁面打開速度:帶寬對于個人網(wǎng)站運營者來說是十分重要,而對于大型的互聯(lián)網(wǎng)公司來說,可能有時因為錢多而真的不在乎。那Web緩存還有作用嗎?答案是肯定的,對于最終用戶,緩存的使用能夠明顯加快頁面打開速度,達到更好的體驗。25.Java中用最有效率的方法算出2 乘以8 等於幾?2 << 3,因為將一個數(shù)左移n 位,就相當(dāng)于乘以了2 的n 次方,即:2X2n次方那么,一個數(shù)乘以8 只要將其左移3 位即可,而位運算cpu 直接支持的,效率最高,所以,2 乘以8 等於幾的最效率的方法是2 << 3。//計算2*8=2*23System.out.println(2<<3);//8=2的3次方為8//計算2*16=2*24System.out.println(2<<4);//16=2的4次方為16
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 绍兴县| 布尔津县| 衡阳县| 井研县| 汪清县| 龙山县| 林西县| 高州市| 东乌珠穆沁旗| 苗栗市| 合川市| 长治县| 博爱县| 双峰县| 即墨市| 太湖县| 洛扎县| 湖南省| 东丰县| 普洱| 岑溪市| 澳门| 澄江县| 遂宁市| 叶城县| 甘南县| 马山县| 太白县| 南皮县| 讷河市| 哈密市| 加查县| 肇源县| 彝良县| 白城市| 博爱县| 建阳市| 三亚市| 乐业县| 古田县| 东海县|