ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试-技术点

2022-08-08 00:02:36  阅读:147  来源: 互联网

标签:哪些 对象 技术 面试 XX 线程 JVM 加载


Java基础

1.请你说说Java的集合有哪几种?请你说说常用集合类的底层原理

2.抽象类与接口有什么区别?工作中你怎么使用的

3.谈谈设计模式,你工作中用到的设计模式有哪些?

Spring篇

4.浏览器请求一个url,整个流程发生什么?请你谈谈这个流程中DispatcherServlet的作用

5.请你谈谈堆AOP的理解?

6.在Spring中IOC(控制反转)的作用?

7.解释一下bean的生命周期?

8.Spring是怎么解决循环依赖的?为什么要三级缓存,二级可以吗?

img

9.说说事物的隔离级别?

10.@Transactionoal失效的场景?Spring 事务实现方式 ?

  • @transaction应用在非public修饰的方法上

  • @Transactional 注解属性 propagation 设置错误:

    • TransactionDefinition.PROPAGATION_SUPPORTS、
    • TransactionDefinition.PROPAGATION_NOT_SUPPORTED、
    • TransactionDefinition.PROPAGATION_NEVER
  • @Transactional 注解属性 rollbackFor 设置错误

  • 同一个类中方法调用,导致 @Transactional 失效

MyBatis与MyBatis Plus

11.MyBatis中,#{}和${}的区别是什么 ?

12.MyBatis Plus你用过吗?与MyBatis有什么不同

13.Xml映射文件你用过哪些标签?若查询指定多个id的数据需要使用什么标签,或批量插入数据时使用的标签

SpringBoot篇

14.请你说说Spring,SpringBoot,Spring Cloud的区别?

15.请你讲讲@SpringBootApplication核心注解

16.SpringBoot如何实现全局异常处理?

@ControllerAdvice + @ExceptionHandler

MySQL篇

17.MySQL数据库引擎有哪些?说说InnoDB与MyISAM的区别

18.数据库的四大特性?

19.请你讲讲MySQL索引的数据结构?为什么用B+树作为索引

20.讲讲索引的最左匹配原则?索引失效的情况

21.在系统中发现有慢sql,你应该从哪几些地方优化?

  • explain查看执行计划,是否正常走索引

  • 是不是表数据量过大,要不要进行表的拆分或分库

  • 是不是表的关联查询过多,一般最多三四个表做关联查询

22.sql优化的手段有哪些?

23.大表的分页查询你会怎么实现?

24.在设计时,什么情况下会使用索引?

JVM篇

25.请你讲讲JVM的内存模型?

26.什么时候会触发Major GC?

27.JVM中类的加载机制?有哪几类加载器?

类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)

28.JVM垃圾回收时,是怎么判断哪些对象需要回收的?

  • 引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。
  • 可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不可达对象。

29.你知道哪些垃圾收集算法?

标记 -清除算法、复制算法、标记-压缩算法

我们常用的垃圾回收器一般都采用分代收集算法:“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法

30.JVM重用的调优工具有哪些?

jdk自带监控工具:jconsole和jvisualvm,第三方有:MAT(Memory Analyzer Tool)、GChisto

31.你知道哪些JVM性能调优参数?

[堆栈内存相关]

  • -Xms 设置初始堆的大小
  • -Xmx 设置最大堆的大小
  • -Xmn 设置年轻代大小,相当于同时配置-XX:NewSize和-XX:MaxNewSize为一样的值
  • -Xss 每个线程的堆栈大小
  • -XX:NewSize 设置年轻代大小(for 1.3/1.4)
  • -XX:MaxNewSize 年轻代最大值(for 1.3/1.4)
  • -XX:NewRatio 年轻代与年老代的比值(除去持久代)
  • -XX:SurvivorRatio Eden区与Survivor区的的比值
  • -XX:PretenureSizeThreshold 当创建的对象超过指定大小时,直接把对象分配在老年代。
  • -XX:MaxTenuringThreshold设定对象在Survivor复制的最大年龄阈值,超过阈值转移到老年代

[垃圾收集器相关]

  • -XX:+UseParallelGC:选择垃圾收集器为并行收集器。
  • -XX:ParallelGCThreads=20:配置并行收集器的线程数
  • -XX:+UseConcMarkSweepGC:设置年老代为并发收集。
  • -XX:CMSFullGCsBeforeCompaction=5 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行5次GC以后对内存空间进行压缩、整理。
  • -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片

[辅助信息相关]

  • -XX:+PrintGCDetails 打印GC详细信息
  • -XX:+HeapDumpOnOutOfMemoryError让JVM在发生内存溢出的时候自动生成内存快照,排查问题用
  • -XX:+DisableExplicitGC禁止系统System.gc(),防止手动误触发FGC造成问题.
  • -XX:+PrintTLAB 查看TLAB空间的使用情况

32.什么是逃逸分析? 对象一定分配在堆中吗?

不一定的,JVM通过「逃逸分析」,那些逃不出方法的对象会在栈上
分配。

逃逸分析的好处:

  • 栈上分配,可以降低垃圾收集器运行的频率。
  • 同步消除,如果发现某个对象只能从一个线程可访问,那么在这个对象上的操作可以不需要同步。
  • 标量替换,把对象分解成一个个基本类型,并且内存分配不再是分配在堆上,而是分配在栈上。这样的好处有,一、减少内存使用,因为不用生成对象头。二、程序内存回收效率高,并且GC频率也会减少

33.什么是STW?

34.说一说JVM有哪些垃圾收集器?

多线程&高并发

35.volatile关键字的作用?是怎么保证可见性、防止指令重排的

36.怎么保证多线程的原子性?

  • synchronized
  • JUC原子包装类AtomicInteger

37.原子包装类是怎么保证原子性的?

CAS -> Unsafe -> CAS底层思想 -> ABA -> 原子引用更新 -> 如何规避ABA问题->时间戳原子引用AtomicStampedReference

关键字:CAS:unsafe+内存偏移量offset

38.怎么保证多线程情况下单例模式是线程安全的?

  • 使用volatile+synchronized 双重检锁机制

39.ArrayList集合线程不安全问题的解决方案?

  • Vector:DK1.0比较古老,开发中比较少用
  • Collections:synchronizedList(List list)解决
  • CopyOnWriteArrayList:推荐,写时复制技术
    • 实现集合并发读-独立写功能
    • 向集合中写数据时支持独立写:复制一份集合写入新的内容,写完后合并或覆盖原集合

40.请你讲讲synchronized关键字与ReentrantLock的区别?

41.怎么实现线程间的通信?

  • 1.Object类的wait()、notify()/notifyAll()
  • 2.ReentrantLock的await()、signal()/signalAll()

42.创建线程有几种方式?Runable接口与Callable接口的区别,怎么使用Callable接口创建线程,在Thread构造方法中,有Runable参数,而没有Callable参数来创建线程?

关键字:Runable接口有实现类FutureTask(Callable callable)

43.为什么要用线程池?请你讲讲创建线程池ThreadPoolExecutor的7大参数,有几大拒绝策略?

44.请你讲讲JUC的辅助类?

  • 闭锁CountDownLatch
  • 循环栅栏CyclicBarrier
  • 信号量Semaphore

45.sleep()和wait()的区别?

sleep():Thread类,cpu阻塞

wait():Object类,失去cpu执行权

46.线程池中submit()和execute()方法的区别?

  • submit()方法可以返回持有计算结果的Future对象

47.请你讲讲对乐观锁与悲观锁的理解?并用在工作中遇到的锁进行举例

Redis篇

48.工作中你使用过Redis吗?为什么要用Redis,Redis有哪些优点?

49.Redis持久化方式有哪些?它们有什么区别?

RDB机制:数据集快照,某个时间点持久化

AOF机制:所有的命令行记录以 Redis 命令请求协议的格式完全持久化存储

50.Redis有哪5大数据类型?它们有哪些使用场景

51.讲讲缓存穿透、缓存雪崩、缓存击穿?以及怎么避免这些问题

52.在工作中,你是怎么实现分布式锁的?

分布式篇

53.你知道哪些分布式事务解决方案?

  • 1.两阶段提交(2PC)
  • 2.三阶段提交(3PC)
  • 3.补偿偿事务(TCC=Try-Confirm-Cancel)
  • 4.本地消息队列表(MQ)
  • 5.Sagas事务模型(最终一致性)

54.分布式ID生成有哪些方案?

网络篇

55.说说TCP/IP的网络模型

56.请你讲一讲TCP协议的三次握手与四次挥手?为什么要三次握手,两次不行吗?

57.TCP是如何保证可靠性的?

Linux篇

58.Linux你熟悉吗?你常用的命令有哪些?

Spring Cloud篇

59.Nacos、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说三个的区别?

  • Zookeeper保证了CP(C:一致性,P:分区容错性),Eureka保证了AP(A:高可用)
  • Nacos默认采用AP模式,在1.0版本之后采用ap+cp模式混合实现注册中心

60.什么是服务熔断?什么是服务降级?

61.Sentinel怎么做流量控制?

MQ篇

62.为什么要使用MQ?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区
别?

63.如何保证消息的可靠传输?如果消息丢了怎么办?

64.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

前端Vue.js

1.你用过Vue.js吗?请你简单说说它的MVVM思想

2.你了解Vue页面加载的大概的一个生命周期吗?

  • created:html加载完成之前执行。执行顺序:父组件-子组件
  • mounted:html加载完成后执行。执行顺序:子组件-父组件
  • methods:事件方法执行
  • watch:watch是去监听一个值的变化,然后执行相对应的函数
  • computed:computed是计算属性,也就是依赖其它的属性计算所得出最后的值
  • created():dom还未生成,仅仅触发一次;
  • mounted:dom渲染完毕,仅仅执行一次;
  • activated():在使用时keep-live主要目的是可以使用缓存,避免组件重新渲染;只要进入组件激活就会触发。

3.父子组件怎么传值?

4.怎么实现对象或数组的深拷贝?

5.让两个div按比例显示在同一行怎么实现?

6.怎么阻止点击事件向上冒泡?

7.v-if与v-show有什么区别?

8.vue中如何实现同步请求?

标签:哪些,对象,技术,面试,XX,线程,JVM,加载
来源: https://www.cnblogs.com/yydscn/p/16560279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有