java基礎(chǔ)

1.面向?qū)ο蟮奶卣?br> 答案:繼承迷帜、多態(tài)梧乘、抽象绊序、封裝
繼承:子類可以繼承父類茴迁,但是只能繼承一個
多態(tài):重寫(子類重寫父類的方法),重載(同一個類中方法參數(shù)類型或者個數(shù)不一樣)
抽象:把事務(wù)抽象出來灌闺,數(shù)據(jù)抽象(類的屬性)艰争,方法抽象(類的方法)
封裝:類,可以把屬性桂对、方法封裝起來甩卓,允許可信的其他類調(diào)用;

2.final, finally, finalize 的區(qū)別
final可以修飾類(表示該類是最終類蕉斜,不可被繼承)逾柿、方法(表示該方法是最終方法缀棍,不可被重寫,但是可以重載)鹿寻、變量(表示該變量是最終變量睦柴,不可修改)
finally用在try catch后面诽凌,最終要執(zhí)行毡熏。即使try中return返回。
finalize可以為任何一個類添加侣诵,主動回收內(nèi)存痢法,在垃圾回收前調(diào)用。finalize原理杜顺。

3.int 和 Integer 有什么區(qū)別
int屬于基本類型财搁,而Integer屬于包裝類型。java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127)
Integer i5 = 127;
Integer i6 = 127;
i5 == i6 return true;
如果
Integer i5 = 128躬络;
Integer i6 = 128尖奔;
i5 == i6 return flase

4.重載和重寫的區(qū)別:
重載是同一個類中,方法名相同穷当,形參個數(shù)和類型不同的描述提茁。
重寫(覆蓋)是子類重寫父類的方法(形參和返回值必須相同,子類必須重寫父類的abstract方法馁菜,不能重寫父類的final方法)

5.抽象類和接口有什么區(qū)別
抽象類是用abstract修飾的類茴扁,一定有抽象方法,可以有非抽象方法汪疮;抽象方法必須被子類實現(xiàn)峭火;抽象類被子類繼承
接口是接口,所有方法都是抽象方法智嚷,被類實現(xiàn)卖丸。

6.說說反射的用途及實現(xiàn)
反射機制是指在JVM運行時,對于任何一個對象盏道,都能動態(tài)知道它的類稍浆、屬性和方法。應(yīng)用:ide使用時摇天,按點自動加載出方法粹湃,屬性;還有各種框架比如spring泉坐,
先在xml中配置好为鳄,等到需要使用時在加載。
三種實現(xiàn)方式:
對象的getClass()方法腕让;
forname()方法孤钦,Class.forName("全限定類名")
Person.class 從類中獲取歧斟。

7.說說自定義注解的場景及實現(xiàn)
各種框架Spring、springMVC等偏形,驗證屬性完整性等
實現(xiàn):@interface xxx {}静袖,通過反射檢測是否使用注解,getAnnottion

8.HTTP 請求的 GET 與 POST 方式的區(qū)別
http格式:請求行俊扭、請求頭队橙、空行、消息體
狀態(tài)行萨惑、響應(yīng)頭捐康、空行、消息體
GET產(chǎn)生一個數(shù)據(jù)包庸蔼;POST產(chǎn)生兩個數(shù)據(jù)包解总,對于POST,瀏覽器先發(fā)送header姐仅,服務(wù)器響應(yīng)100 continue花枫,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))掏膏。

9.session 與 cookie 區(qū)別
session是一種上下文機制劳翰,作用于服務(wù)端,可以存在數(shù)據(jù)庫壤追、集群或者文件中磕道。用戶首次發(fā)起請求,服務(wù)端會產(chǎn)生一個SessionID行冰,用來保存用戶的登錄信息溺蕉。
同時,cookie作用于客戶端悼做,用來跟蹤用戶的狀態(tài)疯特,分為瀏覽器cookie和文件cookie。用戶再次請求時肛走,服務(wù)端會檢查cookie是否帶有sessionid漓雅。
cookie 存在本地文件中,可能不安全朽色。而session是存在服務(wù)端的邻吞。

10.說說session的分布式處理
問題起因:現(xiàn)在的web-server都是分布式部署,nginx代理葫男。如果第一個請求抱冷,分發(fā)到1號web-server上;客戶端再次請求就不應(yīng)定分發(fā)到1號服務(wù)器上梢褐,session保存就沒有用旺遮。
解決方案:
1.session同步復(fù)制赵讯。(所有的web-server都賦值一份相同的,保存到各個服務(wù)器上耿眉。優(yōu)點是簡單边翼。缺點顯而易見,所有的web服務(wù)器都需要復(fù)制鸣剪,占用帶寬组底;而且數(shù)據(jù)量受內(nèi)存限制)
2.客戶端存儲法∥骺客戶端cookie
3.反向代理hash一致性斤寇。(ip一致性桶癣,nginx將ip一致的請求發(fā)送到一個服務(wù)器上拥褂;七層:根據(jù)應(yīng)用id來分發(fā)。)
4.后端存儲牙寞。數(shù)據(jù)庫或者緩存饺鹃。 web-server重啟或者擴容都不會有session丟失,沒有安全隱患间雀。缺點:需要增加一次網(wǎng)絡(luò)調(diào)用悔详。

11.HashMap的工作原理
通過hash的方法,通過put和get存儲和獲取對象惹挟。存儲對象時茄螃,我們將K/V傳給put方法時,它調(diào)用hashCode計算hash從而得到bucket位置连锯,進一步存儲归苍,
HashMap會根據(jù)當(dāng)前bucket的占用情況自動調(diào)整容量(超過Load Facotr則resize為原來的2倍)。獲取對象時运怖,我們將K傳給get拼弃,它調(diào)用hashCode計算hash從而得到bucket位置,
并進一步調(diào)用equals()方法確定鍵值對摇展。如果發(fā)生碰撞的時候吻氧,Hashmap通過鏈表將產(chǎn)生碰撞沖突的元素組織起來,在Java 8中咏连,
如果一個bucket中碰撞沖突的元素超過某個限制(默認是8)盯孙,則使用紅黑樹來替換鏈表,從而提高速度祟滴。

12.hashmap和hashtable的區(qū)別:(兩者都是無序的)
hashmap非線程安全振惰,允許value為null
hashtable是線程安全,不允許null
單線程hashmap快踱启。Synchronize

13.ConcurrentHashMap:
線程安全报账,hashtable升級研底。
1.7版本,最小粒度是segment數(shù)組和hashentry,put透罢、get要進行兩次hashcode()計算榜晦。
1.8版本,最小粒度是hashentry

14.JDBC 流程
第一步羽圃;加載Driver類乾胶,注冊數(shù)據(jù)庫驅(qū)動
第二部:通過DriverManager,使用url朽寞,用戶名和密碼建立連接识窿;
第三步:通過connection,使用sql語句打開Statement對象
傳入?yún)?shù)脑融,之所以這樣是為了防止sql注入
preparedStatement.setInt(1,18)
第四步:執(zhí)行語句喻频,將結(jié)果返回resultset
第五步:關(guān)閉連接

15.MVC 設(shè)計思想
Model View Controller

16.equals 與 == 的區(qū)別
基本數(shù)據(jù)類型使用== 比較的是他們的值;引用數(shù)據(jù)類型==比較的是他們的堆內(nèi)存地址肘迎,因此比較引用數(shù)據(jù)類型的值需要用equals

17.runnable和callable有什么區(qū)別甥温?
callable是1.5版本新增的,最大的區(qū)別是實現(xiàn)callable接口的線程能返回執(zhí)行結(jié)果妓布;而實現(xiàn)runnable接口的線程無法返回執(zhí)行結(jié)果姻蚓。call()方法能夠允許拋出異常,而run()只能內(nèi)部處理異常匣沼。

集合:
1.List 和 Set 區(qū)別:
list允許重復(fù)元素狰挡,set不允許重復(fù)元素

2.List 和 Map 區(qū)別
list存放單個元素,map存放key-value鍵值對释涛。hashmap加叁、treemap,treemap有序。

3.Arraylist 與 LinkedList 區(qū)別
Arraylist 與 LinkedList 區(qū)別:
Arraylist基于動態(tài)數(shù)組枢贿,LinkedList基于鏈表殉农。
一般來說,ArrayList的查找速度比LinkedList快局荚,但是增加超凳、刪除元素LinkedList快。

Arraylist和Vector區(qū)別:
Arraylist和Vector都是基于數(shù)組的List耀态,但是Vector是線程安全的轮傍,資源開銷大。
兩者的區(qū)別還有:如果數(shù)組的大小不夠首装,需要擴展的大小不一樣创夜。Arraylist是50%+1,Vector是擴展一倍仙逻。

HashMap 和 Hashtable 的區(qū)別:
兩者都是基于哈希表來實現(xiàn)鍵值映射的工具類驰吓。
hashtable是線程安全的涧尿。hashmap支持value為null,hashtable不行檬贰。
hashmap擴容是2倍姑廉,hashtable

HashSet 和 HashMap 區(qū)別:
HashSet實現(xiàn)的set接口,HashMap實現(xiàn)map接口翁涤。一個存儲對象桥言,一個存儲鍵值對。
Set通過add添加元素葵礼,map使用put添加元素号阿。

4.HashMap 和 Hashtable 的區(qū)別
Hashtbale是線程安全,而HashMap是非線程安全鸳粉。HashMap支持null值扔涧,HashTable不支持。兩個擴容方式不一樣:Hashmap是直接括兩倍赁严,hashtable是2n+1

5.HashSet 和 HashMap 區(qū)別
HashMap存的是鍵值對扰柠,hashtable存的是對象,實現(xiàn)了set接口疼约,是collection子集

6.HashMap 和 ConcurrentHashMap 的區(qū)別
ConcurrentHashMap是線程安全的,Hashmap非線程安全

7.HashMap的實現(xiàn)原理:
簡單地說蝙泼,HashMap 在底層將 key-value 當(dāng)成一個整體進行處理程剥,這個整體就是一個 Entry 對象。HashMap 底層采用一個 Entry[] 數(shù)組來保存所有的 key-value 對汤踏,當(dāng)需要存儲一個 Entry 對象時织鲸,會根據(jù)hash算法來決定其在數(shù)組中的存儲位置,在根據(jù)equals方法決定其在該數(shù)組位置上的鏈表中的存儲位置溪胶;當(dāng)需要取出一個Entry時搂擦,
也會根據(jù)hash算法找到其在數(shù)組中的存儲位置,再根據(jù)equals方法從該位置上的鏈表中取出該Entry哗脖。

線程:
1.創(chuàng)建線程的方式及實現(xiàn)
實現(xiàn)Runnable接口(callable接口)瀑踢,或者繼承Thread。

1.什么是線程才避?
線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位橱夭,它被包含在進程中,是進程中的實際運作單位桑逝。程序員可以通過它進行多處理器(并發(fā))編程棘劣,也可以使用
多線程對運算密集型任務(wù)提速,

2.線程和進程有什么區(qū)別楞遏?
線程是進程的子集茬暇,一個進程可以有多個線程首昔,每條線程并行執(zhí)行不同的任務(wù)。不同的進程使用不同的內(nèi)存空間糙俗,而所有的線程共享一片相同的內(nèi)存空間沙廉。
每個線程都有單獨的棧內(nèi)存在存儲本地數(shù)據(jù)。

3.如何java中實現(xiàn)線程臼节?
三種方式撬陵,分別是實現(xiàn)Runnable接口、Callable接口网缝,或者集成Thread.

4.用Runnable還是Thread巨税?
因為java不支持多繼承,但是支持調(diào)用多個接口粉臊,因此建議使用Runnable接口草添。

5.Java中Runnable和Callable有什么不同?
Runnable沒有返回值扼仲,不能拋出異常远寸;Callable有返回值且能拋出異常。Callable是JDK1.5增加的屠凶。

6.Java中CyclicBarrier和CountDownLatch有什么不同驰后?
兩個都可以實現(xiàn)一組線程等待其他線程。但是CountDownLatch不能重新使用矗愧。

7.java的內(nèi)存模型是什么灶芝?
java內(nèi)存模型規(guī)定和指引Java程序在不同的內(nèi)存架構(gòu)、CPU和操作系統(tǒng)間有確定性的行為唉韭。它在多線程的情況下尤其重要夜涕。Java內(nèi)存模型對一個線程所做的
變動能被其他線程可見提供了保證,他們之間是先行發(fā)生關(guān)系属愤,這個關(guān)系定義了一些規(guī)則讓程序員在并發(fā)編程時思路更清晰女器。比如:先行發(fā)生關(guān)系確保了:
*線程內(nèi)的代碼能夠按先后順序執(zhí)行,這被稱為程序次序規(guī)則住诸。
*對于同一個鎖驾胆,一個解鎖操作一定要發(fā)生在時間上后發(fā)生的另一個鎖定操作之前,也叫做管程鎖定規(guī)則只壳;
*前一個對volatile的寫操作在后一個volatile的讀操作之前俏拱。
*一個線程內(nèi)的任何操作必須在這個線程的start()調(diào)用之后,也要作線程啟動規(guī)則吼句。
*一個線程內(nèi)的任何操作都會在線程終止之前锅必,線程終止規(guī)則。
*一個對象的中介操作必須在這個對象構(gòu)造完成之后,也叫對象終結(jié)規(guī)則搞隐。
*可傳遞性驹愚;

8.Java中的volatile變量是什么?
是一個特殊的修飾符劣纲,只有成員變量才能使用它逢捺。在java并發(fā)程序缺少同步類的情況下,多線程對成員變量的操作對其他線程是透明的癞季。volatile變量可以保證
下一個讀取操作會在前一個寫操作之后發(fā)生劫瞳。
*保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值绷柒,這新值對其他線程來說是立即可見的志于。
*進制進行指令重排序。

9.什么是線程安全废睦?Vector是一個線程安全類嗎伺绽?
線程安全:如果一個代碼會在多個線程中運行的,其結(jié)果與單個線程運行結(jié)果一致嗜湃,且其他的變量的值也和預(yù)期的是一樣的奈应,就是線程安全。Vector是線程安全的集合购披。

10.Java中什么是競態(tài)條件杖挣? 舉個例子說明。
競態(tài)條件會導(dǎo)致程序在并發(fā)情況下出現(xiàn)一些bugs今瀑。舉例:兩個線程對一個文件進行操作程梦,如果文件a不存在,就創(chuàng)建一個新的橘荠;一個先判斷不存在,創(chuàng)建郎逃;另一個也會這么多哥童,就出現(xiàn)的文件的重復(fù)創(chuàng)建,覆蓋褒翰。

11.Java中如何停止一個線程贮懈?
jdk1.0本來有stop、suspend等方法优训,但是由于潛在的死鎖威脅因此被棄用朵你。當(dāng)線程執(zhí)行完線程會自動結(jié)束,可以用volatile布爾值來中斷線程揣非。

12.一個線程運行時發(fā)生異常會怎樣抡医?
如果該異常被捕獲或拋出,則線程繼續(xù)運行;如果沒有沒有被捕獲忌傻,線程將會停止大脉。Tread.UncaughtExceptionHandler是用于處理未捕獲一場造成
線程突然中斷情況的一個內(nèi)嵌接口。當(dāng)一個未捕獲異常將造成線程中斷的時候水孩,JVM會使用Thread.getUncaughtExceptionHandle()來查詢線程的UncaughtExceptionHandler镰矿,
并將線程和異常作為參數(shù)傳遞給handler的uncaughtException()方法進行處理。

13.如何在兩個線程間共享數(shù)據(jù)俘种?
共享數(shù)據(jù)場景有兩種:
*賣火車票秤标。
解決方案:創(chuàng)建一個Runnable,這個Runnable里有共享數(shù)據(jù)宙刘。如果每個線程執(zhí)行的代碼相同,那么可以使用同一個runnable對象,這個runnable有那個共享數(shù)據(jù),例如,賣票系統(tǒng)就是這么做的.
*銀行存錢問題苍姜。
解決方案:如果每個線程執(zhí)行的代碼不同,那么要使用不同的runnable對象,有如下兩種方式可以實現(xiàn)runnable對象間的數(shù)據(jù)共享
實現(xiàn)兩個runnable對象,將共享數(shù)據(jù)分別傳遞給兩個不同線程.
將這些Runnable對象作為一個內(nèi)部類,將共享數(shù)據(jù)作為成員變量.

http://www.cnblogs.com/dolphin0520/p/3958019.html

MySQL 索引使用的注意事項
◆索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,復(fù)合索引中只要有一列含有NULL值荐类,那么這一列對于此復(fù)合索引就是無效的怖现。所以我們在數(shù)據(jù)庫設(shè)計時不要讓字段的默認值為NULL。
◆使用短索引
對串列進行索引玉罐,如果可能應(yīng)該指定一個前綴長度屈嗤。例如,如果有一個CHAR(255)的列吊输,如果在前10個或20個字符內(nèi)饶号,多數(shù)值是惟一的,那么就不要對整個列進行索引季蚂。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間和I/O操作茫船。
◆索引列排序
MySQL查詢只使用一個索引,因此如果where子句中已經(jīng)使用了索引的話扭屁,那么order by中的列是不會使用索引的算谈。因此數(shù)據(jù)庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序料滥,如果需要最好給這些列創(chuàng)建復(fù)合索引然眼。
◆like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可葵腹,如何使用也是一個問題高每。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。
◆不要在列上進行運算
select * from users where YEAR(adddate)<2007; 將在每個行上進行運算践宴,這將導(dǎo)致索引失效而進行全表掃描鲸匿,因此我們可以改成
select * from users where adddate<‘2007-01-01’;
◆不使用NOT IN和<>操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阻肩,隨后出現(xiàn)的幾起案子带欢,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洪囤,死亡現(xiàn)場離奇詭異徒坡,居然都是意外死亡,警方通過查閱死者的電腦和手機瘤缩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門喇完,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剥啤,你說我怎么就攤上這事锦溪。” “怎么了府怯?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵刻诊,是天一觀的道長。 經(jīng)常有香客問我牺丙,道長则涯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任冲簿,我火速辦了婚禮粟判,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峦剔。我一直安慰自己档礁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布吝沫。 她就那樣靜靜地躺著呻澜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惨险。 梳的紋絲不亂的頭發(fā)上羹幸,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音辫愉,去河邊找鬼睹欲。 笑死,一個胖子當(dāng)著我的面吹牛一屋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袋哼,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼冀墨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涛贯?” 一聲冷哼從身側(cè)響起诽嘉,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虫腋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骄酗,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年悦冀,在試婚紗的時候發(fā)現(xiàn)自己被綠了趋翻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡盒蟆,死狀恐怖踏烙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情历等,我是刑警寧澤讨惩,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寒屯,受9級特大地震影響荐捻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寡夹,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一处面、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧要出,春花似錦鸳君、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至传于,卻和暖如春囱挑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沼溜。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工平挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人系草。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓通熄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親找都。 傳聞我的和親對象是個殘疾皇子唇辨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容