• 面试经验二


    说说mysql?

    MySQL是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    AQS、阻塞队列?

    AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。

    AQS是自旋锁:在等待唤醒的时候,经常会使用自旋(while(!cas()))的方式,不停地尝试获取锁,直到被其他线程获取成功

    阻塞队列?

    当阻塞队列为空时,从队列中获取元素的操作将会被阻塞,就好比餐馆休息区没人了,此时不能接纳新的顾客了。换句话,肚子为空的时候也没东西吃。

    当阻塞队列满了,往队列添加元素的操作将会被阻塞,好比餐馆的休息区也挤满了,后来的顾客只能走了。

    JUC常用工具类?

    countDownLatch(相当于减法计数器,就是指一个线程必须等待一些线程执行完以后,才能够往下执行)

    cyclibarrier(相当于加法计数器,就是指一个线程必须等待足够多的线程一起到达执行语句时,才能通过,否则线程会自己调用awai方法,等待线程足够多时将被唤醒)

    semaphore(计数控制器)用于限制访问某些资源的线程数,有acquire获取许可和release释放线程两个方法

    线程安全的类

    • ConcurrentHashMap
    • CountDownLatch、CyclicBarrier
    • Semaphore
    • BlockingQueue
    • ThreadPoolExecutor
    • ReentrantLock、ReentrantReadWriteLock
    • CompletableFuture

    线程池七大参数?

    核心线程数、最大线程数、最大空闲时间、时间单位、任务队列、线程工厂、拒绝策略

    mysql的索引有使用过吗?

    • 普通索引:一个索引只包含一个列,一个表可以有多个单列索引。
    • 唯一索引:索引列的值必须唯一,但允许有空值
    • 复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
    • 聚簇索引:也称为主键索引,是一种数据存储方式。B+Tree结构,非叶子节点包含健值和指针,叶子节点包含索引列和行数据。一张表只能有一个聚簇索引。
    • 非聚簇索引:不是聚簇索引,就是非聚簇索引。叶子节点只是存索引列和主键id。如果sql还要返回除了索引列的其他字段信息,需要回表,第一次索引一般是顺序IO,回表的操作属于随机IO。回表的次数越多,性能越差。此时我们推荐覆盖索引

    怎么知道索引如何生效?

    explain函数验证索引是否有效

    explain显示了MySQL如何使用索引来处理select语句以及连接表。他可以帮助选择更好的索引和写出更优化的查询语句

    有什么参数?

    select_type:表示 SELECT 的类型。

    table:输出结果集的表。

    possible_keys:表示查询时,可能使用的索引。

    key:表示实际使用的索引。

    key_len:索引字段的长度。

    rows:扫描行的数量。

    Extra:执行情况的说明和描述。

    JVM包含哪些东西?

    JVM包含两个子系统和和两个组件,

    两个子系统为类装载(Class Loader)和执行引擎(Execution engine);

    两个组件为运行时数据区(Runtime data area),本地接口(Native Interface)。
    类装载(Class Loader):根据给定的全限定名类名(如:java.lang.Object)来装载class 文件到 运行时数据区(Runtime data area )中的方法区(method area)
    执行引擎(Execution engine):执行classes 中的指令。
    本地接口(Native Interface) :与native libraries 交互,是其他编程语言交互的接口。
    运行时数区域(Runtime data arae):这就是我们常说的JVM 内存

    强引用和弱引用?

    当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题

    在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

    举例说Object的方法?wait

    知道其他可以让线程等待的方法吗?

    在这里插入图片描述

    HashMap底层原理?扩容机制?默认参数?负载因子?

    内部由数组和链表组成,非线程安全。JDK1.7和1.8的主要区别在于头插和尾插方式的修改,头插容易导致HashMap链表死循环,并且1.8之后加入红黑树对性能有提升。

    • put插入:key 计算hash值,取模,找到数组位置,如果数组中没有元素直接存入,反之,则判断key是否相同,key相同就覆盖,否则就会插入到链表的尾部。如果链表的⻓度超过8且数据总量超过64,则会转换成红黑树。最后判断元素个数是否超过默认的⻓度(16)*负载因子(0.75),也就是12,超过则进行扩容。
    • get查询:计算出hash值,然后去数组查询,是红黑树就去红黑树查,链表就遍历链表查询就可以了。

    IOC?

    IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦

    IOC也叫依赖注入(DI)

    所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

    AOP动态代理?

    面向切面编程

    AOP中的代理说是由AOP框架动态生成的一个对象,该对象可以作为目标对象使用。Spring 中的AOP有两种,JDK动态代理,CGLIB代理

    JDK动态代理是通过java.lang.reflect.Proxy 类来实现的,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象。对于使用业务接口的类,Spring默认会使用JDK动态代理来实现AOP。

    CGLIB(Code Generation Library)是一个高性能开源的代码生成包,它采用字节码技术,对指定的目标类生成一个子类,并对子类进行增强。
    在Spring的核心包中已经集成了CGLIB所需的包,所以开发中不需要导包。

    redis常用数据类型?

    • String:缓存、计数器、分布式锁等
    • List:链表、队列、微博关注人时间轴列表等
    • Hash:用户信息、Hash 表等
    • Set:去重、赞、踩、共同好友等
    • Zset:访问量排行榜、点击量排行榜等

    三种特殊的数据类型:BitmapHyperLogLogGeospatial,其中Bitmap 、HyperLogLog的底层都是 String 数据类型,Geospatial 底层是 Sorted Set 数据类型。

    redis的持久化机制有哪些?

    1、快照RDB。将某个时间点上的数据库状态保存到RDB文件中,RDB文件是一个压缩的二进制文件,保存在磁盘上。当Redis崩溃时,可用于恢复数据。通过SAVEBGSAVE来生成RDB文件。

    • SAVE:会阻塞redis进程,直到RDB文件创建完毕,在进程阻塞期间,redis不能处理任何命令请求。
    • BGSAVE:会fork出一个子进程,然后由子进程去负责生成RDB文件,父进程还可以继续处理命令请求,不会阻塞进程。

    2、只追加文件AOF。以日志的形式记录每个写操作(非读操作)。当不同节点同步数据时,读取日志文件的内容将写指令从前到后执行一次,即可完成数据恢复。

    有技术一点的部分呢和功能?

    bean的生命周期?

    在这里插入图片描述

    redis作为缓存是怎么使用的?

    Redis是后端的缓存,主要对MySQL的数据作缓存(MySQL查询效率远不及Redis)

    对于多查询、少修改的数据(热点数据),则可以将其存入Redis中作为缓存。

    基于Redis缓存的数据查询流程

    如果接触新的东西是怎么学习的?

    反问

  • 相关阅读:
    Spark---RDD的创建分类和基础操作算子详解
    魔改车钥匙实现远程控车:(3)通过蓝牙与手机通信并持久化保存参数设置
    RPG游戏完整指南
    观察者模式实际应用场景「扩展点实战系列」- 第439篇
    性能优于BERT的FLAIR:一篇文章入门Flair模型
    MATLAB中polyvalm函数用法
    如何为java项目开启Spring Boot模式呢?
    python内置函数
    PySide6+VSCode Python可视化环境搭建
    【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包打开新窗口预览pdf文件
  • 原文地址:https://blog.csdn.net/qq_45830289/article/details/126430795