麪霸呂國棟之:整理的一些面試題

繼承

一、繼承的目的是擴展類的功能
二、java中一個子類只能繼承一個父類
三、java不容許多重繼承,容許多層繼承
四、父類中private方法不能在子類中被default覆寫,若是子類中有重名的方法,那不叫覆寫,而是從新
定義了一個方法。
五、父類和子類中定義同名的屬性,子類會覆蓋父類中的屬性,super.getA()調用的是父類中的屬性。
this.getA()調用的是子類的屬性


重載和覆寫的區別

一、單詞:overloading                                overriding
二、定義:方法名稱相同,參數的類型或者個數不一樣   方法的名稱參數的類型返回值的類型等都相同
對權限沒有要求      被覆寫的方法不能有子類方法更嚴格的權限
三、範圍:發生在同一個類中      發生在繼承類中


super關鍵字

表示的是從子類調用父類中的指定操做,例如:調用屬性、方法、構造等。由於在子類的實例化過程當中,會默認調用父類中的無參構造方法,若是如今但願調用有參構造,則必須在子類中指明要調用的有參構造方法。例如:super(name,age)


this 和 super的區別

一、屬性訪問:this訪問本類中的屬性,若是本類中沒有此屬性,則從父類中繼續查找    super是訪問父類中的屬性。
二、訪問方法:this訪問本類中的方法,若是本類中沒有此方法,則在父類中查找。   super是直接訪問父類中的方法。
三、調用構造:this調用本類中的構造,必須放在構造方法的首行。 super調用父類構造,必須放在子類方法的首行。
四、this表示的當前對象。
五、this和super兩個關鍵字在構造中不能同時出現。


math類的用法

1.       Math.abs(int a):返回值的絕對值。參數能夠的類型int 、float、double、long
2.       Math.acos(double a):返回角的反餘弦。
3.       Math.asin(double a):返回角的反正弦。
4.       Math.atan(double a):返回角的反正切。
5.       Math.atan2(double a):將矩形座標(x,y)轉換成極座標(r,theta)。
6.       Math.cbrt(double a):返回double 值的立方根。
7.       Math.ceil(double a):返回最小的(最接近負無窮大)double值,該值大於或等於參數,而且等於某個整數。
8.       Math.cos(double a):返回角的三角餘弦。
9.       Math.cosh(double x):返回double 值的雙曲線餘弦。
10.   Math.exp(double a):返回歐拉數e 的double 次冪的值。
11.   Math.floor(double a):返回最大的(最接近正無窮大)double 值,該值小於或等於參數,而且等於某個整數。
12.   Math.max(int a,int b):返回兩個值中較大的一個值。參數包含的類型 int、float、long、double。
13.   Math.min(int a,int b):返回兩個值中較小的一個值。參數包含的類型 int、float、long、double。
14.   Math.random():返回帶正號的double值。
15.   Math.round(double a):返回最接近參數的long。
16.   Math.round(float a):返回最接近參數的int。


int除法的問題 

12/10=1 
12f/10=1.2 
12d/10=1.2 
12/10f=1.2 
12/10d=1.2
------------Double型---------- 
2.3/0.0 = Infinity 
2.3/-0.0 = -Infinity 
0.0/0.0 = NaN 
0.0/-0.0 = NaN 
0.0/0.1 = 0.0 
0.0/-0.1 = -0.0 


------------Float型---------- 
2.3/0.0 = Infinity 
2.3/-0.0 = -Infinity 
0.0/0.0 = NaN 
0.0/-0.0 = NaN 
0.0/-0.1 = -0.0 

幾個設計模式

一、工廠模式
二、模板方法模式:模板方法:定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。 T模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。
1)模板方法模式是基於繼承的代碼複用基本技術,模板方法模式的結構和用法也是面向對象設計的核心之一。在模板方法模式中,能夠將相同的代碼放在父類中,而將不一樣的方法實現放在不一樣的子類中。
2)在模板方法模式中,咱們須要準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,而後聲明一些抽象方法來讓子類實現剩餘的邏輯。不一樣的子類能夠以不一樣的方式實現這些抽象方法,從而對剩餘的邏輯有不一樣的實現,這就是模板方法模式的用意。
三、單例模式
public class Singleton   
{   
    private static final Singleton singleton = null;   
  
    private Singleton()   
    {   
    }   
    public static Singleton getInstance()   
    {   
        if (singleton== null)   
        {   
            synchronized (Singleton.class)   
            {   
                if (singleton== null)   
                {   
                    singleton= new Singleton();   
                }   
            }   
        }   
        return singleton;   
    }   
}


第一個條件是說,若是實例建立了,那就不須要同步了,直接返回就行了。
否則,咱們就開始同步線程。
第二個條件是說,若是被同步的線程中,有一個線程建立了對象,那麼別的線程就不用再建立了

static 用法

通常調用static屬性的時候,採用「類名稱.屬性」的方式
static方法不能調用非static屬性,也不能調用非static方法, 由於static的屬性和方法在對象沒有實例化以前就已經初始化了。
其餘的應用:能夠統計一共產生了多少個對象。


java中的內存空間類型

棧內存:保存對象的名稱,也就是訪問堆內存的地址
堆內存:保存每一個對象的基本屬性
全局數據區:保存static類型的屬性
全局代碼區:保存全部方法的定義


hashmap與hashtable區別

HashMap和Hashtable都實現了Map接口,但決定用哪個以前先要弄清楚它們之間的分別。主要的區別有:線程安全性,同步(synchronization),以及速度。
HashMap幾乎能夠等價於Hashtable,除了HashMap是非synchronized的,並能夠接受null(HashMap能夠接受爲null的鍵值(key)和值(value),而Hashtable則不行)。
HashMap是非synchronized,而Hashtable是synchronized,這意味着Hashtable是線程安全的,多個線程能夠共享一個Hashtable;而若是沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。另外一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。因此當有其它線程改變了HashMap的結構(增長或者移除元素),將會拋出ConcurrentModificationException,但迭代器自己的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這並非一個必定發生的行爲,要看JVM。這條一樣也是Enumeration和Iterator的區別。
因爲Hashtable是線程安全的也是synchronized,因此在單線程環境下它比HashMap要慢。若是你不須要同步,只須要單一線程,那麼使用HashMap性能要好過Hashtable。
HashMap不能保證隨着時間的推移Map中的元素次序是不變的。

forward和redirect的區別

答:forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求,因此session,request參數均可以獲取
 
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。因此,前者更加高效,在前者能夠知足須要時,儘可能使用forward()方法,而且,這樣也有助於隱藏實際的連接。在有些狀況下,好比,須要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。


js截取字符串

函數:split() 
功能:使用一個指定的分隔符把一個字符串分割存儲到數組
例子:
str=」jpg|bmp|gif|ico|png」;
arr=theString.split(」|」);
//arr是一個包含字符值」jpg」、」bmp」、」gif」、」ico」和」png」的數組
函數:John() 
功能:使用您選擇的分隔符將一個數組合併爲一個字符串
例子:
var delimitedString=myArray.join(delimiter);
var myList=new Array(」jpg」,」bmp」,」gif」,」ico」,」png」);
var portableList=myList.join(」|」);
//結果是jpg|bmp|gif|ico|png
函數:substring() 
功能:字符串截取,好比想從」MinidxSearchEngine」中獲得」Minidx」就要用到substring(0,6)
函數:indexOf()
功能:返回字符串中匹配子串的第一個字符的下標
var myString=」JavaScript」;
var w=myString.indexOf(」v」);w will be 2
var x=myString.indexOf(」S」);x will be 4
var y=myString.indexOf(」Script」);y will also be 4
var z=myString.indexOf(」key」);z will be -1


substr 方法 
返回一個從指定位置開始的指定長度的子字符串。 
stringvar.substr(start [, length ]) 
參數 
stringvar 
必選項。要提取子字符串的字符串文字或 String 對象。 
start 
必選項。所需的子字符串的起始位置。字符串中的第一個字符的索引爲 0。 
length 
可選項。在返回的子字符串中應包括的字符個數。 
說明 
若是 length 爲 0 或負數,將返回一個空字符串。若是沒有指定該參數,則子字符串將延續到 


stringvar 的最後
function SubstrDemo(){ 
var s, ss; // 聲明變量。 
var s = "The rain in Spain falls mainly in the plain."; 
ss = s.substr(12, 5); // 獲取子字符串。 
return(ss); // 返回 "Spain"。 



java 特徵 

 繼承 封裝  多態  抽象java



java  取餘 和取模   的區別

取餘
  rem(3,2)=1
  rem(-3,-2)=-1
  rem(3,-2)=1
  rem(-3,2)=-1
  2.取模
  mod(3,2)=1
  mod(-3,-2)=-1
  mod(3,-2)=-1
  mod(-3,2)=1
  由此能夠看出,rem和mod是有符號區別的!
  當除數與被除數的符號相同時,rem和mod的結果是徹底相同的;當除數與被除數的符號不相同時,結


果不一樣。
  具體說,rem結果的符號與被除數相同;mod結果的符號與除數相同。  

sql  分頁


--寫法1,not in/top
select top 50 * from pagetest 
where id not in (select top 9900 id from pagetest order by id)
order by id


--寫法2,not exists
select top 50 * from pagetest 
where not exists 
(select 1 from (select top 9900 id from pagetest order by id)a  where a.id=pagetest.id)
order by id


--寫法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id


--寫法4,row_number()
select top 50 * from 
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900


select * from 
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900 and rownumber<9951


select * from 
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber between 9901 and 9950


js 跨域

一、document.domain+iframe的設置
對於主域相同而子域不一樣的例子,能夠經過設置document.domain的辦法來解決
二、動態建立script
雖然瀏覽器默認禁止了跨域訪問,但並不由止在頁面中引用其餘域的JS文件,並能夠自由執行引入的JS文


件中的function(包括操做cookie、Dom等等)。根據這一點,能夠方便地經過建立script節點的方法來


實現徹底跨域的通訊。具體的作法能夠參考YUI的Get Utility
這裏判斷script節點加載完畢仍是蠻有意思的:ie只能經過script的readystatechange屬性,其它瀏覽器


是script的load事件。如下是部分判斷script加載完畢的方法。
三、使用HTML5 postMessage
otherWindow.postMessage(message, targetOrigin);
otherWindow: 對接收信息頁面的window的引用。能夠是頁面中iframe的contentWindow屬性;


window.open的返回值;經過name或下標從window.frames取到的值。
message: 所要發送的數據,string類型。
targetOrigin: 用於限制otherWindow,「*」表示不做限制


四、利用flash


五、window.name實現的跨域數據傳輸

iframe的src屬性由外域轉向本地域,跨域數據即由iframe的window.name從外域傳遞到本地域。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操做。算法


以上先總結這麼多,後面收集後再更新,同時也算是學習了。sql

相關文章
相關標籤/搜索