第一篇:java程序員基礎知識
目前,JAVA是開發(fā)人員的熱寵,很多論壇都有不少熱愛JAVA的開發(fā)人員,也有不少想成為JAVA程序員,但苦于不知道該如何學習,也不清楚該學些什么知識才能成為一個JAVA程序員。本人在這里拋磚引玉,和大家討論成為一個JAVA初級程序員應該具有的知識,與大家共享。
個人認為想成為一個合格的JAVA初級程序員應該具備如下知識:
一、面向對象的知識:JAVA是一個面向對象的開發(fā)語言,因此熟悉面向對象對學習JAVA很有必要,您要了解:什么是對象,什么是類;什么是封裝,什么是多態(tài),什么是繼承;什么是抽象類,什么是接口。了解了概念后,您還需要這些概念是如何體現(xiàn)的,如類和對象有什么區(qū)別?類是如何封裝的?
二、JAVA語法:如果您已經(jīng)有了開發(fā)經(jīng)驗,恭喜您,您學習JAVA語法來將比較容易。如果您有C++等面向對象語言的開發(fā)經(jīng)驗,您只需簡單的翻看一下介紹JAVA的相關書籍就可以了。如果您是新手,沒有關系,您下些工夫,好好研究一本JAVA初級教程之類的書就可以了。
學習了JAVA語法,加上面向對象的知識,只有您用心,您就可以寫出來比較好的JAVA代碼了。如果您再抽出時間熟悉一下JAVA編程規(guī)范,您代碼的水平就應該不俗了。
三、JSP和HTML:在我國的絕大多數(shù)公司,做JAVA程序員都少不了和JSP以及HTML打交道。因此,想成為JAVA程序員就不可避免的要熟悉JSP和HTML,您最好能知道JSP的幾個內置對象,如Session,Request,Reponse,以及常用的JSP標簽,如
include,userBean等。盡管一些工具會幫您生成HTML代碼,但您還是要熟悉比如title等。如果您再熟悉一下JS和CSS就更好了,那會使您制作的頁面更友好。
四、WebServer:熟悉了以上三種,可以肯定的說您已經(jīng)可以制作出來JSP頁面了,您也可以在您的頁面里使用自己開發(fā)的JAVA類,但您的頁面總要跑起來才能看到您要的效果,這就要求您必須熟悉一種WebServer,比如:TOMCAT等。您要熟悉如何發(fā)布您的應用,如何利用WebServer的數(shù)據(jù)庫資源等。
五、開發(fā)工具:大家都知道,開發(fā)工具可以幫助您更好更快地開發(fā),因此熟悉幾種開發(fā)工具很有必要。目前JAVA的開發(fā)工具比較流行的有Eclipse,HTML的開發(fā)工具有Dreamweaver等。
六、熟悉一種框架:熟悉一種框架其實是成為JAVA程序員的一種可選知識,但目前開發(fā)B/S結構的應用的開發(fā)小組,都差不多會采用一種框架來構建自己的應用系統(tǒng)??蚣芏紩性S多可重用的代碼,良好的層次關系和業(yè)務控制邏輯,基于框架的開發(fā)使你可以省出很多的開發(fā)成本。目前比較流行的框架有Struts和Spring等。
如何成為一名合格的java程序員?(轉)
程序學習2008-05-27 19:56閱讀35評論01、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據(jù)
報錯信息知道是什么樣的語法錯誤并且知道任何修正。
2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設置、插件的安裝配置以及進行調試。
4、API:Java的核心API是非常龐大的,但是有一些內容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
1)、java.lang包下的80%以上的類的功能的靈活運用。
2)、java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer。
3)、java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設計思路以及常用IO類的特性和使用場合。
4)、java.math包下的100%的內容。
5)、java.net包下的60%以上的內容,對各個類的功能比較熟悉。
6)、java.text包下的60%以上的內容,特別是各種格式化類。
7)、熟練運用JDBC。
8)、java.security包下40%以上的內容,如果對于安全沒有接觸的話根本就不可能掌握java。
9)、AWT的基本內容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。
10)、Swing的基本內容,和AWT的要求類似。
11)、XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內容處理。
5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用ant完成工程管理的常用任務,例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
第二篇:java程序員
如何迅速成為Java高手[Tomjava原創(chuàng)]
很多網(wǎng)友問我學習Java有沒有什么捷徑,我說“無他,唯手熟爾”。但是我卻很愿意將自己學習的一些經(jīng)驗寫出來,以便后來者少走彎路,幫助別人是最大的快樂嘛!
要想學好Java,首先要知道Java的大致分類。我們知道,自從Sun推出Java以來,就力圖使之無所不包,所以Java發(fā)展到現(xiàn)在,按應用來分主要分為三大塊:J2SE,J2ME和J2EE,這也就是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標準版,主要用于桌面應用軟件的編程;J2ME主要應用于嵌入是系統(tǒng)開發(fā),如手機和PDA的編程;J2EE是Java2的企業(yè)版,主要用于分布式的網(wǎng)絡程序的開發(fā),如電子商務網(wǎng)站和ERP系統(tǒng)。J2SE開發(fā)桌面應用軟件比起VC,VB,DEPHI這些傳統(tǒng)開發(fā)語言來說,優(yōu)勢好象并不明顯。J2ME對于初學者來說,好象又有點深奧,而且一般開發(fā)者很難有開發(fā)環(huán)境。所以現(xiàn)在應用最廣泛又最好學的就是J2EE了。J2EE又包括許多組件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要學習起來可不是一兩天的事。
那么又該如何學習J2EE呢?當然Java語法得先看一看的,I/O包,Util包,Lang包你都熟悉了嗎?然后再從JSP學起。如果你學過HTML,那么事情要好辦的多,如果沒有,那你快去補一補HTML基礎吧。其實JSP中的Java語法也不多,它更象一個腳本語言,有點象ASP。然后你就該學一學Servlet了。Servlet就是服務器端小程序,他負責生成發(fā)送給客戶端的HTML文件。JSP在執(zhí)行時,也是先轉換成Servlet再運行的。雖說JSP理論上可以完全取代Servlet,這也是SUN推出JSP的本意,可是Servlet用來控制流程跳轉還是挺方便的,也令程序更清晰。接下來你應該學習一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代碼的混亂方式了,這種方式跟ASP又有什么區(qū)別呢?還好,SUN提供了Javabean可以把你的JSP中的Java代碼封裝起來,便于調用也便于重用。接著就是EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean還是有區(qū)別的。它是一個體系結構,你可以搭建更安全、更穩(wěn)定的企業(yè)應用。它的大量代碼已由中間件(也就是我們常聽到的Weblogic,Websphere這些J2EE服務器)完成了,所以我們要做的程序代碼量很少,大部分工作都在設計和配置中間件上。至于JDBC,就不用我多說了,你如果用java編過存取數(shù)據(jù)庫的程序,就應該很熟悉。還有,如果你要用Java編發(fā)送電子郵件的程序,你就得看看Javamail了。
好了,對Java和J2EE有了一些基本概念之后,你就應該編一些程序了,千萬不要紙上談兵哦。最好找一些有實例且?guī)Ч獗P的書來看,這樣看到好的程序就可以直接Ctrl+C再Ctrl+V,也不用勞您老大架再親自把它再輸一遍吧,再說直接復制還不用怕出錯,何樂而不為呢!還有就是要經(jīng)常上一些好的Java編程文章,有好的文章要Cut下來,有問題盡管問,只要問題不是太傻,一般高手都會回答你的。下面介紹幾個好的Java方面的編程網(wǎng)站:
CSDN論壇 http:///那里Java資料比較全;
java.com.cnhttp://.cn/看這域名就知道有多牛,注冊用戶快接近一萬了,同時在線人數(shù)也在一千左右,人氣很旺的;
IBM的開發(fā)者網(wǎng)絡http://IBM永遠的藍色巨人;
那么我書也看了,程序也做了,別人問我的問題我都能解決了,是不是就成為高手了呢?當然沒那么簡單,這只是萬里長征走完了第一步。不信?那你出去接一個項目,你知道怎么下手嗎,你知道怎么設計嗎,你知道怎么組織人員進行開發(fā)嗎?你現(xiàn)在腦子里除了一些散亂的代碼之外,可能再沒有別的東西了吧!你現(xiàn)在最缺的是實際的工作經(jīng)驗,而不是書本上那些
憑空想出來的程序。所以你快去找一份Java的編程工作來做吧(如果是在校學生可以去做兼職?。?,在實踐中提高自己,那才是最快的。不過你得祈禱在公司里碰到一個高手,而且他還愿意不厭其煩地教你,這樣好象有點難哦!
還有一個辦法就是讀開放源碼的程序了。我們知道開放源碼大都出自高手,他們設計合理,考慮周到,再加上有廣大的程序員參與,代碼的價值自然是字字珠嘰,鏗鏘有力(對不起,偶最近《金裝四大才子》看多了)。學Java必讀的兩個開源程序就是Jive和Pet Store.。Jive是國外一個非常著名的BBS程序,完全開放源碼。論壇的設計采用了很多先進的技術,如Cache、用戶認證、Filter、XML等,而且論壇完全屏蔽了對數(shù)據(jù)庫的訪問,可以很輕易的在不同數(shù)據(jù)庫中移植。論壇還有方便的安裝和管理程序,這是我們平時編程時容易忽略的一部份(中國程序員一般只注重編程的技術含量,卻完全不考慮用戶的感受,這就是我們與國外軟件的差距所在)。Jive的資料在很多網(wǎng)站上都有,大家可以找來研究一下。相信你讀完代碼后,會有脫胎換骨的感覺。遺憾的是Jive從2.5以后就不再無條件的開放源代碼,同時有l(wèi)icence限制。不過幸好還有中國一流的Java程序員關注它,外國人不開源了,中國人就不能開源嗎?這里向大家推薦一個漢化的Jive版本—J道。Jive(J道版)是由中國Java界大名鼎鼎的banq在Jive 2.1版本基礎上改編而成, 全中文,增加了一些實用功能,如貼圖,用戶頭像和用戶資料查詢等,而且有一個開發(fā)團隊在不斷升級。你可以訪問banq的網(wǎng)站http:///去下載,或到同濟技術論壇的服務器上ftp://nro.shtdu.edu.cn去下,安裝上有什么問題,可以到論壇上去提問。Pet Store.(寵物店)是SUN公司為了演示其J2EE編程規(guī)范而推出的開放源碼的程序,應該很具有權威性,想學J2EE和EJB的朋友不要錯過了。
你一定會高興地說,哈哈,原來成為Java高手就這么簡單啊!記得Tomjava也曾碰到過一個項目經(jīng)理,號稱Java很簡單,只要三個月就可以學會。其實說這種話的人就如當年小日本號稱“三個月拿下中國”一樣大言不慚。不是Tomjava潑你冷水,你現(xiàn)在只是學到了Java的骨架,卻還沒有學到Java的精髓。接下來你得研究設計模式了。設計模式是高級程序員真正掌握面向對象核心思想的必修課。設計模式并不是一種具體“技術”,它講述的是思想,它不僅僅展示了接口或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握接口或抽象類的應用,從而在原來的Java語言基礎上躍進一步,更重要的是,設計模式反復向你強調一個宗旨:要讓你的程序盡可能的可重用。關于設計模式的資料,還是向大家推薦banq的網(wǎng)站http:///,他把GOF的23種模式以通俗易懂的方式詮釋出來,純Java描述,真是經(jīng)典中的經(jīng)典。有時間再研究一下MVC結構(把Model-View-Control分離開的設計思想)吧,現(xiàn)在很流行的Structs就是它的一種實現(xiàn)方式,不過Structs用起來實在是很繁,我們只要學習其精髓即可,我們完全可以設計自己的MVC結構。然后你再研究一下軟件Refactoring(重整)和極限XP編程,相信你又會上一個臺階。
做完這些,你不如整理一下你的Java代碼,把那些經(jīng)典的程序和常見的應用整理出來,再精心打造一番,提高其重用性和可擴展性。你再找?guī)讉€志同道合的朋友成立一個工作室吧,你可以去承接一些項目做了,一開始可能有些困難,可是你有技術積累,又考慮周全,接下項目來可以迅速作完,相信大家以后都會來找你的,所以Money就嘩啦啦的來了。。。當然你也可以參加一些開源項目,一方面可以提高自己,另一方面也是為中國軟件事業(yè)做貢獻嘛!開發(fā)者在互聯(lián)網(wǎng)上用CVS合作開發(fā),用QQ,MSN,E-mail討論聯(lián)系,天南海北的程序員分散在各地卻同時開發(fā)同一個軟件,是不是很有意思呢?
下面介紹兩個好的開源項目網(wǎng)站:
湖北省軟件公共開發(fā)平臺http://gro.clinux.org/
共創(chuàng)聯(lián)盟http://cosoft.org.cn/
哇,好高興哦,我終于成為高手了!非也,非也。古人云:“識時務者為俊杰”。你知道計算
機界現(xiàn)在的發(fā)展形勢嗎?你知道微軟的.NET藍圖和SUN ONE計劃之間的明爭暗斗嗎?你知道計算機技術將向何處發(fā)展嗎?其實從各大計算機廠商最近的動作,都可以看出來“Web服務將是下一代互聯(lián)網(wǎng)應用的制高點”,而微軟的.NET藍圖和SUN ONE計劃的斗爭焦點,也就是Web服務。Web服務就是一個嶄新的分布式計算模型,它是一系列標準的綜合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同語言編寫的軟件能夠輕易的集成起來,使網(wǎng)絡資源和Web站點變成一種服務而不是混亂的垃圾場。不遠的將來,我們就可以在家里點擊一下鼠標,就可以完成出門旅游的全部準備工作,包括定飛機票,定旅游線路,定好房間等。請注意,這所有的一切都是Web站點間自動完成的,再也不用象現(xiàn)在一樣,表面上是電子商務,實際上很多環(huán)節(jié)都是人工操作。也許你會覺得這是天方夜談,不過就近的說,你也很有可能承接一個項目,要集成兩個企業(yè)的ERP系統(tǒng)。很有可能上游企業(yè)的系統(tǒng)是用Dephi編的,而下游企業(yè)的系統(tǒng)是用Java編的。你說你是Java高手,大家都看者你怎么做呢。所以啊,你還得學習新技術,如Web服務,而且你Dephi也要懂一點吧(Dephi6現(xiàn)在已經(jīng)提供Web服務的控件了)。你編的Java系統(tǒng),可能要和.NET集成,所以你.NET要懂一點吧?到最后,你可能發(fā)現(xiàn)你已經(jīng)成為Java高手了,但很多時間卻在搞別的技術。太極張三豐里說,最厲害的招式就是沒有招式,可能就是這個道理吧!
因為剛剛興起,所以網(wǎng)上Web服務的資料不是很多,我還是給大家推薦幾個網(wǎng)站吧: 中國UDDI技術聯(lián)盟http:///developerWorks/cn/xml/index.shtml?csdnIBM可是Web服務的力推者
嗚?你費勁千心萬苦,總算成為Java高手了,怎叫人不由喜極而泣呢!是啊,真不容易,真不簡單,真叫人感動?。∧敲创騻€電話告訴我吧,什么?我的電話號碼是多少?昏到,你打電話問不就知道了嗎,真是的??
第三篇:Java初級程序員面試必備的基礎知識總結
Java基礎
簡述Java的基本歷史
java起源于SUN公司的一個GREEN的項目,其原先目的是:為家用消費電子產(chǎn)品發(fā)送一個信息的分布式代碼系統(tǒng),通過發(fā)送信息控制電視機、冰箱等
簡單寫出Java特點,寫出5個以上,越多越好
簡單的、面向對象的、分布式的、安全的、穩(wěn)定的、與平臺無關的、可解釋的、多線的、動態(tài)的語言。
什么是Java? JAVA:一種編程語言
一種開發(fā)環(huán)境
一種應用環(huán)境
一種部署環(huán)境
請寫出Java的版本分類,以及每種版本的應用方向 三種版本:
JME:是面向內存有限的移動終端.為消費性產(chǎn)品設計的;
JSE: 是SUN公司針對桌面開發(fā)和低端商務計算方案開發(fā)的版本。為筆記本電腦、PC機設計的;
JEE: 是一種利用JAVA 2平臺來簡化企業(yè)解決方案的開發(fā)、部署和管理相關的復雜問題的體系結構。為企業(yè)級的、服務器端的高端應用而設計的;
描述Java技術的主要特性 java虛擬機
垃圾回收
代碼安全性
描述 Java虛擬機的功能
(1)通過 ClassLoader 尋找和裝載 class 文件
(2)解釋字節(jié)碼成為指令并執(zhí)行,提供 class 文件的運行環(huán)境
(3)進行運行期間垃圾回收
(4)提供與硬件交互的平臺
簡述Java代碼安全性(1)編譯時的錯誤檢驗
(2)類裝載檢查,把本機上的類和網(wǎng)絡資源類相分離,在調入類的時候進行檢查,因而可以限制任何“特洛伊木馬“的應用
(3)字節(jié)碼校驗
(4)沙箱機制,限定訪問權限
描述Java垃圾回收機制
Java 編程語言解除了程序員釋放內存的責任。它可提供一種系統(tǒng)級線程以跟蹤每一次內存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的內存。垃圾收集在 Java 技術程序的生命周期中自動進行,它解除了釋放內存的要求,這樣能夠有效避免內存漏洞和內存泄露(內存泄露就是程序運行期間,所占用的內存一直往上漲,很容易造成系統(tǒng)資源耗盡而降低性能或崩潰。
垃圾回收有以下特點:
(1)垃圾回收是一個自動的系統(tǒng)行為,程序員不能控制垃圾回收的功能和行為。
(2)有一些跟垃圾回收相關的方法,比如:System.gc(),調用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運不運行,什么時候運行,都是無法控制的。
(3)程序員可以通過設置對象為 null,來標示某個對象不再被需要了,這只是表示這個對象可以被回收了,并不是馬上被回收。
簡述Java代碼的運行過程
(1)加載代碼 通過類裝載器裝載CLASS文件
(2)校驗代碼 由字節(jié)碼校驗
(3)執(zhí)行代碼 由解釋器將字節(jié)碼轉換成機器碼
簡述如何搭建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運行應用程序時所需要的類包的路徑
JAVA_HOME 供需要運行JAVA的程序使用
請描述:一個完整的Java文件的代碼分幾個部分,每部分都起什么作用,大致的寫法 package 當前類所在位置
import 當前類運行時所需要的包或類
public class 類名 {
屬性定義;
方法定義:
構造方法定義;
public static void main(String args [])例外{ 程序入口 語句;} }
//注釋
Java代碼的注釋有幾種?分別舉例說明(1)// 單行注解
(2)/* */ 塊注釋
(3)/* *
* 文檔注釋
*/
什么是Java代碼的語句,什么是Java代碼的塊,舉例說明 語句 是一行以分號終止的代碼,例:int a;
塊 是以{ }為邊界的一些語句的集合 例:public void tt(){}
什么是標示符?
標識符:是賦予變量、類、方法的名稱。
標示符定義的規(guī)則?
首字母只能以字母、下劃線、$開頭,其后可以跟字母’下劃線、$和數(shù)字配置CLASSPATH 首字母小寫中間用大寫字母隔開 標識符具有一定的含義
什么是關鍵字?
關鍵字就是編程語言與機器語言的編碼約定
true、false、null、sizeof、goto、const那些是Java關鍵字 true、false、null 為JAVA的關鍵字
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
什么是變量?
變量是用來引用一塊內存區(qū)域或一個值,用標識符來表示,可以通過操作變量來操作變量所對應的內存區(qū)域或值塊的值。
變量的定義規(guī)則?
以字母、$、下劃線開頭,其后可以跟字母、下劃線、$和數(shù)字; 首字母小寫,中間單詞用大寫字母隔開; 名稱具有一定含義;
請寫出Java編碼約定中對下列部分的要求:類、屬性、方法、包、文件名、變量、常量、控制結構、語句行、注釋
類: 一個類文件中類名要和文件名相同,類名一定要以大寫字母開頭,單詞之間用大寫字母分隔
屬性: 屬性名首字母小寫,中間用大寫字母隔開。
方法: 方法名首字母小寫,中間用大寫字母隔開。
包: 引用包必須寫在類文件的開頭,有且只能有一個包,全部用小寫字母。
控制結構:當語句是控制結構的一部分時,即使是單個語句,也應使用大括號將語句封閉。
語句行:每行只寫一個語句,并使用四個縮進的空格,使代碼更易讀,注意用分號結束。
注釋: 用注釋來說明那些不明顯代碼的段落。
常量: 常量名一般用大寫字母,單詞之間用下劃線分隔,一旦賦值不允許修改。
什么是Javadoc? 按照一定格式生成程序的文檔的工具。
什么是引用類型?
用戶定義類型, 它可引用類和數(shù)組。
除去基本數(shù)據(jù)類型的其他類型都是引用數(shù)據(jù)類型。
什么是按值傳遞?什么是按引用傳遞?
按值傳遞:就是將該值的副本傳過去(基本數(shù)據(jù)類型+String類型的傳遞,就是按值傳遞)
按引用傳遞:就是將值的內存地址傳過去(除基本數(shù)據(jù)類型+String以外類型的傳遞,就是引用傳遞)
如何創(chuàng)建一個新對象?如何使用對象中的屬性和方法? 使用new 關鍵字來創(chuàng)建一個新的對象;
通過對象的實例用”.“(點)來調用對象中的屬性和方法;
靜態(tài)的方法和屬性,也可以直接用類名”.“(點)來調用;
簡述new關鍵字所做的工作
new 創(chuàng)建一個對象,并為對象分配一塊內存。
簡述”=” 和”= =”的功能和區(qū)別 “=” 賦值,“= =”當比較基本數(shù)據(jù)類型的時候,判斷前后兩個值是否相等;
當比較引用數(shù)據(jù)類型的時候,判斷= =前后兩個值的內存地址是否相等;
區(qū)別:
= :為賦值表達式
= = :為邏輯表達式
什么是實例變量?什么是局部變量?什么是類變量?什么是final變量?
實例變量:
類中定義的變量,即類成員變量,如果沒有初始化,會有默認值;
局部變量:
在方法中定義的變量,必須初始化;
類變量:
用static修飾的屬性;
final變量:
用final 修飾的變量,簡述上述各種變量的定義規(guī)則和使用規(guī)則?
實例變量: 不需要static關鍵字來聲明,需要類的實例(對象)調用(用”.“);
類變量: 用static修飾,可以用類名調用,也可以用類的實例調用;
局部變量: 在方法內任意定義變量即為局部變量;
final變量: 一旦賦值,不可以再修改的變量;
final屬性只允許賦值一次,且只能通過構造方法賦值,定義后也就是一個常量;
final修飾的變量,只允許賦值一次
a++和++a的區(qū)別?
a++ : 先使用,后加1
++a : 先加1,后使用
請描述instanceof、?:、&、&&各自的功能
instanceof :用來判斷某個實例變量是否屬于某種類的類型。
? : 三目運算符:
表達式1?表達式2:表達式3
如果表達式1為true,執(zhí)行表達式2,否則執(zhí)行表達式3
&: 位運算:按位與 |
&&: 邏輯運算:邏輯與
請描述>>、<<、>>>的功能
10>>4 :算術或符號右移位運算符
<< :算術或符號左移位運算符 >>> :邏輯或無符號右移位運算符
請描述什么是強制類型轉換?什么是自動類型轉換?什么是向上造型?并分別舉例說明 強制類型轉換:在一個類型前面加(),來強制轉換
long l = 9L;
int i =(int)l;
自動類型轉換:
int i = 5;
String str = “”+i;
向上造型:把范圍小的造型為范圍大的類型:
int i = 2;
long l = i;
請寫出完整的if條件控制語句的結構 if(布爾表達式){ 語句
}else{
語句
}
請寫出完整的switch語句的結構 switch(字符){
case 字符: 語句
break;
case 字符: 語句
break;
default:語句
}
請寫出完整的for語句的結構 for(初始語句;條件語句;步長){ }
請寫出完整的while語句的結構 while(boolean語句){ }
請寫出完整的do while語句的結構 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]);} }
什么是構造和析構方法?功能是?
構造方法:每個類至少有一個構造方法,類初始化時調用的方法
1.方法名和類名相同
2.無返回值類型
格式:訪問權限 類名(參數(shù)列表){};
1.自己定義構造后,就沒有默認的構造方法 2.無構造方法時,默認為空參的構造方法(無參數(shù),方法體為空)析構方法:finalize
類銷毀時,自動調用方法
當對象在內存中被刪除時,自動調用該方法
在此方法中可以寫回收對象內部的動態(tài)空間的代碼
簡述Java的訪問修飾符類型?分別有什么功能? public 公開的,任何一個類都有可以訪問
protected 同包同類,只可被它的子類訪問
default 只能被同一個包中類訪問
private 私有的,只能在本類中被訪問
分別說明:在類上、在屬性上、在方法上能使用哪些訪問修飾符 在類上:public default final
在方法上: 訪問權限:public protected private default
方法修飾符:static final
返回類型:void
在屬性上:public protected private default
static final
簡述什么是包?包的功能
包:對所定義的多個JAVA類進行分組,將多個功能相關的類定義到一個包(文件)中。
功能:1.易于查找和使用適當?shù)念?/p>
2.包不止包含類和接口,還可以包含其它包,形成層次的包空間
3.有助于避免命名沖突
請寫出5個以上的JDK中的包,以及他們的基本功能
java.awt: 包含構成抽象窗口工具集的多個類,用來構建和管理應用程序的圖形用戶界面
java.lang: 提供java編成語言的程序設計的基礎類
java.io:
包含提供多種輸出輸入功能的類,java.net:
包含執(zhí)行與網(wǎng)絡有關的類,如URL,SCOKET,SEVERSOCKET,java.applet: 包含java小應用程序的類
java.util:
包含一些實用性的類
什么是包裝類?Java中都有哪些包裝類
在JDK中針對各種基本類型分別定義相應的引用類型 ————–稱為封裝類 Boolean Byte Short Integer Long Float Double Character
OOP(面向對象)語言的三大特征是? 封裝性,繼承性,多態(tài)性
分別表述類的三大特性及其他們的功能
封裝:隱藏類的實現(xiàn)細節(jié)、迫使用戶去使用一個接口去訪問數(shù)據(jù)、使代碼更好維護
繼承:子類可以直接繼承使用父類的方法,程序員只需要做的是定義額外特征或規(guī)定將適用的變化
多態(tài)性:同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力
如何實現(xiàn)繼承?繼承的規(guī)則? public class A extends B{ }
單繼承性
構造方法不能繼承
super引用父類,調用父類的屬性,方法
當子類中出現(xiàn)與父類的方法名,返回類型,參數(shù)列表相同的方法時要覆蓋此方法 簡述this和super的功能和用法 this :
能訪問除構造方法以外所有的屬性、方法,通過this.來調用方法和屬性 不可以在靜態(tài)方法中使用,在調用其它構造方法時,必須放在該構造方法的第一行
在構造方法中使用this(參數(shù)列表),相當于調用本類的其它構造方法,它必須作為構造方法的第一句
super :訪問父類
super.點取父類中被子類隱藏的方法和屬性,通過 super(參數(shù)列表)來調用父類的屬性和方法,在調用父類的構造方法時必須放在子類構造方法里的第一行;
如何確定在多態(tài)的調用中,究竟是調用的那個方法? new的是哪一個類就是調用的哪個類的方法。
請描述方法定義的完整的語法結構
權限修飾符 修飾符 返回類型 方法名(參數(shù))例外{
方法體;}
什么是重載?
在一個類中出現(xiàn)方法名相同,但參數(shù)列表不同時,這種情況就是重載。
簡述重載的規(guī)則 方法名稱必須相同;
參數(shù)列表必須不同(個數(shù)不同,或類型不同,或參數(shù)排列順序不同); 與返回類型無關;
什么是方法的覆蓋?什么情況下出現(xiàn)? 方法覆蓋:
子類可以修改從父類繼承過來的行為,也就是說子類可以創(chuàng)建一個與父類方法有不同功能的方法,但具有相同的:名稱、返回類型名和參數(shù)列表。
在父子類的情況下出現(xiàn)時。
方法覆蓋的規(guī)則?
方法名要和父類中被覆蓋的方法名相同,返回類型相同,參數(shù)列表相同。訪問權限要大于等于被覆蓋方法的權限。例外列表要小于等于被覆蓋方法的例外列表。
static修飾符的功能是?可以用在什么地方?怎么訪問? static 修飾符功能:
共用一塊內存區(qū)域,也就是用static修飾的變量或成員方法對所有類的實例都是相同的 靜態(tài)成員方法和靜態(tài)變量的優(yōu)點在于他們能在沒有創(chuàng)建類的任何一個實例的情況下被引用??梢杂迷诜椒ɑ驅傩陨?訪問方式:
直接使用類名調用
new 一個實例,用實例調用
static的基本規(guī)則
類中的靜態(tài)方法只可以調用靜態(tài)的屬性和方法,不允許調用非靜態(tài)的屬性和方法。靜態(tài)變量為類變量,可以用類名直接調用靜態(tài)的屬性和方法。靜態(tài)方法中不允許出現(xiàn)this和super 構造方法不允許聲明static 非靜態(tài)變量為實例變量,通過實例調用 靜態(tài)方法不能被非靜態(tài)方法覆蓋
final修飾符的功能是?可以用在什么地方? 功能:final標記所有通用的功能,不能隨意更改
可以用在類、屬性和方法上
final的基本規(guī)則
final修飾的類不能被繼承
final修飾的成員變量只允許賦值一次,且只能通過構造方法里賦值。final修飾的局部變量即為常量,只能賦值一次。final修飾的方法不允許被子類覆蓋。
什么是抽象方法,什么是抽象類
用abstract修飾的方法,只有方法的聲明,而沒有方法的實現(xiàn),就叫抽象方法。
用abstract修飾的類,就叫抽象類。
抽象類的規(guī)則
抽象類內部可以沒有抽象方法 必須用abstract修飾
不能夠直接使用抽象類,必須通過子類繼承并且實現(xiàn) 抽象方法不允許被private修飾
什么情況下使用抽象類
當一個類的一個或多個方法是抽象方法時;
當類是一個抽象類的子類,并且不能為任何抽象方法提供任何實現(xiàn)細節(jié)或方法體時; 當一個類實現(xiàn)一個接口,并且不能為任何抽象方法提供實現(xiàn)細節(jié)或方法體時;
equals方法和”= =”的功能和區(qū)別 功能:判斷對象是否相等
區(qū)別:
equals方法比較的是對象的值
= =:比較的是對象值的內存地址,對基本數(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ù)的下標
“String”.indexOf(“ing”);
split();功能:根據(jù)參數(shù)分割該字符串 “String”.split(“-”);
為什么使用StringBuffer類?有什么功能和優(yōu)點? –只創(chuàng)建一個對象
–StringBuffer 對象的內容是可以被修改的
–除了字符的長度之外,還有容量的概念
–通過動態(tài)改變容量的大小,加速字符管理
舉例說明如何使用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文件的結構和基本用法
結構:擴展名為properties的文件,內容為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ī)則?
接口是抽象方法和常量值的定義的集合。從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。
public interface Tt {
public void outPut();
public int tt();}
接口的作用?為什么使用接口? 多重繼承
封裝、隔離
功能,實現(xiàn)的分離
多態(tài)
便于后期維護
接口是可插入性的保證。
什么是多重接口
就是一個類實現(xiàn)多個接口
描述接口的基本思想? 封裝 隔離
接口及相關機制的最基本作用在于:通過接口可以實現(xiàn)不相關類的相同行為,而不需考慮這些類之間的層次關系。
根據(jù)接口可以了解對象的交互界面,而不需了解對象所屬的類。
面向對象程序設計講究”提高內聚,降低耦合”。
如何在代碼中使用接口?
public class MyCast implements Tt{
public void outPut(){}
public int tt(){
return 0;} }
舉例說明如何把接口當作類型使用 public interface Animal(){
public void tt();}
public class Dog implements Animal{
public void tt(){} }
Animal ani = new Dog();
如何選擇接口和抽象類?為什么? 優(yōu)先選用接口,盡量少用抽象類
在下列情況下選擇抽象類:需要定義子類的行為,又要為子類提供共性的功能。
什么是異常,異常的分類?
程序中導致程序中斷的一些情況叫做異常,一般程序員可以處理。
異常分為運行時異常和非運行時異常(一般異常)
運行時異常是指因設計或實現(xiàn)方式不當導致的問題。也可以說,是程序員的原因導致的,本來可以避免發(fā)生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現(xiàn)這些異常的代碼不需要try塊包圍。
非運行時異常是指除運行時異常以外所有的異常,出現(xiàn)這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,簡述處理異常的兩種方式?
拋出(throws)和catch語句處理
簡述try塊的功能和規(guī)則
try塊內部一般寫一些編程人員認為可能會出現(xiàn)異常的代碼,使程序運行時不會因為出現(xiàn)異常而中斷。
簡述catch塊的功能和規(guī)則
功能:可以截獲所聲明的異常,并在語句塊內對其進行處理
規(guī)則:catch(Exeption e){
e.printStackTrace();
}
簡述finally塊的功能和規(guī)則
finally塊一般寫一些不論是否發(fā)生異常都必須執(zhí)行一次的代碼
例如關閉與數(shù)據(jù)庫的連接等
簡述throw和throws的功能和使用方法 throw 指編程人員主動拋出一個異常
throw new NullPointerExeption();
throws指程序遇到異常情況自動的被動拋出一個異常
public void test()throws Exeption{}
異常的分類? 錯誤(Error): JVM 系統(tǒng)內部錯誤、資源耗盡等嚴重情況,程序員不可控制
例外(Exception):其它因編程錯誤或偶然的外在因素導致的一般性問題,程序可以控制
什么是預定義異常
java程序中預先定義好的異常叫做預定義異常
簡述自定義異常的規(guī)則 寫一個類繼承Exception
用戶自定義異常通常屬Exception范疇,依據(jù)慣例,應以Exception結尾,應該由人工創(chuàng)建并拋出。
什么是斷言?
用來證明和測試程序的假設。
如何使用斷言?舉例說明
一種是assert<<布爾表達式>>;另一種是assert<<布爾表達式>>:<<細節(jié)描述>>。
assert a= =10 : “這里a等于10″;
集合框架
什么是集合?什么是元素? 可以包含其他對象的簡單對象就叫集合
集合框架中所包含的對象就叫做元素
描述出Java集合框架中集合的接口關系 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接口中的對象按一定順序排列,允許重復
Set接口中的對象沒有順序,但是不允許重復
Map接口中的對象是key、value的映射關系,key不允許重復
如何給集合排序? 實現(xiàn)comparable接口
IO 什么是流?可畫圖說明
流是要傳輸?shù)臄?shù)據(jù)在源和目的地之間運行的軌跡。
描述I/O流的基本接口和類的結構
代碼示例:使用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 技術使用 Unicode 來表示字符串和字符。
代碼示例:如何使用Reader和Writer來進行輸入輸出 //Writer寫入操作
FileOutputStream fos=new FileOutputStream(“a.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
bw.write(“歡迎來到java快車”);
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)可序列化?
將一個對象存放在某種類型的永久存儲器上(比如硬盤,光盤,軟盤等),稱為保持。標識一個類可以被持久化,叫序列化,也叫串行化或持久化。表示這個類中的數(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類的基本功能
處理文件和獲取文件信息;文件或文件夾的管理。
概括一句話就是:除了讀寫文件內容其他的都可以做。
代碼示例:如何使用隨機文件讀寫類來讀寫文件內容 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++;
//游標
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();}
代碼示例:如何使用流的基本接口來讀寫文件內容 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響應更快
利用多處理器系統(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)線程的調度?如何暫停一個線程的運行 調度用wait和notify,—-
sleep()
什么是線程的優(yōu)先級
判斷哪個線程先執(zhí)行的級別
簡述sleep方法和wait方法的功能和區(qū)別 sleep是讓線程休眠一段時間
wait是讓線程掛起
什么是守候線程
隱藏在后臺持續(xù)運行的線程
什么是臨界資源
指多個線程共享的資源
什么是互斥鎖,Java中如何實現(xiàn)
用來保證在任一時刻只能有一個線程來訪問臨界資源的那個標記
在Java中使用
用在對象前面限制一段代碼的執(zhí)行
用在方法聲明中,表示整個方法為同步方法。
什么是死鎖?如何避免?
如果程序中有多個線程競爭多個資源,就可能會產(chǎn)生死鎖。當一個線程等待由另一個線程持有的鎖,而后者正在等待已被第一個線程持有的鎖時,就會發(fā)生死鎖。
要避免死鎖,應該確保在獲取多個鎖時,在所有的線程中都以相同的順序獲取鎖。盡量少用臨界資源。
簡述wait和notify,notifyAll的使用
被鎖定的對象可以調用wait()方法,這將導致當前線程被阻塞并放棄該對象的互斥鎖,即解除了wait()方法的當前對象的鎖定狀態(tài),其他的線程就有機會訪問該對象。
notify使等待隊列上的一個線程離開阻塞狀態(tài)
notifyAll使等待隊列上的所有線程離開阻塞狀態(tài)
Socket編程
什么是url?基本的格式是? 統(tǒng)一資源定位器
Http://004km.cn:port
簡述IP,Port,TCP的基本功能 IP代表網(wǎng)絡位置
Port代表端口號
TCP可保證不同廠家生產(chǎn)的計算機能在共同網(wǎng)絡環(huán)境下運行,解決異構網(wǎng)通信問題,是目前網(wǎng)絡通信的基本協(xié)議
簡述Java網(wǎng)絡模型的基本功能 描述服務端和客戶端的連接過程
簡述Java網(wǎng)絡編程究竟做些什么?如何做? 1.建立連接
2.準備輸出的數(shù)據(jù),流式輸出
3.流式輸入,編程業(yè)務需要的格式
4.關閉連接
服務器分配一個端口號。如果客戶請求一個連接,服務器使用accept()方法打開socket連接。
客戶在host的port端口建立連接。
服務器和客戶使用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é)議,能保證傳輸內容的完整和準確;數(shù)據(jù)傳輸?shù)妮o助開銷大,效率低
UDP: 是無連接的,不可靠地傳輸協(xié)議,不能保證傳輸內容的完整和準確,對信息的適時要求比較高
設計模式
什么是設計模式?
就是經(jīng)過實踐驗證的用來解決特定環(huán)境下特定問題的解決方案。
設計模式用來干什么? 尋找合適的對象
決定對象的粒度
指定對象的接口
描述對象的實現(xiàn)
運用復用機制
重復使用經(jīng)過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少工作量、提高正確率等目的什么是對象粒度
對象中方法的大小就是粒度
基本的Java編程設計應遵循的規(guī)則? 面向接口編程,優(yōu)先使用對象組合設計模式的應用范圍
所能解決的特定的一類問題中
簡述什么是單例模式,以及解決的問題,應用的環(huán)境,解決的方案,應用時應注意什么? 解決的問題:在任何時間內只有一個類實例存在的模式。
應用環(huán)境:需要有一個從中進行全局訪問和維護某種類型數(shù)據(jù)的區(qū)域的環(huán)境下使用單例模式。
解決方案:保證一個類只有一個類實例存在。
本質:控制實例的數(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)建,有效的利用資源,用時間換資源。
簡述什么是工廠模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質 利用工廠來解決接口選擇的問題的模式。
應用環(huán)境:當一個類無法預料要創(chuàng)建哪種類的對象或是一個類需要由子類來指定,創(chuàng)建的對象時,就需要用到工廠模式。
解決方案:定義一個創(chuàng)建對象的類,在類的方法中決定具體實例化哪一個類。
本質:就是根據(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();} }
簡述什么是值對象模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質 用來把一組數(shù)據(jù)封裝成一個對象的模式
解決問題:在遠程方法的調用次數(shù)增加的時候,相關的應用程序性能將會有很大的下降
解決方案:使用值對象的時候,可以通過僅僅一次方法調用來取得整個對象,而不是使用多次方法調用以得到對象中每個域的數(shù)值
本質:封裝數(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模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質 數(shù)據(jù)訪問對象
解決問題:根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問也不同。根據(jù)存儲的類型(關系數(shù)據(jù)庫、面向對象數(shù)據(jù)庫、純文件等)和供應商實現(xiàn)不同,持久性存儲(如數(shù)據(jù)庫)的訪問差別也很大。如何對存儲層以外的模塊屏蔽這些復雜性,以提供統(tǒng)一的調用存儲實現(xiàn)。程序的分布式問題
解決方案:將數(shù)據(jù)訪問邏輯抽象為特殊的資源,也就是說將系統(tǒng)資源的接口從其底層訪問機制中隔離出來;通過將數(shù)據(jù)訪問的調用打包,數(shù)據(jù)訪問對象可以促進對于不同數(shù)據(jù)庫類型和模式的數(shù)據(jù)訪問。
本質:分層,是系統(tǒng)組件和數(shù)據(jù)源中間的適配器。(一層屏蔽一種變化)
代碼示例:DAO模式的實現(xiàn)方法
什么是框架?框架的優(yōu)點?
框架是能夠完成一定功能的半成品
1.優(yōu)點:完成一定的功能、提供一個精良的應用程序架構
2.框架都是以接口的形式出現(xiàn)
3.應該了解框架完成的功能、框架的API接口、框架的功能是怎么實現(xiàn)的什么是開放-封閉法則(OCP)可擴展但是不可以更改已有的模塊
對擴展是開放的,對修改是封閉
什么是替換法則(LSP)使用指向基類(超類)的引用的函數(shù),必須能夠在不知道具體派生類(子類)對象類型的情況下使用。
如何綜合使用我們學過的設計模式來構建合理的應用程序結構
是采用接口進行隔離,然后同時暴露值對象和工廠類,如果是需要數(shù)據(jù)存儲的功能,又會通過DAO 模式去與數(shù)據(jù)存儲層交互。
構建常用的合理的Java應用包結構 Ui(表現(xiàn)層)
business–factory,ebi,ebo
dao–factory,dao,impl
awt、swing 什么是GUI中的容器?什么是GUI中的組件?
容器:能包含其他container和其他component的component。
組件:在設計上能實現(xiàn)一定功能的封裝體;
簡述AWT中的Frame、Panel和組件的關系
組件放在Panel上,而多個Panel可以疊加到Frame上,F(xiàn)rame一般只有一個,各個Panel可以互相在Frame上切換
簡述如何使用一個組件
初始化,加到容器中,注冊事件,實現(xiàn)相應的事件
Panel pan = new Panel();
TextField td = new TextField();
td.setText(“this is in a TextField.”);
pan.add(td);
描述一個GUI界面的基本構成? 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界面中組件的分布情況,負責決定布局方針以及其容器的每一個子組件的大小
描述每種布局管理器的基本特點
FlowLayout 從左到右分布,排滿推到下一行
BorderLayout 上下左右中分布
CardLayout 卡片式分布
GridLayout 網(wǎng)格式分布
XYLayout 坐標分布
什么是JFC(Java基礎類)?
是關于GUI組件和服務完整集合,主要包括5個API:
AWT,JavaD,Accessibility,Drag&Drop,Swing
提供了幫助開發(fā)人員設計復雜應用程序的一整套應用程序開發(fā)包;
Swing和AWT的區(qū)別?
Swing提供了更完整的組件,引入了許多新的特性和能力。Swing API是圍繞著實現(xiàn)AWT 各個部分的API 構筑的。
AWT 采用了與特定平臺相關的實現(xiàn),而絕大多數(shù)Swing 組件卻不是這樣做的,因此Swing 的外觀和感覺是可客戶化和可插的。
什么是雙緩沖?
在后臺進行界面的更新,然后在前臺進行界面交換
功能:雙緩沖可以改善一個被頻繁改變的組件的外觀
描述GUI的事件機制
事件源:是一個事件的產(chǎn)生者,或產(chǎn)生事件的組件對象
事件監(jiān)聽器:調用事件處理方法的對象
事件處理器:就是一個接收事件、解釋事件并處理用戶交互的方法。
描述Swing應用程序的基本結構? 組件定義
初始化界面
各種事件處理方法
各種適配類
描述表現(xiàn)層的基本功能? 展示數(shù)據(jù)
人機交互
收集參數(shù)、調用邏輯層api
描述在開發(fā)Swing應用程序中,一般都要寫那些代碼?都寫到什么地方? 一般要在類的初始化的時候給組件賦值,寫在jinit的方法里面
一般要在按扭的事件處理中寫收集參數(shù),組織參數(shù),調用業(yè)務接口的方法
對于GUI組件而言,最主要的方法是哪些? 初始化
如何給組件初始化
如何從組件中取值
設計組件的屬性
如何學習GUI組件的用法?
主要學會組件的定義、取值、賦值的方法
類比學習
JavaScript
什么是Javascript JavaScript是一種基于對象(Object)和事件驅動(Event Driven)并具有安全性能的腳本語言。
Java和Javascript的區(qū)別
1、基于對象和面向對象
Java是一種真正的面向對象的語言,即使是開發(fā)簡單的程序,必須設計對象。
JavaScript是種腳本語言,它可以用來制作與網(wǎng)絡無關的,與用戶交互作用的復雜軟件。它是一種基于對象(Object Based)和事件驅動(Event Driver)的編程語言。因而它本身提供了非常豐富的內部對象供設計人員使用。
2、解釋和編譯
兩種語言在其瀏覽器中所執(zhí)行的方式不一樣。Java的源代碼在傳遞到客戶端執(zhí)行之前,必須經(jīng)過編譯,因而客戶端上必須具有相應平臺 上的仿真器或解釋器,它可以通過編譯器或解釋器實現(xiàn)獨立于某個特定的平臺編譯代碼的束縛。
JavaScript是一種解釋性編程語言,其源代碼在發(fā)往客戶端執(zhí)行之前不需經(jīng)過編譯,而是將文本格式的字符代碼發(fā)送給客戶編由瀏覽器 解釋執(zhí)行。
3、強變量和弱變量
兩種語言所采取的變量是不一樣的。
Java采用強類型變量檢查,即所有變量在編譯之前必須作聲明。
JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,而是解釋器在運行時檢查其數(shù)據(jù)類型,4、代碼格式不一樣
Java是一種與HTML無關的格式,必須通過像HTML中引用外媒體那么進行裝載,其代碼以字節(jié)代碼的形式保存在獨立的文檔中。
JavaScript的代碼是一種文本字符格式,可以直接嵌入HTML文檔中,并且可動態(tài)裝載。編寫HTML文檔就像編輯文本文件一樣方便。
5、嵌入方式不一樣
在HTML文檔中,兩種編程語言的標識不同,JavaScript使用來標識,而Java使用來標識。
6、靜態(tài)聯(lián)編和動態(tài)聯(lián)編
Java采用靜態(tài)聯(lián)編,即Java的對象引用必須在編譯時的進行,以使編譯器能夠實現(xiàn)強類型檢查。
JavaScript采用動態(tài)聯(lián)編,即JavaScript的對象引用在運行時進行檢查,如不經(jīng)編譯則就無法實現(xiàn)對象引用的檢查。
Javascript的運行環(huán)境 具備javascript運行器的如何在web頁面加入Javascript,請寫出兩種方式并示例
第四篇:java程序員面試題
1、你怎樣理解Struts,又那些配置文件,以及作用? 理解:http://ruixin.iteye.com/blog/899289 配置文件:struts.xml 作用:struts 框架mvc 實現(xiàn)低耦合,便于程序的維護~ 配置文件控制流程的轉向 很清晰~ 主要負責具體業(yè)務的實現(xiàn)和頁面的轉向~
2、怎么樣來捕獲數(shù)據(jù)庫中的異常?
3、如何處理網(wǎng)頁中的驗證信息,如何友好的進行處理?
4、用javaScript實現(xiàn)java中的監(jiān)聽器功能?
5、你對對日外包的看法?
6、數(shù)據(jù)庫連接方式由哪幾種?
Jdbc、連接池、hibernate
7、你清楚哪幾種設計模式,談談各種設計模式的類結構。
8、談談jsp和sevlet的區(qū)別,以及它們性能上的區(qū)別。
jsp是servlet的一種簡化,jsp編譯后是“類servlet”。servlet 主要是用來處理業(yè)務層;
jsp 則是主要負責 表現(xiàn)層。
servlet完全是java程序代碼構成,擅長于流程控制和事務處理,而通過servlet來生成動態(tài)網(wǎng)頁很不直觀; 對于靜態(tài)的html標簽,servlet都必須使用頁面輸出流逐行輸出。Servlet中沒有內置對象。Jsp由html代碼和jsp標簽構成可以方便地編寫動態(tài)網(wǎng)頁,在struts框架中,jsp位于MVC設計模式的視圖層,而servlet位于控制層。
總之,使用jsp只需要完成程序員需要輸出到客戶端的內容,至于jsp中的java腳本如果鑲嵌到一個類中,由jsp容器完成,而servlet則是個完整的java類,這個類的service方法用于生成對客戶端的響應
9、如何來編寫存儲過程,如何優(yōu)化存儲過程,以及存儲過程和TSQL的區(qū)別。
10、提供的培訓,CMM-5軟件開發(fā)流程培訓、代碼編寫規(guī)范和業(yè)務流程培訓、對日語的培訓。
1、為什么要選擇這個行業(yè),和計算機專業(yè)的相比有什么優(yōu)勢?
2、Servlet是什么,以及生命周期?
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
與cgi的區(qū)別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進程,服務完成后就銷毀,所以效率上低于servlet。
3、怎么理解事務?
4、怎么理解MVC?
自己做自己的事情,主要強調分層,5、同時插入大量數(shù)據(jù),使用何種方法優(yōu)化?Batch
6、多個有關系得怎么樣操作?
7、你認為你還有什么優(yōu)點在前面沒有提到?
8、對加班的看法?
9、與上級意見不一致時怎么樣處理?10、11、12、13、14、15、16、17、18、19、20、21、22、23、你如何理解團隊精神?
你怎樣處理學習新技術和項目開發(fā)之間的矛盾? 怎樣去學習新技術?
作為一個初級程序員怎么樣彌補與有經(jīng)驗程序員之間的差距? 你對索引的理解,索引有幾種,什么時候用索引? 對Oracle理解?
怎樣優(yōu)化復雜的查詢語句? 你對Jdbc理解?
對Finally塊的理解和應用? 游標的理解? ResultSet 重載,重寫? 簽名
EJB的事務,Hibernate的事務? Struts的標簽? 重定向和跳轉? A、
a.地址欄不改變跳轉——服務器端跳轉,服務器之間內部轉,相同的request,可傳參;
b.執(zhí)行到跳轉語句后無條件立刻跳轉——之后的代碼不再被執(zhí)行;
注意:如果使用forward跳轉,則一定要在跳轉之前釋放掉全部的資源;
c.使用forward時,request設置的屬性依然能保留在下一個頁面(setAttribute);d.通過
e.地址中的”/”代表是:http://localhost:8080/Test B、response.sendRedirect(“地址”):效率低,速度慢
a.地址欄改變跳轉——客戶端跳轉(其中地址可以是任意的)
b.所有代碼執(zhí)行完畢之后再跳轉,跳轉語句后面的代碼還是會執(zhí)行,除非在其后面加上return(return)需復雜一些。
<% Response.sendRedirect(“aa.jsp”);boolean b = true;
if(b){ Return;} System.out.println(“aaaaaaaaaa”);%>
c.不能保存request屬性——地址改變了,客戶端跳轉,不同的request d.通過對URL地址的重寫傳遞參數(shù):
response.sendRedirect(“responseDemo04.jsp?id=mldn”);
e.地址中的”/”代表是:http://localhost:8080/
下面是兩種比較重要的跳轉,我還是與上次的一次,把我做的筆記貼出來:24、25、Hibernate的左聯(lián)結和右連接,緩存,數(shù)據(jù)加載? 面向對象如何理解?
26、EJB中CMP和BMP,SessionBean的機制?27、28、29、對日外包是否有抵觸情緒? 如何減少Servlet的請求? 對設計模式了解多少?作過的項目中用過那些設計模式? 30、31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、怎樣看待團隊合作,在團隊合作中你扮演什么樣的角色,遇到技術難題時怎么解決? Exception的層次結構? EJB對數(shù)據(jù)庫的訪問機制? Struts中是否有事務處理? Hibernate的其它功能(除了ORM)? 如何提高數(shù)據(jù)庫中的數(shù)據(jù)查詢效率? 作為項目經(jīng)理如何對組內成員分工? 描述一下你做過項目的流程。
加班到12點,突然有人來問你技術上的難題,你會如何處理? Oracle的冷備份、熱備份 Strurs中怎樣實現(xiàn) Hibernate怎樣實現(xiàn)ORM Spring 的事務處理機制
Strurs的驗證方式,Javascript的驗證的方式
一個是服務器端驗證,一個是客戶端驗證
Struts的工作機制 Delete/trancate的區(qū)別
trancate與delete都是刪除數(shù)據(jù),不同的是trancate是將表的所有數(shù)據(jù)都刪除,而delete可以有選擇地刪除數(shù)據(jù); delete刪除數(shù)據(jù)是記錄在日志中的,可以通過其將數(shù)據(jù)恢復,而trancate則是將整個表截斷,其操作是不記錄在日志里的。46、47、48、作為項目組長,你遇到的最大問題是什么?如何解決?
Ajax/內嵌框架實現(xiàn)局部刷新,有什么差別?
Exception/Error的區(qū)別,在什么情況下可以拋出RuntimeException 父類不同
知道異常和錯誤最本質的區(qū)別就是異常能被開發(fā)人員處理而錯誤時系統(tǒng)本來自帶的,一般無法處理也不需要我們程序員來處理。
在程序運行時候出錯而又不是系統(tǒng)原因差生的,一般是由于程序原因產(chǎn)生,比如程序寫的不夠嚴謹、完善
典型的RuntimeException
有
ArithmeticException、ClassCastException、IndexOutOfBoundsException、NullPointerException、UnsupportedOperationException 等.49、50、51、52、53、54、55、56、57、58、59、Orcale 物化視圖(MV)
業(yè)務處理模塊中,是如何處理事務? Sql語句如何優(yōu)化 數(shù)據(jù)庫右連接
JDBC的連接關閉在哪?
Finally語句塊內
錯誤處理模塊是放在哪個層的。接口能否繼承接口。
接口可以繼承接口..但是要使用extends~而不是用implements 抽象類能否繼承實體類。
抽象類是可以繼承實體類,但前提是實體類必須有明確的構造函數(shù) 答案很明確,可以繼承。
項目中查詢時怎么樣實現(xiàn)的?
作為項目負責人你是管理這個團隊的?
在你做項目過程中遇到些什么問題,是怎么樣解決的?
Jquery中的幾種選擇器:
Javascript如何進行數(shù)字和字符串之間的轉換?
數(shù)字類型轉換成String類型用 對象=對象.toString()方法,字符串轉換成數(shù)字類型則是對象=Number(對象);
第五篇:JAVA程序員求職信
JAVA程序員求職信范文
尊敬的領導:
您好!十分感謝您在百忙之中能翻閱我的自薦信。與公司是一種選擇,與我則是一種機會。在上千份大同小異的求職信中,我期望你手中的這份能給您帶來驚喜!
我叫張XX,是xx技術學院09級的一名??粕?,就讀于計算機技術與應用專業(yè)。主修課程:計算機組成原理,數(shù)據(jù)結構,java網(wǎng)絡編程,c++編程基礎,單片機基礎,路由/交換機配置,jsp編程基礎,計算機網(wǎng)絡,sql server數(shù)據(jù)庫設計,xml編程實現(xiàn),編譯原理。
大學四年來,我學習刻苦,成績優(yōu)異,曾多次獲得獎學金。在師友的嚴格教益和個人努力下,我具備了扎實的基礎知識。在軟件方面,系統(tǒng)掌握了C語言,數(shù)據(jù)結構,Power Builder,數(shù)據(jù)庫原理,匯編語言,軟件工程等,并對面向對象的DELPHI和VC 等Windows編程有一定了解。課外我還自學了VB,VF編程及網(wǎng)頁制作?,F(xiàn)已能獨立編寫專業(yè)的數(shù)據(jù)庫管理系統(tǒng)。在硬件方面,通過參與單片機設計,組裝收音機,網(wǎng)絡工程的規(guī)劃與管理及組建等實踐活動,我掌握了計算機的工作原理及計算機網(wǎng)絡原理技術。
面對當今激烈的人才競爭,我很清楚自己知識有限,但我更清楚我有著不甘落后的精神和不斷學習,不斷提高的愿望。樂于進取,不怕挫折是我的人生信條,給我一次機會,讓我去實踐,去闖,去干,因為能力要在實踐中培養(yǎng),也終究要在實踐中體現(xiàn)。我信心十足,相信我所具備的專業(yè)技能,積累的知識,加上有良好的人際關系,會幫助我掀開生活中的新一頁。