1. 程式人生 > >java開源框架、Linux相關

java開源框架、Linux相關

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來分頁,每頁數量也不要太大