查看原文
其他

面试-基础篇

程序员阿亮 SpringForAll社区 2021-05-26

点击蓝色SpringForAll社区关注我哟



前言

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

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

  • 队列(有界和无界)如何实现?

数据结构与算法

  • 两个有序的数组合并成一个数组,写代码实现?

  1. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的

  2. 放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时

  3. 退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素

  4. 放入新数组,大功告成。

  • 反转一个链表

  • 斐波那契数列

  1. 两种方式实现,递归和非递归

  • 树相关的数据结构

  1. 此处会问二叉树,排序树,avl树,红黑树,B树,B+树等相关的应用场景

  • 各种排序算法需要简单了解下

  1. 冒泡,快速排序,堆排序,二分法等等相关的都需要了解下



推荐阅读

点击原文阅读更多


点个“好看”支持一下鸭

点鸭点鸭点鸭

                                                                                                       ↓↓↓


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存