版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java程序員的就業(yè)指導(dǎo)(重點(diǎn))
想要成為合格的Java程序員或工程師到底需要具備哪些專業(yè)技能,面試者在
面試之前到底需要準(zhǔn)備哪些東西呢?本文陳列的這些內(nèi)容既可以作為個(gè)人簡(jiǎn)歷
中的內(nèi)容,也可以作為面試的時(shí)候跟面試官聊的東西,你可以把這些內(nèi)容寫到
你的簡(jiǎn)歷中,當(dāng)然更需要的是你在面試的時(shí)候向面試官展示這些專業(yè)技能。相
信此文對(duì)正在尋覓Java程序員(Java工程師)職位的freshman以及希望成
為中高級(jí)Java開發(fā)者的junior都會(huì)有所幫助。
專業(yè)技能
1.熟練的使用Java語言進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì),有良好的編程習(xí)慣,熟悉
常用的JavaAPI,包括集合框架、多線程(并發(fā)編程)、I/O(NIO)、
Socket.JDBC.XML、反射等。[泛型]
2,熟悉基于JSP和Servlet的JavaWeb開發(fā),對(duì)Servlet和JSP的工作
原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動(dòng)態(tài)頁
面,有使用監(jiān)聽器、過濾器等Web組件以及MVC架構(gòu)模式進(jìn)行Java
Web項(xiàng)目開發(fā)的經(jīng)驗(yàn)。
3.對(duì)Spring的IoC容器和AOP原理有深入了解,熟練的運(yùn)用Spring框架
管理各種Web組件及其依賴關(guān)系,熟練的使用Spring進(jìn)行事務(wù)、日
志、安全性等的管理,有使用SpringMVC作為表示層技術(shù)以及使用
Spring提供的持久化支持進(jìn)行Web項(xiàng)目開發(fā)的經(jīng)瞼,熟悉Spring對(duì)其
他框架的整合。
4.熟練的使用Hibernate.MyBatis等ORM框架,熟悉Hibernate和
MyBatis的核心API,對(duì)Hibernate的關(guān)聯(lián)映射、繼承映射、組件映
射、緩存機(jī)制、事務(wù)管理以及性能調(diào)優(yōu)等有深入的理解。
5.熟練的使用HTML、CSS和JavaScript進(jìn)行Web前端開發(fā),熟悉
jQuery和Bootstr叩,對(duì)Ajax技術(shù)在Web項(xiàng)目中的應(yīng)用有深入理解,
有使用前端MVC框架(AngularJS)和JavaScript模板引擎
(HandleBars)進(jìn)行項(xiàng)目開發(fā)的經(jīng)驗(yàn)。
6,熟悉常用的關(guān)系型數(shù)據(jù)庫產(chǎn)品(MySQL、Oracle),熟練的使用SQL和
PL/SQL進(jìn)行數(shù)據(jù)庫編程。
7.熟悉面向?qū)ο蟮脑O(shè)計(jì)原則,對(duì)GoF設(shè)計(jì)模式和企業(yè)應(yīng)用架構(gòu)模式有深入的
了解和實(shí)際開發(fā)的相關(guān)經(jīng)驗(yàn),熟練的使用UML進(jìn)行面向?qū)ο蟮姆治龊驮O(shè)
計(jì),有TDD(測(cè)試驅(qū)動(dòng)開發(fā))和DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的經(jīng)驗(yàn)。
8.熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服務(wù)器
和應(yīng)用服務(wù)器的使用,熟悉多種服務(wù)器整合、集群和負(fù)載均衡的配置。
9.熟練的使用產(chǎn)品原型工具Axure,熟練的使用設(shè)計(jì)建模工具
PowerDesignerEnterpriseArchitect,熟練的使用Java開發(fā)環(huán)境
Eclipse和IntelliJ,熟練的使用前端開發(fā)環(huán)境WebStorm,熟練的使用
軟件版本控制工具SVN和Git,熟練的使用項(xiàng)目構(gòu)建和管理工具M(jìn)aven
和
Gradleo
說明:上面羅列的這些東西并不是每一項(xiàng)你都要爛熟于心,根據(jù)企業(yè)招聘的具
體要求可以做相應(yīng)的有針對(duì)性的準(zhǔn)備。我個(gè)人覺得前6項(xiàng)應(yīng)該是最低要求,是
作為一個(gè)Java開發(fā)者必須要具備的專業(yè)技能。
項(xiàng)目經(jīng)驗(yàn)
項(xiàng)目介紹
本系統(tǒng)是X委托Y開發(fā)的用于Z的系統(tǒng),系統(tǒng)包括A、B、C、D等模
塊。系統(tǒng)使用了Java企業(yè)級(jí)開發(fā)的開源框架E以及前端技術(shù)F。表示層運(yùn)用了
G架構(gòu),使用H作為視圖I作為控制器并實(shí)現(xiàn)了REST風(fēng)格的請(qǐng)求;業(yè)務(wù)邏輯
層運(yùn)用了J模式,并通過K實(shí)現(xiàn)事務(wù)、日志和安全性等功能,通過L實(shí)現(xiàn)緩存
服務(wù);持久層使用了M封裝CRUD操作,底層使用N實(shí)現(xiàn)數(shù)據(jù)存取。整個(gè)項(xiàng)
目采用了P開發(fā)模型。
說明:上面的描述中,E通常指Spring(Java企業(yè)級(jí)開發(fā)的一站式選擇);F
最有可能是jQuery庫及其插件或者是Bootstrap框架,當(dāng)然如果要構(gòu)建單頁
應(yīng)用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript
模板引擎(如HandleBars);G顯然是MVC(模型?視圖?控制),最有可能
的實(shí)現(xiàn)框架是SpringMVC,除此之外還有Struts2、JSF以及Apache為
JSF提供的MyFaces實(shí)現(xiàn),可以使用JSP作為MVC中的V,也可使用模板
引擎(如Freemarker和Velocity)來生成視圖,還可以是各種文檔或報(bào)表
(如Excel和PDF等),而Servlet和自定義的控制器是MVC中的C,當(dāng)然
SpringMVC中提供了作為前端控制器的DispatcherServlet;J通常是事務(wù)
腳本,K應(yīng)該是AOP(面向切面編程)技術(shù),L目前廣泛使用的有
memcached和Redis;M的選擇方案很多,最有可能的是Hibernate和
MyBatis,也可以兩種技術(shù)同時(shí)運(yùn)用,但通常是將增刪改交給Hibernate來處
理,而復(fù)雜的查詢則由MyBatis完成,此外TopLink、jOOQ也是優(yōu)秀的持
久層解決方案;底層的數(shù)據(jù)存取傳統(tǒng)上是使用關(guān)系型數(shù)據(jù)庫,可以是
MySQL.Oracle.SQLServer,DB2等,隨著大數(shù)據(jù)時(shí)代的來臨,也可以采
用NoSQL(如MongoDB、MemBase,BigTable等)和其他大數(shù)據(jù)存取
方案(如GFS、HDFS等);項(xiàng)目的開發(fā)模型P可以是瀑布模型、快速原型模
型、增量模型、螺旋模型、噴泉模型、RAD模型等。
項(xiàng)目開發(fā)流程
1.可行性分析>>>可行性分析報(bào)告/項(xiàng)目開發(fā)計(jì)劃書
2.需求分析>>>需求規(guī)格說明書
。OOAD(用例圖、時(shí)序圖、活動(dòng)圖)
O界面原型:幫助理解需求、業(yè)務(wù)層設(shè)計(jì)時(shí)推導(dǎo)事務(wù)腳本
3.設(shè)計(jì)>>>概要設(shè)計(jì)說明書/詳細(xì)設(shè)計(jì)說明書
O抽取業(yè)務(wù)實(shí)體(領(lǐng)域?qū)ο螅侯悎D、E-R圖(概念設(shè)計(jì)階段)
o分層架構(gòu):確定各層的技術(shù)實(shí)現(xiàn)方案(具體到使用的框架、數(shù)據(jù)庫服
務(wù)器、應(yīng)用服務(wù)器等)。業(yè)務(wù)層設(shè)計(jì):事務(wù)腳本模式(事務(wù):用戶發(fā)
送一次請(qǐng)求就是一個(gè)事務(wù);腳本:一個(gè)方法或一個(gè)函數(shù);事務(wù)腳本:
把一次請(qǐng)求封裝為一個(gè)方法或一個(gè)函數(shù);事務(wù)腳本模式:一個(gè)事務(wù)開
始于腳本的打開,終止于腳本的關(guān)閉)。業(yè)務(wù)層涉及的對(duì)象有三種類
型:事務(wù)腳本類(封裝了業(yè)務(wù)的流程)、數(shù)據(jù)訪問對(duì)象(DAO,封裝
了持久化操作)、數(shù)據(jù)傳輸對(duì)象(DTO,封裝了失血/貧血領(lǐng)域?qū)?/p>
象),三者之間的關(guān)系是事務(wù)腳本類組合(聚合)數(shù)據(jù)訪問對(duì)象,這
二者都依賴了數(shù)據(jù)傳輸對(duì)象
O正向工程(UML類圖生成Java代碼)和逆向工程(Java代碼生成
UML類圖)
O數(shù)據(jù)庫物理設(shè)計(jì)(ER圖轉(zhuǎn)換成表間關(guān)系圖、建庫和建表、使用工具插
入測(cè)試數(shù)據(jù))
4.編碼
5.測(cè)試>>>測(cè)試報(bào)告/缺陷報(bào)告
O單元測(cè)試:對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證,在Java中
是對(duì)類中的方法進(jìn)行測(cè)試,可以使用JUnit工具來實(shí)施。
O集成測(cè)試:集成測(cè)試也叫組裝測(cè)試或聯(lián)合測(cè)試。在單元測(cè)試的基礎(chǔ)
上,將所有模塊按照設(shè)計(jì)要求組裝成為子系統(tǒng)進(jìn)行測(cè)試。
O系統(tǒng)測(cè)試:將已經(jīng)確認(rèn)的軟件、硬件、外設(shè)、網(wǎng)絡(luò)等元素結(jié)合在一
起,進(jìn)行信息系統(tǒng)的各種組裝測(cè)試和確認(rèn)測(cè)試,系統(tǒng)測(cè)試是針對(duì)整個(gè)
產(chǎn)品系統(tǒng)進(jìn)行的測(cè)試,目的是驗(yàn)證系統(tǒng)是否滿足了需求規(guī)格的定義,
找出與需求規(guī)格不符或與之矛盾的地方,從而提出更加完善的方案。
?Ajax框架:jQuery、ExtJS.DWR等。
.UI插件:EasyUI,MiniUi等。
?富文本框:UEditor.CKEditor?等。
面試提問
?項(xiàng)目是為哪個(gè)公司開發(fā)的?項(xiàng)目的投入是多少?
?有多少人參與了項(xiàng)目開發(fā)?整個(gè)團(tuán)隊(duì)中,測(cè)試人員、開發(fā)人員、項(xiàng)目經(jīng)理
比例是多少?
?項(xiàng)目開發(fā)了多長(zhǎng)時(shí)間?項(xiàng)目總的代碼量有多少?你的代碼量有多少?
?項(xiàng)目采用了怎樣的開發(fā)模型或開發(fā)流程?項(xiàng)目的架構(gòu)是怎樣的?項(xiàng)目的技
術(shù)選型是怎樣的?
.你在項(xiàng)目中承擔(dān)了怎樣的職責(zé)?是否經(jīng)常開會(huì)或加班?項(xiàng)目完成后有哪些
收獲或是經(jīng)驗(yàn)教訓(xùn)?
?項(xiàng)目中最困難的部分是什么?如何解決團(tuán)隊(duì)開發(fā)時(shí)遇到的各種沖突?
說明:對(duì)于沒有實(shí)際項(xiàng)目經(jīng)驗(yàn)的,可以在前程無憂、智聯(lián)招聘、拉勾網(wǎng)等網(wǎng)站
上搜索招聘Java程序員的公司,找到他們的官方網(wǎng)站了解他們做的項(xiàng)目,直
看項(xiàng)目的詳細(xì)介紹,然后嘗試完成其中一部分功能,最好請(qǐng)教一下高人看看自
己的設(shè)it和代碼是否恰當(dāng),這樣相當(dāng)于積累了一定的項(xiàng)目經(jīng)驗(yàn)。
面試題
Java常見的面試款已經(jīng)總結(jié)成《Java面試題集》、《Java面試題全集》
以及《面試編程題拾遺》等文章陸續(xù)發(fā)布在我的CSDN博客,各大公司的面試
題我會(huì)繼續(xù)整理發(fā)布。
其他
常見錯(cuò)誤
1.只在計(jì)算機(jī)上練習(xí)
2.不做行為面試題演練
3.不做模擬面試訓(xùn)練
4.試圖死記硬背答案
5.不大聲說出你的解題思路
6.代碼不夠嚴(yán)謹(jǐn)
7.不寫測(cè)試代碼
8.輕言放棄
面試時(shí)可以反問面試官的問題
1.我注意到你們使用了X技術(shù),請(qǐng)問你們是如何解決Y問題的?
2.為什么你們的產(chǎn)品使用了X技術(shù)而不是Y技術(shù)?據(jù)我所知,X技
術(shù)雖然有A、B、(:等好處,但也存在D和E問題,而Y技術(shù)可
以解決D和E問題。
3.我對(duì)您說的X技術(shù)不是太熟悉,但我感覺它是一個(gè)不錯(cuò)的解決方
案,您能多講講它的工作原理嗎?
4.你們團(tuán)隊(duì)是如何進(jìn)行項(xiàng)目規(guī)劃的?一周會(huì)有幾次例會(huì)?每周的代
碼量大概是多少?
5.就X問題我能想到的解決方案目前就只有Y了,請(qǐng)問您會(huì)怎么解
決這個(gè)問題?
S.A.R.法則
S.A.R法則是指先描述問題的場(chǎng)景,然后解釋你采取的行動(dòng),最后陳述結(jié)
果。
算法題的五種解法
1.舉例法:通過舉例子發(fā)現(xiàn)其中的一般規(guī)則。
例子:圓內(nèi)接三角形是銳角三角形的概率是多少?這是搜狗的一個(gè)面試題,可
以在圓上隨意畫三個(gè)點(diǎn)連接成三角形就可以知道答案了。
2.模式匹配法
例子:一個(gè)有序數(shù)組的元素經(jīng)過循環(huán)移動(dòng),元素的順序變成“345612\怎
樣找到數(shù)組中最小的那個(gè)元素,假設(shè)數(shù)組中的元素各不相同。這個(gè)題目和折半
查找看起來是那么相似,因此可以借鑒折半直找的算法,最小元素顯然出現(xiàn)在
"mid>right”的轉(zhuǎn)折點(diǎn)。
3.簡(jiǎn)化推廣法
說明:簡(jiǎn)化問題規(guī)模和數(shù)據(jù)類型,然后再發(fā)現(xiàn)通用的解法。
4.簡(jiǎn)單構(gòu)造法
例子:找出“abcde”的所有可能的排列組合。先考慮只有“a”的情況,再考慮
“ab”的情況,以此類推。最終你可能會(huì)得到一個(gè)遞歸公式。這種方法往往會(huì)演
變成遞歸法。
5.數(shù)據(jù)結(jié)構(gòu)頭腦風(fēng)暴法
例子:隨機(jī)生成一些數(shù)字,并找出其中位數(shù)。這種問題可以在頭腦中將你了解
的數(shù)據(jù)結(jié)構(gòu)過一遍,看看哪種是最合適的數(shù)據(jù)結(jié)構(gòu)。上面的題目可以建立兩介
堆,一個(gè)大根堆和一個(gè)小根堆,較小的元素放在大根堆,較大的元素放在小根
堆,如果兩個(gè)堆不平衡,可以從其中一個(gè)堆取出元素放入另一個(gè)堆即可。最后
中位數(shù)應(yīng)該是兩個(gè)堆的根之一。
錄用談判
1.要理直氣壯的提出具體的待遇要求
2.開出比預(yù)期稍高的價(jià)碼
3.不要只盯著薪水(很多公司更愿意就薪水之外的條件做
出讓步)
4.使用最合適的方法(可以嘗試在電話或E-mail中談判
待遇)
自我評(píng)價(jià)
1.學(xué)習(xí)能力(搞IT行業(yè)的人需要不斷的了解新的技術(shù)、工具和方法)
2.團(tuán)隊(duì)意識(shí)(相比個(gè)人英雄主義,IT行業(yè)更倡導(dǎo)團(tuán)隊(duì)合作)
3.抗壓能力(很多IT企業(yè)的工作強(qiáng)度相對(duì)來說還是比較大的)
應(yīng)聘時(shí)最漂亮的回答
應(yīng)聘時(shí)最漂亮的回答
1、請(qǐng)你自我介紹一下芻己好嗎?
回答提示:一般人回答這個(gè)問題過于平常,只說姓名、年齡、爰好、工作經(jīng)
驗(yàn),這些在簡(jiǎn)歷上都有。其實(shí),企業(yè)最希望知道的是求職者能否勝任工作,包
括:最強(qiáng)的技能、最深入研究的知識(shí)領(lǐng)域、個(gè)性中最積極的部分、做過的最成
功的事,主要的成就等,這些都可以和學(xué)習(xí)無關(guān),也可以和學(xué)習(xí)有關(guān),但要突
出積極的個(gè)性和做事的能力,說得合情合理企業(yè)才會(huì)相信。企業(yè)很重視一個(gè)人
的禮貌,求職者要尊重考官,在回答每個(gè)問題之后都說一句〃謝謝〃,企業(yè)喜
歡有禮貌的求職者。
2、你覺得你個(gè)性上最大的優(yōu)點(diǎn)是什么?
回答提示:沉著冷靜、條理清楚、立場(chǎng)堅(jiān)定、頑強(qiáng)向上、樂于助人和關(guān)心他人、
適應(yīng)能力和幽默感、樂觀和友爰。我在北大青鳥經(jīng)過一到兩年的培訓(xùn)及項(xiàng)目實(shí)戰(zhàn),
加上實(shí)習(xí)工作,使我適合這份工作。
3、說說你最大的缺點(diǎn)?
回答提示:這個(gè)問題企業(yè)間的概率很大,通常不希望聽到直接回答的缺點(diǎn)是什么
等,如果求職者說自己小心眼、愛忌妒人、非常懶、脾氣大、工作效率低,企業(yè)
肯定不會(huì)錄用你。絕對(duì)不要自作聰明地回答“我最大的缺點(diǎn)是過于追求完美",
有的人以為這樣回答會(huì)顯得自己比較出色,但事實(shí)上,他已經(jīng)岌岌可危了。企業(yè)
喜歡求職者從自己的優(yōu)點(diǎn)說起,中間加一些小缺點(diǎn),最后再把問題轉(zhuǎn)回到優(yōu)點(diǎn)上,
突出優(yōu)點(diǎn)的部分,企業(yè)喜歡聰明的求職者。
4、你對(duì)薪資的要求?
回答提示:如果你對(duì)薪酬的要求太低,那顯然貶低自己的能力;如果你對(duì)薪酬的
要求太高,那又會(huì)顯得你分量過重,公司受用不起。一些雇主通常都事先對(duì)求聘
的職位定下開支預(yù)算,因而他們第一次提出的價(jià)錢往往是他們所能給予的最高價(jià)
錢,他們問你只不過想證實(shí)一下這筆錢是否足以引起你對(duì)該工作的興趣。
?回答樣本一:我對(duì)工資沒有硬性要求,我相信貴公司在處理我的問題上會(huì)友
善合理。我注重的是找對(duì)工作機(jī)會(huì),所以只要條件公平,我則不會(huì)計(jì)較太多。
?回答樣本二:我受過系統(tǒng)的軟件編程的訓(xùn)練,不需要進(jìn)行大量的培訓(xùn),而且
我本人也對(duì)編程特別感興趣。因此,我希望公司能根據(jù)我的情況和市場(chǎng)標(biāo)準(zhǔn)
的水平,給我合理的薪水。
?回答樣本三:如果你必須自己說出具體數(shù)目,請(qǐng)不要說一個(gè)寬泛的范圍,那
樣你將只能得到最低限度的數(shù)字。最好給出一個(gè)具體的數(shù)字,這樣表明你已
經(jīng)對(duì)當(dāng)今的人才市場(chǎng)作了調(diào)查,知道像自己這樣學(xué)歷的雇員有什么樣的價(jià)值。
5、你對(duì)加班的看法?
回答提示:實(shí)際上好多公司問這個(gè)問題,并不證明一定要加班,只是想測(cè)試你是
否愿意為公司奉獻(xiàn)。
回答樣本:如果工作需要我會(huì)義不容辭加班,我或在單身,沒有任何家庭負(fù)擔(dān),
可以全身心的投入工作。但同時(shí)我也會(huì)提高工作效率,減少不必要的加班。
6、如果通過這次面試我們錄用了你,但工作一段時(shí)間卻發(fā)現(xiàn)你根本不適合
這個(gè)職位,你怎么辦?
回答提示:一段時(shí)間發(fā)現(xiàn)工作不適合我,有兩種情況:①如果你確實(shí)熱愛這個(gè)職
業(yè),那你就要不斷學(xué)習(xí),虛心向領(lǐng)導(dǎo)和同事學(xué)習(xí)業(yè)務(wù)知識(shí)和處事經(jīng)驗(yàn),了解這個(gè)
職業(yè)的精神內(nèi)涵和職業(yè)要求,力爭(zhēng)減少差距;②你覺得這個(gè)職業(yè)可有可無,那還
是趁早換個(gè)職業(yè),去發(fā)現(xiàn)適合你的,你熱愛的職業(yè),那樣你的發(fā)展前途也會(huì)大點(diǎn),
對(duì)單位和個(gè)人都有好處。
7、談?wù)勀銓?duì)跳槽的看法?
回答提示:①正常的"跳槽”能促進(jìn)人才合理流動(dòng),應(yīng)該支持。②頻繁的跳槽對(duì)
單位和個(gè)人雙方都不利,應(yīng)該反對(duì)。
8、工作中難以和同事、上司相處,你該怎么辦?
回答提示:①我會(huì)服從領(lǐng)導(dǎo)的指揮,配合同事的工作。②我會(huì)從自身找原因,仔
細(xì)分析是不是自己工作做得不好讓領(lǐng)導(dǎo)不滿意,同事看不慣。還要看看是不是為
人處世方面做得不好,如果是這樣的話我會(huì)努力改正。③如果我找不到原因,我
會(huì)找機(jī)會(huì)跟他們溝通,請(qǐng)他們指出我的不足,有問題就及時(shí)改正。④作為優(yōu)秀的
員工,應(yīng)該時(shí)刻以大局為重,即使在一段時(shí)間內(nèi),領(lǐng)導(dǎo)和同事對(duì)我不理解,我也
會(huì)做好本職工作,虛心向他們學(xué)習(xí),我相信,他們會(huì)看見我在努力,總有一天會(huì)
對(duì)我微笑的。
9、你對(duì)于我們公司了解多少?
回答提示:在去公司面試前上網(wǎng)查一下該公司主營(yíng)業(yè)務(wù)。如回答:貴公司有意改
變策略,加強(qiáng)與國(guó)外大廠的OEM合作,自有品牌的部分則透過海外經(jīng)銷商。
10、最能概括你自己的三個(gè)詞是什么?
回答提示:我經(jīng)常用的三個(gè)詞是:適應(yīng)能力強(qiáng),有責(zé)任心和做事有始終,結(jié)合具
體例子向主考官解釋,
11、你的業(yè)余愛好是什么?
回答提示找一些富于團(tuán)體合作精神的這里有一個(gè)真實(shí)的故事有人被否決掉,
因?yàn)樗膼酆檬巧詈撍V骺脊僬f:因?yàn)檫@是一項(xiàng)單人活動(dòng),我不敢肯定他能
否適應(yīng)團(tuán)體工作。
12、作為被面試者給我打一下分?
回答提示試著列出四個(gè)優(yōu)點(diǎn)和一個(gè)非常非常非常小的缺點(diǎn)(可以抱怨一下設(shè)施,
沒有明確責(zé)任人的缺點(diǎn)是不會(huì)有人介意的)。
13、你為什么要離開原來的公司?
回笞提示:①回答這個(gè)問題時(shí)一定要小心,就算在前一個(gè)工作受到再大的委屈,
對(duì)公司有多少的怨言都千萬不要表現(xiàn)出來,尤其要避免對(duì)公司本身主管的批評(píng),
避免面試官的負(fù)面情緒及印象。建議此時(shí)最好的回答方式是將問題歸咎在自己身
上,例如覺得工作沒有學(xué)習(xí)發(fā)展的空間,自己想在面試工作的相關(guān)產(chǎn)業(yè)中多加學(xué)
習(xí),或是前一份工作與自己的生涯規(guī)劃不合等等,回答的答案最好是積極正面的。
②我希望能獲得一份更好的工作,如果機(jī)會(huì)來臨我會(huì)抓住。我覺得目前的工作,
已經(jīng)達(dá)到頂峰,即沒有升遷機(jī)會(huì)。
14、你欣賞哪種性格的人?
回答提示:誠(chéng)實(shí)、不死板而且容易相處的人、有〃實(shí)際行動(dòng)”的人。
15、你通常如何對(duì)待別人的批評(píng)?
回答提示:①沈默是金,不必說什么,否則情況更糟,不過我會(huì)接受建設(shè)性的批
評(píng)。②我會(huì)等大家冷靜下來再討論。
16、怎樣對(duì)待自己的失???
回答提示:我們大家生來都不是十全十美的,我相信我有第二個(gè)機(jī)會(huì)改正我的錯(cuò)
誤。
17、你為什么愿意到我們公司來工作?
回答提示:對(duì)于這個(gè)問題,你要格外小心,如果你已經(jīng)對(duì)該單位作了研究,你可
以回答一些詳細(xì)的原因,像〃公司本身的高技術(shù)開發(fā)環(huán)境很吸引我?!ā?我同
公司出生在同樣的時(shí)代,我希望能夠進(jìn)入一家與我共同成長(zhǎng)的公司。、"你們
公司一直都穩(wěn)定發(fā)展,在近幾年來在市場(chǎng)上很有競(jìng)爭(zhēng)力。〃、"我認(rèn)為貴公司能
夠給我提供一個(gè)與眾不同的發(fā)展道路。"這都顯示出你已經(jīng)做了一些調(diào)查,也說
明你對(duì)自己的未來有了較為具體的遠(yuǎn)景規(guī)劃。
18、對(duì)這項(xiàng)工作,你有哪些可預(yù)見的困難?
回答提示:①不宜直接說出具體的困難,否則可能令對(duì)方懷疑應(yīng)聘者不行。②可
以嘗試迂回戰(zhàn)術(shù),說出應(yīng)聘者對(duì)困難所持有的態(tài)度——工作中出現(xiàn)一些困難是
正常的,也是難免的,但是只要有堅(jiān)忍不拔的毅力、良好的合作精神以及事前周
密而充分的準(zhǔn)備,任何困難都是可以克服。
19、如果錄用了你,你將怎樣開展工作?
回答提示:①如果應(yīng)聘者對(duì)于應(yīng)聘的職位缺乏足夠的了解,最好不要直接說出
自己開展工作的具體辦法。②可以嘗試采用迂回戰(zhàn)術(shù)來回答,如"首先聽取領(lǐng)導(dǎo)
的指示和要求,然后就有關(guān)情況進(jìn)行了解和熟悉,接下來制定一份近期的工作計(jì)
劃并報(bào)領(lǐng)導(dǎo)批準(zhǔn),最后根據(jù)計(jì)劃開展工作。。
分析:這個(gè)問題的主要目的也是了解應(yīng)聘者的工作能力和計(jì)劃性、條理性,而且
重點(diǎn)想要知道細(xì)節(jié)。如果向思路中所講的迂回戰(zhàn)術(shù),面試官會(huì)認(rèn)為回避問題,如
果引導(dǎo)了幾次仍然是回避的話,此人絕對(duì)不會(huì)錄用了。
20、你希望與什么樣的上級(jí)共事?
回答提示:①通過應(yīng)聘者對(duì)上級(jí)的"希望〃可以判斷出應(yīng)聘者對(duì)自我要求的意識(shí),
這既上一個(gè)陷阱,又是一次機(jī)會(huì)。②最好回避對(duì)上級(jí)具體的希望,多談對(duì)自己的
要求。③如"做為剛步入社會(huì)的新人,我應(yīng)該多要求自己盡快熟悉環(huán)境、適應(yīng)環(huán)
境,而不應(yīng)該對(duì)環(huán)境提出什么要求,只要能發(fā)揮我的專長(zhǎng)就可以了。
分析:這個(gè)問題比較好的回答是,希望我的上級(jí)能夠在工作中對(duì)我多指導(dǎo),對(duì)我
工作中的錯(cuò)誤能夠立即指出??傊?,從上級(jí)指導(dǎo)這個(gè)方面談,不會(huì)有大的維漏。
21、與上級(jí)意見不一時(shí),你將怎么辦?
回答提示:①一般可以這樣回答“我會(huì)給上級(jí)以必要的解釋和提醒,在這種情況
下,我會(huì)服從上級(jí)的意見。"②如果面試你的是總經(jīng)理,而你所應(yīng)聘的職位另有
一位經(jīng)理,且這位經(jīng)理當(dāng)時(shí)不在場(chǎng),可以這樣回答:"對(duì)于非原則性問題,我會(huì)
服從上級(jí)的意見,對(duì)于涉及公司利益的重大問題,我希望能向更高層領(lǐng)導(dǎo)反映?!?/p>
分析:這個(gè)問題的標(biāo)準(zhǔn)答案是思路①,如果用②的回答,必死無疑。你沒有摸清
楚改公司的內(nèi)部情況,先想打小報(bào)告,這樣的人沒有人敢要。
22、為什么選擇我們公司?
回答提示:曾經(jīng)在報(bào)章雜志看過關(guān)于貴公司的報(bào)道,與自己所追求的理念有志一
同。而貴公司在業(yè)界的成績(jī)也是有目共睹的,而且對(duì)員工的教育訓(xùn)練、升遷等也
都很有制度。
分析:去面試前先做功課,了解一下該公司的背景,讓對(duì)方覺得你真的很有心想
得到這份工作,而不只是探探路。
23、談?wù)勅绾芜m應(yīng)辦公室工作的新環(huán)境?
回笞提示①辦公室里每個(gè)人有各自的崗位與職責(zé),不得擅離崗位。②根據(jù)領(lǐng)導(dǎo)指
示和工作安排,制定工作計(jì)劃,提前預(yù)備,并按計(jì)劃完成。③多請(qǐng)示并及時(shí)匯報(bào),
遇到不明白的要虛心請(qǐng)教。④抓間隙時(shí)間,多學(xué)習(xí),努力提高自己的政治素質(zhì)和
業(yè)務(wù)水平。
24、除了本公司外,還應(yīng)聘了哪些公司?
回答提示:很奇怪,這是相當(dāng)多公司會(huì)問的問題?其用意是要概略知道應(yīng)徵者的
求職志向,所以這并非絕對(duì)是負(fù)面答案,就算不便說出公司名稱,也應(yīng)回答"銷
售同種產(chǎn)品的公司",如果應(yīng)聘的其他公司是不同業(yè)界,容易讓人產(chǎn)生無法信任
的感覺。
25、你還有什么問題要問嗎?
回答提示:企業(yè)的這個(gè)問題看上去可有可無,其實(shí)很關(guān)鍵,企業(yè)不喜歡說"沒問
題"的人,因?yàn)槠浜茏⒅貑T工的個(gè)性和創(chuàng)新能力。企業(yè)不喜歡求職者問個(gè)人福利
之類的問題,如果有人這樣問:貴公司對(duì)新入公司的員工有沒有什么培訓(xùn)項(xiàng)目,
我可以參加嗎?或者說貴公司的晉升機(jī)制是什么樣的?企業(yè)將很歡迎,因?yàn)轶w現(xiàn)
出你對(duì)學(xué)習(xí)的熱情和對(duì)公司的忠誠(chéng)度以及你的上進(jìn)心。
26、如果你被錄用,何時(shí)可以到職?
回答提示:大多數(shù)企業(yè)會(huì)關(guān)心就職時(shí)間,最好是回答〃如果被錄用的話,至I」職日
可按公司規(guī)定上班",但如果還未辭去上一個(gè)工作、上班時(shí)間又太近,似乎有些
強(qiáng)人所難,因?yàn)榻唤又辽僖粋€(gè)月的時(shí)間,應(yīng)進(jìn)一步說明原因,錄取公司應(yīng)該會(huì)
通融的。
Java程序員們最常犯的10個(gè)錯(cuò)誤
Java程序員們最常犯的10個(gè)錯(cuò)誤
將數(shù)組轉(zhuǎn)化為一個(gè)列表時(shí),程序員們經(jīng)常這樣做:
List<String>list=Arrays.asList(arr);
Arrays.asList。會(huì)返回一個(gè)ArrayList對(duì)象,ArrayList類是Arrays的一個(gè)私有
靜態(tài)類,而不是java.util.ArrayList類,java.util.Arrays.ArrayList類有set。、
get()、contains。方法,但是沒有增加元素的方法,所以它的大小是固定的,
想要?jiǎng)?chuàng)建一個(gè)真正的ArrayList類,你應(yīng)該這樣做:
ArrayList<String>arrayList=newArrayList<String>(Arrays.asList(arr));
ArrayList的構(gòu)造方法可以接受一個(gè)集合類型,剛好它也是
java.util.Arrays.ArrayList的超類。
2.判斷一個(gè)數(shù)組是否包含一個(gè)值
程序員們經(jīng)常這樣做:
Set<String>set=newHashSet<String>(Arrays.asList(arr));
returnset.contains(targetValue);
這段代碼起作用,但是沒有必要把一個(gè)數(shù)組轉(zhuǎn)化成列表,轉(zhuǎn)化為列表需要額外
的時(shí)間。它可以像下面那樣簡(jiǎn)單:
Arrays.asList(arr).contains(targetValue);
或者是:
for(Strings:arr)(
if(s.equals(targetValue)){
returntrue;
)
)
returnfalse;
第一種方法比第二種更容易讀
3.在一個(gè)循環(huán)中刪除一個(gè)列表中的元素
思考下面這一段在循環(huán)中刪除多個(gè)元素的的代碼
ArrayList<String>list=new
',
ArrayList<String>(Arrays.asList("a"/"b/c"/"d"));
for(inti=O;i<list.size();i++){
list.remove(i);
)
System.out.println(list);
輸出結(jié)果是:
[b,d]
在這個(gè)方法中有一個(gè)嚴(yán)重的錯(cuò)誤。當(dāng)一個(gè)元素被刪除時(shí),列表的大小縮小并且
下標(biāo)變化,所以當(dāng)你想要在一個(gè)循環(huán)中用下標(biāo)刪除多個(gè)元素的時(shí)候,它并不會(huì)
正常的生效。
你也許知道在循環(huán)中正確的刪除多個(gè)元素的方法是使用迭代,并且你知道java
中的foreach循環(huán)看起來像一個(gè)迭代器,但實(shí)際上并不是。考慮一下下面的代
碼:
ArrayList<String>list=new
n,,nn
ArrayList<String>(Arrays.asList(a",b/c"/"d"));
for(Strings:list){
if(s.equals(na")){
list.remove(s);
)
)
它會(huì)拋出一個(gè)ConcurrentModificationException異常。
相反下面的顯示正常:
ArrayList<String>list=new
n',B
ArrayUst<String>(Arrays.asList("a/"b","c/"d));
Iterator<String>iter=list.iteratorQ;
while(iter.hasNext()){
Strings=iter.next();
if(s.equals(na")){
iter.remove();
)
)
.next。必須在.remove。之前調(diào)用。在一^foreach循環(huán)中,編譯器會(huì)使.next。
在刪除元素之后被調(diào)用,因此就會(huì)拋出ConcurrentModificationException異
常,你也許希望看一下ArrayList.iterator()的源代碼。
4.Hashtable與HashMap的對(duì)比
就算法而言,哈希表是數(shù)據(jù)結(jié)構(gòu)的一個(gè)名字。但是在java中,這個(gè)數(shù)據(jù)結(jié)構(gòu)的
名字是與的一個(gè)重要不同點(diǎn)是
HashMapoHashtableHashMapHashtable
是同步的。所以你經(jīng)常不需要Hashtable,相反HashM叩經(jīng)常會(huì)用到。
5.在集合中使用原始類型
在Java中原始類型與無界通配符類型很容易混合在一起,拿Set來說,Set是
一個(gè)原始類型,而Set<?>是無界的通配符類型。
考慮下面使用原始類型List作為參數(shù)的代碼:
publicstaticvoidadd(Listlist,Objecto){
list.add(o);
)
pulbicstaticvoidmain(String[]args){
List<String>list=newArrayList<String>();
add(list,10);
Strings=list.get(O);
這段代碼會(huì)拋出一個(gè)異常:
Exceptioninthread"main"java.lang.ClassCastException:
java.Iang.Integercannotbecasttojava.Iang.String
at...
使用原生類型集合是危險(xiǎn)的,這是因?yàn)樵愋图咸鴌寸了泛型類型椅杳,并
且不是安全的,在Set、Set<?>和Set<Object>中有很大的不同。
6.訪問級(jí)別
程序員們經(jīng)常使用public作為類字段的修飾符,可以很簡(jiǎn)單的通過引用得到
值,但這是一個(gè)壞的設(shè)計(jì),按照經(jīng)驗(yàn),分配給成員變量的訪問級(jí)別應(yīng)該盡可能
的低。
7.ArrayList與LinkedList的對(duì)比
當(dāng)程序員們不知道ArrayList與LinkedList的區(qū)別時(shí),他們經(jīng)常使用
ArrayList,因?yàn)樗雌饋肀容^熟悉。然而,它們之前有巨大的性能差別。簡(jiǎn)而
言之,如果有大量的增加刪除操作并且沒有很多的隨機(jī)訪問元素的操作,應(yīng)該
首先
LinkedListo
8.可變與不可變
不可變對(duì)象有許多的優(yōu)點(diǎn),比如簡(jiǎn)單,安全等等。但是對(duì)于每一個(gè)不同的值都
需要一個(gè)獨(dú)立的對(duì)象,太多的對(duì)象可能會(huì)造成大量的垃圾回收。當(dāng)選擇可變與
不可變時(shí)應(yīng)該有一個(gè)平衡。
一般的,可變對(duì)象用來避免產(chǎn)生大量的中間對(duì)象c一個(gè)典型的例子是連接大量
的字符串。如果你用一個(gè)不可變的字符串,你會(huì)產(chǎn)生很多需要進(jìn)行垃圾回收的
對(duì)象。這很浪費(fèi)CPU的時(shí)間,使用可變對(duì)象是正確的解決方案(比如
StringBuilder)o
Stringresult="";
for(Strings:arr){
result=result+s;
)
有時(shí)在某些情況下也是需要可變對(duì)象的,比如將可變對(duì)象作為參數(shù)傳入方法,
你不用使用很多語句便可以得到多個(gè)結(jié)果。另外一個(gè)例子是排序和過濾:當(dāng)
然,你可以寫一個(gè)方法來接收原始的集合,并且返回一個(gè)排好序的集合,但是
那樣對(duì)于大的集合就太浪費(fèi)了。
9.父類與子類的構(gòu)造函數(shù)
classSuper{
Strings;
publicSuper(Strings){
this.s=s;
)
)
publicclassSubextendsSuper{
intx=200;
publicSub(Strings){
)
publicSubQ{
System.oyt.println("Sub");
)
publicstaticvoidmain(String[]args){
Subs=newSub();
)
)1
這個(gè)編譯期錯(cuò)誤的出現(xiàn)是父類默認(rèn)的構(gòu)造方法未定義,在java中,如果一個(gè)類
沒有定義構(gòu)造方法,編譯器會(huì)默認(rèn)的為這個(gè)類添加一個(gè)無參的構(gòu)造方法。如果
在父類中定義了構(gòu)造方法,在這個(gè)例子中是Super(St「ings),編譯器就不會(huì)添加
默認(rèn)的無參構(gòu)造方法,這就是上面這個(gè)父類的情形。
子類的構(gòu)造器,不管是無參還有有參,都會(huì)調(diào)用父類的無參構(gòu)造器。囚為編譯
器試圖在子類的兩個(gè)構(gòu)造方法中添加super。方法。但是父類默認(rèn)的構(gòu)造方法未
定義,編譯器就會(huì)報(bào)出這個(gè)錯(cuò)誤信息。
想要修復(fù)這個(gè)問題,可以簡(jiǎn)單的通過1)在父類中添加一個(gè)Super。構(gòu)造方法,
像下面這樣:
publicSuper(){
System.outprintln("Super");
)
或者2)移除父類自定義的構(gòu)造方法,或者3)在子類的構(gòu)造方法中調(diào)用父類的
super(value)方法。
10.〃”還是構(gòu)造器
有兩種方式可以創(chuàng)建字符串
〃1.使用字符串
Stringx=nabc";
〃2.使用構(gòu)造器
Stringy=newString("abc");
有什么區(qū)別?
下面的例子會(huì)給出一個(gè)快速的答案:
Stringa=nabc';
Stringb="abc";
System.out.println(a==b);//true
System.out.println(a.equals(b));//true
Stringc=newString("abcw);
Stringd=newString("abcn);
System.out.println(c==d);//false
System.out.println(c.equals(d));//true
java代碼效率優(yōu)化
JAVA代碼效率優(yōu)化
最近在想自己編程時(shí)是否注意過代碼的效率問題,得出的答案是:沒有。代碼
只是實(shí)現(xiàn)了功能,至于效率高不高沒怎么關(guān)注,這應(yīng)該是JAVA程序員進(jìn)階的
時(shí)候需要考慮的問題,不再是單純的實(shí)現(xiàn)功能,也不是完全依賴GC而不關(guān)注
內(nèi)存中發(fā)生了什么,而要考慮到代碼的性能。下面是網(wǎng)上找的一篇關(guān)于JAVA
代碼優(yōu)化的文章,覺得不錯(cuò),就轉(zhuǎn)載了。這里面設(shè)計(jì)到了JAVA基礎(chǔ)和J2EE方
面的優(yōu)化建議。
L盡量指定類的final修飾符帶有final修飾符的類是不可派生的。
如果指定一個(gè)類為final,則該類所有的方法都是final。Java編譯器會(huì)尋找機(jī)
會(huì)內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實(shí)現(xiàn)有關(guān))。此舉能夠
使性能平均提高50%°
2、盡量重用對(duì)象。
特別是String對(duì)象的使用中,出現(xiàn)字符串連接情況時(shí)應(yīng)用StringBuffer
代替。由于系統(tǒng)不僅要花時(shí)間生成對(duì)象,以后可能還需花時(shí)間對(duì)這些對(duì)象遂行
垃圾回收和處理。因此,生成過多的對(duì)象將會(huì)給程序的性能帶來很大的影響。
3、盡量使用局部變量,調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量
都保存在棧(Stack)中,速度較快。
其他變量,如靜態(tài)變量、實(shí)例變量等,都在堆(Heap)中創(chuàng)建,速度較
慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。
4、不要重復(fù)初始化變量
默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時(shí),Java會(huì)把變量初始化成確定的值:
所有的對(duì)象被設(shè)置成整數(shù)變量(、設(shè)置成
null,byteshort.intxlong)0,
float和double變量設(shè)置成0.0,邏輯值設(shè)置成false。當(dāng)一個(gè)類從另一個(gè)類派
生時(shí),這一點(diǎn)尤其應(yīng)該注意,因?yàn)橛胣ew關(guān)鍵詞創(chuàng)建一個(gè)對(duì)象時(shí),構(gòu)造函數(shù)鏈
中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用。
5、在JAVA+ORACLE的應(yīng)用系統(tǒng)開發(fā)中,java中內(nèi)嵌的SQL語句盡量使
用大寫的形式,以減輕ORACLE解析器的解析負(fù)擔(dān)。
6、I/O操作中需要及時(shí)釋放資源
Java編程過程中,進(jìn)行數(shù)據(jù)庫連接、I/O流操作時(shí)務(wù)必小心,在使用完畢
后,即使關(guān)閉以釋放資源。
因?yàn)閷?duì)這些大對(duì)象的操作會(huì)造成系統(tǒng)大的開銷,稍有不慎,會(huì)導(dǎo)致嚴(yán)重的后
果。
7、保證過期對(duì)象的及時(shí)回收
由于JVM的有其自身的GC機(jī)制,不需要程序開發(fā)者的過多考慮,從一定程度
上減輕了開發(fā)者負(fù)擔(dān),但同時(shí)也遺漏了隱患,過分的創(chuàng)建對(duì)象會(huì)消耗系統(tǒng)的大
量?jī)?nèi)存,嚴(yán)重時(shí)會(huì)導(dǎo)致內(nèi)存泄露,因此,保證過期對(duì)象的及時(shí)回收具有重要意
義。
JVM回收垃圾的條件是:對(duì)象不在被引用;然而,JVM的GC并非十分的機(jī)
智,即使對(duì)象滿足了垃圾回收的條件也不一定會(huì)被立即回收。所以,建議我們
在對(duì)象使用完畢,應(yīng)手動(dòng)置成null。
8、在使用同步機(jī)制時(shí),應(yīng)盡量使用方法同步代替代碼塊同步。
9、盡量減少對(duì)變量的重復(fù)計(jì)算
10、盡量采用lazyloading的策略,即在需要的時(shí)候才開始創(chuàng)建。
11、慎用異常
異常對(duì)性能不利。拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。Throwable接口
的構(gòu)造函數(shù)調(diào)用名為fiHInStackTrace()的本地(Native)方法,
filllnStackTrace。方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM
就必須調(diào)整調(diào)用堆棧,因?yàn)樵谔幚磉^程中創(chuàng)建了一個(gè)新的對(duì)象。異常只能用于
錯(cuò)誤處理,不應(yīng)該用來控制程序流程。
12、不要在循環(huán)中使用:Try{}catch(){)應(yīng)把其放置在最外層。
13、StringBuffer的使用:
StringBuffer表示了可變的、可寫的字符串。
有三個(gè)構(gòu)造方法:
StringBuffer();〃默認(rèn)分配16個(gè)字符的空間
StringBuffer(intsize);〃分配size個(gè)字符的空間
StringBuffer(Stringstr);〃分配16個(gè)字符+str」ength()個(gè)字符空間
你可以通過StringBuffer的構(gòu)造函數(shù)來設(shè)定它的初始化容量,這樣可以明顯地
提升性能。
這里提到的構(gòu)造函數(shù)是StringBuffer(intlength),length參數(shù)表示當(dāng)前的
StringBuffer能保持的字符數(shù)量。你也可以使用ensureCapacity(int
minimumcapacity)方法在StringBuffer對(duì)象創(chuàng)建之后設(shè)置它的容量。首先我
們看看StringBuffer的缺省行為,然后再找出一條更好的提升性能的途徑。
StringBuffer在內(nèi)部維護(hù)一個(gè)字符數(shù)組,當(dāng)你使用缺省的構(gòu)造函數(shù)來創(chuàng)建
StringBuffer對(duì)象的時(shí)候,因?yàn)闆]有設(shè)置初始化字符長(zhǎng)度,StringBuffer的容
量被初始化為16個(gè)字符,也就是說缺省容量就是16個(gè)字符。當(dāng)StringBuffer
達(dá)到最大容量的時(shí)候,它會(huì)將自身容量增加到當(dāng)前的2倍再加2,也就是(2*
舊值+2)。如果你使用缺省值,初始化之后接著往里面追加字符,在你追加到
第16個(gè)字符的時(shí)候它會(huì)將容量增加到34(2*16+2),當(dāng)追加至!J34個(gè)字符的
時(shí)候就會(huì)將容量增加到70(2*34+2)。無論何事只要StringBuffer到達(dá)它的
最大容量它就不得不創(chuàng)建一個(gè)新的字符數(shù)組然后重新將舊字符和新字符都拷貝
一遍一這也太昂貴了點(diǎn)。所以總是給StringBuffer設(shè)置一個(gè)合理的初始化容量
值是錯(cuò)不了的,這樣會(huì)帶來立竿見影的性能增益。StringBuffer初始化過程的
調(diào)整的作用由此可見一斑。所以,使用一個(gè)合適的容量值來初始化
StringBuffer永遠(yuǎn)都是一個(gè)最佳的建議。
、合理的使用
14Javajava.util.Vectoro
簡(jiǎn)單地說,一個(gè)Vector就是一個(gè)java.lang.Object實(shí)例的數(shù)組。Vector
與數(shù)組相似,它的元素可以通過整數(shù)形式的索引訪問。但是,Vector類型的對(duì)
象在創(chuàng)建之后,對(duì)象的大小能夠根據(jù)元素的增加或者刪除而擴(kuò)展、縮小。請(qǐng)考
慮下面這個(gè)向Vector?加入元素的例子:
Objectbj=newObject();
Vectorv=newVector(lOOOOO);
for(int1=0;
I<100000;I++){v.add(0,obj);}
除非有絕對(duì)充足的理由要求每次都把新元素灌入到Vector的前面,否則
上面的代碼對(duì)性能不利。在默認(rèn)構(gòu)造函數(shù)中,Vector的初始存儲(chǔ)能力是10個(gè)
元素,如果新元素加入時(shí)存儲(chǔ)能力不足,則以后存儲(chǔ)能力每次加倍。Vector類
就對(duì)象StringBuffer類一樣,每次擴(kuò)展存儲(chǔ)能力時(shí),所有現(xiàn)有的元素都要復(fù)制
到新的存儲(chǔ)空間之中。下面的代碼片段要比前面的例子快幾個(gè)數(shù)量級(jí):
Objectbj=newObject();
Vectorv=newVector(100000);
for(int1=0;I<100000;1++){v.add(obj);}
同樣的規(guī)則也適用于Vector類的remove。方法。由于Vector中各個(gè)元
素之間不能含有“空隙",刪除除最后一個(gè)元素之外的任意其他元素都導(dǎo)致被
刪除元素之后的元素向前移動(dòng)。也就是說,從Vector刪除最后一個(gè)元素要比
刪除第一個(gè)元素"開銷"低好幾倍。
假設(shè)要從前面的Vector刪除所有元素,我們可以使用這種代碼:
for(int1=0;1<100000;1++)
v.remove(O);
)
但是,與下面的代碼相比,前面的代碼要慢幾個(gè)數(shù)量級(jí):
for(int1=0;1<100000;!++)
{
v.remove(v.size()-l);
)
從Vector類型的對(duì)象v刪除所有元素的最好方法是:
v.removeAl舊ements();
假設(shè)Vector類型的對(duì)象v包含字符串"Hello"。考慮下面的代碼,它要
從這個(gè)Vector中刪除"Hell。"字符串:
Strings="Hello";
inti=v.indexOf(s);
if(I!=-1)v,remove(s);
這些代碼看起來沒什么錯(cuò)誤,但它同樣對(duì)性能不利。在這段代碼中,
indexOf()方法對(duì)v進(jìn)行順序搜索尋找字符串"Hello".remove⑸方法也要
進(jìn)行同樣的順序搜索。改進(jìn)之后的版本是:
Strings="Hello";
inti=v.indexOf(s);
if(I!=-1)v,remove(i);
這個(gè)版本中我們直接在remove。方法中給出待刪除元素的精確索引位置,
從而避免了第二次搜索。一個(gè)更好的版本是:
Strings="Hell?!?v.remove(s);
最后,我們?cè)賮砜匆粋€(gè)有關(guān)Vector類的代碼片段:
for(int1=0;I++;I<v.length)
如果v包含100,000個(gè)元素,這個(gè)代碼片段將調(diào)用v.size()方法100,000
次。雖然size方法是一個(gè)簡(jiǎn)單的方法,但它仍舊需要一次方法調(diào)用的開銷,至
少JVM需要為它配置以及清除堆棧環(huán)境。在這里,for循環(huán)內(nèi)部的代碼不會(huì)以
任何方式修改Vector類型對(duì)象v的大小,因此上面的代碼最好改寫成下面這
種形式:
intsize=v.size();for(int1=0;I++;I<size)
雖然這是一個(gè)簡(jiǎn)單的改動(dòng),但它仍舊贏得了性能。畢竟,每一個(gè)CPU周期
都是寶貴的。
15、當(dāng)復(fù)制大量數(shù)據(jù)時(shí),使用System.arraycopy。命令。
16、代碼重構(gòu):熠強(qiáng)代碼的可讀性。
17、不用new關(guān)鍵詞創(chuàng)建類的實(shí)例
用new關(guān)鍵詞創(chuàng)建類的實(shí)例時(shí),構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)
調(diào)用。但如果一個(gè)對(duì)象實(shí)現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone。方
法。clone。方法不會(huì)調(diào)用任何類構(gòu)造函數(shù)。
在使用設(shè)計(jì)模式(DesignPattern)的場(chǎng)合,如果用Factory模式創(chuàng)建對(duì)象,
則改用clone。方法創(chuàng)建新的對(duì)象實(shí)例非常簡(jiǎn)單。例如,下面是Factory模式的
一個(gè)典型實(shí)現(xiàn):
publicstaticCreditgetNewCredit(){
returnnewCredit();
)
改進(jìn)后的代碼使用clone。方法,如下所示:
privatestaticCreditBaseCredit=newCredit();
publicstaticCreditgetNewCredit(){
return(Credit)BaseCredit.clone();
)
上面的思路對(duì)于數(shù)組處理同樣很有用。
18、乘法和除法,用移位操作替代乘法操作可以極大地提高性能。
19、在JSP頁面中關(guān)閉無用的會(huì)話。
一個(gè)常見的誤解是以為session在有客戶端訪問時(shí)就被創(chuàng)建,然而事實(shí)是直到
某server端程序調(diào)用HttpServletRequest.getSession(true)這樣的語句時(shí)才
被創(chuàng)建,注意如果JSP沒有顯示的使用<%@pagesession=wfalse"%>關(guān)
閉session,則JSP文件在編譯成Servlet時(shí)將會(huì)自動(dòng)加上這樣一條語句
HttpSessionsession=HttpServletRequest.getSession(true);這也是JSP中
隱含的session對(duì)象的來歷。由于session會(huì)消耗內(nèi)存資源,因此,如果不打
算使用session,應(yīng)該在所有的JSP中關(guān)閉它。
對(duì)于那些無需跟蹤會(huì)話狀態(tài)的頁面,關(guān)閉自動(dòng)創(chuàng)建的會(huì)話可以節(jié)省一些資源。
使用如下page指令:<%@pagesession="false"%>
20、JDBC與I/O
如果應(yīng)用程序需要訪問一個(gè)規(guī)模很大的數(shù)據(jù)集,則應(yīng)當(dāng)考慮使用塊提取方式。
默認(rèn)情況下JDBC每次提取32行數(shù)據(jù)。舉例來說,假設(shè)我們要遍歷一個(gè)
5000行的記錄集,JDBC必須調(diào)用數(shù)據(jù)庫157次才能提取到全部數(shù)據(jù)。如果把
塊大小改成512,則調(diào)用數(shù)據(jù)庫的次數(shù)將減少到10次。
21、Servlet與內(nèi)存使用
許多開發(fā)者隨意地把大量信息保存到用戶會(huì)話之中。一些時(shí)候,保存在會(huì)話中
的對(duì)象沒有及時(shí)地被垃圾回收機(jī)制回收。從性能上看,典型的癥狀是用戶感到
系統(tǒng)周期性地變慢,卻又不能把原因歸于任何一個(gè)具體的組件。如果監(jiān)視JVM
的堆空間,它的表現(xiàn)是內(nèi)存占用不正常地大起大落。
解決這類內(nèi)存問題主要有二種辦法。第一種辦法是,在所有作用范圍為會(huì)話的
Bean中實(shí)現(xiàn)HttpSessionBindingListener這樣,只要實(shí)現(xiàn)
valueUnbound。方法,就可以顯式地釋放Bean使用的資源。
另外一種辦法就是盡快地把會(huì)話作廢。大多數(shù)應(yīng)用服務(wù)器都有設(shè)置會(huì)話作廢間
隔時(shí)間的選項(xiàng)。另外,也可以用編程的方式調(diào)用會(huì)話的
setMaxInactivelnterval。方法,該方法用來設(shè)定在作廢會(huì)話之前,Servlet容
器允許的客戶請(qǐng)求的最大間隔時(shí)間,以秒計(jì)。
22、使用緩沖標(biāo)記
一些應(yīng)用服務(wù)器加入了面向JSP的緩沖標(biāo)記功能。例如,BEA的WebLogic
Server從6.0版本開始支持這個(gè)功能,OpenSymphony工程也同樣支持這個(gè)
功能。JSP緩沖標(biāo)記既能夠緩沖頁面片斷,也能夠緩沖整個(gè)頁面。當(dāng)JSP頁面
執(zhí)行時(shí),如果目標(biāo)片斷已經(jīng)在緩沖之中,則生成該片斷的代碼就不用再執(zhí)行。
頁面級(jí)緩沖捕獲對(duì)指定URL的請(qǐng)求,并緩沖整個(gè)結(jié)果頁面。對(duì)于購(gòu)物籃、目錄
以及門戶網(wǎng)站的主頁來說,這個(gè)功能極其有用。對(duì)于這類應(yīng)用,頁面級(jí)緩沖能
夠保存頁面執(zhí)行的結(jié)果,供后繼請(qǐng)求使用。
23、選擇合適的引用機(jī)制
在典型的JSP應(yīng)用系統(tǒng)中,頁頭、頁腳部分往往被抽取出來,然后根據(jù)需要引
入頁頭、頁腳。當(dāng)前,在JSP頁面中引入外部資源的方法主要有兩種:
include指令,以及include動(dòng)作。
指令:例如<%@該指令在編
includeincludefile="copyright.html"%>o
譯時(shí)引入指定的資源。在編譯之前,帶有include指令的頁面和指定的資源被
合并成一個(gè)文件。被引用的外部資源在編譯時(shí)就確定,比運(yùn)行時(shí)才確定資源更
晨?效。
動(dòng)作:例如/,該動(dòng)作弓入
include<jsp:includepage="copyright.jsp/>oI
指定頁面執(zhí)行后生成的結(jié)果。由于它在運(yùn)行時(shí)完成,因此對(duì)輸出結(jié)果的控制更
加靈活。但時(shí),只有當(dāng)被引用的內(nèi)容頻繁地改變時(shí),或者在對(duì)主頁面的請(qǐng)求沒
有出現(xiàn)之前,被引用的頁面無法確定時(shí),使用include動(dòng)作才合算。
24、及時(shí)清除不再需要的會(huì)話
為了清除不再活動(dòng)的會(huì)話,許多應(yīng)用服務(wù)器都有默認(rèn)的會(huì)話超時(shí)時(shí)間,一般為
30分鐘。當(dāng)應(yīng)用服務(wù)器需要保存更多會(huì)話時(shí),如果內(nèi)存容量不足,操作系統(tǒng)會(huì)
把部分內(nèi)存數(shù)據(jù)轉(zhuǎn)移到磁盤,應(yīng)用服務(wù)器也可能根據(jù)"最近最頻繁使用"
(MostRecentlyUsed)算法把部分不活躍的會(huì)話轉(zhuǎn)儲(chǔ)到磁盤,甚至可能拋出
”內(nèi)存不足〃異常。在大規(guī)模系統(tǒng)中,串行化會(huì)話的代價(jià)是很昂貴的。當(dāng)會(huì)話
不再需要時(shí),應(yīng)當(dāng)及時(shí)調(diào)用HttpSession.invalidate。方法清除會(huì)話。
HttpSession.invalidate()方法通常可以在應(yīng)用的退出頁面調(diào)用。
、不要將數(shù)組聲明為
25:publicstaticfinalo
26、HashMap的遍歷效率討論
經(jīng)常遇到對(duì)HashM叩中的key和value值對(duì)的遍歷操作,有如下兩種方法:
Map<String,String[]>paraMap=newHashMap<String,String[]>();
〃第一個(gè)循環(huán)
Set<String>appFieldDeflds=paraMap.keySet();
for(StringappFieldDefld:appFieldDeflds){
String[]values=paraMap.get(appFieldDefld);
)
〃第二個(gè)循環(huán)
for(Entry<String,String[]>entry:paraMap.entrySet()){
StringappFieldDefld=entry.getKeyO;
String[]values=entry.getValueQ;
)
第一種實(shí)現(xiàn)明顯的效率不如第二種實(shí)現(xiàn)。
分析如下Set<String>appFieldDeflds=paraMap.keySet();是先從
HashMap中取得keySet
代碼如下:
publicSet<K>keySet(){
Set<K>ks=keySet;
return(ks!=null?ks:(keySet=newKeySetQ));
)
privateclassKeySetextendsAbstractSet<K>{
publicIterator<K>iterator(){
returnnewKeyIterator();
)
publicintsize(){
returnsize;
)
publicbooleancontains(Objecto){
returncontainsKey(o);
)
publicbooleanremove(Objecto){
returnHashMap.this.removeEntryForKey(o)!=null;
)
publicvoidclear(){
HashMap.this.clear();
)
)
其實(shí)就是返回一個(gè)私有類KeySet,它是從AbstractSet繼承而來,實(shí)現(xiàn)了Set
接口。
再來看看for/in循環(huán)的語法
for(declaratior):expression)
statement
在執(zhí)行階段被翻譯成如下各式
for(Iterator<E>#i=(expression).iterator();#i.hashNext();){
declaration=#i.ncxt();
statement
)
因此在第一個(gè)for語句for(StringappFieldDefld:appFieldDeflds)中調(diào)用了
HashMap.keySetQ.iteratorQ
而這個(gè)方法調(diào)用了newKeyIterator()
Iterator<K>newKeyIterator(){
returnnewKeylterator();
)
privateclassKeyiteratorextendsHashIterator<K>{
publicKnext(){
returnnextEntry().getKey();
)
)
所以在for中還是調(diào)用了
在第二個(gè)循環(huán)for(Entry<String,String[]>entry:paraMap.entrySet。)中使
用的Iterator是如下的一個(gè)內(nèi)部類
privateclassEntryiteratorextendsHashIterator<Map.Entry<K,V>>{
publicMap.Entry<K,V>next(){
returnnextEntryO;
)
)
此時(shí)第一個(gè)循環(huán)得到key,第二個(gè)循環(huán)得到HashMap的Entry效率就是從循
環(huán)里面體現(xiàn)出來的第二個(gè)循環(huán)此致可以直接取key和value值而第一個(gè)循環(huán)還
是得再利用HashMap的get(Objectkey)來取value值現(xiàn)在看看HashMap
的get(Objectkey)方法
publicVget(Objectkey){
Objectk=maskNull(key);
inthash=hash(k);
inti=indexFor(hash,table.length);//Entry[]table
Entry<K,V>e=table;
while(true){
if(e==null)
returnnull;
if(e.hash==hash&&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深度解析(2026)《GBT 19312-2003小艇 汽油機(jī)和或汽油柜艙室的通風(fēng)》
- 狼瘡性肺炎的氧療與呼吸支持策略
- 環(huán)境因素:ARDS發(fā)病與氣候關(guān)聯(lián)性研究
- 設(shè)計(jì)院面試題及設(shè)計(jì)創(chuàng)意
- 垃圾破袋機(jī)項(xiàng)目可行性分析報(bào)告范文
- 貯料設(shè)備項(xiàng)目可行性研究報(bào)告(總投資7000萬元)(33畝)
- 深度解析(2026)《GBT 18969-2003飼料中有機(jī)磷農(nóng)藥殘留量的測(cè)定 氣相色譜法》(2026年)深度解析
- 深度解析(2026)《GBT 18932.7-2002蜂蜜中苯酚殘留量的測(cè)定方法 液相色譜法》(2026年)深度解析
- 深度解析(2026)《GBT 18875-2002起重機(jī) 備件手冊(cè)》
- 教育行業(yè)名師面試技巧及答案
- 濕疹患者護(hù)理查房
- 2025至2030中國(guó)融媒體行業(yè)市場(chǎng)深度分析及前景趨勢(shì)與投資報(bào)告
- 2026年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試模擬測(cè)試卷附答案
- 2026年南京交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫附答案
- 2025吐魯番市高昌區(qū)招聘第二批警務(wù)輔助人員(165人)筆試考試參考試題及答案解析
- 江蘇省徐州市2026屆九年級(jí)上學(xué)期期末模擬數(shù)學(xué)試卷
- 2025年南陽市公安機(jī)關(guān)招聘看護(hù)隊(duì)員200名筆試考試參考試題及答案解析
- 產(chǎn)后康復(fù)健康促進(jìn)干預(yù)方案
- 2024年人民法院聘用書記員考試試題及答案
- 2025年高三英語口語模擬(附答案)
- 2023版思想道德與法治專題3 追求遠(yuǎn)大理想 堅(jiān)定崇高信念 第3講 在實(shí)現(xiàn)中國(guó)夢(mèng)的實(shí)踐中放飛青春夢(mèng)想
評(píng)論
0/150
提交評(píng)論