面试-基础篇

前言

上一篇文章我们完成了简历的编写,接下来就该进行技术了,技术这块主要会围绕如下几个方面。

1、java基础

  • 集合框架
    • list与set的区别
    • ArrayList、LinkedList、Vector的区别
    • Map、Set、List、Queue、Stack的特点与用法
    • map在for循环状态下使用remove()为何会抛出异常
    • set与list的区别
      结合使用场景去描述
    • 线程安全的集合类以及优化,cow模式
    • hashmap的实现
      此处需要深入了解源码,及hashmap多线程环境下会出现什么问题,这个几乎是必问,结合jdk1.7与jdk1.8的区别
    • hashtable与concurrenthashmap
      concurrenthashmap结合源码,jdk1.7与1.8的区别
    • 线程安全的各种集合类,cow模式等
  • final关键字,finally关键字
  • 异常的分类及处理,结合aop
  • 面向对象的五大职责
    结合项目或者某些源码进行描述
  • classloader的加载机制
  • 重写equals时为何要重写hashcode(),不重写会出现什么问题
  • java基础类型的向上转型,丢失精度问题
  • String类为何是不可变的,string的equals方法是如何实现的?
  • 接口与抽象类的区别,为何要这样设计?
  • 重载与重写
  • IO的优化,NIO
  • Object有哪些通用方法?
  • String、StringBuffer与StringBuilder的区别
  • 一致性hash
  • Java对象的生命周期

2、多线程与并发

  • wait()和notify()
  • 多线程环境下让3个线程依次按顺序执行,如何实现?
  • 创建线程的几种方式,应用场景?
    继承thread类,实现runnable或者callable接口
  • 线程和进程有什么区别?
  • 用 wait-notify 写一段代码来解决生产者-消费者问题?
  • 用java写一个线程安全的单例模式
    double check和枚举类型两种方式,延伸会问为何要double-check,枚举为何是线程安全的
  • notify()与notifyAll()有什么区别?
  • 如何获得线程的堆栈信息?
  • 线上服务器cpu 100%了,该如何排查问题?
  • i++ 操作在多线程环境下会出现什么问题?怎么解决?
    考虑使用AtomicInteger等相关的类
  • fork-join框架是什么?
  • 可重入锁是什么,有哪些?
  • 同步方法与同步代码块,有何区别,使用场景?
  • 同步代码块中抛出异常会发生什么?
  • volatile 变量和 atomic 变量有什么不同?
  • ReentrantLock与synchronized
  • 启动线程的方法是哪个?
  • 同步类容器和并发类容器有何区别,使用场景分别是?
  • CyclicBarrier 和 CountDownLatch 有什么不同?
  • java内存模型
  • 线程优化的方案
    可以参考cow模式,以及concurrenthashmap的优化锁力度等方面入手
  • volatile与synchronized
  • ThreadLocal线程局部变量
  • 多线程的设计模式
    Future-task,master-worker,Guarded Suspension,生产者消费者等
  • 设计一个高并发的系统,需要考虑哪些点?
  • 什么是线程池,你在项目中使用过哪些?
    线程池的几种方式要记清楚,底层使用的都是同一个构造方法,要清楚的知道每个参数的含义,线程池大小的优化,从io密集型和计算密集型方面去回答
  • 线程池中任务满了,会怎么处理?
  • 什么是阻塞式方法,自己去设计一个该怎么实现?
  • CountDownLatch
  • 队列(有界和无界)如何实现?

数据结构与算法

  • 两个有序的数组合并成一个数组,写代码实现?
给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的
放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时
退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素
放入新数组,大功告成。
  • 反转一个链表
  • 斐波那契数列
两种方式实现,递归和非递归
  • 树相关的数据结构
此处会问二叉树,排序树,avl树,红黑树,B树,B+树等相关的应用场景
  • 各种排序算法需要简单了解下
冒泡,快速排序,堆排序,二分法等等相关的都需要了解下

你可能感兴趣的:(面试-基础篇)