春季面试题

戴尔面试题

1、如何解释时间复杂度?

定性描述算法的运行时间的函数

2、讲一下快速排序是如何实现的?并说明其时间复杂度如何计算?

3、说一下Java集合的接口都有哪些?

4、说一下Hash Map的结构?

5、Hash Map与Tree Map有什么区别?

6、看过哪些和技术有关的书籍?

7、英文的自我介绍,以及项目介绍

酷家乐面试题

1、讲讲对final关键字的理解,以及用在哪些地方?(final的意思,最后的最终的,因此表示为不能再改变,所以final修饰的类不能被继承(被final修饰的类,方法会被隐式的设定为final,final修饰的方法不能被继承,final修饰的变量不能被修改)

https://www.cnblogs.com/xiaoxi/p/6392154.html

  • 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法
  • 修饰类:当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法
  • 修饰方法:使用final方法的原因有两个,第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率,在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)
  • 修饰变量:修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。final**成员变量表示常量,只能被赋值一次,赋值后值不再改变。**当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

2、讲讲对static关键字的理解,以及用在哪些地方?

https://www.cnblogs.com/xrq730/p/4820992.html

  • 静态变量和静态方法:被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来,被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来

  • 被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?个人认为主要有三个好处:

    1、不同的类有自己的静态资源,这可以实现静态资源分类。比如和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了

    2、避免重名。不同的类之间有重名的静态变量名、静态方法名也是很正常的,如果所有的都放在一起不可避免的一个问题就是名字重复,这时候怎么办?分类放置就好了。

    3、避免静态资源类无限膨胀,这很好理解。

    OK,再微微深入一下,也是有些人容易混淆的一个问题:静态方法能不能引用非静态资源?静态方法里面能不能引用静态资源?非静态方法里面能不能引用静态资源?比如就以这段代码为例,是否有错?

    public class A
    {private int i = 1;public static void main(String[] args){i = 1;//报错,因为static方法在类初始化的时候就已经加载了,而非静态资源是new对象的时候加载的,所以这里的i相当于还没有被初始化}
    }
    
    • 1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。

      2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。

      3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。

3、String类是否可以被继承?

  • 不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。

4、有没有使用过Java中的Volatile关键字,讲讲你的理解?

5、如果A线程与B线程共享一个变量,那么应该要注意些什么?会存在什么问题?

6、LinkedHashMap?

7、谈谈对Spring中的IOC的理解?

8、谈谈对Spring中的AOP的理解?

9、多线程的相关面试题

https://blog.csdn.net/qq_20042935/article/details/106404190

数坤科技面试题

1、==号与equals的区别?

  • 在JVM中内存分为堆内存和栈内存。他们二者的区别是:当我们创建一个对象(new object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用
  • 值得注意的是,基本数据类型是存储在栈内存中的
  • ==号是判断两个变量或者实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
  • ==比较的是内存地址,equals比较的是内存空间中的内容
  • 举例:String a=“11233”;String b=“11233”,那么如何对这两个字符串进行比较。应当通过equals进行比较,因为八大基本类型是直接存储在栈内存中的,在栈中存储的有变量名还有值,而String类型不是基本类型,String的对象是存储在堆内存中的,在栈中存储的是堆内存中的地址,所以如果使用==号比较的话,就不会相等,而使用equals的话就返回true

2、Java的基本数据类型有哪些?

  • Java的基本数据类型一共有八种:byte,short,int,long,float,double,char,boolean

  • 基本数据类型之间的转换:数据类型从低到高的排序 byte

  • 当数据类型之间进行计算时,java会将所有数据类型自动从排序最小的转换为排序最大的数据类型,然后再计算,如果要从高转向低的则需要强制转型

附加:Java中的基本数据类型一定存储在栈中吗?

首先说明这句话是错的!

  • 基本数据类型是放在栈中还是堆中,这取决于基本类型在何处声明;1、在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统会为该方法建立一个方法栈,其所在方法中声明的变量就会存放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就是局部变量只能在方法中有效的原因所在。
  • 在方法中声明的变量可以是基本变量也可以是引用类型的变量;1、当声明是基本类型的变量时,其变量名及值都是存放在Java虚拟机栈中的。2、当声明的事引用变量时,所声明的变量(实际上是堆内存的地址值)是放在Java虚拟机栈中的,该变量所指的值是存放在堆内存中的。
  • 在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法的执行结束而销毁);在类中声明的变量可以是基本类型的变量也可以是引用类型的变量;1、当声明的是基本类型的变量,其变量名及其值放在堆内存中;2、当声明的变量是引用类型的变量时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中。

3、接口与抽象类的区别?接口中的方法,属性与抽象类中方法,属性的区别?

  • 概念上的区别!
  • 抽象类是从一些类中抽取出它们共有的属性(例如某些相同的成员变量、属性相同的方法),注意方法的修饰符可以为public或者protected,因为如果是private则子类无法继承,缺修饰符的情况下默认为public,抽象类注重对于类本身的抽象,不止局限于行为,抽象方法没有方法体,仅仅是声明了该方法,让继承它的子类去实现。
  • 接口主要是对类的行为的抽象,接口也可以有变量和方法,但是变量以及方法的修饰符都必须分别是public static final(省略时默认也是这个)和public abstract(省略时默认也是这个)。
  • 注意在Java8以后,对接口做了新的修改,允许接口有默认的方法default,即可以为接口添加实现方法,这样实现接口的类就不需要做任何的改动就能继承该接口所实现的该默认方法了;这样就使得接口与抽象类更加的相似了(因为抽象类也是如此,不仅可以存在抽象方法还可以有具体的已经实现了的方法)
  • 书写语法上的区别!
  • 一个是public abstract class,一个是public interface
  • 单继承与多实现的区别!
  • 一个类只能继承一个抽象类,但是一个类可以实现多个接口
  • 能否包含构造方法
  • 接口中不允许包含构造方法,因为接口中的成员变量都是static final变量,是在编译时就完成了初始化操作,而且接口的方法也是抽象方法,是声明之后让实现它的类去完善该方法体的
  • 抽象类中可以有构造方法,因为抽象类除了有抽象的方法以外,其余地方与普通的类是没有什么区别的,所以可以通过构造方法完成一些初始化的操作

4、Arrays.asList与Arraylist的区别?

5、Sleep与wait的区别?

6、创建多线程的方法有哪些?

7、请简述SpringMVC的运行机制?以及运行机制的流程?

8、请谈一下Spring MVC的工作原理是怎样的?

9、Spring的注解有哪些?

10、锁的种类有哪些?

11、如果A线程需要B线程中的资源,B线程需要A线程中的资源,然后形成死锁如何解决?

12、String类能不能被继承?为什么不能被继承?

兴证全球基金笔试题

1、Try-Catch-Finally的执行顺序

2、重载与重写的区别

  • 重载:方法的名称相同,参数类型或者参数的个数不同,对权限没有要求,需要写在同一个类中
  • 重写:方法名称,参数的类型,返回值的类型全部相同,被重写的方法不能拥有比父类更加宽松的权限(即权限不能在方法重写时被扩大),发生在继承或者实现中,不是同一个类
  • 注意:重载中的方法,返回值类型不同或者访问修饰符不同,不能构成重载

3、int a=10,double b=3.14,那么‘A’+a+b的值为什么类型?

  • Java的基本数据类型一共有八种:byte,short,int,long,float,double,char,boolean
  • 基本数据类型之间的转换:数据类型从低到高的排序 byte
  • 当数据类型之间进行计算时,java会将所有数据类型自动从排序最小的转换为排序最大的数据类型,然后再计算,如果要从高转向低的则需要强制转型

4、JSP的生命周期

  1. 编译阶段:servlet容器编译servlet源文件,生成servlet类
  2. 初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
  3. 执行阶段:调用与JSP对应的servlet实例的服务方法
  4. 销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部