面试准备—JAVA必备知识

面试准备—JAVA必备知识


本篇文章来源自:公众号-程序员乔戈里

Java基础

    • 新版本特性
    • 跨平台特性
    • Java四个基本特性
    • Object类及其方法实现(尤其是equals() and hashCode())
    • 基本数据类型与引用数据类型
    • Exception vs Error
    • finally vs final vs finalize
    • final vs final
    • 四种引用:强引用、软引用、若引用、幻象引用的比较
    • 重载 vs 重写
    • 接口 vs 抽象类
    • 深克隆 vs 浅克隆
    • String vs StringBuffer vs StringBuilder (底层实现)
    • IO vs NIO vs AIO
    • 反射与动态代理
    • 序列化与反序列化(底层实现)

集合框架 (应用及源码分析)

    • 集合框架的设计与所有的继承关系
    • Vector vs ArrayList vs LinkedList
    • HashTable vs HashMap vs TreeMap
    • HashTable vs HashMap vs ConcurrentHashMap
    • HashSet vs TreeSet

并发与多线程(应用及底层实现)

    • 线程的创建方式

    • 多线程应用场景

    • 线程状态与转换

    • 线程安全与同步机制:volatile vs synchronized vs Lock(ReentrantLock)

    • volatile底层原理

    • synchronized底层原理及其锁的升级与降级

    • Lock(ReentrantLock)底层原理

    • ThreadLocal

    • 线程通信

    • 线程池(底层实现)

    • 死锁的出现场景、定位以及修复

    • CAS 与 Atomic*类型实现原理

    • AQS:并发包基础技术

    • Java并发包(java.util.concurrent及其子包)提供的并发工具类:

      • 比synchronized更加高级的各种同步结构,如:Semaphore,CyclicBarrier, CountDownLatch;
      • 各种线程安全的容器(主要有四类:Queue,List,Set,Map),如ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList;
      • 各种并发队列的实现,如各种BlockingQueue的实现(ArrayBlockingQueue, LinkedBlockingQueue, SynchorousQueue, PriorityBlockingQueue,DelayQueue,LinkedTranferQueue)等
      • Executor框架与线程池

JVM

  • JVM运行时数据区域 vs Java内存模型 (这2不一样!!!

  • Java内存模型与happen-before原则

  • 内存泄露、内存溢出以及栈溢出

  • JVM类加载机制及其作用与对象的初始化

  • JVM垃圾回收

    • 如何判断对象已经死亡?引用计数法 vs 可达性分析
    • 如何回收对象?垃圾收集算法
    • Minor GC vs Full GC
    • 常用的垃圾收集器及其特点
    • 内存分配与回收策略
  • GC调优

    • GC调优的思路
    • JVM常用参数
    • 基于JDK命令行工具监控Java进程, 如 jps,jinfo,jstat,jmap,jstack
    • 基于图形化工具监控Java进程,如MAT(Memory Analyzer),VisualVM,Btrace

面向对象与设计模式(了解常用设计模式及其应用场景、示例)

  • 面向对象的六个基本原则
  • 单例模式(手撕各种单例模式)
  • 工厂模式(Spring的BeanFactory,ApplicationContext)vs.抽象工厂模式
  • 构造器模式(应用场景:解决构造复杂对象的麻烦。复杂:需要输入的参数的组合较多)
  • 代理模式(Spring AOP(动态代理模式:2种实现方式,即jdk & 字节码方式))
  • 装饰器模式(应用场景:若想对一个类从不同角度进行功能扩展,例如java.io中,InputStream是一个抽象类,标准类库中提供了FileInputStream\ByteArrayInputStream等各种不同的子类,分别从不同角度对InputStream进行了功能扩展。这些不同的实现类其构造函数的输入均为InputStream(的实现类),然后对InputStream添加不同层次的逻辑,从而实现不同的功能,这就是装饰。)
  • 观察者模式(各种事件监听器)
  • 策略模式(比较器Comparator)
  • 迭代器模式(ArrayList等集合框架中的迭代器)
  • 生产者消费者模式(消息队列)要能手撕
  • …还有很多,但是掌握这些基本上够了

数据结构与算法

(1) 时间复杂度和空间复杂度分析

(2) 常用的数据结构及其特点

  • 数组 vs 链表

  • 队列 vs 栈

  • 跳表(Redis利用跳表实现有序集合Sorted Set)

  • 散列表

  • 堆与优先级队列

  • 二叉树:普通二叉树 vs 二叉查找树 vs 平衡二叉树(AVL)vs 红黑树 (vs 哈夫曼树)

  • 多叉树:B-Tree vs B+Tree vs B*Tree / Trie Tree

    • B+Tree: MySQL索引数据结构
    • Trie Tree: 实现敏感词过滤算法; 实现搜索引擎的关键词提示功能
  • 图:考数据结构不多,主要考2个最短路径优先算法

(3) 常用算法

  • 各种排序算法:内部排序+外部排序

  • 各种查找算法:

    • 二分查找算法及其变种
    • 二叉查找树的查找
    • 利用快排查找
  • 常用遍历算法

    • BFS vs DFS
    • Morris遍历
  • 常用Hash算法

    • 一致性哈希
    • 布隆过滤器
  • 贪心算法

  • 分治算法

  • 回溯算法

  • 动态规划

  • 海量数据处理算法

    • bitmap算法
    • 布隆过滤器
    • July 博客
  • 其他算法

    • LRU算法
    • KMP算法
    • Manacher算法(面试问过1次)
    • BFPRT算法

(4) 常见的手撕代码问题

  • 《剑指offer》的问题
  • 见后续文章

计算机网络

  • OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及及各层协议

  • 给定一个网址,访问这个网址经过了那些过程?涉及哪些协议?

  • HTTP and HTTPS

    • HTTP报文格式
    • HTTP方法及相互区别
    • HTTP的无状态
    • HTTP状态码
    • HTTP 1.0 vs 1.1 vs 2.0
    • HTTP vs HTTPS
    • HTTP安全性
    • HTTP底层协作协议(如传输层为TCP协议)
  • TCP and UDP

  • RPC协议(经常和Dubbo一起问)

  • Socket编程

  • 异步IO多路复用:select poll epoll

OS

  • 内核态 vs 用户态

  • 进程 vs 线程

  • 进程调度算法

  • 进程间通信的几种方式

  • OS死锁相关的问题

    • 什么是死锁?哲学家就餐问题
    • 死锁的必要条件
    • 死锁的应对方法
    • 死锁的检测与恢复
    • 死锁的动态避免:银行家算法
    • 死锁的静态防止:破坏死锁的必要条件之一
  • 段页式内存管理

  • 页面置换算法

  • 磁盘调度算法

  • Linux系统常用的命令有哪些?是否会Shell,Python?

数据库MySQL

  • 数据库范式

  • 数据库事务

    • 什么是事务?
    • 事务特性:ACID
    • 事务隔离级别以及脏读、不可重复读、幻读
    • 分布式事务
  • 数据库索引

    • 索引的应用场景
    • 索引特点
    • 索引的优点和缺点
    • 索引的分类
    • 索引选择原则
    • 索引的优化
    • 索引失效
    • 索引的底层实现(B-Tree vs B+Tree)
    • 对于建立索引的列,数据均匀分布好还是不均匀好?
  • 数据库的锁

    • 行锁 vs 表锁
    • 读锁 vs 写锁
    • 乐观锁 vs 悲观锁以及如何实现?(MVCC)
    • 加锁的方式
    • 分布式锁
  • 数据库存储引擎比较

    • InnoDB
    • MyISAM
    • Memory
  • MySQL连接池对比

  • MySQL命令

  • JOIN的执行计划?

  • 数据库分库分表

  • 主从复制

数据库Redis

  • 为什么使用Redis?
  • Redis的优点与缺点
  • Redis的数据类型、底层实现以及各种数据类型的使用场景
  • Redis是单线程吗?单线程的Redis为啥这么快?
  • Redis持久化的方式
  • 谈谈Redis的过期策略以及内存淘汰机制
  • 如何解决Redis和和数据库双写一致性的问题?
  • 如何应对缓存穿透与缓存雪崩的问题?
  • 如何解决Redis的并发竞争Key问题

Web与常见框架

  • Servlet的生命周期(问的很少)

  • Cookie vs Session

  • 分布式Session

  • Spring相关(应用与源码分析)

    • 看过Spring的源码吗?
    • IOC应用及原理
    • AOP应用及原理
    • 事务
    • Spring涉及的设计模式
    • 谈谈Spring Bean的生命周期和作用域
    • Spring MVC的工作原理
    • Spring vs Spring MVC
    • Spring vs Spring Boot
    • 了解微服务,Spring Cloud
  • Netty (网络框架)

  • Dubbo

分布式架构

  • 服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等
  • 资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
  • 流量调度,涉及路由、负载均衡、流控、熔断等。
  • 数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等
  • 容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
  • 自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等

猜你喜欢

转载自blog.csdn.net/qq_38238296/article/details/86601867