java開源框架、Linux相關
阿新 • • 發佈:2018-11-23
Struts2(面試率較低 非面試重點)
1. struts2 和 springmvc 的區別? a. Action , Controller Action 中每一個請求都會建立一個新的物件(Servlet只建立一個物件) Why?假定可以公用,屬性就會混亂 Controller 是可以單例項,也可以多例項,預設為單例項的 由@Scope("prototype")決定 b. 收集資料的區別 Struts2 是由成員變數收參 springMVC 是方法的 引數繫結的 c.傳遞資料(儲存資料) struts2 值棧 ValueStack springMVC ModeAndView d. 前(預處理)控制器 struts2 StrutsProparedAndExecuteFilter springMVC DispatcherServlet 2. 為什麼需要值棧(ValueStack)? 目的:與檢視層解耦合 (JSP FreeMarker) 3. 攔截器 (實現 Interceptor 介面) 本質上 為動態代理技術 生成代理類 ActionProxy
mybatis
1. MyBatis 地位 mybatis 是一個訪問操作資料庫的框架,專注於對資料庫的CRUD操作。 程式設計應用在DAO層,底層封裝的是JDBC 2. MyBatis 中預設使用的是 JDBC 中的 PreparedStatement 3. Mapper 檔案中 # 和 $ 的區別? # 操作符 主要應用於 替換 PreparedStatement 中的? $ 操作符 主要應用於 進行字串的拼接 例:排序時的順序 order by 之後不能加? 4. 提高查詢效率 Cache快取 或 EhCache Redis a. Cache 只應用在查詢中 MyBatis中不允許在查詢中加事務 ,關閉session b. 增刪改操作時 事務提交時 會清空快取 5. MyBatis 與 Spring 的整合 a. DataSource b. SqlSessionFactoryBean ==> SqlSession c. MapperScannerConfigure 封裝 UserDao userDao = sqlSession.getMapper(UserDao.class);
spring
1. IOC (Inverse of Control)控制反轉 概念:由 Spring 的工廠 負責建立物件,並對物件的成員變數進行賦值 好處:解耦合 底層實現:工廠設計模式 2. AOP (Aspect Oriented Programe) 面向切面程式設計 概念:本質就是 Spring 的動態代理開發,通過代理類為目標類增加額外功能 好處:利於目標類的維護 底層實現:動態代理實現 3. 動態代理的底層實現 Spring JDK 基於介面做代理(反射) Proxy.proxyNewInstance(); Cglib 基於父類做代理 Enhance 4. spring 封裝了很多的設計模式 a. 工廠 建立物件 解耦合 b. 代理 為原始物件增加額外功能 利於維護 c. 模板 Spring + MyBatis 整合 d. 策略 UserService{private UserDao userDao} e. 單例模式 f. 裝飾器設計模式 java IO 過濾流 g. 介面卡 Servlet 不實現Servlet 介面 ,extends HttpServlet 5. MyBatis 與 Spring 的整合 上 6. Spring 中的事務 a. 開發步驟 1. 原始物件 目標物件 Service 2. DataSourceTransactionManager TransactionAttributes 3. 切入點 4. 切面 b. 事務屬性 PROPAGATION: 傳播屬性 解決的是事務的巢狀的問題 _REQUIRED CUD 1. 外部沒有事務 開啟新的 2. 外部有事務 則融合到外部事務中 _SUPPORTS R 1. 外部沒有事務 不開啟事務 2. 外部有事務 則融合到外部事務中 7. 自己寫一個Spring a. 工廠設計 反射建立物件 b. 配置檔案 總體思路:通過讀取配置檔案獲得相關資訊,最終通過反射進行物件的建立。
springmvc
1. 百度SpringMVC的實現原理
2. Struts2 與 SpringMVC 的區別(上)
3. Spring 中如何響應JSON資料型別
@ResponseBody
@RestController
4. ModeAndView 的作用?
目的:與檢視層解耦合(JSP FreeMarker)
5. SpringMVC執行效率和開發效率都高於Struts2
6. Spring 控制器 是單例項 還是 多例項(上)
7. SpringMVC 如何接收 Client 的請求引數?
通過引數繫結的方式
springboot
為什麼用SpringBoot?
提高開發效率,對於大量的spring的配置檔案 進行了簡化 和 封裝。
Redis
1. Redis 持久化
RDB 記錄某一刻的資料映象
會丟資料(一個時間段)
AOF 記錄使用者的寫日誌
也會丟資料(只是當前這個時刻的寫操作資料 有可能丟失)
AOF 和 RDB 同時配置時,AOF生效
2. Redis 會 配合Mybatis 進行快取 ,提高查詢效率
3. Redis 會管理分散式架構中的session
Linux
面試時:熟練使用 linux 的常用指令
1. linux中日誌不會在控制檯中輸出,會在日誌檔案中輸出
tail 命令用於檔案 的倒看
2. 如何檢視 伺服器的執行狀態
top 命令 主要在開發時去看
上線的專案 一般都會有伺服器的監控平臺,以報表的形式展示cpu、jvm等的狀態
3. 檢視程序
ps -ef | grep xxx
ps -aux | grep xxx
4. 阿里雲 可以在簡歷中寫伺服器部署於阿里雲中 提高含金量
MySql的專案實戰優化
1. 當使用到數字型別時 儘量使用 mediumint、smallint 和 tinyint 如果非負數最好加入UNSIGNED
tinyint -128 - 127
tinyint unsigned 0 - 255
smallint -32768 - 32767
smallint unsigned 0 - 65535
mediumint -8388608 - 8388607
mediumint unsigned 0 - 16777215
2. VARCHAR的長度只分配真正需要的空間
3.儘量使用TIMESTAMP而非DATETIME
4.單表不要有太多欄位,建議在20以內
5.避免使用NULL欄位,很難查詢優化且佔用額外索引空間
6.不做列運算查詢 如 SELECT id WHERE age + 1 = 10,任何對列的操作都將導致表掃描,
它包括資料庫教程函式、計算表示式等等,查詢時要儘可能將操作移至等號右邊
7.不用SELECT * 查詢
8.少用JOIN
9.儘量避免在WHERE子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃描
10.列表資料不要拿全表,要使用LIMIT來分頁,每頁數量也不要太大