0-3年经验,这样做可以帮你拿下大厂Offer

先介绍一下自己,我是本科,19年毕业,学校是中不溜的二本。
大四考研失利,找工作的时候没做太多准备,匆忙进了一个给政府做软件外包的小公司写C#。沉沦了几个月之后下定决心裸辞,跑到北京找了份互联网创业公司的服务端研发工作,算是转到Java了。在创业公司沉淀一年后,因为团队调整等诸多原因,开始找新的机会。
这是我在20年底准备的一点复习经验:
主要是自己在面试过程中整理的一些问题,以及自己被问到的关键点。
效果还是不错的,美团、字节、boss直聘、完美世界、滴滴、度小满、58、爱奇艺都通过了。

基础部分

专业基础

  1. 计算机通信的四元组
  2. tcp和udp是哪层的?啥区别?二者特点?
  3. TCP协议
    1. 握手挥手。一般问缺失某次握手会有什么结果,网络异常会如何等
    2. keepalive方式和超时概念
    3. 突发大量time-waiting/close-waiting/xxxx的tcp链接,判断原因,后续处理方式
    4. 拥塞控制
  4. CPU调度、死锁概念、银行家算法等
  5. HTTP协议,主要看下1.1版本即可

JVM

  1. 堆内存划分以及堆外内存
  2. 直接内存的概念
  3. 对象头
  4. 线程共享与线程独占
  5. 内存回收算法
  6. CMS和G1的特点与过程,尽量详细,其他的基本很少问
  7. 常用jdk工具,jmap、jstack、jps、jstat等的简单概念,知道这四个哪个是干啥的就行

多线程

  1. 线程池的运行模型,以及参数意义和线程数的设定思路
  2. 多线程间数据共享(拓展:进程间数据共享)
  3. 多线程调度方式:Object类的、Thread类的以及JUC包的都需要了解
  4. ThreadLocal和Inheritablethreadlocal
  5. 生产-消费者模型
  6. 异步/响应式优化设计,Future和CompletableFuture等
  7. 阻塞队列
  8. 线程安全的概念,HashTable到ConcurrentHashMap的变化,并自行设计一个简单的线程安全的集合类

  1. Sycronized锁升级机制
  2. 偏向锁的概念
  3. Lock接口
  4. ReentrenLock的重入原理
  5. ReadWriteLock简单了解(这玩意本来也没啥意思)
  6. 设计一把锁(考的是你对锁的理解,要明白锁的几个必须元素,以及风险规避)

集合、Stream、Iterator等

  1. Java8的Stream工作模式简单了解一下
  2. Iteratorforeach(A a : Collection<A> aaa)aaa.foreach()for(a,b,c)的区别
  3. ArrayList、LinkedList这些结构了解一下,知道集合中哪些线程安全哪些不安全,为啥不安全,就可以了
  4. 为什么缓存一般建议在初始化完毕,使用之前,转换成不可变集合?

IO模型

  1. BIO
  2. NIO
  3. AIO
  4. Linux环境
    1. select
    2. poll
    3. epoll

框架、DB与分布式

Spring

  1. Spring的Bean加载机制与Java的类加载机制(双亲委派)
  2. Spring容器提供DI和AOP的原理
  3. @Repository和其他@Component、@Service等的区别
  4. @Configuration和@Order用法与场景
  5. @Controller和@RestController区别

MySQL

  1. B+树的特点。B+比B多了什么?为什么用B+不用红黑?
  2. 复合索引的最左优先原则
  3. 聚簇索引与非聚簇索引
  4. 查询时的回表问题如何优化?索引覆盖是什么?
  5. 索引合并
  6. MySql对查询语句会有哪些优化?
  7. 索引设置在频繁更新的列上会有哪些问题?
  8. 页的概念
  9. binlog、redolog、undolog
  10. 主从延迟的处理思路和优化方案

分布式环境

Redis

  1. redis高性能的原因
  2. 几种基本数据结构,str、set、zset、list、hash
  3. 基本数据类型的特殊用法,bitmap、队列、布隆过滤器、hyperloglog等
  4. 持久化方式,全量和增量
  5. 集群场景数据读写的节点划分方式
  6. 常见问题:热key、大value、keys*等的处理方式以及出现问题的原因
  7. 缓存穿透、击穿、雪崩的概念
  8. redis事务、lua脚本、管道通信

消息队列

  1. Kafka高效原因
  2. mq如何保证“最多消费一次”、“至少消费一次”、“一定只消费一次”
  3. kafka partition
  4. mq的pull push模型

微服务

  1. CAP模型、AP和CP
  2. 分布式锁设计
  3. 熔断降级的实现思路(线程池、信号量)
  4. RPC的分层设计,可以基于几种rpc框架来说,比如feign、dubbo、grpc、thrift等
  5. 服务间数据互通的几种方式,越多越好
  6. 常见的长链接与短链接
  7. 分布式事务的几种解决方案

系统设计

秒杀系统

  1. 高并发变低并发
  2. 短高峰变长低峰
  3. 多节点处理
  4. 避免单点高压
  5. 避免超卖和未卖完却先拒绝订单的情况

业务复杂的高并发场景

  1. 数据库冷热字段拆表
  2. 根据合理的键拆库
  3. 数据缓冲层设计
  4. 消息队列分区(partition)消费设计
  5. 请求压力均摊
  6. 特殊数据库或引擎介入(时间数据库、流式计算引擎等)

海量数据场景

  1. 合理的数据拆分
  2. 灵活利用不同类型数据库的优势
  3. 冷数据定期归档
  4. 大数据介入(Hive等)
  5. 灵活的缓存设计(不要缓存最终内容,而是缓存中间计算结果)
原文地址:https://www.cnblogs.com/ZoraZora59/p/14475084.html