2019-java面试基础总结


一、基础问题


**

1. -------------基础

**

2. Java基本数据类型,所占字节。

Float,4.double,8.byte,1.short,2.int,4.long,8.char,2.Boolean,1    

3. 字符窜的分割,替换,查找。

Replace,替换。Split,切割。Match,匹配。

5. List,set,map集合的区别,以及使用效率。

List有放入顺序,元素可重复,set无法拥有重复的元素,内部排序,map保存key-value值,可存多值

6. 浅谈ArrayList、linkedlist和vetor的区别。

1.ArrayList底层由数组实现,插入速度较慢,查询速度快,运行效率高,线程同步。

2.LinkedList:采用的是双向链表的方式进行存储数据的,查询和修改速度慢,但是增加和删除速度快

3.Vector:底层由数组实现,查询慢,增删慢,线程同步。

7. 简述HashMap的工作原理。

在讲插入过程之前,我们先来了解一下哈希表的结构。哈希表底层结构是一个Map.Entry<K,
V>[]数组, 可以先将它简单理解为一个包含键和值的结点的数组。在哈希表中,索引的每个单独的位置叫做桶(bucket)。底层的数组结构保证了哈希表的随机查找⚪(1)。

具体的插入过程如下:

  (1)对插入的K值做hashCode()方法,计算该K值的哈希值。


  (2)对该哈希值做hash(key)方法,得到该键所映射到的索引。


 (3)若该桶(bucket)内无键值对,则直接将键值对加入该桶。若该桶已被填充则以链表的形式添加到链表的第一个位置。(注释:为了插入效率考虑,将该值插入到链表头而不是链表尾,这样保证了插入操作时间复杂度为⚪(1)。而且插入的数据存在就可以了,顺序无所谓(HashMap是无序的))。若单个链表过长(达到默认长度8)为了查找效率会自动转化为红黑树。


  (4)若该桶内已有与其相同的key值,则覆盖原有键值对。

7. Session和cookie区别。

 Session存放于服务器端一种缓存,一般情况下,服务器在一顶时间内,(默认30分钟)保存这个session,过了时间限制,就会销毁这个session。   

 Cookiec存放与客户端,是session对象的一种,默认时间跟随浏览器的,不占用服务器资源,若设置有效时间将存储与硬盘上。

8. ==和equals区别。

 ==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值.
 
 equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值。

9. 重载和重写区别?重载的方法能否更据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态 性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果 有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重 载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法 有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明 更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。

10. 抽象类和接口区别。

共同点:

 接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承。

 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

区别:

1 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。

2 接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。

3 接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始         化操作。

4 接口里不能包含初始化块,但抽象类里完全可以包含初始化块。

5 一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。

11. 讲讲java的反射机制。

在运行过程中获得类、对象、方法的所有信息。

反射就是程序运行期间JVM会对任意一个类洞悉它的属性和方法,对任意一个对象都能够访问它的属性和方法。

  1. Servlet生命周期,详细说说。

     默认情况下 servlet在用户第一次访问的时候,执行init()方法,创建servlet对象。之后不会创建新的对象,servlet是单例的!
    
     在服务器关闭的时候 执行destory()方法销毁实例。
    
     servlet因为是单例的,所以存在线程安全问题,尽量避免使用公共变量!
    
     如果需要servlet在服务器启动的时候实例化,需要在web.xml中配置一下。  <load-on-startup>
    

13. Http协议的了解。

HTTP协议(HyperTextTransfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

14. 引用传递和值传递。

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
具体参考(https://blog.csdn.net/the_dying_man/article/details/73261546)

15. Map集合的循环遍历(2种方法)
共四种方法,以下是其中两种:

   // 遍历方法之一 treemap keySet()遍历

   for (Object o : tempMap.keySet()) {
    System.out.println("key=" + o
     + " value=" + tempMap.get(o));
   }
   System.out.println("11111");


 // JDK1.5中,应用新特性For-Each循环遍历方法之二

   for (Map.Entry<String, Integer>
     entry : tempMap.entrySet()) {
    String key = entry.getKey().toString();
    String value =
     entry.getValue().toString();
    System.out.println("key=" +
     key + " value=" + value
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值