java面試題一

来源:http://www.cnblogs.com/lq147760524/archive/2017/06/18/7045356.html
-Advertisement-
Play Games

個人的一點參考總結,如有雷同,純屬巧合! 1、hashmap的實現原理以及hashtable的線程安全是怎麼實現的?HashMap其實也是一個線性的數組實現的,所以可以理解為其存儲數據的容器就是一個線性數組。首先HashMap裡面實現一個靜態內部類Entry,其重要的屬性有 key , value, ...


個人的一點參考總結,如有雷同,純屬巧合!

 

1、hashmap的實現原理以及hashtable的線程安全是怎麼實現的?
HashMap其實也是一個線性的數組實現的,所以可以理解為其存儲數據的容器就是一個線性數組。
首先HashMap裡面實現一個靜態內部類Entry,其重要的屬性有 key , value, next,從屬性key,value我們就能很明顯的看出來Entry就是HashMap鍵值對實現的一個基礎bean,我們上面說到HashMap的基礎就是一個線性數組,這個數組就是Entry[],Map裡面的內容都保存在Entry[]裡面。
HashTable容器使用synchronized來保證線程安全,但線上程競爭激烈的情況下HashTable的效率非常低下。因為當一個線程訪問HashTable的同步方法時,其他線程訪問HashTable的同步方法時,可能會進入阻塞或輪詢狀態。
ConcurrentHashMap所使用的鎖分段技術,首先將數據分成一段一段的存儲,然後給每一段數據配一把鎖,當一個線程占用鎖訪問其中一個段數據的時候,其他段的數據也能被其他線程訪問。

2、hashmap的put(),get()實現原理?
第一個鍵值對A進來,通過計算其key的hash得到的index=0,記做:Entry[0] = A。一會後又進來一個鍵值對B,通過計算其index也等於0,現在怎麼辦?HashMap會這樣做:B.next = A,Entry[0] = B,如果又進來C,index也等於0,那麼C.next = B,Entry[0] = C;這樣我們發現index=0的地方其實存取了A,B,C三個鍵值對,他們通過next這個屬性鏈接在一起。所以疑問不用擔心。也就是說數組中存儲的是最後插入的元素。
get()先定位,再遍歷。


3、spring bean的生命周期?
在spring中,singleton屬性預設是true,只有設定為false,則每次指定別名取得的Bean時都會產生一個新的實例。
3.1:Bean的建立:容器尋找Bean的定義信息並將其實例化。
3.2:屬性註入。
3.3:BeanNameAware
3.4:BeanFactoryAware的setBeanFactory()
3.5:BeanPostProcessors的ProcessBeforeInitialization()
3.6:initializingBean的afterPropertiesSet():
3.7:Bean定義文件中定義init-method:
3.8:BeanPostProcessors的ProcessaAfterInitialization()
DisposableBean的destroy(),Bean定義文件中定義destroy-method


4、spring如何管理事務?
Spring 的事務,可以說是 Spring AOP 的一種實現。反射和動態代理。

AOP面向切麵編程,即在不修改源代碼的情況下,對原有功能進行擴展,通過代理類來對具體類進行操作。

spring是一個容器,通過spring這個容器來對對象進行管理,根據配置文件來實現spring對對象的管理。

spring的事務聲明有兩種方式,編程式和聲明式。spring主要是通過“聲明式事務”的方式對事務進行管理,即在配置文件中進行聲明,通過AOP將事務切麵切入程式,最大的好處是大大減少了代碼量。


5、service層是單例還是多例的?是線程安全的嗎?如果要做到多實例怎麼做?
spring生成對象預設是單例的。通過scope屬性可以更改為多例。

<bean id="user" class="modle.User" scope="prototype">
</bean>
5.1、servlet是單例的,嚴格地說是一個ServletMapping對應一個單例實例
5.2、要維護Servlet線程安全有很多辦法,通常是使用同步塊(或方法)來保護共用數據,其次可以volatile、Lock一些鎖機制,還可以使用ThreadLocal來打通安全通道,同時為了線程安全還得阻塞對方線程,其性能非常之差。不要在C層定義變數,防止多線程併發。

6、事物的傳播性?資料庫的隔離級別?
PROPAGATION_REQUIRED 如果存在一個事務,則支持當前事務。如果沒有事務則開啟
PROPAGATION_SUPPORTS 如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執行
PROPAGATION_MANDATORY 如果已經存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。
PROPAGATION_REQUIRES_NEW 總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。
PROPAGATION_NOT_SUPPORTED 總是非事務地執行,並掛起任何存在的事務。
PROPAGATION_NEVER 總是非事務地執行,如果存在一個活動事務,則拋出異常
PROPAGATION_NESTED 如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務,
則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執行
在預設的情況下,我們採用的是
PROPAGATION_REQUIRED

 ① Serializable (串列化):可避免臟讀、不可重覆讀、幻讀的發生。

  ② Repeatable read (可重覆讀):可避免臟讀、不可重覆讀的發生。

  ③ Read committed (讀已提交):可避免臟讀的發生。

  ④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
其中一般資料庫預設的為Read committed級別。

MySQL預設的隔離級別為 Repeatable read。

在MySQL資料庫中查看當前事務的隔離級別:

select @@tx_isolation;
在MySQL資料庫中設置事務的隔離 級別:

set [glogal | session] transaction isolation level 隔離級別名稱;

set tx_isolation=’隔離級別名稱;’
記住:設置資料庫的隔離級別一定要是在開啟事務之前!

 

7、Arraylist如何實現線程安全?
那麼為瞭解決這個線程安全問題你可以這麼使用Collections.synchronizedList(),如:

List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());
8、如何配置Tomcat記憶體大小?
Tomcat預設可以使用的記憶體為128MB,在較大型的應用項目中,這點記憶體是不夠的,需要調大。有以下幾種方法可以選用:

第一種方法:

  Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置:

  JAVA_OPTS='-Xms【初始化記憶體大小】 -Xmx【可以使用的最大記憶體】'

  需要把這個兩個參數值調大。例如:

  JAVA_OPTS='-Xms256m -Xmx512m'

  表示初始化記憶體為256MB,可以使用的最大記憶體為512MB。

第二種方法: 環境變數中設 變數名:JAVA_OPTS 變數值:-Xms512m -Xmx512m
第三種方法:前兩種方法針對的是bin目錄下有catalina.bat的情況(比如直接解壓的Tomcat等),但是有些安裝版的Tomcat下沒有catalina.bat,這個時候可以採用如下方法,當然這個方法也是最通用的方法:打開tomcatHome//bin//tomcat5w.exe,點擊Java選項卡,然後將會發現其中有這麼兩項:Initial memory pool和Maximum memory pool.Initial memory pool這個就是初始化設置的記憶體的大小。Maximum memory pool這個是最大記憶體的大小 設置完了就按確定然後再重啟TOMCAT你就會發現tomcat中jvm可用的記憶體改變了
在catalina.bat的@echo off下麵添加(就是第二行)

set JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=256m

9、servlet預設實現類?
lServlet介面SUN公司定義了兩個預設實現類,分別為:GenericServlet、HttpServlet。
如為GET請求,則調用HttpServlet的doGet方法,如為Post請求,則調用doPost方法。因此,開發人員在編寫Servlet時,通常只需要覆寫doGet或doPost方法,而不要去覆寫service方法

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java 後臺返回一個ModelAndView 對象,然後加入這2行設置 業可以把這二行設置放入JSP中 在jsp代碼如下: ...
  • 呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類。 1.設計一個商品類 欄位: 商品名稱,重量,價格,配件數量,配件製造廠商(是數組,因為可能有多個製造廠商) 要求: 有構造函數 重寫 toString 方法 重寫 equals方法,進行兩件商品的比較 2.設計一個抽象類,並演示 ...
  • 嗨咯,大家晚上好,我的博客首篇開始了 ,我們一起加油吧! 都說java 語言是非常健壯性 如:垃圾回收機制、記憶體模型、異常處理,強類型轉換、跨平臺,等等,使得Java語言的受到青睞。今天我們先來聊聊java的異常處理機制try catch finally throw throws,平時我們貌似小瞧了 ...
  • 這次數據量在70萬左右。音頻數據包括音頻下載地址,頻道信息,簡介等等,非常多。 ...
  • 題目描述 給定A,B,求A^B的所有因數的和,再MOD 9901 輸入 一行兩個整數 A 和 B。 輸出 一行,一個整數 樣例輸入 樣例輸出 提示 對於100%的數據滿足:0 <= A,B <= 50000000 這道題首先要想到有一個因數和公式 f[a] = ( 1 + p1 + p1^2 + . ...
  • jdk1.7.0_79 本文實際上是對上文《13.ThreadPoolExecutor線程池之submit方法》的一個延續或者一個補充。在上文中提到的submit方法里出現了FutureTask,這不得不停止腳步將方向轉向Java的Future模式。 Future是併發編程中的一種設計模式,對於多線 ...
  • 一、註入分類 Bean實例在調用無參構造器創建空值對象後,就要對Bean對象的屬性進行初始化。初始化是由容器自動完成的,稱為註入。根據註入方式的不同,常用的有兩類:設值註入、構造註入、實現特定介面註入。由於第三種方式採用侵入式編程,污染代碼,所以幾乎不用。 1、設值註入 2、構造註入 二、命名空間註 ...
  • 題目描述 有N(2<=N<=600000)塊磚,要搭一個N層的塔,要求:如果磚A在磚B上面,那麼A不能比B的長度+D要長。問有幾種方法,輸出 答案 mod 1000000009的值. 輸入輸出格式 輸入格式: 第一行: N,D 第二行: N個數,表示每塊磚的長度。 輸出格式: 方案數,輸出要mod ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...