準備面試三

一、對於List而言,要否則就使用迭代器,要否則就從後往前刪除,從前日後刪除會出現角標越界。
    由於我List有兩個remove方法,一個是int做爲形參(刪除指定位置的元素),一個是Object做爲形參(刪除指定的元素)。傳一個基本數據類型的數字調用的是第一個方法。一旦刪除,原List集合在刪除角標以後的元素會往前走,致使集合的長度也變小了。
二、Java泛型是使用擦除來實現的,這意味着當你使用泛型的時候,任何具體的類型信息都被擦除了,你惟一知道的就是你在使用一個對象。所以List<String>和List<Integer>在運行期間其實是相同的類型,這兩種類型都被擦除成它們的"原生"類型,即List。
三、Java把內存分爲兩種:一種是棧內存,一種是堆內存。在函數中定義一些基本數據類型的變量和對象的引用變量都是在函數的棧內存中分配。堆內存用來存放有new建立的對象和數組。
    在堆中產生了一個數組或者對象以後,還能夠在棧中定義一個特殊的變量,讓棧中的這個變量的取值等於數組或對象在堆內存中的首地址,棧中的這個變量就成了數組或對象的引用變量,之後就能夠在程序中使用棧中的引用變量來訪問堆中的數組或者對象,引用變量就至關於爲數組或者對象起的一個名稱。
四、JDK1.8的新特性
    1.速度更快---紅黑樹
    2.代碼更少---Lambda
    3.最大化減小空指針異常----Optional
五、concurrentHashMap底層原理
    在concurrentHashMap中,不管是讀操做仍是寫操做都能保證很高的性能,在進行讀操做時不須要加鎖,而在寫操做時經過分段鎖技術只對所操做的段加鎖而不影響客戶端對其餘段的訪問。
    concurrentHashMap的高效併發機制經過如下三方面解決:
    1.經過鎖分段技術保證併發環境下的寫操做
    2.經過HashEntry的不變性,Volatile變量的內存可見性和加鎖重讀機制保證高效、安全的讀操做
    3.經過不加鎖和加鎖兩種方案控制跨段操做的安全性
六、JSP內置對象的做用
    1.pageContext表示頁容器
    2.request服務器端得到客戶端的信息:頭信息,Cookie,請求參數
    3.response服務器迴應給客戶端的信息:Cookie、重定向
    4.session表示一個用戶,用於登錄驗證上
    5.application表示整個服務器,getRealPath()
    6.config初始化參數
    7.Exception表示的是錯誤頁的處理操做
    8.page  整個頁面
    9.out  輸出
7.servlet的五個加載方法
    1.init:初始化操做
    2.service:處理客戶端的請求
    3.destroy:釋放資源
    4.getServletConfig:返回容器調用init()方法時傳遞給Servlet對象的ServletConfig對象,包含了Servlet的初始化參數。
    5.getServletInfo:返回一個String類型的字符串,包括了Servlet的信息。
八、SpringAOP通常用於什麼地方
    事務,緩存,異常,日誌
九、collection相關:https://www.cnblogs.com/IvesHe/p/6108933.html
十、一個方法裏面 有一個String參數 這個參數裏有符號字符漢字數字  要求將參數裏的數字挑選出來  進行相加  求和
    須要使用String類中提供的toCharArray()方法進行分割操做,分割成單個字符,將每一個字符進行int轉換,轉換成功就相加,不然不想加。
十一、如何判斷方法傳入的參數是何種類型
    使用Java反射,obj.getClass().getTypeName()便可判斷
十二、Mybatis Mapper配置文件裏的經常使用標籤
    1.properties:屬性
    2.settings:全局配置參數
    3.typeAliases:類型別名
    4.plugins:插件
    5.environments:環境集合屬性對象
    6.environment:環境子屬性對象
    7.transactionManager:事務管理
    8.dataSource:數據源
    9.mappers:映射器
    10.objectFactory:對象工廠
    11.typeHandlers:類型處理器
1三、Redis   緩存雪崩,穿透
    緩存雪崩:因爲原有的緩存過時失效,新的緩存尚未緩存進來,有一個請求緩存請求不到,致使全部請求都跑去了數據庫,致使數據庫壓力過大,致使宕機,使得系統崩潰。
    解決思路:1.採用加鎖計數,或者使用合理的隊列數量來避免緩存失效
        2.分析用戶行爲,儘可能讓失效時間點均勻分佈
        3.作主備緩存服務器
    緩存穿透:緩存穿透是指用戶查詢數據,在數據庫中沒有,天然在緩存中也不會有。這樣就致使用戶查詢的時候,在緩存中找不到,而後再去數據中查詢一遍
    解決思路:1.若是數據庫也沒有,直接設置一個默認值放到緩存,這樣最簡單。
        2.採用一個過濾器,將可能存在的數據哈希到一個容器中,不存在的直接攔截。
    緩存預熱:緩存預熱就是系統上線後,將相關的緩存數據直接加載到緩存系統,這樣避免用戶請求的時候,再去加載相關的數據
    解決思路:1.直接寫個緩存刷新頁面,上線時手動操做
        2.數據量不大的時候,能夠在WEB系統啓動時加載
        3.定時刷新緩存
1四、開發中內存溢出的常見緣由
    1.內存中加載的數據量過於龐大,如一次性從數據庫中取出過多的數據
    2.集合類中有對對象的引用,使用完未清空,使得JVM不可以回收
    3.代碼中存在死循環
    4.第三方軟件的BUG
    5.啓動參數內存值設定的太小
    解決:
    1.修改JVM啓動參數,直接增長內存
    2.檢查錯誤日誌
    3.查看代碼,找出可能發生內存溢出的位置
1五、String、StringBuffer、StringBuilder的區別
    1.String類中使用字符數組保存字符串,String類是final類型的,String對象是不可變的
    2.StringBuffer和StringBuilder都是可變的
    3.String的對象是不可變的,也能夠理解爲常量,顯然線程安全
    4.StringBuffer對方法加了同步鎖或者調用的方法加了同步鎖,因此是線程安全的
    5.StringBuilder並無對方法加同步鎖,因此是非線程安全的
1六、responseBody做用
    1.@ResponseBody是做用在方法上的,@ResponseBody表示該方法的返回結果直接寫入HTTP  response body中,通常在異步(AJAX)獲取數據使用
1七、autowired和 resource的區別
    1.@Autowired與@Resource均可以用來裝配bean,均可以寫在字段上
    2.@Autowired默認按類型裝配(這個註解是屬業spring的),默認狀況下必需要求依賴對象必須存在,若是要容許null值,能夠設置它的required屬性爲false
    3.@Resource(這個註解屬於J2EE的),默認按照名稱進行裝配,名稱能夠經過name屬性進行指定,若是沒有指定name屬性,當註解寫在字段上時,默認取字段名進行安裝名稱查找,html

相關文章
相關標籤/搜索