java初中级工程师面试笔试题目及心得(全部实战经验)(答案)
JAVA SE部分:
1.string類的常用方法有哪些?
2.String,StringBuffer,StringBuilder的區別。
String 字符串常量 線程安全 操作少量數據StringBuffer 字符串變量 線程安全 操作大量數據 速度慢 多線程適合用StringBuilder 字符串變量 線程不安全 操作大量數據 速度快 單線程適合用3.String str = new String(“xyz”);創建了幾個對象。
如果String常量池中,已經創建了"xyz",則不會繼續創建,此時直創建了一個對象new String("xyz");如果String常量池中沒有創建"xyz",則會創建兩個對象,一個對象的值是"xyz",一個對象是new String("xyz");4.說幾個你常見到的異常。
5.hashtable和hashmap的區別是什么?
6.hashmap的底層實現方式是什么?
HashMap是一個“鏈表的數組”的數據結構,每個元素存放鏈表頭結點的數組,即數組和鏈表的結合體。7.Vector 和 ArrayList 的區別?
Vector是線程安全的,運行速度較ArrayList慢 ArrayList線程不安全,運行速度快 相同點:都是順序存儲,底層數組實現。8.怎么遍歷一個map?
遍歷map的三種方法: public class Collection_Map {public static void main(String[] args) {Map<String, Student> hm = new HashMap<String,Student>();Student stu1 = new Student(1,"MapTom");Student stu2 = new Student(2,"MapJack");Student stu3 = new Student(3,"MapKoby");hm.put("1", stu1);hm.put("2", stu2);hm.put("3", stu3);/*第一種 先將map對象轉成set,然后再轉為迭代器*/Iterator<Entry<String, Student>> it = hm.entrySet().iterator();while (it.hasNext()) {//System.out.println(it.next().getKey());System.out.println(it.next().getValue().getName());}/*第二種 先將map轉為set類型的key值集合,然后轉為迭代器*/Iterator<String> it2 = hm.keySet().iterator();while(it2.hasNext()){/* System.out.println(it2.next());*/System.out.println(hm.get(it2.next()).getName());}/*第三種*/for(Map.Entry<String, Student> entry : hm.entrySet()){String key = entry.getKey();String value = entry.getValue().getName();System.out.println(value);}/*第四種*/for(String key : hm.keySet()){System.out.println(hm.get(key).getName());}} }9.說一下list,set,map的區別。
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 有序10.你的項目中用的是多線程還是單線程?
一般是多線程,不清楚了,根據特定情況用嗎?等查清楚再說!11.多線程會遇到那些問題?怎么解決死鎖?
并發,死鎖 可以通過加同步、上鎖解決死鎖問題。12.用java寫一個多線程程序,如寫四個線程,二個加1,二個對一變量減一,輸出:
javapackage test; /** * 加一線程與減一線程共同操作一個數 * 兩個問題: * 1、線程同步--synchronized * 2、線程之間如何共享同一個j變量--內部類 * @author liuwei */ public class TMain { int j=1; public synchronized void inc(){ j++; System.out.println(Thread.currentThread().getName()+"-inc:"+j); } class T1 implements Runnable{ public void run(){ inc(); } } public synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec:"+j); } class T11 implements Runnable{ public void run(){ dec(); } } public static void main(String[] args) { TMain t = new TMain(); T1 t1 =t.new T1(); T11 t11 =t.new T11(); for(int i=0;i<20;i++){ Thread thread=new Thread(t1); thread.start(); Thread thread1=new Thread(t11); thread1.start(); } } }13.至少說六點interface和abstract的區別。
1.相同點 A. 兩者都是抽象類,都不能實例化。 B. interface實現類及abstrctclass的子類都必須要實現已經聲明的抽象方法。2. 不同點 A. interface需要實現,要用implements,而abstract class需要繼承,要用extends。 B. 一個類可以實現多個interface,但一個類只能繼承一個abstract class。 C. interface強調特定功能的實現,而abstractclass強調所屬關系。 D. 盡管interface實現類及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。interface中的每一個方法都是抽象方法,都只是聲明的(declaration,沒有方法體),實現類必須要實現。而abstractclass的子類可以有選擇地實現。 這個選擇有兩點含義: 一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。 二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現,也可以通過再次聲明其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須也聲明為抽象類。既是抽象類,當然也不能實例化。 E. abstract class是interface與Class的中介。 interface是完全抽象的,只能聲明方法,而且只能聲明pulic的方法,不能聲明private及protected的方 法,不能定義方法體,也不能聲明實例變量。然而,interface卻可以聲明常量變量,并且在JDK中不難找 出這種例子。但將常量變量放在interface中違背了其作為接口的作用而存在的宗旨,也混淆了interface與 類的不同價值。如果的確需要,可以將其放在相應的abstractclass或Class中。 abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以聲明 抽象方法,以規范子類必須實現的功能;另一方面,它又可以定義缺省的方法體,供子類直接使用或覆 蓋。另外,它還可以定義自己的實例變量,以供子類通過繼承來使用。3. interface的應用場合 A. 類與類之前需要特定的接口進行協調,而不在乎其如何實現。 B. 作為能夠實現特定功能的標識存在,也可以是什么接口方法都沒有的純粹標識。 C. 需要將一組類視為單一的14.怎么把數組放到對象里面?
javaString[] dataArray = new String[]{"123","234","345"};List<String> dataList = new ArrayList<String>();for(String s : dataArray){dataList.add(s);}15.給你一組字符串如:7i8hy4jjnb2.讓你編程輸出里面的數字:7842.
javaString str = "7i8hy4jjnb2";char[] ch = str.toCharArray();int bytes = ch.length;for(int i=bytes;i--;){if(ch[i]>255){bytes++;System.out.println(ch[i]);}}16.多線程有幾種實現方式?都是什么?同步有幾種實現方式?都是什么?
**多線程實現方式:**1.extends Thread 類2.implements Runnable 接口**同步實現兩種方式:**1.在返回類型上加 synchronized2.使用wait() 和 notify()17.java類實現序列化有幾種實現方式?都是什么?(二種)
實現接口Serializable 實現接口Externalizable18.java開發中“==” 和 “equals” 有何區別?
equals()是個方法,繼承類Object == 是個運算符,表示內存地址是否相同 ==比較的是2個對象的地址,而equals比較的是2個對象的內容。顯然,當equals為true時,==不一定為true。 ==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。19.static局部變量與全局變量的區別,編譯后映射文件是否包含此類變量的地址。
static全局變量只初使化一次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值;static函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝;20.在日常工作中,使用過哪些 java core 包,遇到java core 的那些異常?(可以寫中文)
不知道總結
以上是生活随笔為你收集整理的java初中级工程师面试笔试题目及心得(全部实战经验)(答案)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 融达锂业年产3万吨锂精矿项目落成 国外锂
- 下一篇: 100天精通Python(可视化篇)——