java 开发面试指南(持续更新)

本文作者根据自己的面试经历,整理了一份详细的Java开发面试指南,涵盖java基础、进阶、数据库、缓存、线程等多个方面。内容包括:可变与不可变对象的区别,Integer与Long的缓存机制,字符串拼接的最佳实践,线程状态及其转换,泛型与类型擦除,单例模式实现,集合接口与实现,以及并发编程相关的AQS、锁、线程池等内容,还涉及数据库事务、索引结构和缓存策略,最后提到了Linux基础知识和数据结构算法。
摘要由CSDN通过智能技术生成

前言

笔者目前从事java开发,14年毕业后,有幸加入了一家一流的互联网企业,前一段时间,由于个人原因换工作,面试了大大小小十几家公司。现在再回顾面试经历,发现终归有一个规律可循,有一些共性的技术要了解,写此文档,一方面为了巩固下相关的知识,另一方面,如果有幸帮到一些正在找工作的朋友,实乃我的幸事。

java基础

  1. 基础

    1. 可变对象与不可变对象

      可变对象与不可变对象是指对象在实例化后是否可以还可以被改变,其内部属性是否可以改变。不可变的对象的优势在于多线程是线程安全的。注意这个与final没有关系,final表示的是该引用是否可以被重新被赋给一个新对象。
      比如String对象就是一个不可变对象,其的各种函数返回值为String的函数都返回的是一个新对象。

    2. Integer与Long的缓存问题

      IntegerLong中都有一个缓存,大小都为-128~127,即当使用valueOf()创建IntegerLong类型的对象,并且值大小为-128~127 之间时,会返回缓存中的对象。这里面的考查点就是比较两个整型或者两个长整型变量是否相等,以及装箱与拆箱用的是哪个函数。如下,答案分别为true,false,true,false

      Integer a = 1;
      Integer b = 1;
      System.out.println(a == b);
      System.out.println(new Integer(1) == new Integer(1));
      System.out.println(Integer.valueOf(1) == Integer.valueOf(1));
      System.out.println(Integer.valueOf(200) == Integer.valueOf(200));
    3. 字符串拼接StringBuilderStringBuffer

      StringBuilder是线程不安全对象,而StringBuffer是线程安全对象,String对象的 ‘+’号操作,在jdk1.6以后,在编译的时候,自动会被编译成StringBuilder对象操作。所以如果是连续的多个String相加,则可以直接用’+’号进行拼接,但是如果是在一个循环中对同一个对象相加,则还是需要采用StringBuilder,如下

      String start = "a";
      for(int i = 0; i <= 10; i++){
          start = start + i;
      }

      在上面的例子中,尽量用StringBuilder替换 ‘+’号,如果采用上面的方法,就会在for循环过程中会成多个临时的String对象。

    4. 线程

      1. 开启一个新线程

        1. 方案1:定义一个新类,继承Thread,实现run方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值