Java老司機帶你刨面試題(IO_反射_及JavaWeb,適用者初中級工程師)

Java老司機帶你刨面試題(IO_反射_及JavaWeb,適用者初中級工程師)

哈哈,最近一大堆事,兩天沒更新,今天在沙發上總結一下面試題吧,希望對大夥有用,還是那句話,有意見的題目歡迎和我交流.老鐵,抱拳了
大家在面試的時候任何題都不能輕視,正所謂,細節決定成敗,能把簡單的事情做好就不簡單

1.IO

1.1什麼是IO流?

它是一種數據的流從源頭流到目的地。比如文件拷貝,輸入流和輸出流都包括了。輸入流從文件中讀取數據存儲到進程(process)中,輸出流從進程中讀取數據然後寫入到目標文件.

1.2 字節流和字符流的區別

字節流在 JDK1.0 中就被引進了,用於操作包含 ASCII 字符的文件。JAVA 也支持其他的字符如 Unicode,爲了讀取包含 Unicode 字符的文件,JAVA 語言設計者在 JDK1.1 中引入了字符流。ASCII 作爲 Unicode 的子集,對於英語字符的文件,可以使用字節流也可以使用字符流.

1.3 Java中流中的超類主要有哪些?

• java.io.InputStream
• java.io.OutputStream
• java.io.Reader
• java.io.Writer

1.4 FileInputStream 和FileOutputStream 是什麼?

這是在拷貝文件操作的時候,經常用到的兩個類。在處理小文件的時候,它們性能表現還不錯, 在大文件的時候, 最好使用 BufferedInputStream ( 或 BufferedReader) 和BufferedOutputStream ( 或 BufferedWriter)

1.5 字節流和字符流,你喜歡使用哪一個?

個人來說,更喜歡使用字符流,因爲他們更新一些。許多在字符流中存在的特性,字節流中不存在。比如使用 BufferedReader 而不是 BufferedInputStreams 或 DataInputStream,使用 newLine()方法來讀取下一行,但是在字節流中我們需要做額外的操作

2. 反射

2.1 什麼是java的反射

Java 的反射機制是在編譯並不確定是哪個類被加載了,而是在程序運行的時候才加載、探知、自審。使用在編譯期並不知道的類。這樣的特點就是反射。

2.2 反射是幹嗎的?

Java 的反射機制它知道類的基本結構,這種對 Java 類結構探知的能力, 我們稱爲 Java 類的“自審”。當我們構建出一個對象的時候,去調用該對象的方法和屬性的時候。一按點,編譯工具就會自動的把該對象能夠使用的所有的方法和屬性全部都列出來,供用戶進行選擇。這就是利用了Java 反射的原理,是對我們創建對象的探知、自審。

2.3 反射主要功能及其實現

2.3.1 反射的主要功能
  • 確定一個對象的類
  • 取出類的 modifiers,數據成員,方法,構造器,和超類.
  • 找出某個接口裏定義的常量和方法說明.
  • 創建一個類實例,這個實例在運行時刻纔有名字(運行時間才生成的對象).
  • 取得和設定對象數據成員的值,如果數據成員名是運行時刻確定的也能做到.
  • 在運行時刻調用動態對象的方法.
  • 創建數組,數組大小和類型在運行時刻才確定,也能更改數組成員的值.
2.3.2 反射的應用
  • spring 的 ioc/di 也 是 反 射 ….
  • javaBean 和 jsp 之間調用也是反射….
  • struts 的 FormBean 和頁面之間…也是通過反射調用….
  • JDBC 的 classForName()也是反射……
  • hibernate 的 find(Class clazz) 也是反射….

3.JavaWeb篇

3.1 Http請求的get與post區別?

  1. get 是把參數數據隊列加到提交表單的 ACTION 屬性所指的 URL 中,在
    URL 中可以看到。
  2. post 是通過 HTTPPOST 機制,將表單內各個字段與其內容放置在 HTML HEADER 內一起傳送到ACTION 屬性所指的 URL 地址。用戶看不到這個過程。
  3. get 安全性非常低,post 安全性較高。但是執行效率卻比 Post 方法好。
  4. get 傳送的數據量較小,不能大於 2KB。post 傳送的數據量較大,一般被默認爲不受限制。但理論上,IIS4 中最大量爲 80KB,IIS5 中爲 100KB。
  5. 對於 get 方式,服務器端用 Request.QueryString 獲取變量的值,對於
    post 方式,服務器端用 Request.Form 獲取提交的數據。
    所以綜上建議:
  • 包含機密信息的話,建議用 Post 數據提交方式;
  • 在做數據查詢時,可以使用 Get 方式;而在做數據添加、修改或刪除時,建議用 Post 方式;

3.1 Session與Cookie區別

在這裏插入圖片描述

  • cookie 數據存放在客戶的瀏覽器上(客戶端),session 數據放在服務端cookie 不是很安全,別人可以分析存放在本地的 cookie 並進行
    cookie 欺騙,如果主要考慮到安全應當使用 session
  • session 會在一定時間內保存在服務器上.當訪問增多,會比較佔用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用 cookie
  • 單個 cookie 在客戶端的限制是 3KB,就是說一個站點在客戶端存放的cookie 不能超過3KB
  • 將登陸信息等重要信息存放爲 session;其他信息如果需要保留,可以放在 cookie 中
  • session 不能區分路徑,同一個用戶在訪問一個網站期間,所有的 session 在任何一個地方都可以訪問到.而 cookie 中如果設置了路徑參數,那麼同一個網站中不同路徑下的 cookie 互相是訪問不到的.cookie 只能是子路徑訪問父路徑設置的 cookie
    詳細分析
    http 是無狀態的協議,客戶每次讀取 web 頁面時,服務器都打開新的會話,而且服務器也不會自動維護客戶的上下文信息,那麼要怎麼才能實現網上商店中的購物車呢:
    session 就是一種保存上下文信息的機制,它是針對每一個用戶的,變量的值保存在服務器端,通過 SessionID 來區分不同的客 戶,session 是以 cookie 或URL 重寫 爲基礎的。
    默認使用 cookie 來實現,系統會創造一個名爲 JSESSIONID 的輸出
    cookie,我 們叫做 session cookie,以區分 persistent cookie(我們通常所說的
    cookie)
    注意 session cookie 是存儲於瀏覽器內存中的,並不是寫到硬盤上的, 這也就是我們剛纔看到的 JSESSIONID,我們通常情是看不到 JSESSIONID 的,但 是當我們把瀏覽器的 cookie 禁止後,web 服務器會採用 URL 重寫的方式傳遞 Sessionid,我們就可以在地址欄看到sessionid=KWJHUG6JJM65HS2K6 之類的字符串。
    明白了原理,我們就可以很容易的分辨出 persistent cookie 和 session cookie 的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie 針對某一次會話而言,會話結束 session cookie 也就隨着消失了,而persistent cookie 只是存在於客戶端硬盤上的一段文本(通常是加密的),而且可能會遭到 cookie 欺騙以及針對 cookie 的跨站腳本攻擊,自然不如 sess8ion cookie 安全了。
    5:通常 session cookie 是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的 sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把 sessionid 保存在persistent cookie 中,然後在新窗口中讀出來,就可以得到上一個窗口 SessionID 了,這樣通過 session cookie 和
    persistent cookie 的結合我們就實現了跨窗口的 session tracking()會話跟蹤)

3.2 MVC設計思想

M:Model 模 型
V:View 視 圖
C:Controller 控制器
模型就是封裝業務邏輯和數據的一個一個的模塊,控制器就是調用這些模塊的(java 中通常是用 Servlet 來實現,框架的話很多是用 Struts2 來實現這一層),視圖就主要是你看到的,比如 JSP 等.
當用戶發出請求的時候,控制器根據請求來選擇要處理的業務邏輯和要選擇的數據,再返回去把結果輸出到視圖層,這裏可能是進行重定向或轉發等.

3.3 Ajax

Ajax 並不算是一種新的技術,全稱是 asychronous javascript and xml,可以說是已有技術的組合,主要用來實現客戶端與服務器端的異步通信效果,實現頁面的局部刷新

3.4 頁面編碼和被請求的資源編碼如果不一致如何處理?

對於 ajax 請求傳遞的參數,如果是 get 請求方式,參數如果傳遞中文,在有些瀏覽器會亂碼,不同的瀏覽器對參數編碼的處理方式不同,所以對於 get 請求的參數需要使用 encodeURIComponent 函數對參數進行編碼處理,後臺開發語言都有相應的解碼 api。對於 post 請求不需要進行編碼

3.5 Ajax的請求過程

  1. 創建 XMLHttpRequest 對象,也就是創建一個異步調用對象
  2. 創建一個新的 HTTP 請求,並指定該 HTTP 請求的方法、URL 及驗證信
  3. 設置響應 HTTP 請求狀態變化的函數
  4. 發送 HTTP 請求
  5. 獲取異步調用返回的數據
  6. 使用 JavaScript 和 DOM 實現局部刷新

3.6 闡述一下異步加載js

  1. 異步加載的方案: 動態插入 script 標籤
  2. 通過 ajax 去獲取 js 代碼,然後通過 eval 執行
  3. script 標籤上添加 defer 或者 async 屬性
  4. 創建並插入 iframe,讓它異步執行 js

下一篇更新設計模式與sql,886

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章