知否?知否!Java工程師常見面試題集錦(四)網際網路人必看!(附答案及視訊教程,持續更新)
成年人都追逐速度,渴望錦鯉一轉,速成超越。這也難怪,畢竟我們目光所及,全是金字塔頂端的閃閃發光。這如何能不加速我們的焦慮和對速度的追求呢?
年底了,你是不是又在無休止的趕專案?是不是也在嘀咕這一年忙到頭年終獎卻沒幾塊?有沒有在猶豫換一份更理想的工作?那麼,來好好儲備些面試題吧,有備無患,希望來年職場高升。
本期是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、包裝類等物件不可變性
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
相關文章
- Java工程師常見面試題集錦(三)網際網路人必看!(附答案及視訊教程,持續更新!)Java工程師面試題
- Java工程師常見面試題集錦(二)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- Java工程師常見面試題集錦(六)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- Java工程師常見面試題集錦(一)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 來了!Java工程師常見面試題集錦(五)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 知否知否,Java 面試的年貨到了Java面試
- 雲端計算工程師面試題集錦,常見雲端計算面試題及答案工程師面試題
- GO面試題集錦快答[持續更新]Go面試題
- 大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- 2020面試必知:中高階工程師面試題集整理(題目+答案)工程師面試題
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 2018年最新大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- 網際網路 Java 工程師面試題(Spring 面試題一)Java工程師面試題Spring
- Java常見面試題及答案彙總Java面試題
- 知否?知否?Vue之MVVMVueMVVM
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 知否,知否,線性迴歸基礎教程值得擁有
- 常見AI面試題及答案AI面試題
- 2019最新Web前端經典面試試題及答案,持續更新Web前端面試
- 金三銀四:螞蟻金服JAVA開發面試題及答案之一面(持續更新)Java面試題
- Docker常見面試題及答案!Linux入門教程Docker面試題Linux
- 10道常見的Python面試題及答案!Python入門必看Python面試題
- 知否?知否?情人眼裡出程式碼
- 前端工程師面試必備(持續更新中)前端工程師面試
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師web前端分享HTML5常見面試題集錦四程式設計師Web前端HTML面試題
- 【Java面試題系列】:Java基礎知識面試題,看這一篇就夠了(持續更新)Java面試題
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- Android開發工程師面試指南(面試題集附答案、簡歷模板)Android工程師面試題
- PHP開發工程師面試問題集錦PHP工程師面試
- Python資料型別面試題集錦!(附答案)Python資料型別面試題
- Flutter 面試知識點集錦Flutter面試
- Java面試專屬視訊 最新Java阿里京東美團滴滴面試題及答案教程Java阿里面試題
- Java工程師面試題之Dubbo(含答案)Java工程師面試題
- Linux面試題,淺析常見Linux命令面試題及答案Linux面試題
- 新手必看!使用New File Menu常見問題集錦
- 吐血總結!50道Python面試題集錦(附答案)Python面試題