麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-14 10:11:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
0.bootstrap常用英語(yǔ):typography 排版Glyphicon 字形圖標(biāo)breadcrumb 面包碎屑(這里是用來(lái)在導(dǎo)航中顯示當(dāng)前頁(yè)面的位置)Pagination 分頁(yè)badges 徽章(舉例顯示4條未讀消息的提示,帶圓形背景)jumbotron 超大屏幕tooltip 提示工具插件popover 彈出框插件affix 附加導(dǎo)航插件text-muted muted柔和的,意思是文字顏色淡灰色scheme 策劃計(jì)劃schema 概要,計(jì)劃,圖表;tab 選項(xiàng)卡1. java中的一個(gè)byte,其范圍是-128~127的.byte是一個(gè)字節(jié)保存的,有8個(gè)位,即8個(gè)0、1。8位的第一個(gè)位是符號(hào)位,也就是說(shuō)0000 0001代表的是數(shù)字1 1000 0000代表的就是-1所以正數(shù)最大位0111 1111,也就是數(shù)字127,  負(fù)數(shù)最大為1111 1111,也就是數(shù)字-1282.byte b;//指定變量b為byte型 (最小值-128 最大值127) 一個(gè)常量,保存 byte 類(lèi)型可取的最大值,即 27-1。(127)  一個(gè)常量,保存 byte 類(lèi)型可取的最小值,即 -27。(-128)    ---------------------------------------------------  short s;//指定變量s為short型   保存 short 可取的最大值的常量,最大值為 215-1。(32 767)  保存 short 可取的最小值的常量,最小值為 -215。(-32 768)   --------------------------------------------------- int i;//指定變量i為int型  值為 231-1 ( 2147483647 二十一億)的常量,它表示 int 類(lèi)型能夠表示的最大值。  值為 -231 的常量,它表示 int 類(lèi)型能夠表示的最小值。   ---------------------------------------------------  long l;//指定變量l為long型 3.String是不可變的。也就是說(shuō)只要用String定義了一個(gè)對(duì)象,當(dāng)對(duì)他進(jìn)行修改的時(shí)候,都是新建一個(gè)String,而不是在原有的基礎(chǔ)上修改而成的。StringBuffer可變。線(xiàn)程安全~所以效率比StringBuilder低一點(diǎn)。StringBuilder可變字符串,可通過(guò)aappend等方法對(duì)字符串進(jìn)行修改。線(xiàn)程不安全,是sun為了追求極致寫(xiě)的。效率比StringBuffer高。3.1.int和Integer的區(qū)別int 是基本數(shù)據(jù)類(lèi)型,而Integer是一個(gè)對(duì)象,也是引用類(lèi)型。 int定義的不易擴(kuò)展,而Integer定義的,可以借助里面的方法來(lái)進(jìn)行擴(kuò)展。Integer i = null;說(shuō)白了,Integer就是一個(gè)引用,可以指向null。而int必須賦數(shù)字。Java是一個(gè)近乎純潔的面向?qū)ο缶幊陶Z(yǔ)言,但是為了編程的方便還是引入了基本數(shù)據(jù)類(lèi)型,但是為了能夠?qū)⑦@些基本數(shù)據(jù)類(lèi)型當(dāng)成對(duì)象操作,Java為每 一個(gè)基本數(shù)據(jù)類(lèi)型都引入了對(duì)應(yīng)的包裝類(lèi)型(wrapper class),int的包裝類(lèi)就是Integer,從Java 5開(kāi)始引入了自動(dòng)裝箱/拆箱機(jī)制,使得二者可以相互轉(zhuǎn)換。Java 為每個(gè)原始類(lèi)型提供了包裝類(lèi)型:     - 原始類(lèi)型: boolean,char,byte,short,int,long,float,double     - 包裝類(lèi)型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Doubleint基本數(shù)據(jù)運(yùn)算速度快,而在map、list等只能裝Object的容器中,就只能使用Integer等外覆類(lèi)。4.****************************Set、List和Map可以看做集合的三大類(lèi)。Set存儲(chǔ)的零散的元素且不允許有重復(fù)元素(數(shù)學(xué)中的集合也是如此),List是線(xiàn)性結(jié)構(gòu)的容器,適用于按數(shù)值索引訪(fǎng)問(wèn)元素的情形。     List集合是有序集合,集合中的元素可以重復(fù),訪(fǎng)問(wèn)集合中的元素可以根據(jù)元素的索引來(lái)訪(fǎng)問(wèn)。    Set集合是無(wú)序集合,集合中的元素不可以重復(fù),訪(fǎng)問(wèn)集合中的元素只能根據(jù)元素本身來(lái)訪(fǎng)問(wèn)(也是不能集合里元素不允許重復(fù)的原因)。     Map集合中保存Key-value對(duì)形式的元素,訪(fǎng)問(wèn)時(shí)只能根據(jù)每項(xiàng)元素的key來(lái)訪(fǎng)問(wèn)其value。 ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),Vector中的方法由于添加了synchronized修飾,因此Vector是線(xiàn)程安全的容器,但性能上較ArrayList差,因此已經(jīng)是Java中的遺留容器。(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、PRoperties都是遺留容器)對(duì)于Set、List和Map三種集合,最常用的實(shí)現(xiàn)類(lèi)分別是HashSet、ArrayList和HashMap三個(gè)實(shí)現(xiàn)類(lèi)。1.ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。2.對(duì)于隨機(jī)訪(fǎng)問(wèn)get和set,ArrayList覺(jué)得優(yōu)于LinkedList,因?yàn)長(zhǎng)inkedList要移動(dòng)指針。3.對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì),因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。LinkedList 采用的將對(duì)象存放在獨(dú)立的空間中,而且在每個(gè)空間中還保存下一個(gè)鏈接的索引 但是缺點(diǎn)就是查找非常麻煩 要叢第一個(gè)索引開(kāi)始.是批量隨機(jī)的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList.因?yàn)锳rrayList每插入一條數(shù)據(jù),要移動(dòng)插入點(diǎn)及之后的所有數(shù)據(jù)。  這一點(diǎn)我做了實(shí)驗(yàn)。在分別有200000條“記錄”的ArrayList和LinkedList的首位插入20000條數(shù)據(jù),LinkedList耗時(shí)約是ArrayList的20分之1。Vector:線(xiàn)程同步HashSet:(無(wú)序)哈希表是通過(guò)使用稱(chēng)為散列法的機(jī)制來(lái)存儲(chǔ)信息的,元素并沒(méi)有以某種特定順序來(lái)存放;LinkedHashSet:(插入順序)以元素插入的順序來(lái)維護(hù)集合的鏈接表,允許以插入的順序在集合中迭代;  TreeSet:(升序)提供一個(gè)使用樹(shù)結(jié)構(gòu)存儲(chǔ)Set接口的實(shí)現(xiàn),對(duì)象以升序順序存儲(chǔ),訪(fǎng)問(wèn)和遍歷的時(shí)間很快。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鍵值對(duì),允許多鍵對(duì)一值,但不能一鍵對(duì)多值,因?yàn)槟愀局肋x哪個(gè)才對(duì)。set里放對(duì)象,map里放鍵值對(duì)。首先加入元素的形式,set:List<Employee> list = new ArrayList<Employee>();     // Java 7的鉆石語(yǔ)法(構(gòu)造器后面的尖括號(hào)中不需要寫(xiě)類(lèi)型)     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中的元素則是這個(gè)樣子的{obama=present, justin=singer, mao=chairman}hashmap,linkdedhashmap,treemap區(qū)別HashMap 隨機(jī)排列,允許一個(gè)鍵為null,允許多條值為null,不支持線(xiàn)程的同步,最常用的Map,它根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值TreeMap 升序排列LinkedHashMap 插入順序排列,是HashMap的一個(gè)子類(lèi),Hashtable 與HashMap類(lèi)似,它繼承自Dictionary類(lèi),不同的是:它不允許記錄的鍵或者值為空;它支持線(xiàn)程的同步,即任一時(shí)刻只有一個(gè)線(xiàn)程能寫(xiě)Hashtable,因此也導(dǎo)致了 Hashtable在寫(xiě)入時(shí)會(huì)比較慢。**********HashTable與HashMap的區(qū)別************第一:我們從他們的定義就可以看出他們的不同,HashTable基于Dictionary類(lèi),而HashMap是基于AbstractMap。Dictionary是什么?它是任何可將鍵映射到相應(yīng)值的類(lèi)的抽象父類(lèi),而AbstractMap是基于Map接口的骨干實(shí)現(xiàn),它以最大限度地減少實(shí)現(xiàn)此接口所需的工作。第二:HashMap可以允許存在一個(gè)為null的key和任意個(gè)為null的value,但是HashTable中的key和value都不允許為null。5.*********棧,堆,方法區(qū)*********================方法區(qū)(非堆):是各個(gè)線(xiàn)程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)已被虛擬機(jī)加載的類(lèi)信息、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機(jī)中所管理的內(nèi)存中區(qū)域最大的一塊,是被所有線(xiàn)程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存。java堆是垃圾收集器管理的主要區(qū)域。java虛擬機(jī)棧:線(xiàn)程私有的,它的生命周期與線(xiàn)程相同。每個(gè)方法被執(zhí)行的時(shí)候都會(huì)同時(shí)創(chuàng)建一個(gè)棧幀,用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息。每個(gè)方法被調(diào)用直至執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)中從入棧到出棧的過(guò)程。====================堆區(qū): 1.存儲(chǔ)的全部是對(duì)象,每個(gè)對(duì)象都包含一個(gè)與之對(duì)應(yīng)的class的信息。(class的目的是得到操作指令) 2.jvm只有一個(gè)堆區(qū)(heap)被所有線(xiàn)程共享,堆中不存放基本類(lèi)型和對(duì)象引用,只存放對(duì)象本身 棧區(qū): 1.每個(gè)線(xiàn)程包含一個(gè)棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類(lèi)型的對(duì)象和自定義對(duì)象的引用(不是對(duì)象),對(duì)象都存放在堆區(qū)中 2.每個(gè)棧中的數(shù)據(jù)(原始類(lèi)型和對(duì)象引用)都是私有的,其他棧不能訪(fǎng)問(wèn)。 3.棧分為3個(gè)部分:基本類(lèi)型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。 方法區(qū): 1.又叫靜態(tài)區(qū),跟堆一樣,被所有的線(xiàn)程共享。方法區(qū)包含所有的class和static變量。 2.方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素,如class,static變量。======================棧里存放的是值類(lèi)型(int、float等)的值和引用類(lèi)型(String、你自己創(chuàng)建的類(lèi)對(duì)象等)在堆中的地址;堆中存放引用類(lèi)u型的值,如果堆中某個(gè)值的地址在棧中沒(méi)有被指向,他就會(huì)被GC回收。方法區(qū)存儲(chǔ)所有的類(lèi)和靜態(tài)變量。小總結(jié):方法區(qū)放類(lèi)信息、靜態(tài)變量;堆放對(duì)象;棧線(xiàn)程私有,放基本類(lèi)型變量(如int)和對(duì)象地址(在堆里的地址)。6.***************inputstream的.read(byte[] b)這個(gè)方法是先規(guī)定一個(gè)數(shù)組長(zhǎng)度,將這個(gè)流中的字節(jié)緩沖到數(shù)組b中,返回的這個(gè)數(shù)組中的字節(jié)個(gè)數(shù),這個(gè)緩沖區(qū)沒(méi)有滿(mǎn)的話(huà),則返回真實(shí)的字節(jié)個(gè)數(shù),到未尾時(shí)都返回-1byte[] buffer = new byte[512];int bytesReaded;while((bytesReaded = in.read(buffer)) != -1) {out.write(buffer, 0, bytesReaded);}總結(jié),每次in.read(buffer)返回的都是512,唯獨(dú)最后一次返回的是該多少是多少,比如37。7.**********簡(jiǎn)單工廠(chǎng)模式,又叫做靜態(tài)工廠(chǎng)方法(Static Factory Method)模式。就是專(zhuān)門(mén)寫(xiě)一個(gè)類(lèi),他有一個(gè)方法根據(jù)傳入的參數(shù)不同,返回不同的對(duì)象。所謂簡(jiǎn)單工廠(chǎng)模式, 就是將容易變化的地方, 考慮用一個(gè)獨(dú)立Class來(lái)進(jìn)行創(chuàng)造實(shí)體(Object)的過(guò)程.目的: 合并創(chuàng)造實(shí)體的動(dòng)作, 統(tǒng)一以變量處理之. 使得新增實(shí)體種類(lèi)時(shí), 可以不修改到已有程序.public class Animal{}public class Cat extends Animal{}public class Dog extends Animal{}public class Fish extends Animal{}/** 工廠(chǎng)類(lèi) */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 允許你將實(shí)現(xiàn)了Serializable接口的對(duì)象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲(chǔ)以備以后重新生成原來(lái)的對(duì)象。舉個(gè)例子:網(wǎng)絡(luò)傳輸?shù)臅r(shí)候,可以傳字符串,亦可以傳對(duì)象object,例如socket,傳字符串的時(shí)候接收方很容易解析出來(lái),但是,傳一個(gè)對(duì)象的時(shí)候,對(duì)方讀完字節(jié)流后,不知道你傳的什么對(duì)象,所以沒(méi)辦法給轉(zhuǎn)成原來(lái)的對(duì)象并解析對(duì)象的屬性,這時(shí)候就要用到序列化和反序列化。類(lèi)實(shí)現(xiàn)序列化接口,socket發(fā)送這個(gè)對(duì)象的字節(jié)流,接收方到流后就可以將流反序列化成對(duì)象,然后使用對(duì)象的方法和屬性。9.********java單例模式確保一個(gè)類(lèi)只有一個(gè)實(shí)例,自行提供這個(gè)實(shí)例并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。特點(diǎn):1,一個(gè)類(lèi)只能有一個(gè)實(shí)例;2,自己創(chuàng)建這個(gè)實(shí)例;3,整個(gè)系統(tǒng)都要使用這個(gè)實(shí)例。單例模式,能避免實(shí)例重復(fù)創(chuàng)建;單例模式,應(yīng)用于避免存在多個(gè)實(shí)例引起程序邏輯錯(cuò)誤的場(chǎ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     | 開(kāi)發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||  2 | jack    | 開(kāi)發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 ||  3 | dana    | 董事會(huì) |  15000 |     1 | 2000-02-01 00:04:06 ||  4 | lorenzo | 董事會(huì) |  30000 |     1 | 2000-01-01 00:05:19 ||  5 | sonen   | 銷(xiāo)售部 |   3000 |     3 | 2015-01-04 00:06:02 ||  6 | conor   | 銷(xiāo)售部 |   1800 |     3 | 2014-04-12 00:06:52 ||  7 | bisping | 銷(xiāo)售部 |   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  | 開(kāi)發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||       2 | javaEE    |    30 | lihua  |  2 | jack | 開(kāi)發(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     | 開(kāi)發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 |       1 | javaSE    |    20 | ligang ||  2 | jack    | 開(kāi)發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 |       2 | javaEE    |    30 | lihua  ||  3 | dana    | 董事會(huì) |  15000 |     1 | 2000-02-01 00:04:06 | NULL    | NULL      | NULL  | NULL   ||  4 | lorenzo | 董事會(huì) |  30000 |     1 | 2000-01-01 00:05:19 | NULL    | NULL      | NULL  | NULL   ||  5 | sonen   | 銷(xiāo)售部 |   3000 |     3 | 2015-01-04 00:06:02 | NULL    | NULL      | NULL  | NULL   ||  6 | conor   | 銷(xiāo)售部 |   1800 |     3 | 2014-04-12 00:06:52 | NULL    | NULL      | NULL  | NULL   ||  7 | bisping | 銷(xiāo)售部 |   2600 |     3 | 2014-01-18 00:17:50 | NULL    | NULL      | NULL  | NULL   |+----+---------+--------+--------+-------+---------------------+---------+-----------+-------+--------+也就是說(shuō),left join就是兩個(gè)表按某種條件焊接在一起,比如id相同,既然前頭left join后頭,那么前頭自然在左邊,后頭在右邊。左邊的沒(méi)有內(nèi)容了,右邊的即使有內(nèi)容也不顯示;左邊有多余,右邊沒(méi)有也得按null顯示。以左表為中心,返回左表中符合條件的所有記錄以及右表中聯(lián)結(jié)字段相等的記錄——當(dāng)右表中無(wú)相應(yīng)聯(lián)接記錄時(shí),返回空值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     | 開(kāi)發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 ||       2 | javaEE    |    30 | lihua  |  2 | jack    | 開(kāi)發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 || NULL    | NULL      | NULL  | NULL   |  3 | dana    | 董事會(huì) |  15000 |     1 | 2000-02-01 00:04:06 || NULL    | NULL      | NULL  | NULL   |  4 | lorenzo | 董事會(huì) |  30000 |     1 | 2000-01-01 00:05:19 || NULL    | NULL      | NULL  | NULL   |  5 | sonen   | 銷(xiāo)售部 |   3000 |     3 | 2015-01-04 00:06:02 || NULL    | NULL      | NULL  | NULL   |  6 | conor   | 銷(xiāo)售部 |   1800 |     3 | 2014-04-12 00:06:52 || NULL    | NULL      | NULL  | NULL   |  7 | bisping | 銷(xiāo)售部 |   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  | 開(kāi)發(fā)部 |   2300 |     2 | 2016-01-01 00:02:39 |       1 | javaSE    |    20 | ligang ||  2 | jack | 開(kāi)發(fā)部 |   2500 |     2 | 2014-01-01 00:03:16 |       2 | javaEE    |    30 | lihua  |+----+------+--------+--------+-------+---------------------+---------+-----------+-------+--------+左連接與右連接前頭后頭的位置很容易混淆,這里的左右不是絕對(duì)對(duì)稱(chēng)的,這里我得出一個(gè)結(jié)論:A left join B, B left join A, A right join B, B right join A,到底A、B誰(shuí)在前頭誰(shuí)在后頭,不要試圖用單詞的意思來(lái)理解,那樣一定會(huì)犯錯(cuò),就按最最簡(jiǎn)單的方式,A與B寫(xiě)出時(shí)誰(shuí)在前誰(shuí)在后,無(wú)論中間是left join還是right join,先寫(xiě)的永遠(yuǎn)都在前頭,后寫(xiě)的永遠(yuǎn)在后頭。下面來(lái)點(diǎn)提升練習(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個(gè)。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在左邊,此時(shí)只出現(xiàn)book.price大于30的項(xiàng)。為什么此時(shí)只有兩項(xiàng)?因?yàn)閑mployee的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 |+----+------------------+----+---------+一個(gè)小小的左連接,卻妙趣無(wú)窮,用的時(shí)候再做測(cè)驗(yàn)吧。11.int(1)與int(11)有什么區(qū)別?  int(M),這里的M代表的并不是存儲(chǔ)在數(shù)據(jù)庫(kù)中的具體的長(zhǎng)度,以前總是會(huì)誤以為int(3)只能存儲(chǔ)3個(gè)長(zhǎng)度的數(shù)字,int(11)就會(huì)存儲(chǔ)11個(gè)長(zhǎng)度的數(shù)字,這是大錯(cuò)特錯(cuò)的。其實(shí)當(dāng)我們?cè)谶x擇使用int的類(lèi)型的時(shí)候,不論是int(3)還是int(11),它在數(shù)據(jù)庫(kù)里面存儲(chǔ)的都是4個(gè)字節(jié)的長(zhǎng)度,在使用int(3)的時(shí)候如果你輸入的是10,會(huì)默認(rèn)給你存儲(chǔ)位010,也就是說(shuō)這個(gè)3代表的是默認(rèn)的一個(gè)長(zhǎng)度,當(dāng)你不足3位時(shí),會(huì)幫你不全,當(dāng)你超過(guò)3位時(shí),就沒(méi)有任何的影響。要查看出不同效果記得在創(chuàng)建類(lèi)型的時(shí)候加 zerofill這個(gè)值,表示用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ū)別?最大允許長(zhǎng)度不一樣。存入的最大長(zhǎng)度限制為20, 那就沒(méi)有必要弄成varchar(256)。varchar(256)意為最大允許你存儲(chǔ)256個(gè)字符。如果你能確保最大長(zhǎng)度為不超過(guò)20, 則varchar(20)為合重的設(shè)計(jì)。你存儲(chǔ)一個(gè)長(zhǎng)度為20的字符串,varchar(20)和varchar(256)所占用的物理空間大小是一樣的。存入“helloWord” 時(shí),varchar255比varchar(20) 占用相同字節(jié)數(shù)。13.JDK1.5版本到JDK1.7版本的特性JDK1.5新特性:1.自動(dòng)裝箱與拆箱2.枚舉3.泛型(Generic) 4.For-Each循環(huán) JDK 1.6新特性:1.支持Win7+ 的aero特效,即半透明2. common annotation,插入式注解處理,在編譯期間而不是運(yùn)行期間處理注解JDK 1.7新特性:1.switch中可以使用字串了2.<>鉆石運(yùn)算符,泛型自動(dòng)推斷3.安全的加減乘除,Math.safe....4..數(shù)字字面量下劃線(xiàn)支持,age_of_jack=8;....5.支持二進(jìn)制文字。例如:int binary = 0b1001_1001;6、在try catch異常撲捉中,一個(gè)catch可以寫(xiě)多個(gè)異常類(lèi)型,用"|"隔開(kāi)7、jdk7之前,你必須用try{}finally{}在try內(nèi)使用資源,在finally中關(guān)閉資源,不管try中的代碼是否正常退出或者異常退出。jdk7之后,你可以不必要寫(xiě)finally語(yǔ)句來(lái)關(guān)閉資源,只要你在try()的括號(hào)內(nèi)部定義要使用的資源。jAVA8 十大新特性1、接口的默認(rèn)方法實(shí)現(xiàn)。方法實(shí)現(xiàn),只需要使用 default關(guān)鍵字即可2、Lambda 表達(dá)式。1、簡(jiǎn)化匿名類(lèi)的編寫(xiě)。2、支持函數(shù)式編程。3、Stream 接口,可以將多個(gè)操作依次串起來(lái)。4.localtime,localzone,localdate,localdatetime  定義了一個(gè)沒(méi)有時(shí)區(qū)信息的時(shí)間14.枚舉是一種類(lèi)型,用于定義變量,以限制變量的賦值 賦值時(shí)通過(guò)"枚舉名.值"來(lái)取得相關(guān)枚舉中的值public enum Season {winter, spring, summer, fall;}表示Season(季節(jié))的值只能是枚舉里面定義的 winter, spring, summer, fall(春夏秋冬);看起來(lái)很象是特殊的class, 它也可以有自己的變量,可以定義自己的方法,可以實(shí)現(xiàn)一個(gè)或者多個(gè)接口。所有枚舉值都是public , static , final的。15.取整 Math. floor round ceilfloor 向下取整。返回不大于的最大整數(shù) round。加0.5再向下取整。算法為Math.floor(x+0.5),即將原來(lái)的數(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,一句話(huà),三大特性都有了。封裝:屬于同一類(lèi)事物的共性(包括屬性與方法)歸到一個(gè)類(lèi)中繼承:個(gè)性對(duì)共性的屬性與方法的接受,并加入個(gè)性特有的屬性與方法多態(tài):多態(tài)的概念發(fā)展出來(lái),是以封裝和繼承為基礎(chǔ)的。多態(tài)就是在抽象的層面上實(shí)施一個(gè)統(tǒng)一的行為,到個(gè)體(具體)的層面上時(shí),這個(gè)統(tǒng)一的行為會(huì)因?yàn)閭€(gè)體(具體)的形態(tài)特征而實(shí)施自己的特征行為。17.char能不能存儲(chǔ)漢字?java中的一個(gè)char的確是2個(gè)字節(jié)。java采用unicode,2個(gè)字節(jié)來(lái)表示一個(gè)字符。一個(gè)數(shù)字或英文或漢字都是一個(gè)字符,只不過(guò)數(shù)字和英文時(shí),存儲(chǔ)的2個(gè)字節(jié)的第一個(gè)字節(jié)都為0,就是浪費(fèi)了點(diǎn)空間。存漢字就占滿(mǎn)了2個(gè)字節(jié)。18. final finalize finally區(qū)別?final 用于聲明屬性,方法和類(lèi),分別表示屬性不可變,方法不可覆蓋,類(lèi)不可繼承。finally 是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize 是Object類(lèi)的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等19.Collection 和Collections的區(qū)別? 1、java.util.Collection 是一個(gè)集合接口。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法。Collection接口在Java 類(lèi)庫(kù)中有很多具體的實(shí)現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。 Collection   ├List   │├LinkedList   │├ArrayList   │└Vector   │ └Stack   └Set  2、java.util.Collections 是一個(gè)包裝類(lèi)。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類(lèi)不能實(shí)例化,就像一個(gè)工具類(lèi),服務(wù)于Java的Collection框架。Collections.sort(list);reverse(List list):反轉(zhuǎn)指定List集合中元素的順序shuffle(List list):對(duì)List中的元素進(jìn)行隨機(jī)排序(洗牌)sort(List list):對(duì)List里的元素根據(jù)自然升序排序sort(List list, Comparator c):自定義比較器進(jìn)行排序swap(List list, int i, int j):將指定List集合中i處元素和j出元素進(jìn)行交換rotate(List list, int distance):將所有元素向右移位指定長(zhǎng)度,如果distance等于size那么結(jié)果不變binarySearch(List list, Object key):使用二分搜索法,以獲得指定對(duì)象在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):使用指定對(duì)象填充frequency(Collection Object o):返回指定集合中指定對(duì)象出現(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    第一趟總共進(jìn)行了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    第二趟總共進(jìn)行了4次比較, 排序結(jié)果:      3  2  6  1  8  9---------------------------------------------------------------------第五趟排序:    第一次排序:1和2比較,2大于1,交換位置:  1  2  3  6  8  9    第二趟總共進(jìn)行了1次比較, 排序結(jié)果:  1  2  3  6  8  9---------------------------------------------------------------------第一趟比較5次,過(guò)來(lái)一遍,一定能找到最大的那個(gè),下一趟比較就不需要再比誰(shuí)最大了,因?yàn)樽畲蟮囊呀?jīng)有了。第二趟比較4次一定可以找到二大的,下一趟就不用管最大、二大了。第三趟比較3次一定找到三大最后一個(gè)不用比較了,它一定是最小的,所以只需要arr.length-1趟。每一趟的比較次數(shù)也不同,越來(lái)越少,因?yàn)樽畲蟆⒍笠呀?jīng)知道,無(wú)須再比。可以這么想:第n趟比較總共會(huì)比較多少次呢?首先后頭是n-1個(gè)不管(比如說(shuō)第3趟開(kāi)始時(shí),最大、二大已經(jīng)有了,后頭3-1=2個(gè)不管);前頭第一個(gè)不管,因?yàn)楸容^最少需要2個(gè),第一個(gè)是基礎(chǔ);然后拿第一個(gè)和剩余的一一映射,看看有多少根映射,就有多少次。那么也就是: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++){    //交換位置}  代碼實(shí)現(xiàn):arr.lenth=6,我們這里就寫(xiě)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)型:將子類(lèi)對(duì)象轉(zhuǎn)為父類(lèi)對(duì)象。父類(lèi)指向子類(lèi)引用對(duì)象會(huì)遺失除與父類(lèi)對(duì)象共有的其他方法,也就是在轉(zhuǎn)型過(guò)程中,子類(lèi)的新有的方法都會(huì)遺失掉,在編譯時(shí),系統(tǒng)會(huì)提供找不到方法的錯(cuò)誤。Animal a 引用指向 new Bird();子類(lèi)對(duì)象當(dāng)成父類(lèi)對(duì)象,只能調(diào)用父類(lèi)的成員,如果子類(lèi)重寫(xiě)了父類(lèi)的方法就根據(jù)這個(gè)引用指向調(diào)用子類(lèi)重寫(xiě)的這個(gè)方法(這個(gè)方法就是覆蓋override)。這個(gè)調(diào)用過(guò)程就稱(chēng)為“動(dòng)態(tài)綁定”。向下轉(zhuǎn)型:父類(lèi)轉(zhuǎn)子類(lèi)。 情況一:如果父類(lèi)引用的對(duì)象如果引用的是指向的子類(lèi)對(duì)象,那么在向下轉(zhuǎn)型的過(guò)程中是安全的。也就是編譯是不會(huì)出錯(cuò)誤的。情況二:如果父類(lèi)引用的對(duì)象是父類(lèi)本身,那么在向下轉(zhuǎn)型的過(guò)程中是不安全的,編譯不會(huì)出錯(cuò),但是運(yùn)行時(shí)會(huì)出現(xiàn)java.lang.ClassCastException錯(cuò)誤。它可以使用instanceof來(lái)避免出錯(cuò)此類(lèi)錯(cuò)誤。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)型,這種情況太常見(jiàn)了,List<T> list=new ArrayList<T>;// 原來(lái)這種寫(xiě)法只能用ArrayList重寫(xiě)List的方法,不能用ArrayList特有的方法ab.eat();ab.fly();//這句報(bào)錯(cuò)!此處提示在Animal中沒(méi)有定義fly方法。}向下轉(zhuǎn)型:2種情況main(String[] args) {Animal ab = new Bird(); // 向下,指向子類(lèi)對(duì)象,不報(bào)錯(cuò)Bird b = (Bird) ab;b.eat();b.fly();}main(String[] args) {Animal ab = new Animal(); // 向下,指向父類(lèi)對(duì)象,報(bào)錯(cuò)Bird b = (Bird) ab;b.eat();b.fly();}22. Servlet簡(jiǎn)介> Server + let        > 意為:運(yùn)行在服務(wù)器端的小程序。        > Servlet實(shí)際上就是一個(gè)接口。            - 狹義上的Servlet,指的就是Servlet接口            - 廣義上的我們認(rèn)為凡是實(shí)現(xiàn)Servlet接口的類(lèi),我們都稱(chēng)他是一個(gè)Servlet *****        > Servlet的作用:            1.接收用戶(hù)發(fā)送的請(qǐng)求            2.調(diào)用其他的java程序來(lái)處理請(qǐng)求            3.根據(jù)處理結(jié)果,返回給用戶(hù)一個(gè)頁(yè)面23.緩存是什么?作用就像倉(cāng)庫(kù)中臨時(shí)堆放貨物的地方一樣,貨物從運(yùn)輸車(chē)輛上放下時(shí)臨時(shí)堆放在緩存區(qū)中,然后再搬到內(nèi)部存儲(chǔ)區(qū)中長(zhǎng)時(shí)間存放。貨物在這段區(qū)域中存放的時(shí)間很短,就是一個(gè)臨時(shí)貨場(chǎng)。 最初緩存只有一級(jí),后來(lái)處理器速率又提升了,一級(jí)緩存不夠用了,于是就添加了二級(jí)緩存。二級(jí)緩存是比一級(jí)緩存速率更慢,容量更大的內(nèi)存,主要就是做一級(jí)緩存和內(nèi)存之間數(shù)據(jù)臨時(shí)交換的地方用。為了適應(yīng)速率更快的處理器,已經(jīng)出現(xiàn)了三級(jí)緩存了,它的容量更大,速率相對(duì)二級(jí)緩存也要慢一些,但是比內(nèi)存可快多了。24.什么是Web緩存?Web緩存是指一個(gè)Web資源(如html頁(yè)面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶(hù)端(瀏覽器)之間的副本。緩存會(huì)根據(jù)進(jìn)來(lái)的請(qǐng)求保存輸出內(nèi)容的副本;當(dāng)下一個(gè)請(qǐng)求來(lái)到的時(shí)候,如果是相同的URL,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪(fǎng)問(wèn)請(qǐng)求,還是向源服務(wù)器再次發(fā)送請(qǐng)求。Web緩存的作用1.減少網(wǎng)絡(luò)帶寬消耗:無(wú)論對(duì)于網(wǎng)站運(yùn)營(yíng)者或者用戶(hù),帶寬都代表著金錢(qián),過(guò)多的帶寬消耗,只會(huì)便宜了網(wǎng)絡(luò)運(yùn)營(yíng)商。當(dāng)Web緩存副本被使用時(shí),只會(huì)產(chǎn)生極小的網(wǎng)絡(luò)流量,可以有效的降低運(yùn)營(yíng)成本。2.降低服務(wù)器壓力:給網(wǎng)絡(luò)資源設(shè)定有效期之后,用戶(hù)可以重復(fù)使用本地的緩存,減少對(duì)源服務(wù)器的請(qǐng)求,間接降低服務(wù)器的壓力。同時(shí),搜索引擎的爬蟲(chóng)機(jī)器人也能根據(jù)過(guò)期機(jī)制降低爬取的頻率,也能有效降低服務(wù)器的壓力。3.減少網(wǎng)絡(luò)延遲,加快頁(yè)面打開(kāi)速度:帶寬對(duì)于個(gè)人網(wǎng)站運(yùn)營(yíng)者來(lái)說(shuō)是十分重要,而對(duì)于大型的互聯(lián)網(wǎng)公司來(lái)說(shuō),可能有時(shí)因?yàn)殄X(qián)多而真的不在乎。那Web緩存還有作用嗎?答案是肯定的,對(duì)于最終用戶(hù),緩存的使用能夠明顯加快頁(yè)面打開(kāi)速度,達(dá)到更好的體驗(yàn)。25.Java中用最有效率的方法算出2 乘以8 等於幾?2 << 3,因?yàn)閷⒁粋€(gè)數(shù)左移n 位,就相當(dāng)于乘以了2 的n 次方,即:2X2n次方那么,一個(gè)數(shù)乘以8 只要將其左移3 位即可,而位運(yùn)算cpu 直接支持的,效率最高,所以,2 乘以8 等於幾的最效率的方法是2 << 3。//計(jì)算2*8=2*23System.out.println(2<<3);//8=2的3次方為8//計(jì)算2*16=2*24System.out.println(2<<4);//16=2的4次方為16
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产电影av在线 | 成人短视频在线观看 | av在线免费观看播放 | 美国av片在线观看 | 国产免费片| 国产大片全部免费看 | 亚洲一级成人 | chinese xvideos gay| 久草视频国产在线 | 欧美特级一级毛片 | 久国产 | av黄色在线免费观看 | 久草在线资源福利站 | 亚洲成人福利在线观看 | 亚洲午夜精品视频 | 国产91片 | 精品一二三区视频 | 精品一区二区亚洲 | 国产又粗又爽又深的免费视频 | 国产在线91| 九九热在线免费观看视频 | 亚洲人成免费 | 99亚洲国产精品 | 91av日韩| 最新中文在线视频 | 亚洲午夜在线 | 在线看免电影网站 | 国产欧美精品一区二区三区四区 | 91av网址 | 国产一级毛片不卡 | 成人在线观看地址 | 在线观看国产www | 日韩视频一区在线 | 成码无人av片在线观看网站 | 羞羞网站在线看 | 国产女同疯狂激烈互摸 | 欧美成人高清视频 | 九九热精品视频在线 | 国产在线看一区 | 日韩欧美精品电影 | 成人福利视频导航 |