面試的一些事兒

1)ListSet的區別:

a) List有序【有索引】、Set無序【沒有索引、TreeSet底層使用二叉樹結構實現,因此有序】css

b) List容許數據重複、Set不容許重複前端

c) 實際開發中可使用Set集合來去除重複數據程序員

2)列舉你熟悉的幾種數據結構?

a) 數組結構web

b) 鏈表結構【單向鏈表、雙向鏈表】面試

c) 鍵值對ajax

d) 二叉樹spring

e) 矩陣數據庫

3)HashMapHashTable的區別

a) HashMap容許null鍵和nul值,HashTable不容許null鍵也不容許null編程

b) HashMap線程不安全,HashTable線程安全json

c) HashMapHashTable都是無序的,可是TreeMap是有序的

d) 項目中一般狀況下要使用propertiesPropertiesHashTable的子類,可是要求鍵和值都必須是字符串【通常用來配置一些項目中的初始化數據,例如jdbc、鏈接池等】

4)Java訪問數據庫有哪些技術?

a) JDBC

b) 本身封裝JDBC的工具類

c) Commons-Dbutils+dbcpQueryRunner

d) SpringJDBCJdbcTemplate

e) JPA【配置文件、domain實體類+註解、EntityManager

f) SpringDataJpa【是SpringJPA的封裝,用起來更簡單快捷,極可能還要使用文浩對SpringDataJpa的擴展】

g) Hibernate框架

h) Mybatis

5)談一談你對Spring框架的感覺?

a) Spring表明春天的意思,其實就是程序員的春天

b) Spring有兩大核心特色:控制反轉(建立對象的權力交給Spring/依賴注入(建立對象以後,對象的某些屬性須要初始化,使用set方法或者構造方法對這些屬性進行初始化)、AOP(面向切面編程,在方法執行先後添加其餘業務邏輯、底層使用動態代理技術實現,能夠用來作例如:權限驗證、事務管理、日誌記錄等功能)

c) Spring是一個容器型框架,內部有不少子框架,分別實現了不少不一樣功能,並且相互之間能夠無縫集成【spring-jdbcspringMVCSpringDataJPA

d) Spring能夠和目前市面上其餘幾乎全部框架集成到一塊兒,一般狀況下使用FactoryBean方式進行配置

e) 我在項目中使用Spring,哪裏須要對象的時候,直接使用@Autowired自動注入就能夠了,很是方便。

6)你剛纔提到了SpringMVC,怎麼用?底層有什麼原理?

a) SpringMVC是對Servlet/JSP技術的封裝,原來的Servlet用來作項目的時候使用不是太方便【一個Servlet只能處理一種請求】

b) 使用SpringMVC首先要配置中央控制器【DispatcherServlet】(還要加上初始化參數指定SpringMVC的配置文件路徑),而後SpringMVC的配置文件中添加配置,經過請求訪問路徑進行匹配(/xxx/yyy/xxx匹配Controller類,/yyy匹配類中的方法)

c) /xxx/yyy: 請求首先來到中央控制器中,經過HandlerMapping(處理器映射器)找到相應的處理器(Controller類),而後再使用處理器適配器(HandlerAdapter)處理請求參數的封裝以及類型自動轉化,經過反射方式執行該控制器類中的該方法,方法執行完畢後通常狀況下要求返回一個字符串,再通過視圖解析器(ViewResolver)進行解析,最後再默認利用請求轉發方式跳轉頁面。

7)剛纔提到了SpringAOP,請你說一說SpringAOP

a) 面向切面編程(Aspect Oriented Programming

b) AOP自己是由AOP聯盟推出的一套接口規範,SpringAOP實現了AOP聯盟規範中的一部分

c) 基於動態代理技術實現:本來有一個接口一個實現類,使用JDK動態代理或者CGLIB動態代理技術生成一個代理類,代理類和被代理類型要求必須實現相同接口,代理類中持有一個被代理類的對象做爲屬性,在重寫接口的方法中調用被代理對象的相應方法,而且在調用以前或者以後添加其餘業務邏輯。最後將這個代理對象返回。

d) 好處:下降耦合度(方法調用者與被代理對象之間的耦合度)

e) 能夠用來實現事務管理、日誌管理、權限驗證等等功能,感受在調用方法的時候不知不覺間就插入了其餘業務邏輯。

f) SpringAOP支持配置文件方式和註解方式實現AOP

g) Spring中對事務管理業務加強類還寫了不少實現類,只須要把它配置成bean就能夠直接使用了。

8)請你解釋一下Spring的控制反轉(IOC)和依賴注入(DI)?

a) 控制反轉(IOC):將建立對象的權力交給Spring來管理,能夠經過配置bean標籤或者掃描包(@Controller@Service@Repository@Component)的方式,默認使用類名稱(首字母小寫)做爲鍵,建立的對象做爲值存入Spring容器中,並且默認是單例模式,也能夠本身指定一個名稱做爲鍵

若是是bean標籤,可使用id或者name屬性指定

若是是註解方式,能夠在註解後面加上字符串指定

b) 依賴注入(DI):建立對象以後要給對象的某些屬性進行賦值,利用set方法或者構造方法給對象屬性賦值。由於在項目中常常要在一個對象中持有另外一個對象做爲屬性【這種關係稱爲關聯關係】,可是關聯關係耦合度過高,爲了下降耦合度,利用set方法或者構造方法的參數【從Spring容器中獲取,獲取到的對象還有多是代理對象】傳入,將關聯關係變爲依賴關係。

9)請你說一下Springbean標籤有哪些配置方式?

a) 最簡單的bean標籤

b) 實例工廠:配置一個工廠bean,再配置一個目標bean,使用factory-bean屬性引用工廠beanid,使用factory-method指定工廠bean對象中的方法名稱,這個方法必須返回一個目標bean對象。

c) 靜態工廠:配置工廠bean,可是要加上factory-method指定工廠bean對象中的方法名稱,這個方法必須返回一個目標bean對象。

d) FactoryBean:其實就是實例工廠方式,專門用來與其餘框架集成【變相的實例工廠,可是工廠方法名稱是固定的,必須叫getObject

10)你的進銷存系統中使用的哪些框架?說一說SpringDataJpa

a) SpringDataJpaSpringJPA的實現封裝,用起來更方便,如今目前市面上仍是有20%左右的公司在使用SpringDataJpa

b) 核心接口是RespotoryJpaRepositoryJpaSpecificationExecutor

c) SpringDataJpa好處是DAO層只須要寫接口繼承JpaRepositoryJpaSpecificationExecutor接口,不須要咱們本身寫實現類

d) 還不夠方便,每每咱們都要使用文浩的擴展【只是封裝了獲取Specification對象的方法】,而後本身再擴展。

11)項目前端用的什麼框架?Easyui與後端怎麼交互數據?

a) 前端使用的是easyui框架:easyui框架很是適合用來作管理系統的後臺系統,方便實用,基於jsjQuerycss實現,方便理解和學習,easyui內部集成了不少插件,包括咱們使用的treedatagridtabsformvalidateboxcomboboxwindowdialogmessager。。。。。這些插件都有一個共同點,建立的時候一般狀況下都須要傳入一個json對象做爲參數。

b) 發送數據到後臺:一般狀況下都是利用jQueryajax,傳遞json格式請求參數

c) 後臺方法中每每也是返回JSON格式的數據:@ResponseBodySpringMVC就再也不使用視圖解析器進行頁面跳轉,而是利用jackson工具將方法返回值轉化爲JSON格式的字符串進行響應)

12)SpringMVC如何接收請求參數?

a) 傳統方式:req.getParameter()

b) 直接在方法形參列表中寫形參變量:形參變量名稱與請求參數名稱一致

c) 直接在方法形參列表中寫形參變量+@ReqquestParam:形參變量名稱與請求參數名稱不一致

d) 直接使用domain實體類對象接收:實體類對象的屬性名稱與請求參數名稱一致,並且屬性必須有set方法、domain實體類必須有無參構造

e) 使用RESTFUL風格:@PathVariable(「aa」) aa字符串仍然要與方法映射中的變量名稱一致

f) 請求參數傳遞過來都是字符串類型,SpringMVC會自動進行類型轉化,若轉化失敗會報400錯誤

13)SpringMVC如何傳遞數據給頁面前端?

a) 傳統方式:三大做用域.setAttribute,在轉發到頁面,在頁面中就能夠取出數據,可是這種只支持同步請求

b) Model

c) ModelMap

d) ModelAndView:這三個其實就是將數據保存到請求做用域中,轉發以後能獲取數據,也只支持同步請求

e) @ResponseBody註解將返回的值【對象、數組、集合、Map集合】自動轉化爲JSON格式字符串,再利用響應對象中的輸出流,這種方式是從此用得最多的,支持異步請求

14)有沒有本身研發過相似SpringMVC的小框架?說一下思路

a) 服務器啓動時候【listener配置】

  1. 加載配置文件、掃描包(讀取bean的配置信息)
  2. 獲取到徹底限定名
  3. 利用反射建立對象
  4. 以註解值爲鍵,以建立的對象爲值,保存到Map集合中
  5. 將這個Map集合保存到ServletContext做用域中

b) 請求訪問的時候【全部請求都來到一箇中央控制器中,再進行統一分發】

  1. 解析到請求地址中的uri
  2. 解析Map集合中全部保存的對象的註解,來進行匹配,若是沒匹配到就拋出異常
  3. 再解析類中的全部方法的註解,再與uri進行匹配,若是又沒匹配到就拋出異常
  4. 找到相應的對象,以及方法,再經過反射去執行該對象的該方法,而且將請求和響應對象傳過去。

15)說幾個項目開發中你遇到的印象比較深入的問題,你是怎麼解決的?

a) 列舉具備表明性的問題,可是千萬不要說技術性問題

b) N to n錯誤:斷開關聯關係,設置爲null

c) Datagrid上展現數據,數據中某個屬性是懶加載對象的時候,會出現no sessionweb.xml中添加一個過濾器

d) No Serializer:懶加載對象原理(JPA會自動建立一個類繼承懶加載對象的類,而且重寫屬性的get方法,目的是爲了在get方法被調用的時候發送SQL去加載數據,會額外添加幾個屬性)

@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})

e) Easyui中常常容易把id選擇器寫錯:在瀏覽器中按F12查看js報錯信息

f) 請求參數傳遞錯誤:也能夠按F12,去查看請求的參數以及響應消息

16)SpringDataJpa如何自定義擴展?說一下思路

a) 通過查看SpringDataJpa接口的繼承體系,發現SpringDataJpa默認使用SimpleJpaRepository來建立子類對象,而且生成代理對象,最後返回出來

b) 咱們能夠給咱們全部的業務Repository抽取一個公共父接口(BaseRepository+@NoRepositoryBean註解),擴展的方法寫在這個父接口中

c) 而後寫一個父接口的實現類,繼承SimpleJpaRepository,而且實現自定義的父接口中擴展的方法

d) 而後將全部業務Repository繼承咱們自定義的父接口(BaseRepository

e) 由於SpringDataJpa默認使用SimpleJpaRepository來建立子類對象,因此咱們要讓SpringDataJpa默認使用咱們自定義的BaseRepository父接口的實現類來建立子類,就須要修改配置文件

factory-class="cn.itsource.ibs.repository.BaseRepositoryFactoryBean

17)項目中作了權限管理嗎?說一下權限管理的設計?

a) 任何系統中都須要權限管理

b) 權限管理通常狀況下須要6張表

  1. 用戶表
  2. 角色
  3. 用戶角色中間表
  4. 權限
  5. 角色權限中間表
  6. 菜單表

c) 關係:

  1. 用戶與角色之間:多對多
  2. 角色與權限之間:多對多
  3. 權限與菜單之間:多對一

d) 經過角色管理功能:能夠去控制角色關聯哪些用戶、也能夠控制角色擁有哪些權限

18)進銷存系統中的採購是怎麼回事?

a) 採購模塊是進銷存系統中必要的核心功能模塊,由於銷售的商品不是自主生產的,是做爲一箇中間商賺差價

b) 採購分爲採購申請和採購入庫兩部分

c) 採購是公司內部某部門某員工發起申請,由主管或者經理審覈以後實施

d) 採購員線下采購

e) 採購申請完畢

f) 供應商送貨上門

  1. 發起一個入庫單、入庫單明細
  2. 每個入庫單明細後面都要有一個「確認」按鈕
  3. 確認以後,商品都放入倉庫中,修改入庫單的狀態爲「已審」、審覈人、審覈時間
  4. 根據商品和倉庫肯定當前倉庫中是否已有這個商品

i) 沒有:直接新增一條數據到庫存表中

ii) 有:數量累加、金額累加、入庫日期以當前時間爲準、單價使用加權平均法計算

19)談一下進銷存系統中的導入導出功能?

20)談一下報表功能

1. 面試技巧

(1) 面試的時候切忌說話不流暢、結巴

(2) 將面試官的問題引導到本身熟悉的方向去

(3) 到面試場合中切忌耍手機、注意坐姿

(4) 提高本身溝通表達能力

(5) 回答問題時注意邏輯、條理清晰

相關文章
相關標籤/搜索