?足彩 比分计划软件?足彩 比分天天计划?足彩 比分人工计划?足彩 比分在线计划?足彩 比分稳赢计划
首頁 >  面試題 > JAVA,PHP企業面試寶典 > 

java基礎面試(二)

java基礎面試(二)

作者:elc 來源: 時間:2017-04-21 訪問次數:2634
有兩個靜態網頁:input.html和result.html,如果input.html需要把一個表單數據傳遞到result.html,有幾種方法,分別是什么



1. 有兩個靜態網頁:input.html和result.html,如果input.html需要把一個表單數據傳遞到result.html,有幾種方法,分別是什么?

答:1).JavaScript靜態頁面值傳遞之URL篇能過URL進行傳值.把要傳遞的信息接在URL上.


  2)JavaScript靜態頁面值傳遞之Cookie篇。Cookie是瀏覽器存儲少量命名數據.它與某個特定的網頁或網站關聯在一起.Cookie用來給瀏覽器提供內存,以便腳本和服務器程序可以在一個頁面中使用另一個頁面的輸入數據.


  3).JavaScript靜態頁面值傳遞 Window.open。這兩窗口之間存在著關系.父窗口parent.htm打開子窗口son.htm子窗口可以通過window.opener指向父窗口.這樣可以訪問父窗口的對象.



2、你熟悉的js框架有什么,他們有什么優點?



答:( 1 ).Jquery 


JQuery 是一款同 prototype 一樣優秀 js 開發庫類,特別是對 css 和 XPath 的支持,使我們寫 js 變得更加方便!如果你不是個 js 高手又想寫出優秀的 js 效果,那么 JQuery 可以幫你達到目的!并且簡介的語法和高的效率一直是jQuery追求的目標。 


<2>.優點:注重簡介和高效,js 效果有 yui-ext 的選擇,因為 yui-ext 重用了很多 jQuery 的函數


<3>.缺點:據說太嫩,歷史不悠久。


( 2 ).EXT js


<1>.介紹
基于 Yahoo UI 的擴展包 yui-ext 是具有 CS 風格的 Web 用戶界面組件,能實現復雜的 Layout 布局,界面效果可以和 backbase 媲美,而且使用純 javascript 代碼開發。真正的可編輯的表格 Edit Grid,支持 XML 和 Json 數據類型,直接可以遷入 Grid。許多組件實現了對數據源的支持,例如動態的布局,可編輯的表格控件,動態加載的 Tree 控件、動態拖拽效果等等。從 1.0 beta 版開始同 Jquery 合作,推出基于 jQuery 的 Ext 1.0,提供了更多有趣的功能。


<2>.優點:結構化,類似于 java 的結構,清晰明了,底層用到了 Jquery 的一些函數,使整合使用有了選擇,最重要的一點是界面太讓讓人震撼了。


<3>.缺點:太過復雜,整個界面的構造過于復雜。


( 3 ).Dojo 


<1>.介紹


Dojo 是目前最為強大的JS框架,它在自己的 Wiki 上給自己下了一個定義,Dojo 是一個用 JavaScript 編寫的開源的DHTML工具箱。Dojo 很想做一個“大一統”的工具箱,不僅僅是瀏覽器層面的,野心還是很大的。Dojo 包括 Ajax、Browser、Event、Widget 等跨瀏覽器 API,包括了 JS 本身的語言擴展,以及各個方面的工具類庫,和比較完善的 UI 組件庫,也被廣泛應用在很多項目中,他的 UI 組件的特點是通過給 HTML 標簽增加 TAG 的方式進行擴展,而不是通過寫 JS 來生成,Dojo 的 API 模仿 Java 類庫的組織方式。用 Dojo 寫 Web OS 可謂非常方便。Dojo 現在已經 4.0 了,Dojo 強大的地方在于界面和特效的封裝,可以讓開發者快速構建一些兼容標準的界面。


<1>.優點:庫相當完善,發展時間也比較長,功能強大,據說利用 Dojo 的 io.bind() 可以實現 comet 看見其功能強大非一般,得到 IBM 和 SUN 的支持。


<2>.缺點:文件體積比較大,200多KB,初次下載相當慢,此外,Dojo 的類庫使用顯得不是那么易用,JS語法增強方面不如 Prototype 



3、String、StringBuffer、StringBuilder的區別。



答:

String字符串常量   不可變  使用字符串拼接時是不同的2個空間

StringBuffer  字符串變量   可變   線程安全  字符串拼接直接在字符串后追加

StringBuilder 字符串變量   可變   非線程安全  字符串拼接直接在字符串后追加

1.StringBuilder執行效率高于StringBuffer高于String

2.String是一個常量,是不可變的,所以對于每一次+=賦值都會創建

一個新的對象,StringBuffer和StringBuilder都是可變的,當進行字符串拼接時采用append方法,在原來的基礎上進行追加,所以性能比

String要高,又因為StringBuffer  是線程安全的而StringBuilder是線程非安全的,所以StringBuilder的效率高于 StringBuffer.

2. 對于大數據量的字符串的拼接,采用StringBuffer,StringBuilder.



4、請說出Set、List、Map的區別?List有幾個實現類,它們有哪些區別?




答:List特點:元素有放入順序,元素可重復

Map特點:元素按鍵值對存儲,無放入順序

Set特點:元素無放入順序,元素不可重復(注意:元素雖然無放入順序,

但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)

List接口有三個實現類:LinkedList,ArrayList,Vector

LinkedList:底層基于鏈表實現,鏈表內存是散亂的,

每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢

ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基于線程安全的,效率低

Set接口有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet

SortedSet接口有一個實現類:TreeSet(底層由平衡二叉樹實現)

Query接口有一個實現類:LinkList

Map接口有三個實現類:HashMap,HashTable,LinkeHashMap

  HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null

SortedMap有一個實現類:TreeMap

其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對

set 一般無序不重復.map kv 結構 list 有序



5、Hibernate中查詢數據的方式有哪些?你更習慣使用哪種方式?



答:1).導航對象圖查詢:根據已經加載的對象,導航到其他對象。


例如,對于已經加載的Customer對象,調用它getOrders().iterator()方法就可以導航到所有關聯的Order對象,假如在關聯級別使用了延遲加載檢索策略,那么首次執行此方法時,hibernate會從數據庫中加載關聯的Order對象,否則就從緩存中取得Order對象。


2).OID方式:按照對象的OID來檢索對象。


Session的get()和load()方法提供了這種功能。如果在應用程序中事先知道了OID,就可以使用這種檢索對象的方式。

 get與load比較

get()和load(),它們的用法完全一樣,都需要兩個參數,第1個是持久化對象類名.class,第2個是行號,也就是說這2個方法都只能返回固定的某一行的數據,但是需要注意的是:當輸入的參數行號在數據庫中不存在時,get()會返回一個空對象,不會報錯,而load()會直接報錯。


3).HQL檢索方式:Hibernate Query Language(重要的、Hibernate強調的)


使用面向對象的HQL查詢語言。Session的find()方法用于執行HQL查詢語句。此外,Hibernate還提供了Query接口,它是Hibernate提供的專門的HQL查詢接口,能夠執行各種復雜的HQL查詢語句。

它具有以下功能:

1)在查詢語句中設定各種查詢條件

2)支持投影查詢,即僅檢索出對象的部分屬性

3)支持分頁查詢

4)支持連接查詢

5)支持分組查詢,允許使用having和group by關鍵字

6)提供內置聚集函數,如sum()、min()和max()

7)能夠調用用戶定義的SQL函數

8)支持子查詢,即嵌入式查詢

9)支持動態綁定參數

例:Query query = session.createQuery(“from UserPO”);獲得一個query對象,注意參數字符串中不是一個SQL語句,from后面跟的是持久化對象名字,List list = query.list();就可以獲得數據庫中對應表的數據集合


4).QBC檢索方式:Query By Criteria的API來檢索對象


這種API封裝了基于字符串形式的查詢語句,提供了更加面向對象的接口

例:Criteria cr = session.createCriteria(UserPO.class);創建一個Criteria對象,參數是所關聯的持久化對象,cr.add(Restrictions.ge(“id”, 2));將查詢條件加入對象中,后面的操作就和query對象一樣了。


5).本地SQL:SQL語句查詢


使用本地數據庫的SQL查詢語句,Hibernate會負責把檢索到的JDBC ResultSet結果集映射為持久化對象圖


6、斐波那契數列的規則如下:1、1、2、3、5、8、13、21、34...求第n個數是多少?請設計算法實現,并考慮效率和內存空間占用。




答:public class Fibonacci {  

  

    public static void main(String[] args) {  

        Scanner scanner = new Scanner(System.in);  

        System.out.println("Please input this fibonacci n:");  

        int n = scanner.nextInt(); // 假設輸入為大于零的整數  

          

        System.out.println(fibonacci(6) + ":" + fibonacciNormal(6));  

          

        int sum = 0;  

        for(int i = 1; i <= n; i++){  

            sum += fibonacci(i);  

        }  

        System.out.println(sum);  

    }  

      

    // 遞歸實現方式  

    public static int fibonacci(int n){  

        if(n <= 2){  

            return 1;  

        }else{  

            return fibonacci(n-1) + fibonacci(n-2);  

        }  

    }  

      

    // 遞推實現方式  

    public static int fibonacciNormal(int n){  

        if(n <= 2){  

            return 1;  

        }  

        int n1 = 1, n2 = 1, sn = 0;  

        for(int i = 0; i < n - 2; i ++){  

            sn = n1 + n2;  

            n1 = n2;  

            n2 = sn;  

        }  

        return sn;  

    }  

}  



7、一個6位數乘以一個3位數,得到一個結果。但不能清楚6位數中的兩個數字是什么,而且結果中有一個數字也不清楚,找出問號代表的數字(答案可能有多個,說出思路,不用具體實現12?56?X   123…………=154?4987



答:for(int i=0;i<9;i++)

{

  if((120560+i+i*1000)*123==15404987+i*10000)

   System.out.println(i);

}


public static void main(String args[]){


for(int a=0;a<10;a++)

{

  for(int   b=0;b <10;b++)  

  {  

    for(int   c=0;c <10;c++)  

    {  

     if((120560+a+b*1000)*123==15404987+c*10000)

      {

      System.out.println(a);

      System.out.println(b);

      System.out.println(b);

     }

    }

  }

}

}



8、如果發現一個查詢頁面非常緩慢,請分步驟說一下如何查找原因和優化?



答:1).(重點)(必須說) SELECT語句中避免使用 *, 盡量應該根據業務需求按字段進行查詢


舉例:如果表中有個字段用的是clob或者是blob這種大數據字段的話,他們的查詢應該根據業務需要來進


行指定字段的查詢,切記勿直接用*



2).(重點) 刪除重復記錄(oracle):


最高效的刪除重復記錄方法 ( 因為使用了ROWID)例子


DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID)


FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);


3). 用>=替換>


    如一個表有100萬記錄,一個數值型字段A,

      A=0時,有30萬條;

      A=1時,有30萬條;

      A=2時,有39萬條;

      A=3時,有1萬記錄。


      那么執行 A>2 與 A>=3 的效果就有很大的區別了,因為 A>2 時,ORACLE會先找出為2的記錄索引再

進行比較,而A>=3時ORACLE則直接找到=3的記錄索引。


4).(重點)盡量多使用COMMIT

如對大數據量的分段批量提交


5). (重點)用NOT EXISTS 或(外連接+判斷為空)方案 替換 NOT IN操作符

此操作是強列推薦不使用的,因為它不能應用表的索引。

    推薦方案:用NOT EXISTS 或(外連接+判斷為空)方案代替


6).(重點 必須說)LIKE操作符(大數據的全文檢索使用luncene)(solr)

    因為使用like不當,會導致性能問題,原因是like在左右兩邊都有%的時候,不會使用索引。

    如LIKE '%5400%' 這種查詢不會引用索引,而LIKE 'X5400%' 則會引用范圍索引。

一個實際例


    查詢營業編號 YY_BH LIKE '%5400%' 這個條件會產生全表掃描, 如果改成   YY_BH LIKE 'X5400%' OR


YY_BH LIKE 'B5400%'則會利用    YY_BH  的索引進行兩個范圍的查詢,性能肯定大大提高



7).(重點,必須說)避免在索引列上使用計算和函數,這樣索引就不能使用


   舉例:


低效:

    SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;


      高效:

      SELECT … FROM DEPT WHERE SAL > 25000/12;


8).(重點 必須說)用UNION-ALL 替換UNION,因為UNION-ALL不會過濾重復數據而且不會自動排序,


所執行效率要快于UNION。



9). (優化,重點,3個方面 a.緩存 b.分段批量 c.存儲過程)減少訪問數據庫的次數


舉例:如果批量刪除多條數據,可以用  delete  from tableName where id  in (1,2,3)而不要用多條delete語句

行刪除


10).(重點 必須說)用TRUNCATE替代DELETE


TRUNCATE不記錄日志,DELETE記錄日志,所以TRUNCATE要快于DELETE但是一旦用TRUNCATE進行


刪除就不能進行恢復,TRUNCATE是刪除整張表的數據不能加where條件。


mysql,sqlserver中如果id為自增類型,那么如果用TRUNCATE刪除,則id字段再插入數據時從1開始,如果delete刪除的話,則從


刪除之前的id的值繼續增長。



?足彩 比分计划软件?足彩 比分天天计划?足彩 比分人工计划?足彩 比分在线计划?足彩 比分稳赢计划
微信捕鱼达人赚钱 手机阅读转发赚钱 捷充达怎么玩才赚钱 足球比分970014433 贵州十一选五 麻将游戏平台代理加盟 虚拟种树赚钱 4场进球 学自动化赚钱 自己做干水果茶赚钱吗