阿里巴巴編碼規範 java 考試題

兩套真題
1.第一套

單選1.KV結構的集合,在處理null值的存儲上有細微的區別,下列哪些說法是正確的:A
A .TreeMap的key不可以爲null
B .TreeMap的key可以爲null
C .ConcurrentHashMap的key可以爲null
D .ConcurrentHashMap的value可以爲null
註釋:HashMap的key/value均可以爲null,但是TreeMap的key不能爲空,value可以爲空
多選 2.數組使用Arrays.asList轉化爲集合,下列說法哪些正確的:ACD
A .數組元素的修改,會影響到轉化過來的集合。
B .數組元素的修改,不會影響到轉化過來的集合。
C .對於轉換過來的集合,它的 add/remove/clear 方法會拋出: UnsupportedOperationException。
D .Arrays.asList 體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
多選 3.關於ORM的規則,下列哪些說法符合《阿里巴巴Java開發手冊》:AD
A .數據庫中,表達是與否概念的字段,必須使用is_xxx的方式命名。
B .推薦使用iBATIS自帶的queryForList(String statementName,int start,int size)進行分頁查詢。(不推薦)
C .爲避免寫resultMap,可以直接拿HashMap與HashTable作爲查詢結果集的輸出。
D .不要用resultClass當返回參數,即使所有類屬性名與數據庫字段一一對應,也需要定義。
多選 4.關於多線程並行處理定時任務的情況,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD
A .推薦使用Timer方式處理。
B .推薦使用ScheduledExecutorService方式處理。
C .Timer運行多個TimeTask時,只要其中之一沒有捕獲拋出的異常,其它任務便會自動終止運行。
D .ScheduledExecutorService併發運行多個定時任務時,其中某線程拋出異常,不會影響到其它線程的繼續運行。 多選 5.關於異常的處理方式,下列哪些說法是正確的:BD
A .爲防止obj對象本身空指針異常,書寫代碼時應該注意加異常捕獲處理,例如:try { obj.method() } catch(NullPointerException e){……} 。
B .方法簽名中,拋給調用者的關鍵字爲throws
C .方法內部,拋出異常實例對象爲throws
D .自定義異常要做到“認知對等”,即:拋出者和接收者要保持對自定義異常的認知統一,接收方需要知道這種異常的含義和對應的處理方案。
多選 6.關於註釋,下列哪些說法符合《阿里巴巴Java開發手冊》:BC
A .方法頭定義簽名上的註釋可以使用//(雙劃線)簡單說明,不必要遵守javadoc規範。(/** */)
B .類定義開始部分,一般都用Javadoc註釋 程序的總體描述以及作者信息。
C .方法頭定義簽名上的註釋必須遵守javadoc規範,使用/**回車來生成,不得在方法定義上方使用//(雙劃線)簡單說明。
D .方法頭定義簽名上的註釋,可以使用// xxx 的形式
多選 7.關於用日誌記錄異常信息,下列哪些說法符合《阿里巴巴Java開發手冊》:AB
A .日誌儘量記錄案發現場信息和異常堆棧信息。
B .如果日誌中輸出POJO類,POJO類需要重寫toString方法,避免只輸出hashCode。
C .不建議輸出任何日誌,因爲日誌記錄消耗性能。
D .捕獲異常後,一律拋給調用者去處理。
多選 8.關於常量的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD
A .常量命名應該全部大寫,單詞間用下劃線隔開。
B .常量的定義要力求語義表達完整清楚,讓別人能從常量名稱上大致瞭解含義,例如:MAX_STOCK_COUNT。
C .常量命名,可以使用拼音與英文的混合方式。
D .在使用縮寫時要注意:杜絕不規範的縮寫。
單選 9.關於類的序列化,下列說法哪些是正確的:D
A .類的序列化與serialVersionUID毫無關係。
B .如果完全不兼容升級,不需要修改serialVersionUID值。
C .POJO類的serialVersionUID不一致會編譯出錯。
D .POJO類的serialVersionUID不一致會拋出序列化運行時異常。
多選 10.關於二方庫使用枚舉類型,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD
A .二方庫裏可以定義。
B .二方庫裏接口的入參可以使用枚舉類型。
C .二方庫裏接口的返回值不能使用枚舉類型,但可以包含枚舉類型。
D .二方庫裏接口的返回值是枚舉類型或包含枚舉類型時,當二方庫的枚舉值升級(增加枚舉值)時,可能會導致接口調用時出現枚舉對象序列化異常。
多選 11.關於索引的設計,下列哪些說法符合《阿里巴巴Java開發手冊》:ACD
A .對varchar類型的字段建立索引,必須指定索引長度。
B .對varchar類型的字段建立索引,不需要指定索引長度,這樣索引區分度最好。
C .業務上具有唯一特性的字段(含組合字段),必須指定唯一索引。
D .建複合索引時,一般選擇區分度高的字段放在最左列。
多選 12.關於hashcode和equals,下列哪些說法是正確的:BC
A .hashcode是Class的方法,equals是Object的方法。
B .hashcode決定(如:HashMap)存儲位置;equals決定是否需要覆蓋(同一hash下)集合元素。
C .類重寫hashcode,必須重寫equals。
D .兩者是否需要重寫,沒有必然聯繫。 備註:equals 爲true,hashcode值相同 但是hashcode值相同,equals可能爲false
多選 13.關於常量定義,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD
A .跨應用共享常量:放置在二方庫中,通常是client.jar中的const目錄下。
B .應用內共享常量:通常放置在一方庫的子模塊中的const目錄下。
C .子工程內部共享常量:即在當前子工程的const目錄下。
D .類內常量:直接在類內部private static final定義。
多選 14.針對tcp協議,下列哪些說法是正確的:CD
A .tcp鏈接主動關閉的一方,在完成四次揮手協議後,即會立即關閉並釋放socket。
B .處於time_wait狀態的socket,其實是已經關閉狀態,當需要新建連接時,可以被馬上覆用。
C .當大量socket處於time_wait狀態時,會導致可用socket資源稀缺,從而導致服務器併發能力下降。
D .通過修改/etc/sysctl.conf配置文件,減小time_wait的超時時間,可以降低time_wait狀態的socket數量,從而提升服務器併發能力。
多選 15.關於二方庫依賴的解析命令,下列哪些說法是正確的:ABC
A .mvn dependency:resolve 打印出已仲裁依賴的列表。
B .mvn dependency:tree 打印工程整個的依賴樹結構。
C .mvn dependency:tree -Dverbose -Dincludes=commons-lang 打印出與commons-lang相關的詳細依賴。
D .mvn clean install 打印工程整個的依賴樹結構,並部署到本地倉庫中。
多選 16.關於Java代碼的設計和開發注意事項,下列哪些說法符合《阿里巴巴Java開發手冊》:ABC
A .所有的覆寫方法,必須是強制加 @Override。
B .setter方法中,參數名稱與類成員變量名稱一致,this.成員名=參數名。
C .在getter方法中,儘量不要增加邏輯判斷,因爲添加了邏輯判斷後,會增加排查問題難度。
D .避免用BeanUtil進行屬性的copy。
多選 17.關於變量和常量定義,下列哪些符合《阿里巴巴Java開發手冊》:AD
A .Long a=2L;//大寫的L
B .Long a=2l; //小寫的l
C .常量只定義一次,不再賦值,所以不需要命名規範。
D .不要使用一個常量類維護所有常量,應該按常量功能進行歸類,分開維護。
多選 18.關於線程安全,下列哪些說法是正確的:ACD
A .SimpleDateFormat 是線程不安全的類。
B .SimpleDateFormat 是線程安全的類。
C .一般不要定義SimpleDateFormat的static變量,如果定義爲static,必須保證線程安全。
D .推薦使用Apache封裝好的DateUtils和DateFormatUtils工具類,來處理時間日期轉換問題。
多選 19.關於try-catch的使用方式,下列哪些說法是正確的:BD
A .推薦用try-catch來做流程控制、條件控制。
B .捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類。
C .對大段代碼進行try-catch,利用Throwable來捕捉,萬無一失。
D .對大段代碼進行try-catch,這是不負責任的表現,分清穩定代碼和非穩定代碼,對非穩定的代碼做對應的異常處理。
多選 20.關於加鎖,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD
A .可以只鎖代碼區塊的情況下,就不要鎖整個方法體。
B .高併發的業務場景下,要考慮加鎖及同步處理帶來的性能損耗,能用無鎖數據結構,就不要用鎖。
C .能用對象鎖的情況下,就不要用類鎖。
D .加鎖時需要保持一致的加鎖順序,否則可能會造成死鎖。
多選 21.在多線程併發讀寫的情況下,下列哪些處理方式能保證對象的線程安全:BCD
A .使用volatile關鍵字。(volatile 解決多線程內存不可見問題。對於一寫多讀,是可以解決變量同步問題,但是如果多寫,同樣無法解決線程安全問題。)
B .使用synchronized關鍵字給對象的讀寫操作加鎖。
C .如果是基本類型,推薦使用java.util.concurrent.atomic包下面提供的線程安全的基本類型包裝類,例如AtomicInteger。
D .如果是集合,推薦使用java.util.concurrent提供的併發集合類,例如:ConcurrentHashMap。
多選 22.關於生產環境的日誌文件,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD
A .異常信息應該包括兩類信息:案發現場信息和異常堆棧信息。
B .日誌文件推薦至少保存15天,因爲有些異常具備以“周”爲頻次發生的特點。
C .避免重複打印日誌,浪費磁盤空間,務必在log4j.xml中設置additivity=false。
D .錯誤日誌和業務日誌儘量分開存放。
多選 23.關於系統安全,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD
A .表單、AJAX提交不需要進行CSRF安全過濾。
B .表單、AJAX提交必須執行CSRF安全過濾。
C .URL外部重定向傳入的目標地址必須執行白名單過濾。
D .用戶輸入的SQL參數嚴格使用參數綁定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL訪問數據庫。
多選 24.關於checked/unchecked exception,下列哪些說法是正確的:BCD
A .繼承java.lang.Error的類屬於checked exception。
B .checked異常繼承java.lang.Exception類。
C .unchecked異常繼承java.lang.RuntimeException類。
D .NullPointerException , IllegalArgumentException屬於unchecked exception。
多選 25.Hashtable,HashMap, ConcurrentHashMap都是Map的實現類,它們在處理null值的存儲上有細微的區別,下列哪些說法是正確的:BD ====> ABD
A .Hashtable的KV都不可以爲null。
B .HashMap的KV都可以爲null。
C .HashMap的K不可以爲null,V可以爲null。
D .ConcurrentHashMap的KV都不可以爲null。
多選 26.關於應用與數據庫之間的操作,下列哪些說法符合《阿里巴巴Java開發手冊》:BC
A .對外提供一個大而全的接口進行POJO的update更新,這樣比較省事,省代碼。
B .使用事務回滾的地方需要考慮各方面的回滾方案,包括緩存回滾、搜索引擎回滾、消息補償、統計修正等。
C .應用服務器與數據庫之間是短連接。
D .應用服務器與數據庫之間是長連接。
多選 27.關於索引的使用,下列哪些說法是正確的:BCD
A .查詢語句 WHERE a+1 = 5 可以利用a索引。
B .查詢語句WHERE date_format(gmt_create, ‘%Y-%m-%d’) = '2016-11-11’無法利用gmt_create索引。
C .當 c 列類型爲 char 時,查詢語句 WHERE c = 5 無法利用c索引。
D .索引字段使用時不能進行函數運算。
多選 28.關於代碼書寫格式,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD
A .換行時相對上一行縮進2個空格。
B .運算符與下文一起換行,方法調用的點符號與下文一起換行。
C .在多個參數超長,逗號後進行換行。
D .在括號前不要換行。
多選 29.關於MySQL性能優化的描述,下列哪些說法是正確的:ABCD
A .主鍵查詢優先於二級索引查詢。
B .表連接有一定的代價,故表連接數量越少越好。
C .一般情況下,二級索引掃描優先於全表掃描。
D .可以使用通過索引避免排序代價。
多選 30.關於Java的接口描述,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD
A .在接口類中的方法和屬性使用public修飾符。
B .對於Service類,內部的實現類加Impl的後綴與接口區別。例如:ProductServiceImpl實現ProductService接口。
C .對於Service類,基於SOA的理念,是以接口方式暴露服務。
D .儘量不在接口裏定義變量,如果一定要定義變量,肯定是與接口方法相關,而且是整個應用的基礎常量。
多選 31.關於二方庫的依賴處理,下列哪些說法符合《阿里巴巴Java開發手冊》:ACD
A .依賴於一個二方庫羣時,必須定義一個統一版本變量,避免各子二方庫版本號不一致。
B .可以允許子項目的pom依賴中出現相同的GroupId,相同的ArtifactId,但是不同的Version。
C .所有pom文件中的依賴聲明放在語句塊中,所有版本仲裁放在語句塊中。
D .線上應用不要依賴SNAPSHOT版本(安全包除外)。
單選 32.sort表示元素在存入集合時進行了排序,數據遍歷的結果是按某個排序規則輸出的; 而order表示每次遍歷的序列都是一樣的,元素前後關係每次遍歷都是確定的,那麼下列哪些集合既是sort,又是order的:D
A .HashSet
B .LinkedList
C .HashMap
D .TreeSet
多選 33.關於工具類二方庫已經提供的,儘量不要在本應用中編程實現,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD
A .json操作使用fastjson。
B .md5操作使用commons-codec。
C .ArrayUtils、NumberUtils、DateFormatUtils、DateUtils等優先使用org.apache.commons.lang包。
D .CollectionUtils優先使用org.apache.commons.collections4包。
備註:(org.apache.commons.lang3.time.DateFormatUtils)
多選 34.關於接口使用拋異常還是返回錯誤碼,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD
A .向公司外部提供的http/api接口,推薦使用“錯誤碼”方式返回異常或者錯誤信息。
B .對於應用內部的方法調用,推薦使用“拋出異常”的方式處理異常或者錯誤信息。
C .跨應用的RPC調用,推薦使用將“錯誤碼”和“錯誤簡短信息”封裝成Result的方式進行返回。
D .對外提供的接口,一定要保證邏輯健壯性:儘量避免空指針等技術類異常;對於業務類異常要做好錯誤碼或者異常信息的封裝。
單選 35.關於測試代碼的覆蓋率,下列哪些說法是正確的?:B
A .路徑覆蓋是最強覆蓋,符合路徑覆蓋且測試全部通過,程序絕對沒有問題。
B .語句覆蓋度是最弱的覆蓋度量方式。
C .分支覆蓋與條件覆蓋其實是一回事。
D .判定條件覆蓋與路徑覆蓋其實是一回事。
多選 36.關於類和方法的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD
A .類名使用UpperCamelCase命名法,但是領域模型命名除外,如:ProductDO的命名是規範的。
B .方法名命名應該使用lowerCamelCase命名法,如方法名:getHttpMessage() 是符合命名規範的。
C .爲了方便理解,方法名或參數名可以使用拼音與英文混合的方式。
D .所有編程相關的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結束。
多選 *37.對於索引(a, b, c),下列哪些說法是正確的:ABC
A .查詢語句 where a between 5 and 10 可以使用該索引。
B .查詢語句 where a = 5 and b between 5 and 10 可以使用該索引。
C .查詢語句 where a in (5, 6, 7, 8, 9) and b = 5 可以使用該索引。
D .查詢語句 where b = 5 and c = 10 可以使用該索引。
多選 38.以下關於命名規約內容說明,正確的是:BCD
A .【強制】包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞,並且使用複數形式,例如:應用工具類包名爲com.alibaba.mpp.utils
B .【強制】類名使用UpperCamelCase,必須遵從駝峯形式,但以下情形例外:(領域模型的相關命名)DO / DTO / VO / DAO等。
C .【強制】抽象類命名使用Abstract或Base開頭;異常類命名使用Exception結尾;測試類命名以它要測試的類的名稱開始,以Test結尾。
D .【強制】枚舉類名建議帶上Enum後綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。
多選 39.關於數據庫中表相關的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD
A .表名、字段名禁止出現數字開頭,禁止兩個下劃線中間只出現數字。
B .表名不使用複數名詞。
C .表必備三字段命名:id, gmt_create, gmt_modify。
D .表必備三字段命名:id, gmt_create, gmt_modified。
單選 40.關於使用explain對數據庫性能進行優化分析,下列哪些說法符合《阿里巴巴Java開發手冊》:A
A .SQL性能優化的目標:至少要達到 range 級別,要求是ref級別,如果可以是consts最好。
B .index級別走的是掃描索引,所以速度會比ref快。
C .range級別是指對錶進行範圍索引。
D .ref級別是指使用主鍵或者唯一索引。
多選 41.關於分頁查詢,下列哪些說法符合《阿里巴巴Java開發手冊》:ABC
A .分頁查詢,當統計的count爲0時,應該直接返回,不要再執行分頁查詢語句。
B .iBATIS自帶的queryForList(String statementName,int start,int size)分頁接口有性能隱患,不允許使用。
C .定義明確的sql查詢語句,通過傳入參數start和size來實現分頁邏輯。
D .可使用存儲過程寫分頁邏輯,提高效率。
多選 42.根據《阿里巴巴Java開發手冊》,以下哪些字段屬於表的必備字段:ABD
A .id
B .gmt_modified
C .parent_id
D .gmt_create 單選
43.單元測試代碼寫在Java工程的哪個地方最爲合適?C
A .寫在業務代碼體裏邊,方便調試。
B .寫在業務代碼同一個包下,方便歸類查找。
C .寫在src/test/java目錄下。
D .寫在src/java目錄下。
多選 44.關於索引效率,下列哪些說法符合《阿里巴巴Java開發手冊》:CD
A .使用索引的效率一定高於全表掃描的效率。
B .關於explain的結果,type=index的索引效率好於type=ref。
C .sql查詢條件 where a like ‘%阿里%’ ,不會走索引。
D .sql查詢條件 where a like ‘阿里%’ ,a列創建了索引,一般會使用索引進行檢索。
多選 45.關於線程池管理線程的好處,下列哪些說法是正確的:AC
A .能夠減少在創建和銷燬線程上所花的時間以及系統資源的開銷。
B .使用線程池一定能避免OOM問題。
C .線程資源必須通過線程池提供,不允許在應用中自行顯式創建線程。
D .線程池能夠根據資源等待情況,自動調整線程優先級並解決死鎖問題。
多選 46.編寫單元測試代碼遵守BCDE原則,以保證被測試模塊的交付質量,那麼下列說法正確的是:ABC
A .Border,邊界值測試,包括循環邊界、特殊取值、特殊時間點、數據順序等。
B .Correct,正確的輸入,並得到預期的結果。
C .Design,與設計文檔相結合,來編寫單元測試。
D .Equal, 單元測試環境必須與線上生產環境一致。
(Error) 多選 47.關於領域模型命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABC
A .數據對象命名:xxxDO,xxx即爲數據表名,例如:ResellerAccountDO。
B .數據傳輸對象:xxxDTO,xxx爲業務領域相關的名稱,例如ProductDTO。
C .展示層對象:xxxVO,xxx一般爲網頁名稱,例如RecommendProductVO。
D .POJO是DO/DTO/BO/VO的統稱,命名成xxxPOJO。
多選 48.以下關於格式規約的說法,正確的有哪些:AD
A .代碼塊縮進4個空格,如果使用tab縮進,請設置成1個tab爲4個空格;
B .代碼塊縮進5個空格,如果使用tab縮進,請設置成1個tab爲5個空格。
C .爲了保持代碼美觀,《手冊》強烈推薦增加若干空格,使某一行的變量與相鄰對應位置的變量對齊。
D .方法體內的執行語句組、變量的定義語句組、不同的業務邏輯之間或者不同的語義之間推薦插入一個空行;相同業務邏輯和語義之間不需要插入空行。
多選 49.根據《阿里巴巴Java開發手冊》,以下功能必須進行水平權限控制校驗的有:ABCD
A .訂單詳情頁面。
B .類目管理後臺。
C .店鋪裝修後臺。
D .訂單付款頁面。
多選 50.關於客戶數據展示,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD
A .客戶的密碼,密鑰及密保問題答案等信息禁止展示。
B .客戶的銀行卡號只顯示後四位。
C .客戶的證件號碼只顯示第一位和最後一位,在必要業務場景下,經多因子強驗證後可完整展示。
D .涉及有完整展示客戶信息的頁面均需要接入防爬系統
2.第二套

多選 1.如何處理單元測試產生的數據,下列哪些說法是正確的?ABC     
 A .測試數據入庫時加特殊前綴標識。 
  B .測試數據使用獨立的測試庫。  
 C .自動回滾單元測試產生的髒數據。  
 D .無須區別,統一在業務代碼中進行判斷和識別。        
多選 2.關於併發處理,下列哪些說法符合《阿里巴巴Java開發手冊》:ABC  
A .線程資源必須通過線程池提供,不允許在應用中自行顯式創建線程。  
B .同步處理時,能鎖部分代碼區塊的情況下不要鎖整個方法;高併發時,同步調用應該考慮到性能損耗。  
C .創建線程或線程池時,推薦給線程指定一個有意義的名稱,方便出錯時回溯。  
D .推薦使用Executors.newFixedThreadPool(int x)生成指定大小的線程池。    
備註:(線程池不允許使用 Executors 去創建,而是通過 ThreadPoolExecutor 的方式)          
多選 3.下列哪些說法符合《阿里巴巴Java開發手冊》:ACD  
A .對於“明確停止使用的代碼和配置”,如方法、變量、類、配置文件、動態配置屬性等要堅決從程序中清理出去,避免造成過多垃圾。  
B .永久棄用的代碼段註釋掉即可,即不用加任何註釋。  
C .對於暫時被註釋掉,後續可能恢復使用的代碼片斷,在註釋代碼上方,統一規定使用三 個斜槓(///)來說明註釋掉代碼的理由。  
D .不要在視圖模板中加入任何複雜的邏輯。        
多選 4.關於分頁查詢,下列哪些說法符合《阿里巴巴Java開發手冊》:ABC  
A .分頁查詢,當統計的count爲0時,應該直接返回,不要再執行分頁查詢語句。  
B .iBATIS自帶的queryForList(String statementName,int start,int size)分頁接口有性能隱患,不允許使用。  
C .定義明確的sql查詢語句,通過傳入參數start和size來實現分頁邏輯。  
D .可使用存儲過程寫分頁邏輯,提高效率。        
多選 5.根據《阿里巴巴Java開發手冊》,以下功能必須進行水平權限控制校驗的有:ABCD 
 A .訂單詳情頁面。  
 B .類目管理後臺。  
 C .店鋪裝修後臺。  
 D .訂單付款頁面。        
 多選 6.關於數據庫中NULL的描述,下列哪些說法符合《阿里巴巴Java開發手冊》:BD  
 A .NULL=NULL的返回結果爲true。  
 B .NULL與任何值的比較結果都爲NULL。  
 C .NULL<>1的返回結果爲true。  
 D .當某一列的值全是NULL時,sum(col)的返回結果爲NULL。       
 多選 7.關於接口使用拋異常還是返回錯誤碼,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
 A .向公司外部提供的http/api接口,推薦使用“錯誤碼”方式返回異常或者錯誤信息。  
 B .對於應用內部的方法調用,推薦使用“拋出異常”的方式處理異常或者錯誤信息。  
 C .跨應用的RPC調用,推薦使用將“錯誤碼”和“錯誤簡短信息”封裝成Result的方式進行返回。  
 D .對外提供的接口,一定要保證邏輯健壯性:儘量避免空指針等技術類異常;對於業務類異常要做好錯誤碼或者異常信息的封裝。        
 單選 8.關於類的序列化,下列說法哪些是正確的:D  
 A .類的序列化與serialVersionUID毫無關係。  
 B .如果完全不兼容升級,不需要修改serialVersionUID值。  
 C .POJO類的serialVersionUID不一致會編譯出錯。  
 D .POJO類的serialVersionUID不一致會拋出序列化運行時異常。        
多選 9.關於Java的接口描述,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD  
A .在接口類中的方法和屬性使用public修飾符。  
B .對於Service類,內部的實現類加Impl的後綴與接口區別。例如:ProductServiceImpl實現ProductService接口。  
C .對於Service類,基於SOA的理念,是以接口方式暴露服務。  
D .儘量不在接口裏定義變量,如果一定要定義變量,肯定是與接口方法相關,而且是整個應用的基礎常量。    備註:  
【推薦】接口類中的方法和屬性不要加任何修飾符號(public 也不要加),保持代碼的簡潔  性,並加上有效的 Javadoc 註釋。儘量不要在接口裏定義變量,如果一定要定義變量,肯定是  與接口方法相關,並且是整個應用的基礎常量。  
正例:接口方法簽名 void commit();  接口基礎常量 String COMPANY = "alibaba";  
反例:接口方法定義 public abstract void f();  說明:JDK8 中接口允許有默認實現,那麼這個 default 方法,是對所有實現類都有價值的默  認實現。  
單選 10.集合在遍歷過程中,有時需要對符合一定條件的元素進行刪除,下列哪些說法是正確的:B  
A .在 foreach 循環裏進行元素的 remove操作。  
B .使用Iterator方式,如果有併發,需要對Iterator對象加鎖。  
C .Iterator進行元素的刪除操作,絕對是線程安全的。  
D .Java無法實現在遍歷時,進行刪除元素操作。      
多選 11.關於基本數據類型與包裝數據類型的使用標準,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD 
 A .所有的POJO類屬性必須使用包裝數據類型。  
B .RPC方法的返回值和參數必須使用包裝數據類型。  
C .因爲JAVA的自動裝箱與拆箱機制,不需要根據場景來區分數據類型。  
D .所有的局部變量推薦使用基本數據類型。        
多選 12.關於索引的設計,下列哪些說法符合《阿里巴巴Java開發手冊》:ACD  
A .對varchar類型的字段建立索引,必須指定索引長度。  
B .對varchar類型的字段建立索引,不需要指定索引長度,這樣索引區分度最好。  
C .業務上具有唯一特性的字段(含組合字段),必須指定唯一索引。  
D .建複合索引時,一般選擇區分度高的字段放在最左列。        
多選 13.關於二方庫版本號的命名方式,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
A .版本號命名格式:主版本號.次版本號.修訂號。  
B .主版本號:產品方向改變,或者大規模API不兼容,或者架構不兼容升級。  
C .次版本號:保持相對兼容性,增加主要功能特性,影響範圍極小的API不兼容修改。  
D .修訂號:保持完全兼容性,修復BUG、新增次要功能特性等。        
多選 14.關於索引的使用,下列哪些說法是正確的:BCD  
A .查詢語句 WHERE a+1 = 5 可以利用a索引。  
B .查詢語句WHERE date_format(gmt_create, '%Y-%m-%d') = '2016-11-11'無法利用gmt_create索引。  
C .當 c 列類型爲 charchar 時,查詢語句 WHERE c = 5 無法利用c索引。  
D .索引字段使用時不能進行函數運算。        
多選 15.關於生產環境的日誌文件,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
A .異常信息應該包括兩類信息:案發現場信息和異常堆棧信息。  
B .日誌文件推薦至少保存15天,因爲有些異常具備以“周”爲頻次發生的特點。  
C .避免重複打印日誌,浪費磁盤空間,務必在log4j.xml中設置additivity=false。  
D .錯誤日誌和業務日誌儘量分開存放。        
多選 16.關於代碼註釋,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD  
A .特殊註明標記人與標記時間。  
B .待辦事宜(TODO):( [標記人,標記時間,[預計處理時間])  
C .在註釋中用FIXME標記某代碼雖然實現了功能,但是實現的方法有待商榷,希望將來能改進  
D .在註釋中用FIXME標記某代碼是錯誤的,而且不能工作,需要及時糾正的情況        
多選 17.關於MySQL性能優化的描述,下列哪些說法是正確的:ABCD  
A .主鍵查詢優先於二級索引查詢。  
B .表連接有一定的代價,故表連接數量越少越好。  
C .一般情況下,二級索引掃描優先於全表掃描。  
D .可以使用通過索引避免排序代價。      
多選 18.關於索引的設計和使用,下列哪些說法是正確的:    ABCD  
A .若查詢條件中不包含索引的最左列,則無法使用索引。  
B .對於範圍查詢,只能利用索引的最左列。  
C .對於order by A或group by A語句,在A上建立索引,可以避免排序。  
D .對於多列排序,需要所有所有列排序方向一致,才能利用索引。    
備註:    設計高效索引:    查詢,更新,刪除where條件中必須有索引,處理行數不能超過1w    若查詢條件中不包含索引的最左列, 無法使用索引    對於範圍查詢, 只能利用索引的最左列    對於group by/order by A語句,在A上建立索引, 可以避免排序    對於多列排序, 需要所有所有列排序方向一致, 才能利用索引。    
多選 19.關於類命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
A .抽象類命名使用Abstract或Base開頭。  
B .異常類命名使用Exception結尾。  
C .測試類命名以它要測試的類的名稱開始,以Test結尾。  
D .如果使用到了設計模式,建議在類名中體現出具體模式。例如代理模式的類命名:LoginProxy;觀察者模式命名:ResourceObserver。       
 多選 20.關於數據庫模糊檢索的描述,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD  
 A .絕對禁止左模糊。  
 B .絕對禁止全模糊。  
 C .絕對禁止右模糊。  
 D .全模糊或左模糊查詢需求,優先使用搜索引擎。
  多選 21.關於代碼註釋,下列哪些說法符合《阿里巴巴Java開發手冊》:ACD  
  A .所有的抽象方法(包括接口中的方法)必須要用javadoc註釋。  
  B .所有的方法,包括私有方法,最好都增加註釋,有總比沒有強。  
  C .過多過濫的註釋,代碼的邏輯一旦修改,修改註釋是相當大的負擔。  
  D .我的命名和代碼結構非常好,可以減少註釋的內容。    
  多選 22.關於checked/unchecked exception,下列哪些說法是正確的:BCD  
  A .繼承java.lang.Error的類屬於checked exception。 
   B .checked異常繼承java.lang.Exception類。  
  C .unchecked異常繼承java.lang.RuntimeException類。  
  D .NullPointerException , IllegalArgumentException屬於unchecked exception。        
  單選 23.關於Map類型集合的遍歷方式,下列哪些說法是正確的:D  
  A .Map類型的實現類都同時實現了Iterator接口。  
  B .使用foreach進行遍歷。  
  C .推薦使用keySet進行遍歷。  
  D .推薦使用entrySet進行遍歷。        
  多選 24.關於變量、方法名、包的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
  A .POJO類中的任何布爾類型的變量,都不要加is,因爲部分框架解析時有可能會出現序列化錯誤。  
  B .包名統一使用單數形式,如:com.alibaba.mpp.util。  
  C .中括號是數組類型的一部分,數組定義如下:String[] args; 不要誤寫爲String args[];  
  D .Service/DAO層方法命名可以參考規約,例如:刪除的方法推薦使用remove或delete做前綴。        
  多選 25.關於常量定義,下列哪些說法符合《阿里巴巴Java開發手冊》:AC  
  A .不允許出現任何魔法值(即未經預先定義的常量)直接出現在代碼中。  
  B .魔法值是指程序中隨意定義並賦值的變量值,如果代碼編寫者明白變量值意義是可以任意使用的,例如在代碼中寫if(status == 3) return error;符合規範。  
  C .如果變量值僅在一個範圍內變化推薦用Enum類。  
  D .在程序中,一律禁止使用枚舉類型。        
  多選 26.關於maven依賴、仲裁、規則,下列哪些說法是正確的:ACD  
  A .<dependencies>的依賴會默認傳遞給子項目。 
   B .<dependencies>的依賴絕對不會傳遞給子項目。  
   C .在<dependencyManagement>中指定版本號。  
   D .避免在不同的子項目,聲明同一個二方庫的不同版本號。        
   單選 27.關於二方庫升級,下列哪些說法是正確的:B 
    A .升級二方庫只是改個版本號,不需要關聯功能的迴歸。  
    B .升級二方庫需要比對仲裁結果的差異,謹慎評估。  
    C .升級二方庫,絕對不會影響到其它二方庫的版本號。  
    D .只要此二方庫負責人保證說不會有任何影響,即可大膽升級,直接發佈上線。     
     備註:【強制】二方庫的新增或升級,保持除功能點之外的其它 jar 包仲裁結果不變。如果有改變,必須明確評估和驗證,建議進行 dependency:resolve 前後信息比對,如果仲裁結果完全不一致,那麼通過 dependency:tree 命令,找出差異點,進行<excludes>排除 jar 包。      
多選 28.關於表字段和索引,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD  
A .表字段註釋,如果修改字段含義或對字段表示的狀態追加時,需要及時更新。  
B .合適的字符存儲長度,不但節約數據庫表空間、節約索引存儲,更重要的是提升檢索速度。  
C .針對表的每個字段都增加索引,加快查詢速度。  
D .字段的區分度越高,索引的查找速度越快。        
單選 29.關於測試代碼的覆蓋率,下列哪些說法是正確的?B  
A .路徑覆蓋是最強覆蓋,符合路徑覆蓋且測試全部通過,程序絕對沒有問題。  
B .語句覆蓋度是最弱的覆蓋度量方式。  
C .分支覆蓋與條件覆蓋其實是一回事。  
D .判定條件覆蓋與路徑覆蓋其實是一回事。        
多選 30.Hashtable,HashMap, ConcurrentHashMap都是Map的實現類,它們在處理null值的存儲上有細微的區別,下列哪些說法是正確的:ABD 
 A .Hashtable的KV都不可以爲null。  
 B .HashMap的KV都可以爲null。  
 C .HashMap的K不可以爲null,V可以爲null。  
 D .ConcurrentHashMap的KV都不可以爲null。   
備註:HashMap kv都可以爲null,        TreeMap的v可以爲null                                
 多選 31.關於數據庫命名規則,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD  
 A .數據庫庫名和表名沒有規定,可任意取名,只要方便記憶即可。  
 B .庫名應該儘量與應用名稱保持一致,表的命名最好是業務名稱_表名的方式。  
 C .無論是庫名還是表名都禁用保留字,如desc、match、range等。  
 D .表名、字段名必須使用小寫字母或數字。        
 多選 32.關於異常的處理方式,下列哪些說法是正確的:BD  
 A .爲防止obj對象本身空指針異常,書寫代碼時應該注意加異常捕獲處理,例如:try { obj.method() } catch(NullPointerException e){……} 。  
 B .方法簽名中,拋給調用者的關鍵字爲throws  
 C .方法內部,拋出異常實例對象爲throws 
  D .自定義異常要做到“認知對等”,即:拋出者和接收者要保持對自定義異常的認知統一,接收方需要知道這種異常的含義和對應的處理方案。    
   備註:【強制】Java 類庫中定義的可以通過預檢查方式規避的 RuntimeException 異常不應該通過catch 的方式來處理,比如:NullPointerException,IndexOutOfBoundsException 等等。說明:無法通過預檢查的異常除外,比如,在解析字符串形式的數字時,不得不通過 catchNumberFormatException 來實現。    
多選 33.數組使用Arrays.asList轉化爲集合,下列說法哪些正確的:ACD 
 A .數組元素的修改,會影響到轉化過來的集合。  
 B .數組元素的修改,不會影響到轉化過來的集合。  
 C .對於轉換過來的集合,它的 add/remove/clear 方法會拋出: UnsupportedOperationException。  
 D .Arrays.asList 體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。        
 多選 34.關於文件編碼和格式的設定,下列哪些說法符合《阿里巴巴Java開發手冊》:BC 
  A .IDE的text file encoding設置爲GBK格式。  
  B .IDE的text file encoding設置爲UTF-8格式。  
  C .IDE中文件的換行符使用unix格式。  
  D .IDE中文件的換行符使用windows格式。        
  多選 35.關於數據庫是與否概念的列的命名方式,下列哪些說法符合《阿里巴巴Java開發手冊》:BD  
  A .對於是與否概念的列名,必須使用can_abc 來表示。  
  B .對於是與否概念的列名,必須使用is_abc 來表示。  
  C .數據類型是varchar(1)( Y表示是,N表示否)。  
  D .數據類型是unsigned tiny int.( 1表示是,0表示否)。        
  多選 36.以下關於格式規約的說法,正確的有哪些:AD  
  A .代碼塊縮進4個空格,如果使用tab縮進,請設置成1個tab爲4個空格;  
  B .代碼塊縮進5個空格,如果使用tab縮進,請設置成1個tab爲5個空格。  
  C .爲了保持代碼美觀,《手冊》強烈推薦增加若干空格,使某一行的變量與相鄰對應位置的變量對齊。  
  D .方法體內的執行語句組、變量的定義語句組、不同的業務邏輯之間或者不同的語義之間推薦插入一個空行;相同業務邏輯和語義之間不需要插入空行。        
  多選 37.通過集合A.subList()獲取子集合B,下列說法哪些是正確的:ABD  
  A .返回的集合B沒有實現Serializable接口,不能被序列化,所以不能應用於RPC場景。 
   B .在B集合中添加某個元素,那麼A集合也會添加進去此元素。  
   C .集合A中元素的修改不會影響到集合B的任何操作。  
  D .對A元素個數的修改,會導致集合B的遍歷產生ConcurrentModificationException 異常。        
多選 38.關於捕獲異常和拋異常,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD  
A .如果需要捕獲不同類型異常,爲了方便處理,可以使用catch(Exception e){...}。  
B .不要捕獲異常後不處理,丟棄異常信息。  
C .捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類。  
D .異常定義時區分unchecked / checked 異常,避免直接使用RuntimeException拋出。        
多選 39.關於線程安全,下列哪些說法是正確的:ACD  
A .SimpleDateFormat 是線程不安全的類。  
B .SimpleDateFormat 是線程安全的類。  
C .一般不要定義SimpleDateFormat的static變量,如果定義爲static,必須保證線程安全。  
D .推薦使用Apache封裝好的DateUtils和DateFormatUtils工具類,來處理時間日期轉換問題。        
多選 40.爲了更方便地進行單元測試,被測試的業務代碼應避免以下哪些情況?ABCD  
A .構造方法中做的事情過多。  
B .存在過多的全局變量和靜態方法。  
C .存在過多的外部依賴。  
D .存在過多的條件語句。      
多選 41.關於控制語句,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD  
A .推薦 if-else的方式可以改寫成衛語句的形式。  
B .儘量減少try-catch 塊內的邏輯,定義對象、變量、獲取數據庫連接等操作可以移到try-catch塊外處理  
C .if ( condition) statements; 單行語句不需要使用大括號。  
D .在一個switch塊內,都必須包含一個default語句並且放在最後,即使它什麼代碼也沒有。        
多選 42.關於參數有效性驗證,下列哪些說法符合《阿里巴巴Java開發手冊》:ABCD  
A .防止page size過大導致內存溢出。  
B .防止正則輸入源串拒絕服務ReDOS。  
C .防止任意重定向。  
D .預防 SQL 注入。        
多選 43.關於變量和常量定義,下列哪些符合《阿里巴巴Java開發手冊》:AD  
A .Long a=2L;//大寫的L  
B .Long a=2l; //小寫的l  
C .常量只定義一次,不再賦值,所以不需要命名規範。  
D .不要使用一個常量類維護所有常量,應該按常量功能進行歸類,分開維護。        
單選 44.在定義DO/DTO/VO/等POJO類時,對屬性默認值的設定,下列哪些說法符合《阿里巴巴Java開發手冊》:D  
A .String類型的默認值設定爲空字符串。  
B .Date類型的默認值設定爲new Date()。  
C .集合類型的默認值設定爲Collections.EMPTY_LIST。  
D .不要設定任何屬性默認值。    備註: 【強制】定義 DO/DTO/VO 等 POJO 類時,不要設定任何屬性默認值。反例:POJO 類的 gmtCreate 默認值爲 new Date(),但是這個屬性在數據提取時並沒有置入具體值,在更新其它字段時又附帶更新了此字段,導致創建時間被修改成當前時間。      多
選 45.關於二方庫依賴的解析命令,下列哪些說法是正確的:ABC  
A .mvn dependency:resolve 打印出已仲裁依賴的列表。  
B .mvn dependency:tree 打印工程整個的依賴樹結構。  
C .mvn dependency:tree -Dverbose -Dincludes=commons-lang 打印出與commons-lang相關的詳細依賴。  
D .mvn clean install 打印工程整個的依賴樹結構,並部署到本地倉庫中。        
單選 46.KV結構的集合,在處理null值的存儲上有細微的區別,下列哪些說法是正確的:A  
A .TreeMap的key不可以爲null 
 B .TreeMap的key可以爲null  
C .ConcurrentHashMap的key可以爲null  
D .ConcurrentHashMap的value可以爲null       
多選 47.關於數據庫中表相關的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ABD  
A .表名、字段名禁止出現數字開頭,禁止兩個下劃線中間只出現數字。  
B .表名不使用複數名詞。  
C .表必備三字段命名:id, gmt_create, gmt_modify。  
D .表必備三字段命名:id, gmt_create, gmt_modified。        
多選 48.關於多線程並行處理定時任務的情況,下列哪些說法符合《阿里巴巴Java開發手冊》:BCD  
A .推薦使用Timer方式處理。  
B .推薦使用ScheduledExecutorService方式處理。  
C .Timer運行多個TimeTask時,只要其中之一沒有捕獲拋出的異常,其它任務便會自動終止運行。  
D .ScheduledExecutorService併發運行多個定時任務時,其中某線程拋出異常,不會影響到其它線程的繼續運行。        
多選 49.關於Java代碼的設計和開發注意事項,下列哪些說法符合《集合開發規約》:ABCD  
A .禁止將URL、文件名、系統參數、數據庫連接地址、業務規則的可變參數,硬編碼在工程中。  
B .long或者Long初始賦值時,必須是大寫的L,不能小寫。  
C .當一個類有多個構造方法,或是多個同名方法,這些方法應該按順序放置在一起,便於閱讀。  
D .相同參數類型,同等業務含義,纔可以使用Java的可變參數,參數的類型儘量避免使用Object。        
多選 50.關於數據庫索引的命名,下列哪些說法符合《阿里巴巴Java開發手冊》:ACD  
A .主鍵索引(primary key),字段類型爲unsigned bigint、單表時推薦自增、步長爲1。  
B .主鍵索引(primary key),字段類型爲unsigned bigint、單表時推薦自增、步長爲2。  
C .唯一索引(unique key),命名規則爲uk_字段名(如果多個字段繼續下劃線)。  
D .普通索引(normal index),標記成idx_字段名(如果多個繼續下劃線)。   

————————————————
版權聲明:本文爲CSDN博主「池魚之殃」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_44867340/java/article/details/106084155

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章