zoukankan      html  css  js  c++  java
  • Java面试题整理

    Java基础部分

    • Java的基本数据类型有哪些?String是基本数据类型?

    共八种:
    byte(8位),short(16位),int(32位) 默认值 0
    long(64位) 默认值 0L
    float(32位) 默认值 0.0f
    double (64位) 默认值 0.0d
    boolean(1位) 默认值 false
    char(16位) 单一的Unicode字符
    String不是基本类型,引用类型的对象。

    • 一个“.java”源文件中是否可包含多个类?有什么限制?

    一个java文件中可包含多个类,但只能有一个public类,且其类名与文件名相同。

    • &和&&的异同

    同:&和&&和都可以作逻辑与运算符
    异:
    &&作逻辑与运算符时具有短路功能
    &可用作位的与运算符

    // 若str为null时,不会抛出异常,因短路,equals不执行
    if(str != null && !str.equals(""))
    // 若若str为null时,抛出NullPointerException异常,equals执行
    if(str != null & !str.equals(""))
    
    • switch语句能否作用在byte上,能否用在long,String上?

    switch(expr)中变量类型可以是byteshortintchar及对应的包装类
    从JavaSE 5 后可以是枚举类型
    从JavaSE 7后可以支持String
    不可用作longdoublefloatboolean及其包装类上

    • short s1 = 1;s1 = s1+1;有什么错?short s1 = 1;s1+=1;呢?

    前者会报需要强制转换类型的错,因:

    short s1 = 1;
    // s1 + 1运算时结果会转化为int类型
    // int无法自得转为short
    s1 = s1 + 1;
    

    后者编译通过,因:
    在Java中编译器会对s1 += 1作特殊处理
    (Tyep) a + = b操作等于(Type) a = (Type)(a + b)
    所以已经转型过了,无错误。

    • 使用final关键字修饰一个变量时,时引用不能变,还是引用对象不能变?

    final修饰的变量,引用不能变,但引用的对象能变

    https://www.cnblogs.com/guweiwei/p/6594552.html
    补充: final关键字

    • “==”和equals方法的区别?

    操作符专门用来比较两个变量的值是否相等, 也就是用于比较变量所对应的内存中所存
    储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等, 只能用
    操作
    符。
    如果一个变量指向的数据是对象类型的, 那么, 这时候涉及了两块内存, 对象本身占用一块
    内存(堆内存) , 变量也占用一块内存, 例如 Objet obj = new Object();变量 obj 是一个内存,
    new Object()是另一个内存, 此时, 变量 obj 所对应的内存中存储的数值就是对象占用的那块
    内存的首地址。 对于指向对象类型的变量, 如果要比较两个变量是否指向同一个对象, 即要
    看这两个变量所对应的内存中的数值是否相等, 这时候就需要用操作符进行比较。
    equals 方法是用于比较两个独立对象的内容是否相同, 就好比去比较两个人的长相是否相
    同, 它比较的两个对象是独立的。 例如, 对于下面的代码:
    String a=new String("foo");
    String b=new String("foo");
    两条 new 语句创建了两个对象, 然后用 a,b 这两个变量分别指向了其中一个对象, 这是两个
    不同的对象, 它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的, 所以, 表达式
    a
    b 将返回 false, 而这两个对象中的内容是相同的, 所以, 表达式 a.equals(b)将返回 true。

    • 静态变量和实例变量的区别?

    语法定义上的区别:静态变量要用static修饰,实例变量不用;
    程序运行时的区别:静态变量在加载字节码文件时就会分配到空间,而实例变量要创建对象后才分配空间。
    使用时的区别:静态变量通过类名.变量调用,实例变量对象.变量调用。

    • 是否可从一个static方法内发出对非static方法的调用?

    不可以,要调用非static方法必须要有对象,但调用static方法时可能还没有产生对象。

    • Integer与int的区别?

    Integerint的封装类,Integer的默认值为null,int的默认值为0
    Integer可区分0和null的情况,int则不行
    Integer中还提供了多个与整数相关的方法。

    • Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?

    Overload是方法重载,指同一类中可以有多个相同名称的方法,但参数不同,返回值可相同也可不同。
    Override是方法重写,指子类在继承父类时,重写父类中的同名同参的方法,相当于将其方法内容覆盖。但子类只能抛出比父类更少的异常,或者父类的子异常。

    • Servlet的生命周期?

    Servlet 被服务器实例化后,容器运行其 init 方法, 请求到达时运行其 service 方法, service方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost) 等, 当服务器决定将实例销毁时候调用其 destroy方法。

    • 面向对象编程的特性?

    抽象,封装,继承,多态

    • 接口和抽象类的区别?

    1.接口中所有的方法都是抽象的,而抽象类里既可以有抽象方法,也可有非抽象方法;
    2.类可以实现多个接口,但只能继承一个抽象类;
    3.抽象类可以在不提供接口方法的情况下实现接口;
    4.接口中声明的变是默认是final的,抽象类可包含非final的变量;
    5.接口和抽象类都不可以被实例化,但抽象类中若有main方法的话是可被调用的。

    • 创建线程有几种不同的方式

    1.继承Thread类;
    2.实现Runnable接口;
    3.可使用Executor框架来创建线程池

    Spring相关

    • Spring的工作原理?
      1.spring mvc的请求会提交到DispatcherServlet,它会委托应用系统的其它模块对请求进行真正的处理;
      2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controler;
      3.DispatcherServlet的请求到到达目标Controller;
      4.Controller进行业务逻辑的处理后返回一个ModelAndView;
      5.Dispatcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图;
      6.视图对象负责渲并返回个客户端。

    • 解释下DI和IOC
      1.IOC即控制反转,也就是说对象的创建的控制不是角由对象内容部控制,而是交给容器去控制。比如对象的创建部是通过new进行创建,而是通过交给IOC容器创建。
      优点:有IOC容器后查找和创建依赖对象的控制权都了容器方,使对象间松散耦合,方便测试,利于功能复用。
      3.DI即依赖注入,是容器动态的将某依赖关系注入到组件中。具体的说就是IOC容器将对象注入到程序中。

    IOC与DI

    • 什么是AOP,AOP的作用是什么?
      AOP是切面编程,能够在不影响原有功能的前提下,为软件拓展功能。

    AOP

    • Spring框架有哪些不同的模块?
      1.核心容器模块
      2.应用上下文模块(ApplicationContext)
      3.AOP模块
      4.JDBC抽象和DAO模块
      5.WEB模块
      6.MVC模块

    • Spring里如何配置数据库驱动?

    <bean id=”dataSource”>
        <property name=”driverClassName”>
            <value>org.hsqldb.jdbcDriver</value>
        </property>
        <property name=”url”>
            <value>jdbc:hsqldb:db/appfuse</value>
        </property>
        <property name=”username”><value>sa</value></property>
        <property name=”password”><value></value></property>
    </bean>
    
    • 解释下Bean的生命周期?
      1.Spring对bean进行实例化,默认bean是单例;
      2.Spring对bean进行依赖注入;
      3.如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;
      4.如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;
      5.如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
      6.如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
      7.如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;
      8.如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
      9.此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
      10.若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;

    参考

    • JavaBean和SpringBean的区别?
      JavaBean是一种JAVA语言写的可重用组件。JavaBean符合一定规范写的Java类,是一种规范。它的方法命名,构造以及行为必须符合特定的要求:
           1.所有属性为private
           2.这个类必须具有一个公共的(public)无参构造函数
           3.private属性必须提供public的getter和setter来给外部访问,并且方法的命名也必须遵循一定的命名规范
           4.这个类是可序列化的,要实现serializable接口
      SpringBean是受Spring管理的对象 所有能受Spring容器管理的对象都可以成为SpringBean.
  • 相关阅读:
    学习笔记15—Python 存储集
    学习笔记14—Python error集
    学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值
    学习笔记12—linux下文件的复制、移动与删除
    学习笔记11—MATLAB 界面设计
    学习笔记10—Python 绘图集
    学习笔记9—python数据表的合并(join(), merge()和concat())
    学习笔记8—MATLAB中奇异值处理办法
    make ffmpeg makefile
    Linux Socket
  • 原文地址:https://www.cnblogs.com/flytree/p/11628289.html
Copyright © 2011-2022 走看看