美文网首页
最新天猫面试题(含答案):线程池+并发编程+分布式设计+中间件

最新天猫面试题(含答案):线程池+并发编程+分布式设计+中间件

作者: AKyS佐毅 | 来源:发表于2019-05-29 18:57 被阅读0次

    1、AOP实现原理:动态代理

    image.png

    2、对象什么情况下进入老年代

    https://blog.csdn.net/xdzhouxin/article/details/81218578

    image.png

    3、双亲委派模型,为什么这样做?

    image.png

    双亲委派模型的概念

    • 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的加载器都是如此,因此所有的类请求都会传给顶层的启动类加载器(Bootstrap ClassLoader),只有当父加载器反馈自己无法完成该加载请求时,子加载器才会尝试自己去加载。

    双亲委派模型的优点:

    • Java类伴随其类加载器具备了带有优先级的层次关系,确保了在各种加载环境的加载顺序。
    • 保证了运行的安全性,防止不可信类扮演可信任的类。

    4、Java会出现内存溢出吗?什么情况下会出现

    image.png

    什么情况下会出现

    • 检查代码中是否有死循环或递归调用。
    • 检查是否有大循环重复产生新对象实体。
    • 检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
    • 检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

    5、常用的设计模式介绍:单例模式、装饰者模式等

    设计模式看了又忘,忘了又看?

    6、消息中间件有哪些?他们之间的优劣势

    image.png

    7、redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

    image.png

    8、OOM内存泄漏,什么情况下会出现,如何排查

    image.png

    一次由过量线程引发的OOM排查

    一次线上OOM过程的排查

    这里强烈推荐阿里出品的Arthas

    Arthas 能为你做什么?

    • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
    • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
    • 遇到问题无法在预发 debug 一下,难道只能通过加日志再重新预发布吗?
    • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现,怎么办?
    • 是否有一个全局视角来查看系统的运行状况?
    • 有什么办法可以监控到容器和中间件的实时运行状态?

    1、Arthas官方指南

    2、Arthas实战

    3、arthas源码分析

    4、Arthas源码分析

    9、MySQL的索引

    图解MySQL索引--B-Tree(B+Tree)

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

    深入理解MYSQL索引之B+TREE

    真的,MySQL 索引优化看这篇文章就够了

    10、JVM-垃圾回收详解

    JVM-垃圾回收详解

    JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

    11、栈和队列

    栈和队列

    12、线程方法中的异常如何处理

    java主线程捕获子线程中的异常
    JAVA 线程中的异常捕获

    13、什么情况下使用Runnable和Thread创建线程,Runnable和Callable的区别

    用Runnable与Callable接口的方式创建多线程的特点:

    • 线程类只是实现了Runnable接口或Callable接口,还可以继承其它类。
    • 在这种方式下,多个线程可以共享一个target对象,所以非常适合多个线程来处理同一份资源情况。
    • 如果需要访问当前线程,需要使用Thread.currentThread方法。
    • Callable接口与Runnable接口相比,只是Callable接口可以返回值而已。

    用Thread类的方式创建多线程的特点:

    • 因为线程已经继承Thread类,所以不可以再继承其它类。
    • 如果需要访问当前线程,直接使用this即可。

    14、深入剖析Java线程池原理

    线程池的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果任务数量超过了最大线程数量,需要进入队列排队等候,等其他线程执行完毕,再从队列中取出任务来执行

    主要特点:

    • 线程复用
    • 控制最大并发数量
    • 管理线程

    带来的好处

    • 降低了资源消耗。通过复用机制降低了线程创建和销毁的消耗。
    • 提高了响应速度。当任务到达时,任务不需要等候就能立即执行。
    • 提高了线程的可管理性。线程是稀缺的,如果无限制创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。

    深入剖析Java线程池原理

    15、Spring IOC和AOP,以及各有什么优点

    IOC:Inversion of Control控制反转,也叫(Dependency Injection)依赖注入。

    IoC 不是一种技术,只是一种思想。它能指导我们如何设计出松耦合、更优良的程序。比如在程序中,依赖注入就是利用某种工具,将依赖注入到需要的位置。就好比:

    药物注入就是利用注射器,将药物注入到需要的人体中,就是药物注入。

    依赖注入还有另一层意思:就是依赖第三方工具完成注入的操作。依赖注入的核心原理是注解和反射。
    优点是

    内存控制:统一管理对象,避免对象乱创建导致额外的内存开销。便于内存的优化。
    降低耦合度:便于项目的扩展、易于维护。如果IoC+接口情况下,删除任意实现类都不会导致程序编译出错。虽然运行到特定得代码会报错,但是其他代码在使用时不会有问题-----从侧面也反应出是松耦合。

    AOP(Aspect-Oriented Programming): 面向切面编程

    AOP的主要原理:动态代理。
    代理模式:静态代理和动态代理(JDK动态代理、CGLib动态代理)。
    静态代理:针对每个具体类分别编写代理类;针对一个接口编写一个代理类;
    动态代理的原理:反射。
    AOP优点是:

    AOP实现日志管理:方法的开始记录入参,方法结束需要记录返回值和运行时间。
    AOP比IoC更简单,直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句。
    spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。

    16、Synchronized和锁的区别,什么情况下使用synchronized和ReentrantLock

    由于ReentrantLock是java.util.concurrent包下提供的一套互斥锁,相比Synchronized,ReentrantLock类提供了一些高级功能,主要有以下3项:

    • 1.等待可中断,持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,这相当于Synchronized来说可以避免出现死锁的情况。通过lock.lockInterruptibly()来实现这个机制。

    • 2.公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,Synchronized锁非公平锁,ReentrantLock默认的构造函数是创建的非公平锁,可以通过参数true设为公平锁,但公平锁表现的性能不是很好。

    • 3.锁绑定多个条件,一个ReentrantLock对象可以同时绑定对个对象。ReenTrantLock提供了一个Condition(条件)类,用来实现分组唤醒需要唤醒的线程们,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程。

    推荐阅读:

    深入理解Java中的锁

    参考阅读:

    17、MySQL事务是什么?四大特性,四大隔离级别

    事务是访问并更新数据库中各种数据项的一个程序执行单元。在事务中的操作,要么都执行修改,要么都不执行,这就是事务的目的,也是事务模型区别于文件系统的重要特征之一。

    四大特性

    • 1:原子性。事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行。

    • 2:隔离性。同一时间,只允许一个事务请求同一组数据。不同的事务彼此之间没有干扰。

    • 3:一致性。事务开始前和结束后,数据库的完整性约束没有被破坏 。

    • 4:稳定性。事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

    隔离性的四种级别

    • 1: read uncommitted。事务A对数据进行修改,但未提交。此时开启事务B,在事务B中能读到事务A中对数据库进行的未提交数据的修改。(这种方式也称为脏读)

    • 2 :read committed。事务A对数据进行修改,但还未提交。此时开启事务B,在事务B中不能读到事务A中对数据库的修改。在事务B还没有关闭时,此时事务A提交对数据库的修改。这时候,我们在事务B中,可以查到事务A中对数据库的修改。这时存在一个问题,我们在同一个事务中,对数据库查询两次,但两次的结果是不一样的。(这种方式称为不可重复读。)

    • 3 :repetition read。事务A对数据进行修改,但未提交,此时开启事务B,在事务B中不能读到事务A对数据库的修改。在事务A提交对数据库修改时,此时在事务B中,仍不能读到事务A对数据库的修改。(这种方式称为可重复读)但此时有一个弊端,比如我们在事务A中对数据库增加一条数据,id 为 n ,这时候我们在事务B中查询数据,此时查不到id为n的数据。但当我们在事务B中增加id为n的数据时,系统会提示id为n的数据已经存在,我们添加失败。但此时此刻,我们在事务B中仍不能查询到id为n的数据。这种方式存在一个幻读的概念。举个例子,(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后关闭事务发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。)

    • 4 :serializable。在开启事务A时,会产生锁表,此时别的事务会等待,等事务A结束时才会开启。

    推荐阅读:

    Spring事务传播行为详解

    18、TCP为什么可靠,UDP如何实现可靠,二者区别?

    TCP与UDP区别总结:

    • 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。

    • 2、TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

    • 3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

    • 4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。

    • 5、TCP对系统资源要求较多,UDP对系统资源要求较少。

    TCP为什么可靠,UDP如何实现可靠,二者区别?

    19、红黑树,为什么允许局部不平衡

    20、HashMap实现原理,ConcurrentHashMap实现原理,ConcurrentHashMap和HashTable区别

    21、JVM的对象分配在哪个区,Class对象分配在哪个区

    22、算法相关

    image.png

    https://t.zsxq.com/iIYVb2v

    23、Tomcat 类加载器

    推荐一篇讲解的很到位的文章吧

    图解Tomcat类加载机制(阿里面试题)

    24、BIO、NIO(如何实现的)、AIO

    image.png

    25、介绍你实践的性能优化案例,以及你的优化思路

    26、Redis、Memcached之间的区别,优劣势比较

    27、请描述一致hash算法

    https://www.cnblogs.com/lpfuture/p/5796398.html

    https://blog.csdn.net/championhengyi/article/details/80820959

    https://blog.csdn.net/suifeng629/article/details/81567777

    28、分布式session的共享方案有哪些,有什么优劣势

    image.png

    分布式Session解决方案

    29、MySQL与MongoDB的区别,海量数据的存储

    image.png

    30、SQL慢查询的优化方案,索引和表的优化方案

    真的,MySQL 索引优化看这篇文章就够了

    31、高并发情况,系统的优化方案有哪些,以及优先级排序

    高并发系统 优化总结

    32、微服务和SOA的区别,优劣势

    SOA 与 微服务的区别

    33、介绍你实践的性能优化案例,以及你的优化思路

    性能优化的思路和步骤

    相关文章

      网友评论

          本文标题:最新天猫面试题(含答案):线程池+并发编程+分布式设计+中间件

          本文链接:https://www.haomeiwen.com/subject/iqcutctx.html