金三银四BAT及各大互联网巨头Java面试通关要点汇总集 - 解答(1)

Java面试题总结

参考的是这个
金三银四BAT及各大互联网巨头Java面试通关要点汇总集

一、基础篇

基本功

  • 面向对象的特征
    封装、继承、多态、抽象

  • final, finally, finalize 的区别
    final 是修饰符,修饰类表示某个类的是最终类,不可被继承,方法是最终方法,不可被重写。 finally 是try,catch 一块用,最后执行的代码块 , finalize object析构函数,一般垃圾回收调用。
    参考final、finally、finalize区别

  • int 和 Integer 有什么区别
    int 基本数据类型, Integer包装类型

  • 重载和重写的区别
    参考 重载与重写的区别
    override(重写)

       1、方法名、参数、返回值相同。

       2、子类方法不能缩小父类方法的访问权限。

       3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

       4、存在于父类和子类之间。

       5、方法被定义为final不能被重写。

     overload(重载)

      1、参数类型、个数、顺序至少有一个不相同。

      2、不能重载只有返回值不同的方法名。

      3、存在于父类和子类、同类中。

  • 抽象类和接口有什么区别
    抽象类是abstract修饰的类 ,定义方法,可以有方法体
    接口interface ,声明,没有实现
    第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
    第二点. 接口可以多继承,抽象类不行
    第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
    第四点. 接口中基本数据类型为static 而抽类象不是的。

  • 说说反射的用途及实现
    Java反射机制主要用于实现以下功能。

(1)在运行时判断任意一个对象所属的类型。

(2)在运行时构造任意一个类的对象。

(3)在运行时判断任意一个类所具有的成员变量和方法。

(4)在运行时调用任意一个对象的方法,甚至可以调用private方法。

  • 说说自定义注解的场景及实现

    1.声明自定义注解,并限制适用范围(因为默认是通用)
    2.规定范围内使用注解
    3.isAnnotationPresent(Insert.class)检查注解,getAnnotation(Insert.class).value()取得注解内容
    4.根据实际场景应用

  • HTTP 请求的 GET 与 POST 方式的区别
    安全性 可见性 传输长度 语义性

  • session 与 cookie 区别

  • session 分布式处理

    1. 前端cookie保存, 每次带给后端, 缺点是占用外网带宽
    2. 后端session复制, 缺点是占用内网带宽
    3. 固定服务器访问,haship, 缺点是水平扩展rehash 失去session
    4. 缓存服务器,缺点是需要编码实现, 目前采用最普遍的方式是这一种
  • JDBC 流程

    1. 注册驱动
    2. 获得连接
    3. 创建sql
    4. 执行sql
    5. 处理结果集
    6. 关闭连接
  • MVC 设计思想
  • equals 与 == 的区别
    Object equals 是==, 比较的是对象内存地址,
    String重写了equals, 比较的是字符串的内容

集合

  • List 和 Set 区别
    List:
    1.可以允许重复的对象。
      2.可以插入多个null元素。
    3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
    4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList则对于经常需要从 List 中添加或删除元素的场合更为合适。\
    Set
    1.不允许重复对象
       2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
    3. 只允许一个 null 元素
    4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器

  • List 和 Map 区别
    一个是集合, 一个是键值对

  • Arraylist 与 LinkedList 区别
    一个底层数组实现,一个链表实现

  • ArrayList 与 Vector 区别
    一个非线程安全, 一个线程安全
  • HashMap 和 Hashtable 的区别
    一个非线程安全, 一个线程安全
  • HashSet 和 HashMap 区别
    一个是Set的实现,一个是Map键值实现,
    HashSet 底层是用HashMap key 实现

  • HashMap 和 ConcurrentHashMap 的区别
    一个非线程安全,一个线程安全, 分段锁实现

  • HashMap 的工作原理及代码实现
    hask(key) % length , 取得位置, 冲突进链表, 大于八转为 TreeBin, 红黑二叉树
  • ConcurrentHashMap 的工作原理及代码实现
    分段锁, 减小锁粒度, 在size containsKey 上才需要全局锁
    注意去查看源码, 分段锁到底是如何分段加锁的

线程

  • 创建线程的方式及实现
    1. 继承Thread , 实现Runnable接口
    2. 线程池 ExecuteService
  • sleep() 、join()、yield()有什么区别
    sleep 当前线程休眠,不交锁
    join 当前线程加入别的线程执行,执行完后继续再执行本线程
    yield 交出锁重新竞争

  • 说说 CountDownLatch 原理
    闭锁,一般用在当前线程等待其他若干线程执行完毕,再执行,在当前线程需要等待的地方调用await, 然后其他线程里执行完毕,调用 countDown(), 对计数减一操作, 当计数为0, 线程继续执行

  • 说说 CyclicBarrier 原理
    栅栏, 一般用作一组线程都到达某个位置,再执行或再优先执行某个线程, 某线程运行完调用await, count++, 直到所有线程就绪

  • 说说 Semaphore 原理
    信号量, 维护一个阻塞队列, 某线程需要执行,就去获得 许可, 得到后执行, 执行完就 release释放许可
  • 说说 Exchanger 原理
  • 说说 CountDownLatch 与 CyclicBarrier 区别
    闭锁只能用一次, 栅栏有reset方法,可重复使用
    闭锁需要手动减一操作, 栅栏自行加1
    闭锁一般用于一个线程等待一组线程, , 栅栏一般用于一组县城等待另一组线程
  • ThreadLocal 原理分析
    线程内变量,
  • 讲讲线程池的实现原理
  • 线程池的几种方式
    几种线程池,包括构造方法, 参数列表
  • 线程的生命周期
  • 锁机制

  • 说说线程安全问题

  • volatile 实现原理
  • synchronize 实现原理
  • synchronized 与 lock 的区别
  • CAS 乐观锁
    compare and swap, 比较并交换, 如果内存位置V的变量和预期的一致,那么就把它更新了
  • ABA 问题
    上述解决方法存在ABA问题,
  • 乐观锁的业务场景及实现方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值