欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      2016年體育教師面試題寶典自己整理

      時間:2019-05-12 22:20:39下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《2016年體育教師面試題寶典自己整理》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《2016年體育教師面試題寶典自己整理》。

      第一篇:2016年體育教師面試題寶典自己整理

      常見體育教師面試題

      1、請談一談體育與健康課程理念中的“三維目標(biāo)”。1知識與能力2過程與方法 3情感態(tài)度與價值觀

      2、請談一談新課程理念倡導(dǎo)的學(xué)習(xí)方式。1培養(yǎng)學(xué)生自主學(xué)習(xí)的能力 2培養(yǎng)學(xué)生合作學(xué)習(xí)的習(xí)慣 3培養(yǎng)學(xué)生探究意識和能力

      3、體育與健康課程標(biāo)準(zhǔn)的基本理念是什么?

      1堅持“健康第一”的指導(dǎo)思想,促進(jìn)學(xué)生健康成長。2激發(fā)運動興趣,培養(yǎng)學(xué)生終身體育意識。3以學(xué)生發(fā)展為中心,重視學(xué)生的主體地位。4關(guān)注個體差異與不同需求,確保每一位學(xué)生受益。

      4、體育鍛煉應(yīng)遵循哪些原則? 1循序漸進(jìn)的原則; 2全面鍛煉的原則; 3經(jīng)常性鍛煉原則; 4區(qū)別對待的原則; 5準(zhǔn)備與整理活動原則。

      5.確定體育教學(xué)內(nèi)容應(yīng)遵循哪些原則?

      (1)教育性原則;

      (2)適應(yīng)學(xué)生身心特征的原則;(3)實用性和趣味性相結(jié)合原則;(4)理論與實踐相結(jié)合原則;(5)統(tǒng)一性與靈活性相結(jié)合原則。6.簡述課外體育鍛煉應(yīng)遵循的基本原則。

      (1)自覺、自愿性原則;(2)經(jīng)常性原則;(3)針對性原則;(4)適量性原則;(5)漸進(jìn)性原則。

      7.確立學(xué)校體育目標(biāo)的基本依據(jù)和基本要求有哪些?

      依據(jù):(1)社會的需要;(2)學(xué)校體育本身的功能;(3)學(xué)生身心發(fā)展特點

      要求:(1)全面性與重點性相結(jié)合;

      (2)可行性與挑戰(zhàn)性相結(jié)合;(3)具體化與定量化相結(jié)合。

      8.何謂示范法?體育教師在教學(xué)中應(yīng)如何選擇示范的位置和方向?

      答:是教師(或指定學(xué)生)以具體動作為范例,使學(xué)生了解所要學(xué)習(xí)動作的方法要領(lǐng),以建立動作的正確表象。選擇是范位置和方向時應(yīng)注意:

      (1)示范應(yīng)根據(jù)學(xué)生隊形、動作情況、安全的要求,運用不同的方位進(jìn)行(1分);

      (2)應(yīng)避免讓學(xué)生面向陽光和迎風(fēng);(3)要讓每個學(xué)生都能看清示范 9.怎樣上好綜合課?

      (1)注意合理安排新舊教材的教學(xué)順序,加強教材內(nèi)容之間的聯(lián)系性和整體性;

      (2)在實際教學(xué)組織過程中,合理搭配不同性質(zhì),不同難度的新舊教材內(nèi)容;

      (3)根據(jù)新舊教材內(nèi)容特點和要求,對不同年齡、性別、水平的學(xué)生進(jìn)行合理分組練習(xí),并合理地分配練習(xí)時間,安排練習(xí)密度和生理負(fù)荷。

      10.對少年兒童實施耐力訓(xùn)練應(yīng)注意什么問題?

      (1)以有氧耐力為主,不宜過早過多地進(jìn)行無氧耐力訓(xùn)練(2)學(xué)會正確的呼吸方法

      (3)應(yīng)注意對運動員意志品質(zhì)的培養(yǎng)

      11結(jié)合當(dāng)前的教育改革,談?wù)勼w育教師應(yīng)具備的基本素質(zhì)。

      1、當(dāng)前教育改革的現(xiàn)狀;

      2、應(yīng)具備如下素質(zhì):(1)高尚的道德品質(zhì);(2)廣博的知識;(3)全面的業(yè)務(wù)能力;(4)健美的體魄

      12請根據(jù)自己的專項和愛好,編寫一份競賽規(guī)程。

      答:應(yīng)包括如下要點:(1)競賽的名稱;(2)競賽的目的任務(wù);(3)競賽的時間和地點;(4)參加單位及各單位運動員的人數(shù)、分組辦法;(5)競賽項目和表演項目;(6)競賽辦法;(7)報名辦法;(8)獎勵辦法;(9)注意事項

      13實現(xiàn)學(xué)校體育目的任務(wù)的基本要求是什么?

      (1)全面貫徹黨的教育方針,擺正學(xué)校體育的位置(2)面向全體學(xué)生,以整體觀開展學(xué)校體育工作(3)堅持改革、開放,不斷開創(chuàng)新局面(4)加強領(lǐng)導(dǎo),進(jìn)行科學(xué)管理

      14體育教學(xué)中常用的講解法有哪些,體育教師在教學(xué)中應(yīng)如

      何進(jìn)行講解?

      答:常用的方法有直觀法、分段法、概要法、側(cè)重法、對比法、提問法、聯(lián)系法運用講解法應(yīng)注意:

      15簡述體育課考試的種類及內(nèi)容。

      答:種類有:(1)預(yù)先考核,(2)平時考核,(3)定期考核(4)總成績的評定

      16利用分組輪換教學(xué)應(yīng)注意什么問題?

      (1)著力于新教材組和復(fù)雜教材組,照顧女生組和體育分組(2)注意培養(yǎng)體育骨干;(3)要做好分組時的組織工作

      (4)采用分組輪換教學(xué),一般不應(yīng)同時出現(xiàn)兩個新授教材;(5)教是要有目的、有計劃進(jìn)行巡回指導(dǎo) 17簡述課余體育鍛煉的特點及意義。

      特點:(1)強制性與自覺性結(jié)合(2)靈活性與計劃性結(jié)合(3)全面性與針對性結(jié)合(4)娛樂性與健身性并重.意義:(1)復(fù)習(xí)提高體育課所學(xué)的技術(shù)和技能;(2)娛樂身心,試學(xué)生養(yǎng)成健全的個性心理品質(zhì)(3)有助于學(xué)生終生體育館的形成。18請為某學(xué)校制定一份年度競賽日程計劃。

      答:要求包括如下要點:(1)編號(2)競賽名稱(3)日程按排(4)地點(5)參加單位(6)參加人數(shù)(7)主辦單位(8)備注。

      19我國的體育教學(xué)目標(biāo)是什么?如何實現(xiàn)這一目標(biāo)?

      答:目標(biāo)是使學(xué)生具有一定的體育素質(zhì),促進(jìn)身心發(fā)展,培養(yǎng)共產(chǎn)主義思想品德,為培養(yǎng)社會主義建設(shè)者、保衛(wèi)者服務(wù)

      上述目標(biāo)可通過完成如下任務(wù)實現(xiàn):(1)向?qū)W生傳授體育和衛(wèi)生保健的“三基”(2)提高學(xué)生健康水平,增強體質(zhì)(3)促進(jìn)學(xué)生一般發(fā)展與特殊發(fā)展(4)進(jìn)行思想品德教育和培養(yǎng)意志品質(zhì)

      20直觀、思維與實踐相結(jié)合原則是依據(jù)什么提出的?如何貫徹這一原則?

      答:依據(jù)是認(rèn)識事物的規(guī)律貫徹該原則應(yīng)注意:(1)盡可能利用多種直觀方式、擴大直觀的效果(2)加強運動思維、發(fā)現(xiàn)問題、解決問題能力的培養(yǎng)(3)加強啟發(fā)式教學(xué)

      (4)正確處理直觀、思維與實踐三者的關(guān)系 21簡述少年兒童實施力量訓(xùn)練的基本要求?

      (1)注意骨骼、肌肉的發(fā)展特點;

      (2)力量訓(xùn)練要大小肌肉群、局部和整體肌肉全面發(fā)展(3)要以動力性練習(xí)為主,不宜采用靜力性練習(xí)(4)注意循序漸進(jìn),長期進(jìn)行(5)注意練習(xí)后肌肉的放松 22簡述體育鍛煉的原理及應(yīng)遵循的原則? 原理:

      (1)新陳代謝理論(2)動態(tài)平衡理論

      (3)運動負(fù)荷有效價值閾理論;

      原則:(1)自覺性原則(2)經(jīng)常性原則(3)全面性原則(4)針對性原則(5)適量性原則(6)漸進(jìn)性原則

      23.制定學(xué)校年度競賽日程計劃應(yīng)注意什么問題?

      答:(1)優(yōu)先安排重要的競賽,固定時間,便于做好充分準(zhǔn)備

      (2)競賽的時間、次數(shù)不宜過分集中,應(yīng)據(jù)季節(jié)和氣候特點,充分利用節(jié)假日合理安排(3)競賽計劃中各項競賽的排列順序,以日期先后為準(zhǔn)排列

      (4)每向競賽的具體規(guī)定,應(yīng)另定競賽規(guī)程發(fā)給有關(guān)單位

      24單手肩上投籃

      單手肩上投籃:(以右手為例)右手五指自然分開(掌心空出),指根以上部位觸球,向后屈腕,屈肘持球于肩上耳部左右,肘內(nèi)收,前臂與地面接近垂直,左手扶球的左側(cè),右腳稍前,左腳稍后,重心放在兩腳之間,兩膝微屈,目視投籃目標(biāo)。投籃時,兩腳前腳掌用力蹬地,伸展腰腹,抬肘,手臂上伸,即將伸直時,手腕用力前屈,手指撥球,球最后經(jīng)中指和食指的指端投出。球出手后,腿、腰、臂、自然伸直。

      25雙手胸前傳球:

      雙手胸前傳球是最基本、最常用的傳球方法。這種傳球速度快。

      持球時,兩手五指自然分開,拇指相對成八字形,用指根以上部位握球的側(cè)后方,手心空出,兩肘自然彎屈于體側(cè),將球置于胸前。肩、臂、腕肌肉放松,兩眼注視傳球目標(biāo),身體成基本姿勢。傳球時(圖),后腳蹬地,身體重心前移,同時兩臂前伸,手腕由下向上翻轉(zhuǎn),同時拇指用力下壓,食、中指用力彈撥,將球傳出

      動作難點:蹬(地)、伸(臂)、翻(腕)、抖(腕)、撥(指)、動作協(xié)調(diào)連貫,雙手用力均勻。

      動作重點:。出球后手心和拇指向下,其余手指向前。

      26簡述彎道跑主要動作要領(lǐng) 彎道跑技術(shù)規(guī)格

      (1)彎道起跑、加速跑動作同直道起跑和加速跑。而只是為了起跑后有一段直線加速跑的原因,起跑器必須要裝在跑道右側(cè)正對彎道切點的位置上。相應(yīng)地,在“各就位”動作時,左手應(yīng)撐在距起跑線后沿5~10厘米處。

      (2)彎道途中跑:為了克服離心力,彎道跑擺時,整個身體向內(nèi)傾斜,擺動腿前擺時,左膝稍向外展,以前腳掌外側(cè)著地;右膝稍向內(nèi)扣,以腳掌內(nèi)側(cè)著地,同時,并加大右腿前擺的幅度。彎道跑擺臂時,左臂擺動幅度稍小,靠近體側(cè)前后擺動;右臂擺動的幅度和力量稍大,且前擺時稍向左前方,后擺時肘關(guān)節(jié)稍向外。彎道技術(shù)變化的程度與跑的速度、彎道半徑有關(guān)聯(lián),速度越快、半徑越小,技術(shù)變化的程度越大。從彎道進(jìn)入直道時,身體逐漸減小內(nèi)傾程度,放松跑2~3步,然后全力跑完全程。

      27跳遠(yuǎn)技術(shù)要領(lǐng)

      第一,助跑,助跑是急行跳遠(yuǎn)的最關(guān)鍵技術(shù)。助跑速度要快,節(jié)奏感強,有彈性,踏跳時不能減速找板,要以最高的速度攻板踏跳。

      第二,起跳角,最佳的起跳角度是18~24度(理論上是45度,但那是違背自然規(guī)律的,生物界沒有能達(dá)到這個角度的),也就是說踏跳瞬間身體要向斜上方盡力騰起,雙臂斜上擺動帶動身體跳起。

      第三,空中姿態(tài),你沒有練過跳遠(yuǎn),可以采用蹲踞式騰空,也就是踏跳瞬間,擺動腿隨身體向前擺動,與地面成平行狀態(tài),保持這個姿態(tài)(空中的弓箭步,這個就叫騰空步)一段時間(很短,根據(jù)自己的水平),然后踏跳腿向擺動腿靠攏,準(zhǔn)備落地。

      第四,落地,落地時腰腹發(fā)力,雙腿盡力向胸前靠攏,小腿向前伸展,完成落地。標(biāo)準(zhǔn)的落地,人是向側(cè)向倒的(或向臀部小坐)。如果向前倒,就是起跳不充分,如果向后倒就是助跑速度不合適。

      28請簡介“后蹬跑”動作要領(lǐng),并示范 動作要領(lǐng)體:

      基本姿勢:上體正直或稍前傾,兩臂前后有力擺動。

      蹬地:充分伸展髖關(guān)節(jié),膝、踝關(guān)節(jié)蹬伸在后,后蹬力量大,重心前移,身體較放松。

      前跨:擺動腿積極向前上方擺動至水平或接近水平部位時,帶動同側(cè)髖充分前送,同時膝關(guān)節(jié)放松,大腿積極下壓。

      后拉:小腿前送至足前掌著地,緩沖,迅速轉(zhuǎn)入后蹬。

      注意后蹬和跨步的區(qū)別:步跳是向上的,包括你的擺臂同時繞環(huán)向上也是為了向上騰起,同時向前進(jìn)行;要求——后腿用力蹬伸,前腿屈膝前頂、送髖,落地時小腿積極后拉,腳掌扒地,手臂上提擺至肩高制動,有明顯的騰空時間。

      (一)教師職業(yè)理想

      第一,熱愛教育事業(yè)。

      第二,熱愛學(xué)生。

      第三,獻(xiàn)身教育事業(yè)。

      第四,勇于同一切危害教育事業(yè)的行為進(jìn)行堅決的斗爭。

      第五,不斷提高自身素質(zhì)。教師職業(yè)責(zé)任

      第一,教師必須自覺地做到對學(xué)生負(fù)責(zé)。

      第二,對學(xué)生家長負(fù)責(zé)。

      第三,對教師集體負(fù)責(zé)。

      第四,對社會負(fù)責(zé)。

      31教師職業(yè)態(tài)度

      首先,教師必須有主人翁的責(zé)任感。

      第二,具有從事教育勞動的光榮感與自豪感。

      第三,要有肯于吃苦的精神。

      32教師職業(yè)紀(jì)律

      第一,要有教師意識并不斷強化這種意識。

      第二,認(rèn)真學(xué)習(xí)教師職業(yè)紀(jì)律的有關(guān)規(guī)定。

      第三,在教育勞動中恪守教師職業(yè)紀(jì)律。

      第四,從一點一滴做起。

      第五,虛心接受批評,勇于自我批評,善于改正錯誤。

      33教師應(yīng)具備的專業(yè)素質(zhì)大致可概括為六個方面:

      (一)科學(xué)正確的教育觀念

      (二)良好的師德修養(yǎng)

      (三)較高的學(xué)識水平

      (五)教育教學(xué)研究的意識和能力

      (四)駕馭教育教學(xué)的能力

      (六)較高的現(xiàn)代信息素養(yǎng)

      34新時期教師應(yīng)具備哪些能力

      一.專業(yè)的基礎(chǔ)知識

      二.豐富的知識領(lǐng)域 三.良好的溝通能力

      四.專業(yè)的職業(yè)禮儀

      35體育教師的基本條件 1高尚的道德品質(zhì)

      2寬厚的理論基礎(chǔ)與廣博的知識 3良好的專業(yè)專項技術(shù)

      4先進(jìn)的現(xiàn)代教育思想和教育觀念 5全面的專業(yè)工作能力 6良好的心理品質(zhì)和健強的體魄

      36體育教師的責(zé)任心 1教師要身體力行,以人育人

      2教師要不斷的提高自己的專業(yè)知識和業(yè)務(wù)水平3教師要關(guān)愛學(xué)生

      37教師的職業(yè)理想 1熱愛教師事業(yè) 2熱愛學(xué)生 3現(xiàn)身教育事業(yè)

      4用于同危害教育事業(yè)的行為做斗爭

      5不斷提高自身素質(zhì)

      38教師的基本素質(zhì)

      1思想政治素質(zhì)

      2道德素質(zhì)

      3文化素質(zhì)

      4能力素質(zhì) 5心里素質(zhì)

      6身體素質(zhì)

      7外在素質(zhì) 39課改 體育與健康 課程教育觀念發(fā)生了哪些變化 1從過去的被動執(zhí)行者,變成主動參與課程設(shè)計決策者 2從單一的運動水平變成全面關(guān)注學(xué)生發(fā)展 3在教學(xué)方面,從強調(diào) 教 轉(zhuǎn)為強調(diào)學(xué)生自主學(xué)

      4在師生關(guān)系方面 從學(xué)生主宰,轉(zhuǎn)變?yōu)榕c學(xué)生合作學(xué)習(xí)的伙伴關(guān)系 5對學(xué)生的評價:從關(guān)注學(xué)生成績,轉(zhuǎn)為重視學(xué)生的學(xué)習(xí)過程

      40課改強調(diào)學(xué)生參與主體作用與 放羊式 教學(xué)有什么區(qū)別 1教學(xué)指導(dǎo)思想 2教學(xué)計劃設(shè)計 3教師作用

      4教學(xué)組織形式與方法 5教學(xué)反饋與調(diào)控 6教學(xué)評價 7安全因素

      41、現(xiàn)代教育中學(xué)生偏科是一個普遍存在的現(xiàn)象,綜合考慮學(xué)生偏科主要有下列三大原因:

      (1)教師問題。小學(xué)生偏科,受教師影響較大。有的學(xué)生可能是因為喜歡某個老師而喜歡學(xué)習(xí)她所教的科目,也可能因為不喜歡某個老師連帶地也不喜歡這門科目。

      (2)家庭環(huán)境影響。家庭特殊的文化氛圍和家長的某些愛好以及家長職業(yè)差異會誘發(fā)學(xué)生偏科。父母對某一學(xué)科主觀上的重視程度也會導(dǎo)致學(xué)生的偏科。

      (3)學(xué)生原因。學(xué)生自身的智力和非智力因素也是造成學(xué)生偏科的原因,對某門課感興趣或?qū)W得輕松就喜歡學(xué)習(xí),不感興趣或?qū)W得費勁就抵觸這門課。

      2、你同意沒有不合格的學(xué)生,只有不合格的教師這句話嗎?

      這句話源于教育家陳鶴琴的一句名言“沒有教不好的學(xué)生,只有不會教的老師”?!皼]有不合格的學(xué)生,只有不合格的教師”這句話強調(diào)的是教育者對孩子的一種責(zé)任與信念和教育者基于這種責(zé)任與信念對自己的嚴(yán)格要求。這句話的真理性在于:不輕易對任何學(xué)生喪失信心。換句話說,這句話只是教育者嚴(yán)于律己的座右銘,而非一種教育評價標(biāo)準(zhǔn)。有沒有“教不好的學(xué)生”?我的回答是:“可以說沒有,也可以說有?!闭f“沒有”,必須具備兩個條件:第一,家庭教育和社會教育非常理想,只差學(xué)校教育這一環(huán);第二,“好”的標(biāo)準(zhǔn)不是一個確定的標(biāo)準(zhǔn),而是針對每一個具體學(xué)生,讓他們在原有的基礎(chǔ)上有所進(jìn)步,這里的進(jìn)步可能是綜合的,也可能是某一方面的。說“有”,是因為在現(xiàn)在的評價背景下,即使老師“會教”,可“教不好的學(xué)生”仍然大批量地存在。道理很簡單:無論高考還是中考,都是選拔性考試,其目的就是要讓一部分學(xué)生被淘汰,如果把“教不好”的--都教“好”了,還怎么“選拔”?即使拋開考試評價不說,就以思想品德教育而言,是不是所有的學(xué)生都能被“教好”呢?理論上好像是這樣的。因為任何人一出生,都是一張白紙,誰也不會一出生就帶來一身惡習(xí)。但問題是,我們教育所面對的不是一張白紙,而是已經(jīng)被家長、被社會涂抹過許多印跡的紙,要想在這張紙上重新畫出美麗的畫,不是不可能,但是無法保證百分之百成功。家長是孩子的第一任老師,是教育這一鏈條上的第一環(huán),我們面對的學(xué)生已經(jīng)是被加工過的半成品;同時,孩子還潛移默化地受著社會的影響--這都決定了我們的教育不是從零開始。我一直堅信,教育是有所作為的。因此,在我的教育歷程中,我總是問自己:對于具體的某一個“后進(jìn)生”,我是否已經(jīng)盡到了我能夠盡的最大努力?實踐告訴我,如果我們不用一把尺子衡量學(xué)生,絕大多數(shù)“后進(jìn)生”都會有進(jìn)步的--不一定成為棟梁之才,但至少可以成為一個合格的公民,成為最好的自己。同時,我也始終認(rèn)為,學(xué)校教育不是萬能的。在一個人的成長過程中,學(xué)校教育的作用最多占三分之一,另外兩個三分之一分別是學(xué)生所受到的非學(xué)校教育(包括家庭教育、社會教育)以及學(xué)生自己的自我教育。我們不能做超出我們能力和責(zé)任的事,我們只能在我們力所能及的范圍內(nèi),盡可能地把我們的工作做好--這樣,即使個別學(xué)生最終也沒有被“教好”,我們也問心無愧!“沒有教不好的學(xué)生,只有不會教的老師”--如果這是教師的自勵,我對這樣的教師表示敬意;如果有人以此苛求教師,我對這樣的苛求者表示遺憾

      【題3】你覺得怎樣才能上好第一節(jié)課?

      “好的開始是成功的一半”,重視第一節(jié)課是為人師者都要重視的問題。在第一節(jié)課中,給學(xué)生留下一個好的第一印象,是建立良好師生情感的重要保障。教師若能給學(xué)生留下一個好的第一印象,就能在學(xué)生中樹立好的形象和較高的威信,從而建立良好的師生情感,為以后上好這門課打下良好的基礎(chǔ)。第一印象主要包括以下幾點:

      (1)注重儀表美。教師在走進(jìn)教室之前,對自己的服裝和發(fā)型應(yīng)適當(dāng)講究一點,打扮得體、樸素、自然、大方。留給學(xué)生一個美的第一印象。

      (2)注重感情因素。在第一節(jié)課中,教師應(yīng)注重自己情感的發(fā)揮,在教學(xué)的每一個環(huán)節(jié)上都應(yīng)包含“情”。通過自己充沛的精力、飽滿的情緒、昂揚的激情感染學(xué)生、激勵學(xué)生。上課過程中,應(yīng)充分利用面部表情表達(dá)自己的情感,經(jīng)常保持輕松愉快的心情,面帶微笑,幽默風(fēng)趣。在第一堂課中,教師一定要及時把自己關(guān)心愛護(hù)學(xué)生、樂于幫助學(xué)生的思想表露出來,取得學(xué)生的認(rèn)可,為建立比較融洽的師生關(guān)系打下良好的基礎(chǔ)。

      (3)注重業(yè)務(wù)水平的發(fā)揮。第一堂課與一般課不同,一般課的授課內(nèi)容是固定的,主要是傳授新知識,而第一堂課內(nèi)容則不受教材的限制。更多的是充分運用教師淵博的知識,發(fā)揮自己的優(yōu)勢,上活上好這堂課。這就要求教師首先要認(rèn)真?zhèn)浜谜n,把淵博的知識和相關(guān)的素材有機地結(jié)合起來,合理地安排教學(xué)過程,課堂上的每一句話,都要圍繞主題開展。同時要精心設(shè)計板書,處理好語言的敘述與板書之間的關(guān)系,使學(xué)生感到有節(jié)奏感,不至于使課堂沉悶、單調(diào)。其次是脫稿授課,這樣有利于把課講活,學(xué)生會覺得這位老師對課程熟悉、有水平。

      (4)培養(yǎng)學(xué)生對本課程學(xué)習(xí)的興趣。第一堂課的任務(wù)之一,是培養(yǎng)學(xué)生對本課程學(xué)習(xí)的興趣。為此,我認(rèn)為,應(yīng)使學(xué)生明白本課程要學(xué)習(xí)些什么,讓學(xué)生了解本課程的大概內(nèi)容,知道將來能學(xué)到哪些知識和技能,有助于激發(fā)學(xué)生的學(xué)習(xí)熱情;其次,應(yīng)使學(xué)生明白為什么要學(xué)習(xí)本課程。

      41、在體育課中出現(xiàn)意外情況怎么辦?

      1.在體育課堂如發(fā)現(xiàn)學(xué)生受傷、中暑等意外情況,教師應(yīng)按規(guī)定初步查看傷病情況,在校醫(yī)指導(dǎo)下按程序進(jìn)行初步處理,如果嚴(yán)重應(yīng)陪學(xué)生去附近醫(yī)院診治,同時及時通知班主任及學(xué)生處。

      2.體育館出現(xiàn)異常情況(如火災(zāi)等)應(yīng)按規(guī)定及時疏散學(xué)生,教師維持秩序,做到快而不亂。

      3.體育教師立即處理相關(guān)事宜并在第一時間向校領(lǐng)導(dǎo)匯報。42.為什么要選擇教師這個行業(yè)?

      【參考答案】:我讀的是師范類的專業(yè),當(dāng)一名優(yōu)秀的老師是我最大的愿望?,F(xiàn)在公司之類的工作不夠穩(wěn)定,教師穩(wěn)定性比較高,尤其是好的學(xué)校很重視對教師的培養(yǎng),所以未來會有很大的發(fā)展空間。

      43、你最尊敬的教育家是誰,為什么?

      【參考答案】:我最崇拜的教育家是素有英語教育界泰斗之稱的——張道真。我之所以崇拜他,原因有三。

      第一高尚的人格魅力。76歲高齡的張道真教授,在國內(nèi)外英語教育界享有盛譽。他把畢生的經(jīng)歷都獻(xiàn)身于教育并研究教育,正是他帶領(lǐng)著我們走著英語教育改革的每一個步伐!

      第二科學(xué)、實用的英語教學(xué)方法。他提出了一系列的方法來改變這種狀態(tài)。而這些行之有效的方法被廣泛應(yīng)用到實際教學(xué)中。

      第三嚴(yán)謹(jǐn)治學(xué)的思想前瞻性。張教授提倡考試要改革,聽說與讀寫,二者并舉, 甚至聽說占有更重要的地位。思想深邃的張道真教授,以其獨特的人格魅力,科學(xué)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)思想,征服了我,我要秉承他老人家的思想和 12

      態(tài)度,在未來的英語教學(xué)之路上,默默奮斗,勇敢向前,創(chuàng)造英語教學(xué)的輝煌,是我學(xué)習(xí)的榜樣!

      44、你最贊賞的教學(xué)方法是什么?

      【參考答案】:以學(xué)生為主體,激發(fā)學(xué)生學(xué)習(xí)興趣,使課堂生動活躍的教學(xué)法是我贊賞的教學(xué)方法。教學(xué)過程中,用一些平常生活中最常見的例子來跟學(xué)生解釋,容易吸引學(xué)生的注意力,提高學(xué)生的學(xué)習(xí)興趣。我想每一種教學(xué)方法都有它的獨特之處,如果用得好了,用得恰當(dāng)可以使課堂變得豐富多彩!

      45、為什么學(xué)生會偏科?

      【參考答案】:學(xué)生偏科有很多因素,我著重從以下三點來分析,第一興趣,第二環(huán)境,第三老師。如果具體分析,第一興趣,學(xué)生因為興趣愛好不同容易出現(xiàn)偏科現(xiàn)象;第二是環(huán)境,低年級容易受周圍環(huán)境的影響,周圍同學(xué)經(jīng)常在一起討論的科目會影響自己對某學(xué)科的偏好。第三老師,部分學(xué)生因為某科老師而出現(xiàn)偏科現(xiàn)象。當(dāng)然也會有其他因素?;卮鹜戤?。

      46、做好一名教師固然離不開敬業(yè)、愛生、專業(yè)知識扎實,除了這些,你認(rèn)為教學(xué)的最重要特質(zhì)是什么?

      【參考答案】:做一名好老師除了敬業(yè)、愛生、專業(yè)知識扎實之外,老師擁有開朗的個性,良好的品德,比較淵博的知識更為重要。

      47、你贊同“教學(xué)有法、但無定法、貴在得法”這種提法嗎?為什么?

      【參考答案】: 贊同。教學(xué)方法因人而宜,沒有一個適合所有人的方法,但要適合個人,這就是貴在得法。教師備課時要從教學(xué)實際出發(fā),根據(jù)教材特點、學(xué)生實際、本校條件等,結(jié)合不同的教學(xué)目標(biāo)、內(nèi)容、對象和條件,因校制宜、因時制宜,靈活、恰當(dāng)?shù)亟梃b和選用國內(nèi)外的教學(xué)方法,突出重點、攻破難點,并善于探討、實踐,教學(xué)其實就是教學(xué)有法、但無定法、貴在得法的過程。

      48、新課程標(biāo)準(zhǔn)的價值取向是什么?

      【參考答案】:新課程標(biāo)準(zhǔn)的價值取向是要求教師成為決策者而不是執(zhí)行者,要求教師創(chuàng)造出班級氣氛、創(chuàng)造出某種學(xué)習(xí)環(huán)境、設(shè)計相應(yīng)教學(xué)活動并表達(dá)自己的教育理念等等。

      這些常見問題如果考生在考前沒有經(jīng)過準(zhǔn)備,面試時難免會有疏漏,目前,就業(yè)壓力的增大,招聘機會的寶貴自不必言,“凡事預(yù)則立不預(yù)則廢”要想在眾 13

      多考生中脫穎而出,考生在備考階段對這些常見問題的充分準(zhǔn)備是必不可少的,是確保考生取得好成績的好方法。

      49、體育教學(xué)中如何處理好師生關(guān)系

      我認(rèn)為和諧的師生關(guān)系是激發(fā)學(xué)生學(xué)習(xí)的積極性、全動性、創(chuàng)造性的原動力,對提高課堂效益是十分重要的。關(guān)系融洽,不但活躍了課堂氣氛,而且調(diào)動起學(xué)生的極大熱情去參與學(xué)習(xí)。反之,不注意培養(yǎng)學(xué)生的學(xué)習(xí)興趣,讓學(xué)生苦學(xué),使學(xué)生厭學(xué),則嚴(yán)重阻礙了學(xué)生學(xué)習(xí)能力的提高,當(dāng)然更談不上課堂效益的提高。

      使學(xué)生樂學(xué),教師必須運用行之有效的方法,首先要教育學(xué)生端正學(xué)習(xí)動機。通過改善教學(xué)活動中的師生關(guān)系,激發(fā)學(xué)生學(xué)習(xí)的自覺性,教育家加里指出:教師與學(xué)生的關(guān)系是一種特殊的人際關(guān)系,區(qū)別于父子和母女,區(qū)別于兄弟姐妹,區(qū)別于朋友同事,在教育活動中不可忽視。其次,要想提高課堂效益,教師必須創(chuàng)設(shè)好輕松愉快的教學(xué)情境。美好的情境,可使學(xué)生產(chǎn)生巨大的感染力,激發(fā)出思維的極大活力,為學(xué)生樂學(xué)創(chuàng)造了條件。另外,提高課堂效益,教師必須要優(yōu)化自己所教學(xué)科的課堂結(jié)構(gòu),首先要形成活潑進(jìn)取的學(xué)習(xí)氣氛,在良好的學(xué)習(xí)氣氛中,豐富知識,增強技能。第二,要滿足學(xué)生的學(xué)習(xí)需要。教育是培養(yǎng)人、造就人的社會活動。教育的產(chǎn)生和發(fā)展依賴于一定的社會需要,它與一定社會的生產(chǎn)力發(fā)展水平、生產(chǎn)關(guān)系等都有著密切的關(guān)系。

      50、怎樣在體育教學(xué)中激發(fā)學(xué)生運動興趣,培養(yǎng)學(xué)生終身體育意識? 答:應(yīng)從以下四個方面結(jié)合教學(xué)實際進(jìn)行分析;①教師和學(xué)生應(yīng)建立一種合作與互動的關(guān)系,平等真誠的對待每一位學(xué)生,滿足學(xué)生需要和愛好。②教學(xué)內(nèi)容的選擇要符合學(xué)生身心發(fā)展特征。③教學(xué)方法手段要多樣,特別注意學(xué)法的應(yīng)用。④評價應(yīng)用要合理。

      51、針對體育教學(xué)中出現(xiàn)的傷害事故應(yīng)如何對待? 答:①辯證的看待體育教學(xué)中的安全事故。②想方設(shè)法預(yù)防安全事故的發(fā)生。③多渠道開展安全教育宣傳活動。④提高教師專業(yè)水平和教學(xué)技能。⑤重視體育課教學(xué)常規(guī),強化教學(xué)紀(jì)律管理。⑥加強對體育場地和器材的管理。⑦注意保護(hù)與幫助,充分發(fā)揮學(xué)生中體育骨干的作用。

      52、開發(fā)和利用體育與健康課程資源時應(yīng)注意哪些方面?

      答:①要注意課程內(nèi)容的選擇,要符合學(xué)生年齡特點,能滿足學(xué)生興趣和愛好,14

      并具備因地制宜的特點。②要注意更新觀念,根據(jù)“身體、心理、社會適應(yīng)”整體健康觀進(jìn)行課程設(shè)計,活動的內(nèi)容和方法要有助于學(xué)生達(dá)成體育健康課程目標(biāo)。③開發(fā)和利用課程資源是課程設(shè)計的重要工作,要注意與實際情況相結(jié)合。④把開發(fā)和利用工作納入體育研究工作中。⑤教育行政部門加強對開發(fā)利用的管理監(jiān)督和指導(dǎo)工作,將其作為評價學(xué)校課程設(shè)的一項重要內(nèi)容。⑥教育行政部門對教師開發(fā)利用能力和課程建設(shè)能力進(jìn)行專門培訓(xùn),并將其那入學(xué)歷教育和學(xué)歷后教育的計劃之一。

      53、論述體育教師必具備的基本條件?

      答: ⑴高尚的道德品質(zhì)。體育教師不僅要有堅定正確的政治思想和強烈的事業(yè)心、責(zé)任感,還要有較好的個人修養(yǎng)與品質(zhì),嚴(yán)于律己、以身作則、談吐文雅、衣著整潔、舉止文明、精神飽滿等。⑵寬厚的理論基礎(chǔ)與廣博的知識。體育教學(xué)的特點要求體育教師要了解人體運動時各器官與生理機能的變化特點和規(guī)律,切實實現(xiàn)學(xué)生鍛煉身體、增強體質(zhì)的教學(xué)目標(biāo),體育教師必須具有深厚的基礎(chǔ)理論知識,并以此為指導(dǎo),才能更好的完成教學(xué)任務(wù)。同時,體育教師適應(yīng)具備專業(yè)知識與技能教育學(xué)、心理學(xué)知識的及橫向?qū)W科知識等。⑶良好的專項技術(shù)技能。韋有效的促進(jìn)青少年健康,更好的搞好體育教學(xué)工作,體育教師還應(yīng)該熟練的掌握至少一項運動生理和技能。⑷先進(jìn)的現(xiàn)代教育思想和教育觀念。教育思想和教育觀念都是體育教師素質(zhì)的主要組成部分,思想和觀念是人們高層次心理需求的反映,他必須產(chǎn)生一種強大的內(nèi)驅(qū)力去激勵體育教師全身心的投入到自己的教學(xué)工作中。

      1、上課時學(xué)生出現(xiàn)意外傷害事故,家長到學(xué)校糾紛,你如何處理?

      2、你為什么報名參加特崗,為什么選擇教師這個崗位?

      3、工作與家庭之間的關(guān)系應(yīng)該如何處理?如何做好一名優(yōu)秀鄉(xiāng)村教師?

      4、學(xué)生上課不遵守課堂紀(jì)律應(yīng)該怎么辦?

      5、如何上好第一節(jié)體育課?讓學(xué)生留一份好影響。

      6、課堂上的突發(fā)事情應(yīng)該如何處理?

      7、體育教師應(yīng)該具備什么能力?你具備了嗎?

      8、體育課堂管理內(nèi)容?

      9、如何對學(xué)生進(jìn)行評價?

      10、怎么上好體育器材不足的體育課?

      11、如何選拔優(yōu)秀運動員?

      12、作為一名教練員,如何給運動員安排訓(xùn)練內(nèi)容?

      13、你如何帶好一個運動訓(xùn)練隊?

      14、你的業(yè)余愛好是什么?

      15、你認(rèn)為自己最大的弱點是什么?

      16、對于身體素質(zhì)差的學(xué)生應(yīng)該怎么對待?

      17、對于不喜歡上體育課的學(xué)生應(yīng)該怎么對待?

      18、運動后引起的疲勞應(yīng)該如何處理?

      19、運動損傷造成的原因? 20、怎么預(yù)防運動損傷?

      21、閉合性軟組是損傷的處理方法?

      22、開放性軟住址損傷急救原則?

      23、作為班主任,你怎樣團(tuán)結(jié)任課教師?

      24、班主任應(yīng)具備哪些素質(zhì)?

      25、體育教師應(yīng)該具備哪些素質(zhì)?

      26、解釋“超越器械”

      27、體育課的“三維目標(biāo)”、學(xué)習(xí)方式、基本目標(biāo)、基本性質(zhì)。

      28、運動訓(xùn)練計劃包括內(nèi)容?

      29、運動訓(xùn)練具體方法? 30、運動訓(xùn)練常用的手段?

      31、彎道跑的動作要領(lǐng):

      擺動時左膝向外展,右膝向內(nèi)扣;著地時,左腳外側(cè)著地,右腳內(nèi)側(cè)著地;左手臂擺動幅度小,右臂擺動力量、幅度稍大;右臂前擺稍向前,后擺時肘關(guān)節(jié)向外,;身體重心稍向左傾。

      32、單手肩上投籃動作要領(lǐng):

      兩腳開立,膝關(guān)節(jié)微彎曲,重心落于兩腳之間,登地起跳;兩腳持球至肩上,一手托球,一手持球側(cè)方。當(dāng)身體跳到最高點時,伸前臂,撥腕扣指,中食指將球投出。

      33、雙手胸前傳接球動作要領(lǐng):

      傳球:前臂擺動,翻腕、曲腕、扣腕,手指彈撥。接球:伸手迎球,指

      端促球,引球緩沖,保持平衡。

      第二篇:體育教師面試題

      體育教師面試題

      體育教師面試題 體育教師面試題

      (一)A組:

      1、簡述單手投籃的動作要領(lǐng)。

      2、簡述雙手胸前傳接球動作要領(lǐng)。

      3、簡述彎道跑主要動作要領(lǐng)。

      B組:

      1、請談一談體育與健康課程理念中的“三維目標(biāo)”。

      2、請談一談新課程理念倡導(dǎo)的學(xué)習(xí)方式。

      3、體育與健康課程的基本性質(zhì)包括哪幾個方面。

      4、請談一談體育與健康課最基本的目標(biāo)要求。C組:

      1、籃球。(1)、運球一個往返兩次三步上籃;

      (2)、行進(jìn)間急停跳投;

      (3)、突破上籃。

      2、排球。(1)、定點傳球(不間斷點續(xù)傳20次);(2)、定點墊球20次。

      D組:

      1、請簡介“超越器械”,并以投擲壘球示范。

      2、請簡介“后蹬跑”動作要領(lǐng),并示范。E組:

      1、請創(chuàng)編八節(jié)繩操或一套韻律體操。

      (二)1、以“彎道跑”為內(nèi)容設(shè)計教案。

      2、以“雙手胸前傳接球”為內(nèi)容設(shè)計教案。注:

      1、每組任選一題;

      2、抽簽確定一題。二

      1、體育與健康課程標(biāo)準(zhǔn)的基本理念是什么?

      2、體育鍛煉應(yīng)遵循哪些原則?

      3、簡述體育運動對運動系統(tǒng)的影響?

      4、學(xué)校體育應(yīng)從哪些方面為終身體育打好基礎(chǔ)?

      5、分腿騰越動作要領(lǐng)是什么?請用簡筆畫描繪動作過程。

      四、分析題(15分)

      根據(jù)體育課程標(biāo)準(zhǔn)精神的要求,分析籃球變向運球教材。請注意目標(biāo)的明確,重點與難點的把握、教法與學(xué)法的創(chuàng)新。(簡案)《學(xué)校體育學(xué)》試題A卷

      一、填空題:(每空1分,共20分)

      1.學(xué)校體育管理過程包括計劃、實施 檢查和總結(jié)四個基本環(huán)節(jié)。2.循環(huán)練習(xí)法的主要特點是能增大練習(xí)密度、運動負(fù)荷.3.學(xué)校課余體育訓(xùn)練具有基礎(chǔ)性、業(yè)余性特點。

      4.體育教學(xué)應(yīng)以教師為主導(dǎo)學(xué)生為主體教材為主線。教師、學(xué)生、教材5 5.體育教學(xué)大綱的結(jié)構(gòu)一般由說明、教材綱要體系和考核項目級標(biāo)準(zhǔn) 三部分構(gòu)成。6.選擇和安排準(zhǔn)備活動的內(nèi)容應(yīng)注意全面性、針對性和_多樣性。

      7.測定體育課的運動負(fù)荷常采用觀察法、自我感覺法、生理測定法三種方法。8.按競賽進(jìn)行的空間范圍,學(xué)校運動競賽可分為校內(nèi)競賽、校外競賽兩種。

      二、判斷題:(判斷下列各題的正誤,用“√”和“×”表示。每小題1分,共10分)1.體育教學(xué)過程的三個階段就是動作技能形成的三個階段。(錯)2.人體只有承擔(dān)合理的運動負(fù)荷,才能增強體質(zhì)。(對)3.體育課的一般密度應(yīng)是越大越好。(對)

      4.體育教學(xué)中,為顯示動作的前后部位可采用正面示范。(錯)5.體育課的基礎(chǔ)結(jié)構(gòu)是根據(jù)人的認(rèn)識活動規(guī)律提出的。(錯)6.運動訓(xùn)練的周期性原則是依據(jù)超量恢復(fù)的原理提出的。(錯)7.相對力量是指運動員每公斤體重所具有的最大力量。(對)

      8.測定體育課的密度時,通常把教師要求學(xué)生跑步撿回器械的時間作為練習(xí)時間。(對)9.技評屬于體育課的客觀評價標(biāo)準(zhǔn)。(錯)

      10.重復(fù)練習(xí)法是在兩次練習(xí)之間沒有嚴(yán)格規(guī)定的間歇時間。(對)

      三、名詞解釋:(每小題3分,共15分)

      1.學(xué)校體育管理:指用盡可能少的人力和物力,以最佳的手段和方法,遵循學(xué)校體育的基本規(guī)律,對學(xué)校體育工作進(jìn)行計劃、實施、檢查、評定的工作過程。

      2.教材體系:指以教學(xué)目標(biāo)和任務(wù)為核心,遵循教材選編原則,將經(jīng)過選擇的各種教材按照一定的順序和要求組合成的統(tǒng)一整體。3.運動負(fù)荷:指學(xué)生做練習(xí)時所承受的生理負(fù)擔(dān)。

      4.定性評價:指對體育課中的各項評定內(nèi)容,根據(jù)評價者的經(jīng)驗,從理論上對可的質(zhì)量作出的分析與評價。

      5.預(yù)先考核:指通常在學(xué)期初,為了解學(xué)生基礎(chǔ)和特點所進(jìn)行的考核。

      四、簡答題:(每小題5分,共30分)1.確定體育教學(xué)內(nèi)容應(yīng)遵循哪些原則? 答:(1)教育性原則;(2)適應(yīng)學(xué)生身心特征的原則;(3)實用性和趣味性相結(jié)合原則;(4)理論與實踐相結(jié)合原則;(5)統(tǒng)一性與靈活性相結(jié)合原則。(注:每一個要點1分)2.簡述課外體育鍛煉應(yīng)遵循的基本原則。答:(1)自覺、自愿性原則;(2)經(jīng)常性原則;(3)針對性原則;(4)適量性原則;(5)漸進(jìn)性原則。(注:每一個要點1分)

      3.確立學(xué)校體育目標(biāo)的基本依據(jù)和基本要求有哪些? 答:依據(jù):(1)社會的需要;(2)學(xué)校體育本身的功能;(3)學(xué)生身心發(fā)展特點

      要求:(1)全面性與重點性相結(jié)合;(2)可行性與挑戰(zhàn)性相結(jié)合;(3)具體化與定量化相結(jié)合。

      4.何謂示范法?體育教師在教學(xué)中應(yīng)如何選擇示范的位置和方向?

      答:是教師(或指定學(xué)生)以具體動作為范例,使學(xué)生了解所要學(xué)習(xí)動作的方法要領(lǐng),以建立動作的正確表象。(2分)

      選擇是范位置和方向時應(yīng)注意:(1)示范應(yīng)根據(jù)學(xué)生隊形、動作情況、安全的要求,運用不同的方位進(jìn)行(1分);(2)應(yīng)避免讓學(xué)生面向陽光和迎風(fēng)(1分);(3)要讓每個學(xué)生都能看清示范(1分)5.怎樣上好綜合課? 答:(1)注意合理安排新舊教材的教學(xué)順序,加強教材內(nèi)容之間的聯(lián)系性和整體性(2分);(2)在實際教學(xué)組織過程中,合理搭配不同性質(zhì),不同難度的新舊教材內(nèi)容(1.5分);(3)根據(jù)新舊教材內(nèi)容特點和要求,對不同年齡、性別、水平的學(xué)生進(jìn)行合理分組練習(xí),并合理地分配練習(xí)時間,安排練習(xí)密度和生理負(fù)荷(1.5分)。6.對少年兒童實施耐力訓(xùn)練應(yīng)注意什么問題? 答:(1)以有氧耐力為主,不宜過早過多地進(jìn)行無氧耐力訓(xùn)練(2分);(2)學(xué)會正確的呼吸方法(2分);(3)應(yīng)注意對運動員意志品質(zhì)的培養(yǎng)(1分)

      五、論述題:(共15分)

      結(jié)合當(dāng)前的教育改革,談?wù)勼w育教師應(yīng)具備的基本素質(zhì)。答:

      1、當(dāng)前教育改革的現(xiàn)狀;

      2、應(yīng)具備如下素質(zhì):(1)高尚的道德品質(zhì);(2)廣博的知識;(3)全面的業(yè)務(wù)能力;(4)健美的體魄(注:答對要點得6—7分,論述全面、具體、清除加3—5分,有創(chuàng)造性加2—3分)

      六、應(yīng)用題:(共10分)

      請根據(jù)自己的專項和愛好,編寫一份競賽規(guī)程。

      答:應(yīng)包括如下要點:(1)競賽的名稱;(2)競賽的目的任務(wù);(3)競賽的時間和地點;(4)參加單位及各單位運動員的人數(shù)、分組辦法;(5)競賽項目和表演項目;(6)競賽辦法;(7)報名辦法;(8)獎勵辦法;(9)注意事項 《學(xué)校體育學(xué)》試題B卷

      一、填空題:(每空1分,共20分)

      1.在我國周代的教育,具體教育內(nèi)容為“六藝”。其中的射、御 是直接用來進(jìn)行軍事技能和身體訓(xùn)練的。

      2.學(xué)校體育是我國國民體育的_基礎(chǔ) 是我國體育發(fā)展的 戰(zhàn)略重點。3.解放后,全國最早開始實行體育教學(xué)大綱和教材的時間是1356年,《九年義務(wù)體育教學(xué)大綱》頒布的時間是1987年

      4.體育教師的工作特點是工作對象廣泛、工作任務(wù)繁重和工作范圍具有_社會性。5.動作技能的形成,大致可分為粗略掌握動作階段、改進(jìn)提高階段和運用自如階段。6.體育課分組教學(xué)的形式,一般分為分組不輪換、分組輪換兩種。

      7.體育教師的備課,不僅要備教材教法,而且要備場地,還要備_器材。8.分析體育課的方法有全面分析、專題分析。

      9.身體訓(xùn)練包括一般身體訓(xùn)練、轉(zhuǎn)向身體訓(xùn)練 兩個方面。10. 運動競賽中的淘汰法雙稱淘汰制,是逐步淘汰成績差的,最后得出_優(yōu)勝者的一種方法。

      二、判斷題:(判斷下列各題的正誤,用“√”和“×”表示。每小題1分,共10分)1.《學(xué)校體育工作條例》規(guī)定:要保證各級各類學(xué)校的學(xué)生每天有45分鐘的體育活動時間。(錯)

      2.對少年兒童運動技術(shù)訓(xùn)練的要求是全面訓(xùn)練打好基礎(chǔ)。(對)3.人體生長發(fā)育最重要的因素之一是遺傳因素。(錯)4.實施學(xué)校體育管理的決策人是體育組長。(錯)5.《大學(xué)生體育合格標(biāo)準(zhǔn)》按百分制計分。(對)6.體育課的練習(xí)密度越大越好。(錯)7.體育教學(xué)的主體是學(xué)生。(對)

      8.學(xué)校課余體育競賽的法規(guī)性文件是競賽規(guī)程。(對)9.在制定體育教學(xué)進(jìn)度時,快速跑教材空選用連續(xù)排列。(錯)10.體育教師應(yīng)以教學(xué)原則為指導(dǎo),來設(shè)計、調(diào)節(jié)、控制教學(xué)活動。(對)

      三、名詞解釋(每小題3分,共15分)

      1.體育教學(xué):教師根據(jù)大綱和教學(xué)計劃的要求,有目的有意識地全面發(fā)展學(xué)生的身體,增強體質(zhì),傳授“三基”,進(jìn)行思想品德教育的過程。

      2.教學(xué)常規(guī):是為保證體育課的正常順利進(jìn)行對師生提出的共同要求。

      3.重復(fù)練習(xí)法:是指在相對固定的條件下,使學(xué)生反復(fù)進(jìn)行練習(xí)的一種方法。4.課的密度:指課中各項活動合理運用的時間與課的總時間的百分比。5.競技狀態(tài): 指運動員達(dá)到優(yōu)異成績時所處的最佳準(zhǔn)備狀態(tài)。

      四、簡答題:(每小題5分,共30分)

      1.實現(xiàn)學(xué)校體育目的任務(wù)的基本要求是什么?

      答:.(1)全面貫徹黨的教育方針,擺正學(xué)校體育的位置(2分);(2)面向全體學(xué)生,以整體觀開展學(xué)校體育工作(1分);(3)堅持改革、開放,不斷開創(chuàng)新局面(1分);(4)加強領(lǐng)導(dǎo),進(jìn)行科學(xué)管理(1分)。

      2.體育教學(xué)中常用的講解法有哪些,體育教師在教學(xué)中應(yīng)如何進(jìn)行講解?

      答:常用的方法有直觀法、分段法、概要法、側(cè)重法、對比法、提問法、聯(lián)系法(2.5分);運用講解法應(yīng)注意:(1)講解要有明確的目的和教育意義(0.5分),(2)講解要正確(0.5(3)講解要簡明易懂(0.5分),(4)講解要具有啟發(fā)性(0.5分),(5)講解要注意時機和效果(0.5分)。

      3.簡述體育課考試的種類及內(nèi)容。答:種類有:(1)預(yù)先考核,(2)平時考核,(3)定期考核(4)總成績的評定(每要點 4.利用分組輪換教學(xué)應(yīng)注意什么問題?.答:(1)著力于新教材組和復(fù)雜教材組,照顧女生組和體育分組(2)注意培養(yǎng)體育骨干;(3)要做好分組時的組織工作(4)采用分組輪換教學(xué),一般不應(yīng)同時出現(xiàn)兩個新授教材;(5)教是要有目的、有計劃進(jìn)行巡回指導(dǎo) 5.簡述課余體育鍛煉的特點及意義。答:特點:(1)強制性與自覺性結(jié)合(2)靈活性與計劃性結(jié)合(3)全面性與針對性結(jié)合(4)娛樂性與健身性并重.意義:(1)復(fù)習(xí)提高體育課所學(xué)的技術(shù)和技能;(2)娛樂身心,試學(xué)生養(yǎng)成健全的個性心理品質(zhì)(3)有助于學(xué)生終生體育館的形成。6.周期性原則的理論依據(jù)是什么?訓(xùn)練中應(yīng)如何貫徹這一原則? 答:依據(jù):時競技狀態(tài)形成和發(fā)展的規(guī)律。貫徹時應(yīng)注意:(1)根據(jù)學(xué)校教學(xué)規(guī)律,結(jié)合周期的特點安排訓(xùn)練(2)根據(jù)項目特點、對象水平來劃分周期(3)要注意周期間的銜接;(4)要以重大比賽為依據(jù)劃分周期并安排好小周期的訓(xùn)練

      五、論述題:(共15分)

      試論當(dāng)前我國學(xué)校體育的現(xiàn)狀及21世紀(jì)的發(fā)展趨勢。答:現(xiàn)狀:(1)建立了機構(gòu),制定了法規(guī).(2)修訂了大綱教材(3)進(jìn)行廣泛的教學(xué)改革(4)在科研上取得了較大成效(5)但改革的指導(dǎo)思想目標(biāo)不夠明確(6)缺乏必要的理論準(zhǔn)備(7)缺乏科學(xué)的評估指標(biāo)和辦法(8)出現(xiàn)了學(xué)校體育理論和實際地位的強烈反差。趨向:(1)學(xué)校體育將向多目標(biāo)的方向發(fā)展(2)學(xué)校體育系統(tǒng)的開放程度越來越高(3)學(xué)校體育開始追求長遠(yuǎn)的效益(4)學(xué)校體育向整體化方向發(fā)展(5)學(xué)校體育管理的科學(xué)化程度將逐步提高。

      六、應(yīng)用題(共10分)

      請為某學(xué)校制定一份競賽日程計劃。答:要求包括如下要點:(1)編號(2)競賽名稱(3)日程按排(4)地點(5)參加單位(6)參加人數(shù)(7)主辦單位(8)備注?!秾W(xué)校體育學(xué)》試題C卷

      一、填空題:(每空1分,共20分)

      1.1923年公布的《新學(xué)制課程標(biāo)準(zhǔn)》,正式把“體操科”改為體育課。3.身體訓(xùn)練包括一般身體訓(xùn)練、專項身體訓(xùn)練。

      4.按競賽進(jìn)行的空間范圍,學(xué)校運動競賽可分為校內(nèi)競賽、校外競賽。

      5.從運動技術(shù)要求角度看,選拔運動員通常有兩種方法,一是_經(jīng)驗選材、二是科學(xué)預(yù)測選材。

      6.體育課評價的方法有定性評價、定量評價兩種。7.根據(jù)學(xué)生的不同情況,可把體育課分為普通體育課、專項提高課、保健體育課三種類型。8.體育教材的分類應(yīng)以體育教學(xué)目標(biāo)、任務(wù) 為依據(jù)。

      9.我國的體育教學(xué)內(nèi)容集中地體現(xiàn)在體育教學(xué)大綱、教材上。

      二、判斷題:(判斷下列各題的正誤,用“√”和“×”表示。每小題1分,共10分)

      1.編寫體育教材以及教師進(jìn)行體育教學(xué)的依據(jù)是《學(xué)校體育工作條例》 錯 2.為了顯示動作的左右距離,可采用正面示范。(對)3.學(xué)校體育是終身體育的基礎(chǔ)環(huán)節(jié)。(錯)

      4.運動負(fù)荷的表面數(shù)據(jù)是指運動動作練習(xí)的量和強度。(對)5.中學(xué)體育教材中,跑、跳、投教材一般采用螺旋排列的方法。(對)6.持續(xù)法多用于非周期性項目的訓(xùn)練。(錯)

      7.通常在發(fā)展學(xué)生體能的前提下,才選用比賽法訓(xùn)練。(錯)8.體育課的結(jié)束部分通常采用全班集體的組織形式進(jìn)行。(對)9.定期考核的時間一般是學(xué)期未。(錯)10.《國家體育鍛煉標(biāo)準(zhǔn)施行辦法》公布施行的時間是1979年。(錯)

      三、名詞解釋:(每小題3分,共15分)

      1.體育教學(xué)方法:是體育教學(xué)過程中完成教學(xué)任務(wù)所用的教學(xué)途徑和手段 2.教材比重:指各類教材的教學(xué)時數(shù)之比。

      4.定量評價:是評價者將課中測試的數(shù)據(jù)及各定性指標(biāo)按一定標(biāo)準(zhǔn)量化后所做出的評價。5.體育課的結(jié)構(gòu):構(gòu)成一節(jié)課的幾個部分以及部分的教學(xué)內(nèi)容,組織教法和時間分配等。

      三、簡答題:(每小題5分,共30分)

      1.我國的體育教學(xué)目標(biāo)是什么?如何實現(xiàn)這一目標(biāo)?

      答:目標(biāo)是使學(xué)生具有一定的體育素質(zhì),促進(jìn)身心發(fā)展,培養(yǎng)共產(chǎn)主義思想品德,為培養(yǎng)社會主義建設(shè)者、保衛(wèi)者服務(wù)(1分)上述目標(biāo)可通過完成如下任務(wù)實現(xiàn):(1)向?qū)W生傳授體育和衛(wèi)生保健的“三基”(1分);(2)提高學(xué)生健康水平,增強體質(zhì)(1分);(3)促進(jìn)學(xué)生一般發(fā)展與特殊發(fā)展(1分);(4)進(jìn)行思想品德教育和培養(yǎng)意志品質(zhì)(1分)

      2.直觀、思維與實踐相結(jié)合原則是依據(jù)什么提出的?如何貫徹這一原則? 答:依據(jù)是認(rèn)識事物的規(guī)律(1分);貫徹該原則應(yīng)注意:(1)盡可能利用多種直觀方式、擴大直觀的效果(1分);(2)加強運動思維、發(fā)現(xiàn)問題、解決問題能力的培養(yǎng)(1分);(3)加強啟發(fā)式教學(xué)(1分);(4)正確處理直觀、思維與實踐三者的關(guān)系(1分)3.簡述少年兒童實施力量訓(xùn)練的基本要求? 答:、(1)注意骨骼、肌肉的發(fā)展特點;(2)力量訓(xùn)練要大小肌肉群、局部和整體肌肉全面發(fā)展(3)要以動力性練習(xí)為主,不宜采用靜力性練習(xí)(4)注意循序漸進(jìn),長期進(jìn)行(5)注意練習(xí)后肌肉的放松(注:每一要點1分)4.簡述體育鍛煉的原理及應(yīng)遵循的原則? 答: 原理:(1)新陳代謝理論(2)動態(tài)平衡理論(3)運動負(fù)荷有效價值閾理論; 原則:(1)自覺性原則(2)經(jīng)常性原則(3)全面性原則(4)針對性原則(5)適量性原則(6)漸進(jìn)性原則

      5.制定學(xué)校競賽日程計劃應(yīng)注意什么問題? 答:(1)優(yōu)先安排重要的競賽,固定時間,便于做好充分準(zhǔn)備(2)競賽的時間、次數(shù)不宜過分集中,應(yīng)據(jù)季節(jié)和氣候特點,充分利用節(jié)假日合理安排(3)競賽計劃中各項競賽的排列順序,以日期先后為準(zhǔn)排列(4)每向競賽的具體規(guī)定,應(yīng)另定競賽規(guī)程發(fā)給有關(guān)單位 6.在體育教學(xué)中,運用循環(huán)練習(xí)法應(yīng)注意什么問題? 答:(1)練習(xí)手段、練習(xí)量、練習(xí)點以及循環(huán)練習(xí)方式的確定,均應(yīng)服從練習(xí)任務(wù)的需要(2)選用的練習(xí)手段應(yīng)是學(xué)生基本會做的(3)每個練習(xí)站既可采用單一的重復(fù)練習(xí)也可采用連續(xù)的重復(fù)練習(xí)(4)各練習(xí)站的練習(xí)順序應(yīng)盡可能使難易練習(xí)和負(fù)荷大小不同的練習(xí)交替進(jìn)行或漸進(jìn)安排(5)各站連續(xù)完成的負(fù)荷可以從學(xué)生最大負(fù)荷能力的1/3開始,練習(xí)中可逐漸增大,但最大不超過其負(fù)荷能力的2/3

      第三篇:Java軟件開發(fā)工程師面試題寶典

      這套面試題主要目的是幫助那些還沒有java軟件開發(fā)實際工作經(jīng)驗,而正在努力尋找java軟件開發(fā)工作的朋友在筆試時更好地贏得筆試和面試。由于這套面試題涉及的范圍很泛,很廣,很雜,大家不可能一天兩天就看完和學(xué)完這套面試寶典,即使你已經(jīng)學(xué)過了有關(guān)的技術(shù),那么至少也需要一個月的時間才能消化和掌握這套面試寶典,所以,大家應(yīng)該早作準(zhǔn)備,從拿到這套面試寶典之日起,就要堅持在每天閑暇之余學(xué)習(xí)其中幾道題目,日積月累,等到出去面試時,一切都水到渠成,面試時就自然會游刃有余了。

      答題時,先答是什么,再答有什么作用和要注意什么(這部分最重要,展現(xiàn)自己的心得)

      答案的段落分別,層次分明,條理清晰都非常重要,從這些表面的東西也可以看出一個人的習(xí)慣、辦事風(fēng)格、條理等。

      要講你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想著是辯論賽。答題就是給別人講道理、擺事實。答題不局限于什么格式和形式,就是要將自己的學(xué)識展現(xiàn)出來!

      別因為人家題目本來就模棱兩可,你就心里膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進(jìn)去了,你們以后就是同事了,可不是差不多的嗎?

      關(guān)于就業(yè)薪水,如果你是應(yīng)屆生,那不能要高工資,好比大餅的故事,沒有文憑還想拿高工資,就去中關(guān)村缺什么補什么吧!少數(shù)人基礎(chǔ)確實很好,在校期間確實又做過一些項目,那仍然是可以要到相對高的工資的。

      1.Java基礎(chǔ)部分

      基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語法,集合的語法,io 的語法,虛擬機方面的語法。

      1、一個“.java”源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制?

      可以有多個類,但只能有一個public的類,并且public的類名必須與文件名相一致。

      2、Java有沒有g(shù)oto?

      java中的保留字,現(xiàn)在沒有在java中使用。

      3、說說&和&&的區(qū)別。

      &和&&都可以用作邏輯與的運算符,表示邏輯與(and),當(dāng)運算符兩邊的表達(dá)式的結(jié)果都為true時,整個運算結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。

      &&還具有短路的功能,即如果第一個表達(dá)式為false,則不再計算第二個表達(dá)式,例如,對于if(str!= null &&!str.equals(“”))表達(dá)式,當(dāng)str為null時,后面的表達(dá)式不會執(zhí)行,所以不會出現(xiàn)NullPointerException如果將&&改為&,則會拋出NullPointerException異常。If(x==33 & ++y>0)y會增長,If(x==33 && ++y>0)不會增長

      &還可以用作位運算符,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數(shù)進(jìn)行&運算,來獲取該整數(shù)的最低4個bit位,例如,0x31 & 0x0f的結(jié)果為0x01。

      備注:這道題先說兩者的共同點,再說出&&和&的特殊之處,并列舉一些經(jīng)典的例子來表明自己理解透徹深入、實際經(jīng)驗豐富。

      4、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)?

      在Java中,要想跳出多重循環(huán),可以在外面的循環(huán)語句前定義一個標(biāo)號,然后在里層循環(huán)體的代碼中使用帶有標(biāo)號的break 語句,即可跳出外層循環(huán)。例如,ok: for(int i=0;i<10;i++){

      }

      另外,我個人通常并不使用標(biāo)號這種方式,而是讓外層的循環(huán)條件表達(dá)式的結(jié)果可以受到里層循環(huán)體代碼的控制,例如,要在二維數(shù)組中查找到某個數(shù)字。

      int arr[][] = {{1,2,3},{4,5,6,7},{9}};boolean found = false;for(int i=0;i

      } for(int j=0;j

      } System.out.println(“i=” + i + “,j=” + j);if(arr[i][j] == 5){

      } found = true;break;for(int j=0;j<10;j++)

      } if(j == 5)break ok;

      { System.out.println(“i=” + i + “,j=” + j);

      5、switch語句能否作用在byte上,能否作用在long上,能否作用在String上?

      在switch(expr1)中,expr1只能是一個整數(shù)表達(dá)式或者枚舉常量(更大字體),整數(shù)表達(dá)式可以是int基本類型或Integer包裝類型,由于,byte,short,char都可以隱含轉(zhuǎn)換為int,所以,這些類型以及這些類型的包裝類型也是可以的。顯然,long和String類型都不符合switch的語法規(guī)定,并且不能被隱式轉(zhuǎn)換成int類型,所以,它們不能作用于swtich語句中。

      6、short s1 = 1;s1 = s1 + 1;有什么錯? short s1 = 1;s1 += 1;有什么錯?

      對于short s1 = 1;s1 = s1 + 1;由于s1+1運算時會自動提升表達(dá)式的類型,所以結(jié)果是int型,再賦值給short類型s1時,編譯器將報告需要強制轉(zhuǎn)換類型的錯誤。

      對于short s1 = 1;s1 += 1;由于 += 是java語言規(guī)定的運算符,java編譯器會對它進(jìn)行特殊處理,因此可以正確編譯。

      7、char型變量中能不能存貯一個中文漢字?為什么?

      char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中當(dāng)然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那么,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼占用兩個字節(jié),所以,char類型的變量也是占用兩個字節(jié)。

      備注:后面一部分回答雖然不是在正面回答題目,但是,為了展現(xiàn)自己的學(xué)識和表現(xiàn)自己對問題理解的透徹深入,可以回答一些相關(guān)的知識,做到知無不言,言無不盡。

      8、用最有效率的方法算出2乘以8等於幾? << 3,因為將一個數(shù)左移n位,就相當(dāng)于乘以了2的n次方,那么,一個數(shù)乘以8只要將其左移3位即可,而位運算cpu直接支持的,效率最高,所以,2乘以8等於幾的最效率的方法是2 << 3。

      9、請設(shè)計一個一百億的計算器

      首先要明白這道題目的考查點是什么,一是大家首先要對計算機原理的底層細(xì)節(jié)要清楚、要知道加減法的位運算原理和知道計算機中的算術(shù)運算會發(fā)生越界的情況,二是要具備一定的面向?qū)ο蟮脑O(shè)計思想。

      首先,計算機中用固定數(shù)量的幾個字節(jié)來存儲的數(shù)值,所以計算機中能夠表示的數(shù)值是有一定的范圍的,為了便于講解和理解,我們先以byte 類型的整數(shù)為例,它用1個字節(jié)進(jìn)行存儲,表示的最大數(shù)值范圍為-128到+127。-1在內(nèi)存中對應(yīng)的二進(jìn)制數(shù)據(jù)為11111111,如果兩個-1相加,不考慮Java運算時的類型提升,運算后會產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為1,11111110,由于進(jìn)位后超過了byte類型的存儲空間,所以進(jìn)位部分被舍棄,即最終的結(jié)果為11111110,也就是-2,這正好利用溢位的方式實現(xiàn)了負(fù)數(shù)的運算。-128在內(nèi)存中對應(yīng)的二進(jìn)制數(shù)據(jù)為10000000,如果兩個-128相加,不考慮Java運算時的類型提升,運算后會產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為1,00000000,由于進(jìn)位后超過了byte類型的存儲空間,所以進(jìn)位部分被舍棄,即最終的結(jié)果為00000000,也就是0,這樣的結(jié)果顯然不是我們期望的,這說明計算機中的算術(shù)運算是會發(fā)生越界情況的,兩個數(shù)值的運算結(jié)果不能超過計算機中的該類型的數(shù)值范圍。由于Java中涉及表達(dá)式運算時的類型自動提升,我們無法用byte類型來做演示這種問題和現(xiàn)象的實驗,大家可以用下面一個使用整數(shù)做實驗的例子程序體驗一下:

      int a = Integer.MAX_VALUE;int b = Integer.MAX_VALUE;int sum = a + b;System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);先不考慮long類型,由于int的正數(shù)范圍為2的31次方,表示的最大數(shù)值約等于2*1000*1000*1000,也就是20億的大小,所以,要實現(xiàn)一個一百億的計算器,我們得自己設(shè)計一個類可以用于表示很大的整數(shù),并且提供了與另外一個整數(shù)進(jìn)行加減乘除的功能,大概功能如下:

      ()這個類內(nèi)部有兩個成員變量,一個表示符號,另一個用字節(jié)數(shù)組表示數(shù)值的二進(jìn)制數(shù)()有一個構(gòu)造方法,把一個包含有多位數(shù)值的字符串轉(zhuǎn)換到內(nèi)部的符號和字節(jié)數(shù)組中()提供加減乘除的功能 public class BigInteger{

      } 備注:要想寫出這個類的完整代碼,是非常復(fù)雜的,如果有興趣的話,可以參看jdk中自帶的java.math.BigInteger類的源碼。面試的人也知道誰都不可能在短時間內(nèi)寫出這個類的完整代碼的,他要的是你是否有這方面的概念和意識,他最重要的還是考查你的能力,所以,你不要因為自己無法寫出完整的最終結(jié)果就放棄答這道題,你要做的就是你比別人寫得多,證明你比別人強,你有這方面的思想意識就可以了,畢竟別人可能連題目的意思都看不懂,什么都沒寫,你要敢于答這道題,即使只答了一部分,那也與那些什么都不懂的人區(qū)別出來,拉開了距離,算是矮子中的高個,機會當(dāng)然就屬于你了。另外,答案中的框架代碼也很重要,體現(xiàn)了一些面向?qū)ο笤O(shè)計的功底,特別是其中的方法命名很專業(yè),用的英文單詞很精準(zhǔn),這也是能力、經(jīng)驗、專業(yè)性、英語水平等多個方面的體現(xiàn),會給人留下很好的印象,在編程能力和其他方面條件差不多的情況下,英語好除了可以使你獲得更多機會外,薪水可以高出一千元。

      int sign;byte[] val;public Biginteger(String val){

      } public BigInteger add(BigInteger other){ } public BigInteger subtract(BigInteger other){ } public BigInteger multiply(BigInteger other){ } public BigInteger divide(BigInteger other){ }

      sign =;val =;

      10、使用final關(guān)鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變?

      使用final關(guān)鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內(nèi)容還是可以改變的。例如,對于如下語句:

      final StringBuffer a=new StringBuffer(“immutable”);執(zhí)行如下語句將報告編譯期錯誤:

      a=new StringBuffer(“");但是,執(zhí)行如下語句則可以通過編譯:

      a.append(” broken!“);

      有人在定義方法的參數(shù)時,可能想采用如下形式來阻止方法內(nèi)部修改傳進(jìn)來的參數(shù)對象: public void method(final StringBuffer param){ }

      實際上,這是辦不到的,在該方法內(nèi)部仍然可以增加如下代碼來修改參數(shù)對象: param.append(”a“);

      11、”==“和equals方法究竟有什么區(qū)別?

      (單獨把一個東西說清楚,然后再說清楚另一個,這樣,它們的區(qū)別自然就出來了,混在一起說,則很難說清楚)

      ==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同,要比較兩個基本類型的數(shù)據(jù)或兩個引用變量是否相等,只能用==操作符。

      如果一個變量指向的數(shù)據(jù)是對象類型的,那么,這時候涉及了兩塊內(nèi)存,對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Objet obj = new Object();變量obj是一個內(nèi)存,new Object()是另一個內(nèi)存,此時,變量obj所對應(yīng)的內(nèi)存中存儲的數(shù)值就是對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞?,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等,這時候就需要用==操作符進(jìn)行比較。

      equals方法是用于比較兩個獨立對象的內(nèi)容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:

      String a=new String(”foo“);String b=new String(”foo“);兩條new語句創(chuàng)建了兩個對象,然后用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數(shù)值是不相同的,所以,表達(dá)式a==b將返回false,而這兩個對象中的內(nèi)容是相同的,所以,表達(dá)式a.equals(b)將返回true。

      在實際開發(fā)中,我們經(jīng)常要比較傳遞進(jìn)行來的字符串內(nèi)容是否等,例如,String input = …;input.equals(“quit”),許多人稍不注意就使用==進(jìn)行比較了,這是錯誤的,隨便從網(wǎng)上找?guī)讉€項目實戰(zhàn)的教學(xué)視頻看看,里面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals方法。

      如果一個類沒有自己定義equals方法,那么它將繼承Object類的equals方法,Object類的equals方法的實現(xiàn)代碼如下:

      boolean equals(Object o){ return this==o;} 這說明,如果一個類沒有自己定義equals方法,它默認(rèn)的equals方法(從Object 類繼承的)就是使用==操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用equals和使用==會得到同樣的結(jié)果,如果比較的是兩個獨立的對象則總返回false。如果你編寫的類希望能夠比較該類創(chuàng)建的兩個實例對象的內(nèi)容是否相同,那么你必須覆蓋equals方法,由你自己寫代碼來決定在什么情況即可認(rèn)為兩個對象的內(nèi)容是相同的。

      12、靜態(tài)變量和實例變量的區(qū)別?

      在語法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實例變量前則不加。

      在程序運行時的區(qū)別:實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了??傊瑢嵗兞勘仨殑?chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用。

      例如,對于下面的程序,無論創(chuàng)建多少個實例對象,永遠(yuǎn)都只分配了一個staticVar變量,并且每創(chuàng)建一個實例對象,這個staticVar就會加1;但是,每創(chuàng)建一個實例對象,就會分配一個instanceVar,即可能分配多個instanceVar,并且每個instanceVar的值都只自加了1次。

      public class VariantTest{

      } 備注:這個解答除了說清楚兩者的區(qū)別外,最后還用一個具體的應(yīng)用例子來說明兩者的差異,體現(xiàn)了自己有很好的解說問題和設(shè)計案例的能力,思維敏捷,超過一般程序員,有寫作能力!public static int staticVar = 0;public int instanceVar = 0;public VariantTest(){

      } staticVar++;instanceVar++;System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);

      13、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?

      不可以。因為非static方法是要與對象關(guān)聯(lián)在一起的,必須創(chuàng)建一個對象后,才可以在該對象上進(jìn)行方法調(diào)用,而static方法調(diào)用時不需要創(chuàng)建對象,可以直接調(diào)用。也就是說,當(dāng)一個static方法被調(diào)用時,可能還沒有創(chuàng)建任何實例對象,如果從一個static方法中發(fā)出對非static方法的調(diào)用,那個非static方法是關(guān)聯(lián)到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用。

      14、Integer與int的區(qū)別

      int是java提供的8種原始數(shù)據(jù)類型之一。Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。int的默認(rèn)值為0,而Integer的默認(rèn)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達(dá)出未賦值的情況,例如,要想表達(dá)出沒有參加考試和考試成績?yōu)?的區(qū)別,則只能使用Integer。在JSP開發(fā)中,Integer的默認(rèn)為null,所以用el表達(dá)式在文本框中顯示時,值為空白字符串,而int默認(rèn)的默認(rèn)值為0,所以用el表達(dá)式在文本框中顯示時,結(jié)果為0,所以,int不適合作為web層的表單數(shù)據(jù)的類型。

      在Hibernate中,如果將OID定義為Integer類型,那么Hibernate就可以根據(jù)其值是否為null而判斷一個對象是否是臨時的,如果將OID定義為了int類型,還需要在hbm映射文件中設(shè)置其unsaved-value屬性為0。

      另外,Integer提供了多個與整數(shù)相關(guān)的操作方法,例如,將一個字符串轉(zhuǎn)換成整數(shù),Integer中還定義了表示整數(shù)的最大值和最小值的常量。

      15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math類中提供了三個與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應(yīng),例如,ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結(jié)果為11,Math.ceil(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來的數(shù)字加上0.5后再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。

      16、下面的代碼有什么不妥之處? 1.if(username.equals(“zxx”){} 2.int x = 1;

      return x==1?true:false;

      17、請說出作用域public,private,protected,以及不寫時的區(qū)別

      這四個作用域的可見范圍如下表所示。

      說明:如果在修飾的元素上面沒有寫任何訪問修飾符,則表示friendly。

      作用域

      當(dāng)前類 同一package 子孫類 其他package public

      protected √

      ×

      friendly

      ×

      ×

      private

      ×

      ×

      ×

      備注:只要記住了有4種訪問權(quán)限,4個訪問范圍,然后將全選和范圍在水平和垂直方向上分別按排從小到大或從大到小的順序排列,就很容易畫出上面的圖了。

      18、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?

      Overload是重載的意思,Override是覆蓋的意思,也就是重寫。

      重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個數(shù)或類型不同)。

      重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數(shù)完全相同,通過子類創(chuàng)建的實例對象調(diào)用這個方法時,將調(diào)用子類中的定義方法,這相當(dāng)于把父類中定義的那個完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的訪問權(quán)限只能比父類的更大,不能更小。如果父類的方法是private類型,那么,子類則不存在覆蓋的限制,相當(dāng)于子類中增加了一個全新的方法。

      至于Overloaded的方法是否可以改變返回值的類型這個問題,要看你倒底想問什么呢?這個題目很模糊。如果幾個Overloaded的方法的參數(shù)列表不一樣,它們的返回者類型當(dāng)然也可以不一樣。但我估計你想問的問題是:如果兩個方法的參數(shù)列表完全一樣,是否可以讓它們的返回值不同來實現(xiàn)重載Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候調(diào)用一個方法時也可以不定義返回結(jié)果變量,即不要關(guān)心其返回結(jié)果,例如,我們調(diào)用map.remove(key)方法時,雖然remove方法有返回值,但是我們通常都不會定義接收返回結(jié)果的變量,這時候假設(shè)該類中有兩個名稱和參數(shù)列表完全相同的方法,僅僅是返回類型不同,java就無法確定編程者倒底是想調(diào)用哪個方法了,因為它無法通過返回結(jié)果類型來判斷。

      override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法并且對其重寫,以求達(dá)到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實現(xiàn),在接口中一般只是對方法進(jìn)行了聲明,而我們在實現(xiàn)時,就需要實現(xiàn)接口聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:

      1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;

      2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

      3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;

      4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進(jìn)行覆蓋。

      overload對我們來說可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入?yún)?shù)來區(qū)分這些方法,然后再調(diào)用時,VM就會根據(jù)不同的參數(shù)樣式,來選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點:

      1、在使用重載時只能通過不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

      2、不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載;

      3、方法的異常類型和數(shù)目不會對重載造成影響;

      4、對于繼承來說,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對其進(jìn)行重載,如果定義的話,也只是定義了一個新方法,而不會達(dá)到重載的效果。

      19、構(gòu)造器Constructor是否可被override?

      構(gòu)造器Constructor不能被繼承,因此不能重寫Override,但可以被重載Overload。

      20、接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承具體類(concrete class)? 抽象類中是否可以有靜態(tài)的main方法?

      接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是否可繼承具體類。抽象類中可以有靜態(tài)的main方法。

      備注:只要明白了接口和抽象類的本質(zhì)和作用,這些問題都很好回答,你想想,如果你是java語言的設(shè)計者,你是否會提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒有道理不提供,那答案就是肯定的了。

      只有記住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實例對象和允許有abstract方法。

      21、寫clone()方法時,通常都有一行代碼,是什么?

      clone 有缺省行為,super.clone();因為首先要把父類中的成員復(fù)制到位,然后才是復(fù)制自己的成員。

      22、面向?qū)ο蟮奶卣饔心男┓矫?/p>

      計算機軟件系統(tǒng)是現(xiàn)實生活中的業(yè)務(wù)在計算機中的映射,而現(xiàn)實生活中的業(yè)務(wù)其實就是一個個對象協(xié)作的過程。面向?qū)ο缶幊叹褪前船F(xiàn)實業(yè)務(wù)一樣的方式將程序代碼按一個個對象進(jìn)行組織和編寫,讓計算機系統(tǒng)能夠識別和理解用對象方式組織和編寫的程序代碼,這樣就可以把現(xiàn)實生活中的業(yè)務(wù)對象映射到計算機系統(tǒng)中。

      面向?qū)ο蟮木幊陶Z言有封裝、繼承、抽象、多態(tài)等4個主要的特征。1封裝:

      封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來的變動影響。在面向?qū)ο蟮木幊陶Z言中,對象是封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語言的封裝更為清晰、更為有力。面向?qū)ο蟮姆庋b就是把描述一個對象的屬性和行為的代碼封裝在一個“模塊”中,也就是一個類中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接訪問同一個對象中的屬性。通常情況下,只要記住讓變量和訪問這個變量的方法放在一起,將一個類中的成員變量全部定義成私有的,只有這個類自己的方法才可以訪問到這些成員變量,這就基本上實現(xiàn)對象的封裝,就很容易找出要分配到這個類上的方法了,就基本上算是會面向?qū)ο蟮木幊塘恕0盐找粋€原則:把對同一事物進(jìn)行操作的方法和相關(guān)的方法放在同一個類中,把方法和它操作的數(shù)據(jù)放在同一個類中。

      例如,人要在黑板上畫圓,這一共涉及三個對象:人、黑板、圓,畫圓的方法要分配給哪個對象呢?由于畫圓需要使用到圓心和半徑,圓心和半徑顯然是圓的屬性,如果將它們在類中定義成了私有的成員變量,那么,畫圓的方法必須分配給圓,它才能訪問到圓心和半徑這兩個屬性,人以后只是調(diào)用圓的畫圓方法、表示給圓發(fā)給消息而已,畫圓這個方法不應(yīng)該分配在人這個對象上,這就是面向?qū)ο蟮姆庋b性,即將對象封裝成一個高度自治和相對封閉的個體,對象狀態(tài)(屬性)由這個對象自己的行為(方法)來讀取和改變。一個更便于理解的例子就是,司機將火車剎住了,剎車的動作是分配給司機,還是分配給火車,顯然,應(yīng)該分配給火車,因為司機自身是不可能有那么大的力氣將一個火車給停下來的,只有火車自己才能完成這一動作,火車需要調(diào)用內(nèi)部的離合器和剎車片等多個器件協(xié)作才能完成剎車這個動作,司機剎車的過程只是給火車發(fā)了一個消息,通知火車要執(zhí)行剎車動作而已。

      抽象:

      抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,并且會忽略與當(dāng)前主題和目標(biāo)無關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。例如,看到一只螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個方面。例如,定義一個Person類,如下:

      class Person{

      } 人本來是很復(fù)雜的事物,有很多方面,但因為當(dāng)前系統(tǒng)只需要了解人的姓名和年齡,所以上面定義的類中只包含姓名和年齡這兩個屬性,這就是一種抽像,使用抽象可以避免考慮一些與目標(biāo)無關(guān)的細(xì)節(jié)。我對抽象的理解就是不要用顯微鏡去看一個事物的所有方面,這樣涉及的內(nèi)容就太多了,而是要善于劃分問題的邊界,當(dāng)前系統(tǒng)需要什么,就只考慮什么。

      String name;int age;繼承:

      在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類數(shù)據(jù)和方法的機制,這是類之間的一種關(guān)系,提高了軟件的可重用性和可擴展性。

      多態(tài):

      多態(tài)是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定。因為在程序運行時才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實現(xiàn)上,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態(tài),這就是多態(tài)性。多態(tài)性增強了軟件的靈活性和擴展性。例如,下面代碼中的UserDao是一個接口,它定義引用變量userDao指向的實例對象由daofactory.getDao()在執(zhí)行的時候返回,有時候指向的是UserJdbcDao這個實現(xiàn),有時候指向的是UserHibernateDao這個實現(xiàn),這樣,不用修改源代碼,就可以改變userDao指向的具體類實現(xiàn),從而導(dǎo)致userDao.insertUser()方法調(diào)用的具體代碼也隨之改變,即有時候調(diào)用的是UserJdbcDao的insertUser方法,有時候調(diào)用的是UserHibernateDao的insertUser方法:

      UserDao userDao = daofactory.getDao();

      userDao.insertUser(user);

      比喻:人吃飯,你看到的是左手,還是右手?

      23、java中實現(xiàn)多態(tài)的機制是什么?

      靠的是父類或接口定義的引用變量可以指向子類或具體實現(xiàn)類的實例對象,而程序調(diào)用的方法在運行期才動態(tài)綁定,就是引用變量所指向的具體實例對象的方法,也就是內(nèi)存里正在運行的那個對象的方法,而不是引用變量的類型中定義的方法。

      24、abstract class和interface有什么區(qū)別?

      含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實例對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒有實現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型。

      接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類型,接口中的成員變量類型默認(rèn)為public static final。

      下面比較一下兩者的語法區(qū)別:

      1.抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。2.抽象類中可以有普通成員變量,接口中沒有普通成員變量

      3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。

      4.抽象類中的抽象方法的訪問類型可以是public,protected和(默認(rèn)類型,雖然

      eclipse下不報錯,但應(yīng)該也不行),但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型。

      5.抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法

      6.抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認(rèn)即為public static final類型。7.一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。下面接著再說說兩者在應(yīng)用上的區(qū)別:

      接口更多的是在系統(tǒng)架構(gòu)設(shè)計方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實現(xiàn)方面發(fā)揮作用,可以實現(xiàn)代碼的重用,例如,模板方法設(shè)計模式是抽象類的一個典型應(yīng)用,假設(shè)某個項目的所有Servlet類都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪問日志和處理異常,那么就可以定義一個抽象的基類,讓所有的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成權(quán)限判斷、記錄訪問日志和處理異常的代碼,在各個子類中只是完成各自的業(yè)務(wù)邏輯代碼,偽代碼如下:

      public abstract class BaseServlet extends HttpServlet{

      public final void service(HttpServletRequest request, HttpServletResponse response)throws

      { 記錄訪問日志 進(jìn)行權(quán)限判斷 if(具有權(quán)限){

      try{ } catch(Excetpion e)

      {

      記錄異常信息 doService(request,response);IOExcetion,ServletException } } } protected abstract void doService(HttpServletRequest request, HttpServletResponse response)throws IOExcetion,ServletException;

      //注意訪問權(quán)限定義成protected,顯得既專業(yè),又嚴(yán)謹(jǐn),因為它是專門給子類用的 }

      public class MyServlet1 extends BaseServlet { protected void doService(HttpServletRequest request, HttpServletResponse response)throws IOExcetion,ServletException

      } 父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計模式。

      備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細(xì)節(jié),最后再說兩者的應(yīng)用區(qū)別。比較兩者語法細(xì)節(jié)區(qū)別的條理是:先從一個類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等6個方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個典型的例子來展現(xiàn)自己深厚的技術(shù)功底。{ } 本Servlet只處理的具體業(yè)務(wù)邏輯代碼

      25、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

      abstract的method 不可以是static的,因為抽象的方法是要被子類實現(xiàn)的,而static與子類扯不上關(guān)系!native方法表示該方法要用另外一種依賴平臺的編程語言實現(xiàn)的,不存在著被子類實現(xiàn)的問題,所以,它也不能是抽象的,不能與abstract混用。例如,F(xiàn)ileOutputSteam類要硬件打交道,底層的實現(xiàn)用的是操作系統(tǒng)相關(guān)的api實現(xiàn),例如,在windows用c語言實現(xiàn)的,所以,查看jdk 的源代碼,可以發(fā)現(xiàn)FileOutputStream的open方法的定義如下:

      private native void open(String name)throws FileNotFoundException;如果我們要用java調(diào)用別人寫的c語言函數(shù),我們是無法直接調(diào)用的,我們需要按照java的要求寫一個c語言的函數(shù),又我們的這個c語言函數(shù)去調(diào)用別人的c語言函數(shù)。由于我們的c語言函數(shù)是按java的要求來寫的,我們這個c語言函數(shù)就可以與java對接上,java那邊的對接方式就是定義出與我們這個c函數(shù)相對應(yīng)的方法,java中對應(yīng)的方法不需要寫具體的代碼,但需要在前面聲明native。

      關(guān)于synchronized與abstract合用的問題,我覺得也不行,因為在我?guī)啄甑膶W(xué)習(xí)和開發(fā)中,從來沒見到過這種情況,并且我覺得synchronized應(yīng)該是作用在一個具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對象是this,而抽象方法上無法確定this是什么。

      26、什么是內(nèi)部類?Static Nested Class 和 Inner Class的不同。

      內(nèi)部類就是在一個類的內(nèi)部定義的類,內(nèi)部類中不能定義靜態(tài)成員(靜態(tài)成員不是對象的特性,只是為了找一個容身之處,所以需要放到一個類中而已,這么一點小事,你還要把它放到類內(nèi)部的一個類中,過分了??!提供內(nèi)部類,不是為讓你干這種事情,無聊,不讓你干。我想可能是既然靜態(tài)成員類似c語言的全局變量,而內(nèi)部類通常是用于創(chuàng)建內(nèi)部對象用的,所以,把“全局變量”放在內(nèi)部類中就是毫無意義的事情,既然是毫無意義的事情,就應(yīng)該被禁止),內(nèi)部類可以直接訪問外部類中的成員變量,內(nèi)部類可以定義在外部類的方法外面,也可以定義在外部類的方法體中,如下所示:

      public class Outer {

      } 在方法體外面定義的內(nèi)部類的訪問類型可以是public,protecte,默認(rèn)的,private等4種類型,這就好像類中定義的成員變量有4種訪問類型一樣,它們決定這個內(nèi)部類的定義對其他類是否可見;對于這種情況,我們也可以在外面創(chuàng)建內(nèi)部類的實例對象,創(chuàng)建內(nèi)部類的實例對象時,一定要先創(chuàng)建外部類的實例對象,然后用這個外部類的實例對象去創(chuàng)建內(nèi)部類的實例對象,代碼如下:

      Outer outer = new Outer();Outer.Inner1 inner1 = outer.new Innner1();

      在方法內(nèi)部定義的內(nèi)部類前面不能有訪問類型修飾符,就好像方法中定義的局部變量一樣,但這種內(nèi)部類的前面可以使用final或abstract修飾符。這種內(nèi)部類對其他類是不可見的其他類無法引用這種內(nèi)部類,但是這種內(nèi)部類創(chuàng)建的實例對象可以傳遞給其他類訪問。這種內(nèi)部類必須是先定義,后使用,即內(nèi)部類的定義代碼必須出現(xiàn)在使用該類之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內(nèi)部類可以訪問方法體中的局部變量,但是,該局部變量前必須加final修飾符。

      對于這些細(xì)節(jié),只要在eclipse寫代碼試試,根據(jù)開發(fā)工具提示的各類錯誤信息就可以馬上了解到。public class Inner1

      //在方法體外面定義的內(nèi)部類 { } int out_x = 0;public void method(){

      } Inner1 inner1 = new Inner1();public class Inner2

      //在方法體內(nèi)部定義的內(nèi)部類 {

      } Inner2 inner2 = new Inner2();public method(){ } out_x = 3;

      在方法體內(nèi)部還可以采用如下語法來創(chuàng)建一種匿名內(nèi)部類,即定義某一接口或類的子類的同時,還創(chuàng)建了該子類的實例對象,無需為該子類定義名稱:

      public class Outer {

      public void start(){ new Thread(new Runable(){ }).start();}

      最后,在方法外部定義的內(nèi)部類前面可以加上static關(guān)鍵字,從而成為Static Nested Class,它不再具有內(nèi)部類的特性,所有,從狹義上講,它不是內(nèi)部類。Static Nested Class與普通類在運行時的行為和功能上沒有什么區(qū)別,只是在編程引用時的語法上有一些差別,它可以定義成public、protected、默認(rèn)的、private等多種類型,而普通類只能定義成public和默認(rèn)的這兩種類型。在外面引用Static Nested Class類的名稱為“外部類名.內(nèi)部類名”。在外面不需要創(chuàng)建外部類的實例對象,就可以直接創(chuàng)建Static Nested Class,例如,假設(shè)Inner是定義在Outer類中的Static Nested Class,那么可以使用如下語句創(chuàng)建Inner類:

      Outer.Inner inner = new Outer.Inner();由于static Nested Class不依賴于外部類的實例對象,所以,static Nested Class能訪問外部類的非static成員變量。當(dāng)在外部類中訪問Static Nested Class時,可以直接使用Static Nested Class的名字,而不需要加上外部類的名字了,在Static Nested Class中也可以直接引用外部類的static的成員變量,不需要加上外部類的名字。

      在靜態(tài)方法中定義的內(nèi)部類也是Static Nested Class,這時候不能在類前面加static關(guān)鍵字,靜態(tài)方法中的Static Nested Class與普通方法中的內(nèi)部類的應(yīng)用方式很相似,它除了可以直接訪問外部類中的static的成員變量,還可以訪問靜態(tài)方法中的局部變量,但是,該局部變量前必須加final修飾符。

      備注:首先根據(jù)你的印象說出你對內(nèi)部類的總體方面的特點:例如,在兩個地方可以定義,可以訪問外部類的成員變量,不能定義靜態(tài)成員,這是大的特點。然后再說一些細(xì)節(jié)方面的知識,例如,幾種定義方式的語法區(qū)別,靜態(tài)內(nèi)部類,以及匿名內(nèi)部類。} public void run(){};

      27、內(nèi)部類可以引用它的包含類的成員嗎?有沒有什么限制?

      完全可以。如果不是靜態(tài)內(nèi)部類,那沒有什么限制!

      如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不可以訪問外部類的普通成員變量,而只能訪問外部類中的靜態(tài)成員,例如,下面的代碼:

      class Outer { static int x;static class Inner {

      } } void test(){ } syso(x);答題時,也要能察言觀色,揣摩提問者的心思,顯然人家希望你說的是靜態(tài)內(nèi)部類不能訪問外部類的成員,但你一上來就頂牛,這不好,要先順著人家,讓人家滿意,然后再說特殊情況,讓人家吃驚。

      28、Anonymous Inner Class(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實現(xiàn))interface(接口)?

      可以繼承其他類或?qū)崿F(xiàn)其他接口。不僅是可以,而是必須!

      29、super.getClass()方法調(diào)用

      下面程序的輸出結(jié)果是多少?

      import java.util.Date;public class Test extends Date{

      }

      很奇怪,結(jié)果是Test 這屬于腦筋急轉(zhuǎn)彎的題目,在一個qq群有個網(wǎng)友正好問過這個問題,我覺得挺有趣,就研究了一下,沒想到今天還被你面到了,哈哈。

      在test方法中,直接調(diào)用getClass().getName()方法,返回的是Test類名 由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,所以,在 test方法中調(diào)用getClass().getName()方法,其實就是在調(diào)用從父類繼承的getClass()方法,等效于調(diào)用

      super.getClass().getName()方法,所以,public static void main(String[] args){ }

      public void test(){ } System.out.println(super.getClass().getName());new Test().test();super.getClass().getName()方法返回的也應(yīng)該是Test。如果想得到父類的名稱,應(yīng)該用如下代碼:

      getClass().getSuperClass().getName();

      30、String是最基本的數(shù)據(jù)類型嗎?

      基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。

      java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類

      31、String s = ”Hello“;s = s + ” world!“;這兩行代碼執(zhí)行后,原始的String對象中的內(nèi)容到底變了沒有?

      沒有。因為String被設(shè)計成不可變(immutable)類,所以它的所有對象都是不可變對象。在這段代碼中,s原先指向一個String對象,內(nèi)容是 ”Hello“,然后我們對s進(jìn)行了+操作,那么s所指向的那個對象是否發(fā)生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另一個 String對象,內(nèi)容為”Hello world!“,原來那個對象還存在于內(nèi)存之中,只是s這個引用變量不再指向它了。

      通過上面的說明,我們很容易導(dǎo)出另一個結(jié)論,如果經(jīng)常對字符串進(jìn)行各種各樣的修改,或者說,不可預(yù)見的修改,那么使用String來代表字符串的話會引起很大的內(nèi)存開銷。因為 String對象建立之后不能再改變,所以對于每一個不同的字符串,都需要一個String對象來表示。這時,應(yīng)該考慮使用StringBuffer類,它允許修改,而不是每個不同的字符串都要生成一個新的對象。并且,這兩種類的對象轉(zhuǎn)換十分容易。

      同時,我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都new一個String。例如我們要在構(gòu)造器中對一個名叫s的String引用變量進(jìn)行初始化,把它設(shè)置為初始值,應(yīng)當(dāng)這樣做:

      public class Demo { private String s;...public Demo { s = ”Initial Value“;}...} 而非

      s = new String(”Initial Value“);后者每次都會調(diào)用構(gòu)造器,生成新對象,性能低下且內(nèi)存開銷大,并且沒有意義,因為String對象不可改變,所以對于內(nèi)容相同的字符串,只要一個String對象來表示就可以了。也就說,多次調(diào)用上面的構(gòu)造器創(chuàng)建多個對象,他們的String類型屬性s都指向同一個對象。

      上面的結(jié)論還基于這樣一個事實:對于字符串常量,如果內(nèi)容相同,Java認(rèn)為它們代表同一個String對象。而用關(guān)鍵字new調(diào)用構(gòu)造器,總是會創(chuàng)建一個新的對象,無論內(nèi)容是否相同。至于為什么要把String類設(shè)計成不可變類,是它的用途決定的。其實不只String,很多Java標(biāo)準(zhǔn)類庫中的類都是不可變的。在開發(fā)一個系統(tǒng)的時候,我們有時候也需要設(shè)計不可變類,來傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點,比如因為它的對象是只讀的,所以多線程并發(fā)訪問也不會有任何問題。當(dāng)然也有一些缺點,比如每個不同的狀態(tài)都要一個對象來代表,可能會造成性能上的問題。所以Java標(biāo)準(zhǔn)類庫還提供了一個可變版本,即 StringBuffer。

      32、是否可以繼承String類?

      String類是final類故不可以繼承。

      33、String s = new String(”xyz“);創(chuàng)建了幾個String Object? 二者之間有什么區(qū)別?

      兩個或一個,”xyz”對應(yīng)一個對象,這個對象放在字符串常量緩沖區(qū),常量”xyz”不管出現(xiàn)多少遍,都是緩沖區(qū)中的那一個。New String每寫一遍,就創(chuàng)建一個新的對象,它一句那個常量”xyz”對象的內(nèi)容來創(chuàng)建出一個新String對象。如果以前就用過’xyz’,這句代表就不會創(chuàng)建”xyz”自己了,直接從緩沖區(qū)拿。

      34、String 和StringBuffer的區(qū)別

      JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。而這個StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。另外,String實現(xiàn)了equals方法,new String(“abc”).equals(new String(“abc”)的結(jié)果為true,而StringBuffer沒有實現(xiàn)equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的結(jié)果為false。

      接著要舉一個具體的例子來說明,我們要把1到100的所有數(shù)字拼起來,組成一個串。StringBuffer sbf = new StringBuffer();

      for(int i=0;i<100;i++){ sbf.append(i);} 上面的代碼效率很高,因為只創(chuàng)建了一個StringBuffer對象,而下面的代碼效率很低,因為創(chuàng)建了101個對象。

      String str = new String();

      for(int i=0;i<100;i++){ str = str + i;} 在講兩者區(qū)別時,應(yīng)把循環(huán)的次數(shù)搞成10000,然后用endTime-beginTime來比較兩者執(zhí)行的時間差異,最后還要講講StringBuilder與StringBuffer的區(qū)別。

      String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法,所以,將StringBuffer對象存儲進(jìn)Java集合類中時會出現(xiàn)問題。

      35、如何把一段逗號分割的字符串轉(zhuǎn)換成一個數(shù)組? 如果不查jdk api,我很難寫出來!我可以說說我的思路: 1.用正則表達(dá)式,代碼大概為:String [] result = orgStr.split(“,”);2.用 StingTokenizer ,代碼為:StringTokenizer tokener = StringTokenizer(orgStr,”,”);String [] result = new String[tokener.countTokens()];Int i=0;while(tokener.hasNext(){result[i++]=toker.nextToken();}

      36、數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?

      數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個方法。

      37、下面這條語句一共創(chuàng)建了多少個對象:String s=”a“+”b“+”c“+”d“;答:對于如下代碼: String s1 = ”a“;String s2 = s1 + ”b“;String s3 = ”a“ + ”b“;System.out.println(s2 == ”ab“);System.out.println(s3 == ”ab“);第一條語句打印的結(jié)果為false,第二條語句打印的結(jié)果為true,這說明javac編譯可以對字符串常量直接相加的表達(dá)式進(jìn)行優(yōu)化,不必要等到運行期去進(jìn)行加法運算處理,而是在編譯時去掉其中的加號,直接將其編譯成一個這些常量相連的結(jié)果。

      題目中的第一行代碼被編譯器在編譯時優(yōu)化后,相當(dāng)于直接定義了一個”abcd”的字符串,所以,上面的代碼應(yīng)該只創(chuàng)建了一個String對象。寫如下兩行代碼,String s = ”a“ + ”b“ + ”c“ + ”d“;

      System.out.println(s == ”abcd“);最終打印的結(jié)果應(yīng)該為true。

      38、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?

      也許你的答案是在return之前,但往更細(xì)地說,我的答案是在return中間執(zhí)行,請看下面程序代碼的運行結(jié)果:

      public class Test {

      static int test(){

      } }

      ---------執(zhí)行結(jié)果---------int x = 1;try { } finally { } ++x;return x;/** * @param args add by zxx ,Dec 9, 2008 */ public static void main(String[] args){

      } // TODO Auto-generated method stub System.out.println(new Test().test());;1

      運行結(jié)果是1,為什么呢?主函數(shù)調(diào)用子函數(shù)并得到結(jié)果的過程,好比主函數(shù)準(zhǔn)備一個空罐子,當(dāng)子函數(shù)要返回結(jié)果時,先把結(jié)果放在罐子里,然后再將程序邏輯返回到主函數(shù)。所謂返回,就是子函數(shù)說,我不運行了,你主函數(shù)繼續(xù)運行吧,這沒什么結(jié)果可言,結(jié)果是在說這話之前放進(jìn)罐子里的。

      39、下面的程序代碼輸出的結(jié)果是多少?

      public class smallT {

      } public static void main(String args[]){ smallT t = new smallT();int b = t.get();System.out.println(b);}

      public int get(){ try {

      return 1;} finally {

      return 2;} } 返回的結(jié)果是2。

      我可以通過下面一個例子程序來幫助我解釋這個答案,從下面例子的運行結(jié)果中可以發(fā)現(xiàn),try中的return語句調(diào)用的函數(shù)先于finally中調(diào)用的函數(shù)執(zhí)行,也就是說return語句先執(zhí)行,finally語句后執(zhí)行,所以,返回的結(jié)果是2。Return并不是讓函數(shù)馬上返回,而是return語句執(zhí)行后,將把返回結(jié)果放置進(jìn)函數(shù)棧中,此時函數(shù)并不是馬上返回,它要執(zhí)行finally語句后才真正開始返回。

      在講解答案時可以用下面的程序來幫助分析:

      public class Test {

      int test(){

      try { } return func1();/** * @param args add by zxx ,Dec 9, 2008 */ public static void main(String[] args){

      } // TODO Auto-generated method stub System.out.println(new Test().test());;

      }

      } finally { } return func2();int func1(){

      } int func2(){ System.out.println(”func2“);return 2;System.out.println(”func1“);return 1;}

      -----------執(zhí)行結(jié)果-----------------

      func1 func2 2

      結(jié)論:finally中的代碼比return 和break語句后執(zhí)行

      40、final, finally, finalize的區(qū)別。

      final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

      內(nèi)部類要訪問局部變量,局部變量必須定義成final類型,例如,一段代碼……

      finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。

      finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等。JVM不保證此方法總被調(diào)用

      41、運行時異常與一般異常有何異同?

      異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。

      42、error和exception有什么區(qū)別?

      error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。

      43、Java中的異常處理機制的簡單原理和應(yīng)用。

      異常是指java程序運行時(非編譯)所發(fā)生的非正常情況或錯誤,與現(xiàn)實生活中的事件很相似,現(xiàn)實生活中的事件可以包含事件發(fā)生的時間、地點、人物、情節(jié)等信息,可以用一個對象來表示,Java使用面向?qū)ο蟮姆绞絹硖幚懋惓?,它把程序中發(fā)生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。

      Java對異常進(jìn)行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應(yīng)用程序本身無法克服和恢復(fù)的一種嚴(yán)重問題,程序只有死的份了,例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。Exception表示程序還能夠克服和恢復(fù)的問題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問題,也就是軟件開發(fā)人員考慮不周所導(dǎo)致的問題,軟件使用者無法克服和恢復(fù)這種問題,但在這種問題下還可以讓軟件系統(tǒng)繼續(xù)運行或者讓軟件死掉,例如,數(shù)組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運行環(huán)境的變化或異常所導(dǎo)致的問題,是用戶能夠克服的問題,例如,網(wǎng)絡(luò)斷線,硬盤空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。

      java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,而系統(tǒng)異??梢蕴幚硪部梢圆惶幚?,所以,編譯器不強制用try..catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常。

      提示答題者:就按照三個級別去思考:虛擬機必須宕機的錯誤,程序可以死掉也可以不死掉的錯誤,程序不應(yīng)該死掉的錯誤;

      44、請寫出你最常見到的5個runtime exception。

      這道題主要考你的代碼量到底多大,如果你長期寫代碼的,應(yīng)該經(jīng)常都看到過一些系統(tǒng)方面的異常,你不一定真要回答出5個具體的系統(tǒng)異常,但你要能夠說出什么是系統(tǒng)異常,以及幾個系統(tǒng)異常就可以了,當(dāng)然,這些異常完全用其英文名稱來寫是最好的,如果實在寫不出,那就用中文吧,有總比沒有強!

      所謂系統(tǒng)異常,就是…..,它們都是RuntimeException的子類,在jdk doc中查RuntimeException類,就可以看到其所有的子類列表,也就是看到了所有的系統(tǒng)異常。我比較有印象的系統(tǒng)異常有:NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException。

      45、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?

      46、java中有幾種方法可以實現(xiàn)一個線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?

      java5以前,有如下兩種: 第一種:

      new Thread(){}.start();這表示調(diào)用Thread子類對象的run方法,new Thread(){}表示一個Thread的匿名子類的實例對象,子類加上run方法后的代碼如下: new Thread(){ public void run(){ } }.start();

      第二種:

      new Thread(new Runnable(){}).start();這表示調(diào)用Thread對象接受的Runnable對象的run方法,new Runnable(){}表示一個Runnable的匿名子類的實例對象,runnable的子類加上run方法后的代碼如下: new Thread(new Runnable(){

      public void run(){

      }

      }).start();

      從java5開始,還有如下一些線程池創(chuàng)建多線程的方式: ExecutorService pool = Executors.newFixedThreadPool(3)for(int i=0;i<10;i++){ pool.execute(new Runable(){public void run(){}});} Executors.newCachedThreadPool().execute(new Runable(){public void run(){}});Executors.newSingleThreadExecutor().execute(new Runable(){public void run(){}});

      有兩種實現(xiàn)方法,分別使用new Thread()和new Thread(runnable)形式,第一種直接調(diào)用thread的run方法,所以,我們往往使用Thread子類,即new SubThread()。第二種調(diào)用runnable的run方法。

      有兩種實現(xiàn)方法,分別是繼承Thread類與實現(xiàn)Runnable接口

      用synchronized關(guān)鍵字修飾同步方法

      反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時候,目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被”掛起“的線程恢復(fù)運行。對任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個標(biāo)志,指出線程應(yīng)該活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個notify()重新啟動線程。

      47、sleep()和 wait()有什么區(qū)別?

      (網(wǎng)上的答案:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復(fù)。調(diào)用sleep不會釋放對象鎖。wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運行狀態(tài)。)

      sleep就是正在執(zhí)行的線程主動讓出cpu,cpu去執(zhí)行其他線程,在sleep指定的時間過后,cpu才會回到這個線程上繼續(xù)往下執(zhí)行,如果當(dāng)前線程進(jìn)入了同步鎖,sleep方法并不會釋放鎖,即使當(dāng)前線程使用sleep方法讓出了cpu,但其他被同步鎖擋住了的線程也無法得到執(zhí)行。wait是指在一個已經(jīng)進(jìn)入了同步鎖的線程內(nèi),讓自己暫時讓出同步鎖,以便其他正在等待此鎖的線程可以得到同步鎖并運行,只有其他線程調(diào)用了notify方法(notify并不釋放鎖,只是告訴調(diào)用過wait方法的線程可以去參與獲得鎖的競爭了,但不是馬上得到鎖,因為鎖還在別人手里,別人還沒釋放。如果notify方法后面的代碼還有很多,需要這些代碼執(zhí)行完后才會釋放鎖,可以在notfiy方法后增加一個等待和一些代碼,看看效果),調(diào)用wait方法的線程就會解除wait狀態(tài)和程序可以再次得到鎖后繼續(xù)向下運行。對于wait的講解一定要配合例子代碼來說明,才顯得自己真明白。

      package com.huawei.interview;

      public class MultiThread {

      /** * @param args */ public static void main(String[] args){

      // TODO Auto-generated method stub new Thread(new Thread1()).start();try {

      }

      } Thread.sleep(10);// TODO Auto-generated catch block e.printStackTrace();

      } catch(InterruptedException e){ new Thread(new Thread2()).start();private static class Thread1 implements Runnable {

      @Override public void run(){ // TODO Auto-generated method stub //由于這里的Thread1和下面的Thread2內(nèi)部run方法要用同一對象作為監(jiān)視器,我們這里不能用this,因為在Thread2里面的this和這個Thread1的this不是同一個對象。我們用MultiThread.class這個字節(jié)碼對象,當(dāng)前虛擬機里引用這個變量時,指向的都是同一個對象。

      System.out.println(”enter thread1...“);

      System.out.println(”thread1 is waiting“);try { synchronized(MultiThread.class){ //釋放鎖有兩種方式,第一種方式是程序自然離開監(jiān)視器的范圍,也就是離開了synchronized關(guān)鍵字管轄的代碼范圍,另一種方式就是在synchronized關(guān)鍵字管轄的代碼內(nèi)部調(diào)用監(jiān)視器對象的wait方法。這里,使用wait方法釋放鎖。

      MultiThread.class.wait();

      }

      private static class Thread2 implements Runnable {

      }

      } } catch(InterruptedException e){

      }

      System.out.println(”thread1 is going on...“);System.out.println(”thread1 is being over!“);

      // TODO Auto-generated catch block e.printStackTrace();

      @Override public void run(){

      // TODO Auto-generated method stub synchronized(MultiThread.class){

      System.out.println(”enter thread2...“);

      System.out.println(”thread2 notify other thread can release wait status..“);//由于notify方法并不釋放鎖,即使thread2調(diào)用下面的sleep方法休息了10毫秒,但thread1仍然不會執(zhí)行,因為thread2沒有釋放鎖,所以Thread1無法得不到鎖。

      }

      }

      } MultiThread.class.notify();

      System.out.println(”thread2 is sleeping ten try {

      }

      System.out.println(“thread2 is going on...”);System.out.println(“thread2 is being over!”);Thread.sleep(10);// TODO Auto-generated catch block e.printStackTrace();} catch(InterruptedException e){ millisecond...“);}

      48、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。

      如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。

      當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時,就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。

      49.下面兩個方法同步嗎?(自己發(fā)明)

      class Test { synchronized static void sayHello3()

      } synchronized void getX(){} { }

      50、多線程有幾種實現(xiàn)方法?同步有幾種實現(xiàn)方法?

      多線程有兩種實現(xiàn)方法,分別是繼承Thread類與實現(xiàn)Runnable接口

      同步的實現(xiàn)方面有兩種,分別是synchronized,wait與notify

      wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。

      sleep():使一個正在運行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。

      notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。

      Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

      51、啟動一個線程是用run()還是start()?.啟動一個線程是調(diào)用start()方法,使線程就緒狀態(tài),以后可以被調(diào)度為運行狀態(tài),一個線程必須關(guān)聯(lián)一些具體的執(zhí)行代碼,run()方法是該線程所關(guān)聯(lián)的執(zhí)行代碼。

      52、當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?

      分幾種情況:

      1.其他方法前是否加了synchronized關(guān)鍵字,如果沒加,則能。

      2.如果這個方法內(nèi)部調(diào)用了wait,則可以進(jìn)入其他synchronized方法。

      3.如果其他個方法都加了synchronized關(guān)鍵字,并且內(nèi)部沒有調(diào)用wait,則不能。

      4.如果其他方法是static,它用的同步鎖是當(dāng)前類的字節(jié)碼,與非靜態(tài)的方法不能同步,因為非靜態(tài)的方法用的是this。

      53、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系

      一個程序中可以有多條執(zhí)行線索同時執(zhí)行,一個線程就是程序中的一條執(zhí)行線索,每個線程上都關(guān)聯(lián)有要執(zhí)行的代碼,即可以有多段程序代碼同時運行,每個程序至少都有一個線程,即main方法執(zhí)行的那個線程。如果只是一個cpu,它怎么能夠同時執(zhí)行多段程序呢?這是從宏觀上來看的,cpu一會執(zhí)行a線索,一會執(zhí)行b線索,切換時間很快,給人的感覺是a,b在同時執(zhí)行,好比大家在同一個辦公室上網(wǎng),只有一條鏈接到外部網(wǎng)線,其實,這條網(wǎng)線一會為a傳數(shù)據(jù),一會為b傳數(shù)據(jù),由于切換時間很短暫,所以,大家感覺都在同時上網(wǎng)。

      狀態(tài):就緒,運行,synchronize阻塞,wait和sleep掛起,結(jié)束。wait必須在synchronized內(nèi)部調(diào)用。

      調(diào)用線程的start方法后線程進(jìn)入就緒狀態(tài),線程調(diào)度系統(tǒng)將就緒狀態(tài)的線程轉(zhuǎn)為運行狀態(tài),遇到synchronized語句時,由運行狀態(tài)轉(zhuǎn)為阻塞,當(dāng)synchronized獲得鎖后,由阻塞轉(zhuǎn)為運行,在這種情況可以調(diào)用wait方法轉(zhuǎn)為掛起狀態(tài),當(dāng)線程關(guān)聯(lián)的代碼執(zhí)行完后,線程變?yōu)榻Y(jié)束狀態(tài)。

      54、簡述synchronized和java.util.concurrent.locks.Lock的異同 ?

      主要相同點:Lock能完成synchronized所實現(xiàn)的所有功能

      主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。Lock還有更強大的功能,例如,它的tryLock方法可以非阻塞方式去拿鎖。

      舉例說明(對下面的題用lock進(jìn)行了改寫):

      package com.huawei.interview;

      import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;

      public class ThreadTest {

      /** * @param args */

      private int j;

      private Lock lock = new ReentrantLock();public static void main(String[] args){

      } private class Subtractor implements Runnable {

      }

      private class Adder implements Runnable {

      @Override public void run(){

      // TODO Auto-generated method stub while(true){ @Override public void run(){

      } // TODO Auto-generated method stub while(true){

      } /*synchronized(ThreadTest.this){ System.out.println(”j--=“ + j--);//這里拋異常了,鎖能釋放嗎? }*/ lock.lock();try { { } lock.unlock();System.out.println(”j--=“ + j--);}finally

      // TODO Auto-generated method stub ThreadTest tt = new ThreadTest();for(int i=0;i<2;i++){

      } new Thread(tt.new Adder()).start();new Thread(tt.new Subtractor()).start();

      /*synchronized(ThreadTest.this){

      System.out.println(”j++=“ + j++);

      }*/

      lock.lock();

      try

      {

      System.out.println(”j++=“ + j++);

      }finally

      {

      lock.unlock();

      }

      }

      }

      } }

      55、設(shè)計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序。

      以下程序使用內(nèi)部類實現(xiàn)線程,對j增減的時候沒有考慮順序問題。

      public class ThreadTest1 {

      private int j;

      public static void main(String args[]){

      ThreadTest1 tt=new ThreadTest1();

      Inc inc=tt.new Inc();

      Dec dec=tt.new Dec();

      for(int i=0;i<2;i++){

      Thread t=new Thread(inc);

      t.start();

      t=new Thread(dec);

      t.start();

      }

      }

      private synchronized void inc(){

      j++;

      System.out.println(Thread.currentThread().getName()+”-inc:“+j);

      }

      private synchronized void dec(){

      j--;

      System.out.println(Thread.currentThread().getName()+”-dec:“+j);

      } class Inc implements Runnable{

      public void run(){

      for(int i=0;i<100;i++){

      inc();

      }

      } }

      class Dec implements Runnable{

      public void run(){

      for(int i=0;i<100;i++){

      dec();

      }

      } } }

      ----------隨手再寫的一個-------------class A { JManger j =new JManager();main(){ new A().call();}

      void call { for(int i=0;i<2;i++){

      new Thread(new Runnable(){ public void run(){while(true){j.accumulate()}}}).start();

      new Thread(new Runnable(){ public void run(){while(true){j.sub()}}}).start();} } }

      class JManager { private j = 0;

      public synchronized void subtract(){

      j--}

      public synchronized void accumulate(){

      j++;}

      }

      56、子線程循環(huán)10次,接著主線程循環(huán)100,接著又回到子線程循環(huán)10次,接著再回到主線程又循環(huán)100,如此循環(huán)50次,請寫出程序。

      最終的程序代碼如下:

      public class ThreadTest {

      } public void run(){

      }

      for(int i=0;i<50;i++){

      business.SubThread(i);

      } public void init(){

      final Business business = new Business();new Thread(new Runnable(){ } /** * @param args */ public static void main(String[] args){ // TODO Auto-generated method stub new ThreadTest().init();

      }).start();

      for(int i=0;i<50;i++){ business.MainThread(i);}

      private class Business {

      boolean bShouldSub = true;//這里相當(dāng)于定義了控制該誰執(zhí)行的一個信號燈 public synchronized void MainThread(int i){

      }

      public synchronized void SubThread(int i){

      if(!bShouldSub)

      try {

      this.wait();// TODO Auto-generated catch block e.printStackTrace();} catch(InterruptedException e){ if(bShouldSub)

      { } bShouldSub = true;this.notify();System.out.println(Thread.currentThread().getName()+ try {

      this.wait();// TODO Auto-generated catch block e.printStackTrace();

      } catch(InterruptedException e){ }

      for(int j=0;j<5;j++)”:i=“ + i +”,j=“ + j);}

      for(int j=0;j<10;j++)

      }

      }

      } { } bShouldSub = false;this.notify();

      System.out.println(Thread.currentThread().getName()+ ”:i=“ + i +”,j=“ + j);備注:不可能一上來就寫出上面的完整代碼,最初寫出來的代碼如下,問題在于兩個線程的代碼要參照同一個變量,即這兩個線程的代碼要共享數(shù)據(jù),所以,把這兩個線程的執(zhí)行代碼搬到同一個類中去:

      package com.huawei.interview.lym;

      public class ThreadTest {

      new Thread(new Runnable(){ public void run(){

      private static boolean bShouldMain = false;

      public static void main(String[] args){

      // TODO Auto-generated method stub /*new Thread(){ public void run(){

      }

      //final String str = new String(”“);for(int i=0;i<50;i++){

      for(int j=0;j<10;j++){ }

      System.out.println(”i=“ + i + ”,j=“ + j);}

      }.start();*/

      }

      }

      for(int i=0;i<50;i++){

      synchronized(ThreadTest.class){

      if(bShouldMain){

      }

      for(int j=0;j<10;j++){

      }

      bShouldMain = true;

      ThreadTest.class.notify();

      System.out.println(”i=“ + i + ”,j=“ + j);

      try {

      }

      ThreadTest.class.wait();} e.printStackTrace();

      catch(InterruptedException e){ Thread.currentThread().getName()+

      }

      }).start();for(int i=0;i<50;i++){

      synchronized(ThreadTest.class){

      }

      ”i=“ + i + ”,j=“ + j);if(!bShouldMain){

      try {

      }

      ThreadTest.class.wait();} e.printStackTrace();catch(InterruptedException e){ } { for(int j=0;j<5;j++)System.out.println(Thread.currentThread().getName()+

      }

      }

      } bShouldMain = false;ThreadTest.class.notify();

      }

      下面使用jdk5中的并發(fā)庫來實現(xiàn)的: import java.util.concurrent.Executors;import java.util.concurrent.ExecutorService;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.util.concurrent.locks.Condition;

      public class ThreadTest { private static Lock lock = new ReentrantLock();private static Condition subThreadCondition = lock.newCondition();private static boolean bBhouldSubThread = false;public static void main(String [] args){

      ExecutorService threadPool = Executors.newFixedThreadPool(3);

      threadPool.execute(new Runnable(){

      public void run()

      {

      for(int i=0;i<50;i++)

      {

      lock.lock();

      try

      {

      if(!bBhouldSubThread)

      subThreadCondition.await();

      for(int j=0;j<10;j++)

      {

      System.out.println(Thread.currentThread().getName()+ ”,j=“ + j);

      }

      bBhouldSubThread = false;

      subThreadCondition.signal();

      }catch(Exception e)

      {

      }

      finally

      {

      }

      }

      lock.unlock();

      }

      }

      }

      });threadPool.shutdown();for(int i=0;i<50;i++){

      lock.lock();

      try

      {

      if(bBhouldSubThread)

      subThreadCondition.await();

      }

      for(int j=0;j<10;j++){

      System.out.println(Thread.currentThread().getName()+ ”,j=“ + j);} bBhouldSubThread = true;subThreadCondition.signal();

      }catch(Exception e){

      } finally { lock.unlock();}

      57、介紹Collection框架的結(jié)構(gòu)

      答:隨意發(fā)揮題,天南海北誰便談,只要讓別覺得你知識淵博,理解透徹即可。

      58、Collection框架中實現(xiàn)比較要實現(xiàn)什么接口

      comparable/comparator

      59、ArrayList和Vector的區(qū)別

      答:

      這兩個類都實現(xiàn)了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當(dāng)于一種動態(tài)的數(shù)組,我們以后可以按位置索引號取出某個元素,并且其中的數(shù)據(jù)是允許重復(fù)的,這是HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號去檢索其中的元素,也不允許有重復(fù)的元素(本來題目問的與hashset沒有任何關(guān)系,但為了說清楚ArrayList與Vector的功能,我們使用對比方式,更有利于說明問題)。

      接著才說ArrayList與Vector的區(qū)別,這主要包括兩個方面:.(1)同步性:

      Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因為它不考慮線程安全,效率會高些;如果有多個線程會訪問到集合,那最好是使用Vector,因為不需要我們自己再去考慮和編寫線程安全的代碼。

      備注:對于Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。所以,我們講課時先講老的。(2)數(shù)據(jù)增長:

      ArrayList與Vector都有一個初始的容量大小,當(dāng)存儲進(jìn)它們里面的元素的個數(shù)超過了容量時,就需要增加ArrayList與Vector的存儲空間,每次要增加存儲空間時,不是只增加一個存儲單元,而是增加多個存儲單元,每次增加的存儲單元的個數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。Vector默認(rèn)增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規(guī)定(從源代碼看到的是增長為原來的1.5倍)。ArrayList與Vector都可以設(shè)置初始的空間大小,Vector還可以設(shè)置增長的空間大小,而ArrayList沒有提供設(shè)置增長空間的方法。

      總結(jié):即Vector增長原來的一倍,ArrayList增加原來的0.5倍。

      60、HashMap和Hashtable的區(qū)別

      (條理上還需要整理,也是先說相同點,再說不同點)HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個線程訪問的情況下,效率要高于Hashtable。

      HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

      HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

      Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個實現(xiàn)。

      最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。

      Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

      就HashMap與HashTable主要從三方面來說。

      一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個實現(xiàn)

      二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的

      三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

      61、List 和 Map 區(qū)別? 一個是存儲單列數(shù)據(jù)的集合,另一個是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List中存儲的數(shù)據(jù)是有順序,并且允許重復(fù);Map中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的,它的值是可以有重復(fù)的。

      62、List, Set, Map是否繼承自Collection接口?

      List,Set是,Map不是

      63、List、Map、Set三個接口,存取元素時,各有什么特點?

      這樣的題屬于隨意發(fā)揮題:這樣的題比較考水平,兩個方面的水平:一是要真正明白這些內(nèi)容,二是要有較強的總結(jié)和表述能力。如果你明白,但表述不清楚,在別人那里則等同于不明白。

      首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個功共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個相等(注意,不是僅僅是相同)的對象,即假設(shè)Set集合中有了一個A對象,現(xiàn)在我要向Set集合再存入一個B對象,但B對象與A對象equals相等,則B對象存儲不進(jìn)去,所以,Set集合的add方法有一個boolean的返回值,當(dāng)集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true,當(dāng)集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結(jié)果為false。Set取元素時,沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

      List表示有先后順序的集合,注意,不是那種按年齡、按大小、按價格之類的排序。當(dāng)我們多次調(diào)用add(Obj e)方法時,每次加入的對象就像火車站買票有排隊順序一樣,按先來后到的順序排序。有時候,也可以插隊,即調(diào)用add(int index,Obj e)方法,就可以指定當(dāng)前對象在集合中的存放位置。一個對象可以被反復(fù)存儲進(jìn)List中,每調(diào)用一次add方法,這個對象就被插入進(jìn)集合中一次,其實,并不是把這個對象本身存儲進(jìn)了集合中,而是在集合中用一個索引變量指向這個對象,當(dāng)這個對象被add多次時,即相當(dāng)于集合中有多個索引指向了這個對象,如圖x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調(diào)用get(index i)來明確說明取第幾個。

      Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重復(fù)的key,這個重復(fù)的規(guī)則也是按equals比較相等。取則可以根據(jù)key獲得相應(yīng)的value,即get(Object key)返回值為key 所對應(yīng)的value。另外,也可以獲得所有的key的結(jié)合,還可以獲得所有的value的結(jié)合,還可以獲得key和value組合成的Map.Entry對象的集合。

      List 以特定次序來持有元素,可有重復(fù)元素。Set 無法擁有重復(fù)元素,內(nèi)部排序。Map 保存key-value值,value可多值。

      HashSet按照hashcode值的某種運算方式進(jìn)行存儲,而不是直接按hashCode值的大小進(jìn)行存儲。例如,”abc“---> 78,”def“---> 62,”xyz“---> 65在hashSet中的存儲順序不是62,65,78,這些問題感謝以前一個叫崔健的學(xué)員提出,最后通過查看源代碼給他解釋清楚,看本次培訓(xùn)學(xué)員當(dāng)中有多少能看懂源碼。LinkedHashSet按插入的順序存儲,那被存儲對象的hashcode方法還有什么作用呢?學(xué)員想想!hashset集合比較兩個對象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new 兩個Student插入到HashSet中,看HashSet的size,實現(xiàn)hashcode和equals方法后再看size。

      同一個對象可以在Vector中加入多次。往集合里面加元素,相當(dāng)于集合里用一根繩子連接到了目標(biāo)對象。往HashSet中卻加不了多次的。

      64、說出ArrayList,Vector, LinkedList的存儲性能和特性

      ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。

      LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList可以被當(dāng)作堆棧和隊列來使用。

      65、去掉一個Vector集合中重復(fù)的元素

      Vector newVector = new Vector();For(int i=0;i

      newVector.add(obj);} 還有一種簡單的方式,HashSet set = new HashSet(vector);66、Collection 和 Collections的區(qū)別。

      Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作。

      67、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?

      Set里的元素是不能重復(fù)的,元素重復(fù)與否是使用equals()方法進(jìn)行判斷的。

      equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當(dāng)兩個分離的對象的內(nèi)容和類型相配的話,返回真值。

      68、你所知道的集合類都有哪些?主要方法?

      最常用的集合類是 List 和 Map。List 的具體實現(xiàn)包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。List 適用于按數(shù)值索引訪問元素的情形。

      Map 提供了一個更通用的元素存儲方法。Map 集合類用于存儲元素對(稱作”鍵“和”值“),其中每個鍵映射到一個值。

      ArrayList/Vector?List

      ?Collection HashSet/TreeSet?Set

      Propeties?HashTable

      ?Map Treemap/HashMap

      我記的不是方法名,而是思想,我知道它們都有增刪改查的方法,但這些方法的具體名稱,我記得不是很清楚,對于set,大概的方法是add,remove, contains;對于map,大概的方法就是put,remove,contains等,因為,我只要在eclispe下按點操作符,很自然的這些方法就出來了。我記住的一些思想就是List類會有g(shù)et(int index)這樣的方法,因為它可以按順序取元素,而set類中沒有g(shù)et(int index)這樣的方法。List和set都可以迭代出所有元素,迭代時先要得到一個iterator對象,所以,set和list類都有一個iterator方法,用于返回那個iterator對象。map可以返回三個集合,一個是返回所有的key的集合,另外一個返回的是所有value的集合,再一個返回的key和value組合成的EntrySet對象的集合,map也有g(shù)et方法,參數(shù)是key,返回值是key對應(yīng)的value。

      69、兩個對象值相同(x.equals(y)== true),但卻可有不同的hash code,這句話對不對?

      對。

      如果對象要保存在HashSet或HashMap中,它們的equals相等,那么,它們的hashcode值就必須相等。

      如果不是要保存在HashSet或HashMap,則與hashcode沒有什么關(guān)系了,這時候hashcode不等是可以的,例如arrayList存儲的對象就不用實現(xiàn)hashcode,當(dāng)然,我們沒有理由不實現(xiàn),通常都會去實現(xiàn)的。

      70、TreeSet里面放對象,如果同時放入了父類和子類的實例對象,那比較時使用的是父類的compareTo方法,還是使用的子類的compareTo方法,還是拋異常!

      (應(yīng)該是沒有針對問題的確切的答案,當(dāng)前的add方法放入的是哪個對象,就調(diào)用哪個對象的compareTo方法,至于這個compareTo方法怎么做,就看當(dāng)前這個對象的類中是如何編寫這個方法的)實驗代碼:

      public class Parent implements Comparable {

      }

      public class Child extends Parent {

      // TODO Auto-generated method stub public Child(){ } public int compareTo(Object o){ super(3);private int age = 0;public Parent(int age){ } public int compareTo(Object o){

      } // TODO Auto-generated method stub System.out.println(”method of parent“);Parent o1 =(Parent)o;return age>o1.age?1:age

      }

      }

      System.out.println(”method of child“);Child o1 =(Child)o;return 1;//

      public class TreeSetTest {

      /** * @param args */ public static void main(String[] args){

      } // TODO Auto-generated method stub TreeSet set = new TreeSet();set.add(new Parent(3));set.add(new Child());set.add(new Parent(4));System.out.println(set.size());}

      71、說出一些常用的類,包,接口,請各舉5個

      要讓人家感覺你對java ee開發(fā)很熟,所以,不能僅僅只列core java中的那些東西,要多列你在做ssh項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。

      常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer java.util.Date,System,Class,List,HashMap

      常用的包:java.lang

      java.io java.util

      java.sql ,javax.servlet,org.apache.strtuts.action,org.hibernate 常用的接口:Remote List Map Document

      NodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession 72、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

      字節(jié)流,字符流。字節(jié)流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。

      73、字節(jié)流與字符流的區(qū)別

      要把一片二進(jìn)制數(shù)據(jù)數(shù)據(jù)逐一輸出到某個設(shè)備中,或者從某個設(shè)備中逐一讀取一片二進(jìn)制數(shù)據(jù),不管輸入輸出設(shè)備是什么,我們要用統(tǒng)一的方式來完成這些操作,用一種抽象的方式進(jìn)行描述,這個抽象描述方式起名為IO流,對應(yīng)的抽象類為OutputStream和InputStream,不同的實現(xiàn)類就代表不同的輸入和輸出設(shè)備,它們都是針對字節(jié)進(jìn)行操作的。

      在應(yīng)用中,經(jīng)常要完全是字符的一段文本輸出去或讀進(jìn)來,用字節(jié)流可以嗎?計算機中的一切最終都是二進(jìn)制的字節(jié)形式存在。對于“中國”這些字符,首先要得到其對應(yīng)的字節(jié),然后將字節(jié)寫入到輸出流。讀取時,首先讀到的是字節(jié),可是我們要把它顯示為字符,我們需要將字節(jié)轉(zhuǎn)換成字符。由于這樣的需求很廣泛,人家專門提供了字符流的包裝類。

      底層設(shè)備永遠(yuǎn)只接受字節(jié)數(shù)據(jù),有時候要寫字符串到底層設(shè)備,需要將字符串轉(zhuǎn)成字節(jié)再進(jìn)行寫入。字符流是字節(jié)流的包裝,字符流則是直接接受字符串,它內(nèi)部將串轉(zhuǎn)成字節(jié),再寫入底層設(shè)備,這為我們向IO設(shè)別寫入或讀取字符串提供了一點點方便。

      字符向字節(jié)轉(zhuǎn)換時,要注意編碼的問題,因為字符串轉(zhuǎn)成字節(jié)數(shù)組,其實是轉(zhuǎn)成該字符的某種編碼的字節(jié)形式,讀取也是反之的道理。

      講解字節(jié)流與字符流關(guān)系的代碼案例: import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.InputStreamReader;import java.io.PrintWriter;

      public class IOTest { public static void main(String[] args)throws Exception {

      String str = ”中國人“;

      /*FileOutputStream fos = new FileOutputStream(”1.txt“);

      fos.write(str.getBytes(”UTF-8“));

      fos.close();*/

      /*FileWriter fw = new FileWriter(”1.txt“);

      fw.write(str);

      fw.close();*/

      PrintWriter pw = new PrintWriter(”1.txt“,”utf-8“);

      pw.write(str);

      pw.close();

      /*FileReader fr = new FileReader(”1.txt“);

      } } char[] buf = new char[1024];int len = fr.read(buf);String myStr = new String(buf,0,len);System.out.println(myStr);*/ /*FileInputStream fr = new FileInputStream(”1.txt“);byte[] buf = new byte[1024];int len = fr.read(buf);String myStr = new String(buf,0,len,”UTF-8“);System.out.println(myStr);*/ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(”1.txt“),”UTF-8“));String myStr = br.readLine();br.close();System.out.println(myStr);74、什么是java序列化,如何實現(xiàn)java序列化?或者請解釋Serializable接口的作用。

      我們有時候?qū)⒁粋€java對象變成字節(jié)流的形式傳出去或者從一個字節(jié)流中恢復(fù)成一個java對象,例如,要將java對象存儲到硬盤或者傳送給網(wǎng)絡(luò)上的其他計算機,這個過程我們可以自己寫代碼去把一個java對象變成某個格式的字節(jié)流再傳輸,但是,jre本身就提供了這種支持,我們可以調(diào)用OutputStream的writeObject方法來做,如果要讓java 幫我們做,要被傳輸?shù)膶ο蟊仨殞崿F(xiàn)serializable接口,這樣,javac編譯時就會進(jìn)行特殊處理,編譯的類才可以被writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實現(xiàn)Serializable接口,該接口是一個mini接口,其中沒有需要實現(xiàn)的方法,implements Serializable只是為了標(biāo)注該對象是可被序列化的。

      例如,在web開發(fā)中,如果對象被保存在了Session中,tomcat在重啟時要把Session對象序列化到硬盤,這個對象就必須實現(xiàn)Serializable接口。如果對象要經(jīng)過分布式系統(tǒng)進(jìn)行網(wǎng)絡(luò)傳輸或通過rmi等遠(yuǎn)程調(diào)用,這就需要在網(wǎng)絡(luò)上傳輸對象,被傳輸?shù)膶ο缶捅仨殞崿F(xiàn)Serializable接口。75、描述一下JVM加載class文件的原理機制?

      JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader 是一個重要的Java運行時系統(tǒng)組件。它負(fù)責(zé)在運行時查找和裝入類文件的類。

      76、heap和stack有什么區(qū)別。

      java的內(nèi)存分為兩類,一類是棧內(nèi)存,一類是堆內(nèi)存。棧內(nèi)存是指程序進(jìn)入一個方法時,會為這個方法單獨分配一塊私屬存儲空間,用于存儲這個方法內(nèi)部的局部變量,當(dāng)這個方法結(jié)束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。

      堆是與棧作用不同的內(nèi)存,一般用于存放不放在當(dāng)前方法棧中的那些數(shù)據(jù),例如,使用new創(chuàng)建的對象都放在堆里,所以,它不會隨方法的結(jié)束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。

      77、GC是什么? 為什么要有GC?

      GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。

      78、垃圾回收的優(yōu)點和原理。并考慮2種回收機制。

      Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內(nèi)存管理。由于有個垃圾回收機制,Java中的對象不再有”作用域“的概念,只有對象的引用才有”作用域“。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進(jìn)行清楚和回收,程序員不能實時的調(diào)用垃圾回收器對某個對象或所有對象進(jìn)行垃圾回收?;厥諜C制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。

      79、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知虛擬機進(jìn)行垃圾回收?

      對于GC來說,當(dāng)程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是”可達(dá)的“,哪些對象是”不可達(dá)的“。當(dāng)GC確定一些對象為”不可達(dá)“時,GC就有責(zé)任回收這些內(nèi)存空間??梢浴3绦騿T可以手動執(zhí)行System.gc(),通知GC運行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。

      80、什么時候用assert。

      assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機制。在實現(xiàn)中,assertion就是在程序中的一條語句,它對一個boolean表達(dá)式進(jìn)行檢查,一個正確程序必須保證這個boolean表達(dá)式的值為true;如果該值為false,說明程序已經(jīng)處于不正確的狀態(tài)下,assert將給出警告或退出。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的。

      package com.huawei.interview;

      public class AssertTest {

      } /** * @param args */ public static void main(String[] args){

      } // TODO Auto-generated method stub int i = 0;for(i=0;i<5;i++){ } //假設(shè)程序不小心多了一句--i;--i;assert i==5;

      System.out.println(i);

      81、java中會存在內(nèi)存泄漏嗎,請簡單描述。

      所謂內(nèi)存泄露就是指一個不再被程序使用的對象或變量一直被占據(jù)在內(nèi)存中。java中有垃圾回收機制,它可以保證一對象不再被引用的時候,即對象編程了孤兒的時候,對象將自動被垃圾回收器從內(nèi)存中清除掉。由于Java 使用有向圖的方式進(jìn)行垃圾回收管理,可以消除引用循環(huán)的問題,例如有兩個對象,相互引用,只要它們和根進(jìn)程不可達(dá)的,那么GC也是可以回收它們的,例如下面的代碼可以看到這種情況的內(nèi)存回收:

      package com.huawei.interview;

      import java.io.IOException;

      public class GarbageTest {

      private static void gcTest()throws IOException {

      System.in.read();System.in.read();System.in.read();System.in.read();p1.setMate(p2);p2.setMate(p1);System.out.println(”before exit gctest!“);System.in.read();System.in.read();System.gc();

      Person p2 = new Person();

      Person p1 = new Person();/** * @param args * @throws IOException */ public static void main(String[] args)throws IOException {

      } // TODO Auto-generated method stub try {

      } System.out.println(”has exited gcTest!“);System.in.read();System.in.read();

      System.out.println(”out begin gc!“);for(int i=0;i<100;i++){

      } System.gc();System.in.read();System.in.read();gcTest();// TODO Auto-generated catch block e.printStackTrace();} catch(IOException e){

      } } System.out.println(”exit gctest!");private static class Person {

      } byte[] data = new byte[20000000];Person mate = null;public void setMate(Person other){ } mate = other;

      java中的內(nèi)存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對象已經(jīng)不再需要,但是因為長生命周期對象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場景,通俗地說,就是程序員可能創(chuàng)建了一個對象,以后一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是java中可能出現(xiàn)內(nèi)存泄露的情況,例如,緩存系統(tǒng),我們加載了一個對象放在緩存中(例如放在一個全局map對象中),然后一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。

      檢查java中的內(nèi)存泄露,一定要讓程序?qū)⒏鞣N分支情況都完整執(zhí)行到程序結(jié)束,然后看某個對象是否被使用過,如果沒有,則才能判定這個對象屬于內(nèi)存泄露。

      如果一個外部類的實例對象的方法返回了一個內(nèi)部類的實例對象,這個內(nèi)部類對象被長期引用了,即使那個外部類實例對象不再被使用,但由于內(nèi)部類持久外部類的實例對象,這個外部類對象將不會被垃圾回收,這也會造成內(nèi)存泄露。

      下面內(nèi)容來自于網(wǎng)上(主要特點就是清空堆棧中的某個元素,并不是徹底把它從數(shù)組中拿掉,而是把存儲的總數(shù)減少,本人寫得可以比這個好,在拿掉某個元素時,順便也讓它從數(shù)組中消失,將那個元素所在的位置的值設(shè)置為null即可):

      我實在想不到比那個堆棧更經(jīng)典的例子了,以致于我還要引用別人的例子,下面的例子不是我想到的,是書上看到的,當(dāng)然如果沒有在書上看到,可能過一段時間我自己也想的到,可是那時我說是我自己想到的也沒有人相信的。

      public class Stack { private Object[] elements=new Object[10];private int size = 0;public void push(Object e){ ensureCapacity();elements[size++] = e;}

      public Object pop(){

      if(size == 0)

      throw new EmptyStackException();

      return elements[--size];

      }

      private void ensureCapacity(){

      if(elements.length == size){

      Object[] oldElements = elements;

      elements = new Object[2 * elements.length+1];

      System.arraycopy(oldElements,0, elements, 0, size);

      }

      }

      }

      上面的原理應(yīng)該很簡單,假如堆棧加了10個元素,然后全部彈出來,雖然堆棧是空的,沒有我們要的東西,但是這是個對象是無法回收的,這個才符合了內(nèi)存泄露的兩個條件:無用,無法回收。

      但是就是存在這樣的東西也不一定會導(dǎo)致什么樣的后果,如果這個堆棧用的比較少,也就浪費了幾個K內(nèi)存而已,反正我們的內(nèi)存都上G了,哪里會有什么影響,再說這個東西很快就會被回收的,有什么關(guān)系。下面看兩個例子。

      例子1

      public class Bad{

      public static Stack s=Stack();

      static{

      s.push(new Object());

      s.pop();//這里有一個對象發(fā)生內(nèi)存泄露

      s.push(new Object());//上面的對象可以被回收了,等于是自愈了

      }

      }

      因為是static,就一直存在到程序退出,但是我們也可以看到它有自愈功能,就是說如果你的Stack最多有100個對象,那么最多也就只有100個對象無法被回收其實這個應(yīng)該很容易理解,Stack內(nèi)部持有100個引用,最壞的情況就是他們都是無用的,因為我們一旦放新的進(jìn)取,以前的引用自然消失!

      內(nèi)存泄露的另外一種情況:當(dāng)一個對象被存儲進(jìn)HashSet集合中以后,就不能修改這個對象中的那些參與計算哈希值的字段了,否則,對象修改后的哈希值與最初存儲進(jìn)HashSet集合中時的哈希值就不同了,在這種情況下,即使在contains方法使用該對象的當(dāng)前引用作為的參數(shù)去HashSet集合中檢索對象,也將返回找不到對象的結(jié)果,這也會導(dǎo)致無法從HashSet集合中單獨刪除當(dāng)前對象,造成內(nèi)存泄露。

      第四篇:struts2面試題(自己總結(jié))

      Struts2面試題

      1、struts2工作流程

      Struts 2框架本身大致可以分為3個部分:

      核心控制器FilterDispatcher、業(yè)務(wù)控制器Action和用戶實現(xiàn)的企業(yè)業(yè)務(wù)邏輯組件。

      核心控制器FilterDispatcher是Struts 2框架的基礎(chǔ),包含了框架內(nèi)部的控制流程和處理機制。

      業(yè)務(wù)控制器Action和業(yè)務(wù)邏輯組件是需要用戶來自己實現(xiàn)的。

      用戶在開發(fā)Action和業(yè)務(wù)邏輯組件的同時,還需要編寫相關(guān)的配置文件,供核心控制器FilterDispatcher來使用。

      Struts 2的工作流程相對于Struts 1要簡單,與WebWork框架基本相同,所以說Struts 2是WebWork的升級版本。基本簡要流程如下: 1、客戶端初始化一個指向Servlet容器的請求;

      2、這個請求經(jīng)過一系列的過濾器(Filter)

      (這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)3、接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請是否需要調(diào)用某個Action

      4、如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy

      5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類

      6、ActionProxy創(chuàng)建一個ActionInvocation的實例。

      7、ActionInvocation實例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

      8、一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標(biāo)簽。在這個過程中需要涉及到ActionMapper

      9、響應(yīng)的返回是通過我們在web.xml中配置的過濾器

      10、如果ActionContextCleanUp是當(dāng)前使用的,則FilterDispatecher將不會清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,則將會去清理sreadlocals。

      2、說下Struts的設(shè)計模式

      MVC模式: web應(yīng)用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設(shè)置決定是否需要表單驗證,如果需要就調(diào)用ActionForm的Validate()驗證后選擇將請求發(fā)送到哪個Action,如果Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生 成動態(tài)的網(wǎng)頁,返回給客戶。

      3、攔截器和過濾器的區(qū)別

      1、攔截器是基于java反射機制的,而過濾器是基于函數(shù)回調(diào)的。

      2、過濾器依賴于servlet容器,而攔截器不依賴于servlet容器。

      3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。

      4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。

      5、在Action的生命周期中,攔截器可以多次調(diào)用,而過濾器只能在容器初始化時被調(diào)用一次。

      4、struts1于struts2的比較

      1、Action 類: Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類編程而不是接口。

      Struts 2 Action類可以實現(xiàn)一個Action接口,也可實現(xiàn)其他接口,使可選和定制的服務(wù)成為可能。Struts2提供一個ActionSupport基類去 實現(xiàn)常用的接口。Action接口不是必須的,任何有execute標(biāo)識的POJO對象都可以用作Struts2的Action對象。

      2、線程模式: Struts1 Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。單例策略限制了Struts1 Action能作的事,并且要在開發(fā)時特別小心。Action資源必須是線程安全的或同步的。

      Struts2 Action對象為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。(實際上,servlet容器給每個請求產(chǎn)生許多可丟棄的對象,并且不會導(dǎo)致性能和垃圾回收問題)

      3、Servlet 依賴: Struts1 Action 依賴于Servlet API ,因為當(dāng)一個Action被調(diào)用時HttpServletRequest 和

      HttpServletResponse 被傳遞給execute方法。

      Struts 2 Action不依賴于容器,允許Action脫離容器單獨被測試。如果需要,Struts2 Action仍然可以訪問初始的request和response。但是,其他的元素減少或者消除了直接訪問HttpServetRequest 和

      HttpServletResponse的必要性。

      4、可測性:

      測試Struts1 Action的一個主要問題是execute方法暴露了servlet API(這使得測試要依賴于容器)。一個第三方擴展--Struts TestCase--提供了一套Struts1的模擬對象(來進(jìn)行測試)。

      Struts 2 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”支持也使測試更容易。

      5、捕獲輸入:

      Struts1 使用ActionForm對象捕獲輸入。所有的ActionForm必須繼承一個基類。因為其他JavaBean不能用作ActionForm,開發(fā)者經(jīng) 常創(chuàng)建多余的類捕獲輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存 在的JavaBean(仍然會導(dǎo)致有冗余的javabean)。

      Struts 2直接使用Action屬性作為輸入屬性,消除了對第二個輸入對象的需求。輸入屬性可能是有自己(子)屬性的rich對象類型。Action屬性能夠通過

      web頁面上的taglibs訪問。Struts2也支持ActionForm模式。rich對象類型,包括業(yè)務(wù)對象,能夠用作輸入/輸出對象。這種

      ModelDriven 特性簡化了taglib對POJO輸入對象的引用。

      6、表達(dá)式語言:

      Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。

      Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達(dá)式語言-- “Object Graph Notation Language ”(OGNL).7、綁定值到頁面(view): Struts 1使用標(biāo)準(zhǔn)JSP機制把對象綁定到頁面中來訪問。

      Struts 2 使用

      “ValueStack ”技術(shù),使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重用頁面(view)。

      8、類型轉(zhuǎn)換:

      Struts 1 ActionForm 屬性通常都是String類型。Struts1使用Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。每個類一個轉(zhuǎn)換器,對每一個實例來說是不可配置的。

      Struts2 使用OGNL進(jìn)行類型轉(zhuǎn)換。提供基本和常用對象的轉(zhuǎn)換器。

      9、校驗:

      Struts 1支持在ActionForm的validate方法中手動校驗,或者通過Commons Validator的擴展來校驗。同一個類可以有不同的校驗內(nèi)容,但不能校驗子對象。

      Struts2支持通過validate方法和XWork校驗框架來進(jìn)行校驗。XWork校驗框架使用為屬性類類型定義的校驗和內(nèi)容校驗,來支持chain校驗子屬性

      10、Action執(zhí)行的控制:

      Struts1支持每一個模塊有單獨的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。

      Struts2支持通過攔截器堆棧(Interceptor Stacks)為每一個Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。

      為什么要使用Struts2 Struts2 是一個相當(dāng)強大的Java Web開源框架,是一個基于POJO的Action的MVC Web框架。它基于當(dāng)年的Webwork和XWork框架,繼承其優(yōu)點,同時做了相當(dāng)?shù)母倪M(jìn)。

      1.Struts2基于MVC架構(gòu),框架結(jié)構(gòu)清晰,開發(fā)流程一目了然,開發(fā)人員可以很好的掌控開發(fā)的過程。

      2使用OGNL進(jìn)行參數(shù)傳遞。

      OGNL提供了在Struts2里訪問各種作用域中的數(shù)據(jù)的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的數(shù)據(jù)。大大簡化了開發(fā)人員在獲取這些數(shù)據(jù)時的代碼量。3強大的攔截器

      Struts2 的攔截器是一個Action級別的AOP,Struts2中的許多特性都是通過攔截器來實現(xiàn)的,例如異常處理,文件上傳,驗證等。攔截器是可配置與重用的,可以將一些通用的功能如:登錄驗證,權(quán)限驗證等置于攔截器中以完成一些Java Web項目中比較通用的功能。在我實現(xiàn)的的一Web項目中,就是使用Struts2的攔截器來完成了系統(tǒng)中的權(quán)限驗證功能。4易于測試

      Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了5Java Web項目的測試。

      易于擴展的插件機制在Struts2添加擴展是一件愉快而輕松的事情,只需要將所需要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡單的設(shè)置就可以實現(xiàn)擴展。6模塊化管理

      Struts2已經(jīng)把模塊化作為了體系架構(gòu)中的基本思想,可以通過三種方法來將應(yīng)用程序模塊化:將配置信息拆分成多個文件把自包含的應(yīng)用模塊創(chuàng)建為插件創(chuàng)建新的框架特性,即將與特定應(yīng)用無關(guān)的新功能組織成插件,以添加到多個應(yīng)用中去。

      7全局結(jié)果與聲明式異常

      為應(yīng)用程序添加全局的Result,和在配置文件中對異常進(jìn)行處理,這樣當(dāng)處理過程中出現(xiàn)指定異常時,可以跳轉(zhuǎn)到特定頁面。

      他的如此之多的優(yōu)點,是很多人比較的青睞,與spring ,Hibernate進(jìn)行結(jié)合,組成了現(xiàn)在比較流行的ssh框架,當(dāng)然每個公司都要自己的框架,也是ssh變異的產(chǎn)品。

      struts2有哪些優(yōu)點?

      1)在軟件設(shè)計上Struts2的應(yīng)用可以不依賴于Servlet API和struts API。Struts2的這種設(shè)計屬于無侵入式設(shè)計; 2)攔截器,實現(xiàn)如參數(shù)攔截注入等功能;

      3)類型轉(zhuǎn)換器,可以把特殊的請求參數(shù)轉(zhuǎn)換成需要的類型; 4)多種表現(xiàn)層技術(shù),如:JSP、freeMarker、Velocity等; 5)Struts2的輸入校驗可以對指定某個方法進(jìn)行校驗;

      6)提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現(xiàn)

      struts2是如何啟動的?

      struts2框架是通過Filter啟動的,即StrutsPrepareAndExecuteFilter,此過濾器為struts2的核心過濾器; StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認(rèn)的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內(nèi)容后,是將內(nèi)容封裝進(jìn)javabean對象然后存放在內(nèi)存中,以后用戶的每次請求處理將使用內(nèi)存中的數(shù)據(jù),而不是每次請求都讀取struts.xml文件。

      struts2框架的核心控制器是什么?它有什么作用?

      1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。2)作用:

      負(fù)責(zé)攔截由/*指定的所有用戶請求,當(dāng)用戶請求到達(dá)時,該Filter會過濾用戶的請求。默認(rèn)情況下,如果用戶請求的路徑 不帶后綴或者后綴以.action結(jié)尾,這時請求將被轉(zhuǎn)入struts2框架處理,否則struts2框架將略過該請求的處理。

      可以通過常量“struts.action.extension”修改action的后綴,如:

      如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開。

      struts2配置文件的加載順序?

      struts.xml ——> struts.properties 常量可以在struts.xml或struts.properties中配置,如果在多個文件中配置了同一個常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值.struts.xml文件的作用:通知Struts2框架加載對應(yīng)的Action資源

      struts2常量的修改方式?

      常量可以在struts.xml或struts.properties中配置,兩種配置方式如下: 1)在struts.xml文件中配置常量

      2)在struts.properties中配置常量(struts.properties文件放置在src下):

      struts.action.extension=do struts2如何訪問HttpServletRequest、HttpSession、ServletContext三個域?qū)ο螅?/p>

      方案一:

      HttpServletRequest request =ServletActionContext.getRequest();HttpServletResponse response =ServletActionContext.getResponse();HttpSession session= request.getSession();ServletContext servletContext=ServletActionContext.getServletContext();

      方案二:

      類 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware 注意:框架自動傳入對應(yīng)的域?qū)ο?/p>

      struts2是如何管理action的?這種管理方式有什么好處?

      struts2框架中使用包來管理Action,包的作用和java中的類包是非常類似的。

      主要用于管理一組業(yè)務(wù)功能相關(guān)的action。在實際應(yīng)用中,我們應(yīng)該把一組業(yè)務(wù)功能相關(guān)的Action放在同一個包下。

      struts2中的默認(rèn)包struts-default有什么作用?

      1)struts-default包是由struts內(nèi)置的,它定義了struts2內(nèi)部的眾多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內(nèi)置的攔截器實現(xiàn),如:從請求中

      把請求參數(shù)封裝到action、文件上傳和數(shù)據(jù)驗證等等都是通過攔截器實現(xiàn)的。當(dāng)包繼承了struts-default包才能使用struts2為我們提供的這些功能。2)struts-default包是在struts-default.xml中定義,struts-default.xml也是Struts2默認(rèn)配置文件。Struts2每次都會自動加載 struts-default.xml文件。

      3)通常每個包都應(yīng)該繼承struts-default包。

      struts2如何對指定的方法進(jìn)行驗證?

      1)validate()方法會校驗action中所有與execute方法簽名相同的方法; 2)要校驗指定的方法通過重寫validateXxx()方法實現(xiàn),validateXxx()只會校驗action中方法名為Xxx的方法。其中Xxx的第一個字母要大寫; 3)當(dāng)某個數(shù)據(jù)校驗失敗時,調(diào)用addFieldError()方法往系統(tǒng)的fieldErrors添加校驗失敗信息(為了使用addFieldError()方法,action可以繼承ActionSupport),如果系統(tǒng) 的fieldErrors包含失敗信息,struts2會將請求轉(zhuǎn)發(fā)到名為input的result;

      4)在input視圖中可以通過顯示失敗信息。5)先執(zhí)行validateXxxx()->validate()->如果出錯了,會轉(zhuǎn)發(fā)所指定的頁面,如果不出錯,會直接進(jìn)行Action::execute()方法

      struts2默認(rèn)能解決get和post提交方式的亂碼問題嗎?

      不能。struts.i18n.encoding=UTF-8屬性值只能解析POST提交下的亂碼問題。

      請你寫出struts2中至少5個的默認(rèn)攔截器?

      fileUpload 提供文件上傳功能

      i18n 記錄用戶選擇的locale cookies 使用配置的name,value來是指cookies checkbox 添加了checkbox自動處理代碼,將沒有選中的checkbox的內(nèi)容設(shè)定為false,而html默認(rèn)情況下不提交沒有選中的checkbox。

      chain 讓前一個Action的屬性可以被后一個Action訪問,現(xiàn)在和chain類型的result()結(jié)合使用。

      alias 在不同請求之間將請求參數(shù)在不同名字件轉(zhuǎn)換,請求內(nèi)容不變

      值棧ValueStack的原理與生命周期?

      1)ValueStack貫穿整個 Action 的生命周期,保存在request域中,所以ValueStack和request的生命周期一樣。當(dāng)Struts2接受一個請求時,會迅速創(chuàng)建ActionContext,ValueStack,action。然后把action存放進(jìn)ValueStack,所以action的實例變量可以被OGNL訪問。請求來的時候,action、ValueStack的生命開始,請求結(jié)束,action、ValueStack的生命結(jié)束;

      2)action是多例的,和Servlet不一樣,Servelt是單例的;

      3)每個action的都有一個對應(yīng)的值棧,值棧存放的數(shù)據(jù)類型是該action的實例,以及該action中的實例變量,Action對象默認(rèn)保存在棧頂; 4)ValueStack本質(zhì)上就是一個ArrayList;

      5)關(guān)于ContextMap,Struts 會把下面這些映射壓入 ContextMap 中: parameters : 該 Map 中包含當(dāng)前請求的請求參數(shù)

      request : 該 Map 中包含當(dāng)前 request 對象中的所有屬性 session :該 Map 中包含當(dāng)前 session 對象中的所有屬性

      application :該 Map 中包含當(dāng)前 application 對象中的所有屬性 attr:該 Map 按如下順序來檢索某個屬性: request, session, application 6)使用OGNL訪問值棧的內(nèi)容時,不需要#號,而訪問request、session、application、attr時,需要加#號;

      7)注意: Struts2中,OGNL表達(dá)式需要配合Struts標(biāo)簽才可以使用。如: 8)在struts2配置文件中引用ognl表達(dá)式 ,引用值棧的值,此時使用的“$”,而不是#或者%;

      ActionContext、ServletContext、pageContext的區(qū)別?

      1)ActionContext是當(dāng)前的Action的上下文環(huán)境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關(guān)的對象的引用; 2)ServletContext是域?qū)ο?,一個web應(yīng)用中只有一個ServletContext,生命周期伴隨整個web應(yīng)用;

      3)pageContext是JSP中的最重要的一個內(nèi)置對象,可以通過pageContext獲取其他域?qū)ο蟮膽?yīng)用,同時它是一個域?qū)ο?,作用范圍只針對?dāng)前頁面,當(dāng)前頁面結(jié)束時,pageContext銷毀,生命周期是JSP四個域?qū)ο笾凶钚〉摹?/p>

      result的type屬性中有哪幾種結(jié)果類型?

      一共10種:

      dispatcher struts默認(rèn)的結(jié)果類型,把控制權(quán)轉(zhuǎn)發(fā)給應(yīng)用程序里的某個資源不能把控制權(quán)轉(zhuǎn)發(fā)給一個外部資源,若需要把控制權(quán)重定向到一個外部資源, 應(yīng)該使用 redirect結(jié)果類型

      redirect 把響應(yīng)重定向到另一個資源(包括一個外部資源)redirectAction 把響應(yīng)重定向到另一個 Action freemarker、velocity、chain、httpheader、xslt、plainText、stream

      攔截器的生命周期與工作過程?

      1)每個攔截器都是實現(xiàn)了Interceptor接口的 Java 類;

      2)init(): 該方法將在攔截器被創(chuàng)建后立即被調(diào)用, 它在攔截器的生命周期內(nèi)只被調(diào)用一次.可以在該方法中對相關(guān)資源進(jìn)行必要的初始化;

      3)intercept(ActionInvocation invocation): 每攔截一個動作請求, 該方法就會被調(diào)用一次; 4)destroy: 該方法將在攔截器被銷毀之前被調(diào)用, 它在攔截器的生命周期內(nèi)也只被調(diào)用一次;

      5)struts2中有內(nèi)置了18個攔截器。

      struts2如何完成文件的上傳?

      1、JSP頁面:

      1)JSP頁面的上傳文件的組件:,如果需要一次上傳多個文件, 就必須使用多個 file 標(biāo)簽, 但它們的名字必須是相同的,即:

      name=“xxx”的值必須一樣;

      2)必須把表單的enctype屬性設(shè)置為:multipart/form-data; 3)表單的方法必須為post,因為post提交的數(shù)據(jù)在消息體中,而無大小限制。

      2、對應(yīng)的action:

      1)在 Action 中新添加 3 個和文件上傳相關(guān)的屬性;

      2)如果是上傳單個文件, uploadImage屬性的類型就是 java.io.File, 它代表被上傳的文件, 第二個和第三個屬性的類型是 String, 它們分別代表上傳文 件的文件名和文件類型,定義方式是分別是:

      jsp頁面file組件的名稱+ContentType, jsp頁面file組件的名稱+FileName 3)如果上上傳多個文件, 可以使用數(shù)組或 List

      第五篇:面試題總結(jié)(我自己)

      一、談?wù)刦inal, finally, finalize的區(qū)別。

      final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

      finally—再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。

      finalize—方法名。Java 技術(shù)允許使用 finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。

      final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

      finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。

      finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等。

      二、Abstract,Interface的區(qū)別

      聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。

      接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運算符可以用來決定某對象的類是否實現(xiàn)了接口。

      三、PreparedStatement和Statement的區(qū)別及效率

      public interface Statementextends Wrapper

      用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結(jié)果的對象。

      在默認(rèn)情況下,同一時間每個 Statement 對象在只能打開一個 ResultSet 對象。因此,如果讀取一個 ResultSet 對象與讀取另一個交叉,則這兩個對象必須是由不同的 Statement 對象生成的。如果存在某個語句的打開的當(dāng)前 ResultSet 對象,則 Statement 接口中的所有執(zhí)行方法都會隱式關(guān)閉它。public interface PreparedStatementextends Statement

      表示預(yù)編譯的 SQL 語句的對象。

      SQL 語句被預(yù)編譯并存儲在 PreparedStatement 對象中。然后可以使用此對象多次高效地執(zhí)行該語句。

      四、String 和StringBuffer的區(qū)別

      JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。而這個StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。

      String的長度是不可變的,StringBuffer的長度是可變的。如果你對字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

      五、說出ArrayList,Vector, LinkedList的存儲性能和特性

      ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。

      六、Collection 和 Collections的區(qū)別。

      Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作。

      Collections是個java.util下的類,靜態(tài)的,沒有構(gòu)造函數(shù),它包含有各種有關(guān)集合操作的靜態(tài)方法。Sort方法,public static > void sort(List list)根據(jù)元素的自然順序 對指定列表按升序進(jìn)行排序。列表中的所有元素都必須實現(xiàn) Comparable 接口。列表中的所有元素都必須是可相互比較的。

      Collection是個java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。

      七、sleep()和 wait()有什么區(qū)別? 搞線程的最愛

      sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿后,線程

      不一定立即恢復(fù)執(zhí)行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級(b)正在運行的線程因為其它原因而阻塞。

      wait()是線程交互時,如果線程對一個同步對象x 發(fā)出一個wait()調(diào)用,該線程會暫停執(zhí)行,被調(diào)對象進(jìn)入等待狀態(tài),直到被喚醒或等待時間到。

      sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復(fù)。調(diào)用sleep不會釋放對象鎖。

      wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運行狀態(tài)。

      八、Hashtable和HashMap的區(qū)別

      HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。

      HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

      Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個實現(xiàn)。

      最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。

      Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

      Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個實現(xiàn)

      HashMap允許將null作為一個entry的key或者value,而Hashtable不允許還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

      最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap就必須為之提供外同步。

      Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

      就HashMap與HashTable主要從三方面來說。

      一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個實現(xiàn)

      二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

      都屬于Map接口的類,實現(xiàn)了將惟一鍵映射到特定的值上。

      HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。

      Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。

      下載2016年體育教師面試題寶典自己整理word格式文檔
      下載2016年體育教師面試題寶典自己整理.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        輔導(dǎo)員面試題(自己整理的啊)

        輔導(dǎo)員面試題 問題一:請你自我介紹一下 答:大家好,我叫關(guān)春燕,來自浙江臨海。我的本科和碩士研究生都畢業(yè)于本?!贾蓦娮涌萍即髮W(xué)。 從一年級開始上學(xué)到研究生畢業(yè),我一直擔(dān)任......

        JAVA面試寶典,java面試題,java面試指南,java面試必備試題,java程序員必備面試題

        考官:java中的反射機制是什么,有什么作用??? 要點: JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這......

        寶典:奔三的女人該如何愛自己

        寶典:奔三的女人要如何愛自己 26歲的我們已經(jīng)可以盡量掌握自己的生活,從如下的方面決定自己最為一個女人是否幸福: 1、先來說說愛情: 我看到一些關(guān)于房子,錢財?shù)墓适拢傆X得奇......

        公務(wù)員面試經(jīng)驗寶典:公務(wù)員面試經(jīng)驗(自己總結(jié)_吐血推薦)

        說明:“公務(wù)員面試經(jīng)驗寶典”屬于系列文檔,大家如果需要資料分析相關(guān)文檔可在搜索框中輸入“公務(wù)員面試經(jīng)驗寶典”搜索?;蛑苯哟蜷_“公務(wù)員面試經(jīng)驗寶典”文輯下載相......

        公務(wù)員面試題分類套路(自己筆記)

        寫在前面的話 本人經(jīng)歷了幾年公務(wù)員考試,前后也有幾次進(jìn)面試。從第一次面試的不知道答什么,到后來不看書也能講個十幾分鐘,且最近3次均在82分以上(本人不吹牛,不像很多培訓(xùn)機構(gòu)打......

        自己總結(jié)的一些輔導(dǎo)員面試題(五篇)

        高校輔導(dǎo)員工作很辛苦,地位和待遇又不是很高。結(jié)合自己實際談?wù)勀銥楹我獏⒓游倚]o導(dǎo)員崗位的應(yīng)聘? 1、職業(yè)規(guī)劃的階段目標(biāo)。 到今天為了實現(xiàn)這個目標(biāo)我在學(xué)生工作的崗位上已......

        自己總結(jié)的輔導(dǎo)員考試面試題

        1.進(jìn)行畢業(yè)教育的內(nèi)容和方法 畢業(yè)教育是日常思想政治教育工作的重要組成成分,是大學(xué)生適應(yīng)社會的需求。 畢業(yè)教育主要包括擇業(yè)觀教育,職業(yè)道德教育,能力素質(zhì)教育,就業(yè)指導(dǎo)。 ①......

        自考生就業(yè)寶典:如何尋找適合自己的就業(yè)空間

        自考生就業(yè)寶典:如何尋找適合自己的就業(yè)空間國務(wù)院頒布的《高等教育自學(xué)考試暫行條例》中明確規(guī)定高等教育自學(xué)考試畢業(yè)證書獲得者的待遇與普通高校同類畢業(yè)生相同,但自考畢業(yè)......