面试题的基本总结回顾(以以往面试过的问题做基本总结)[通俗易懂]

Java基础问题整理:1.HashMap1.7与HashMap1.8的区别,从数据结构上、Hash值的计算上、链表数据的插入方法、内部Entry类的实现上分析?2.Hash1.7是基于数组和链表实现的,为什么不用双链表?HashMap1.8中引入红黑树的原因是?为什么要用红黑树而不是平衡二叉树?3.HashMap、HashTable、ConcurrentHashMap的原理与区别?…

大家好,又见面了,我是你们的朋友全栈君。

目录

一、基本经历介绍

二、基本面试流程回顾

三、基本面试题总结回顾

(一)Java基础问题整理

(二) Redis相关问题整理

(三)JVM相关问题整理

(四)MySQL相关问题整理

(五)Spring相关问题整理

(五)HTTP相关问题整理

(六)中间件相关问题整理

(七)系统及其他相关问题整理


一、基本经历介绍

2017年毕业时,找工作时大多都是问的基本的java基础、设计模式、数据库、Spring等,其他就是读研期间的项目和专利相关,具体的面试题已经忘完了,2019年决定跳槽,先后面试了多家(蚂蚁金服、今日头条、腾讯、美团、京东、小米、百度、中信、永航科技、猫眼电影、瓜子二手车、联想、网易、新浪、滴滴打车等),当时有些面试题都是有记录的,主要针对之前的这些问题做一次总结。

二、基本面试流程回顾

总体上面试都是以自我介绍+项目介绍+项目细节/难点提问+基础知识点考核+算法题这个流程下来的。

  • 自我介绍+项目介绍+项目细节/难点提问——-这个主要看个人的经历了,每个人都不一样
  • 基础知识点考核———还是可以去增强自己的,也是这次的主要的一些总结思路
  • 算法题———–一般都是LeetCode高频题,这个得在找工作之前的好好的练习。之前总结过一些,但不全面,如下:https://blog.csdn.net/xiaofeng10330111/article/details/97183370

三、基本面试题总结回顾

(一)Java基础问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360860

1.HashMap和ConcurrentHashMap区别(必考)

2. ConcurrentHashMap的数据结构(必考)

3.高并发HashMap的环是如何产生的

4.HashMap1.7与HashMap1.8的区别,从数据结构上、Hash值的计算上、链表数据的插入方法、内部Entry类的实现上分析?

    补充知识点:

        HashMap如果我想要让自己的Object作为K应该怎么办?

        HashMap相关put操作,get操作等流程?(下图作为参考)

        HashSet和HashMap

    另外:Synchronized的实现原理

5.Hash1.7是基于数组和链表实现的,为什么不用双链表?HashMap1.8中引入红黑树的原因是?为什么要用红黑树而不是平衡二叉树?

6.HashMap、HashTable、ConcurrentHashMap的原理与区别?

7.volatile与synchronized的区别是什么?volatile作用(必考)

8.synchronized和Lock的区别(必考)

9.Atomic类如何保证原子性(CAS操作)(必考)

10.Java不可重入锁与可重入锁的区别如何理解?

    补充问题:

        AQS理论的数据结构是什么样的?

11.多线程中sleep与wait的区别是什么?

12.final、finnally、finalize的区别是什么?

13.ThreadLocal的原理和实现

    补充问题:

         ThreadLocal为什么要使用弱引用和内存泄露问题

14.为什么要使用线程池(必考)

    补充问题:

        线程池的线程数量怎么确定

        线程池的五种运行状态   

        线程池的关闭(shutdown或者shutdownNow方法)   

15.如何控制线程池线程的优先级

16.线程之间如何通信

17.核心线程池ThreadPoolExecutor的参数(必考)

    补充问题:

        常见线程池的创建参数是什么样的?

18.ThreadPoolExecutor的工作流程(必考)

    补充问题:

          Java线程池的调优经验有哪些?(线程池的合理配置)

          怎么对线程池进行有效监控?

19.Boolean占几个字节

20.Exception和Error

21.Object类内的方法

22.Jdk1.8/Jdk1.7都分别新增了哪些特性?

23.SpringBuffer和SpringBuilder的区别是什么?性能对比?如何鉴定线程安全?

    补充问题:

         String str=”hello world”和String str=new String(“hello world”)的区别?

24.Array和ArrayList有什么区别?使用时注意事项有哪些?

25.LRU算法是怎么实现的?大致说明下(必考)

    具体实现方案:使用LinkedHashMap实现

    也可以自己手写一个:基于 HashMap 和 双向链表实现 LRU

    其他相关内容补充:

         LRU-K

         two queue

         Multi Queue(MQ)

26.CAS?CAS 有什么缺陷,如何解决?

27.ScheduledThreadPoolExecutor中的使用的是什么队列?内部如何实现任务排序的?

 

(二) Redis相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360939

1.Redis在项目中的主要作用是是什么?怎么用的?(应用场景)

    补充问题:

         单线程的Redis为什么快?

         Redis和memcached的区别?

         Redis和DB数据一致性处理

2.Redis支持的数据类型(必考)

3.zset跳表的数据结构(必考)

    补充问题:

        Redis使用跳表不用B+树的原因?

        深入学习:(具体参考王争的博客,讲的很详细!!!)

        一、如何理解跳表? 

        二、用跳表查询到底有多快 

        三、跳表是不是很浪费内存? 

        四、高效的动态插入和删除 

        五、跳表索引动态更新 

4.Redis的数据过期策略(必考)

5.Redis的LRU过期策略的具体实现

6.如何解决Redis缓存雪崩,缓存穿透问题

7.Redis的持久化机制(必考)

8.Redis的管道pipeline

9.Redis集群容错机制是什么样的?

10.Redis集群中某个master节点挂了,后面流程怎么判断?

11.Redis的缓存优化方向有哪些?你们怎么理解的?对热点键的注意事项设计什么?

12.高并发情况下,对于Redis的更新操作有哪些注意事项?

 

(三)JVM相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360974

1.运行时数据区域(内存模型)(必考)

    补充问题:

         简单介绍一下Java内存模型

         volatile关键字

         内存分配与回收策略

2.垃圾回收机制(必考)

    可达性分析算法

    补充问题:

          强、软、弱、虚引用

          Java 堆永久代的回收

3.垃圾回收算法(必考)

4.Minor GC和Full GC触发条件

    补充问题:

          Minor GC 和 Full GC 有什么不一样吗?

5.GC中Stop the world(STW)

6.各垃圾回收器的特点及区别,怎么做选择?

    补充问题:

        G1和CMS的比较

        CMS垃圾回收器存在的问题及解决方案

7.双亲委派模型

    补充问题:

         双亲委派模型的”破坏”

8.JDBC和双亲委派模型关系

9.JVM锁优化和锁膨胀过程

10.JVM中GC Root的选择标准是什么?相关JVM的调优参数有哪些?在工作中怎么调优的?

     补充问题:

        JVM性能监控有哪些?

11.一个4核8G的服务器,初步设置JVM参数,如何分配?

12.ClassLoader如何工作的?

    补充问题:

          对象的创建过程是什么样的?

13.Java管理内存、内存泄漏和泄漏的原因?

14.OOM说一下?怎么排查?哪些会导致OOM?

15.JVM虚拟机老年代什么情况下会发生gc,给你一个场景,一台4核8G的服务器,每隔两个小时就要出现一次老年代gc,现在有日志,怎么分析是哪里出了问题?

 

(四)MySQL相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361002

1.事务的基本要素

2.事务隔离级别(必考)

3.如何解决事务的并发问题(脏读,幻读)(必考)

         脏读的表现和具体解决并发问题

        不可重复读/ 幻读 的表现和具体解决并发问题

4.MVCC多版本并发控制(必考)

         什么是多版本并发控制呢?

         InnoDB的MVCC实现机制

5.为什么选择B+树作为索引结构(必考)

    补充问题:

           为什么平衡二叉树(或红黑树)不适合作为索引?

    补充知识:

           索引相关原理和知识

           一、索引原理

           二、磁盘IO与预读

           三、索引的数据结构

           四、B+树的查找过程

           五、B+树性质

           索引使用注意事项与数据类型选择

            一、索引使用注意事项

            二、选择索引的数据类型

            三、MySQL常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

6.索引B+树的叶子节点都可以存哪些东西(或问聚簇索引与非聚簇索引的区别?)(必考)

     补充问题:

            InnoDB一棵B+树可以存放多少行数据?

            MyisAM索引与InnoDB索引相比较

7.查询在什么时候不走(预期中的)索引(必考)

8.sql如何优化

       补充问题:

            SQL执行顺序是什么样的?

9.explain是如何解析sql的

10.order by原理

11.InnoDB的行锁/表锁

12.myisam和innodb的区别,什么时候选择myisam

13.binlog,redolog,undolog都是什么,起什么作用

14.数据库的乐观锁与悲观锁的区别是什么?乐观锁常用的两种实现方式是什么?

补充两个基本的问题:

15.当前读和快照读

16.一条sql的执行过程?

 

(五)Spring相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361028

1.Spring Boot与以前的Spring有什么区别?

2.Spring Boot启动加载过程是什么样的?

      先进行总的分析汇总

      具体详细如下:

             一、基本代码启动

             二、初始化SpringApplication

                    1.初始化SpringApplication的initialize方法

                    2.调用deduceWebEnvironment来判断当前的应用是否是web应用,并设置到webEnvironment属性中。

                    3.找出所有的应用程序初始化器 getSpringFactoriesInstances + setInitializers

                            补充:获取初始化器

                    4.找出所有的应用程序事件监听器  getSpringFactoriesInstances + setListeners

                            补充:获取监听器

                    5.调用deduceMainApplicationClass方法找出main类

             三、运行SpringApplication

                    1.SpringApplicationRunListeners类

                    2.SpringApplicationRunListener类:监听SpringApplication的run方法执行

                    补充:获取SpringApplicationRunListeners

             四、run方法详细

                    1.配置并准备环境

                    2.创建Spring容器上下文

                    3.配置Spring容器上下文

                    4.Spring容器创建之后回调方法postProcessApplicationContext

                    5.初始化器开始工作

                    6.Spring容器创建完成之后会调用afterRefresh方法

3.Spring的IOC/AOP的实现(必考)

4.动态代理的实现方式(必考)是否使用过GCLB,和JDK的区别是什么?

      知识背景:JDK和CGLIB动态代理总结

      补充问题:

           何时使用JDK还是CGLiB?

           如何强制使用CGLIB实现AOP?

           JDK动态代理和CGLIB字节码生成的区别?

           CGlib比JDK快?

           Spring在选择用JDK还是CGLiB的依据:

5.Spring如何解决循环依赖(三级缓存)(必考)

      循环依赖的产生和解决的前提

      Spring使用了三级缓存解决了循环依赖的问题

6.Spring的@Transactional如何实现的(必考)

7.Spring的事务传播级别

      补充:隔离级别

8.BeanFactory和ApplicationContext的联系和区别

9.Spring的后置处理器

10.Spring Cloud Zuul网关的调优策略有哪些?怎么实现其高可用?Zuul和Gataway,你们项目中是怎么选择的?项目中对Zuul网关层的要求是什么样的?

11.Spring Cloud Eureka和Nacos对比?怎么做选择?Eureka中高可用是怎么做的?进行的调优有哪些?原理是什么?

12.Spring Cloud 中常用的注解有哪些?怎么用的?

13.Spring Cloud中的组件有哪些?具体说说?微服务架构中用到的关键技术有哪些?

14.Spring Cloud Config配置架构是什么样的?可视化怎么做的?设计的业务有哪些?

 

(五)HTTP相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361059

1.HTTP有哪些方法?返回状态码?

      补充问题:GET方法与POST方法的区别

2.HTTP报头格式?如何解析HTTP报头?

      补充问题:URI和URL的区别

3.三次握手过程?第三条丢了会怎样?有什么现象?

4.TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl?

 

(六)中间件相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361083

1.用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗?

      一、常见的消息中间件

             1.Kafka主要特性、优缺点

             2.RabbitMQ主要特性、优缺点

             3.RocketMQ主要特性、优缺点

             4.ActiveMQ主要特性、优缺点

      二、消息中间件相关知识

            1.消息中间件的组成

            2.消息中间件模式分类

            3.消息中间件的普遍优势

            4.消息中间件常用协议

      三、消息队列应用场景

            场景一:异步处理

            场景二:应用解耦

            场景三:流量削锋(一般在秒杀或团抢活动中使用广泛)

            场景四:日志处理

            场景五:消息通讯

2.MQ系统的数据如何保证不丢失?

      一、MQ原则

      二、丢失数据场景分析

            (一)rabbitmq丢失数据场景分析

                      1.生产者弄丢了数据

                      2.rabbitmq自己丢了数据

                      3.消费端弄丢了数据

            (二)kafka丢失数据场景分析

      三、如何防止消息丢失

            (一)rabbitmq防止消息丢失

                      1.生产者丢失消息

                      2.rabbitmq自己弄丢了数据

                      3.消费者弄丢了数据

            (二)kafka防止消息丢失

                      1.消费端弄丢了数据

                      2.kafka弄丢了数据

                      3.生产者弄丢了数据

      补充问题:

             关于MQ的几件小事(五)如何保证消息按顺序执行

             关于MQ的几件小事(三)如何保证消息不重复消费

             关于MQ的几件小事(二)如何保证消息队列的高可用

             Kafka的文件存储机制

             Kafka 如何保证可靠性

             Kafka消息是采用Pull模式,还是Push模式

             Kafka是如何实现高吞吐率的

             Kafka判断一个节点还活着的两个条件

 

(七)系统及其他相关问题整理

相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361100

1.遇到线上相关问题怎么排查?

2.高并发系统的限流如何实现?

3.高并发秒杀系统的设计?

     补充问题:

           秒杀并发情况下库存为负数问题

4.负载均衡如何设计?

        服务端负载均衡

        客户端负载均衡

        负载均衡算法

        静态负载均衡算法

        动态负载均衡算法

5.假如双十一等一些促销有高并发访问量要来访问我们的数据,怎么样做到可靠的服务?

6.一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计?

        背景知识:

               1.布隆过滤器基本介绍、特点及使用场景

               2.布隆过滤器原理

               3.简单实现一个布隆过滤

               4.Guava实现布隆过滤及源码分析

        补充问题:

               一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。

7.常见的设计模式及应用场景。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125788.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号