2019年騰訊最新Java工程師面試題

1、單選題(共21題,每題5分)

1在正則表達式當中下面那一個字符集表示非空格字符
 
A

Ajava

 
2下列敘述中,錯誤的是( )。
 
A

暫無linux

 
3如下哪一個排序算法中,元素的比較次數元素與元素的初始排列無關()
 
E
 
4下面程序的輸出結果是什麼。
下面程序的輸出結果是什麼。
```
 1 public class A2{ 
 2 public static void main(String[] args){
 3     int[] a={2,4,6,8,3,6,9,12};
 4     doSomething(a,0,a.length-1);
 5     for(int i=0;i=x){
 6             swap(a,i,j);
 7             i++;//交換了幾回 
 8         }
 9     }//把最大的放到最後
10     swap(a,i,end);//把最大的放到i的位置 
11     return i;
12 } 
13  
14 private static void swap(int[] a,int i,int j) 
15 {
16     int tmp=a[i];
17     a[i]=a[j];
18     a[j]=tmp;
19 }
20 } 
21 ```                           

 

C
開始被註釋迷惑了半天。
按快排的思想,遍歷數組將比x大的按順序存至a\[0\]a\[1\]a\[2\]..此時j負責遍歷數組,i負責依次指向下一次
遍歷判斷獲得的大於x的數該存儲的位置,每一次成功存儲向後移動一格
 
![](https://storage.kuibuke.com/source/1/Eawsn8OjUtldwcCznJeyAa-L2dkhbIeK.)
![](https://storage.kuibuke.com/source/1/r_qNSSJe5jKn7YAjOeVqW87cD14xy3SB.)
![](https://storage.kuibuke.com/source/1/P_3qexdojr61Po55nN0C_TegJw5vWnl_.)
swap(a,i,end);//把最大的放到i的位置
應該是將x交換至分界點,( x並不是最大 )至此一趟core完成,x左側大於x,x右側小於x,x左右任是無序數列
而後依據分治的思想,對左序列,右序列迭代。當分至每一個序列只有一個元素序列必然有序。
最終達到排序目的。(靈魂手繪輕噴)
 
 
 
5如下關於hive以及Hadoop生態系統中其餘組件的說法正確的是
 
B

Hbase是一個面向列分佈式數據庫,和hive不一樣的是,hbase可以在它的數據庫上實時運行,而不是運行mapreduce任務發生的git

 
6如下JAVA程序的輸出是什麼()

如下JAVA程序的輸出是什麼()程序員

 1 <pre class="prettyprint">public class HelloSogou{
 2      public static synchronized void main(String[] a){
 3          Thread t=new Thread(){
 4              public void run(){Sogou();}
 5      };
 6      t.run();
 7      System.out.print("Hello");
 8      }
 9      static synchronized void Sogou(){
10      System.out.print("Sogou");
11     }
12 }

 

B
我以爲誤區有兩個:一個是run和start區別,Thread.run()是調用方法,Thread. start()是啓動線程;另外一個是鎖持有問題。這個題是調用方法,和多線程就無關。本題只有一個線程,持有HelloSogou.class鎖。那麼,就是另外一個問題:同步方法調用另外一個同步方法的鎖問題?
 
public synchronized void methodA(int a, int b){} public synchronized void methodB(int a){ methodA(a, 0);
}
首先要明白兩個問題,**1.鎖的對象是誰?2.誰持有了鎖?**
假設方法A和B是在同一個類Test中的兩個方法。 Test t=new Test(); t.methodB();
調用methodB()方法,得到鎖,鎖是對象**t**;鎖誰持有?當前線程(不能夠說是methodB持有該鎖),methodB又調用methodA,也須要鎖**t**,該線程已持有**t**,固然能夠直接調用methodA。
 
類比到此題,只有一個主線程,調用main,持有HelloSogou.class鎖,那固然能夠直接調用Sogou方法。
 
第二,若是是**t.statrt()**,那麼這個題,**靜態同步函數的鎖是該類的字節碼文件.class。**此題中,main函數和Sogou方法都是static的,因此持有相同**鎖** **HelloSogou.class** ,那麼,在main線程(main 是一個線程也是一個進程 )中又開了一個線程,調用Sogou方法,鎖會衝突。
 
個人分析是:調用main函數(一個線程),main函數開啓另外一個線程,並啓動,可是main函數和Sogou方法是同一個鎖,因此main函數執行完畢後纔會釋放鎖,Sogou方法纔會執行,這就是爲何,換成start,是HelloSogou。
第三,將Sogou方法的鎖改成其餘.class鎖,那麼,HelloSogou和SogouHello均可能出現。由於沒有互斥現象了,變爲搶佔式的了。
 
7下列關於Java語言中線程的敘述中,正確的是(  )。
 
D

本題考查線程的基本知識。線程與進程在概念上是相關的,線程是由表示程序運行狀態的寄存器、程序計數器、棧指針以及堆棧組成,它不包含進程地址空間中的代碼 和數據。代碼所操做的數據是Java線程模型中的一個組成部分,數據與代碼是獨立的。數據能夠被多個線程共享,也可不共享。Java語言中提供兩種建立線 程的方法,-種是經過繼承Thread類建立線程,另-種是經過實現Runnable接口來建立線程。正則表達式

 
 
8經過Intent傳遞一些二進制數據的方法有哪些?
經過Intent傳遞一些二進制數據的方法有哪些?
A、使用Serializable接口實現序列化,這是java經常使用的方法
B、實現Parcelable接口,這裏Andriod的部分分類好比Bitmap類就已經實現了,同時Parcelable在Android AIDL中交換數據也很常見
C

Android中實現序列化有兩個選擇:一是實現Serializable接口(是JavaSE自己就支持的),一是實現Parcelable接口(是Android特有功能,效率比實現Serializable接口高效,可用於Intent數據傳遞,也能夠用於進程間通訊(IPC))。實現Serializable接口很是簡單,聲明一下就能夠了,而實現Parcelable接口稍微複雜一些,但效率更高,推薦用這種方法提升性能。redis

注:Android中Intent傳遞對象有兩種方法:一是Bundle.putSerializable(Key,Object),另外一種是Bundle.putParcelable(Key,Object)。固然這些Object是有必定的條件的,前者是實現了Serializable接口,然後者是實現了Parcelable接口。算法

 
9在Java中,JDBC API定義了一組用於與數據庫進行通訊的接口和類,它們包括在(   )包中。
 
B

暫無sql

 
10關於計算機網絡,如下說法正確的是 (1)在向下的過程當中,須要添加下層...
關於計算機網絡,如下說法正確的是
(1)在向下的過程當中,須要添加下層協議所須要的首部或者尾部
(2)在向上的過程當中不斷拆開首部和尾部
(3)在向上的過程當中,須要添加下層協議所須要的首部或者尾部
(4)在向下的過程當中不斷拆開首部和尾部
(5)SMTP屬於TCP協議
(6)POP3屬於UDP協議
(7)DNS屬於TCP協議
(8)Telnet屬於UDP協議
A
1)TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於[傳輸層](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82)協議。
2)其中TCP提供IP環境下的數據[可靠傳輸](https://baike.baidu.com/item/%E5%8F%AF%E9%9D%A0%E4%BC%A0%E8%BE%93),它提供的服務包括[數據流](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%B5%81)傳送、可靠性、有效流控、全雙工操做和多路複用。經過面向鏈接、端到端和可靠的[數據包](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%8C%85)發送。通俗說,它是事先爲所發送的數據開闢出鏈接好的通道,而後再進行數據發送;通常來講,TCP對應的是可靠性要求高的應用。
3)而UDP則不爲IP提供可靠性、流控或差錯恢復功能。UDP對應的則是可靠性要求低、傳輸經濟的應用。
4)TCP支持的應用協議主要有:Telnet、FTP、SMTP等;
5) TCP對應的協議: (1) FTP:定義了文件傳輸協議,使用21端口。 (2) Telnet:一種用於遠程登錄的端口,使用23端口,用戶能夠以本身的身份遠程鏈接到計算機上,可提供基於DOS模式下的通訊服務。 (3) SMTP:郵件傳送協議,用於發送郵件。服務器開放的是25號端口。 (4) POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110端口。 (5)HTTP:是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。 UDP對應的協議: (1) DNS:用於域名解析服務,將域名地址轉換爲IP地址。DNS用的是53號端口。 (2) SNMP:簡單網絡管理協議,使用161號端口,是用來管理網絡設備的。因爲網絡設備不少,無鏈接的服務就體現出其優點。 (3) TFTP(Trival File Tran敏感詞er Protocal),簡單文件傳輸協議,該協議在熟知端口69上使用UDP服務。
 
11Java是一門面向對象的編程語言,下面關鍵字中可以表示Java面向對象的特...

Java是一門面向對象的編程語言,下面關鍵字中可以表示Java面向對象的特性是()數據庫

A

A編程

 
12下面關於操做系統的進程說法正確的有?
 
B

死鎖不只能夠發生在多線程中,也能夠發生在多個進程中。只要是因爭搶資源致使互相等待,無外力做用沒法前進的均可以稱爲死鎖

 
13下列關於Java布爾類型的描述中,正確的是(  )。
 
A

暫無

 
14下面有關java classloader說法錯誤的是?
 
C

一個jvm中默認的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分別各司其職:

  • Bootstrap ClassLoader 負責加載java基礎類,主要是 %JRE_HOME/lib/ 目錄下的rt.jar、resources.jar、charsets.jar和class等
  • Extension ClassLoader 負責加載java擴展類,主要是 %JRE_HOME/lib/ext 目錄下的jar和class
  • App ClassLoader 負責加載當前java應用的classpath中的全部類。

classloader 加載類用的是全盤負責委託機制。所謂全盤負責,便是當一個classloader加載一個Class的時候,這個Class所依賴的和引用的全部 Class也由這個classloader負責載入,除非是顯式的使用另一個classloader載入。
因此,當咱們自定義的classloader加載成功了com.company.MyClass之後,MyClass裏全部依賴的class都由這個classLoader來加載完成。

 
15HTTPS是一種安全的HTTP協議,它使用 ( ) 來保證信息安全?
 
B

SSL是解決傳輸層安全問題的一個主要協議,其設計的初衷是基於TCP協議之上提供可靠的端到端安全服務。應用SSL協議最普遍的是HTTPS,它爲客戶瀏覽器和Web服務器之間交換信息提供安全通訊支持。它使用TCP的443端口發送和接收報文。

 
16下列可以正確建立線程的方法是 ?
  • ①.繼承java.lang.Thread類,並重寫run(  )方法
  • ②.繼承java.lang.Runnable類,並重寫start(  )方法
  • ③.實現java.lang.Thread接口,並實現run(  )方法
  • ④.實現java.lang.Runable接口.並實現run(  )方法
D

用Thread類的構造方法Thread(Runnable target)建立線程對象時,構造方法中的參數必須是一個具體的對象,該對象稱做線程的目標對象,建立目標對象的類必需要實現Runnable接口。

 
 
17given the following code,what will be the output?
 1 class Value{
 2     public int i=15;
 3 }
 4 public class Test{
 5     public static void main(String argv[]){
 6         Test t=new Test( );
 7         t.first( );
 8     }
 9 
10 public void first( ){
11     int i=5;
12     Value v=new Value( );
13     v.i=25;
14     second(v,i);
15     System.out.println(v.i);
16 }
17 
18 public void second(Value v,int i){
19     i = 0;
20     v.i = 20;
21     Value val = new Value( );
22     v = val;
23     System.out.println(v.i+" "+i);
24    }
25 }

 

 
A
 
18若是但願在網絡中經過某個類的對象包裝數據進行傳輸,那麼這個類須要實現下面哪...

若是但願在網絡中經過某個類的對象包裝數據進行傳輸,那麼這個類須要實現下面哪一個接口?()

C
 
19linux查看系統IP地址以及網卡流量可使用如下哪一個命令
 
B

Windows下是ipconfig,Linux下是ifconfig

 
20數據的存儲結構是指____。
 
D

暫無

 
21封裝、繼承和多態是面向對象編程的三大特徵,在java 開發過程當中有着普遍應用。如下關於它們的描述不正確的是: ( )
 
B

答案:B解析:根據《系統集成項目管理工程師教程(第2版)》第137頁,繼承表示類之間的層次關係(父類與子類),這種關係使得某類對象能夠集成另一類對象的特徵。因此繼承關係中共有類屬性只要在父類中進行說明便可,子類不須要了。

 

2、多選題(共8題,每題5分)

1在Java語言中,下列關於字符集編碼(Character set encoding)和國際化(i18n)的問題,哪些是正確的?
 
C,D

收到不少贊,感謝諸君閱讀捧場
在此針對評論區的一些意見發表以下聲明:

  1. 這個回答不會給你解釋題目與分析解題過程。這個回答的目的是科普。爲的是從根本上向你們解釋清楚Unicode的玩法。若是讀者只是想了解解題過程和選項分析,請看本題的推薦答案。
  2. 一些朋友說這個答案是複製粘貼過來的。我想一千個讀者有一千個哈姆雷特。我不管說什麼其實都沒法改變讀者心裏認定的那個結論。因此,你們開心就好。爲了這個目的,你們不妨先問問本身是否是真的想要了解Unicode的基礎知識?若是是,那麼歡迎您繼續下面的旅程。

不少人都把Unicode編碼掛在嘴邊,其實我們現實生活中遇到的編碼基本都是Unicode的

由於Unicode兼容了大多數老版本的編碼規範例如 ASCII

Unicode編碼定義了這個世界上幾乎全部字符(就是你眼睛看到的長那個樣子的符號)的數字表示

也就是說Unicode爲每一個字符發了一張身份證,這張身份證上有一串惟一的數字ID肯定了這個字符

在這個紛亂世界上存在的惟一性。Unicode給這串數字ID起了個名字叫[碼點](Code Point)

而不少人說的編碼實際上是想表達[Unicode轉換格式](即UTF,Unicode Transformation Formats)

有沒有以爲眼前一亮豁然開朗?沒錯 這就是咱們看到的UTF-8/UTF-16/UTF-32的前綴來源

這個[Unicode轉換格式]的存在是爲了解決[碼點]在計算機中的二進制表現形式而設計的

畢竟咱們的機內表示涉及存儲位寬,兼容古老編碼格式,碼點是數值過大的罕見字符等問題

[碼點]通過映射後獲得的二進制串的轉換格式單位稱之爲[碼元](Code Unit)。也就是說若是有一種UTF的碼點二進制表示有n字節,其碼元爲8位(1個byte),那麼其擁有碼元n個。每種UTF的碼元都不一樣,其寬度被做爲區分寫在了UTF的後綴——這就是UTF-8/UTF-16/UTF-32的由來。UTF-8的碼元是8位的,UTF-16的碼元是16位的。大部分的編程語言採用16位的碼元做爲機內表示。這就是咱們在各類語言中調用獲取一個字符串中character的數量時會出現這麼多混亂的緣由。事實上咱們調用這些方法時取得的不是字符個數,而是碼元個數!一旦咱們的字符串中包含了位於基本平面以外的碼點,那麼就會須要更多的碼元來表示,這個時候就會出現測試時常見的困惑——爲什麼return的字符數比實際字符數要多?因此實際寫代碼時要特別注意這個問題。

採起不一樣的映射方式能夠獲得不一樣格式的二進制串,可是他們背後所表示的[碼點]永遠是一致的就好像你換身份證可是身份證號不變同樣。因爲平時人們誤把[轉換格式]也稱爲[編碼],因此形成今天Unicode/UTF傻傻分不清楚且遣詞造句運用混亂的悲桑局面。

Unicode 編碼 發展到今天 擴展到了 21 位(從 U+0000 到 U+10FFFF )。這一點很重要: Unicode 不是 16 位的編碼, 它是 21 位的。這 21 位提供了 1,114,112 個碼點,其中,只有大概 10% 正在使用,因此還有至關大的擴充空間。

編碼空間被分紅 17 個平面(plane),每一個平面有 65,536 個字符(正好填充2個字節,16位)。0 號平面叫作「基本多文種平面」( BMP, Basic Multilingual Plane ,涵蓋了幾乎全部你能遇到的字符,除了 emoji(emoji位於1號平面 - -)。其它平面叫作補充平面,大可能是空的。

總結一下各類編碼格式的特質:

UTF-32

最清楚明瞭的一個 UTF 就是 UTF-32 :它在每一個碼點上使用整 32 位。32 大於 21,所以每個 UTF-32 值均可以直接表示對應的碼點。儘管簡單,UTF-32卻幾乎歷來不在實際中使用,由於每一個字符佔用 4 字節太浪費空間了。

UTF-16 以及「代理對」( Surrogate Pairs )的概念

UTF-16要常見得多,它是根據有 16 位固定長度的碼元( code units 定義的。UTF-16 自己是一種長度可變的編碼。基本多文種平面(BMP)中的每個碼點都直接與一個碼元相映射。鑑於 BMP 幾乎囊括了全部常見字符,UTF-16 通常只須要 UTF-32 一半的空間。其它平面裏不多使用的碼點都是用兩個 16 位的碼元來編碼的,這兩個合起來表示一個碼點的碼元就叫作代理對( surrogate pair 

UTF-8

UTF-8 使用一到四個字節來編碼一個碼點。從 0 到 127 的這些碼點直接映射成 1 個字節(對於只包含這個範圍字符的文原本說,這一點使得 UTF-8 和 ASCII 徹底相同)。接下來的 1,920 個碼點映射成 2 個字節,在 BMP 裏全部剩下的碼點須要 3 個字節。Unicode 的其餘平面裏的碼點則須要 4 個字節。UTF-8 是基於 8 位的碼元的,所以它並不須要關心字節順序(不過仍有一些程序會在 UTF-8 文件里加上多餘的 BOM)。

有效率的空間使用(僅就西方語言來說),以及不須要操心字節順序問題使得 UTF-8 成爲存儲和交流 Unicode 文本方面的最佳編碼。它也已是文件格式、網絡協議以及 Web API 領域裏事實上的標準了。

咱們的JVM中保存碼點是UTF16的轉換格式,從char的位寬爲16位也能夠看得出來。因爲絕大部分編碼的碼點位於基本平面,因此使用16位能夠幾乎表示全部經常使用字符。這就是許多語言編譯器或運行時都使用UTF16的緣由。英文在使用UTF16時也是2字節表示的。當咱們想要使用其餘平面的字符時,碼元超過2個字節,就須要使用代理對在語言中的特定表示方式,譬如‘\U112233’之類的。

使用UTF8時,經常使用的Alphabet和Numeric都在前127字節,被有效率地用一個字節表示。而咱們的中文因爲排在1920個碼點以後,因此使用3個字節表示,這方面就比UTF16轉換格式耗費更多空間。

最後,不論使用哪一種UTF轉換格式,都是程序員本身能夠選擇的一種表達方式而已。咱們能夠經過Java方便的API進行自如轉換。

 
2下列說法錯誤的有( )
 
A,B,C,D

答案:ABCD 作這題其實要區分:C的過程,C++的函數,Java的方法。再看題目,就知道考點了。 java不容許單獨的方法,過程或函數存在,須要隸屬於某一類中。——AB錯 java語言中的方法屬於對象的成員,而不是類的成員。不過,其中靜態方法屬於類的成員。——C錯 D問的是java調用方法和C調用過程,C+ + 的函數同樣?確定不同。錯

 
3關於Java中的字符串,下列說法錯誤的是
 
B,C

暫無

 
4Java異常處理的過程當中,那些實踐是值得推薦的?
 
A,B,D

異常處理的過程當中,你遵循那些好的實踐?

  • 異常處理在項目設計中是很是關鍵的,因此精通異常處理是十分必要的。異常處理有不少最佳實踐,下面列舉集中,它們提升你代碼的健壯性和靈活性:
  • 調用方法的時候返回布爾值來代替返回null,這樣能夠 NullPointerException。因爲空指針是java異常裏最噁心的異常。
  • catch塊裏別不寫代碼。空catch塊是異常處理裏的錯誤事件,由於它只是捕獲了異常,卻沒有任何處理或者提示。一般你起碼要打印出異常信息,固然你最好根據需求對異常信息進行處理。
  • 能拋受控異常(checked Exception)就儘可能不拋受非控異常(checked Exception)。經過去掉重複的異常處理代碼,能夠提升代碼的可讀性。
  • 絕對不要讓你的數據庫相關異常顯示到客戶端。因爲絕大多數數據庫和SQLException異常都是受控異常,在Java中,你應該在DAO層把異常信息處理,而後返回處理過的能讓用戶看懂並根據異常提示信息改正操做的異常信息。
  • 在Java中,必定要在數據庫鏈接,數據庫查詢,流處理後,在finally塊中調用close()方法。
 
5如下JSP代碼定義了一個變量,如何輸出這個變量的值?
 
B,C,D

bean是Struts1的標籤,先下載struts-taglib-1.3.10.jar,而後添加到lib.
測試代碼:
pageEncoding="gbk"%>

 
jdk1.8中,下面有關java 抽象類和接口的區別,說法錯誤的是?
 
B,D
**接口能夠有default、static方法,因此B是錯的。** > interface A { > abstract void a(); > static void s() { > } > default void d(){ > > } > void b();//默認用abstract修飾 > int a = 0;//默認用static final 修飾 > }
 
7如下關於Redis的RDB 優缺點的說法正確的有?
 
A,B,C,D

RDB 優缺點

  • RDB 會生成多個數據文件,每一個數據文件都表明了某一個時刻中 redis 的數據,這種多個數據文件的方式,很是適合作冷備,能夠將這種完整的數據文件發送到一些遠程的安全存儲上去,好比說 Amazon 的 S3 雲服務上去,在國內能夠是阿里雲的 ODPS 分佈式存儲上,以預約好的備份策略來按期備份 redis 中的數據。
  • RDB 對 redis 對外提供的讀寫服務,影響很是小,可讓 redis 保持高性能,由於 redis 主進程只須要 fork 一個子進程,讓子進程執行磁盤 IO 操做來進行 RDB 持久化便可。
  • 相對於 AOF 持久化機制來講,直接基於 RDB 數據文件來重啓和恢復 redis 進程,更加快速。
  • 若是想要在 redis 故障時,儘量少的丟失數據,那麼 RDB 沒有 AOF 好。通常來講,RDB 數據快照文件,都是每隔 5 分鐘,或者更長時間生成一次,這個時候就得接受一旦 redis 進程宕機,那麼會丟失最近 5 分鐘的數據。
  • RDB 每次在 fork 子進程來執行 RDB 快照數據文件生成的時候,若是數據文件特別大,可能會致使對客戶端提供的服務暫停數毫秒,或者甚至數秒。
 
8OutOfMemoryError異常在哪些數據區域中可能會出現?
 
A,C,D

程序計數器通常不會溢出。

 

3、判斷題(共1題,每題5分)

1天貓雙十一有個積分換墨盒的活動,總共有50萬臺天貓魔盒(box),每一個用戶(user)能夠用99個天貓積分(point)兌換一臺魔盒,且每人限換一臺。 請設計一套java接口並實現下單(order)邏輯。 參考(但不侷限於)下面的下單邏輯: 一、建立訂單 二、扣減用戶積分 三、扣減魔盒庫存 四、下單成功 同時請回答: 一、數據庫表結構如何設計,有哪些表,分別有什麼做用? 二、下單過程當中哪些地方可能成爲瓶頸?如何解決或改善? 三、是否會用到數據庫事務,哪些地方會用到?若是不用數據庫事務,如何保證數據的一致性?
 
A

一、表的設計:①用戶表usertable ,字段id,name,point,以及記錄該用戶是否曾經兌換過魔盒的標誌字段hasdown,用0表示沒有下過,1表示下過②魔盒表boxtable,字段allnumber表示總數,remainnumber表示所省的魔盒數量③訂單表ordertable,字段id,userid,ordertime表示下單時間二、併發過程,當全部用戶同時訪問數據庫,操做魔盒表和用戶表時爲了保證事務的一致性,有必要在業務邏輯處理的地方,即更改魔盒表中魔盒數量的代碼塊或接口和對用戶表信息的處理地方處都要加上同步機制,事務回滾等措施三、用到的事務判斷用戶信息:積分是否大於99,是否曾經兌換過魔盒(hasdown是否爲0),若是積分夠又沒兌換過,那麼在兌換時用戶表裏的積分數要減去99,而且置hasdown爲1操做魔盒表:判斷魔盒剩餘數是否大於0,若是大於0就進行兌換,並使魔盒數減1,訂單表:當以上兩個事務均完成時再向訂單表裏插入一條記錄,包括用戶id,下單時間附:接口Public void order(User user, Box box);

相關文章
相關標籤/搜索