第一篇:程序員的基礎(chǔ)知識
程序員的基礎(chǔ)知識
現(xiàn)在程序員也分很多種的啊。有WEB程序員,嵌入式程序員,有C/S程序員。我就給你一份.net程序員的規(guī)劃吧!呵。希望對你有幫助!一份.Net的學(xué)習(xí)規(guī)劃
一、研究方向
智能信息處理實驗室.Net小組的主要研究方向是“.Net平臺下軟件開發(fā)技術(shù)及相關(guān)應(yīng)用”,其研究內(nèi)容包括.Net框架、.Net語言、面向?qū)ο蟮脑O(shè)計、軟件工程學(xué)方法以及以上理論在實際中的應(yīng)用。小組將以.Net為開發(fā)平臺,著眼于軟件體系結(jié)構(gòu),特別是面向?qū)ο蟮能浖O(shè)計方法,學(xué)習(xí)軟件模塊化、系統(tǒng)解耦合和設(shè)計模式等相關(guān)的理論知識,并結(jié)合實驗室“Web語義”、“工作流”等已有的課題點,討論以上技術(shù)在實際生產(chǎn)中的應(yīng)用。在更高層次上,小組將系統(tǒng)的學(xué)習(xí)目前較為常見的軟件工程學(xué)方法,包括瀑布模式、螺旋模式和敏捷模式等。并在項目中嘗試采用這些方法,分析這些模式的特點和適用范圍,使小組成員掌握基本的軟件項目管理能力。
二、研究階段
對于.Net下軟件的開發(fā)的研究分為以下四個階段: 第一階段:.Net開發(fā)環(huán)境的掌握和相關(guān)開發(fā)技術(shù)的學(xué)習(xí)。這一階段主要是掌握一門.Net語言(推薦C#);掌握.Net開發(fā)的基本技能,包括熟悉.Net框架中的核心類、用于數(shù)據(jù)訪問的ADO.Net和用于Web應(yīng)用的Asp.Net等;掌握Web開發(fā)的相關(guān)技術(shù),包括數(shù)據(jù)庫、HTML、JavaScript、CSS和服務(wù)器的配置等;熟悉Visual Studio.Net、Visual Source Safe等開發(fā)工具。該階段完成后小組成員將有能力閱讀.Net系統(tǒng)的代碼,并在已有的基礎(chǔ)上進行改善的能力。第二階段:掌握基本的面向?qū)ο笤O(shè)計。在這一階段,小組成將繼續(xù)學(xué)習(xí).Net框架的相關(guān)知識,了解包括反射、XML、ORM和Ajax等較為深入的內(nèi)容。同時,應(yīng)該注重對相關(guān)原理的理解,包括IL語言、Asp.Net運行時和Http協(xié)議等。在軟件結(jié)構(gòu)體系方面,小組成員開始學(xué)習(xí)使用面向?qū)ο蟮姆椒ㄟM行思考,使用繼承、引用和多態(tài)等面向?qū)ο蟮乃悸穪砻枋鱿到y(tǒng)的設(shè)計,掌握UML等系統(tǒng)設(shè)計工具。這一階段將加大實踐的比例,使小組通過開發(fā)實際項目,掌握相關(guān)的技術(shù)和面向?qū)ο笤O(shè)計能力。在這一階段,隨著項目實踐的展開,小組成員開始接觸軟件工程學(xué)方法,了解不同的開發(fā)模式,掌握團隊協(xié)作能力和相關(guān)協(xié)作工具的使用。第三個階段:掌握初步系統(tǒng)架構(gòu)設(shè)計。在這一階段,系統(tǒng)地實現(xiàn)已經(jīng)不是重點,而該是如何設(shè)計出一個良好的系統(tǒng)結(jié)構(gòu)。這要求深入的理解面向?qū)ο蟮乃枷?,并且具有一定的開發(fā)經(jīng)驗。在這一階段,小組將學(xué)習(xí)軟件構(gòu)架的相關(guān)知識,包括系統(tǒng)的模塊化、模塊間解耦合、面向?qū)ο蟮脑O(shè)計原則、設(shè)計模式、測試和重構(gòu)等,并且學(xué)習(xí)使用這些知識對不同的系統(tǒng)進行設(shè)計,掌握各種模式的特點和使用范圍,從而對于給定的系統(tǒng)要求能夠設(shè)計出較為完善的架構(gòu)。第四階段:掌握完善系統(tǒng)架構(gòu)設(shè)計。這一階段著眼于如何對系統(tǒng)的需求進行深入的理解,以及此基礎(chǔ)上,設(shè)計出完善的系統(tǒng)架構(gòu)。完善的系統(tǒng)架構(gòu)應(yīng)該重視并準確的反映系統(tǒng)的業(yè)務(wù)邏輯,并考慮需求變化的應(yīng)對,兼顧系統(tǒng)的靈活性、健壯性、復(fù)雜度、開發(fā)效率和運行效率等諸多方面。小組成員在這一階段將學(xué)習(xí)大量現(xiàn)有的優(yōu)秀系統(tǒng)設(shè)計,并結(jié)合實驗室相關(guān)項目,充分理解不同系統(tǒng)所應(yīng)該采用的構(gòu)架模式,并盡量能夠擁有自己獨到的設(shè)計見解和設(shè)計風(fēng)格。
附:參考書目
1.第一階段: a)《C#高級編程》 b)《Asp.Net高級編程》 c)《HTML&XHTML權(quán)威指南》 d)《JavaScript權(quán)威指南》 e)《數(shù)據(jù)系統(tǒng)概論》
2.第二階段: a)《.Net Framework高級編程》 b)《Asp.Net 技術(shù)內(nèi)幕》 c)《C# XML高級編程》 d)《JavaScript高級編程》 e)《Ajax基礎(chǔ)教程》 f)《代碼大全2》 g)《面向?qū)ο箝_發(fā)實踐之路--C#版》 h)UML書籍一本
3.第三階段: a)《重構(gòu)--改善既有代碼的設(shè)計》 b)《敏捷軟件開發(fā)--原則、模式及實踐》 c)《Head First Design Patterns》 d)《設(shè)計模式--可復(fù)用的面向?qū)ο笤O(shè)計》
4.第四階段: a)《企業(yè)應(yīng)用構(gòu)架模式》 b)《測試驅(qū)動開發(fā)》 c)《程序員修煉之道》
第二篇:java程序員基礎(chǔ)知識
目前,JAVA是開發(fā)人員的熱寵,很多論壇都有不少熱愛JAVA的開發(fā)人員,也有不少想成為JAVA程序員,但苦于不知道該如何學(xué)習(xí),也不清楚該學(xué)些什么知識才能成為一個JAVA程序員。本人在這里拋磚引玉,和大家討論成為一個JAVA初級程序員應(yīng)該具有的知識,與大家共享。
個人認為想成為一個合格的JAVA初級程序員應(yīng)該具備如下知識:
一、面向?qū)ο蟮闹R:JAVA是一個面向?qū)ο蟮拈_發(fā)語言,因此熟悉面向?qū)ο髮W(xué)習(xí)JAVA很有必要,您要了解:什么是對象,什么是類;什么是封裝,什么是多態(tài),什么是繼承;什么是抽象類,什么是接口。了解了概念后,您還需要這些概念是如何體現(xiàn)的,如類和對象有什么區(qū)別?類是如何封裝的?
二、JAVA語法:如果您已經(jīng)有了開發(fā)經(jīng)驗,恭喜您,您學(xué)習(xí)JAVA語法來將比較容易。如果您有C++等面向?qū)ο笳Z言的開發(fā)經(jīng)驗,您只需簡單的翻看一下介紹JAVA的相關(guān)書籍就可以了。如果您是新手,沒有關(guān)系,您下些工夫,好好研究一本JAVA初級教程之類的書就可以了。
學(xué)習(xí)了JAVA語法,加上面向?qū)ο蟮闹R,只有您用心,您就可以寫出來比較好的JAVA代碼了。如果您再抽出時間熟悉一下JAVA編程規(guī)范,您代碼的水平就應(yīng)該不俗了。
三、JSP和HTML:在我國的絕大多數(shù)公司,做JAVA程序員都少不了和JSP以及HTML打交道。因此,想成為JAVA程序員就不可避免的要熟悉JSP和HTML,您最好能知道JSP的幾個內(nèi)置對象,如Session,Request,Reponse,以及常用的JSP標(biāo)簽,如
include,userBean等。盡管一些工具會幫您生成HTML代碼,但您還是要熟悉比如title等。如果您再熟悉一下JS和CSS就更好了,那會使您制作的頁面更友好。
四、WebServer:熟悉了以上三種,可以肯定的說您已經(jīng)可以制作出來JSP頁面了,您也可以在您的頁面里使用自己開發(fā)的JAVA類,但您的頁面總要跑起來才能看到您要的效果,這就要求您必須熟悉一種WebServer,比如:TOMCAT等。您要熟悉如何發(fā)布您的應(yīng)用,如何利用WebServer的數(shù)據(jù)庫資源等。
五、開發(fā)工具:大家都知道,開發(fā)工具可以幫助您更好更快地開發(fā),因此熟悉幾種開發(fā)工具很有必要。目前JAVA的開發(fā)工具比較流行的有Eclipse,HTML的開發(fā)工具有Dreamweaver等。
六、熟悉一種框架:熟悉一種框架其實是成為JAVA程序員的一種可選知識,但目前開發(fā)B/S結(jié)構(gòu)的應(yīng)用的開發(fā)小組,都差不多會采用一種框架來構(gòu)建自己的應(yīng)用系統(tǒng)??蚣芏紩性S多可重用的代碼,良好的層次關(guān)系和業(yè)務(wù)控制邏輯,基于框架的開發(fā)使你可以省出很多的開發(fā)成本。目前比較流行的框架有Struts和Spring等。
如何成為一名合格的java程序員?(轉(zhuǎn))
程序?qū)W習(xí)2008-05-27 19:56閱讀35評論01、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應(yīng)該能夠根據(jù)
報錯信息知道是什么樣的語法錯誤并且知道任何修正。
2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。
4、API:Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
1)、java.lang包下的80%以上的類的功能的靈活運用。
2)、java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer。
3)、java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。
4)、java.math包下的100%的內(nèi)容。
5)、java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。
6)、java.text包下的60%以上的內(nèi)容,特別是各種格式化類。
7)、熟練運用JDBC。
8)、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java。
9)、AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。
10)、Swing的基本內(nèi)容,和AWT的要求類似。
11)、XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。
5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用ant完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應(yīng)該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
第三篇:一個程序員應(yīng)該具備的基礎(chǔ)知識和概念
一個程序員應(yīng)該具備的基礎(chǔ)知識和概念
1、計算機是有什么組成的,CPU是什么東西,其工作原理是什么。(對于這些以及下面將要提到的概念我不會告訴你什么答案,你可以看相應(yīng)的教材,關(guān)于教材我會在下一部分詳述,記住理解最重要!)
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C,C++,Basic,Pascal,F(xiàn)ortran,C#,Java等等;如果你是中國軟件業(yè)的英雄,你也寫一門語言,最好不用英語)
6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)
7、HTML、XML等是標(biāo)識性語言。
8、Prolog是人工智能語言。
9、操作系統(tǒng)OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)
10、Windows編程說白了就是Windows API的調(diào)用。(中國的程序員很多只是會編windows程序,用的是VB,我的建議是這些程序員頂多只是低級編碼員,我稱其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環(huán)境,不是編程語言。
12、面向結(jié)構(gòu)的設(shè)計概念。
13、面向?qū)ο蟮母拍?。(好好理解,兄弟,這個東西還是很重要的)
14、軟件工程的概念和原理。(如果你想當(dāng)老總就需要好好研究了,系統(tǒng)分析員比編碼員要高一個等級,薪水也高喲)
15、數(shù)據(jù)庫的概念。(要熟悉一些著名的數(shù)據(jù)庫系統(tǒng)和語言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解網(wǎng)絡(luò)概念。
17、了解多媒體概念。
18、熟悉和掌握數(shù)據(jù)結(jié)構(gòu)和基本算法。
19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學(xué)習(xí),一個月以后你就會有一個基本的概念;兩個月以后你就會感覺自己有了全面的基 礎(chǔ)知識;當(dāng)你知道編程序是怎么回事時,說明你已經(jīng)入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其后塵吧。要有信心和耐心。沉不住氣怎 么能成大事?!)
(四)教材推薦
――-推薦的教材主要還是針對概念來的,最好選用名校的教學(xué)用書。
1、《計算機組成原理》(熟悉)
2、《數(shù)據(jù)結(jié)構(gòu)》(掌握)
3、《操作系統(tǒng)》(了解->熟悉)
4、《The C language》(掌握)
5、《編譯原理》(了解原理)
6、《匯編語言》(了解)
7、《計算機網(wǎng)絡(luò)》(了解)
8、《軟件工程》(了解)
9、《關(guān)系數(shù)據(jù)庫》(熟悉)
10、《The C++Languege 》(掌握)
11、《面向?qū)ο笤O(shè)計》(掌握;結(jié)合C++學(xué)習(xí))
(五)一些經(jīng)驗和體會
1、真正的程序員用C++;(一位專家說的)
2、動手去編程序;
3、動腦去思考;
4、要有良好的編程風(fēng)格;
5、讀書,讀好書,盡量讀原版書?。ㄎ曳磸?fù)強調(diào)這一點,讀書要有選擇,堅持讀好書,名家出的經(jīng)典書,不要浪費實踐在一些粗制濫造的書上面;堅持博覽群書)
6、有自己的學(xué)習(xí)計劃;
7、總結(jié)自己的經(jīng)驗教訓(xùn);(準備一個筆記本,記錄錯誤和心得)
8、不要怕學(xué)新東西;
9、要有軟件工程的思想;
10、善于發(fā)現(xiàn)問題,然后去尋找答案;
11、向高手請教;(要虛心直到你成為高手)
12、和同行交流;(不善于交流肯定不行)
13、懂得軟件的實質(zhì),不要被千變?nèi)f化的表象所迷惑;
14、真正要學(xué)習(xí)用的是編程語言和方法,不是什么庫,什么類,什么工具;用那些什么庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)
15、學(xué)習(xí)wiodows編程主要是學(xué)習(xí)windows OS和win32 API;
16、有空了解一下嵌入式開發(fā);
(學(xué)
17、有空了解一下PDA軟件開發(fā);
18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;
19、要有耐心,不要作浮躁的人;
20、對程序加注釋,并保留你的老程序;
21、學(xué)到的東西越多,了解的越多,你就越接近專家;
22、有空去逛逛CSDN,那里有你很多知己;
23、要有信心成為一個優(yōu)秀的程序;
(六)一些好書的推薦
1、《The C Programming language》(Keinighan & Dennis Ritchie 1988)
2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)
3、《Inside The C++ Object Model》(lippman)
4、《Effective C++》
5、《More Effective C++》(lippman)
6、《Exceptional c++》
7、《C++面向?qū)ο蟾咝Ь幊獭?/p>
8、《設(shè)計模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推薦)
11、《The Art of Computer Programming 》
12、《Programming Windows》(Charles Petzold)
13、《VC++5.0技術(shù)內(nèi)幕》
14、《MFC 深入淺出》
15、《軟件需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序員參考手冊》
19、《用TCP/IP進行網(wǎng)際互連》
20、《COM 本質(zhì)論》
(七)學(xué)習(xí)計劃
――-這個學(xué)習(xí)計劃是我個人定的,也共享給大家參考一下,共同進步吧。
1、《計算機組成原理》
2、《操作系統(tǒng)》
3、《數(shù)據(jù)結(jié)構(gòu)》
4、《匯編語言》
5、《 C 》
6、《 C++ 》
7、《VC 技術(shù)內(nèi)幕》
8、《Programming Windows》
9、《深入淺出MFC》
10、《Advanced Windows》
11、《Inside The C++ Object Model》
12、《Thinking in C++》
13、《Effective C++》
14、數(shù)據(jù)庫
15、網(wǎng)絡(luò)
16、嵌入式OS和編程
17、硬件單片機
18、.NET和C#
19、軟件工程
20、UNIX和Linux
(八)后記
一年來浪費了大量的時間去摸索,去思考,走了很多的彎路,直到現(xiàn)在我還覺得自己是個編程的門外漢。我把我的一些體會和想法說出來(當(dāng)然,很多都不一定正 確,歡迎大家指正和討論),也許對一些想加入程序員行列的朋友有一些建議和幫助。希望能幫助這些朋友順利走上編程之路,成為高手。
第四篇:Java初級程序員面試必備的基礎(chǔ)知識總結(jié)
Java基礎(chǔ)
簡述Java的基本歷史
java起源于SUN公司的一個GREEN的項目,其原先目的是:為家用消費電子產(chǎn)品發(fā)送一個信息的分布式代碼系統(tǒng),通過發(fā)送信息控制電視機、冰箱等
簡單寫出Java特點,寫出5個以上,越多越好
簡單的、面向?qū)ο蟮?、分布式的、安全的、穩(wěn)定的、與平臺無關(guān)的、可解釋的、多線的、動態(tài)的語言。
什么是Java? JAVA:一種編程語言
一種開發(fā)環(huán)境
一種應(yīng)用環(huán)境
一種部署環(huán)境
請寫出Java的版本分類,以及每種版本的應(yīng)用方向 三種版本:
JME:是面向內(nèi)存有限的移動終端.為消費性產(chǎn)品設(shè)計的;
JSE: 是SUN公司針對桌面開發(fā)和低端商務(wù)計算方案開發(fā)的版本。為筆記本電腦、PC機設(shè)計的;
JEE: 是一種利用JAVA 2平臺來簡化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。為企業(yè)級的、服務(wù)器端的高端應(yīng)用而設(shè)計的;
描述Java技術(shù)的主要特性 java虛擬機
垃圾回收
代碼安全性
描述 Java虛擬機的功能
(1)通過 ClassLoader 尋找和裝載 class 文件
(2)解釋字節(jié)碼成為指令并執(zhí)行,提供 class 文件的運行環(huán)境
(3)進行運行期間垃圾回收
(4)提供與硬件交互的平臺
簡述Java代碼安全性(1)編譯時的錯誤檢驗
(2)類裝載檢查,把本機上的類和網(wǎng)絡(luò)資源類相分離,在調(diào)入類的時候進行檢查,因而可以限制任何“特洛伊木馬“的應(yīng)用
(3)字節(jié)碼校驗
(4)沙箱機制,限定訪問權(quán)限
描述Java垃圾回收機制
Java 編程語言解除了程序員釋放內(nèi)存的責(zé)任。它可提供一種系統(tǒng)級線程以跟蹤每一次內(nèi)存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的內(nèi)存。垃圾收集在 Java 技術(shù)程序的生命周期中自動進行,它解除了釋放內(nèi)存的要求,這樣能夠有效避免內(nèi)存漏洞和內(nèi)存泄露(內(nèi)存泄露就是程序運行期間,所占用的內(nèi)存一直往上漲,很容易造成系統(tǒng)資源耗盡而降低性能或崩潰。
垃圾回收有以下特點:
(1)垃圾回收是一個自動的系統(tǒng)行為,程序員不能控制垃圾回收的功能和行為。
(2)有一些跟垃圾回收相關(guān)的方法,比如:System.gc(),調(diào)用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運不運行,什么時候運行,都是無法控制的。
(3)程序員可以通過設(shè)置對象為 null,來標(biāo)示某個對象不再被需要了,這只是表示這個對象可以被回收了,并不是馬上被回收。
簡述Java代碼的運行過程
(1)加載代碼 通過類裝載器裝載CLASS文件
(2)校驗代碼 由字節(jié)碼校驗
(3)執(zhí)行代碼 由解釋器將字節(jié)碼轉(zhuǎn)換成機器碼
簡述如何搭建Java開發(fā)環(huán)境 首先下載安裝JDK 然后配置環(huán)境
(1)配置PATH,(2)配置CLASSPATH
(3)配置JAVA_HOME
簡述classpath,path,JAVA_HOME的意義和配置方法 path 操作系統(tǒng)運行環(huán)境的路徑
classpath JAVA運行應(yīng)用程序時所需要的類包的路徑
JAVA_HOME 供需要運行JAVA的程序使用
請描述:一個完整的Java文件的代碼分幾個部分,每部分都起什么作用,大致的寫法 package 當(dāng)前類所在位置
import 當(dāng)前類運行時所需要的包或類
public class 類名 {
屬性定義;
方法定義:
構(gòu)造方法定義;
public static void main(String args [])例外{ 程序入口 語句;} }
//注釋
Java代碼的注釋有幾種?分別舉例說明(1)// 單行注解
(2)/* */ 塊注釋
(3)/* *
* 文檔注釋
*/
什么是Java代碼的語句,什么是Java代碼的塊,舉例說明 語句 是一行以分號終止的代碼,例:int a;
塊 是以{ }為邊界的一些語句的集合 例:public void tt(){}
什么是標(biāo)示符?
標(biāo)識符:是賦予變量、類、方法的名稱。
標(biāo)示符定義的規(guī)則?
首字母只能以字母、下劃線、$開頭,其后可以跟字母’下劃線、$和數(shù)字配置CLASSPATH 首字母小寫中間用大寫字母隔開 標(biāo)識符具有一定的含義
什么是關(guān)鍵字?
關(guān)鍵字就是編程語言與機器語言的編碼約定
true、false、null、sizeof、goto、const那些是Java關(guān)鍵字 true、false、null 為JAVA的關(guān)鍵字
Java的基本數(shù)據(jù)類型有幾種?分別是? short int long boolean float double char byte
請寫出每種基本類型的默認值?取值范圍?分別給出一個定義的例子 默認值
取值范圍 示例
字節(jié)型 : 0-2^7—-2^7-1 byte b=10;
字符型 : ‘ u0000′ 0—-2^16-1 char c=’c’;
short : 0-2^15—-2^15-1 short s=10;
int : 0-2^31—-2^31-1 int i=10;
long : 0-2^63—-2^63-1 long o=10L;
float : 0.0f-2^31—-2^31-1 float f=10.0F
double : 0.0d-2^63—-2^63-1 double d=10.0;
boolean: false truefalse boolean flag=true;
在基本類型中,如果不明確指定,整數(shù)型的默認是什么類型?帶小數(shù)的默認是什么類型? 整數(shù)類型 默認為 int
帶小數(shù)的默認為 double
如何定義float類型和long型 float f = 1.2f
long l = 1.2L
什么是變量?
變量是用來引用一塊內(nèi)存區(qū)域或一個值,用標(biāo)識符來表示,可以通過操作變量來操作變量所對應(yīng)的內(nèi)存區(qū)域或值塊的值。
變量的定義規(guī)則?
以字母、$、下劃線開頭,其后可以跟字母、下劃線、$和數(shù)字; 首字母小寫,中間單詞用大寫字母隔開; 名稱具有一定含義;
請寫出Java編碼約定中對下列部分的要求:類、屬性、方法、包、文件名、變量、常量、控制結(jié)構(gòu)、語句行、注釋
類: 一個類文件中類名要和文件名相同,類名一定要以大寫字母開頭,單詞之間用大寫字母分隔
屬性: 屬性名首字母小寫,中間用大寫字母隔開。
方法: 方法名首字母小寫,中間用大寫字母隔開。
包: 引用包必須寫在類文件的開頭,有且只能有一個包,全部用小寫字母。
控制結(jié)構(gòu):當(dāng)語句是控制結(jié)構(gòu)的一部分時,即使是單個語句,也應(yīng)使用大括號將語句封閉。
語句行:每行只寫一個語句,并使用四個縮進的空格,使代碼更易讀,注意用分號結(jié)束。
注釋: 用注釋來說明那些不明顯代碼的段落。
常量: 常量名一般用大寫字母,單詞之間用下劃線分隔,一旦賦值不允許修改。
什么是Javadoc? 按照一定格式生成程序的文檔的工具。
什么是引用類型?
用戶定義類型, 它可引用類和數(shù)組。
除去基本數(shù)據(jù)類型的其他類型都是引用數(shù)據(jù)類型。
什么是按值傳遞?什么是按引用傳遞?
按值傳遞:就是將該值的副本傳過去(基本數(shù)據(jù)類型+String類型的傳遞,就是按值傳遞)
按引用傳遞:就是將值的內(nèi)存地址傳過去(除基本數(shù)據(jù)類型+String以外類型的傳遞,就是引用傳遞)
如何創(chuàng)建一個新對象?如何使用對象中的屬性和方法? 使用new 關(guān)鍵字來創(chuàng)建一個新的對象;
通過對象的實例用”.“(點)來調(diào)用對象中的屬性和方法;
靜態(tài)的方法和屬性,也可以直接用類名”.“(點)來調(diào)用;
簡述new關(guān)鍵字所做的工作
new 創(chuàng)建一個對象,并為對象分配一塊內(nèi)存。
簡述”=” 和”= =”的功能和區(qū)別 “=” 賦值,“= =”當(dāng)比較基本數(shù)據(jù)類型的時候,判斷前后兩個值是否相等;
當(dāng)比較引用數(shù)據(jù)類型的時候,判斷= =前后兩個值的內(nèi)存地址是否相等;
區(qū)別:
= :為賦值表達式
= = :為邏輯表達式
什么是實例變量?什么是局部變量?什么是類變量?什么是final變量?
實例變量:
類中定義的變量,即類成員變量,如果沒有初始化,會有默認值;
局部變量:
在方法中定義的變量,必須初始化;
類變量:
用static修飾的屬性;
final變量:
用final 修飾的變量,簡述上述各種變量的定義規(guī)則和使用規(guī)則?
實例變量: 不需要static關(guān)鍵字來聲明,需要類的實例(對象)調(diào)用(用”.“);
類變量: 用static修飾,可以用類名調(diào)用,也可以用類的實例調(diào)用;
局部變量: 在方法內(nèi)任意定義變量即為局部變量;
final變量: 一旦賦值,不可以再修改的變量;
final屬性只允許賦值一次,且只能通過構(gòu)造方法賦值,定義后也就是一個常量;
final修飾的變量,只允許賦值一次
a++和++a的區(qū)別?
a++ : 先使用,后加1
++a : 先加1,后使用
請描述instanceof、?:、&、&&各自的功能
instanceof :用來判斷某個實例變量是否屬于某種類的類型。
? : 三目運算符:
表達式1?表達式2:表達式3
如果表達式1為true,執(zhí)行表達式2,否則執(zhí)行表達式3
&: 位運算:按位與 |
&&: 邏輯運算:邏輯與
請描述>>、<<、>>>的功能
10>>4 :算術(shù)或符號右移位運算符
<< :算術(shù)或符號左移位運算符 >>> :邏輯或無符號右移位運算符
請描述什么是強制類型轉(zhuǎn)換?什么是自動類型轉(zhuǎn)換?什么是向上造型?并分別舉例說明 強制類型轉(zhuǎn)換:在一個類型前面加(),來強制轉(zhuǎn)換
long l = 9L;
int i =(int)l;
自動類型轉(zhuǎn)換:
int i = 5;
String str = “”+i;
向上造型:把范圍小的造型為范圍大的類型:
int i = 2;
long l = i;
請寫出完整的if條件控制語句的結(jié)構(gòu) if(布爾表達式){ 語句
}else{
語句
}
請寫出完整的switch語句的結(jié)構(gòu) switch(字符){
case 字符: 語句
break;
case 字符: 語句
break;
default:語句
}
請寫出完整的for語句的結(jié)構(gòu) for(初始語句;條件語句;步長){ }
請寫出完整的while語句的結(jié)構(gòu) while(boolean語句){ }
請寫出完整的do while語句的結(jié)構(gòu) do{
}while(boolean語句);
請描述break 和 continue的功能和用法 break:終止(跳出)最近的循環(huán)
continue:跳出本次循環(huán),執(zhí)行下一次循環(huán)
定義一個一維的int數(shù)組,先創(chuàng)建它,并初始化它,給它賦值,然后輸出其中的一個值 public class Arr{
public static void main(String args[]){ int a[] = new int[5];
a={1,2,3,4,5};//錯誤 , 只能在初始化時這樣做
a[0]=1;
a[1]=2;
System.out.println(a[0]);} }
定義一個一維的A類型數(shù)組,直接定義并賦值,然后輸出其中的一個值 public class A{
public static int i;
public static void main(String args[]){
A aa = new A();
A bb = new A();
A a[] = {aa,bb};
a[0].i=2;
System.out.println(a[0]);} }
把上面的數(shù)組改成2維的數(shù)組 public class A{
public static int i;public static void main(String args[]){
A a[ ][ ] = new A[5][5];
a[0][0].i=2;
System.out.println(a[0][0]);} }
舉例說明數(shù)組拷貝方法的使用:arraycopy方法 public class A{
public static void main(String args[]){
int a[] = new int[5];
int b[] = new int[5];
System.arraycopy(a[5],0,b[5],0,a.length)
System.out.println(b[0][0]);} }
什么是構(gòu)造和析構(gòu)方法?功能是?
構(gòu)造方法:每個類至少有一個構(gòu)造方法,類初始化時調(diào)用的方法
1.方法名和類名相同
2.無返回值類型
格式:訪問權(quán)限 類名(參數(shù)列表){};
1.自己定義構(gòu)造后,就沒有默認的構(gòu)造方法 2.無構(gòu)造方法時,默認為空參的構(gòu)造方法(無參數(shù),方法體為空)析構(gòu)方法:finalize
類銷毀時,自動調(diào)用方法
當(dāng)對象在內(nèi)存中被刪除時,自動調(diào)用該方法
在此方法中可以寫回收對象內(nèi)部的動態(tài)空間的代碼
簡述Java的訪問修飾符類型?分別有什么功能? public 公開的,任何一個類都有可以訪問
protected 同包同類,只可被它的子類訪問
default 只能被同一個包中類訪問
private 私有的,只能在本類中被訪問
分別說明:在類上、在屬性上、在方法上能使用哪些訪問修飾符 在類上:public default final
在方法上: 訪問權(quán)限:public protected private default
方法修飾符:static final
返回類型:void
在屬性上:public protected private default
static final
簡述什么是包?包的功能
包:對所定義的多個JAVA類進行分組,將多個功能相關(guān)的類定義到一個包(文件)中。
功能:1.易于查找和使用適當(dāng)?shù)念?/p>
2.包不止包含類和接口,還可以包含其它包,形成層次的包空間
3.有助于避免命名沖突
請寫出5個以上的JDK中的包,以及他們的基本功能
java.awt: 包含構(gòu)成抽象窗口工具集的多個類,用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面
java.lang: 提供java編成語言的程序設(shè)計的基礎(chǔ)類
java.io:
包含提供多種輸出輸入功能的類,java.net:
包含執(zhí)行與網(wǎng)絡(luò)有關(guān)的類,如URL,SCOKET,SEVERSOCKET,java.applet: 包含java小應(yīng)用程序的類
java.util:
包含一些實用性的類
什么是包裝類?Java中都有哪些包裝類
在JDK中針對各種基本類型分別定義相應(yīng)的引用類型 ————–稱為封裝類 Boolean Byte Short Integer Long Float Double Character
OOP(面向?qū)ο螅┱Z言的三大特征是? 封裝性,繼承性,多態(tài)性
分別表述類的三大特性及其他們的功能
封裝:隱藏類的實現(xiàn)細節(jié)、迫使用戶去使用一個接口去訪問數(shù)據(jù)、使代碼更好維護
繼承:子類可以直接繼承使用父類的方法,程序員只需要做的是定義額外特征或規(guī)定將適用的變化
多態(tài)性:同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力
如何實現(xiàn)繼承?繼承的規(guī)則? public class A extends B{ }
單繼承性
構(gòu)造方法不能繼承
super引用父類,調(diào)用父類的屬性,方法
當(dāng)子類中出現(xiàn)與父類的方法名,返回類型,參數(shù)列表相同的方法時要覆蓋此方法 簡述this和super的功能和用法 this :
能訪問除構(gòu)造方法以外所有的屬性、方法,通過this.來調(diào)用方法和屬性 不可以在靜態(tài)方法中使用,在調(diào)用其它構(gòu)造方法時,必須放在該構(gòu)造方法的第一行
在構(gòu)造方法中使用this(參數(shù)列表),相當(dāng)于調(diào)用本類的其它構(gòu)造方法,它必須作為構(gòu)造方法的第一句
super :訪問父類
super.點取父類中被子類隱藏的方法和屬性,通過 super(參數(shù)列表)來調(diào)用父類的屬性和方法,在調(diào)用父類的構(gòu)造方法時必須放在子類構(gòu)造方法里的第一行;
如何確定在多態(tài)的調(diào)用中,究竟是調(diào)用的那個方法? new的是哪一個類就是調(diào)用的哪個類的方法。
請描述方法定義的完整的語法結(jié)構(gòu)
權(quán)限修飾符 修飾符 返回類型 方法名(參數(shù))例外{
方法體;}
什么是重載?
在一個類中出現(xiàn)方法名相同,但參數(shù)列表不同時,這種情況就是重載。
簡述重載的規(guī)則 方法名稱必須相同;
參數(shù)列表必須不同(個數(shù)不同,或類型不同,或參數(shù)排列順序不同); 與返回類型無關(guān);
什么是方法的覆蓋?什么情況下出現(xiàn)? 方法覆蓋:
子類可以修改從父類繼承過來的行為,也就是說子類可以創(chuàng)建一個與父類方法有不同功能的方法,但具有相同的:名稱、返回類型名和參數(shù)列表。
在父子類的情況下出現(xiàn)時。
方法覆蓋的規(guī)則?
方法名要和父類中被覆蓋的方法名相同,返回類型相同,參數(shù)列表相同。訪問權(quán)限要大于等于被覆蓋方法的權(quán)限。例外列表要小于等于被覆蓋方法的例外列表。
static修飾符的功能是?可以用在什么地方?怎么訪問? static 修飾符功能:
共用一塊內(nèi)存區(qū)域,也就是用static修飾的變量或成員方法對所有類的實例都是相同的 靜態(tài)成員方法和靜態(tài)變量的優(yōu)點在于他們能在沒有創(chuàng)建類的任何一個實例的情況下被引用??梢杂迷诜椒ɑ?qū)傩陨?訪問方式:
直接使用類名調(diào)用
new 一個實例,用實例調(diào)用
static的基本規(guī)則
類中的靜態(tài)方法只可以調(diào)用靜態(tài)的屬性和方法,不允許調(diào)用非靜態(tài)的屬性和方法。靜態(tài)變量為類變量,可以用類名直接調(diào)用靜態(tài)的屬性和方法。靜態(tài)方法中不允許出現(xiàn)this和super 構(gòu)造方法不允許聲明static 非靜態(tài)變量為實例變量,通過實例調(diào)用 靜態(tài)方法不能被非靜態(tài)方法覆蓋
final修飾符的功能是?可以用在什么地方? 功能:final標(biāo)記所有通用的功能,不能隨意更改
可以用在類、屬性和方法上
final的基本規(guī)則
final修飾的類不能被繼承
final修飾的成員變量只允許賦值一次,且只能通過構(gòu)造方法里賦值。final修飾的局部變量即為常量,只能賦值一次。final修飾的方法不允許被子類覆蓋。
什么是抽象方法,什么是抽象類
用abstract修飾的方法,只有方法的聲明,而沒有方法的實現(xiàn),就叫抽象方法。
用abstract修飾的類,就叫抽象類。
抽象類的規(guī)則
抽象類內(nèi)部可以沒有抽象方法 必須用abstract修飾
不能夠直接使用抽象類,必須通過子類繼承并且實現(xiàn) 抽象方法不允許被private修飾
什么情況下使用抽象類
當(dāng)一個類的一個或多個方法是抽象方法時;
當(dāng)類是一個抽象類的子類,并且不能為任何抽象方法提供任何實現(xiàn)細節(jié)或方法體時; 當(dāng)一個類實現(xiàn)一個接口,并且不能為任何抽象方法提供實現(xiàn)細節(jié)或方法體時;
equals方法和”= =”的功能和區(qū)別 功能:判斷對象是否相等
區(qū)別:
equals方法比較的是對象的值
= =:比較的是對象值的內(nèi)存地址,對基本數(shù)據(jù)類型來說= =比較的是數(shù)值
toString方法的功能和基本寫法 返回一個String類型
public String toString(){
return “”;
}
String的方法的功能和基本使用方法,請描述5個以上
substring(參數(shù)1,參數(shù)2);功能:取字符串中參數(shù)1到參數(shù)2的的所有字符;“String”.subString(0,1);
replace(參數(shù)1,參數(shù)2);功能:用參數(shù)1中的值替換字符串中所有參數(shù)2的值 “String”.replace(ing,tt);
equals();功能:判斷兩個字符串是否相等 “String”.equals(“tt”);trim();功能:去掉字符串兩邊的空格 “String”.trim();
indexof();功能:查找字符串中參數(shù)所在位置,并返回字符串第一個出該參數(shù)的下標(biāo)
“String”.indexOf(“ing”);
split();功能:根據(jù)參數(shù)分割該字符串 “String”.split(“-”);
為什么使用StringBuffer類?有什么功能和優(yōu)點? –只創(chuàng)建一個對象
–StringBuffer 對象的內(nèi)容是可以被修改的
–除了字符的長度之外,還有容量的概念
–通過動態(tài)改變?nèi)萘康拇笮?,加速字符管?/p>
舉例說明如何使用StringBuffer StringBuffer sb = new StringBuffer();
sb.append(“aaa”);
如何使用Java讀寫系統(tǒng)屬性? 讀:
Properties props = System.getProperties();
Enumeration prop_names = props.propertyNames();
while(prop_names.hasMoreElements()){
String prop_name =(String)prop_names.nextElement();
String property = props.getProperty(prop_name);
System.out.println(“Property ‘” + prop_name + “‘ is ‘”+ property + “‘”);}
寫:
System.setProperties(props);
簡述properties文件的結(jié)構(gòu)和基本用法
結(jié)構(gòu):擴展名為properties的文件,內(nèi)容為key、value的映射,例如”a=2″
用法:
public class Test {
public static void main(String args[]){ try {
String name = “test.properties”;
InputStream in = new BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);
System.out.println(“a的值==” + p.getProperty(“a”));
} catch(Exception err){
err.printStackTrace();} } }
什么是接口?接口的定義規(guī)則?
接口是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。
public interface Tt {
public void outPut();
public int tt();}
接口的作用?為什么使用接口? 多重繼承
封裝、隔離
功能,實現(xiàn)的分離
多態(tài)
便于后期維護
接口是可插入性的保證。
什么是多重接口
就是一個類實現(xiàn)多個接口
描述接口的基本思想? 封裝 隔離
接口及相關(guān)機制的最基本作用在于:通過接口可以實現(xiàn)不相關(guān)類的相同行為,而不需考慮這些類之間的層次關(guān)系。
根據(jù)接口可以了解對象的交互界面,而不需了解對象所屬的類。
面向?qū)ο蟪绦蛟O(shè)計講究”提高內(nèi)聚,降低耦合”。
如何在代碼中使用接口?
public class MyCast implements Tt{
public void outPut(){}
public int tt(){
return 0;} }
舉例說明如何把接口當(dāng)作類型使用 public interface Animal(){
public void tt();}
public class Dog implements Animal{
public void tt(){} }
Animal ani = new Dog();
如何選擇接口和抽象類?為什么? 優(yōu)先選用接口,盡量少用抽象類
在下列情況下選擇抽象類:需要定義子類的行為,又要為子類提供共性的功能。
什么是異常,異常的分類?
程序中導(dǎo)致程序中斷的一些情況叫做異常,一般程序員可以處理。
異常分為運行時異常和非運行時異常(一般異常)
運行時異常是指因設(shè)計或?qū)崿F(xiàn)方式不當(dāng)導(dǎo)致的問題。也可以說,是程序員的原因?qū)е碌?,本來可以避免發(fā)生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現(xiàn)這些異常的代碼不需要try塊包圍。
非運行時異常是指除運行時異常以外所有的異常,出現(xiàn)這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,簡述處理異常的兩種方式?
拋出(throws)和catch語句處理
簡述try塊的功能和規(guī)則
try塊內(nèi)部一般寫一些編程人員認為可能會出現(xiàn)異常的代碼,使程序運行時不會因為出現(xiàn)異常而中斷。
簡述catch塊的功能和規(guī)則
功能:可以截獲所聲明的異常,并在語句塊內(nèi)對其進行處理
規(guī)則:catch(Exeption e){
e.printStackTrace();
}
簡述finally塊的功能和規(guī)則
finally塊一般寫一些不論是否發(fā)生異常都必須執(zhí)行一次的代碼
例如關(guān)閉與數(shù)據(jù)庫的連接等
簡述throw和throws的功能和使用方法 throw 指編程人員主動拋出一個異常
throw new NullPointerExeption();
throws指程序遇到異常情況自動的被動拋出一個異常
public void test()throws Exeption{}
異常的分類? 錯誤(Error): JVM 系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況,程序員不可控制
例外(Exception):其它因編程錯誤或偶然的外在因素導(dǎo)致的一般性問題,程序可以控制
什么是預(yù)定義異常
java程序中預(yù)先定義好的異常叫做預(yù)定義異常
簡述自定義異常的規(guī)則 寫一個類繼承Exception
用戶自定義異常通常屬Exception范疇,依據(jù)慣例,應(yīng)以Exception結(jié)尾,應(yīng)該由人工創(chuàng)建并拋出。
什么是斷言?
用來證明和測試程序的假設(shè)。
如何使用斷言?舉例說明
一種是assert<<布爾表達式>>;另一種是assert<<布爾表達式>>:<<細節(jié)描述>>。
assert a= =10 : “這里a等于10″;
集合框架
什么是集合?什么是元素? 可以包含其他對象的簡單對象就叫集合
集合框架中所包含的對象就叫做元素
描述出Java集合框架中集合的接口關(guān)系 Collection—-Set和List
Set—-HashSet和SortedSet
List—-ArrayList和LinkedList
Map—-HashMap、SortedMap和TreeMap
代碼示例:Collection接口的使用,包括如何定義、初始化、賦值、取值、修改值除值 Collection col = new ArrayList();
String oldValue = “abcd”;
String newValue = “1234″;
//增加
col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
//取值
String str =(String)it.next();
if(str.equals(oldValue)){
//刪除
col.remove(oldValue);//修改
col.add(newValue);} }
代碼示例:List接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值 List col = new ArrayList();
String oldValue = “abcd”;
String newValue = “1234″;
col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
String str =(String)it.next();
if(str.equals(oldValue)){
col.remove(oldValue);
col.add(newValue);} }
代碼示例:Set接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值 Set col = new HashSet();
String oldValue = “abcd”;
String newValue = “1234″;col.add(oldValue);
Iterator it = col.iterator();
while(it.hasNext()){
String str =(String)it.next();
if(str.equals(oldValue)){
col.remove(oldValue);
col.add(newValue);} }
代碼示例:Map接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪 Map map = new HashMap();
String oldValue = “abcd”;
String newValue = “1234″;
//增加
map.put(“1″,oldValue);
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key =(String)it.next();
//取值
String value = map.get(key);}
//修改
map.put(“1″,newValue);
//刪除
map.remove(“1″);}
描述List接口、Set接口和Map接口的特點 List接口中的對象按一定順序排列,允許重復(fù)
Set接口中的對象沒有順序,但是不允許重復(fù)
Map接口中的對象是key、value的映射關(guān)系,key不允許重復(fù)
如何給集合排序? 實現(xiàn)comparable接口
IO 什么是流?可畫圖說明
流是要傳輸?shù)臄?shù)據(jù)在源和目的地之間運行的軌跡。
描述I/O流的基本接口和類的結(jié)構(gòu)
代碼示例:使用URL流,讀取網(wǎng)頁代碼 import java.io.*;import java.net.URL;import java.net.URLConnection;public class ReadURL { public static void main(String[] args)throws Exception { URL url = new URL(“http://bbs.tarena.com.cn”);//建立封裝統(tǒng)一資源定位符的類 URLConnection uc = url.openConnection();//打開連接
InputStreamReader isr = new InputStreamReader(uc.getInputStream());BufferedReader br = new BufferedReader(isr);
//傳輸數(shù)據(jù) while(true){ String temp = br.readLine();if(temp==null){ break;} System.out.println(temp);} br.close();} }
什么是Unicode?
是一種字符的編碼方式,占16位字節(jié),Java 技術(shù)使用 Unicode 來表示字符串和字符。
代碼示例:如何使用Reader和Writer來進行輸入輸出 //Writer寫入操作
FileOutputStream fos=new FileOutputStream(“a.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
bw.write(“歡迎來到j(luò)ava快車”);
bw.close();
//Reader讀取操作
FileInputStream fis=new FileInputStream(“a.txt”);
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
System.out.println(str);
什么叫保持?什么是可序列化?如何實現(xiàn)可序列化?
將一個對象存放在某種類型的永久存儲器上(比如硬盤,光盤,軟盤等),稱為保持。標(biāo)識一個類可以被持久化,叫序列化,也叫串行化或持久化。表示這個類中的數(shù)據(jù)可以按流式輸出。
實現(xiàn)可序列化的方法:實現(xiàn)java.io.Serializable接口。
代碼示例:如何讀寫對象流 //讀
try {
String str = “123″;
FileOutputStream f = new FileOutputStream(“test.txt”);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(str);
f.close();
}catch(Exception e){
e.printStackTrace();} //寫
try {
FileInputStream f = new FileInputStream(“test.txt”);
ObjectInputStream s = new ObjectInputStream(f);
str =(String)s.readObject();
f.close();
}catch(Exception e){
e.printStackTrace();}
簡述File類的基本功能
處理文件和獲取文件信息;文件或文件夾的管理。
概括一句話就是:除了讀寫文件內(nèi)容其他的都可以做。
代碼示例:如何使用隨機文件讀寫類來讀寫文件內(nèi)容 RW表示文件時可讀寫的
讀:
try{
RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);
long len = 0L;
long allLen = f.length();
int i = 0;
while(len < allLen){
String s = f.readLine();
if(i > 0){
col.add(s);} i++;
//游標(biāo)
len = f.getFilePointer();} }catch(Exception err){
err.printStackTrace();}
寫:
try{
RandomAccessFile f = new RandomAccessFile(“test.txt”, “rw”);
StringBuffer buffer = new StringBuffer(“n”);
Iterator it = col.iterator();
while(it.hasNext()){
buffer.append(it.next()+ “n”);
}
f.writeUTF(buffer.toString());
}catch(Exception err){
err.printStackTrace();}
代碼示例:如何使用流的基本接口來讀寫文件內(nèi)容 try{
DataInputStream in =
new DataInputStream(new BufferedInputStream(new FileInputStream(“Test.java”)));
String currentLine=null;
while((currentLine = in.readLine())!= null){
System.out.println(currentLine);}
}catch(IOException e){
System.err.println(“Error: ” + e);
}
多線程
什么是線程? 輕量級的進程
線程的三個部分是? 處理機
代碼
數(shù)據(jù)
為什么使用多線程 使UI響應(yīng)更快
利用多處理器系統(tǒng)
簡化建模
代碼示例:Java中實現(xiàn)多線程的兩種方式,包括如何定義多線程,如何使用多線程 實現(xiàn)Runnable接口
class Thread1 implements Runnable{
public void run(){
//run里一般寫一個while(true)循環(huán)
System.out.println(“Runnable“);
} }
public class Test{
public static void main(String[] a){
Thread1 r = new Thread1();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
} }
繼承Thread
class Thread2 extends Thread{
public void run(){
System.out.println(“extends“);} }
public class Test{
public static void main(String[] a){
Thread t = new Thread2();
t.start();
}
}
如何實現(xiàn)線程的調(diào)度?如何暫停一個線程的運行 調(diào)度用wait和notify,—-
sleep()
什么是線程的優(yōu)先級
判斷哪個線程先執(zhí)行的級別
簡述sleep方法和wait方法的功能和區(qū)別 sleep是讓線程休眠一段時間
wait是讓線程掛起
什么是守候線程
隱藏在后臺持續(xù)運行的線程
什么是臨界資源
指多個線程共享的資源
什么是互斥鎖,Java中如何實現(xiàn)
用來保證在任一時刻只能有一個線程來訪問臨界資源的那個標(biāo)記
在Java中使用
用在對象前面限制一段代碼的執(zhí)行
用在方法聲明中,表示整個方法為同步方法。
什么是死鎖?如何避免?
如果程序中有多個線程競爭多個資源,就可能會產(chǎn)生死鎖。當(dāng)一個線程等待由另一個線程持有的鎖,而后者正在等待已被第一個線程持有的鎖時,就會發(fā)生死鎖。
要避免死鎖,應(yīng)該確保在獲取多個鎖時,在所有的線程中都以相同的順序獲取鎖。盡量少用臨界資源。
簡述wait和notify,notifyAll的使用
被鎖定的對象可以調(diào)用wait()方法,這將導(dǎo)致當(dāng)前線程被阻塞并放棄該對象的互斥鎖,即解除了wait()方法的當(dāng)前對象的鎖定狀態(tài),其他的線程就有機會訪問該對象。
notify使等待隊列上的一個線程離開阻塞狀態(tài)
notifyAll使等待隊列上的所有線程離開阻塞狀態(tài)
Socket編程
什么是url?基本的格式是? 統(tǒng)一資源定位器
Http://004km.cn:port
簡述IP,Port,TCP的基本功能 IP代表網(wǎng)絡(luò)位置
Port代表端口號
TCP可保證不同廠家生產(chǎn)的計算機能在共同網(wǎng)絡(luò)環(huán)境下運行,解決異構(gòu)網(wǎng)通信問題,是目前網(wǎng)絡(luò)通信的基本協(xié)議
簡述Java網(wǎng)絡(luò)模型的基本功能 描述服務(wù)端和客戶端的連接過程
簡述Java網(wǎng)絡(luò)編程究竟做些什么?如何做? 1.建立連接
2.準備輸出的數(shù)據(jù),流式輸出
3.流式輸入,編程業(yè)務(wù)需要的格式
4.關(guān)閉連接
服務(wù)器分配一個端口號。如果客戶請求一個連接,服務(wù)器使用accept()方法打開socket連接。
客戶在host的port端口建立連接。
服務(wù)器和客戶使用InputStream和OutputStream進行通信。
代碼示例:基于Socket編程 try {
ServerSocket s = new ServerSocket(8888);
while(true){
Socket s1 = s.accept();OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(“Hello,” +s1.getInetAddress()+ “port#” + s1.getPort()+ “nbye!”);
dos.close();
s1.close();}
}catch(IOException e){
System.out.println(“程序運行出錯:” + e);}
TCP和UDP區(qū)別
TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)是傳輸層協(xié)議
TCP是面向連接的可靠數(shù)據(jù)傳輸協(xié)議,能保證傳輸內(nèi)容的完整和準確;數(shù)據(jù)傳輸?shù)妮o助開銷大,效率低
UDP: 是無連接的,不可靠地傳輸協(xié)議,不能保證傳輸內(nèi)容的完整和準確,對信息的適時要求比較高
設(shè)計模式
什么是設(shè)計模式?
就是經(jīng)過實踐驗證的用來解決特定環(huán)境下特定問題的解決方案。
設(shè)計模式用來干什么? 尋找合適的對象
決定對象的粒度
指定對象的接口
描述對象的實現(xiàn)
運用復(fù)用機制
重復(fù)使用經(jīng)過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少工作量、提高正確率等目的什么是對象粒度
對象中方法的大小就是粒度
基本的Java編程設(shè)計應(yīng)遵循的規(guī)則? 面向接口編程,優(yōu)先使用對象組合設(shè)計模式的應(yīng)用范圍
所能解決的特定的一類問題中
簡述什么是單例模式,以及解決的問題,應(yīng)用的環(huán)境,解決的方案,應(yīng)用時應(yīng)注意什么? 解決的問題:在任何時間內(nèi)只有一個類實例存在的模式。
應(yīng)用環(huán)境:需要有一個從中進行全局訪問和維護某種類型數(shù)據(jù)的區(qū)域的環(huán)境下使用單例模式。
解決方案:保證一個類只有一個類實例存在。
本質(zhì):控制實例的數(shù)量。
注意:要合理的使用單例,避免單例成為瓶頸。
代碼示例:單例模式的兩種實現(xiàn)方法,并說明優(yōu)缺點 public class Test{
private static Test test = new Test();
public Test(){
}
public static Test getInstance(){
return test;} }
public class Test{
private static Test test = null;
private Test(){
}
public static Test getInstance(){
if(test==null){
test = new Test();
}
return test;
} }
第一種方式:裝載類的時候就創(chuàng)建類的實例,用空間換時間。
第二種方式:延遲裝載,不需每次都創(chuàng)建一個類實例,而只是在第一次使用時創(chuàng)建,有效的利用資源,用時間換資源。
簡述什么是工廠模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì) 利用工廠來解決接口選擇的問題的模式。
應(yīng)用環(huán)境:當(dāng)一個類無法預(yù)料要創(chuàng)建哪種類的對象或是一個類需要由子類來指定,創(chuàng)建的對象時,就需要用到工廠模式。
解決方案:定義一個創(chuàng)建對象的類,在類的方法中決定具體實例化哪一個類。
本質(zhì):就是根據(jù)不同的情況來選擇不同的實現(xiàn)類,重在選擇。
代碼示例:工廠模式的實現(xiàn)方法 單獨是使用工廠:
public class Factory{
public static Sample creator(int which){
if(which==1){
return new SampleA();
}else if(which==2)
return new SampleB();
}
}
}
工廠+單例:
public class MyFactory{
public static MyFactory f = null;
public MyFactory(){ }
public static MyFactory getInstance(){
if(f==null){
f=new MyFactory();} }
public DBDAO getDAO(){
return new DBDAOImpl();} }
簡述什么是值對象模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì) 用來把一組數(shù)據(jù)封裝成一個對象的模式
解決問題:在遠程方法的調(diào)用次數(shù)增加的時候,相關(guān)的應(yīng)用程序性能將會有很大的下降
解決方案:使用值對象的時候,可以通過僅僅一次方法調(diào)用來取得整個對象,而不是使用多次方法調(diào)用以得到對象中每個域的數(shù)值
本質(zhì):封裝數(shù)據(jù)。
代碼示例:值對象模式的實現(xiàn)方法 步驟:
public class UserModel{
private String userId;
private String userName;
public void setUserId(String id){
this.userId = id;
}
public String getUserId(){
return userId;
}
public void setUserName(String name){
this.userName = name;
}
public String getUserName(){
return userName;
}
}
簡述什么是DAO模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì) 數(shù)據(jù)訪問對象
解決問題:根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問也不同。根據(jù)存儲的類型(關(guān)系數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫、純文件等)和供應(yīng)商實現(xiàn)不同,持久性存儲(如數(shù)據(jù)庫)的訪問差別也很大。如何對存儲層以外的模塊屏蔽這些復(fù)雜性,以提供統(tǒng)一的調(diào)用存儲實現(xiàn)。程序的分布式問題
解決方案:將數(shù)據(jù)訪問邏輯抽象為特殊的資源,也就是說將系統(tǒng)資源的接口從其底層訪問機制中隔離出來;通過將數(shù)據(jù)訪問的調(diào)用打包,數(shù)據(jù)訪問對象可以促進對于不同數(shù)據(jù)庫類型和模式的數(shù)據(jù)訪問。
本質(zhì):分層,是系統(tǒng)組件和數(shù)據(jù)源中間的適配器。(一層屏蔽一種變化)
代碼示例:DAO模式的實現(xiàn)方法
什么是框架?框架的優(yōu)點?
框架是能夠完成一定功能的半成品
1.優(yōu)點:完成一定的功能、提供一個精良的應(yīng)用程序架構(gòu)
2.框架都是以接口的形式出現(xiàn)
3.應(yīng)該了解框架完成的功能、框架的API接口、框架的功能是怎么實現(xiàn)的什么是開放-封閉法則(OCP)可擴展但是不可以更改已有的模塊
對擴展是開放的,對修改是封閉
什么是替換法則(LSP)使用指向基類(超類)的引用的函數(shù),必須能夠在不知道具體派生類(子類)對象類型的情況下使用。
如何綜合使用我們學(xué)過的設(shè)計模式來構(gòu)建合理的應(yīng)用程序結(jié)構(gòu)
是采用接口進行隔離,然后同時暴露值對象和工廠類,如果是需要數(shù)據(jù)存儲的功能,又會通過DAO 模式去與數(shù)據(jù)存儲層交互。
構(gòu)建常用的合理的Java應(yīng)用包結(jié)構(gòu) Ui(表現(xiàn)層)
business–factory,ebi,ebo
dao–factory,dao,impl
awt、swing 什么是GUI中的容器?什么是GUI中的組件?
容器:能包含其他container和其他component的component。
組件:在設(shè)計上能實現(xiàn)一定功能的封裝體;
簡述AWT中的Frame、Panel和組件的關(guān)系
組件放在Panel上,而多個Panel可以疊加到Frame上,F(xiàn)rame一般只有一個,各個Panel可以互相在Frame上切換
簡述如何使用一個組件
初始化,加到容器中,注冊事件,實現(xiàn)相應(yīng)的事件
Panel pan = new Panel();
TextField td = new TextField();
td.setText(“this is in a TextField.”);
pan.add(td);
描述一個GUI界面的基本構(gòu)成? Frame,Panel,組件
Popmenu
如何控制外觀,如顏色、字體等? 可使用setColor(),setFont()方法
例如: Frame f = new Frame();
Font font = new Font(“TimesRoman”, Font.PLAIN, 14);
f.setColor(Color.red);
f.setFont(f);
什么是布局管理器?
用來管理GUI界面中組件的分布情況,負責(zé)決定布局方針以及其容器的每一個子組件的大小
描述每種布局管理器的基本特點
FlowLayout 從左到右分布,排滿推到下一行
BorderLayout 上下左右中分布
CardLayout 卡片式分布
GridLayout 網(wǎng)格式分布
XYLayout 坐標(biāo)分布
什么是JFC(Java基礎(chǔ)類)?
是關(guān)于GUI組件和服務(wù)完整集合,主要包括5個API:
AWT,JavaD,Accessibility,Drag&Drop,Swing
提供了幫助開發(fā)人員設(shè)計復(fù)雜應(yīng)用程序的一整套應(yīng)用程序開發(fā)包;
Swing和AWT的區(qū)別?
Swing提供了更完整的組件,引入了許多新的特性和能力。Swing API是圍繞著實現(xiàn)AWT 各個部分的API 構(gòu)筑的。
AWT 采用了與特定平臺相關(guān)的實現(xiàn),而絕大多數(shù)Swing 組件卻不是這樣做的,因此Swing 的外觀和感覺是可客戶化和可插的。
什么是雙緩沖?
在后臺進行界面的更新,然后在前臺進行界面交換
功能:雙緩沖可以改善一個被頻繁改變的組件的外觀
描述GUI的事件機制
事件源:是一個事件的產(chǎn)生者,或產(chǎn)生事件的組件對象
事件監(jiān)聽器:調(diào)用事件處理方法的對象
事件處理器:就是一個接收事件、解釋事件并處理用戶交互的方法。
描述Swing應(yīng)用程序的基本結(jié)構(gòu)? 組件定義
初始化界面
各種事件處理方法
各種適配類
描述表現(xiàn)層的基本功能? 展示數(shù)據(jù)
人機交互
收集參數(shù)、調(diào)用邏輯層api
描述在開發(fā)Swing應(yīng)用程序中,一般都要寫那些代碼?都寫到什么地方? 一般要在類的初始化的時候給組件賦值,寫在jinit的方法里面
一般要在按扭的事件處理中寫收集參數(shù),組織參數(shù),調(diào)用業(yè)務(wù)接口的方法
對于GUI組件而言,最主要的方法是哪些? 初始化
如何給組件初始化
如何從組件中取值
設(shè)計組件的屬性
如何學(xué)習(xí)GUI組件的用法?
主要學(xué)會組件的定義、取值、賦值的方法
類比學(xué)習(xí)
JavaScript
什么是Javascript JavaScript是一種基于對象(Object)和事件驅(qū)動(Event Driven)并具有安全性能的腳本語言。
Java和Javascript的區(qū)別
1、基于對象和面向?qū)ο?/p>
Java是一種真正的面向?qū)ο蟮恼Z言,即使是開發(fā)簡單的程序,必須設(shè)計對象。
JavaScript是種腳本語言,它可以用來制作與網(wǎng)絡(luò)無關(guān)的,與用戶交互作用的復(fù)雜軟件。它是一種基于對象(Object Based)和事件驅(qū)動(Event Driver)的編程語言。因而它本身提供了非常豐富的內(nèi)部對象供設(shè)計人員使用。
2、解釋和編譯
兩種語言在其瀏覽器中所執(zhí)行的方式不一樣。Java的源代碼在傳遞到客戶端執(zhí)行之前,必須經(jīng)過編譯,因而客戶端上必須具有相應(yīng)平臺 上的仿真器或解釋器,它可以通過編譯器或解釋器實現(xiàn)獨立于某個特定的平臺編譯代碼的束縛。
JavaScript是一種解釋性編程語言,其源代碼在發(fā)往客戶端執(zhí)行之前不需經(jīng)過編譯,而是將文本格式的字符代碼發(fā)送給客戶編由瀏覽器 解釋執(zhí)行。
3、強變量和弱變量
兩種語言所采取的變量是不一樣的。
Java采用強類型變量檢查,即所有變量在編譯之前必須作聲明。
JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,而是解釋器在運行時檢查其數(shù)據(jù)類型,4、代碼格式不一樣
Java是一種與HTML無關(guān)的格式,必須通過像HTML中引用外媒體那么進行裝載,其代碼以字節(jié)代碼的形式保存在獨立的文檔中。
JavaScript的代碼是一種文本字符格式,可以直接嵌入HTML文檔中,并且可動態(tài)裝載。編寫HTML文檔就像編輯文本文件一樣方便。
5、嵌入方式不一樣
在HTML文檔中,兩種編程語言的標(biāo)識不同,JavaScript使用來標(biāo)識,而Java使用來標(biāo)識。
6、靜態(tài)聯(lián)編和動態(tài)聯(lián)編
Java采用靜態(tài)聯(lián)編,即Java的對象引用必須在編譯時的進行,以使編譯器能夠?qū)崿F(xiàn)強類型檢查。
JavaScript采用動態(tài)聯(lián)編,即JavaScript的對象引用在運行時進行檢查,如不經(jīng)編譯則就無法實現(xiàn)對象引用的檢查。
Javascript的運行環(huán)境 具備javascript運行器的如何在web頁面加入Javascript,請寫出兩種方式并示例
第五篇:一個程序員應(yīng)該具備的基礎(chǔ)知識和概念
一個程序員應(yīng)該具備的基礎(chǔ)知識和概念
1、計算機是有什么組成的,CPU是什么東西,其工作原理是什么。(對于這些以及下面將要提到的概念我不會告訴你什么答案,你可以看相應(yīng)的教材,關(guān)于教材我會在下一部分詳述,記住理解最重要?。?/p>
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C,C++,Basic,Pascal,F(xiàn)ortran,C#,Java等等;如果你是中國軟件業(yè)的英雄,你也寫一門語言,最好不用英語)
6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)
7、HTML、XML等是標(biāo)識性語言。
8、Prolog是人工智能語言。
9、操作系統(tǒng)OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)
10、Windows編程說白了就是Windows API的調(diào)用。(中國的程序員很多只是會編windows程序,用的是VB,我的建議是這些程序員頂多只是低級編碼員,我稱其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環(huán)境,不是編程語言。
12、面向結(jié)構(gòu)的設(shè)計概念。
13、面向?qū)ο蟮母拍?。(好好理解,兄弟,這個東西還是很重要的)
14、軟件工程的概念和原理。(如果你想當(dāng)老總就需要好好研究了,系統(tǒng)分析員比編碼員要高一個等級,薪水也高喲)
15、數(shù)據(jù)庫的概念。(要熟悉一些著名的數(shù)據(jù)庫系統(tǒng)和語言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解網(wǎng)絡(luò)概念。
17、了解多媒體概念。
18、熟悉和掌握數(shù)據(jù)結(jié)構(gòu)和基本算法。
19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學(xué)習(xí),一個月以后你就會有一個基本的概念;兩個月以后你就會感覺自己有了全面的基礎(chǔ)知識;當(dāng)你知道編程序是怎么回事時,說明你已經(jīng)入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其后塵吧。要有信心和耐心。沉不住氣怎么能成大事??。?/p>
教材推薦
――-推薦的教材主要還是針對概念來的,最好選用名校的教學(xué)用書。
1、《計算機組成原理》(熟悉)
2、《數(shù)據(jù)結(jié)構(gòu)》(掌握)
3、《操作系統(tǒng)》(了解->熟悉)
4、《The C language》(掌握)
5、《編譯原理》(了解原理)
6、《匯編語言》(了解)
7、《計算機網(wǎng)絡(luò)》(了解)
8、《軟件工程》(了解)
9、《關(guān)系數(shù)據(jù)庫》(熟悉)
10、《The C++Languege 》(掌握)
11、《面向?qū)ο笤O(shè)計》(掌握;結(jié)合C++學(xué)習(xí))
一些經(jīng)驗和體會
1、真正的程序員用C++;(一位專家說的)
2、動手去編程序;
3、動腦去思考;
4、要有良好的編程風(fēng)格;
5、讀書,讀好書,盡量讀原版書?。ㄎ曳磸?fù)強調(diào)這一點,讀書要有選擇,堅持讀好書,名家出的經(jīng)典書,不要浪費實踐在一些粗制濫造的書上面;堅持博覽群書)
6、有自己的學(xué)習(xí)計劃;
7、總結(jié)自己的經(jīng)驗教訓(xùn);(準備一個筆記本,記錄錯誤和心得)
8、不要怕學(xué)新東西;
9、要有軟件工程的思想;
10、善于發(fā)現(xiàn)問題,然后去尋找答案;
11、向高手請教;(要虛心直到你成為高手)
12、和同行交流;(不善于交流肯定不行)
13、懂得軟件的實質(zhì),不要被千變?nèi)f化的表象所迷惑;
14、真正要學(xué)習(xí)用的是編程語言和方法,不是什么庫,什么類,什么工具;(學(xué)用那些什么庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)
15、學(xué)習(xí)wiodows編程主要是學(xué)習(xí)windows OS和win32 API;
16、有空了解一下嵌入式開發(fā);
17、有空了解一下PDA軟件開發(fā);
18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;
19、要有耐心,不要作浮躁的人; 20、對程序加注釋,并保留你的老程序;
21、學(xué)到的東西越多,了解的越多,你就越接近專家;
22、有空去逛逛CSDN,那里有你很多知己;
23、要有信心成為一個優(yōu)秀的程序;
一些好書的推薦
1、《The C Programming language》(Keinighan & Dennis Ritchie 1988)
2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)
3、《Inside The C++ Object Model》(lippmans)
4、《Effective C++》(同上)
5、《More Effective C++》(同上)
6、《Exceptional c++》
7、《C++面向?qū)ο蟾咝Ь幊獭?/p>
8、《設(shè)計模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推薦)
11、《The Art of Computer Programming 》
12、《Programming Windows》(Charles Petzold)
13、《VC++5.0技術(shù)內(nèi)幕》
14、《MFC 深入淺出》
15、《軟件需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序員參考手冊》
19、《用TCP/IP進行網(wǎng)際互連》
20、《COM 本質(zhì)論》