Java後端期末複習
Java後端期末考試複習重點
文章目錄
- 不是最終版有部分錯誤(持續更新)
- java後端期末考試複習重點
-
- 1. 選擇題 15個
- 2. 填空題 10個
- 3. 程式填空 3題 7空
-
- [1. 多執行緒(書第十章)](https://blog.csdn.net/qq_15102659/article/details/109686294#1 _47)
- [2. 檔案流](https://blog.csdn.net/qq_15102659/article/details/109686294#2 _92)
- [3. JDBC 資料庫](https://blog.csdn.net/qq_15102659/article/details/109686294#3 JDBC__177)
- 4. 簡答題 4個
- 5. 程式設計題 2個 (參照作業題) 後續更新
java後端期末考試複習重點
1. 選擇題 15個 2分/題
2. 填空題 10個 2分/題
-
常用資料庫:
MongoDB 非關係型資料庫 NoSQL
MySQL 關係型資料庫 SQL
-
C/S Client/Server 客戶端/伺服器
B/S Brower/Server 瀏覽器/伺服器 -
Swing 控制元件的建立(書第九章)
import javax.swing.JButton; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("Java按鈕元件示例"); // 建立Frame視窗 frame.setSize(400, 200); JPanel jp = new JPanel(); // 建立JPanel物件 // 重點 JButton btn1 = new JButton("我是普通按鈕"); // 建立JButton物件 jp.add(btn1); frame.add(jp); } }
-
Java web 請求處理過程
-
MVC模型
MVC 模式代表 Model-View-Controller(模型-檢視-控制器) 模式。這種模式用於應用程式的分層開發。
-
Model(模型) - 模型代表一個存取資料的物件或 JAVA POJO。它也可以帶有邏輯,在資料變化時更新控制器。
-
View(檢視) - 檢視代表模型包含的資料的視覺化。
-
Controller(控制器) - 控制器作用於模型和檢視上。它控制資料流向模型物件,並在資料變化時更新檢視。它使檢視與模型分離開。
-
3. 程式填空 3題 7空 14分
1. 多執行緒(書P305)
建立執行緒的方法
必考
extends <-> Thread
implements <-> Runnable
package multithreading;
// 方法一:繼承Thread類,重寫run()方法 -> extends Thread
class ExtendsThread extends Thread {
@Override
public void run() {
System.out.println("extends Thread");
}
}
// 方法二:實現Runnable介面,重寫run()方法 -> implements Runnable
class ImplementsRunnable implements Runnable {
@Override
public void run() {
System.out.println("implements Runnable");
}
}
public class Multithreading {
public static void main(String[] args) {
// 主執行緒
System.out.println("main thread");
// 呼叫start()方法,啟動一個新執行緒
new ExtendsThread().start();
// 由於Runnable介面只聲明瞭一個run()方法,因此須藉助Thread類中的Thread(Runnable target)構造器來建立一個Thread物件,以呼叫start()方法,啟動一個新執行緒
new Thread(new ImplementsRunnable()).start();
}
}
判斷執行緒個數
必考
執行緒個數 = new XXX.start() 方法數 + 1(主執行緒)
例如本段程式,有兩個start()方法,則執行緒個數為2+1
public class Multithreading {
public static void main(String[] args) {
// 主執行緒
System.out.println("main thread");
// 呼叫start()方法,啟動一個新執行緒
new ExtendsThread().start();
// 由於Runnable介面只聲明瞭一個run()方法,因此須藉助Thread類中的Thread(Runnable target)構造器new一個Thread物件,呼叫start()方法,啟動一個新執行緒
new Thread(new ImplementsRunnable()).start();
}
}
注意:while for 函式 中是否有 start()
2. 檔案流
IO流的分類
-
根據單位:
- 字元流:文字類
- 位元組流:二進位制資料類
-
根據流向:
- 輸入流:只讀
- 輸出流:只寫
-
根據功能:
- 實體流:只有基本讀寫操作
- 裝飾流:實體流基礎上實現高階功能
位元組流
位元組輸入/輸出流:
InputStream/OutputStream
檔案位元組輸入/輸出流:
FileInputStream/FileOutputStream
字元流
字元輸入/輸出流:
Reader/Writer
檔案字元輸入/輸出流:
FileReader/FileWriter
程式碼詳見書 P340
3. JDBC 資料庫
開發步驟
- 獲取連線
- 開啟事務
- 獲取到 PreparedStatement
- 使用 PreparedStatement 執行兩次更新操作
- 正常情況下提交事務
- 出現異常回滾事務
- 最後關閉資源
preparedSatement 的好處
- prepareStatement()會先將 SQL 語句傳送給資料庫預編譯。PreparedStatement 會引用著預編譯後的結果。
可以多次傳入不同的引數給 PreparedStatement 物件並執行。減少 SQL 編譯次數,提高效率。 - 安全性更高,沒有 SQL 注入的隱患。
- 提高了程式的可讀性
使用 PreparedStatement 的步驟:
- 編寫 SQL 語句,未知內容使用?佔位:“SELECT * FROM user WHERE name=? AND password=?”;
- 獲得 PreparedStatement 物件
- 設定實際引數:setXxx(佔位符的位置, 真實的值)
- 執行引數化 SQL 語句
- 關閉資源Statement 中的方法:
Statement 介面中的方法
int executeUpdate(String sql)
用於傳送 DML 語句,增刪改的操作,insert、update delete
引數:SQL 語句
返回值:返回對資料庫影響的行數
ResultSet executeQuery(String sql)
用於傳送 DQL 語句,執行查詢的操作。select
引數:SQL 語句
返回值:查詢的結果集
4. 簡答題 4個 4分/題
Servlet的生命週期
- 載入和例項化:
- 初始化:Servlet容器呼叫init()初始化Servlet物件。
- 請求處理:Servlet容器建立ServletRequest物件和ServletResponse物件,Servlet呼叫servlet方法來處理客戶端的請求,呼叫doGet(),doPost()方法接收客戶端的請求,並且發回相應的響應。
- 服務終止:當web被終止,或Servlet容器終止執行,或Servlet容器過載新的例項,Servlet呼叫destroy()方法釋放佔用的資源。
Filter生命週期:(其實filter可以看作是一種特殊的servlet,所以生命週期和servlet大致相同)
- 通過建構函式例項化;
- 初始化init();
- 業務邏輯處理:doFilter();
- 銷燬:destory()
請求轉發與重定向
重定向:客戶端行為,從本質上講等於兩次請求,前一次請求的物件不會儲存,位址列的URL地址會改變。
請求轉發:伺服器的行為,是一次請求,轉發後請求物件會儲存,位址列的不會改變。
三種域物件
物件名稱 | 物件的型別 |
---|---|
request | HttpServletRequest |
session | HttpSession |
application | ServletContext |
request
request是表示一個請求,只要發出一個請求就會建立一個request,它的作用域僅在當前請求中有效。
用處:常用語伺服器間同一請求不同頁面之間的引數傳遞,常用語表單的控制元件值傳遞。
session
伺服器會為每一個會話建立一個Session物件,所以Session中的資料可供當前會話中所有Servlet共享。
用處:常用於web開發中的登入驗證介面(當用戶登陸成功後瀏覽器分配其中一個Session鍵值對)。
application (ServletContext上下文)
作用範圍:所有的使用者都可以取得此資訊,此資訊在整個伺服器端被保留。Application屬性範圍值只要設定一次,則所有的網頁視窗都可以取得資料。ServletContext在伺服器啟動時建立,在伺服器關閉時銷燬,一個JavaWeb應用只建立一個ServletContext物件。
Cookie 和 Session 有什麼不同?
1、作用範圍不同,Cookie 儲存在客戶端(瀏覽器),Session 儲存在伺服器端。
2、存取方式的不同,Cookie 只能儲存 ASCII,Session 可以存任意資料型別,一般情況下我們可以在 Session 中保持一些常用變數資訊,比如說 UserId 等。
3、有效期不同,Cookie 可設定為長時間保持,比如我們經常使用的預設登入功能,Session 一般失效時間較短,客戶端關閉或者 Session 超時都會失效。
4、隱私策略不同,Cookie 儲存在客戶端,比較容易遭到不法獲取,早期有人將使用者的登入名和密碼儲存在 Cookie 中導致資訊被竊取;Session 儲存在服務端,安全性相對 Cookie 要好一些。
5、儲存大小不同, 單個 Cookie 儲存的資料不能超過 4K,Session 可儲存資料遠高於 Cookie。
學會簡單的 Cookie與Session 操作
DataBase 操作 (SQL 基本語句 JDBC詳見上面內容)
查詢
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
插入
插入操作主要有以下兩種寫法:
第一種形式無需指定要插入資料的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
12
第二種形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
12
更新
更新表中已經存在的元素
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
123
刪除
#根據條件刪除表中已經存在的元素
DELETE FROM table_name
WHERE some_column=some_value;
123
5. 程式設計題 2個 (參照作業題)
-
Java8
詳細資料:
由淺入深體驗 Stream 流 – IBM Developer
作業1:
1 建立Student類物件,包括私有屬性id,name,age,訪問器方法,建構函式。
2 建立8個學生物件的集合List
3 普通方法和lambda表示式方法實現排序
4 Stream流實現輸出年齡在18歲以上,排名前5,排除第1個的學生資訊
// Student.java 學生類 public class Student { private String id; private String name; private int age; public Student(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "id=" + id + ", name=" + name + ", age=" + age; } }
// Main.java 主類 import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<Student> students = new ArrayList<Student>(); // 迴圈生成學生資訊,並建立學生物件新增到列表中 for (int i = 1; i <= 8; i++) { String id = "190707020" + i; String name = "student" + i; // 在18的基礎上隨機加[0, 5)範圍內的整數,生成不同的年齡 int age = 18 + (int) (Math.random() * 5); students.add(new Student(id, name, age)); } // 建立一個與students內元素相同的列表 List<Student> newStudents = new ArrayList<Student>(students); // 普通方法排序 students.sort(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }); students.forEach(System.out::println); // λ表示式排序 newStudents.sort((o1, o2) -> o1.getAge() - o2.getAge()); newStudents.forEach(System.out::println); // Stream流實現輸出年齡在18歲以上,排名前5,排除第1個的學生資訊 students.stream() // 構造流 .filter(s -> s.getAge() > 18) // 選擇年齡大於18歲的學生 .limit(5) // 選擇前5個元素 .skip(1) // 跳過第1個元素 .forEach(System.out::println); // 遍歷輸出 } }
-
Jsp 處理請求
例如基礎的登陸表單驗證
基本思想
- 使用者在登陸介面輸入使用者名稱和密碼
- 然後提交給處理jsp檔案,由這個檔案進行處理
- 處理完跳轉到登陸成功或者失敗介面
index.jsp (表單post請求)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登入頁面</title> </head> <body> <form action="${pageContext.request.contextPath}/loginServlet" method="post" > 使用者名稱:<input type="text" name="username" /><br /> 密碼:<input type="password" name="password" /><br /> <input type="submit" value="提交" /> </form> </body> </html>
LoginServlet.java (處理請求引數)
package com.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String info = ""; if("admin".equals(username) && "123456".equals(password)){ info = "歡迎你" + username + "!"; }else{ info = "使用者名稱或密碼錯誤!"; } request.setAttribute("info", info); request.getRequestDispatcher("info.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
info.jsp 結果頁
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登入提示</title> </head> <body> <p><%= request.getAttribute("info") %></p> <p><a href="index.jsp">返回首頁</a></p> </body> </html>