以下內容分享,是我應屆畢業面試JavaWeb工程師的一些經驗總結,供大家參考,希望能給正在找工作的同學朋友們一點幫助。
先總結一下筆試中常見的問答題。
一、java 中都有哪些作用域
1、public:public表明該數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認爲friendly
二、String與StringBuffer的區別
String的長度是不可改變的,StringBuffer的長度是可以改變的。如果對字符串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,使用StringBuffer的toSting()方法。
三、多線程:
多線程實現的2種方式和區別一定要掌握。
四、Jsp的內置對象
JSP共有以下9種基本內置組件:request,response,pageContext,session,application,out,config,page,exception。
Request:用戶端請求,此請求會包含來自GET/POST請求的參數, Response:網頁傳回用戶端的迴應,pageContext:網頁的屬性是在這裏管理,session:與請求有關的會話期,application: servlet正在執行的內容,out:用來傳送回應的輸出,config:servlet的構架部件,page:JSP網頁本身,exception:針對錯誤網頁,未捕捉的例外。
五、Servlet的生命週期
Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬時調用其destroy方法。
六、Jsp和Servlet有哪些相同點和不同點
JSP是Servlet技術的擴展,本質是Servlet的簡易方式,強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裏分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
七、ArrayList和LinkedList的區別
ArrayList 採用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,所以最大的缺點就是插入刪除時非常麻煩
LinkedList 採用的將對象存放在獨立的空間中,而且在每個空間中還保存下一個鏈接的索引 但是缺點就是查找非常麻煩 要叢第一個索引開始
八、String Stringbuffer和StringBuilder的區別
StringBuffer是線程安全的可變字符序列,從 JDK 5 開始,爲該類補充了一個單個線程使用的等價類,即 StringBuilder。單個線程使用的時候(這種情況很普遍),建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。
下面是一些程序題
一、自己寫一個單例,Singleton
單例模式的核心就是構造方法私有化。
public class Singleton {
private Singleton(){} //構造方法私有化
private static final Singleton sin = new Singleton();
public static Singleton getInstance(){
return sin;
}
}
二、寫一段連接數據庫的程序,或是描述一下它的實現步驟。
//定義數據庫驅動程序
String DBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";
// 定義數據庫連接地址
String DBURL="jdbc:odbc:mydb";
//定義數據庫連接對象
Connection conn=null;
//定義Statement對象用於操作數據庫
Statement stmt=null;
//定義一個字符串變量,用於保存sql語句
String sql=null;
//1.加載驅動程序
try{
Class.forName(DBDRIVER);
}catch(Exception e)
{
out.print("數據庫驅動程序加載失敗!!!");
}
//2.連接數據庫
try{
conn=DriverManager.getConnection(DBURL);
}catch(Exception e)
{
out.print("數據庫連接失敗!!!");
}
//3.操作數據庫
//通過Connection對象實例化Statement對象
try{
stmt=conn.createStatement();
//爲sql變量賦值
//sql="insert into person (name,password,age)values('name','123456',23)";
//更新語句
//sql="update person set name='myName',password='myPsw',age='24' where id=3";
//按ID刪除記錄
sql="delete from person where id=4";
//通過Statement對象執行sql語句
stmt.executeUpdate(sql);
}catch(Exception e)
{
out.print("操作數據庫失敗!!!");
}
//關閉結果集、會話和連接
關閉順序是,結果集rs,會話stmt,連接conn。
注意:
此時有可能會問PreparedStatement 和Statement的區別之類的。
應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement。
1、代碼的可讀性和可維護性。
2、PreparedStatement盡最大可能提高性能。
3、最重要的一點是極大地提高了安全性。防止SQL注入。
如果談到SQL注入,面試者一般都會問你什麼是SQL注入,讓你說一個SQL注入的sql語句。
所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。隨着B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。
SQL注入的sql語句:
String sql = "select * from tableName where name= '"+varname+"' and passwd='' or '1' = '1';
因爲'1'='1'肯定成立,所以可以任何通過驗證。
還有一些程序改錯題。一般會有2道題目。
關於abstract,final知識的居多。面試之前看看應該沒問題。
還有正則、Javascript和jquery等問題。
剩下很大部分是關於數據庫的。因此必須熟練SQL語句的操作。在高級的會問存儲過程。對現在主流的數據庫應該有自己的瞭解。
筆試過了,會安排項目經理面試。
和項目經理談,涉及到工作態度,加班,出差,執行力,程序員的基本素質等問題。還有談談你對項目的認識,還有一些具體項目中的一些問題。只要回答的流暢,說出自己的看法,有道理就行,一定要謙虛,不要不懂亂說,不會的可以說在這方面瞭解的少,以後多加學習什麼的。也可能會問到你的職業規劃,你的學習能力等。自己回答的時候多從自己不斷的學習和努力上面靠,就是要突出自己的吃苦耐勞精神和積極進取精神。涉及到出差的話,會問你有沒有對象,考慮什麼時候結婚,在這個問題上,說自己有對象也沒事,主要還是看處理工作和家庭的態度。還有要注意團隊的重要性,不要個人英雄主義。
寫了一些自己的經驗,希望對正在找工作的同學朋友,會有所幫助,找到工作的同學看了權當消遣一下。
祝大家能找到自己理想的工作,加油!