知否?知否!Java工程師常見面試題集錦(四)網際網路人必看!(附答案及視訊教程,持續更新)

CSDN學院發表於2019-01-17

成年人都追逐速度,渴望錦鯉一轉,速成超越。這也難怪,畢竟我們目光所及,全是金字塔頂端的閃閃發光。這如何能不加速我們的焦慮和對速度的追求呢?

年底了,你是不是又在無休止的趕專案?是不是也在嘀咕這一年忙到頭年終獎卻沒幾塊?有沒有在猶豫換一份更理想的工作?那麼,來好好儲備些面試題吧,有備無患,希望來年職場高升。

本期是Java面試題更新的第四期了,仍然是10道面試題,前面三期的連結地址如下:

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

31.方法的引數傳遞機制

形參是基本資料型別

傳遞資料值

實參是引用資料型別

傳遞地址值

特殊的型別:String、包裝類等物件不可變性

https://i.iter01.com/images/4d2697d57e155eb40b99e72803db6c993b04bb7642e0f82063a67ee4f3508ade.png

32. MySQL中varchar與char的區別以及varchar(50)中的50代表的涵義

1)varchar與char的區別

char是一種固定長度的型別,varchar則是一種可變長度的型別;

2)varchar(50)中50的涵義

最多存放50個字元,varchar(50)和(200)儲存hello所佔空間一樣,但後者在排序時會消耗更多記憶體,因為order by col採用fixed_length計算col長度(memory引擎也一樣);

3)int(20)中20的涵義

是指顯示字元的長度,但要加引數的,最大為255,比如它是記錄行數的id,插入10筆資料,它就顯示00000000001 ~~~00000000010,當字元的位數超過11,它也只顯示11位,如果你沒有加那個讓它未滿11位就前面加0的引數,它不會在前面加0。20表示最大顯示寬度為20,但仍佔4位元組儲存,儲存範圍不變;

4)mysql為什麼這麼設計對大多數應用沒有意義,只是規定一些工具用來顯示字元的個數;int(1)和int(20)儲存和計算均一樣;

33.MySQL binlog的幾種日誌錄入格式以及區別

1)Statement:每一條會修改資料的sql都會記錄在binlog中。

優點:不需要記錄每一行的變化,減少了binlog日誌量,節約了IO,提高效能。(相比row能節約多少效能 與日誌量,這個取決於應用的SQL情況,正常同一條記錄修改或者插入row格式所產生的日誌量還小於Statement產生的日誌量,但是考慮到如果帶條 件的update操作,以及整表刪除,alter表等操作,ROW格式會產生大量日誌,因此在考慮是否使用ROW格式日誌時應該跟據應用的實際情況,其所 產生的日誌量會增加多少,以及帶來的IO效能問題。

缺點:由於記錄的只是執行語句,為了這些語句能在slave上正確執行,因此還必須記錄每條語句在執行的時候的 一些相關資訊,以保證所有語句能在slave得到和在master端執行時候相同 的結果。另外mysql 的複製,像一些特定函式功能,slave可與master上要保持一致會有很多相關問題(如sleep()函式, last_insert_id(),以及user-defined functions(udf)會出現問題).

使用以下函式的語句也無法被複制:

* LOAD_FILE()

* UUID()

* USER()

* FOUND_ROWS()

* SYSDATE() (除非啟動時啟用了 --sysdate-is-now 選項)

同時在INSERT ...SELECT 會產生比 RBR 更多的行級鎖

2)Row:不記錄sql語句上下文相關資訊,僅儲存哪條記錄被修改。

優點: binlog中可以不記錄執行的sql語句的上下文相關的資訊,僅需要記錄那一條記錄被修改成什麼了。所以rowlevel的日誌內容會非常清楚的記錄下 每一行資料修改的細節。而且不會出現某些特定情況下的儲存過程,或function,以及trigger的呼叫和觸發無法被正確複製的問題

缺點:所有的執行的語句當記錄到日誌中的時候,都將以每行記錄的修改來記錄,這樣可能會產生大量的日誌內容,比 如一條update語句,修改多條記錄,則binlog中每一條修改都會有記錄,這樣造成binlog日誌量會很大,特別是當執行alter table之類的語句的時候,由於表結構修改,每條記錄都發生改變,那麼該表每一條記錄都會記錄到日誌中。

3)Mixedlevel: 是以上兩種level的混合使用,一般的語句修改使用statment格式儲存binlog,如一些函式,statement無法完成主從複製的操作,則 採用row格式儲存binlog,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在Statement和Row之間選擇 一種.新版本的MySQL中隊row level模式也被做了優化,並不是所有的修改都會以row level來記錄,像遇到表結構變更的時候就會以statement模式來記錄。至於update或者delete等修改資料的語句,還是會記錄所有行的 變更。

34.資料庫中常用術語:

ddl:資料定義語言 Create Drop Alter

dml:資料操縱語言 insert update delete select

dcl:資料控制語言 grant revoke

tcl:事務控制語言 commit rollback

 35.Oracle的基本資料型別

1)字元型

Char  固定長度字串  佔2000個位元組

Varchar2 可變長度字串 佔4000個位元組

Nvarchar2 佔2000個字元(最多能存2000個字母/中文)

2)大物件型(lob)

Blob :二進位制資料 最大長度4G

Blob 用於存一些圖片,視訊,檔案。

比如:當我們在進行檔案上傳時,我們一般把上傳的檔案存在硬碟上,可以不佔用 資料庫,下載時,如果專案遷移時,檔案也要跟著遷移。因此我們可以把用blob把它存在資料庫中。但這樣也增加了資料庫的負擔。

Clob :字元資料 最大長度4G,可以存大字串  varchar2和nvarchar2都具有一定的侷限性,它們長度有限,但資料庫中無論用varchar2或nvarchar2型別,還是用clob,在java端都使用String接收。

3)數值型

Integer  整數型別,小的整數。

Float  浮點數型別。

Real  實數型別。

Number(p,s)包含小數位的數值型別。P表示精度,s表示小數後的位數。

Eg: number(10,2) 表示小數點之前可有8位數字,小數點後有2位。

4)日期型別

Date 日期(日-月-年) DD-MM-YY(HH-MI-SS)

Timestamp 跟date比 它可以精確到微秒。精確範圍0~9 預設為6。

36.必背的SQL語句

1)Oracle 分頁

select * from (select t.*, rownum rn from (select * from menu order by id desc) t where          rownum < 10) where rn >=5

2) MySQL 分頁

select * from music where id limit 5,5

3)Oracle中如何快速將一張表的資料複製到另外一張表中(另外一張表不存在,另外一張表存在,但資料為空)

a.不存在另一張表時:

create  table  新表  as  select * from 將要複製的表

b.存在另一張表時:

insert  into  新表名  select  欄位  from  將要複製的表名

4)快速刪除一張表(不可事物回滾,也就是沒有日誌記錄)

TRUNCATE from 表名

5)inner join

select 查詢資訊 from 表名 1 inner join 表名2 on 表名1.列名 = 表名2.列名

6)left join

左外連線select 查詢資訊 from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名

7)right join

右外連線select 查詢資訊 from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名

8)oracle中查詢遍歷樹形結構(start  with)

select * from extmenu

start with pid=0

connect by prior id = pid

9)查詢出來60-70,80-90,95-100學生的資訊 

select * from stu where chengji between 60 and 70 or between 80 and 90 or between 95 and 100

select * from stu where chengji > 60 and chengji < 70 or chengji > 80 and chengji < 90 or chengji > 95 and chengji < 100

10)用exists替換in------進行聯表查詢

select * from dept where exists(select * from emp where emp.deptno=dept.deptno);

或select  *  from  dept  d  inner  join  emp  e  on  d.deptno = e.deptno(只查詢出兩表共同擁有的欄位資料)

11)刪除表中的重複資料:

delete from xin a where a.rowid != (

select max(b.rowid) from xin b

where a.name = b.name

)

 Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

37. JDBC連線資料庫步驟(以MySQL為例)

1)載入JDBC驅動程式:  

通過Class類的forName方法實現,並將驅動地址放進去成功載入後,會將Driver類的例項註冊到DriverManager類中。  

2)提供JDBC連線的URL 、建立資料庫的連線  

要連線資料庫,需要向java.sql.DriverManager請求並獲得Connection物件,該物件就代表一個資料庫的連線。  

使用DriverManager的getConnectin()方法傳入指定的欲連線的資料庫的路徑、資料庫的使用者名稱和密碼。    

Connection con=DriverManager.getConnection(url , username , password);

"jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=utf-8”; 

3)建立一個Statement  

   要執行SQL語句,必須獲得java.sql.Statement例項

   執行靜態SQL語句。通常通過Statement例項實現。  

   執行動態SQL語句。通常通過PreparedStatement例項實現。  

   String sql = “”;

   Statement st = con.createStatement() ;  

   PreparedStatement pst = con.prepareStatement(sql) ;

4)執行SQL語句  

Statement介面提供了executeQuery、executeUpdate、execute三種方法 

executeQuery:執行select語句,返回ResultSet結果集

ResultSet rst = pst.executeQuery(); 

executeUpdate:執行insert、update、delete語句pst.executeUpdate();

5)關閉JDBC物件   

操作完成以後要把所有使用的JDBC物件全都關閉,以釋放JDBC資源。

38. JDBC分段批量提交的時候出現異常怎麼處理? 

通過Map來解決效能問題。首先在分段批量提交的時候,我們不採用事務,這樣就保證了合法的資料就自動提交,不合法的資料就自己自動進行回滾,為了避免不合法資料影響後續合法資料的提交,採用定義業務規則字典表,實現對資料的驗證,將不合法的資料記錄下來,供使用者進行後續處理,而合法的資料就全部提交。

39. JDBC批量處理資料

dbc批量處理資料是通過PreparedStatement物件的 addbatch(), executebatch() clearbatch()進行和資料庫的互動。通常我們使用分段批量處理的方式 這樣可以提高程式的效能 ,防止記憶體溢位。

1)每個sql語句都和資料庫互動一次(非批量操作)

2)只和資料庫互動一次(批量操作)(記憶體溢位)

當資料達到一定額度的時候就和資料庫進行互動,分多次進行(分段批量操作)(500或者1000)

pst.addBatch();

    if (i > 0 && i%1000 == 0) {

       pst.executeBatch();

       pst.clearBatch();

    }

40. HashTable與HashMap

1)同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的。

2)HashMap允許存在一個為null的key,多個為null的value 。

3)hashtable的key和value都不允許為null。

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

相關文章