最新公告
  • 欢迎您光临码巴巴,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 2022年最全javaweb基础面试题|持续更新

    1.java的4大特性

    ● 封装的概念:

    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

    ● 继承的概念:

    子类继承父类的方法和属性,使得子类具有父类相同的行为。 定义继承的格式如下:class 子类 extends 父类 { }

    ● 引用多态 :

    父类的引用可以指向本类的对象;
    父类的引用可以指向子类的对象;

    ● 抽象

    抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么

    抽象和封装的不同点

    抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。

    2.被面试到的问题

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

    Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。

    Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

    2.JDK和JRE和JVM的区别?

    1. JDK
    JDK ( Java SE Development Kit ), Java 标准的开发包,提供了编译、运行 Java 程序所需要的各种工具
    和资源 ,包括了 Java 编译器、 Java 运行时环境、以及常用的 Java 类库等。
    2. JRE
    JRE ( Java Runtime Environment ) , Java 运行时环境,用于解释执行 Java 的字节码文件 。普通用户只
    需要安装 JRE 来运行 Java 程序即可,而作为一名程序员必须安装 JDK ,来编译、调试程序。
    3. JVM
    JVM ( Java Virtual Mechinal ), Java 虚拟机,是 JRE 的一部分。 它是整个 Java 实现跨平台的核心 ,负责
    解释执行字节码文件,是可运行 Java 字节码文件的虚拟计算机。所有平台上的 JVM 向编译器提供相同的
    接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
    当使用 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码,这些字节码只面向 JVM 。也就是说
    JVM 是运行 Java 字节码的虚拟机。
    不同平台的 JVM 是不同的,但是他们都提供了相同的接口。 JVM 是 Java 程序跨平台的关键部分,只要为不
    同平台实现了相同的虚拟机,编译后的 Java 字节码就可以在该平台上运行。

    3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

    “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

    Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

    4.是否可以在static环境中访问非static变量?

    static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

    5.什么是值传递和引用传递?

    对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。

    对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

    3.Java线程

    1.进程和线程的区别是什么?

    进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。

    2.创建线程有几种不同的方式?你喜欢哪一种?为什么?

    有三种方式可以用来创建线程:

    继承Thread类实现Runnable接口应用程序可以使用Executor框架来创建线程池实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

    3.概括的解释下线程的几种可用状态。

    线程在执行过程中,可以处于下面几种状态:

    就绪(Runnable):线程准备运行,不一定立马就能开始执行。运行中(Running):进程正在执行线程的代码。等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。睡眠中(Sleeping):线程被强制睡眠。I/O阻塞(Blocked on I/O):等待I/O操作完成。同步阻塞(Blocked on Synchronization):等待获取锁。死亡(Dead):线程完成了执行。14.同步方法和同步代码块的区别是什么?

    在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。

     

    4.什么是死锁(deadlock)?

    两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

    5.如何确保N个线程可以访问N个资源同时又不导致死锁?

    使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

     

    Java集合类

    1. List,Set,Map三者的区别?

    List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector

    Set:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet

    Map是一个键值对集合,存储键、值和之间的映射。 Key无序,唯一;value 不要求有序,允许重复。Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap

    2. 集合框架底层的数据结构

    List集合

    Arraylist和Vector使用的是 Object 数组, LinkedList使用双向循环链表

    Set集合

    HashSet(无序,唯一):基于 HashMap 实现的,HashSet的值作为key,value是Object类型的常量

    LinkedHashSet继承HashSet,并且通过 LinkedHashMap 来实现的

    TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树。)

    Map集合

    HashMap由数组+链表+红黑树组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,当链表长度大于阈值(默认为8)并且数组长度大于64时,将链表转化为红黑树

    LinkedHashMap(有序) 继承自 HashMap,底层仍然是数组+链表+红黑树组成。另外,LinkedHashMap 在此基础上,节点之间增加了一条双向链表,使得可以保持键值对的插入顺序

    HashTable无序,数组+链表组成的,数组是 HashTable的主体,链表则是主要为了解决哈希冲突而存在的

    TreeMap有序,红黑树

    3. 集合框架的扩容

    ArrayList和Vector默认初始容量为10,当元素个数超过容量长度时都进行进行扩容,ArrayList扩容为原来的1.5倍,而Vector扩容为原来的2倍

    HashSet和HashMap默认初始容量为16,加载因子为0.75:即当元素个数超过容量长度的0.75倍时,进行扩容,扩容为原来的2倍。HashSet基于 HashMap 实现的,因此两者相同

    HashTable:默认初始容量为11,加载因子为0.75,扩容策略是2倍+1,如 初始的容量为11,一次扩容后是容量为23

    4、什么是集合,集合有哪些特点,它与数组的区别

    集合就是存储数据的容器;

    特点将数据封装成不同的多个对象;

    它们两者之间存储的容量不同,数组是固定长度,集合是可变的;内存指向的引用也不同,数组可以存储基本数据类型,但集合只能存储引用数据类型;存储的数据类型也不一样,数组存储类型需保持一致性,但集合可以存储不同数据类型。

    5、集合框架使用的好处有哪些,常用的集合框架有哪些

    集合框架好处:集合容量可以自增长;现有jdk集合框架可直接拿来调用,易于维护;扩展性、操作性和重复利用性比较高

    常用集合框架:mapcollection,作为map接口集合的框架包括HashMapTreeMapHashTableConcurrentHashMap等;collection接口集合框架包括Set接口和List接口,而Set接口实现类有:HashSetTreeSetLinkedHashSet等,List接口实现类有:ArrayListLinkedListVector等。

    6、哪些集合类是线程安全的

    VectorHashTable常用的集合类是线程安全的,主要是在它们底层加上了线程同步安全锁synchronized;常见的ArrayListHashMap都是线程不安全的,但它们执行的效率比较高。

    7、迭代器Iterator作用,它与ListIterator之间的区别

    Iterator作用可以遍历实现Collection接口,取代了以前的Enumeration

    区别:Iterator只能单向遍历,LIstIterator可以双向遍历,即往前往后。

    8、List遍历的方式有哪几种,是怎么实现的

    For循环遍历,它是通过外部定义的计数器,进行循环遍历读取。

    Iterator迭代器遍历,它是面对对象的遍历。

    Foreach循环遍历,采用iterator方式实现,不需要显示申明计数器,代表比较简单,但缺乏数据操作,比如添加、删除之类。

    9、ArrayListLinkList之间区别

    在查询方面ArrayListLinkList快,因为ArrayList是动态数组结构,而LinkList是双向线性链表结构,需要移动前后指针;在增加、删除上LinkListArrayList快,因为ArrayList在操作数据时,需要影响它们前后索引的下标;在内存占有率上,LinkListArrayList占有率上比较大,因为它的存储有两个引用,即前一个指针指向,后一个指针指向。

    10、ArrayListVector之间区别

    ArrayListVector都是实现了List接口,在线程安全上,Vector是安全的,同步机制,而ArrayList是非线程安全的,所以导致它比Vector操作数据更快。

    4.异常处理

    1.Java中的两种异常类型是什么?他们有什么区别?

    Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。

    2.Java中Exception和Error有什么区别?

    Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。

    3.throw和throws有什么区别?

    throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

    4.异常处理的时候,finally代码块的重要性是什么?

    无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。

    5.异常处理完成以后,Exception对象会发生什么变化?

    Exception对象会在下一个垃圾回收过程中被回收掉。

    6.finally代码块和finalize()方法有什么区别?

    无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。

     

    1. 本站所有资源来源于用户上传和网络,如有侵权请及时联系站长!

    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!

    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!

    5. 如有链接无法下载、失效或广告,请联系管理员处理!

    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

    7. 如遇到加密压缩包,默认解压密码为"mababa.xin",如遇到无法解压的请联系管理员!


    码巴巴-优质代码创造者 » 2022年最全javaweb基础面试题|持续更新

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    一个高级程序员模板开发平台
    问问管理员?

    4 评论

    1. nb

    2. 哇,当年我进sun公司全靠它

    3. hao

    4. 😅

    发表评论

    • 21会员总数(位)
    • 44资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 817稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    升级SVIP尊享更多特权立即升级