# 基礎
---
### `String`,`StringBuffer`,`StringBuilder`的區別是什么? `String` 為什么是不可變的?
1. String是字符串常量,StringBuffer和StringBuilder是字符串變量,后兩者字符內容可變,前者不可變。
2. JDK中String類的聲明是一個final類
3. StringBuffer是線程安全的,而StringBuilder是非線程安全的
4. StringBuilder的效率高
### 接口和抽象類的區別
1. 接口可以多繼承,抽象類不能多繼承
2. 接口只能做方法申明,抽象類也可以方法申明,也可以方法實現;
3. 接口是一組行為規范,抽象類是個不完整的類,注重于族的概念;
4. 接口定義的變量只能是公共的靜態常量,抽象類中的變量是普通變量;
### 反射的原理,反射創建類實例的三種方式是什么?
原理:通過操作class文件,加載類的字節碼,然后反射出字節碼中的構造函數,方法以及變量,達到在程序運行狀態下,改變程序結構或變量類型的目的。
三種創建方式:
1. 通過類的靜態成員變量class獲取Class類:`Class class1 = Foo.class`;
2. 已知類的對象,通過`getClass`方法:`Class class2 = foo1.getClass()`;
3. 已知類的全路徑,通過:`Class class3 = Class.forName(fullpath)`;
獲取實例:`class1.newInstance()`;
### JDK有哪些實現代理方法?JDK動態代理和CGlib動態代理有什么區別?
### 描述動態代理的幾種實現方式?相應的優缺點?
兩種方式:
1. JDK反射機制提供的代理
主要通過`java.lang.reflect.Proxy`類實現,通過`newProxyInstance`方法創建目標類的代理對想,從而實現對目標類的功能增強。在此 之前必須要創建一個`InvocationHandler`接口的代理類并實現它的方法`invoke()`,在該方法中完成對目標類的功能增強。
2. CGLIB代理
### 寫出三種單例模式的實現。
```java
// 1. 餓漢模式((線程安全,調用效率高,但是不能延時加載):)
public class ImageLoader{
private static ImageLoader instance = new ImageLoader;
private ImageLoader(){}
public static ImageLoader getInstance(){
return instance;
}
}
// 2. 懶漢式(線程安全,調用效率不高,但是能延時加載):
public class SingletonDemo2 {
//類初始化時,不初始化這個對象(延時加載,真正用的時候再創建)
private static SingletonDemo2 instance;
//構造器私有化
private SingletonDemo2(){}
//方法同步,調用效率低
public static synchronized SingletonDemo2 getInstance(){
if(instance==null){
instance=new SingletonDemo2();
}
return instance;
}
}
// 3. 靜態內部類實現模式(線程安全,調用效率高,可以延時加載)
public class SingletonDemo3 {
private static class SingletonClassInstance{
private static final SingletonDemo3 instance=new SingletonDemo3();
}
private SingletonDemo3(){}
public static SingletonDemo3 getInstance(){
return SingletonClassInstance.instance;
}
}
```
### 多線程的幾種實現方式。
> 1. 什么是線程安全?
1. 繼承Thread類創建線程
2. 實現Runnable接口創建線程
3. 實現Callable接口通過FutureTask包裝器來創建Thread線程;
### 有三個線程t1、t2、t3。確保三個線程t1執行完后t2執行,t2執行完成后t3執行?
### 介紹下Java內存模型
https://zhuanlan.zhihu.com/p/29881777
### JVM區域劃分(JVM)
運行數據區主要有:
1. 程序計數器
也叫PC寄存區,用來指示執行哪條命令。是每個線程私有的。
2. Java棧
局部變量表、操作數棧、指向運行時常量池的引用、方法返回地址
3. 本地方法棧
4. 堆
5. 方法區
線程共享的區域。儲存了每個類的信息(包括類的名稱、方法信息、字段信息),靜態變量、常量以及編譯器編譯的代碼。
### 垃圾收集算法主要有哪些?(JVM)
### 類實例化的順序,比如父類靜態數據、構造函數、字段、子類靜態數據、構造函數、字段,在new時的順序(JVM)
### JVM內存的新生代、老年代、持久代。(JVM)
### 描述一次完整的GC流程。(JVM)
### 你知道的JVM參數(JVM)
# 數據庫
---
### 數據庫隔離級別有哪些,各自的含義是什么,MYSQL默認的隔離級別是是什么?
### 什么是幻讀
### Mysql有哪些存儲引擎,各自優缺點。
### 高并發下,如何做到安全的修改同一行數據。
### 樂觀鎖和悲觀鎖是什么?
### 一張表有幾千萬的數據,CURD慢,如何優化?
### MySQL調優
https://www.cnblogs.com/claireyuancy/p/7258314.html
### 什么是SQL注入,怎樣避免?
sql注入是講sql代碼,添加到輸入參數中,傳遞到sql服務器解析并執行的攻擊方法。
1. 不要使用動態的sql
2. 不要將敏感數據保留在純文本中
3. 現在數據庫權限和特權
### Redis
- 什么是 Redis?
- Redis 的特點有哪些?
- Redis 支持的數據類型
- 為什么 Redis 需要把所有數據放到內存中?
- Redis 適用場景有哪些?
- Redis 常用的業務場景有哪些?
- Memcache 與 Redis 的區別都有哪些?
- Redis 相比 memcached 有哪些優勢?
- Redis常用的命令有哪些?
- Redis 是單線程的嗎?
- Redis 為什么設計成單線程的?
- 一個字符串類型的值能存儲最大容量是多少?
- Redis 各個數據類型最大存儲量分別是多少?
- Redis 持久化機制有哪些?區別是什么?
- 請介紹一下 RDB、AOF 兩種持久化機制的優缺點?
- 什么是緩存穿透?怎么解決?
- 什么是緩存雪崩?怎么解決?
- Redis 支持的 Java 客戶端有哪些?簡單說明一下特點。
- 緩存的更新策略有幾種?分別有什么注意事項?
- 什么是分布式鎖?有什么作用?
- 分布式鎖可以通過什么來實現?
- 介紹一下分布式鎖實現需要注意的事項?
- Redis 怎么實現分布式鎖?
- 常見的淘汰算法有哪些?
- Redis 淘汰策略有哪些?
- Redis 緩存失效策略有哪些?
- Redis 的持久化機制有幾種方式?
- 請介紹一下持久化機制 RDB, AOF 的優缺點分別是什么?
- Redis 通訊協議是什么?有什么特點?
- 請介紹一下 Redis 的數據類型 SortedSet(zset) 以及底層實現機制?
- Redis 集群最大節點個數是多少?
- Redis 集群的主從復制模型是怎樣的?
- Redis 如何做內存優化?
- Redis 事務相關命令有哪些?
- 什么是 Redis 事務?原理是什么?
- Redis 事務的注意點有哪些?
- Redis 為什么不支持回滾?
- 請介紹一下 Redis 集群實現方案
- 請介紹一下 Redis 常見的業務使用場景?
- Redis 集群會有寫操作丟失嗎?為什么?
- 請介紹一下 Redis 的 Pipeline (管道),以及使用場景
- 請說明一下 Redis 的批量命令與 Pipeline 有什么不同?
- Redis 慢查詢是什么?通過什么配置?
- Redis 的慢查詢修復經驗有哪些?怎么修復的?
- 請介紹一下 Redis 的發布訂閱功能
- 請介紹幾個可能導致 Redis 阻塞的原因
- 怎么去發現 Redis 阻塞異常情況?
- 如何發現大對象
- Redis 的內存消耗分類有哪些?內存統計使用什么命令?
- 簡單介紹一下 Redis 的內存管理方式有哪些?
- 如何設置 Redis 的內存上限?有什么作用?
- 什么是 bigkey?有什么影響?
- 怎么發現bigkey?
- 請簡單描述一下 Jedis 的基本使用方法?
- Jedis連接池鏈接方法有什么優點?
- 冷熱數據表示什么意思?
- 緩存命中率表示什么?
- 怎么提高緩存命中率?
- 如何優化 Redis 服務的性能?
- 如何實現本地緩存?請描述一下你知道的方式
- 請介紹一下 Spring 注解緩存
- 如果 AOF 文件的數據出現異常, Redis服務怎么處理?
- Redis 的主從復制模式有什么優缺點?
- Redis sentinel (哨兵) 模式優缺點有哪些?
- Redis 集群架構模式有哪幾種?
- 如何設置 Redis 的最大連接數?查看Redis的最大連接數?查看Redis的當前連接數?
- Redis 的鏈表數據結構的特征有哪些?
- 請介紹一下 Redis 的 String 類型底層實現?
- Redis 的 String 類型使用 SSD 方式實現的好處?
- 設計一下在交易網站首頁展示當天最熱門售賣商品的前五十名商品列表?
# 框架
---
### 什么是依賴注入?
> 1. 依賴注入有哪些方式
### AOP和IOC的工作機制
### 什么是面向切面
### Spring的加載流程
### Spring AOP的實現原理
### Spring如何管理事務
### SpringBoot的啟動機制
### Spring的controller是單例還是多例的
# 網絡
---
### `Session`和`Cookie`的區別是什么?
- 前端
- C1-Javascript
- H5圖片分塊和斷點續傳
- JavascriptPatterns[Stoyanstefanov]
- macotask和microtask
- 前端代碼生成器
- 跨域
- 頁面回到頂部滾動按鈕實現
- C2-CSS
- 瀏覽器的一些單位
- 盒模型
- 移動端判斷橫豎屏
- C3-框架
- ReactNative
- 開發環境搭建(安卓篇)
- Vue
- vue+pdfjs使用
- vue+typescript使用實踐
- vue+webpack3.x集成typescript
- Vue源碼3
- vue源碼分析1
- vue源碼分析2
- vue筆記
- C4-工具
- git
- Gitlab-CICD
- mock規則
- vscode-settings
- webpack自定義命令,切換代理地址
- 正則表達式
- 深入淺出webpack
- C5-Node
- express
- express源碼閱讀
- nightmare使用指南
- 爬蟲1.0
- C6-微信
- 微信
- C7-Canvas
- 基礎API
- 前端隨筆筆記
- 后端
- C1-Java
- shiro
- C2-Linux
- ffmpeg
- ITerm
- Linux
- MongoDB安裝
- MySql安裝
- Ngnix反向代理
- 常見錯誤
- 備忘
- mac
- 備忘-Work
- 備忘Link
- 服務器資源
- 教程
- Hexo個人博客搭建筆錄
- 文檔
- CSS編碼規范
- 前端編碼規范
- 隨筆
- 整理
- 正則
- 鏈接收藏
- 面試
- CodeWars題庫
- CodeWars題庫(二)
- Java社招面試題
- Java面試
- Web面試
- 前端筆試題
- 筆試題