63. APP端特有的測試
參考:APP專項測試、APP應用測試
crash和anr的區別
1)網絡測試
2)中斷測試
3)安裝、卸載測試
4)兼容測試
5)性能測試(耗電量、流量、內存、服務器端)
6)安全性測試(密碼、sql注入、權限)
7)UI測試(橫豎屏、手勢、鍵盤等的自適應)
8)升級測試(考慮內存)
9)穩定性測試(使用monkey)
10)接口測試
11)其他測試(如上傳文件、圖片、視頻)
64. 服務異常情況驗證
參考:異常測試
淺談異常測試
65. 用什么做性能測試
66. Jmeter如何設計測試場景
67. 壓測怎么做
69. UI自動化元素定位方法
參考:UI自動化元素定位
70. gpu和cpu有什么區別
71. gpu性能受哪些因素的影響
72. 共享內存,線程安全嗎?怎么解決?
73. 什么情況下會發生死鎖?怎么解決?
74. 進程上下文切換需要做哪些事情?上下文保存在哪里?
75. 單例模式怎么實現的?怎么判斷一個實例是不是已經創建了呢?線程安全嗎?加鎖會有什么問題?怎么優化?
76. 視頻靜態解碼和動態解碼?
77. 逆層序遍歷
78. 用戶上傳照片如何測試
79. 線上bug如何解決?完成處理流程?
80. 前端頁面無法展示,如何找bug?
81. 服務端接口有問題怎么定位bug
82. 字符串數組最長公共子串
83. 如果UI經常變更,UI自動化怎么解決
參考:UI自動化測試01、UI自動化02
① 對比較穩定的功能和模塊設置自動化用例
84. 提一個bug需要寫明什么
參考:提BUG的內容
測試環境、測試設備/型號、軟件版本、bug錯誤類型、bug所屬模塊、重現概率、優先級、嚴重級別、復現步驟、預期結果、實際結果、日志、bug狀態以及標題、bug解決人
85. 怎么保持redis數據的時效性
86. 接口實現與基類繼承的差異
87. coding過程中什么才是符合標準的好代碼
88. Java基本數據類型有哪些?自動裝箱、拆箱?
89. 異常的分類?如何處理異常?
參考:異常的的分類以及處理
90. Mysql的索引如何實現?B+樹的結構?是邏輯結構還是線性結構?分別介紹邏輯結構、線性結構的數據結構有哪些?
91. sql:一頁數據20條記錄,顯示第五頁的記錄?
已知每頁顯示m條數據,求第n頁顯示的數據
提示: 關鍵是求每頁的開始行索引
① 查詢學生表,獲取第n頁數據的SQL語句:
select * from students limit (n-1)*m, m
② 一頁數據20條記錄,顯示第五頁的記錄
select 8 from table limit (5-1)*20, 20;
92. 購物車下單功能需要進行哪些測試
93. 了解哪些排序算法?哪些排序算法效率高一些?時間復雜度如何?
94. 兩個無序二叉樹合并為有序二叉樹
95. 貪心算法和動態規劃的區別?
96. 分治思想和動態規劃的區別
97. 線程資源以來死鎖問題,如何避免?
98. IO多路復用
99. InnoDB的索引類型
100. MySQL的鎖機制,悲觀鎖和樂觀鎖的區別
參考:MySQL樂觀鎖和悲觀鎖、MySQL從樂觀到悲觀
1)共享鎖S和排他鎖X
2)樂觀鎖一般是使用版本號來實現的,一般使用select … for update來實現悲觀鎖
101. sql:查詢第50到100條數據
① 查詢前100條數據
select * from A limit 0,100;
② 查詢50-100條數據
select * from A limit 49,51;
select * from A limit s, n;
// s 表示起始位置,是不包含狀態,也讓就是說從s+1開始輸出
// n 表示多少條數據
102. 依賴注入的方式
103. IOC和AOP的概念,IOC的實現機制
104. SpringBoot配置文件的加載順序?yam和properties?
105. 講一下collection和map
106. List和Set有什么區別?Set里面可以有null值嗎?List是不是可以有多個null值
參考 :List和Set的區別、List和Set集合
① 都繼承自Collection接口
② null值
③ 重復值
④ 有序性
107. hashMap和hashTable有什么區別?Hash Map的底層原理?如何解決Hash沖突?
參考:HashMap和HashTable的區別
哈希沖突
1)區別:
① 讀寫的線程安全
② null值的存儲:map中key和value均可以是null,但是table中不允許存儲null
2)哈希沖突避免:
哈希函數設計、負載因子調節
3)哈希沖突解決:
閉散列(線性探測,保存到下一個位置)、開散列(鏈表存儲)
108. 一張表用a,b,c三個字段作為聯合索引,一條sql語句命中了a和b是否會走索引?
參考:組合索引
組合索引 有“最左前綴”原則,遇到范圍查詢(>、<、between、like)就會停止匹配。
109. 基于TCP的協議
110. TLS握手過程
111. session和cookie
112. 頁面置換算法LRU?還有其他的頁面置換算法嗎?
113. 介紹線程池以及對線程池的認識?
114. 哈希表與紅黑樹的認識?
115. 抽象類的使用場景
116. MySql的事務
117. 分布式鎖
118. StringBuffer、StringBuilder為什么是可變的?
StringBuilder、StringBuffer可變長
1)String:底層是char數組,數組是不可變長的;再者,數組是使用final修飾的,該引用不可以再指向其他對象
2)StringBuffer和StringBuilder:內部實際上是一個char[ ]數組,這個char[ ]數組沒有被final修飾,StringBuffer和StringBulider的初始化容量應該為16,當存滿之后會進行擴容,底層調用了數組拷貝的方法:System.arraycopy()…擴容的,所以StringBuffer/StringBuilder適用于字符串的頻繁拼接操作,并且StringBuffer是線程安全的,StringBuilder是非線程安全的。(擴容機制:原數組大小*2+2)
119. 為什么TCP比UDP長一點?
① TCP 有可變長的「選項」字段,而 UDP 頭部長度則是不會變化的。
② TCP是可靠傳輸的,其有三次握手和四次揮手,所需要使用的序列號以及確認號需要進行存儲;另外,還有滑動窗口來進行流量控制等以保證數據的安全性
③ UDP的頭部長度是不會改變的
120. Java怎么實現單例繼承?手寫線程安全的單例繼承
六種單例模式
高并發下線程安全的單例模式
1)定義:確保一個類只有一個實例,并提供該實例的全局訪問點
2)設計要素:一個私有構造函數 (確保只能單例類自己創建實例)、一個私有靜態變量 (確保只有一個實例)、一個公有靜態函數 (給使用者提供調用方法)
3)類型:
① 懶漢:先不創建實例,當第一次被調用時,再創建實例,所以被稱為懶漢式。
// 線程安全的懶漢模式
public class Singleton {private static Singleton uniqueInstance;private static singleton() {}public static synchronized Singleton getUinqueInstance() {if (uniqueInstance == null) {uniqueInstance = new Singleton();}return uniqueInstance;}}
② 餓漢: 先不管需不需要使用這個實例,直接先實例化好實例 (餓死鬼一樣,所以稱為餓漢式),然后當需要使用的時候,直接調方法就可以使用了。
public class Singleton {private static Singleton uniqueInstance = new Singleton();private Singleton() {}public static Singleton getUniqueInstance() {return uniqueInstance;}}
③ 靜態內部類
public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getUniqueInstance() {return SingletonHolder.INSTANCE;}}
④雙檢查機制
public class MySingleton {//使用volatile關鍵字保其可見性volatile private static MySingleton instance = null;private MySingleton(){}public static MySingleton getInstance() {try { if(instance != null){//懶漢式 }else{//創建實例之前可能會有一些準備性的耗時工作 Thread.sleep(300);synchronized (MySingleton.class) {if(instance == null){//二次檢查instance = new MySingleton();}}} } catch (InterruptedException e) { e.printStackTrace();}return instance;}
}
4)使用場景
① 頻繁實例化然后又銷毀的對象,使用單例模式可以提高性能。
② 經常使用的對象,但實例化時耗費時間或者資源多,如數據庫連接池,使用單例模式,可以提高性能,降低資源損壞。
③ 使用線程池之類的控制資源時,使用單例模式,可以方便資源之間的通信。
121. SpringBoot的關鍵注解? @SpringBootApplication是一個組合注解,是由哪些構成的?
參考:SpringBootAppication注解、SpringBootApplication注解02
SpringBoot注解
1)注解類型:
① 核心注解:@SpringBootApplication:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
② 常用注解:@Component、@Bean、@Import、@Autowired、@Configuration、@VAlue(注入 application.properties 或 application.yml 配置的屬性的值)
2)@SpringBootApplication注解:
/*** @SpringBootApplication組合注解包含以下注解:* * @Target(ElementType.TYPE) :用于描述注解的使用范圍* @Retention(RetentionPolicy.RUNTIME) :保留,指定保留時間,三個枚舉,分別為source,class,runtime* @Documented:可被javadoc等工具記錄,注解類型信息會保存到生成的文檔中* @Inherited:個人認為是一個成員變量,父類被子類覆蓋之后無法繼承,子類中可以繼承父類中未被覆蓋的父類注解的值* @SpringBootConfiguration:包含@Target(ElementType.TYPE)* @Retention(RetentionPolicy.RUNTIME) :同上述* @Documented:同上述* @Configuration:用于配置,包含以下注解* @Target(ElementType.TYPE) :同上述* @Retention(RetentionPolicy.RUNTIME) :同上述* @Documented :同上述* @Component:spring內置組件注解,用途是讓spring容器掃描* @EnableAutoConfiguration:開啟自動配置,包含以下注解* @Target(ElementType.TYPE):同上述* @Retention(RetentionPolicy.RUNTIME):同上述* @Documented:同上述* @Inherited:同上述* @AutoConfigurationPackage:自動配置包含注解的類* @Import(AutoConfigurationImportSelector.class)* @ComponentScan:開啟包掃描,默認掃描同級及當前包下內容,包含以下注解* @Retention(RetentionPolicy.RUNTIME)* @Target(ElementType.TYPE):同上述* @Documented:同上述* @Repeatable(ComponentScans.class):允許在同一申明類型(類,屬性,或方法)的多次使用同一個注解*/
@SpringBootApplication
122. 編程:給你兩個線程,交替修改同一個變量10次?
參考:多線程交替打印
思路:其實這類問題本質上都是線程通信問題,思路基本上都是一個線程執行完畢,阻塞該線程,喚醒其他線程,按順序執行下一個線程。
1)synchronized + wait/notifyAll
2)join()
3)Lock