Java面試筆記整理4

一.Java內存溢出的產生緣由和解決辦法?java

java.lang.OutOfMemoryError這個錯誤我相信大部分開發人員都有遇到過,產生該錯誤的緣由大都出於如下緣由:JVM內存太小、程序不嚴密,產生了過多的垃圾。web

致使OutOfMemoryError異常的常見緣由有如下幾種:數據庫

  1. 內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
  2. 集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
  3. 代碼中存在死循環或循環產生過多重複的對象實體;
  4. 使用的第三方軟件中的BUG;
  5. 啓動參數內存值設定的太小;

此錯誤常見的錯誤提示:bootstrap

  1. tomcat:java.lang.OutOfMemoryError: PermGen space
  2. tomcat:java.lang.OutOfMemoryError: Java heap space
  3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
  4. resin:java.lang.OutOfMemoryError
  5. java:java.lang.OutOfMemoryError

解決java.lang.OutOfMemoryError的方法有以下幾種:瀏覽器

《一》增長jvm的內存大小。方法有: 1)在執行某個class文件時候,可使用java -Xmx256M aa.class來設置運行aa.class時jvm所容許佔用的最大內存爲256M。 2)對tomcat容器,能夠在啓動時對jvm設置內存限度。對tomcat,能夠在catalina.bat中添加:緩存

set CATALINA_OPTS=-Xms128M -Xmx256M
set JAVA_OPTS=-Xms128M -Xmx256M

或者把%CATALINA_OPTS%和%JAVA_OPTS%代替爲-Xms128M -Xmx256Mtomcat

3)對resin容器,一樣能夠在啓動時對jvm設置內存限度。在bin文件夾下建立一個startup.bat文件,內容以下:框架

@echo off
call "httpd.exe"  "-Xms128M" "-Xmx256M"
:end

其中"-Xms128M"爲最小內存,"-Xmx256M"爲最大內存。jvm

《二》、 優化程序,釋放垃圾。優化

主要包括避免死循環,應該及時釋放種資源:內存, 數據庫的各類鏈接,防止一次載入太多的數據。致使java.lang.OutOfMemoryError的根本緣由是程序不健壯。所以,從根本上解決Java內存溢出的惟一方法就是修改程序,及時地釋放沒用的對象,釋放內存空間。 遇到該錯誤的時候要仔細檢查程序,嘿嘿,遇多一次這種問題以後,之後寫程序就會當心多了。

Java代碼致使OutOfMemoryError錯誤的解決:

須要重點排查如下幾點:

  1. 檢查代碼中是否有死循環或遞歸調用。
  2. 檢查是否有大循環重複產生新對象實體。
  3. 檢查對數據庫查詢中,是否有一次得到所有數據的查詢。通常來講,若是一次取十萬條記錄到內存,就可能引發內存溢出。這個問題比較隱蔽,在上線前,數據庫中數據較少,不容易出問題,上線後,數據庫中數據多了,一次查詢就有可能引發內存溢出。所以對於數據庫查詢儘可能採用分頁的方式查詢。
  4. 檢查List、MAP等集合對象是否有使用完後,未清除的問題。List、MAP等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收

 二,使用Redis作緩存的好處?

針對那些用戶信息基本固定,一旦錄入不多變更,那麼你每次加載全部用戶信息時,若是都要請求數據庫,數據庫編譯並執行你的查詢語句,這樣效率就會低下不少,針對這種信息不常常變更而且數據量較大的狀況,一般作法,就是把他加入緩存,每次取數前先去判斷,若是緩存不爲空,那麼就從緩存取值,若是爲空,再去請求數據庫,並將數據加入緩存,這樣大大提升系統訪問效率
三。bootstrap 的網格的使用?
bootstrap框架中的網格系統就是將容器平分紅12份,在使用的時候能夠根據實際狀況從新編譯LESS/SASS源碼來修改12這個數值
bootstrap框架的網格系統工做原理:

一、數據行(.row)必須包含在容器(.container)中,以便其賦予合適的對齊方式和內距(padding)

 
<div class="container"> <div class="row"></div> </div>
 

二、在行(.row)中能夠添加列(.column),但列數之和不能超過平分的總列數(如:12)

 
複製代碼
<div class="container"> <div class="row"> <div class="col-md-4"></div> <div class="col-md-8"></div> </div> </div>
複製代碼
 

三、具體內容應當放在列容器(.column)以內,並且只有列(.column)才能夠做爲行容器(.row)的直接子元素

 

四、經過設置內距(padding)從而建立列與列之間的間距,而後經過爲第一列和最後一疊設置負值的外距(margin)來抵消內距(padding)的影響

 

在bootstrap網格系統中帶有響應式效果,其帶有四種類型的瀏覽器,(超小屏,小屏,中屏和大屏),其斷點是768px,992px,1220px

 

容器(.container),針對不一樣的瀏覽器分辨率,其寬度也不同:自動,760px,970px,1170px;

 
複製代碼
.container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; @media (min-width: 768px) { .container { width: 750px; } @media (min-width: 992px) { .container { width: 970px; } @media (min-width: 1200px) { .container { width: 1170px; }
複製代碼
 

容器(.row),將容器的行平分了12等份,也就是列。每一個列都有個padding-left:15px和padding-right:15px;這樣也致使了第一列的padding-left和最後一列的paading-right佔據了中寬度的30px

 
複製代碼
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; }
複製代碼
 

行容器(.row)定義了margin-left和margin-right值爲-15px,用來抵消第一列的左內距和最後一列的右內距,這樣第一列和最後一列與容器(.container)之間就沒有間距了

 
.row { margin-right: -15px; margin-left: -15px; }
 

基本用法

因爲bootstrap框架在不一樣屏幕尺寸使用了不一樣的網格樣式,下面就以中屏(970px)爲例。

一、列組合

列組合就是更改數字來合併列(列總數不能超過12),有點相似於表格的colspan屬性;列組合方式只涉及兩個特性:浮動於寬度百分比

複製代碼
<div class="container"> <div class="row"> <div class="col-md-4">col-md-4</div> <div class="col-md-8">col-md-8</div> </div> <div class="row"> <div class="col-md-4">col-md-4</div> <div class="col-md-4">col-md-4</div> <div class="col-md-4">col-md-4</div> </div> <div class="row"> <div class="col-md-3">col-md-3</div> <div class="col-md-6">col-md-6</div> <div class="col-md-3">col-md-3</div> </div> </div>
複製代碼

效果以下:

image

相關文章
相關標籤/搜索