2019.6.12 vivo提前批後臺(安卓方向)
面向對象的三大特徵
hashmap的底層實現
https和http的區別
網頁請求流程
插入排序
小白菜價20W
2019.7.6 中興提前批
JVM內存回收算法
寫單例
接口和抽象類的區別
設計模式
2019.7.9 字節跳動提前批
一面:
編程題:生產者消費者模式,n個排序數組求前k個數
項目中用到多線程的地方,商品詳情頁面
熔斷的概念
秒殺的業務邏輯
事務的ACID
組合索引,最左匹配原則
TCP三次握手和四次揮手
二面:
編程題:寫單例,鏈表反轉(兩個節點爲一個單位進行反轉)
破壞單例模式
數據庫索引,聚簇索引和輔助索引的區別,主鍵索引和聚簇索引的區別
索引底層爲什麼使用B+樹而不使用其它類型的排序樹,比如說B樹
主鍵自增的優缺點
數據庫中的數據在文件中是怎麼存儲的
get和post的區別,什麼是冪等?什麼是安全?
http報文結構
http和tcp的區別
https中用到的加密算法,爲什麼兩種結合使用,具體過程講一下
三面:
編程題:36進制加法
項目介紹
Redis底層原理,數據類型
url地址解析過程
TCP擁塞控制、慢開始、快重傳、滑動窗口
設計一個內存池,類比線程池和數據庫連接池
垃圾回收算法、垃圾收集器
進程通信的方式
自己的優勢和劣勢
抗壓能力
2019.7.15 字節跳動四面
算法題:給定一個只包含0~9的數組,然後再給定一個K值,對數組裏面的數字進行組合,輸出所有比K大的組合數中最小的一個。
nums = [4,1,4,2,7,8] K=448
輸出:712
操作系統的基本功能
cookie和session的區別
跨域問題,如何解決
多個線程能否監聽同一個TCP端口
2019.8.12 順豐科技第二輪技術面
1、URL解析過程
2、POST和GET請求的區別
2、多態的作用,怎麼實現
3、static關鍵字的作用
4、synchronized的原理
5、Java中的異常分類
6、進程和線程的區別
7、數組區間合併
2019.8.16 美團一面
1、服務端渲染和客戶端渲染的區別,爲什麼要使用服務端渲染,JSP瞭解嗎,工作機制是什麼?
2、Java內存區域
3、方法區的作用
4、堆內存的劃分,年輕代和老年代,分別使用的垃圾回收算法
5、JVM默認的垃圾回收算法
6、HTTP和HTTPS的區別,HTTPS使用的加密算法
7、通信雙方如何認證?如何避免證書被僞造?
8、Spring AOP
9、jdk動態代理和CGLIB動態代理的區別,其生效時期是什麼時候?
10、ES索引原理,Mysql索引原理,ES區間查詢怎麼實現?(跳錶)
11、一條長度爲l的線段,隨機在其上選2個點,將線段分爲3段,問這3個子段能組成一個三角形的概率是多少?
12、代碼題:給定已經按升序排列、由不同整數組成的數組 A,返回滿足 A[i] == i 的最小索引 i。如果不存在這樣的 i,返回 -1。
例子:輸入【-1,0,2,3,4】返回“2”
2019.8.17 騰訊測開一面
1、String、StringBuffer、StringBuilder的區別
2、數據庫事務的特點
3、數據庫中的鎖
4、TCP三次握手
5、前端了解嗎?Vue、JQuery、React的區別
6、冒泡排序
2019.8.18 猿輔導一面
項目介紹
SpringBoot 自動配置原理
SpringCloud中Eureka服務註冊中心和Zuul網關的原理
數據庫的隔離級別,如何實現可重複讀
數據庫的索引有哪些,介紹B+樹索引
Redis的線程模型,常用的數據結構
RabbitMQ的消息模型
編程題:leetcode695 島嶼的最大面積
編程題:一個棧中存放無序數字,使用額外空間棧對其進行排序
2019.8.20 美團二面
項目介紹
反向代理是什麼
synchronized底層原理,普通同步方法和靜態同步方法的區別
mysql的索引原理
數據庫中的樂觀鎖和悲觀鎖
數據庫中視圖的概念,視圖可以加快查詢嗎?
數據庫的事務特性,mysql的隔離級別
HashMap是線程安全的嗎?ConcurrentHashMap的底層實現原理,CAS是什麼?
Redis的持久化機制?AOF文件和RDB文件哪個大?
線程池原理,核心參數介紹,拒絕策略
==和equals的區別,hashcode的作用,與equals有什麼關係
SpringBoot的原理
Mybatis的動態SQL
編程題:合併兩個有序鏈表
給定a、b兩個文件,各存放50億個url,每個url各佔64字節,內存限制是4G,讓你找出a、b文件共同的url?
2019.8.23 滴滴一面
常用數據結構
堆的定義,排序的過程,爲什麼可以原地操作?放在數組裏面,完全二叉樹
介紹AVL、BST、紅黑樹。爲什麼有了BST還要使用紅黑樹?
Stack怎麼實現的
鏈表和數組的區別
HashMap的底層原來,爲什麼擴容是2倍?
LinkedHashMap的原理,可以用來幹什麼?LRU,介紹LRU,頁面置換爲什麼使用LRU?局部性原理,提高緩存命中率。
設計模式:單例,工廠,模板方法,策略
代理設計模式對應OO模型中的哪一種?組合模型
策略設計模式對應OO模型中的哪一種?
面向對象的三大特徵,多態是怎麼實現的?Java如何實現多繼承,多繼承存在什麼問題?
volatile的作用:禁止重排序,保證可見性
synchronized的底層原理
輕量級鎖和重量級鎖,樂觀鎖和悲觀鎖
自旋鎖的作用是什麼?降低線程切換的成本
String是線程安全的嗎?final關鍵字的作用
Spring AOP原理,動態代理的方式
equals和hascode的關係
JVM運行時內存區域
垃圾回收算法、可達性分析算法,finallize的作用
年輕代爲什麼要分三個區域
2019.8.24 猿輔導二面
介紹項目
Redis的基本數據結構,Set怎麼實現的,跳錶的插入刪除查詢時間複雜度
一致性hash
負載均衡算法有哪些
編程題1:1、4、7、8、3、2找最大值
public class Main {
public static void main(String[] args) {
int[] nums = {1,4,7,8,3,2};
int i = 0, j = nums.length - 1;
while(i <= j){
int mid = (i + j) / 2;
int temp = nums[mid];
int left = 0, right = 0;
if(mid - 1 >= 0){
left = nums[mid - 1];
}
if(mid + 1 < nums.length){
right = nums[mid + 1];
}
if(nums[mid] > left && nums[mid] > right){
System.out.println(nums[mid]);
break;
}
if(nums[mid] > left && nums[mid] < right){
i = mid + 1;
}else{
j = mid - 1;
}
}
}
}
編程題2:節點取值0/1的二叉樹,刪除全部爲0的葉子節點
public class Main {
public static TreeNode solve(TreeNode root){
if(root == null){
return null;
}
TreeNode left = solve(root.left);
TreeNode right = solve(root.right);
root.left = left;
root.right = right;
if(left == null && right == null && root.val == 0){
return null;
}
return root;
}
}
簡潔版:
private TreeNode solve(TreeNode root) {
if (root == null){
return null;
}
root.left = solve(root.left);
root.right = solve(root.right);
if (root.left == null && root.right == null && root.val == 0){
return null;
}
return root;
}
2019.8.28 美團三面
HashMap的put和get過程,時間複雜度度是多少?HashMap是如何降低碰撞的概率?
Spring IOC和AOP
編程題:矩陣中左上角到右下角的路徑總數
2019.9.17 百度一面
兩個棧實現隊列
跳臺階
static方法中可以引用非static方法嗎?
Spring中IOC和AOP的原理
mysql中的髒讀和幻讀概念
ThreadLocal
垃圾回收算法和垃圾收集器