第一篇:Java初級程序員面試必備的基礎知識總結
Java基礎
簡述Java的基本歷史
java起源于SUN公司的一個GREEN的項目,其原先目的是:為家用消費電子產品發送一個信息的分布式代碼系統,通過發送信息控制電視機、冰箱等
簡單寫出Java特點,寫出5個以上,越多越好
簡單的、面向對象的、分布式的、安全的、穩定的、與平臺無關的、可解釋的、多線的、動態的語言。
什么是Java? JAVA:一種編程語言
一種開發環境
一種應用環境
一種部署環境
請寫出Java的版本分類,以及每種版本的應用方向 三種版本:
JME:是面向內存有限的移動終端.為消費性產品設計的;
JSE: 是SUN公司針對桌面開發和低端商務計算方案開發的版本。為筆記本電腦、PC機設計的;
JEE: 是一種利用JAVA 2平臺來簡化企業解決方案的開發、部署和管理相關的復雜問題的體系結構。為企業級的、服務器端的高端應用而設計的;
描述Java技術的主要特性 java虛擬機
垃圾回收
代碼安全性
描述 Java虛擬機的功能
(1)通過 ClassLoader 尋找和裝載 class 文件
(2)解釋字節碼成為指令并執行,提供 class 文件的運行環境
(3)進行運行期間垃圾回收
(4)提供與硬件交互的平臺
簡述Java代碼安全性(1)編譯時的錯誤檢驗
(2)類裝載檢查,把本機上的類和網絡資源類相分離,在調入類的時候進行檢查,因而可以限制任何“特洛伊木馬“的應用
(3)字節碼校驗
(4)沙箱機制,限定訪問權限
描述Java垃圾回收機制
Java 編程語言解除了程序員釋放內存的責任。它可提供一種系統級線程以跟蹤每一次內存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的內存。垃圾收集在 Java 技術程序的生命周期中自動進行,它解除了釋放內存的要求,這樣能夠有效避免內存漏洞和內存泄露(內存泄露就是程序運行期間,所占用的內存一直往上漲,很容易造成系統資源耗盡而降低性能或崩潰。
垃圾回收有以下特點:
(1)垃圾回收是一個自動的系統行為,程序員不能控制垃圾回收的功能和行為。
(2)有一些跟垃圾回收相關的方法,比如:System.gc(),調用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運不運行,什么時候運行,都是無法控制的。
(3)程序員可以通過設置對象為 null,來標示某個對象不再被需要了,這只是表示這個對象可以被回收了,并不是馬上被回收。
簡述Java代碼的運行過程
(1)加載代碼 通過類裝載器裝載CLASS文件
(2)校驗代碼 由字節碼校驗
(3)執行代碼 由解釋器將字節碼轉換成機器碼
簡述如何搭建Java開發環境 首先下載安裝JDK 然后配置環境
(1)配置PATH,(2)配置CLASSPATH
(3)配置JAVA_HOME
簡述classpath,path,JAVA_HOME的意義和配置方法 path 操作系統運行環境的路徑
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(){}
什么是標示符?
標識符:是賦予變量、類、方法的名稱。
標示符定義的規則?
首字母只能以字母、下劃線、$開頭,其后可以跟字母’下劃線、$和數字配置CLASSPATH 首字母小寫中間用大寫字母隔開 標識符具有一定的含義
什么是關鍵字?
關鍵字就是編程語言與機器語言的編碼約定
true、false、null、sizeof、goto、const那些是Java關鍵字 true、false、null 為JAVA的關鍵字
Java的基本數據類型有幾種?分別是? short int long boolean float double char byte
請寫出每種基本類型的默認值?取值范圍?分別給出一個定義的例子 默認值
取值范圍 示例
字節型 : 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;
在基本類型中,如果不明確指定,整數型的默認是什么類型?帶小數的默認是什么類型? 整數類型 默認為 int
帶小數的默認為 double
如何定義float類型和long型 float f = 1.2f
long l = 1.2L
什么是變量?
變量是用來引用一塊內存區域或一個值,用標識符來表示,可以通過操作變量來操作變量所對應的內存區域或值塊的值。
變量的定義規則?
以字母、$、下劃線開頭,其后可以跟字母、下劃線、$和數字; 首字母小寫,中間單詞用大寫字母隔開; 名稱具有一定含義;
請寫出Java編碼約定中對下列部分的要求:類、屬性、方法、包、文件名、變量、常量、控制結構、語句行、注釋
類: 一個類文件中類名要和文件名相同,類名一定要以大寫字母開頭,單詞之間用大寫字母分隔
屬性: 屬性名首字母小寫,中間用大寫字母隔開。
方法: 方法名首字母小寫,中間用大寫字母隔開。
包: 引用包必須寫在類文件的開頭,有且只能有一個包,全部用小寫字母。
控制結構:當語句是控制結構的一部分時,即使是單個語句,也應使用大括號將語句封閉。
語句行:每行只寫一個語句,并使用四個縮進的空格,使代碼更易讀,注意用分號結束。
注釋: 用注釋來說明那些不明顯代碼的段落。
常量: 常量名一般用大寫字母,單詞之間用下劃線分隔,一旦賦值不允許修改。
什么是Javadoc? 按照一定格式生成程序的文檔的工具。
什么是引用類型?
用戶定義類型, 它可引用類和數組。
除去基本數據類型的其他類型都是引用數據類型。
什么是按值傳遞?什么是按引用傳遞?
按值傳遞:就是將該值的副本傳過去(基本數據類型+String類型的傳遞,就是按值傳遞)
按引用傳遞:就是將值的內存地址傳過去(除基本數據類型+String以外類型的傳遞,就是引用傳遞)
如何創建一個新對象?如何使用對象中的屬性和方法? 使用new 關鍵字來創建一個新的對象;
通過對象的實例用”.“(點)來調用對象中的屬性和方法;
靜態的方法和屬性,也可以直接用類名”.“(點)來調用;
簡述new關鍵字所做的工作
new 創建一個對象,并為對象分配一塊內存。
簡述”=” 和”= =”的功能和區別 “=” 賦值,“= =”當比較基本數據類型的時候,判斷前后兩個值是否相等;
當比較引用數據類型的時候,判斷= =前后兩個值的內存地址是否相等;
區別:
= :為賦值表達式
= = :為邏輯表達式
什么是實例變量?什么是局部變量?什么是類變量?什么是final變量?
實例變量:
類中定義的變量,即類成員變量,如果沒有初始化,會有默認值;
局部變量:
在方法中定義的變量,必須初始化;
類變量:
用static修飾的屬性;
final變量:
用final 修飾的變量,簡述上述各種變量的定義規則和使用規則?
實例變量: 不需要static關鍵字來聲明,需要類的實例(對象)調用(用”.“);
類變量: 用static修飾,可以用類名調用,也可以用類的實例調用;
局部變量: 在方法內任意定義變量即為局部變量;
final變量: 一旦賦值,不可以再修改的變量;
final屬性只允許賦值一次,且只能通過構造方法賦值,定義后也就是一個常量;
final修飾的變量,只允許賦值一次
a++和++a的區別?
a++ : 先使用,后加1
++a : 先加1,后使用
請描述instanceof、?:、&、&&各自的功能
instanceof :用來判斷某個實例變量是否屬于某種類的類型。
? : 三目運算符:
表達式1?表達式2:表達式3
如果表達式1為true,執行表達式2,否則執行表達式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:終止(跳出)最近的循環
continue:跳出本次循環,執行下一次循環
定義一個一維的int數組,先創建它,并初始化它,給它賦值,然后輸出其中的一個值 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類型數組,直接定義并賦值,然后輸出其中的一個值 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]);} }
把上面的數組改成2維的數組 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]);} }
舉例說明數組拷貝方法的使用: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.無返回值類型
格式:訪問權限 類名(參數列表){};
1.自己定義構造后,就沒有默認的構造方法 2.無構造方法時,默認為空參的構造方法(無參數,方法體為空)析構方法:finalize
類銷毀時,自動調用方法
當對象在內存中被刪除時,自動調用該方法
在此方法中可以寫回收對象內部的動態空間的代碼
簡述Java的訪問修飾符類型?分別有什么功能? public 公開的,任何一個類都有可以訪問
protected 同包同類,只可被它的子類訪問
default 只能被同一個包中類訪問
private 私有的,只能在本類中被訪問
分別說明:在類上、在屬性上、在方法上能使用哪些訪問修飾符 在類上:public default final
在方法上: 訪問權限:public protected private default
方法修飾符:static final
返回類型:void
在屬性上:public protected private default
static final
簡述什么是包?包的功能
包:對所定義的多個JAVA類進行分組,將多個功能相關的類定義到一個包(文件)中。
功能:1.易于查找和使用適當的類
2.包不止包含類和接口,還可以包含其它包,形成層次的包空間
3.有助于避免命名沖突
請寫出5個以上的JDK中的包,以及他們的基本功能
java.awt: 包含構成抽象窗口工具集的多個類,用來構建和管理應用程序的圖形用戶界面
java.lang: 提供java編成語言的程序設計的基礎類
java.io:
包含提供多種輸出輸入功能的類,java.net:
包含執行與網絡有關的類,如URL,SCOKET,SEVERSOCKET,java.applet: 包含java小應用程序的類
java.util:
包含一些實用性的類
什么是包裝類?Java中都有哪些包裝類
在JDK中針對各種基本類型分別定義相應的引用類型 ————–稱為封裝類 Boolean Byte Short Integer Long Float Double Character
OOP(面向對象)語言的三大特征是? 封裝性,繼承性,多態性
分別表述類的三大特性及其他們的功能
封裝:隱藏類的實現細節、迫使用戶去使用一個接口去訪問數據、使代碼更好維護
繼承:子類可以直接繼承使用父類的方法,程序員只需要做的是定義額外特征或規定將適用的變化
多態性:同一個行為具有多個不同表現形式或形態的能力
如何實現繼承?繼承的規則? public class A extends B{ }
單繼承性
構造方法不能繼承
super引用父類,調用父類的屬性,方法
當子類中出現與父類的方法名,返回類型,參數列表相同的方法時要覆蓋此方法 簡述this和super的功能和用法 this :
能訪問除構造方法以外所有的屬性、方法,通過this.來調用方法和屬性 不可以在靜態方法中使用,在調用其它構造方法時,必須放在該構造方法的第一行
在構造方法中使用this(參數列表),相當于調用本類的其它構造方法,它必須作為構造方法的第一句
super :訪問父類
super.點取父類中被子類隱藏的方法和屬性,通過 super(參數列表)來調用父類的屬性和方法,在調用父類的構造方法時必須放在子類構造方法里的第一行;
如何確定在多態的調用中,究竟是調用的那個方法? new的是哪一個類就是調用的哪個類的方法。
請描述方法定義的完整的語法結構
權限修飾符 修飾符 返回類型 方法名(參數)例外{
方法體;}
什么是重載?
在一個類中出現方法名相同,但參數列表不同時,這種情況就是重載。
簡述重載的規則 方法名稱必須相同;
參數列表必須不同(個數不同,或類型不同,或參數排列順序不同); 與返回類型無關;
什么是方法的覆蓋?什么情況下出現? 方法覆蓋:
子類可以修改從父類繼承過來的行為,也就是說子類可以創建一個與父類方法有不同功能的方法,但具有相同的:名稱、返回類型名和參數列表。
在父子類的情況下出現時。
方法覆蓋的規則?
方法名要和父類中被覆蓋的方法名相同,返回類型相同,參數列表相同。訪問權限要大于等于被覆蓋方法的權限。例外列表要小于等于被覆蓋方法的例外列表。
static修飾符的功能是?可以用在什么地方?怎么訪問? static 修飾符功能:
共用一塊內存區域,也就是用static修飾的變量或成員方法對所有類的實例都是相同的 靜態成員方法和靜態變量的優點在于他們能在沒有創建類的任何一個實例的情況下被引用。可以用在方法或屬性上 訪問方式:
直接使用類名調用
new 一個實例,用實例調用
static的基本規則
類中的靜態方法只可以調用靜態的屬性和方法,不允許調用非靜態的屬性和方法。靜態變量為類變量,可以用類名直接調用靜態的屬性和方法。靜態方法中不允許出現this和super 構造方法不允許聲明static 非靜態變量為實例變量,通過實例調用 靜態方法不能被非靜態方法覆蓋
final修飾符的功能是?可以用在什么地方? 功能:final標記所有通用的功能,不能隨意更改
可以用在類、屬性和方法上
final的基本規則
final修飾的類不能被繼承
final修飾的成員變量只允許賦值一次,且只能通過構造方法里賦值。final修飾的局部變量即為常量,只能賦值一次。final修飾的方法不允許被子類覆蓋。
什么是抽象方法,什么是抽象類
用abstract修飾的方法,只有方法的聲明,而沒有方法的實現,就叫抽象方法。
用abstract修飾的類,就叫抽象類。
抽象類的規則
抽象類內部可以沒有抽象方法 必須用abstract修飾
不能夠直接使用抽象類,必須通過子類繼承并且實現 抽象方法不允許被private修飾
什么情況下使用抽象類
當一個類的一個或多個方法是抽象方法時;
當類是一個抽象類的子類,并且不能為任何抽象方法提供任何實現細節或方法體時; 當一個類實現一個接口,并且不能為任何抽象方法提供實現細節或方法體時;
equals方法和”= =”的功能和區別 功能:判斷對象是否相等
區別:
equals方法比較的是對象的值
= =:比較的是對象值的內存地址,對基本數據類型來說= =比較的是數值
toString方法的功能和基本寫法 返回一個String類型
public String toString(){
return “”;
}
String的方法的功能和基本使用方法,請描述5個以上
substring(參數1,參數2);功能:取字符串中參數1到參數2的的所有字符;“String”.subString(0,1);
replace(參數1,參數2);功能:用參數1中的值替換字符串中所有參數2的值 “String”.replace(ing,tt);
equals();功能:判斷兩個字符串是否相等 “String”.equals(“tt”);trim();功能:去掉字符串兩邊的空格 “String”.trim();
indexof();功能:查找字符串中參數所在位置,并返回字符串第一個出該參數的下標
“String”.indexOf(“ing”);
split();功能:根據參數分割該字符串 “String”.split(“-”);
為什么使用StringBuffer類?有什么功能和優點? –只創建一個對象
–StringBuffer 對象的內容是可以被修改的
–除了字符的長度之外,還有容量的概念
–通過動態改變容量的大小,加速字符管理
舉例說明如何使用StringBuffer StringBuffer sb = new StringBuffer();
sb.append(“aaa”);
如何使用Java讀寫系統屬性? 讀:
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();} } }
什么是接口?接口的定義規則?
接口是抽象方法和常量值的定義的集合。從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現。
public interface Tt {
public void outPut();
public int tt();}
接口的作用?為什么使用接口? 多重繼承
封裝、隔離
功能,實現的分離
多態
便于后期維護
接口是可插入性的保證。
什么是多重接口
就是一個類實現多個接口
描述接口的基本思想? 封裝 隔離
接口及相關機制的最基本作用在于:通過接口可以實現不相關類的相同行為,而不需考慮這些類之間的層次關系。
根據接口可以了解對象的交互界面,而不需了解對象所屬的類。
面向對象程序設計講究”提高內聚,降低耦合”。
如何在代碼中使用接口?
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();
如何選擇接口和抽象類?為什么? 優先選用接口,盡量少用抽象類
在下列情況下選擇抽象類:需要定義子類的行為,又要為子類提供共性的功能。
什么是異常,異常的分類?
程序中導致程序中斷的一些情況叫做異常,一般程序員可以處理。
異常分為運行時異常和非運行時異常(一般異常)
運行時異常是指因設計或實現方式不當導致的問題。也可以說,是程序員的原因導致的,本來可以避免發生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現這些異常的代碼不需要try塊包圍。
非運行時異常是指除運行時異常以外所有的異常,出現這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,簡述處理異常的兩種方式?
拋出(throws)和catch語句處理
簡述try塊的功能和規則
try塊內部一般寫一些編程人員認為可能會出現異常的代碼,使程序運行時不會因為出現異常而中斷。
簡述catch塊的功能和規則
功能:可以截獲所聲明的異常,并在語句塊內對其進行處理
規則:catch(Exeption e){
e.printStackTrace();
}
簡述finally塊的功能和規則
finally塊一般寫一些不論是否發生異常都必須執行一次的代碼
例如關閉與數據庫的連接等
簡述throw和throws的功能和使用方法 throw 指編程人員主動拋出一個異常
throw new NullPointerExeption();
throws指程序遇到異常情況自動的被動拋出一個異常
public void test()throws Exeption{}
異常的分類? 錯誤(Error): JVM 系統內部錯誤、資源耗盡等嚴重情況,程序員不可控制
例外(Exception):其它因編程錯誤或偶然的外在因素導致的一般性問題,程序可以控制
什么是預定義異常
java程序中預先定義好的異常叫做預定義異常
簡述自定義異常的規則 寫一個類繼承Exception
用戶自定義異常通常屬Exception范疇,依據慣例,應以Exception結尾,應該由人工創建并拋出。
什么是斷言?
用來證明和測試程序的假設。
如何使用斷言?舉例說明
一種是assert<<布爾表達式>>;另一種是assert<<布爾表達式>>:<<細節描述>>。
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不允許重復
如何給集合排序? 實現comparable接口
IO 什么是流?可畫圖說明
流是要傳輸的數據在源和目的地之間運行的軌跡。
描述I/O流的基本接口和類的結構
代碼示例:使用URL流,讀取網頁代碼 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”);//建立封裝統一資源定位符的類 URLConnection uc = url.openConnection();//打開連接
InputStreamReader isr = new InputStreamReader(uc.getInputStream());BufferedReader br = new BufferedReader(isr);
//傳輸數據 while(true){ String temp = br.readLine();if(temp==null){ break;} System.out.println(temp);} br.close();} }
什么是Unicode?
是一種字符的編碼方式,占16位字節,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);
什么叫保持?什么是可序列化?如何實現可序列化?
將一個對象存放在某種類型的永久存儲器上(比如硬盤,光盤,軟盤等),稱為保持。標識一個類可以被持久化,叫序列化,也叫串行化或持久化。表示這個類中的數據可以按流式輸出。
實現可序列化的方法:實現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);
}
多線程
什么是線程? 輕量級的進程
線程的三個部分是? 處理機
代碼
數據
為什么使用多線程 使UI響應更快
利用多處理器系統
簡化建模
代碼示例:Java中實現多線程的兩種方式,包括如何定義多線程,如何使用多線程 實現Runnable接口
class Thread1 implements Runnable{
public void run(){
//run里一般寫一個while(true)循環
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();
}
}
如何實現線程的調度?如何暫停一個線程的運行 調度用wait和notify,—-
sleep()
什么是線程的優先級
判斷哪個線程先執行的級別
簡述sleep方法和wait方法的功能和區別 sleep是讓線程休眠一段時間
wait是讓線程掛起
什么是守候線程
隱藏在后臺持續運行的線程
什么是臨界資源
指多個線程共享的資源
什么是互斥鎖,Java中如何實現
用來保證在任一時刻只能有一個線程來訪問臨界資源的那個標記
在Java中使用
用在對象前面限制一段代碼的執行
用在方法聲明中,表示整個方法為同步方法。
什么是死鎖?如何避免?
如果程序中有多個線程競爭多個資源,就可能會產生死鎖。當一個線程等待由另一個線程持有的鎖,而后者正在等待已被第一個線程持有的鎖時,就會發生死鎖。
要避免死鎖,應該確保在獲取多個鎖時,在所有的線程中都以相同的順序獲取鎖。盡量少用臨界資源。
簡述wait和notify,notifyAll的使用
被鎖定的對象可以調用wait()方法,這將導致當前線程被阻塞并放棄該對象的互斥鎖,即解除了wait()方法的當前對象的鎖定狀態,其他的線程就有機會訪問該對象。
notify使等待隊列上的一個線程離開阻塞狀態
notifyAll使等待隊列上的所有線程離開阻塞狀態
Socket編程
什么是url?基本的格式是? 統一資源定位器
Http://www.tmdps.cn:port
簡述IP,Port,TCP的基本功能 IP代表網絡位置
Port代表端口號
TCP可保證不同廠家生產的計算機能在共同網絡環境下運行,解決異構網通信問題,是目前網絡通信的基本協議
簡述Java網絡模型的基本功能 描述服務端和客戶端的連接過程
簡述Java網絡編程究竟做些什么?如何做? 1.建立連接
2.準備輸出的數據,流式輸出
3.流式輸入,編程業務需要的格式
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區別
TCP(傳輸控制協議)和UDP(用戶數據報協議)是傳輸層協議
TCP是面向連接的可靠數據傳輸協議,能保證傳輸內容的完整和準確;數據傳輸的輔助開銷大,效率低
UDP: 是無連接的,不可靠地傳輸協議,不能保證傳輸內容的完整和準確,對信息的適時要求比較高
設計模式
什么是設計模式?
就是經過實踐驗證的用來解決特定環境下特定問題的解決方案。
設計模式用來干什么? 尋找合適的對象
決定對象的粒度
指定對象的接口
描述對象的實現
運用復用機制
重復使用經過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少工作量、提高正確率等目的什么是對象粒度
對象中方法的大小就是粒度
基本的Java編程設計應遵循的規則? 面向接口編程,優先使用對象組合設計模式的應用范圍
所能解決的特定的一類問題中
簡述什么是單例模式,以及解決的問題,應用的環境,解決的方案,應用時應注意什么? 解決的問題:在任何時間內只有一個類實例存在的模式。
應用環境:需要有一個從中進行全局訪問和維護某種類型數據的區域的環境下使用單例模式。
解決方案:保證一個類只有一個類實例存在。
本質:控制實例的數量。
注意:要合理的使用單例,避免單例成為瓶頸。
代碼示例:單例模式的兩種實現方法,并說明優缺點 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;
} }
第一種方式:裝載類的時候就創建類的實例,用空間換時間。
第二種方式:延遲裝載,不需每次都創建一個類實例,而只是在第一次使用時創建,有效的利用資源,用時間換資源。
簡述什么是工廠模式,以及他解決的問題,應用的環境,解決的方案,模式的本質 利用工廠來解決接口選擇的問題的模式。
應用環境:當一個類無法預料要創建哪種類的對象或是一個類需要由子類來指定,創建的對象時,就需要用到工廠模式。
解決方案:定義一個創建對象的類,在類的方法中決定具體實例化哪一個類。
本質:就是根據不同的情況來選擇不同的實現類,重在選擇。
代碼示例:工廠模式的實現方法 單獨是使用工廠:
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();} }
簡述什么是值對象模式,以及他解決的問題,應用的環境,解決的方案,模式的本質 用來把一組數據封裝成一個對象的模式
解決問題:在遠程方法的調用次數增加的時候,相關的應用程序性能將會有很大的下降
解決方案:使用值對象的時候,可以通過僅僅一次方法調用來取得整個對象,而不是使用多次方法調用以得到對象中每個域的數值
本質:封裝數據。
代碼示例:值對象模式的實現方法 步驟:
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模式,以及他解決的問題,應用的環境,解決的方案,模式的本質 數據訪問對象
解決問題:根據數據源不同,數據訪問也不同。根據存儲的類型(關系數據庫、面向對象數據庫、純文件等)和供應商實現不同,持久性存儲(如數據庫)的訪問差別也很大。如何對存儲層以外的模塊屏蔽這些復雜性,以提供統一的調用存儲實現。程序的分布式問題
解決方案:將數據訪問邏輯抽象為特殊的資源,也就是說將系統資源的接口從其底層訪問機制中隔離出來;通過將數據訪問的調用打包,數據訪問對象可以促進對于不同數據庫類型和模式的數據訪問。
本質:分層,是系統組件和數據源中間的適配器。(一層屏蔽一種變化)
代碼示例:DAO模式的實現方法
什么是框架?框架的優點?
框架是能夠完成一定功能的半成品
1.優點:完成一定的功能、提供一個精良的應用程序架構
2.框架都是以接口的形式出現
3.應該了解框架完成的功能、框架的API接口、框架的功能是怎么實現的什么是開放-封閉法則(OCP)可擴展但是不可以更改已有的模塊
對擴展是開放的,對修改是封閉
什么是替換法則(LSP)使用指向基類(超類)的引用的函數,必須能夠在不知道具體派生類(子類)對象類型的情況下使用。
如何綜合使用我們學過的設計模式來構建合理的應用程序結構
是采用接口進行隔離,然后同時暴露值對象和工廠類,如果是需要數據存儲的功能,又會通過DAO 模式去與數據存儲層交互。
構建常用的合理的Java應用包結構 Ui(表現層)
business–factory,ebi,ebo
dao–factory,dao,impl
awt、swing 什么是GUI中的容器?什么是GUI中的組件?
容器:能包含其他container和其他component的component。
組件:在設計上能實現一定功能的封裝體;
簡述AWT中的Frame、Panel和組件的關系
組件放在Panel上,而多個Panel可以疊加到Frame上,Frame一般只有一個,各個Panel可以互相在Frame上切換
簡述如何使用一個組件
初始化,加到容器中,注冊事件,實現相應的事件
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 網格式分布
XYLayout 坐標分布
什么是JFC(Java基礎類)?
是關于GUI組件和服務完整集合,主要包括5個API:
AWT,JavaD,Accessibility,Drag&Drop,Swing
提供了幫助開發人員設計復雜應用程序的一整套應用程序開發包;
Swing和AWT的區別?
Swing提供了更完整的組件,引入了許多新的特性和能力。Swing API是圍繞著實現AWT 各個部分的API 構筑的。
AWT 采用了與特定平臺相關的實現,而絕大多數Swing 組件卻不是這樣做的,因此Swing 的外觀和感覺是可客戶化和可插的。
什么是雙緩沖?
在后臺進行界面的更新,然后在前臺進行界面交換
功能:雙緩沖可以改善一個被頻繁改變的組件的外觀
描述GUI的事件機制
事件源:是一個事件的產生者,或產生事件的組件對象
事件監聽器:調用事件處理方法的對象
事件處理器:就是一個接收事件、解釋事件并處理用戶交互的方法。
描述Swing應用程序的基本結構? 組件定義
初始化界面
各種事件處理方法
各種適配類
描述表現層的基本功能? 展示數據
人機交互
收集參數、調用邏輯層api
描述在開發Swing應用程序中,一般都要寫那些代碼?都寫到什么地方? 一般要在類的初始化的時候給組件賦值,寫在jinit的方法里面
一般要在按扭的事件處理中寫收集參數,組織參數,調用業務接口的方法
對于GUI組件而言,最主要的方法是哪些? 初始化
如何給組件初始化
如何從組件中取值
設計組件的屬性
如何學習GUI組件的用法?
主要學會組件的定義、取值、賦值的方法
類比學習
JavaScript
什么是Javascript JavaScript是一種基于對象(Object)和事件驅動(Event Driven)并具有安全性能的腳本語言。
Java和Javascript的區別
1、基于對象和面向對象
Java是一種真正的面向對象的語言,即使是開發簡單的程序,必須設計對象。
JavaScript是種腳本語言,它可以用來制作與網絡無關的,與用戶交互作用的復雜軟件。它是一種基于對象(Object Based)和事件驅動(Event Driver)的編程語言。因而它本身提供了非常豐富的內部對象供設計人員使用。
2、解釋和編譯
兩種語言在其瀏覽器中所執行的方式不一樣。Java的源代碼在傳遞到客戶端執行之前,必須經過編譯,因而客戶端上必須具有相應平臺 上的仿真器或解釋器,它可以通過編譯器或解釋器實現獨立于某個特定的平臺編譯代碼的束縛。
JavaScript是一種解釋性編程語言,其源代碼在發往客戶端執行之前不需經過編譯,而是將文本格式的字符代碼發送給客戶編由瀏覽器 解釋執行。
3、強變量和弱變量
兩種語言所采取的變量是不一樣的。
Java采用強類型變量檢查,即所有變量在編譯之前必須作聲明。
JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,而是解釋器在運行時檢查其數據類型,4、代碼格式不一樣
Java是一種與HTML無關的格式,必須通過像HTML中引用外媒體那么進行裝載,其代碼以字節代碼的形式保存在獨立的文檔中。
JavaScript的代碼是一種文本字符格式,可以直接嵌入HTML文檔中,并且可動態裝載。編寫HTML文檔就像編輯文本文件一樣方便。
5、嵌入方式不一樣
在HTML文檔中,兩種編程語言的標識不同,JavaScript使用來標識,而Java使用來標識。
6、靜態聯編和動態聯編
Java采用靜態聯編,即Java的對象引用必須在編譯時的進行,以使編譯器能夠實現強類型檢查。
JavaScript采用動態聯編,即JavaScript的對象引用在運行時進行檢查,如不經編譯則就無法實現對象引用的檢查。
Javascript的運行環境 具備javascript運行器的如何在web頁面加入Javascript,請寫出兩種方式并示例
alert(11);
第二篇:java程序員基礎知識
目前,JAVA是開發人員的熱寵,很多論壇都有不少熱愛JAVA的開發人員,也有不少想成為JAVA程序員,但苦于不知道該如何學習,也不清楚該學些什么知識才能成為一個JAVA程序員。本人在這里拋磚引玉,和大家討論成為一個JAVA初級程序員應該具有的知識,與大家共享。
個人認為想成為一個合格的JAVA初級程序員應該具備如下知識:
一、面向對象的知識:JAVA是一個面向對象的開發語言,因此熟悉面向對象對學習JAVA很有必要,您要了解:什么是對象,什么是類;什么是封裝,什么是多態,什么是繼承;什么是抽象類,什么是接口。了解了概念后,您還需要這些概念是如何體現的,如類和對象有什么區別?類是如何封裝的?
二、JAVA語法:如果您已經有了開發經驗,恭喜您,您學習JAVA語法來將比較容易。如果您有C++等面向對象語言的開發經驗,您只需簡單的翻看一下介紹JAVA的相關書籍就可以了。如果您是新手,沒有關系,您下些工夫,好好研究一本JAVA初級教程之類的書就可以了。
學習了JAVA語法,加上面向對象的知識,只有您用心,您就可以寫出來比較好的JAVA代碼了。如果您再抽出時間熟悉一下JAVA編程規范,您代碼的水平就應該不俗了。
三、JSP和HTML:在我國的絕大多數公司,做JAVA程序員都少不了和JSP以及HTML打交道。因此,想成為JAVA程序員就不可避免的要熟悉JSP和HTML,您最好能知道JSP的幾個內置對象,如Session,Request,Reponse,以及常用的JSP標簽,如
include,userBean等。盡管一些工具會幫您生成HTML代碼,但您還是要熟悉比如title等。如果您再熟悉一下JS和CSS就更好了,那會使您制作的頁面更友好。
四、WebServer:熟悉了以上三種,可以肯定的說您已經可以制作出來JSP頁面了,您也可以在您的頁面里使用自己開發的JAVA類,但您的頁面總要跑起來才能看到您要的效果,這就要求您必須熟悉一種WebServer,比如:TOMCAT等。您要熟悉如何發布您的應用,如何利用WebServer的數據庫資源等。
五、開發工具:大家都知道,開發工具可以幫助您更好更快地開發,因此熟悉幾種開發工具很有必要。目前JAVA的開發工具比較流行的有Eclipse,HTML的開發工具有Dreamweaver等。
六、熟悉一種框架:熟悉一種框架其實是成為JAVA程序員的一種可選知識,但目前開發B/S結構的應用的開發小組,都差不多會采用一種框架來構建自己的應用系統??蚣芏紩性S多可重用的代碼,良好的層次關系和業務控制邏輯,基于框架的開發使你可以省出很多的開發成本。目前比較流行的框架有Struts和Spring等。
如何成為一名合格的java程序員?(轉)
程序學習2008-05-27 19:56閱讀35評論01、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據
報錯信息知道是什么樣的語法錯誤并且知道任何修正。
2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設置、插件的安裝配置以及進行調試。
4、API:Java的核心API是非常龐大的,但是有一些內容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
1)、java.lang包下的80%以上的類的功能的靈活運用。
2)、java.util包下的80%以上的類的靈活運用,特別是集合類體系、規則表達式、zip、以及時間、隨機數、屬性、資源和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的基本內容,包括各種組件事件、監聽器、布局管理器、常用組件、打印。
10)、Swing的基本內容,和AWT的要求類似。
11)、XML處理,熟悉SAX、DOM以及JDOM的優缺點并且能夠使用其中的一種完成XML的解析及內容處理。
5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用ant完成工程管理的常用任務,例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應該可以根據異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發的系統才能是真正的Java系統。
9、規范:編寫的代碼必須符合流行的編碼規范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
第三篇:java 初級程序員 個人簡歷
個人簡歷
個人資料
姓名: 出生: 性別: 籍貫: 體重: XXX 1992 男 貴州興仁 53kg
專業: 計算機應用技術 學歷: 大專 學校: XXXXX 手機: XXXXX
郵箱: XXXXX@qq.com
照片
現居地址: XXXXX IT技能
1.能夠運用Java開發環境。
2.能夠應用JSP/Servlet/JDBC/JavaBean的MVC模式開發項目。
3.能使用Struts2、Spring、Hibernate、Springmvc、Shiro框架進行項目開發。4.掌握EL表達式、Ajax、Js、JQuery(EasyUI)等技術。5.能夠使用數據庫sql語句,主要使用mysql。6.了解solr搜索引擎的使用。
7.了解流程引擎activiti的原理和流程引擎的配置。
其他技能
ps中級技能證已取得駕照資格:C1
實習經歷
XXXXX XXXXX
項目經驗
(1)流程引擎——OA系統
使用技術:activiti,springmvc、Spring、Hibernate、Oracle、jsp、javascript、jquery(EasyUi)、Json、Ajax、XML,solr。
我所參與的項目功能:登錄、注冊,權限管理、請假單流程管理。開發工具: myeclipse2014 , Tomcat7.0 , Oracle
功能介紹:登錄模塊:涉及到登錄人的身份問題,使用shiro對用戶進行認證與授權。
注冊模塊:檢測注冊賬號唯一性,輸入兩次一致的密碼,然后保存到數據庫。權限管理模塊:引入了shiro來實現。主要功能有賬戶權限分配、用戶角色權限綁定、用戶基本信息增刪改查。引入了shiro的標簽庫使用了hasRole和hasPermission這一類的標簽來實現不同的權限給用戶操作。請假單流程管理模塊:采用了activiti流程引擎。對“請假”這一功能的操作。普通用戶編輯,保存到草稿箱或者提交。管理員審批通過,流程結束。管理員駁回,普通用戶修改再提交。普通用戶可查詢寫過的歷史請假單,管理員可查詢審批過的請假單。(2)進銷系統
使用技術:jsp、Struts2、Spring3、js、jdbcTemplate 開發工具:myeclipse2014, Mysql,Tomcat7.0 我所參與的項目功能:用戶管理、權限設置、選項設置、系統日志、業務管理。
用戶管理:對用戶基本信息進行錄入修改管理,完成用戶的增刪改查操作,對用戶的權限進行角色的分配,綁定和修改,一個用戶先定于綁定一種角色。
權限管理:對于要角色的增加和修改查詢刪除,角色在邦定權限、為角色分配模塊和按鈕。選項設置:對后面用到的選項進行分類管理,用戶可以添加修改選項的分類,單位等。
系統日志:可以記錄每一個用戶的操作的模塊,操作的動作,IP地址,用戶名,時間。
業務管理:對訂單的錄入和管理工作,該功能要有訂單審核、審批、發送,訂單的流程的跟蹤管理。(3)文章推推發文管理
使用技術:jsp、Struts2、Spring3、js、jdbcTemplate
項目功能:登陸頁面、用戶注冊、文章列表、增刪改查等 開發工具:myeclipse2014,Mysql,Tomcat7.0 主要模塊:登陸模塊用戶注冊模塊 文章管理模塊
模塊功能介紹:登錄模塊:對登錄的賬戶進行驗證。忘記密碼:是在登錄的時候,忘記密碼將使用這個功能,會根據用戶填寫的已知信息和在注冊的時候綁定的郵件進行一個新密碼的生成和郵件發送。
注冊模塊:檢測并確保注冊賬戶確保賬戶唯一性,然后將用戶信息保存到數據庫。
文章管理模塊:實現了對新發表的文章和已經發表過的文章進行了列表化的顯示,實現了分頁以及搜索功能。在列表中,可以對即將發表的文章進行新增、修改、查詢、刪除等操作,再做出相應的提交步驟。對于已發表的文章可以進行查詢和刪除。
自我評價
本人勤懇務實,腳踏實地,對待工作認真負責,虛心好學,不拖拉,有良好的團隊精神。性格隨和,熱愛運動,樂觀開朗,善于在實踐中學習和積累,不斷的提高自身技能。同時也有很多不足的地方,在細節方面的把握有待提高;時常因為疏忽大意寫錯關鍵字,造成代碼錯誤,正在努力改正;Java方面所學習的理論知識運用到實踐的能力還有所欠缺,運用得不夠靈活,需要在實踐中積累經驗。
第四篇:JAVA程序員面試技巧
java程序員面試題 第一部分:選擇題 question no: 1
1、public class test { public static void changestr(string str){ } public static void main(string[] args){ string str=1234;changestr(str);system.out.println(str);} } please write the output result : question no:2 1.public class test { 2.static boolean foo(char c){ 3.system.out.print(c);4.return true;5.} 6.public static void main(string[] argv){ 7.int i =0;8.for(foo(a);foo(b)&&(i<2);foo(c)){ 9.i++;10.foo(d);12.} 13.} 14.} what is the result? a.abdcbdcb b.abcdabcd d.an exception is thrown at runtime.question no: 3 1.class a { 2.protected int method1(int a, int b){ return 0;} 3.} which two are valid in a class that extends class a?(choose two)a.public int method1(int a, int b){ return 0;} b.private int method1(int a, int b){ return 0;} c.private int method1(int a, long b){ return 0;} d.public short method1(int a, int b){ return 0;} e.static protected int method1(int a, int b){ return 0;} question no: 4 1.public class outer{ 2.public void someoutermethod(){ 3.// line 3 4.} 5.public class inner{} 6.public static void main(string[]argv){ 7.outer o = new outer();8.// line 8 9.} 10.} which instantiates an instance of inner? a.new inner();// at line 3 b.new inner();// at line 8 c.new o.inner();// at line 8 d.new outer.inner();// at line 8//new outer().new inner()question no: 5 which method is used by a servlet to place its session id in a url that is written to the servlet’s response output stream? question no: 6 which two are equivalent?(choose two)a.b.c.d.e.f.g.question no: 7 which of the following statements regarding the lifecycle of a session bean are correct? 1.java.lang.illegalstateexception is thrown if sessioncontext.getejbobject()is invoked when a stateful session bean instance is passivated.2.sessioncontext.getrollbackonly()does not throw an exception when a session bean with bean-managed transaction demarcation is activated.3.an exception is not thrown when sessioncontext.getusertransaction()is called in the afterbegin method of a bean with container-managed transactions.5.accessing resource managers in the sessionsynchronization.afterbegin method of a stateful session bean with bean-managed transaction does not throw an exception.第二部分:概念題
1.描述struts體系結構?對應各個部分的開發工作主要包括哪些? 3.jsp有哪些內置對象和動作?它們的作用分別是什么?
4、sql問答題
select * from table 和
select * from table where name like %% and addr like %% and(1_addr like %% or 2_addr like %% or 3_addr like %% or 4_addr like %%)的檢索結果為何不同?
5、sql問答題
表結構:
1、表名:g_cardapply 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_applydate bigint 8;//申請日期 g_state varchar 2;//申請狀態
2、表名:g_cardapplydetail 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_name varchar 30;//申請人姓名 g_idcard varchar 18;//申請人身份證號 g_state varchar 2;//申請狀態
其中,兩個表的關聯字段為申請單號。
題目:
1、查詢身份證號碼為***的申請日期
2、查詢同一個身份證號碼有兩條以上記錄的身份證號碼及記錄個數
3、將身份證號碼為***的記錄在兩個表中的申請狀態均改為07
4、刪除g_cardapplydetail表中所有姓李的記錄
華為java筆試題
一、單項選擇題
1.java是從()語言改進重新設計。a.ada b.c++ c.pasacal d.basic篇二:java程序員面試注意事項
一、回答問題的思路
先正面敘述一些基本的核心知識,然后描述一些特殊的東西,最后再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要隨便寫上。把答題像寫書一樣寫。我要回答一個新技術的問題大概思路和步驟是:我們想干什么,干這個遇到了什么問題,現在用什么方式來解決。其實我們講課也是這樣一個思路。
答題時,先答是什么,再答有什么作用和要注意什么(這部分最重要,展現自己的心得)。答案的層次分明,條理清楚都非常重要,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。要講你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想著是辯論賽。答題就是給別人講道理、擺事實。答題不局限于什么格式和形式,就是要將自己的學識展現出來!
另外,不要因為人家題目本來就模棱兩可,你就心里膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進去了,你們以后就是同事了,可不是差不多的嗎?
二、關于就業薪水
如果你是應屆生,那不能要高工資,好比大餅的故事,要拿高工資,就去中關村!少數人基礎確實很好,在校期間確實又做過一些項目,那仍然是可以要到相對高的工資的。
初級程序員薪水:2000-4500 中級程序員薪水:4000-7000 高級程序員薪水:7000以上
公司招聘程序員更看重的要用到的編碼技術、而不是那些業務不太相關的所謂項目經歷:
三、公司想招什么樣的人
對于一些公司接到了一些項目,想招聘一些初中級的程序員過來幫助寫代碼,完成這個項目,你更看重的是他的專業技術功底,還是以前做過幾個項目的經歷呢?我們先排除掉那些編碼技術功底好,又正好做過相似項目的情況,實際上,這種魚和熊掌兼得的情況并不常見。其實公司很清楚,只要招聘進來的人技術真的很明白,那他什么項目都可以做出來,公司招人不是讓你去重復做你以前的項目,而是做一個新項目,業務方面,你只要進了項目團隊,自然就能掌握。所以,大多數招聘單位在招聘那些編碼級別的程序員時也沒指望能招聘到做過類似項目的人,也不會刻意去找做過類似項目的人,用人單位也不是想把你招進,然后把你以前做過的項目重做一遍,所以,用人單位更看重招進來的人對要用到的編碼技術的功底到底怎樣,技術扎實不扎實,項目則只要跟著開發團隊走,自然就沒問題。除非是一些非常專業的行業,要招聘特別高級的開發人員和系統分析師,招聘單位才特別注重他的項目經驗和行業經驗,要去找到行業高手,公司才關心項目和與你聊項目的細節,這樣的人通常都不是通過常規招聘渠道去招聘進來的,而是通過各種手段挖過來的,這情況不再我今天要討論的范圍中。
四、公司面試會問什么,.技術學得明白不明白,人家幾個問題就把你的深淺問出來了,只要問一些具體的技術點,就很容易看出你是真懂還是假懂,很容看出你的技術深度和實力,所以,技術是來不得半點虛假的,必須扎扎實實。
由于項目的種類繁多,涉及到現實生活中的各行各業,什么五花八門的業務都有,例如,酒店房間預定管理,公司車輛調度管理,學校課程教室管理,超市進銷存管理,知識內容管理,等等……成千上萬等等,但是,不管是什么項目,采用的無非都是我們學習的那些目前流行和常用的技術。技術好、經驗豐富,則項目做出來的效率高些,程序更穩定和更容易維護些;技術差點,碰碰磕磕最后也能把項目做出來,無非是做的周期長點、返工的次數多點,程序代碼寫得差些,用的技術笨拙點。如果一個人不是完完全全做過某個項目,他是不太關心該項目的業務的,對其中的一些具體細節更是一竅不知,(如果我招你來做圖書管理,你項目經歷說你做過汽車調度,那我能問你汽車調度具體怎么回事嗎?不會,所以,你很容易蒙混過去的)而一個程序員的整個職業生涯中能實實在在和完完整整做出來的項目沒幾個,更別說在多個不同行業的項目了,有的程序員更是一輩子都只是在做某一個行業的項目,結果他就成了這個行業的專家(專門干一件事的家伙)。所以,技術面試官通常沒正好親身經歷過你簡歷寫的那些項目,他不可能去問你寫的那些項目的具體細節,而是只能泛泛地問你這個項目是多少人做的,做了多長時間,開發的過程,你在做項目的過程中有什么心得和收獲,用的什么技術等面上的問題,所以,簡歷上的項目經歷可以含有很多水分,很容易作假,技術面試官也無法在項目上甄別你的真偽。
五、簡歷怎么寫
簡歷該怎么寫:精通哪些技術,有一些什么項目經歷
六、怎樣達到簡歷上的標準(培訓中心教項目的目的)教項目是為了鞏固和靈活整合運用技術,增強學習的趣味性,熟悉做項目的流程,或得一些專業課程中無法獲得的特有項目經驗,增強自己面試的信心。講的項目應該真實可靠才有價值,否則,表面上是項目,實際上還是知識點的整合,對鞏固技術點和增強學習的趣味性,但無法獲得實際的項目經驗。
第五篇:java程序員面試必讀
Java程序員,面試必讀
☆★☆★快來!10月25日讀者見面會☆★☆★
清華大學出版社《Java程序員,上班那點事兒》作者:鐘聲 章節:1.2.2:
面試是一個“簡單”而又“復雜”的事情,正因為它具有“簡單”和“復雜”的雙重性質,才使我們對這個問題不敢掉以輕心。介紹如何面試,有時候甚至可以寫一本書,而有時候,你什么都不準備卻可以面試成功。
因為,面試的成功與否完全取決于主考官,因此,這門學問的主要科目就是研究主考官的招聘心理。
我們研究好主考官的招聘心理,自然就可以做到“知己知彼”了。
本小節只是說說面試的“心理戰”,而想真正的能夠對答如流,需要的是“真功夫”,要想具備“真功夫”還是需要真正的技術水平作為前提的,本小節的內容只是給那些已經具備相應技術水平的應聘者提供一定的應聘技巧而已,以避免沒有把自己的“真功夫”完全展示出來從而喪失工作機會。
面試前對自己的心理暗示:
面試并不是考試,只是和未來的同事聊聊天。
“心理戰”對象,可能出現的主考官如下幾類:
人物1,人力資源部主管(HR)
人物2,你未來的主管
人物3,你未來主管的主管
我們分別來分析遇到不同類型的主考官的不同情況。
人物1:人力資源部主管(HR)
“人物1”的出現往往是進行該職位的初審,給出一個概觀定論,如果合格將會提交給“人物2”?!叭宋?”他們所要進行的是對人的心理和基本技能方面的一個判斷。
不過,也有一些公司,首次面試仍然是由業務主管來進行,然后再將初審合格的人交給人力部門來復試,如果,是這種情況,你應該就算90%入職成功了,因為,這個復試往往是走個形式,看看此人有沒有被主管忽略的大問題,如果沒有,基本就差不多了。
那么,我們僅僅以第一種情況為例,看看“人物1”大多提出的是哪些問題。
常見提問1:請你自我介紹一下
這個問題,是人力部主考官必問的問題,這個問題的提問并不是真的想了解你的個人情況,因為,你的情況基本上在簡歷上都寫著呢。他提出這個問題的主要目的是來考察你的語言表達能力,和你在表達過程中的一些細節表現。
所以,我們應該怎么回答呢?
看看如下對話:
HR:“請你自我介紹一下”
A君:“您看簡歷吧,基本上我都寫在簡歷上了?!?/p>
HR:汗?
HR:“請你自我介紹一下”
B君:“我叫XXX,年齡24,性別男,籍貫??”
HR:倒?
HR:“請你自我介紹一下”
C君:“這話從何說起呢?話說10年前??”
HR:暈?
首先,不要認為主考官沒有認真的看你的簡歷,沒有看你的簡歷就讓你來面試,是在浪費他自己的時間,所以絕對是首先認為簡歷比較合適,才約你來的。
第二,自我介紹并不是讓你重復一下你簡歷上的所有內容,那些內容簡歷上都有,主考官主要是想聽聽你如何表達和語言的邏輯能力。
第三,這個表達不要滔滔不絕,要有張有弛,有收有放,主要將自己的想說的優勢部分分別道來,能夠通過你的介紹讓人感覺到你的“親和力”為佳。
“語言表達能力”并非我們日常所說的“能侃”或者“口才”,這是片面的理解,在面試過程中,我們要展現的“語言表達能力”是指,“語言親和力”,能夠讓人感受到你的“溝通”能力。
回答范例:
您好!我來自XXX大學,是應屆畢業生,所學專業是計算機應用技術,我在校期間參加多項課余工作,參與了多個應用系統的開發與設計,熟練掌握Java開發工具和應用系統的各種開發方法。在學習與工作期間,總結與實踐了各種技術實現手段,有了一些小的積累。
近期已經畢業,看到您公司的招聘信息,感覺自己的技術與能力非常合適,就投遞了簡歷。希望能過了您這關,呵呵??(注:最后的微笑最好不要太牽強,目的是緩和氣氛)
大家看到了,這個回答范例的自我介紹非常簡練,但是,什么也沒有落下。既實事求是的說了自己是應屆畢業生,又說明了自己雖然是應屆畢業生,但是參加了很多的課余工作,并且具有實際的項目開發經驗,而且有了一些小的積累。
既說了自己的對這份工作和自己能力之間的考量,又表達了自己對主考官的期望。
意思表達時不卑不亢,言簡意賅,讓人聽起來就感覺很舒服。
這時候你的目的就達到了,展現出自己的“語言表達能力”和“語言親和力”,同時又能夠讓人感受到你的“溝通”能力。
常見提問2:你最大的優點是什么?
這個問題如果是HR問,則最好回答了。
回答這個問題的關鍵是“圍繞自己的技術特長”展開話題,為什么這樣?
因為,往往HR都不懂技術,圍繞技術說自己的特長很容易給他說暈(當然,個別懂技術的HR除外)。這里要注意的是,在說技術問題的時候,不要讓HR感覺自己什么都不懂,要注意說話的節奏,不要太快,不要太驕傲。
常見提問3:你最大的缺點是什么?
這個問題是HR的殺手锏,可以說這是HR的狠招,這個問題最難回答,一般應聘者都本著“揚長避短”的心態去面試,冷不防冒出這么一個問題,還真是挺棘手的。
需要清楚HR問這個問題的目的,其目的仍然不是要真的需要知道你的缺點是什么,還是看看你的表達能力,尤其是需要考察應聘者面對危機的時候的處理能力。所以,我們不要用下列方式作答:
1、說出自己的真實缺點,尤其是在前面談話中沒有暴露出來的缺點
2、認為說說某些大眾化的缺點即可,認為說一兩個無妨
3、說自己沒有缺點,強調自己比較完美
總之,HR心里想的是:需要了解他面前的這個人在面對困難的時候,是如何處理問題的,從處理危機的方法來判斷此人的處理事情的靈活性。當然,如果此人自己暴露出自己的缺點當然更好,省得需要去想辦法問更多的問題去發現了。
所以,在回答這個問題的時候,要看起來“真誠”、“坦白”,同時,說出來的并非自己的缺點,而是最好在別人看來是優點的那些方面。
這個問題問的概率很大,通常如果求職者說自己小心眼、愛忌妒人、非常懶、脾氣大、工作效率低,肯定不會錄用你。HR喜歡求職者從自己的優點說起,中間加一些小缺點,最后再把問題轉回到優點上,目的還是突出自己優點的部分。
HR喜歡聰明的求職者。
這一點比較難掌握,我們也給出范例:
回答范例:
呵呵,這個問題好難回答??!我想想??(親和力表現,也緩解了自己的緊張情緒)
我的缺點是,比較執著,比如在技術方面比較愛鉆研,有的時候會為一個技術問題加班到深夜。還有就是,工作比較按部就班,總是按照主管的要求完成任務。另外的缺點是,總在自己的工作范圍內有創新意識,并沒有擴展給其他同事。這些問題我想我可以進入公司以后以最短的時間來解決,我的學習能力很強,我相信可以很快融入公司的企業文化,進入工作狀態。
嗯??,我想就這些吧。
這個回答范例開頭第一句話就讓人覺得很自然,因為這個求職者所說的話恰恰表達了一般人聽到這個問題后的心理狀態,還有你一定會有一個思考的時間,因為,誰也不會立刻說出自己的缺點。
后面說出的幾個缺點都是一環套一環的,說了自己“比較執著”,但又說自己其實是“比較愛鉆研”,說自己總是“按部就班”,但又補充了其實那是“按照主管的要求完成任務”,這時候,如果用人單位覺得,此人是不是沒有“創新思維”的時候,馬上就補充道“在自己的范圍內有創新意識”,至于“沒有擴展給其他同事”這件事,其實無關緊要,干脆就賣給HR吧。
以上回答確實賣弄了些“技巧”,相信HR也一定能看的出來,但是,即使看出來了也無妨,HR也會心領神會,知道你是一個比較善于溝通并且善于表達的人。
人物2:你未來的主管
當見到未來主管的時候,往往是應聘者已經過了HR那一關,或者應聘者已經過了筆試的那一關,因此見到這位人物意味著距離成功已經向前進了一步。
“人物2”的面試也有他的目的,他是和你在日常工作中接觸最多的人,作為你的直接上司,他需要在工作中經常給你分配任務,他需要對他的主管負責,因此,他招聘的這個人選必須是可以幫助他完成他整個Team的目標的人。
往往那個吸引你來面試的“招聘啟示”就是這個人物所撰寫的,因此,其實在你和他見面以前,早已經通過“招聘啟示”和他有過交往了。因此,從“招聘啟示”中就可以初顯這位主管的端倪。
注意,主管同志并不是人事領域的高手,不會用各種語言技巧去發掘你身上的缺點或者優點,往往問題都是實打實的,或者比較一針見血的,而且,更偏重于日常工作。
那么,我們下面和他過過招。
常見提問1:請你自我介紹一下
這個問題,HR也問過了,到他那里有可能還會問,主管問這個問題和HR雖然問的問題一致,但是,其目的并不是完全相同的。
他不僅僅想考察一下你的表達能力,同時還想考察一下你思路的清晰程度。
我們在回答他的問題前,一定要想清楚一件事:他是該技術領域的高手,就是我們“程序員修煉三境界”中描述的“第二層境界”的那個人物,如果還想更清楚的了解這個人物,可以去重新看看前面的那個章節。
這個自我介紹最好說的較為簡潔,不要過分炫耀自己的技術如何如何強,免得引起這位主管的興趣,引起他的技術興趣沒有什么好處,只會帶來更多的技術問題的發問。
常見提問2:你最引以為自豪的項目是什么?
他問這個問題的意圖是想考察你的成長路徑和編程習慣,因為,最讓你自豪的項目往往是你成長最快的項目,那個成長最快的項目往往會給你今后的編程習慣留下很多痕跡。
所以,通過你對那個引以為豪的項目的描述,有經驗的他會很快鎖定你技術成長中的缺陷和閃光點,從而判斷是否能夠“為我所用”。
你最好拿出一個自己最擅長技術的那個項目進行介紹,這個項目最好能夠比較貼近招聘要求的那些指標。如果,沒有做過什么有規模的正規項目,你就拿些自己非常擅長或者有創意的開發作品來說。這樣做的好處是,他聽完你的介紹后,會接下來進行提問,他所有發問,你都成竹在胸了。
切忌拿一個別人的項目,或者自己參與很少的項目來介紹,如果這樣的話,一旦他深入的詢問這個項目的問題,很可能你會所答非所問,反而造成更嚴重的影響。你大可以和他大談特談你在那個項目中獲得的經驗,那會引起此君的共鳴,有可能的話,說出一些你自己的小技巧,他會很高興。
常見提問3:如果我錄用你,你將怎樣開展工作
他問這個問題的意圖是,希望看看你對這個職位工作展開的一些設想,仍然是“實打實”從工作出發來提問的。所以,你在回答這個問題的時候也要“實打實”,切忌虛無縹緲的一通“高、大、全”。
一般要列出自己的入職之后的工作計劃,而這些計劃需要詳盡,同時需要體現出你工作的嚴謹性,也不能是想當然的說出一些與工作無關的計劃,這都有可能適得其反。
回答范例:
針對這個如何展開工作的問題,我目前僅僅是對咱們公司的大體情況有一個了解,因此,對這個職位的工作性質僅僅是自己的一個理解。
所以呢,我也不知道是否合適,我只能說一個大概。
作為這個職位而言,我想我首先要對本公司的主營業務要有一個相當的了解,了解我們公司的業務組成部分、業務的發展方向、我們面向的客戶性質等等。
第二,我要了解所屬部門在公司中的地位,以及部門的工作目標,從而確定自身的工作努力方向。
第三,了解我參與項目的開發方式,架構方式,緊密配合領導工作,盡快投入具體的開發工作。
這就是我開展工作的計劃。
從大到小的方式進行了解,這么說可以讓領導知道你不是一個盲目工作的人,而是一個按部就班,穩扎穩打的人,使人覺得和你合作很踏實。另外,一定要強調所屬項目或部門的目標,因為這關系到面試你的主管的切身利益。最后,強調“盡快”投入開發工作,這樣,領導就放心了,你不是一個“只了解,不工作”的人。
面對主管唯一要盡量表現的就是,你看起來非常像一個“工具”,入職后馬上就可以發揮作用。
人物3:主管的主管
遇到“主管的主管”的時,往往已經是復試,這說明基本上已經是最后一關了。但要注意,這個最后一關是非常關鍵的一“關”。因為,往往如果你未來的主管在公司中某個專業夠權威的話,他的主管一般不會管招聘的事情。因此,你看到這位“老大”的原因,多半是你未來的那位主管的專業地位還沒有“穩定”。
最后的“搏殺”
過程大概是這樣的,一般會將兩個或三個人提交給“老大”,讓“老大”定奪,去選擇其中的一個人,因此,這個階段是一個最后的“搏殺”關鍵階段。老大”關注的問題:成本+人員素質
所以,我們在和“老大”過招的時候,一定要注意自己的言行,切忌不要穿“奇裝異服”,或者男士留有個性的頭發或胡子,總之一定要讓人看起來特別的“平?!?,雖然不是“西裝革履”但也要“衣冠整潔”。
因為,老板們最不喜歡“個性”員工,而最喜歡的是“優秀”的普通員工。
清華大學出版社《Java程序員,上班那點事兒》作者:鐘聲 章節:1.2.2。
本文來自CSDN博客,轉載請http://blog.csdn.net/useway/archive/2009/08/02/4402385.aspx
標
明
出
處
: