1.GC什麼?爲何有GC?前端
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。mysql
2.int a=5;int b=7;如何在不定義第三個變量的狀況下實現a、b的值互換?spring
int a=5;int b=7;sql
a=a+b;chrome
b=a-b;編程
a=a-b;瀏覽器
3.MVC的各部分都有哪些技術來實現?如何實現?mybatis
答:MVC是Model-View-Controller的簡寫。Model 表明的是應用的業務邏輯(經過JavaBean,EJB組件實現), View 是應用的表示面(由JSP頁面產生),Controller 是提供應用的處理過程控制(通常是一個Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。多線程
M(DAO)層,就至關於後臺,V(jsp),至關於前臺,C(control)層,至關於控制頁面跳轉;併發
MVC模式的目的就是實現Web系統的職能分工。 Model層實現系統中的業務邏輯,一般能夠用JavaBean或EJB來實現。 View層用於與用戶的交互,一般用JSP來實現。 Controller層是Model與View之間溝通的橋樑,它能夠分派用戶的請求並選擇恰當的視圖以用於顯示,同時它也能夠解釋用戶的輸入並將它們映射爲模型層可執行的操做。
M:hibernate/mybatis/ibatis
C:severlet/struts/spring action
V:jsp/FreeMarker/tails/taglib/EL/Velocity
4.面向對象的特徵有哪些方面?
抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。
繼承:
繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要。
多態性:
多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。
5.簡述線程的基本概念、線程的基本狀態以及狀態之間的關係?
線程概念
一個線程是進程的一個順序執行流。同類的多個線程共享一塊內存空間和一組系統資源,線程自己有一個供程序執行時的堆棧。線程在切換時負荷小,所以,線程也被稱爲輕負荷進程。一個進程中能夠包含多個線程。
線程狀態
(1)新建
用new語句建立的線程對象處於新建狀態,此時它和其餘Java對象同樣,僅被分配了內存。
(2)等待
當線程在new以後,而且在調用start方法前,線程處於等待狀態。
(3)就緒
當一個線程對象建立後,其餘線程調用它的start()方法,該線程就進入就緒狀態。處於這個狀態的線程位於Java虛擬機的可運行池中,等待cpu的使用權。
(4)運行狀態
處於這個狀態的線程佔用CPU,執行程序代碼。在併發運行環境中,若是計算機只有一個CPU,那麼任什麼時候刻只會有一個線程處於這個狀態。
只有處於就緒狀態的線程纔有機會轉到運行狀態。
(5)阻塞狀態
阻塞狀態是指線程由於某些緣由放棄CPU,暫時中止運行。當線程處於阻塞狀態時,Java虛擬機不會給線程分配CPU,直到線程從新進入就緒狀態,它纔會有機會得到運行狀態。
阻塞狀態分爲三種:
a.等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。
b.同步阻塞:運行的線程在獲取對象同步鎖時,若該同步鎖被別的線程佔用,則JVM會把線程放入鎖池中。
c.其餘阻塞:運行的線程執行Sleep()方法,或者發出I/O請求時,JVM會把線程設爲阻塞狀態。當Sleep()狀態超時、或者I/O處理完畢時,線程從新轉入就緒狀態。
(6)死亡狀態
當線程執行完run()方法中的代碼,或者遇到了未捕獲的異常,就會退出run()方法,此時就進入死亡狀態,該線程結束生命週期。
補充知識:
進程與線程的區別
一個進程至少有一個線程。線程的劃分尺度小於進程,使得多線程程序的併發性高。另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。
線程在執行過程當中與進程的區別在於每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用來實現進程的調度和管理以及資源分配。
併發原理
多個線程或進程」同時」運行只是咱們感官上的一種表現。事實上進程和線程是併發運行的,OS的線程調度機制將時間劃分爲不少時間片斷(時間片),儘量均勻分配給正在運行的程序,獲取CPU時間片的線程或進程得以被執行,其餘則等待。而CPU則在這些進程或線程上來回切換運行。微觀上全部進程和線程是走走停停的,宏觀上都在運行,這種都運行的現象叫併發,可是不是絕對意義上的「同時發生。
6.float f=3.4;是否正確?
不正確
3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱爲窄化)會形成精度損失,所以須要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F.
7.用js帶啊寫一個Ajax請求(get方式)寫出代碼
var xmlhttp;
if(window.XMLHttpRequest()){
xmlhttp=new XMLhTTPrEQUEST();
}else{
xmlhttp=new ActiveXObject(「MicrosoftXMLHTTP」);
}
xmlhttp.onreadyStateChange=function(){
if(xmlhttp.readyState==4&& xmlhttp.readyState==200){
//局部刷新代碼
}
xmlhttp.Open(「get」,」statutReadyCheck.aspx?dates=」+encodeURLComponene(dates),true);
xmlhttp.send();
}
8.截取字符串abcdefg的efg(寫出代碼)
String str=」 abcdefg」;
String newStr = str.substring(4);
9.簡要回答如何解決頁面前端瀏覽器的兼容問題
瀏覽器兼容問題一:不一樣瀏覽器的標籤默認的外補丁和內補丁不一樣
問題症狀:隨便寫幾個標籤,不加樣式控制的狀況下,各自的margin 和padding差別較大
解決方案:CSS裏 *{margin:0;padding:0;}
備註:這個是最多見的也是最易解決的一個瀏覽器兼容性問題,幾乎全部的CSS文件開頭都會用通配符*來設置各個標籤的內外補丁是0。
瀏覽器兼容問題二:塊屬性標籤float後,又有橫行的margin狀況下,在IE6顯示margin比設置的大
問題症狀:常見症狀是IE6中後面的一塊被頂到下一行
解決方案:在float的標籤樣式控制中加入 display:inline;將其轉化爲行內屬性
備註:咱們最經常使用的就是div+CSS佈局了,而div就是一個典型的塊屬性標籤,橫向佈局的時候咱們一般都是用div float實現的,橫向的間距設置若是用margin實現,這就是一個必然會碰到的兼容性問題。
瀏覽器兼容問題三:設置較小高度標籤(通常小於10px),在IE6,IE7,遨遊中高度超出本身設置高度
問題症狀:IE六、7和遨遊裏這個標籤的高度不受控制,超出本身設置的高度
解決方案:給超出高度的標籤設置overflow:hidden;或者設置行高line-height 小於你設置的高度。
備註:這種狀況通常出如今咱們設置小圓角背景的標籤裏。出現這個問題的緣由是IE8以前的瀏覽器都會給標籤一個最小默認的行高的高度。即便你的標籤是空的,這個標籤的高度仍是會達到默認的行高。
瀏覽器兼容問題四:行內屬性標籤,設置display:block後採用float佈局,又有橫行的margin的狀況,IE6間距bug
問題症狀:IE6裏的間距比超過設置的間距
解決方案:在display:block;後面加入display:inline;display:table;
備註:行內屬性標籤,爲了設置寬高,咱們須要設置display:block;(除了input標籤比較特殊)。在用float佈局並有橫向的margin後,在IE6下,他就具備了塊屬性float後的橫向margin的bug。不過由於它自己就是行內屬性標籤,因此咱們再加上display:inline的話,它的高寬就不可設了。這時候咱們還須要在display:inline後面加入display:talbe。
瀏覽器兼容問題五:圖片默認有間距
問題症狀:幾個img標籤放在一塊兒的時候,有些瀏覽器會有默認的間距,加了問題一中提到的通配符也不起做用。
碰到概率:20%
解決方案:使用float屬性爲img佈局
備註:由於img標籤是行內屬性標籤,因此只要不超出容器寬度,img標籤都會排在一行裏,可是部分瀏覽器的img標籤之間會有個間距。去掉這個間距使用float是正道。(個人一個學生使用負margin,雖然能解決,但負margin自己就是容易引發瀏覽器兼容問題的用法,因此我禁止他們使用)
瀏覽器兼容問題六:標籤最低高度設置min-height不兼容
問題症狀:由於min-height自己就是一個不兼容的CSS屬性,因此設置min-height時不能很好的被各個瀏覽器兼容
解決方案:若是咱們要設置一個標籤的最小高度200px,須要進行的設置爲:{min-height:200px; height:auto !important; height:200px; overflow:visible;}
備註:在B/S系統前端開時,有不少狀況下咱們又這種需求。當內容小於一個值(如300px)時。容器的高度爲300px;當內容高度大於這個值時,容器高度被撐高,而不是出現滾動條。這時候咱們就會面臨這個兼容性問題。
瀏覽器兼容問題七:透明度的兼容CSS設置
作兼容頁面的方法是:每寫一小段代碼(佈局中的一行或者一塊)咱們都要在不一樣的瀏覽器中看是否兼容,固然熟練到必定的程度就沒這麼麻煩了。建議常常會碰到兼容性問題的新手使用。不少兼容性問題都是由於瀏覽器對標籤的默認屬性解析不一樣形成的,只要咱們稍加設置都能輕鬆地解決這些兼容問題。若是咱們熟悉標籤的默認屬性的話,就能很好的理解爲何會出現兼容問題以及怎麼去解決這些兼容問題。
/* CSS hack*/
我不多使用hacker的,多是我的習慣吧,我不喜歡寫的代碼IE不兼容,而後用hack來解決。不過hacker仍是很是好用的。使用hacker我能夠把瀏覽器分爲3類:IE6 ;IE7和遨遊;其餘(IE8 chrome ff safari opera等)
◆IE6認識的hacker 是下劃線_ 和星號 *
◆IE7 遨遊認識的hacker是星號 *
好比這樣一個CSS設置:
height:300px;*height:200px;_height:100px;
IE6瀏覽器在讀到height:300px的時候會認爲高時300px;繼續往下讀,他也認識*heihgt, 因此當IE6讀到*height:200px的時候會覆蓋掉前一條的相沖突設置,認爲高度是200px。繼續往下讀,IE6還認識_height,因此他又會覆蓋掉200px高的設置,把高度設置爲100px;
IE7和遨遊也是同樣的從高度300px的設置往下讀。當它們讀到*height200px的時候就停下了,由於它們不認識_height。因此它們會把高度解析爲200px,剩下的瀏覽器只認識第一個height:300px;因此他們會把高度解析爲300px。由於優先級相同且想衝突的屬性設置後一個會覆蓋掉前一個,因此書寫的次序是很重要的。
10.寫一條mysql的分頁語句
select * from table limit (pageIndex-1)*pageSize, pageSize;
//pageSize 每頁顯示數量
//pageIndex 顯示第幾頁
11.請編寫sql語句,要求tf_f_user表中隨機查詢5條數據
SQL Server:
SELECT TOP 5 * FROM T_USER ORDER BY NEWID()
ORACLE:
SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 5
MySQL:
SELECT * FROM T_USER ORDER BY RAND() LIMIT 5
Access:
SELECT TOP 5* FROM T_USER ORDER BY rnd([一個自動編號字段])
這條語句在 Access 中的「查詢」中是能夠運行並獲得隨機結果的,但在 ASP.NET等後臺程序代碼中卻沒法獲得預期的隨機效果。
正確的寫法以下:
以ASP.NET爲例:
Random random = new Random(System.Guid.NewGuid().GetHashCode());
int r = random.Next();
string sql = "SELECT TOP 5 * FROM T_USER ORDER BY RND(" + (-r) + "*自動編號字段)"
12.是否能夠繼承String類
不能夠
由於String是final修飾的類,不能被其餘類繼承。
13.日期時間:(寫出代碼)
-如何取得年月日、小時分鐘秒?
Calendar now = Calendar.getInstance();
System.out.println("年:" + now.get(Calendar.YEAR));
System.out.println("月:" + (now.get(Calendar.MONTH) + 1));
System.out.println("日:" + now.get(Calendar.DAY_OF_MONTH));
System.out.println("時:" + now.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + now.get(Calendar.MINUTE));
System.out.println("秒:" + now.get(Calendar.SECOND));
-如何讓取得從1970年1月1日0時0分0秒到如今的毫秒數?
//獲取從1970 1 1到當前毫秒數Java中的getTime方法默認的是從//1970 1 1 算起
public class test1{
public static void main(String[] args) {
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis(); // Java 8
}
}
-如何讓取得某月的最後一天?
public static String getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
public static String getFirstDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
-如何格式化日期?
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("當前時間:" + sdf.format(d));
14、求從10到100中能被3和5整除的數的和(寫出代碼)
public void getSum(){
int sum = 0;// 10到100中能被3和5整除的數的和
for(int i=10;i<=100;i++){
if(i%3==0&&i%5==0){
sum+=i;
}
}
System.out.println(「10到100中能被3和5整除的數的和是:」+sum);
}
15.用最有效率的方法算出3乘以8等於多少?(寫出代碼)
2<<3