天天看點

準備面試需要看的一些面試題(一)

一點一點的更新吧,正好最近也在準備面試。

一、關于redis

1. redis資料結構

字元創 String、字典 Hash、清單 List、集合 Set、有序集合 SortSet

2. 關于redis分布式鎖

先使用setnx來争搶鎖,搶到之後再用expire給鎖加一個過期時間防止忘記鎖,為防止中間出現重新開機等意外,可以通過set将setnx與expire合成一條指令執行

3. 關于redis叢集

Redis Sentinal 着眼于高可用,在master當機時會自動将slave提升為master,繼續提供服務

Redis Cluster 着眼于擴充性,在單個redis記憶體不足時,使用Cluster進行分片存儲

4. redis同步機制

redis可以使用主從同步,從從同步。第一次同步時主節點做一次bgsave,并同僚将後續操作記錄到記憶體buffer中,待完成後将rdb檔案全量同步到複制節點,複制節點接受完成後将rdb鏡像加載到記憶體,加載完成後再通知主節點将期間修改的操作記錄同步到複制節點進行重放就完成了同步過程

5. redis實作異步隊列

redis一般使用list結構作為隊列(雙向隊列),rpush生産消息,lpop消費消息。當lpop沒有消息的時候,要适當sleep一會再重試。

6. redis持久化

bgsave做鏡像全量持久化,aof增量持久化。因為bgsave會耗費較長的時間,不夠實時,在停機的時候會導緻大量資料丢失,是以需要aof配合使用,在redis執行個體重新開機時,會使用bgsave持久化檔案重新構件記憶體,再使用aof重放近期操作指令來實作完整恢複重新開機之前的狀态。

二、關于Spring

1. 什麼是Spring

spring 是一個輕量級java企業級應用的開源開發架構。spring解決了開發中的基礎性問題,使得開發者更關注與應用開發。主要用來簡化應用開發。

2. Spring有什麼優點

輕量:Spring是輕量的,基礎的版本隻有2M

控制反轉:Spring通過控制反轉實作了松耦合,對象們給出他們的依賴,而不好似建立或查找依賴他們的對象。

面向切面程式設計(AOP):Spring 支援面向切面的程式設計,并且把應用業務邏輯和系統服務分開。

容器:Spring 包含并管理應用中對象的生命周期和配置。

mvc架構:Spring的web架構是個精心設計的架構,是Web架構的一個很好的替代品

事務管理:Spring提供一個持續的事務管理接口,可以擴充到上至本地事務下至全局事務(JTA)

異常處理:Spring 提供友善的API把具體的技術相關的異常轉換為一緻的unchecked異常

3. Spring支援的事務類型

程式設計式事務管理:這意味着你通過程式設計的方式管理事務,給你帶來極大的靈活性,但是難維護

聲明式事務管理:這意味着你可以将業務代碼和事務管理分離,隻需要注解和XML配置來管理事務

4. Spring bean的生命周期

  • 執行個體化一個bean,也就是new
  • 按照Spring上下文對執行個體化的bean進行配置,也就是IOC注入
  • 如果實作了BeanNameAware,會調用他實作的setBeanName方法,參數為Spring配置檔案的Bean的ID
  • 如果這個bean實作了BeanFactoryAware接口,會調用它實作的setBeanFactory方法,傳值為Spring工廠本身
  • 如果這個Bean實作了ApplicationContextAware,會調用setApplicationContext方法,參數為Spring上下文
  • 如果這個bean關聯了BeanPostProcesser接口會調用processBeforeInitialization方法,經常被用作bean内容的更改
  • 如果bean配置了init-method屬性,會自動調用其配置的初始化方法
  • 如果這個bean關聯了BeanPostProcesser,調用processAfterInitialization方法
  • dangbean不再需要時,會經過清理階段,如果bean實作了DisposableBean,會調用其實作的distory方法
  • 最後如果這個bean的Spring配置中配置了destory-method屬性,會自動調用其配置的銷毀方法

    5. Spring 基本子產品

    從Spring大的功能來分:AOP、DAO(JDBC,TRANSACTION)、WEB、CORE、ORM、CONTEXT

    6. Spring 有幾種配置方式

    XML配置

    基于注解的配置

    基于java的配置

    7.Spring架構中的單例bean是線程安全的麼

    不,Spring架構中的單例不是線程安全的

    8. Bean Factory和 Application contexts 有什麼差別

    1.Bean Factory是Spring比較原始的Factory,如XMLFactory就是一種典型的BeanFactory,原始的BeanFactory無法支援Spring的許多插件,如AOP功能,Web應用等。

    2.ApplicationContext接口,是由BeanFactory接口派生而來的,因而提供BeanFactory所有功能,ApplicationContext還提供了以下的功能:提供國際化的消息通路、資源通路(如url和檔案)、事件傳播、載入多個上下問,使得每個上下問都專注與一個特定的層次

    3.BeanFactory采用的是延遲加載形式注入bean的,即隻有在使用到某個Bean時才對該Bean進行加載執行個體化,這樣我們就不能發現一些存在的Spring的配置問題,而Application則相反,是在容器啟動時一次性建立了所有的Bean

    4.BeanFactory和ApplicationContext都支援BeanPostProcessor、BeanFactoryPostProcesser的使用,但兩者的差別是BeanFactory需要手動注冊,而ApplicationContext則是自動注冊

    8.ApplicationContext通常的實作是什麼?

  • FileSystemApplicationContext:此容器從一個xml檔案中加載beans的定義,xml 配置檔案的全路徑名稱必須提供它的構造函數。
  • ClassPathXmlApplicationContext:此容器也從一個xml檔案中加載beans的定義,這裡需要正确設定classpath 因為這個容器将在classpath裡找到bean配置。
  • WebXmlApplicationContext:此容器加載一個XML檔案,此檔案定義了一個WEB應用的所有bean。

三、關于Spring MVC

  • 簡單的談一下SpringMVC的工作流程

    1.使用者發送請求至前端控制器DispatcherServlet

    2.DispatcherServlet收到請求調用HandlerMapping處理映射器

    3.處理映射器根據url找到具體的處理器,生成處理器對象及處理攔截器(如果有則生成),一并傳回給DispatcherServlet

    4.DispatcherServlet通過HandlerAdapter處理器擴充卡調用處理器

    5.執行處理器(Controller,也叫後端控制器)

    6.Controller執行完成傳回ModelAndView

    7.HandlerAdapter将Controller執行結果ModelAndView傳回給DispatcherServlet

    8.DispatcherServlet将ModelAndView傳給ViewReslover視圖解析器

    9.ViewReslover解析後傳回具體的view

    10.DispatcherServlet對view進行渲染視圖(即将模型資料填充至視圖中)

    11.DispatcherServlet響應使用者

  • SpringMVC處理請求亂碼的方式

    1.web.xml中添加CharaterEncodingFilter設定字元集

    2.通過伺服器設定字元集

繼續閱讀