JavaSE 与 Web - - 面试相关 (一)

个人博客网:https://wushaopei.github.io/    (你想要这里多有)

1、 Int 和 integer 的区别?

Integer是int的包装类,int则是java的一种基本数据类型

②Integer变量必须实例化后才能使用,而int变量不需要

③Integer实际是对象的引用,当new 一个Integer 时,实际上是生成一个指针指向此对象;而int则是直接存储数据值

④Integer 的默认值是null,int 的默认值是 0

2、 在写代码时什么时候用int、什么时候用integer?

当需要往ArrayList 、 HashMap中放东西时,需要使用int的外覆类,也就是Integer.

因为要放入的数据必须作为对象来装入,也以为着普通的数据类型不能放在里面。

3、想比较int  和 integer  两个的值是否相同?

对Integer进行拆箱即可  —— IntValue();

4、 重载和重写两个方法分别是在哪个时候生效的?是编译或者运行?

调用哪个重载是在编译器做的决定,对象的运行时类型不影响哪个重载版本被执行;

重写是编译时,我们多态的父类引用指向子类对象,编译时看父类,运行时看子类。

5、关于Stringbuilder 、StringBuffer 的区别?

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的;

  • 即,StringBuilder 适用于单线程下在字符缓冲区进行大量操作的情况
  • 而StringBuffer 适用于多线程下在字符缓冲区进行大量操作的情况
  • StringBuffer的数据是怎么保存?

StringBuffer对象在使用时只会开辟一个堆内存空间,每次使用都是指向那个堆内存空间。

6、 关于类加载的原理?

每个编写的“.java”扩展名类文件都存储着需要执行的程序逻辑,这些“.Java”文件经过java编译器编译成扩展名为“.class”的文件,“.class”文件中保存这java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的“.class”文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载。

7、关于类加载器的了解?

类加载器的机制的层次结构:

  • 启动 Bootstrap类加载器
  • 扩展Extension类加载器
  • 系统System类加载器

类的生命周期:

 

8、一个类中,一个静态变量,一个静态方法,一个非静态方法,一个非静态变量,一个静态代码块,它们的执行顺序?哪些方法会被执行?

父类静态代码块 >子类静态代码块>父类构造方法>子类构造方法>父类无参构造>子类无参构造

注意

       静态方法和静态变量需要使用类名调用才能执行。

9、关于数组和链表的区别?

内存中,数组是一块连续的区域,而链表可以存在任何地方不要求连续。

数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间;且数组插入数据和删除数据效率低,插入数据是,这个位置后面的数据在内存中都要向后移。删除数据时,这个数据后面的数据都要往前移动;随机读取效率很高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据;不利于扩展,数组定义的空间不够是要重新定义数组。

链表中每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。增加数据和删除数据很容易。查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的地址找到第二个数据,以此类推。不指定大小,扩展方便。链表大小不用定义,数据随意增删。

10、HashMap 的长度与底层原理

【1】Hashmap 的长度、加载因子是多少?

长度是16,加载因子是0.75;

【2】HashMap的底层结构是:

数组、链表、红黑树

【3】Hashmap什么时候会用到链表?

发生哈希碰撞时

【4】 Hashmap里的红黑树是什么?

一个节点标记为红色或者黑色;根节点为黑色;一个节点为红色,其子节点必须是黑色;一个节点到一个null引用的每一条路径必须包含相同数目的黑色节点(平衡)

【5】HashMap提供了三个构造函数:

      HashMap():构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

      HashMap(int initialCapacity):构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。

      HashMap(int initialCapacity, float loadFactor):构造一个带指定初始容量和加载因子的空 HashMap。

例:我现在要存一个长度为16的值时,应该使用什么?

如果要添加到集合中的数据长度为16,建议使用有参构造,直接声明长度 -- new HashMap(16); 如使用空参会进行自增长,有损性能。

6hashmap和hashtable的区别,问什么要用hashmap

两者几乎相等,

① 区别在与hashmap是线程不安全的,即没有synchronized锁;

②且hashmap是可以接收null的键值key和值 value ,而hashtable不行;

③Hashtable是线程安全的,在单线程环境下它比hashmap慢;

  • 在不需要线程同步的单一线程情况下,建议使用hashmap;

【7】关于 Concurrenthashmap  的优点?

ConcurrentHashMap具有锁分段的技术,使用起来比hashmap和 hashTable要优良。

  • 原因: Hashmap是线程不安全的,所以一般在并发环境下不建议使用;而HashTable虽然是线程安全的,但是由于使用了同步锁,在高并发环境下效率低下;因为所有访问HashTable的线程都必须竞争同一把锁。假如容器中有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap锁所使用的锁分段技术。
  • 应用场景:当有一个大数组时需要在多个线程共享是就可以考虑是否把它给分成多个节点了,避免大锁。

11、Servlet创建的时候会有什么被创建吗?

当浏览器第一次访问Servlet的时候,服务器为该Servlet创建实例,该实例会永驻内存,当服务器关闭或当前应用被移出服务器时,Servlet实例才会被销毁。

12、Servlet和Tomcat有什么区别?

Servlet是一种技术,使用Servlet技术,需要有一个Servlet运行环境,也就是需要有一个Servlet容器,tomcat就是一个容器。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值