Java面試——專業技能

優質博文:IT-BLOG-CN

在這里插入圖片描述

一、簡單講下 Java 的跨平臺原理


由于各個操作系統(Windows,Linux等)支持的指令集不是完全一致的。就會讓我們程序在不同的操作系統上要執行不同的程序代碼。Java 開發了適用于不同操作系統及位數的 Java 虛擬機來屏蔽系統之間的差異,提供統一的接口(Java API)。對于 Java 開發者而言,只需要在不同的操作系統上安裝對應的 Java 虛擬機即可。這時我們的程序只需要遵循 Java 規范,就可以在所有的操作系統上運行 Java 代碼。如果我們需要將系統部署到不同的環境時,只需要在系統上安裝對應版本的 Java 虛擬機(JVM)即可。

二、裝箱與拆箱


裝箱:把基本數據類型轉換成對應的包裝類型(Integer i = 1:自動裝箱,源碼中通過 Integer.valueOf(1)方法進行裝箱)。
拆箱:把包裝類型轉換為基本數據類型(int j = i:自動拆箱,手動拆箱:int j = i.intVaule()也是自動拆箱的源碼中所使用的方法)。
為什么有了基本數據類型,還需要包裝類型:因為Java是面向對象的語言,而基本數據類型不具備現象對象的特性(null等)。

三、實現一個拷貝文件的工具類使用字節流還是字符流


我們拷貝的文件不確定是只包含字符流,有可以能有字節流(圖片、聲音、圖像等),為考慮到通用性,要使用字節流。

四、介紹下線程池


JDK5 中增加了并發庫,為 Java 線程的管理和使用提供了強大的便利性。java.util.current 包中提供了對線程的優化和管理的各項操作,該包提供了線程的運行,線程池的創建,線程聲明周期的控制。
Java 通過 Executors提供四個靜態方法創建四種線程池,分別是:
【1】newCachedThreadPool:創建一個可緩存線程池,如果線程池長度超過處理需求,可靈活回收空閑線程,若無可回收,則創建新線程。
【2】newFixedThreadPool:創建一個定長線程池,可以控制最大線程并發數,超出的線程會在隊列中等待。
【3】newScheduledThreadPool:創建一個定長線程池,支持定時及周期性任務執行。
【4】newSingleThreadExecutor:創建一個單線程的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO,LIFO,優先級)執行。
線程池(數據庫連接池類似)的作用?
【1】限定線程的個數,不會導致由于線程過多導致系統運行緩慢或者崩潰。
【2】線程池不需要每次都去創建和銷毀,節約資源。
【3】線程池不需要每次都去創建,提高響應時間。

五、JSP和 Servlet 有哪些相同點和不同點


Jsp 繼承了 HttpServlet 所以 Jsp 是 Servlet 技術的擴展,所有的 Jsp 文件編譯就是一個 Servlet,JVM 只識別 Java 的類,不能識別 Jsp 代碼,Web 容器將 Jsp 的代碼編譯成 JVM 能夠識別的 Java 類。Servlet 如果要實現 Html 功能,必須使用 Writer 輸出對應的 Html 標簽,比較麻煩。而 Jsp 的情況是 Java 和 Html 可以組合成一個名為 .jsp 的文件,做界面展示比較方便而嵌入邏輯比較復雜。
Jsp 與 Servlet 主要的不同點在于 Jsp 側重于視圖,Servlet 主要用于控制邏輯。Servlet 中沒有內置對象,Jsp 中的內置對象必須通過 HttpServletRequst 對象、HttpServletResponse 對象以及 HttpServlet 對象得到。

六、簡單介紹一下關系數據庫三范式


范式就是規范,就是關系型數據庫在設計表時,要遵循的三個規范。要想滿足第二范式必須先滿足第一范式,要滿足第三范式必須先滿足第二范式。
第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。列數據的不可分割
第二范式(2NF)要求數據庫表中的每個行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。(主鍵)
滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。(外鍵)
反三范式,有的時候為了效率,可以設置重復或者可以推導出的字段。例如:訂單(總價)和訂單項(單價)

七、Mysql 數據庫的默認的最大連接數


為什么需要最大連接數?特定服務器上面的數據庫只能支持一定數目同時連接,這時候我們一般都會設置最大連接數(最多同時服務多少連接)。在數據庫安裝時都會有一個默認的最大連接數為100。
【1】可以通過設置 my.ini 配置文件中的如下屬性進行設置:

max_connections=100

【2】可以通過命令進行設置:這種方式有個問題,就是設置的最大連接數只在 Mysql 當前服務進程有效,一旦 Mysql 重啟,又會恢復到初始狀態。因為 Mysql 啟動后的初始化工作是從其配置文件中讀取數據的,而這種方式沒有對其配置文件做更改。

mysql>show variables like 'max_connections';(查可以看當前的最大連接數)
msyql>set global max_connections=1000;(設置最大連接數為1000,可以再次查看是否設置成功)

八、說一下 Mysql 和 Oracle 的分頁


Mysql是使用關鍵字 limit 來進行分頁的 limit offset,size 表示從多少索引去多少位。Oracle 的分頁,使用三層嵌套查詢。

// MySql 分頁語句
String sql = "select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
// Oracle 分頁語句
String sql = "select * from " +  "(select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" + "where t>" + pageSize*(pageNumber-1);

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-r6YZoIlQ-1612365596544)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

九、簡單講一下數據庫的觸發器的使用場景


觸發器語法:

CREATE [OR REPLACE] TRIGGER 觸發器名稱 {BEFORE|AFTER} {DELETE|INSERT|UPDATE[OF 列名]} ON 表名 [FOR EACH ROW [WHEN(條件)]] PLSQL塊

觸發器分類:
行級觸發器: 行級觸發器作用的每一條記錄,都會被觸發,在行級觸發器上使用 :old和 :new偽記錄變量識別值的狀態
語句級觸發器: 在指定的操作之前或者操作之后執行一次,不管這條語句影響了多少行,只執行一次。

語句實操:

-- 1、:old和:new 代表同一條記錄
-- 2、:old 表示操作該行之前,這一行的值。
--    :new 表示操作改行之后,這一行的值。--創建觸發器
create or replace trigger checksalary
before update
on temp
for each row 
beginif :new.sal < :old.sal thenraise_application_error("將薪");end if;
end;

十、簡單講一下數據庫的存儲過程的使用場景


我們可以將存儲過程理解為編程中的方法,存儲過程和方法一樣有參數和返回值。是為了完成特定功能的SQL指令集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給指定參數來調用執行它。

存儲過程語法:

CREATE [OR REPLACE] PROC[EDURE] 存儲過程名
@參數1 [數據類型]=[默認值] [OUTPUT]
@參數2 [數據類型]=[默認值] [OUTPUT]
AS
SQL語句
EXEC 過程名[參數]

存儲過程的優點:
【1】存儲過程只在創建時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,因此使用存儲過程可以大大提高數據庫執行速度。
【2】通常,復雜的業務邏輯需要多條 SQL 語句。這些語句要分別地從客戶機發送到服務器,當客戶機和服務器之間的操作很多時,將產生大量的網絡傳輸。如果將這些操作放在一個存儲過程中,那么客戶機和服務器之間的網絡傳輸就會大大減少,降低了網絡負載。
【3】存儲過程創建一次便可以重復使用,從而可以減少數據庫開發人員的工作量。
【4】安全性高,存儲過程可以屏蔽對底層數據庫對象的直接訪問,使用 EXECUTE 權限調用存儲過程,無需擁有訪問底層數據庫對象的顯式權限。

語句實操:

--1)、帶輸入輸出參數
create or replace procedure proc_office --存儲名稱
@id int,@name varchar(20) output --(參數名 參數類型 [傳出值:output]
as
begin
select @name=name from db where id=@id --sql語句
enddeclare @houseName varchar(20) --聲明一個變量,獲取存儲過程傳過來的值
execute proc_office 4,@houseName output --執行 存儲名稱 輸入參數 輸出參數帶有outputselect @houseName --顯示值--2)、帶返回值
create or replace procedure proc_office_info --存儲名稱
@id int
as
begin
if(select name from db where id=@id)=null --sql語句
begin
return -1
end
else
begin
return 1
end
enddeclare @houseName varchar(20) 
exec @houseName=proc_office_info 2
print @houseName

十一、簡單介紹一下 Activiti


Activiti 是一個業務流程管理(BPM)和工作流系統,適用于開發人員和系統管理員。其核心是超快速,穩定的 BPMN2流程引擎。它易于與 Spring集成使用。主要要在OA中,把線下流程放到線上。 把現實生活中一些流程固話定義到系統中,然后通過輸入表單數據完成業務。例如:他可用在OA系統的流程管理中:請假流程 小于三天,一級主管審批,大于三天二級才能審批。

十二、編寫一個 Servlet


【1】Servlet 與普通的 Java 程序的區別:Servlet 本質上就是一個 Java 類;Servlet 類必須實現接口 javax.servlet.Servlet 接口;運行在 Web 容器中,Tomcat 就是一個 Web 容器;能夠接收瀏覽器發送的請求,并且做出響應給瀏覽器;
【2】編寫 Servlet 的步驟:寫一個類繼承于 HttpServlet,HttpServlet 是個抽象類它已經實現了 Servlet 接口; 重寫 doGet 或doPost 方法,分別處理表單的 get 或 post 請求;如果直接在瀏覽器輸入地址訪問,使用的是 get 方法;編寫 web.xml 配置文件,對 Servlet 進行配置或者通過 @WebServlet(“/xxx”),才能通過瀏覽器來訪問。

//如果web.xml中沒有配置時,就添加此注解
@WebServlet("/xxx")
public class DemoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

如果使用 web.xml 配置,配置信息如下:

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.spring.web.servlet.DemoServlet </servlet-class><!--我的的servlet類-->
</servlet>
<servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern><!--請求連接-->
</servlet-mapping>

【3】 也可以實現最基本的 Servlet 接口。

public class servlet  implements Servlet //初始化方法,創建時加載@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}//調用時加載 里面對 doPost doGet 等進行處理@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}//銷毀時加載@Overridepublic void destroy() {}
}
idepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}//銷毀時加載@Overridepublic void destroy() {}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20307.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【教程】自監督 對比學習,代碼,爽學一波

from&#xff1a; https://docs.lightly.ai/self-supervised-learning/examples/simclr.html

代碼隨想錄第22天|回溯part2 組合總和III電話號碼的字母組合

216.組合總和III 當組合的數量為k就判斷和&#xff0c;并且返回。 在枚舉的時候可以進行剪枝&#xff0c;如果總和已經超過了n&#xff0c;那么就沒必要繼續遞歸下去了 class Solution { public:vector<int> path;vector<vector<int>> res;void backTrackin…

微信小程序手機號碼授權登錄

文章目錄 一、微信小程序開發二、使用步驟1.前端代碼2.后臺配置3.后臺代碼 總結 一、微信小程序開發 目前個人的小程序無法使用手機號碼授權登錄&#xff0c;可以使用測試號進行開發 二、使用步驟 1.前端代碼 代碼如下&#xff08;示例&#xff09;&#xff1a; <butto…

Java版本家政上門系統源碼,自主研發、安全可控,支持任意二次開發

家政上門系統源碼&#xff0c;Java版本&#xff0c;自主研發、安全可控。支持任意二次開發、有豐富合作案例。多端管理&#xff1a;管理端、用戶端、服務端。 技術參數&#xff1a; 技術架構&#xff1a;springboot、mysql 、Thymeleaf 開發語言&#xff1a;java1.8、vue 開…

python 象棋小游戲代碼

以下是一個簡單的Python象棋小游戲的代碼示例。這個示例使用了pygame庫來創建圖形用戶界面和處理用戶輸入。 首先&#xff0c;確保安裝了pygame庫&#xff1a; pip install pygame 然后&#xff0c;可以運行以下代碼&#xff1a; import pygame import sys # 初始化pygam…

軟件開發步驟詳解

一、引言 隨著信息技術的迅猛發展&#xff0c;軟件已成為現代社會不可或缺的一部分。無論是企業運營、個人生活還是科學研究&#xff0c;都離不開各種軟件的支持。因此&#xff0c;掌握軟件開發的步驟和技巧對于IT從業者來說至關重要。本文旨在詳細介紹軟件開發的整個流程&…

Python知識點7---字典與集合

提前說一點&#xff1a;如果你是專注于Python開發&#xff0c;那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了&#xff0c;而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的字典與集合是沒有下標一說的&#xff0c;字典說的其實就是ma…

使用機器學習做醫學圖像分類的開源項目集錦

項目名稱倉庫描述主要特點適配建議U-Net用于生物醫學圖像分割zhixuhao/unetKeras中的U-Net實現&#xff0c;用于2D圖像分割。 - 基本的U-Net架構 - 生物醫學圖像訓練示例 - 簡單的數據加載器 - 修改數據加載器以處理特定MRI格式 - 調整訓練管道以適應STIR序列和標簽 使用PyTor…

更改Web網站設計——css和css框架

雖然使用HTML可以定義文章的結構&#xff0c;但是其中不包含設計相關的信息。此時CSS就派上用場&#xff0c;可以用它對HTML文章指定設計樣式。由于可以決定Web網頁的外觀風格&#xff0c;因此&#xff0c;它有時也被稱為格式表。 如果使用CSS設置背景色&#xff0c;文…

計算機網絡期末復習(1)計算機網絡在信息時代對的作用 計算機網絡的定義和分類 三種交換方法

計算機網絡在信息時代扮演著至關重要的角色&#xff0c;它極大地改變了我們生活、工作和學習的方式。 計算機網絡在信息時代的作用 信息共享與傳播&#xff1a;計算機網絡使全球范圍內的信息快速共享成為可能&#xff0c;無論是新聞、學術研究還是娛樂內容&#xff0c;都可以…

初識 JavaScript

目錄 1. 什么是 JavaScript2. JS 引入方式2.1 內部引入方式2.2 外部引入方式 3. JS 中的注釋4. JS 中的結束符5. 輸入和輸出5.1 輸出5.2 輸入 6. 變量與常量6.1 變量的聲明6.2 變量的賦值6.3 常量 7. JS 中的數據類型8. JS 中的類型轉換8.1 隱式轉換8.2 顯式轉換 正文開始 1. …

Java 多線程相關面試題

1. ConcurrentHashMap的讀是否要加鎖&#xff0c;為什么? 讀操作沒有加鎖&#xff0c;目的是為了進一步降低鎖沖突的概率&#xff0c;為了保證讀到剛修改的數據&#xff0c;搭配了volatile 關鍵字&#xff1b; 2. 介紹下 ConcurrentHashMap 的鎖分段技術? 這個是 Java1.7 …

TP8 定時任務yzh52521/http-crontab 教程

官方文檔&#xff1a; https://www.thinkphp.cn/ext/36 源碼倉&#xff1a; http-crontab: 接口化秒級定時任務管理 GitHub - yuanzhihai/http-crontab: 接口化秒級定時任務管理 參考案例&#xff1a; http-crontab:Workerman ThinkPHP6 實現后臺可視化定時任務管理 htt…

深入解析Java注解機制:元注解、自定義處理器及其在框架中的妙用

1.注解簡介與作用 1.1 什么是注解&#xff08;Annotation&#xff09; 在Java中&#xff0c;注解是一種應用于類、方法、變量、參數和Java包等元素的標記。這些標記可以在編譯時、加載時甚至運行時被讀取&#xff0c;并執行相應的處理。通過使用注解&#xff0c;開發人員可以…

C++中的List

摘要 C 標準庫中的 std::list 是一種雙向鏈表容器&#xff0c;它允許在常數時間內進行插入和刪除操作&#xff0c;每個元素包含一個指向前一個和后一個元素的指針。這給我們開發提供了高效的插入和刪除操作。 引入頭文件 要使用 std::list&#xff0c;需要包含頭文件 <li…

鈑金件設計規范

(一&#xff09; 鈑金 1、鈑金的概念 鈑金&#xff08;sheet metal&#xff09;是針對金屬薄板&#xff08;厚度通常在6mm以下&#xff09;的 一種綜合冷加工工藝&#xff0c;包括沖裁、折彎、拉深、成形、鍛壓、鉚合等&#xff0c; 其顯著的特征是同一零件厚度一致。 2、鈑…

C語言屬于什么是編程語言:探索C語言的本質與特性

C語言屬于什么是編程語言&#xff1a;探索C語言的本質與特性 在編程領域&#xff0c;C語言無疑是一種重要的、廣泛應用的編程語言。但是&#xff0c;C語言究竟屬于哪一類編程語言&#xff1f;它又有哪些獨特的特性和價值&#xff1f;本文將從四個方面、五個方面、六個方面和七…

精通推薦算法8:Embedding表征學習 -- 總體架構

1 Embedding表征學習的總體架構 目前&#xff0c;推薦算法精排模型大多基于Embedding MLP范式&#xff0c;模型底層是Embedding層&#xff0c;作用是將高維稀疏的輸入特征轉換為低維稠密的特征向量&#xff0c;并實現一定的模糊查找能力。模型上層是MLP層&#xff0c;作用是對…

在鯤鵬服務器上安裝nginx

華為鯤鵬服務器采用華為自研cpu ARMv8架構,提供 Windows 和多個Linux 系統 常使用 CentOS 7.6 64bit with ARM Nginx 和 Apache 一樣都是一種 Web 服務器。是基于 REST 架構風格&#xff0c;以統一資源描述符URI 或者統一資源定位符URL 作為溝通依據&#xff0c;通過 HTTP 協議…

【C++進階】深入STL之string:掌握高效字符串處理的關鍵

&#x1f4dd;個人主頁&#x1f339;&#xff1a;Eternity._ ?收錄專欄?&#xff1a;C “ 登神長階 ” &#x1f921;往期回顧&#x1f921;&#xff1a;C模板入門 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; ?STL之string &#x1f4d2;1. STL基本…