Java面試題

Java基礎

1.集合list、set、map區別?

  • List和Set是存儲單列數據的集合,Map是存儲鍵值對這樣的雙列數據的集合;
  • List中存儲的數據是有順序的,並且值允許重複;Map中存儲的數據是無序的,它的鍵是不允許重複的,但是值是允許重複的;Set中存儲的數據是無順序的,並且不允許重複,但元素在集合中的位置是由元素的hashcode決定,即位置是固定的(Set集合是根據hashcode來進行數據存儲的,所以位置是固定的,但是這個位置不是用戶可以控制的,所以對於用戶來說set中的元素還是無序的)。

2.list、set、map的子類?

  • list:
    1. Vector:內部是數組數據結構,線程安全。增刪,查詢都很慢。
    2. ArrayList:內部是數組數據結構,線程不安全,替代Vector,查詢速度快,增刪速度慢。如果需要使用多線程,我們可以給ArrayList加鎖,或者使用其他的方法,Vector已經不再使用了。
    3. LinkedList:內部是鏈表數據結構,線程不安全,增刪速度快,查詢速度慢。
  • set:
    1. HashSet:通過hash算法,排列順序和插入順序無關。
    2. LinkedHashSet:用鏈表實現,排列順序就是插入順序。
    3. TreeSet:
    4. AbstractSet抽象類
  • map:
    1. HashMap:無序存放,新的操作類,key不允許重複
    2. Hahtable:無序存放,舊的操作類,key不允許重複
    3. TreeMap:可以排序的Map集合,按集合的key排序,key不允許重複
    4. WeakHashMap:弱引用的Map集合,清除集合中不再使用的內容,使用gc進行回收
    5. IndentityHashMap:key可以重複的Map集合
  1. Java的重載和重寫的區別?

    • 重寫:父類中定義的方法,在子類中重新實現。
    • 重載:相同方法名稱相同,參數類型、參數個數、參數順序不同。重載對返回類型沒有要求,可以相同也可以不同,但不能通過返回類型是否相同來判斷重載。
  2. Java面向對象的三大特徵
    封裝、繼承、多態

  3. jsp的內置對象。

    • pageContext:JSP的頁面容器
    • request : 獲取用戶的請求信息
    • response: 服務器向客戶端的迴應信息
    • session :用來保存每一個用戶的信息
    • application:表示所有用戶的共享信息
    • config : 服務器配置信息,可以取得初始化參數
    • out : 用於向客戶端、瀏覽器輸出數據。
    • page:指向了當前jsp程序本身。
    • exception:封裝了jsp程序執行過程中發生的異常和錯誤信息。
  4. 四種屬性範圍:

    • page(pageContext):只在一個頁面中保存屬性。 跳轉之後無效;
    • request:只在一次請求中有效,服務器跳轉之後有效。 客戶端跳無效;
    • session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效;
    • application:在整個服務器上保存,所有用戶都可使用。 重啓服務器後無效;

框架

  1. springmvc的工作流程?
    可以看這個博客:https://blog.csdn.net/u014191220/article/details/81387596
    https://www.cnblogs.com/jiyukai/p/7629498.html

  2. springmvc的常用註解

    • @Controller:用於控制層註解 , (特殊的@Component)。
    • @RestContoller:用戶控制器註解,等於@Controller+@ResponseBody.
    • @RequestMappint:用於方法上,來映射 Request 請求與處理器。參數:
      1. value:定義request請求的映射地址
      2. method:定義地request址請求的方式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默認接受get請求,如果請求方式和定義的方式不一樣則請求無法成功。
      3. params:定義request請求中必須包含的參數值。
      4. headers:定義request請求中必須包含某些指定的請求頭,如:RequestMapping(value = “/something”, headers = “content-type=text/*”)說明請求中必須要包含"text/html", "text/plain"這中類型的Content-type頭,纔是一個匹配的請求。
      5. consumes:定義請求提交內容的類型。
      6. produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
    • @ResponseBody:將返回值內容通過springMVC提供的HttpMessageConverter接口轉換爲json、xml等格式的數據,再轉換爲java對象綁定到Controller類方法的參數上,即將返回值放在response體內。
    • @RequestBody:允許request的參數在request體中,而不是在直接鏈接在地址後面。此註解放在參數前。
    • @PathVariable:用來接收路徑參數,如/news/001,可接收001作爲參數,此註解放置在參數前。
    • @RequestParam:value:請求參數名,require:是否必須存在,默認爲true,defaultValue:默認值,表示如果請求中沒有同名參數時的默認值;處理簡單類型的綁定,作用在參數前。
    • @ModelAttribute:用於把參數保存到model中,可以註解方法或參數,註解在方法上的時候,該方法將在處理器方法執行之前執行,然後把返回的對象存放在 session或模型屬性中。
    • @ControllerAdvice 使一個Controller成爲全局的異常處理類, 類中用ExceptinHandler方法註解的方法可以處理所有Controller發生的異常。
    • @ExceptionHandler: 註解到方法上, 出現異常時會執行該方法。
  3. spring的優點?

    1. 非侵入式設計:Spring是一種非侵入式(non-invasive)框架,它可以使應用程序代碼對框架的依賴最小化。
    2. 方便解耦、簡化開發:Spring就是一個大工廠,可以將所有對象的創建和依賴關係的維護工作都交給Spring容器的管理,大大的降低了組件之間的耦合性。
    3. 支持AOP:Spring提供了對AOP的支持,它允許將一些通用任務,如安全、事物、日誌等進行集中式處理,從而提高了程序的複用性。
    4. 支持聲明式事務處理:只需要通過配置就可以完成對事物的管理,而無須手動編程。
    5. 方便程序的測試:Spring提供了對Junit4的支持,可以通過註解方便的測試Spring程序。
    6. 方便集成各種優秀框架:Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。
    7. 降低Jave EE API的使用難度:Spring對Java EE開發中非常難用的一些API(如JDBC、JavaMail等),都提供了封裝,使這些API應用難度大大降低。
  4. IOC反轉控制(也可以叫DI依賴注入)
    就是對象依賴關係不用你來維護,由IOC容器來維護(對象間依賴關係就是類與類之間的依賴關係,使用與被使用。之前這些要你自己去完成它們的依賴關係,有了IOC容器這工作就就交給IOC容器來完成。)

  5. AOP面向切面編程

  6. Mybatis的xml配置
    https://blog.csdn.net/weixin_39805338/article/details/80893558

  7. mybatis的標籤

  8. mybatis的自動sql

數據庫

  1. sql的連接類型
  2. where和having的區別
    where執行在返回結果之前,且先於聚合函數之前,用於過濾行,不能使用聚合函數;having執行在返回結果之後,可以使用聚合查詢,對放回的結果進行過濾。
  3. sql的約束
  4. 事務的特徵
  5. sql優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章