面试题整理(上)

1  面向对象的特征有哪些?
    抽象  将一些对象的共同特征行为抽离出来,归纳为类
    封装  将一些方法功能的代码打包起来,使用者不需要知道如何实现,只需要调用          接口,具体体现:setter/getter方法、设计模式、jar包、ssm框架等等
    继承  将同类对象的共同属性、共同方法,抽离出来形成父类,然后子类直接继承          父类。好处:减少重复代码
    多态  不同对象对同一消息做出的不同响应。
          分为编译时多态 和运行时多态。
          编译时多态 具体表现是 方法的重载;
          运行时多态 具体表现是 方法的重写;


2  访问修饰符 public /protected/default/private的区别?
     被public修饰的属性、方法、类,能被本类、子类、同包、其他包访问。
     被protected修饰的,能被本类、同包、子类访问。不能被其他包访问
     被default修饰的,能被本类、同包访问。不能被子类、其他包访问
     被private修饰的,只能被本类访问。不能被子类、同包、其他包访问。

3  String是基本数据类型吗?
     不是。基本数据类型有:
             整型(short/int/long)、浮点型(单精度float、双精度double)
           、布尔型(boolean)、字符型(char)、字节型(byte)
              1字节=8位 ,单精度是指数字存储占用4个字节
                          双精度是指数字存储占用8个字节
     String 是引用数据类型,还有枚举、数组

4  float f=3.14是否正确?
      不正确,编译器默认是双精度(double),double型的3.14赋值给单精度float      需要强转,可写成:float f=(float)3.14或者 float f=3.14F

5  short s=1;s=s+2 正确吗? 
   short s=1 s=+2  正确吗?
    不正确, 2是int型,s+2是int型,int型赋值short型,需要强转,int占4个字节
             short类占2个字节
     正确, s=+2,编译器帮助强转;等价于 s=(short)(s+1)

6  Java有没有goto?
    goto在java中是保留字,没有被使用;
    c语言中使用,表示直接跳出外循环;

7  int 和Integer的区别?
   int 是基本数据类型
   Integer是包装类型
   java 是一门面向对象的语言,设计者为每个基本数据类型引入了对应的包装类。
   java5 引进了自动装箱拆箱机制,两者可以自动转换。
    包装类可以调用属性和方法
      public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

        System.out.println(f1 == f2);//true
        System.out.println(f3 == f4);//false
    }
    
    /*    String s1 = "Programming";
        String s2 = new String("Programming");
        String s3 = "Program";
        String s4 = "ming";
        String s5 = "Program" + "ming";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);//false
        System.out.println(s1 == s5);//true
        System.out.println(s1 == s6);//false
        System.out.println(s1 == s6.intern());//true
        System.out.println(s2 == s2.intern());//false
        */
        String s1 ="abc"; 
        String s2 = "abc"; 
        System.out.println(s1 == s2); //true
       看csdn收藏夹中的文章
      
8  &与&&的区别?
   && 是短路与,左边为false是产生短路,不需要在看右边

9 解释内存中的堆(stack)、栈(heap)和方法区(method area)的用法?
    String str= new String("hello");
      str  存放在栈中 ;new String ("hello")存放在堆里;"hello"存放在方法区


10  Math.round(1.6)等于多少? Math.round(-1.6)等于多少?
     round 是四舍五入,规则: 数值+0.5,,然后调用floor()方法

     1.6+0.5 等于2.1 ,向下取值2
     -1.6+0.5 等于-1.1. 向下取值-2

    
11  switch(key)中的key是哪些类型?
     java5 之前 byte  char short int 
     java5   是 byte  char short int  enum
     java7   是 byte  char short int  enum  String

12  数组有没有length()方法?String有没有length()方法?
    数组没有length()方法,有length属性;而String有length()方法

13 java中如何跳出多重循环?
    使用带标签的break,类似c语言中的goto,但是要慎用。

14 构造器能否被重写?
   构造器是不能被继承的,因此不能被重写。但是可以重载。

15 两个对象 x y 若x.equals(y)==true的话,但却有不同hashcode,对吗?//重点:主要按equals()方法有没有被重写
    不对,若是equals比较的是引用,若是为true的话,hashcode 一定相同。
    若是hashcode不同,equals()一定不为true  
    若是 hascode相同,equals()两个对象的引用可以相同,也可能不同
    java默认的 equals()方法 比较的是 对象引用;
               ==             比较的是 对象的赋值。
    特例,String类型的equals()方法被重写,比较的不是对象的引用,而是对象的赋值。

17 String类是否可以被继承?
    String类是final类,不能被继承。

18 String与StringBuffer/StringBuilder的区别?
   String是只读字符串类型
   StringBuffer/StringBuilder是读写字符串类型
   StringBuffer与StringBuilder功能一样,但是Builder没有被synchronized修饰,    线程是不安全的,一般在单线程中使用。buffer是线程安全的。

19 重载和重写的区别?
   重载和重写都是多态的表现。
   重载发生在同一类中,方法的参数列表不同,方法名相同,与返回类型无关。
   重写发生在子类与父类之间,访问修饰符范围不小于被重写的方法,参数列表、方法名、返回类型都要相同。方法体重写。

20  描述一下JVM加载class文件的原理机制?
   定义:JVM 是内存中的虚拟机
   组成:
       类加载器 Class Loader   将类文件从外存加载到内存中,加载方式
       运行数据区Runtime data area
       执行引擎 ExecutionEngine
       本地接口 Native Interface

23 抽象类和接口的异同?
   同  都不能实例化;
   异  抽象类中可以同时包含抽象方法和普通方法,而接口中必须都是抽象方法。
       抽象类中可以没有抽象方法,但是接口中必须要有抽象方法。
       抽象类中可以定义成员变量,而接口中的成员变量其实是常量。
       抽象类与子类有继承关系。而接口的实现类没有继承关系。

24 静态嵌套类(Static Nested Class)和内部类(Inner Class)的区别?
     内部类 需要在外部类实例化后 才能实例化
     静态嵌套类 不依赖外部实例化后才能实例化

25  内存泄漏(memory leak)与内存溢出(out of memory)区别?
    内存泄漏 :程序使用完占用的内存后,不能释放该内存,自己和其他程序也都不               
能使用该内存,该内存资源就浪费掉了。
         打比方:你向系统租了一个带锁的柜子,你使用完柜子后,钥匙丢了,自己                 
和系统都不能使用这一柜子,也不能被垃圾回收器回收。或者是冰箱里装鸡蛋,但是鸡蛋永久占位,不释放空间。
    内存溢出 :程序向系统申请内存空间装不下程序,产生内存溢出。
         打比方: 你向系统租了一个带锁的柜子,你向放一辆汽车进去,就产生内存               
溢出现象。或者是 冰箱里装大象。

25. java中存在内存泄漏吗?
    理论上不会,但是实际上有些对象不被gc回收,比如hibernate中的一级缓存Session中的对象属于持久态,不被Gc回收。

26.抽象方法可以是静态的吗?  
不可以,因为抽象方法需要被重写,静态方法是不能被重写的。
    
抽象方法可以是本地方法(native)吗?
不可以,本地方法是通过c代码实现的,抽象方法是没有实现的
    
抽象方法可以被synchronized修饰吗? 
不可以,抽象方法是没有方法体的,同步synchronnized修饰的是具体实现的方法体。

27 静态变量和实体变量的区别?
   静态变量是属于类,通过类名直接调用;
   同时在内存中只分配一个共享空间;
   应用场景:上下文类和工具类,这样节省内存消耗。

28 静态方法中是否可以调用非静态方法?
   不可以。


29 如何实现对象克隆?
   法一;实现接口Cloneable,并重写Object类中clone()方法
   法二:实现Serializable接口,对对象进行序列化和反序列化实现复制

30 为什么要有GC机制?
   防止内存泄漏,缺点:垃圾回收的不可预知性。

31 抽象类可以实现接口或者继承具体类或者继承抽象类吗?
   都可以,比如一个被abstract修饰的类,称为抽象类,抽象类中可以实现接口方法,可以重写抽象方法。


33 java 格式文件中是否可以包含多个类?有什么限制?
   可以,但是只有一个类是public修饰,文件名同该public类名


34 匿名内部类 anonymous inner class 可以继承类和实现接口吗?
    可以,SWing编程和android开发常用到,实现事件的监听和回调


35  内部类可以调用外部类的成员吗?
   可以 


36 静态成员和构造器的运行顺序(java类加载机制)
   创建对象时构造器的调用顺序:
       先初始化静态成员,然后调用父类构造器和非静态方法,然后调用子类构造器

37 如何字符串转换成基本数据类型?
   解析成xxx(String) parsexxx(String)
   或 valueOf(String). ???是怎么转换


38 如何通过递归实现字符串的反转?
  public static String reverse (String originStr){
    if(originStr==null  ||  originStr.length()<=1)
          Return originStr;
      return reverse(originStr.substring(1))+originStr.charAt(0);
}


40 如何将字符串编码格式进行转换?
   String str=new String("abc".getBytes("gb2312"),"utf-8");


42 如何取得年月日时分秒?
   Calendar.getInstance().get(Calendar.YEAR)
   Calendar.getinstance().get(Calendar.MONTH)

   如何取得1970年1月1日000 到现在的毫秒数?
    Calendar.getInstance().getTimeInMillis()

   如何取得某月的最后一天?
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH)
   如何格式化日期?
   new SimpleDateFormat("YYYY-MM-DD hh:mm;ss").format(new Date());

 打印昨天的当前时间?
   cal=Calendar.getInstance();
    cal.add(Calendar.DATE,-1)
   system.out.println(cal.getTime())
    

43 编写recursive function 递归方法注意什么?
    注意收敛条件。例如
     main(){
        main(null);}
     例如 生活中的例子 一个男人既是父亲也是儿子
         循环体是方法

44 try{ return 语句}finally{} 执行顺序是什么?
       Return 语句执行完后不会直接向调用者返回值,而是保持在内存中,等finally{}执行完后再返回值,若是finally{}语句修改了返回值,返回修改后的返回值。这样容易产生混乱,实际编程过程要避免。


45 final 、 finally、 finalize() 区别?
   finalize()方法是在system.gc()回收垃圾之前进行准备工作。


46 异常catch顺序?B继承A, A继承Exception
   Try{
    throw new B("b");

}catch(A e){sysou("a");
}catch(Exception e){
    sysou("Exception");}

输出 b。此题出自 Java thinking


47 Thread.sleep() / wait()  yield() 的区别是什么?
 

48。如何进行线程同步编程(银行存款)
   法一:对共享资源(共同方法)前加 synchronized修饰
   法二:在线程类中调用共享方法的时候,使用同步代码块进行同步
    run(){
          synchronized(account){account.deposit(money);}
    }
   法三:在共享资源所处的类中,添加一个Lock成员变量
    private Lock accountLock=new ReentrantLock();
   法四:Semaphore实现同步
   法五:CountdownLatch实现同步


49 编写线程类有几种实现方式?
   法一:继承Thread类 ,是单继承,不推荐
   法二:实现runnable接口,接口更灵活
   法三:实现Callable接口,重写 public T call(){}


50 启动一个线程是调用run()还是start()?
   是调用start(),使jvm运行,jvm调用run()


51 什么是线程池?
   设计背景
      创建和销毁对象是非常消耗时间和内存资源的,每创建一个对象,jvm就要一直跟踪它,当对象不是需要了,jvm进行垃圾回收。这样就产生了“池化资源”技术
    线程池
     事先创建多个线程对象放入一个容器中,需要时直接从容器中获得,用完再放入池中。这样减少了创建对象和销毁对象对内存资源的开销
  线程池接口
    Executor  ExecutorService--
    Executors工具类提供了创建线程池的静态工厂方法
      newSingleThreadExecutor()
      newFixedThreadPool()
      newCachedThreadPool()
      newScheduledThreadPool()

52. Synchronized 与 lock的异同是什么?
     Syn自动释放锁
     Lock需要手工释放锁


53 Statement /PreparedStatement /CallableStatement 区别?
  Prepared可以对sql语句进行预编译,减少sql语句编译错误;
  Pre 使传入sql语句中参数是占位符,减少用字符串拼接sql语句注入带来的不安全;
  Pre 具有缓存sql语句作用,对频繁执行的相同查询,不需要重复查询数据库,性能好
  CallableStatement提供对存储过程的调用。存储过程是指数据库中可以实现特定功能的sql语句集合。存储过程优点减少网络传输的开销,缺点数据库迁移,不同数据库之间存储过程的书写不一致,

54 jdbc操作数据库时,如何提升读取数据的性能?更新数据库的性能?
    
读:通过ResultSet的setFetchSize()方法指定每次抓取的记录数,抓取越多,查询越快,用空间换时间;
    
更新:使用Preparedstatement构建批量处理。


     

55   

事务的四种属性是什么?
    原子性  atomic
    一致性 
   隔离性
   持久性

 56  数据并发访问操作,会产生哪些问题?
  脏读: A事务读取B事务未提交的数据,若B事务执行回滚,那么A事务读取的就是脏数据
  不可重复读:A事务前后两次读取的数据不相同,在读取前后数据被B事务修改过
 幻读:A事务查询的结果集比之前查询多处一些数据,原因是B事务添加了新数据
 第一类丢失更新:(A回滚,B事务更新的数据丢失)事务A回滚,事务B提交的更新数据都丢失;
 第二类丢失更新:(A提交,B事务更新的数据丢失)事务A的提交覆盖事务B已经提交的数据,造成事务B所做的操作丢失

57 如何解决数据并发访问问题?
     锁机制,数据库为用户提供了自动锁机制;用户通过选择隔离级别给数据加上不同类型的锁。
     隔离级别
      READ UNCOMMITED  不允许第一类丢失更新。注明:A事务回滚(uncommitted),B事务更新的数据不丢失。
      READ COMMITED   注明:当A事务提交成功时,B事务更新的数据不丢失。
      REPEATALE READ  注明: 当A事务重复读取数据时,事务前后保持一致。
      SERIALIZABLE  隔离级别最高

58JDBC 如何进行事务处理?
     将JDBC连接数据的一系列代码操作当作一个事务,连接过程中若是出现异常,进行回滚。
      Connection提供了处理事务的方法 
                                  setAutoCommit(true/false),可以实现系统自动提交和用户手动显式提交。
                                用户手动显式提交 使用 commit();
                   出现异常时,使用rollback();
                   jdk 3.0以后,引入了 savepoint保存点概念,可以设置保存点,实现回滚到指定保存点处

59  JDBC 能处理Blob和Clob数据类型吗?
      Blob是Binary large object    Clob 是 Character large object 
      可以处理,InputStream in = new FileInputStream("test.jpg")
           ps.setBinaryStream(2, in)

60  获得类的类对象有哪些方式?
            String str="hello";
       类型.class  例如  String.class
       对象.getClass() 例如 “hello”.getClass()
       Class.forName() 例如   Class.forName("java.lang.String")

61  反射这方面需要恶补

62 面向对象的  六原则一法则是什么?
    1单一职责原则:一个类只做它该做的事情,实现高内聚原则
    2开闭原则:对扩展开放,对修改关闭
    3依赖倒转原则:面向接口编程,声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型
    4里氏替换原则:任何时候都可以用子类型来替换掉父类型
    5接口隔离原则:接口要小而专,不要大而全
    6合成聚合复用原则:多用组合少用继承实现代码复用(将狗继承宠物改成狗类有一个宠物成员变量)
                                   类之间的三种关系:继承/组合/依赖 ,比如学生是人类,学生有姓名/年龄(成员变量),学生使用文具学习(方法参数)
    迪米特法则:低耦合原则

63 简述一下你知道的设计模式?
    工厂模式
    代理模式
    适配器模式
     双亲模式

64  线程安全和线程不安全的单例模式?
    public class Singleton {
    private Singleton(){}
    private static Singleton instance = new Singleton();
    public static Singleton getInstance(){
        return instance;
    }
}

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public static synchronized Singleton getInstance(){
        if (instance == null) instance = new Singleton();
        return instance;
    }
}

65 什么是UML?
    UML是统一建模语言,常用的建模工具:Viso  PowerDesign等

面试题整理(中)
      

     

你可能感兴趣的:(面试题,面试题,JAVA入门学习专栏,Java面试题整理)