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.说几个你常见到的异常。
这里写图片描述

Throwable是所有异常的根,java.lang.Throwable
Error是错误,java.lang.Error
Exception是异常,java.lang.Exception
一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。
NullPointerException 空指针异常
ArithmeticException 除0异常
ClassCastException  类型转换
ArrayIndexOutOfBoundsException 数组越界异常

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,二个对一变量减一,输出:

java
    package 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.怎么把数组放到对象里面?

    java
    String[] dataArray = new String[]{"123","234","345"};
    List<String> dataList = new ArrayList<String>();
    for(String s : dataArray){
        dataList.add(s);
    }

15.给你一组字符串如:7i8hy4jjnb2.让你编程输出里面的数字:7842.

    java
    String 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.在返回类型上加 synchronized
    2.使用wait() 和 notify()

17.java类实现序列化有几种实现方式?都是什么?(二种)

实现接口Serializable
实现接口Externalizable

18.java开发中“==” 和 “equals” 有何区别?

equals()是个方法,继承类Object
== 是个运算符,表示内存地址是否相同
==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。       

19.static局部变量与全局变量的区别,编译后映射文件是否包含此类变量的地址。

  static全局变量只初使化一次,防止在其他文件单元中被引用;
 static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
 static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝;
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值