阿里云挑战赛
文章目錄
- 第一題
- 題目:
- 題解:
- 第二題
- 題目
- 題解
- 第三題
- 題目
- 題解
- 第四題
- 題目:
- 題解
- 第五題
- 題目
- 題解
- 第六題
- 題目
- 題解
- 第七題
- 題目:
- 題解
- 第八題
- 題目:
- 題解;
- 題解賽后出
第一題
題目:
【單選】filter 方法意圖過濾傳入的訂單列表中不屬于當前系統時間所在日期的訂單,以下哪一行代碼存在錯誤?
A.第 7 行
B.第 8 行
C.第 10 行
D.第 13 行
題解:
答案:A
獲取當前時間
【強制】日期格式化時,傳入pattern中年份統一使用小寫的y。
日期格式化時,yyyy表示當天所在的年,而大寫的YYYY代表的是week in which year(JDK7之后引入的概念),意思是當天所在的周屬于的年份,一周從周日開始,周六結束,只要本周跨年,返回的YYYY就是下一年。
第二題
題目
【單選】以下哪種字符串拼接方式,是效率最高、并符合阿里巴巴Java開發手冊(Alibaba Java Coding Guidelines)規范的?
A.
public static String concat(List<String> strings) {if (strings == null || strings.isEmpty()) {return "";}StringBuilder builder = new StringBuilder();for (String string : strings) {builder.append(string);}return builder.toString(); }B.
public static String concat(List<String> strings) {if (strings == null || strings.isEmpty()) {return "";}StringBuffer buffer = new StringBuffer();for (String string : strings) {buffer.append(string);}return buffer.toString(); }C.
public static String concat(List<String> strings) {if (strings == null || strings.isEmpty()) {return "";}String result = strings.get(0);for (int i = 1; i < strings.length(); i++) {result = result + strings.get(i);}return result; }D.
public static String concat(List<String> strings) {if (strings == null || strings.isEmpty()) {return "";}return strings.stream().reduce((x, y) -> x + y).get(); }題解
選C
【強制】在日志輸出時,字符串變量之間的拼接使用占位符的方式。 說明:因為String字符串的拼接會使用StringBuilder的append()方式,有一定的性能損耗。使用占位符僅是替換動作,可以有效提升性能。 正例:logger.debug(“Processing trade with id: {} and symbol: {}”, id, symbol);
第三題
題目
【單選】以下哪段代碼,調用 getHelper 的過程,不是線程安全的
A.
public class LazyInitDemo {private static Helper HELPER = null;public static synchronized Helper getHelper() {if (HELPER == null) {HELPER = new Helper();}return HELPER;} }B.
public class LazyInitDemo {private Helper helper = null;public Helper getHelper() {if (helper == null) {synchronized (this) {if (helper == null) {helper = new Helper();}}}return helper;} }C.
public class LazyInitDemo { private static class HelperHolder { private static final Helper HELPER = new Helper(); } public static final Helper getHelper() { return HelperHolder.HELPER; } }D.
public class PreInitDemo{private static final Helper HELPER = new Helper();public static Helper getHelper(){return HELPER;} }題解
選B
【推薦】通過雙重檢查鎖(double-checked locking)(在并發場景下)實現延遲初始化的優化問題隱患(可參考 The “Double-Checked Locking is Broken” Declaration),推薦解決方案中較為簡單一種(適用于JDK5及以上版本),將目標屬性聲明為 volatile型(比如修改helper的屬性聲明為private volatile Helper helper = null;)。
反例:
第四題
題目:
【單選】 以下哪個選項的 getTypeString 函數,沒有 bug?
A.
public class Type {public enum TypeEnum {ZERO,ONE}private TypeEnum type;public TypeEnum getType() {return type;}public void setType(TypeEnum type) {this.type = type;}public String getTypeString() {switch (type) {case ZERO:return "ZERO";case ONE:return "ONE";default:return "OTHER";}} }B.
public class Type {private String type;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getTypeString() {switch (type) {case "0":return "ZERO";case "1":return "ONE";default:return "OTHER";}} }C.
public class Type {private int type;public int getType() {return type;}public void setType(int type) {this.type = type;}public String getTypeString() {switch (type) {case 0:return "ZERO";case 1:return "ONE";default:return "OTHER";}} }D.
public class Type {private Integer type;public Integer getType() {return type;}public void setType(Integer type) {this.type = type;}public String getTypeString() {switch (type) {case 0:return "ZERO";case 1:return "ONE";default:return "OTHER";}} }題解
選C
【強制】在一個switch塊內,每個case要么通過continue/break/return等來終止,要么注釋說明程序將繼續執行到哪一個case為止;在一個switch塊內,都必須包含一個default語句并且放在最后,即使它什么代碼也沒有。 說明:注意break是退出switch語句塊,而return是退出方法體。
【強制】當switch括號內的變量類型為String并且此變量為外部參數時,必須先進行null判斷。 反例:如下的代碼輸出是什么?
【強制】在if/else/for/while/do語句中必須使用大括號。
說明:即使只有一行代碼,禁止不采用大括號的編碼方式:if (condition) statements;
2. switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支持字符串 String 類型了,同時 case 標簽必須為字符串常量或字面量。
第五題
題目
【單選】執行:ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888,執行完之后,任何一臺機器ssh root@IP -p 8888,輸入任意密碼,成功登錄。 問:該后門為什么能夠任意密碼登陸?
A. sshd 不指定配置文件啟動時,所有賬號均可任意密碼登陸
B. sshd 因為被鏈接到/tmp目錄,由于文件權限原因,可任意密碼登陸
C. sshd 因為被鏈接為/tmp/su,由于pam模塊認證原因,可任意密碼登陸
D. sshd 因為被鏈接到/tmp目錄,由于位置發生變化導致無法找到/etc/shadow文件因此放行登陸請求
題解
D
第六題
題目
【單選】\\.\globalroot\device\condrv\kernelconnect 在 Windows 中谷歌 Chrome 瀏覽器輸入以上地址并回車可能會發生什么非預期的效果?
A. 瀏覽器崩潰
B. 成為阿里云錦鯉
C. 藍屏
D. 黑屏
題解
選A
第七題
題目:
【不定項】以下哪種是 SQL 注入攻擊?
A. content=1 union select 1
B. name=updatexml(1,user(),1)
C. id=i and 1 like 1
D. id=<script src="//bxssme.cn">
題解
AB
【強制】用戶輸入的SQL參數嚴格使用參數綁定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL訪問數據庫。
反例:某系統簽名大量被惡意修改,即是因為對于危險字符 # --沒有進行轉義,導致數據庫更新時,where后邊的信息被注釋掉,對全庫進行更新。
【強制】sql.xml配置參數使用:#{},#param# 不要使用${} 此種方式容易出現SQL注入。
第八題
題目:
【不定項】以下哪種是 XSS 攻擊?
A. id=confirm(1)
B. id=<img src=1 onerror=1>
C. id=<script>edoejx()</script>
D. content=1 and abs(2)
題解;
ABC
題解賽后出
我的答案:
A
C
B
C
D
A
AB
ABC
然后50分,卡死在第一關,哭死
總結
- 上一篇: 梨子汁的功效与作用、禁忌和食用方法
- 下一篇: 小青柠檬的功效与作用、禁忌和食用方法