天源迪科面经

面试大概50min左右,全程都是提问八股文。

  • java集合有哪些
  • hashMap和HashTable的区别
    • hashMap允许键和值是null,而hashtable不允许键或者值是null
    • hashtable是线程安全得,hashMap不是
    • hashMap执行效率搞
    • Hashtable是同步得,HashMap不是,所有HashMap更适合单线程环境。

一般现在不建议使用hashTable。1.hashTable是遗留类,内部实现很多没优化和冗余。2,多线程环境下有同步得concurrentHahsMap替代,没必要用hashTable.

  • ==和equla()区别
    • ==比较得时引用地址是否相等,equals比较得是值是否相等。
  • String,StringBuilder,StringBUffer区别
    • String是不可变的对象,StringBuilder和StringBuffer是可变的。String对象一旦创建就不可修改,任何操作都会返回一个新的String对象,这会导致频繁的对象创建和销毁,印象性能。StringBuilder和StringBuffer允许进行修改操作提供了一种更高效的字符串处理方式。
    • StringBuffer 和 StringBuilder 的主要区别在于线程安全性和性能⽅⾯。StringBuffer是线程安全的,可以被多个线程同时访问和修改。StringBuilder不是线程安全的,但是具有更高得性能
  • 线程有哪些状态
    • 新建:当线程对象创建后,就进入了新建状态。此时它已经有了对应得 内存空间和 其他资源,但是还没有开始运行。
    • 就绪:当线程对象调用statrt()方法后,线程就进入了就绪状态,只等cpu分配资源,让其开始执行。
    • 运行:当线程对象获得cpu资源后,就开始执行run()方法中得代码,线程处于运行状态
    • 阻塞:指线程在某些特定情况下会被挂起,暂时停止执行,当线程处于阻塞状态时,不会占用cpu得资源。
    • 终止:指线程的run()方法执行完毕或者因异常退出,线程进入了终止状态。此时该线程不再占用cpu资源,也不再执行任何代码。
  • Vlatile关键字了解吗
  • 实现线程有哪些方式
    • 继承Thread类
    • 实现Runnable接口,重写里面得run方法。
    • 使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现。
  • 简历中提到的垃圾回收机制,类加载机制
    • 内存中存在没有引用得对象或者超过作用域得对象得时候进行垃圾回收,目的是识别并且丢弃不再使用得对象来释放和重用资源。
  • IOC和AOP
    • ioc:控制反转是指讲对象得创建和依赖注入在spring容器中进行,由spring容器负责创建对象和管理他们之间得依赖关系。这样应用代码就只需要关注业务逻辑实现,不需要 关注对象得创建和管理,降低了应用代码得复杂度,提高了代码得可用性和可维护性。
    • aop面向切面编程:指将与业务逻辑无关得代码,从业务逻辑中剥离出来,以便于统一管理和维护。通过aop我们可以将这些与业务逻辑无关得横切关注点,定义为切面,并将他们织入到业务逻辑中,实现业务逻辑和横切关注点得解耦。
    • 这两个概念是spring得核心,使spring框架有了高度 得可扩展性,灵活性,和模块化,极大地提高了应用程序得开发效率和代码得可维护性。
  • Spring事务传播机制。
  • @Autowired和@Resource区别
    • @Autowired是通过类型注入得,如果存在多个实现类需要通过名字注入@Qualifier指定bean得名称
    • @Rescource :java自带得注入方式,按照名称自动装配,默认时按照属性名称进行匹配,如果需要按照Bean得名称进行匹配,可以使用@Resource(name=”Beanname")
  • Mybatis常用标签,怎么用
  • #{}和${}得区别
  • MyBatis xml文件和接口是怎么映射上的 
  • MyBatis 一级缓存和二级缓存 
  • MyBatis 模糊查询怎么写,标签和sql语句 
  • SpringBoot 相比于 SSM 的好处 
  • SpringBoot 启动类的注解 Y
  • SpringBoot 怎么解决跨域问题 
  • MySQL 有哪些存储引擎,分别介绍一下 
    • mysql支持多种引擎,包括InnerDB,MyISAM,MEMORY,CSV等,mysql默认使用innerDB。
    • 最常用得是InnoBD和MyISAM
  • InnoDB 和 MyISAM 区别 
    • InnoDB支持事务操作,而MyISAM不支持事务
    • InnoDB支持外键,而MyISAM不支持外键
    • InnoDB支持行级锁,表级锁,而MyISAM只支持表级锁
    • InnoDB还支持数据库异常崩溃后得安全恢复,MyISAM不支持。
    • InnoDB性能比MYISAM强,随着cpu核数得增加innoDB读写能力呈线性增长,MyISAM因为读写不能并发,它的处理能力和核数没关系。

在读密集得情况下,不需要事务,也不需要保证数据库得崩溃恢复可以选择MyISAM。

  • MySQL 中的事务隔离级别 
    • 读未提交:事务可以读取未提交得数据,可能会读到脏数据,会导致幻读,不可重复读,脏读等问题。
    • 读已提交:和i能读取已经提交得数据,可以 避免脏读问题,但是可能会遇到不可重复度,幻读问题。
    • 可重复读:保证同一事物多次读取同一数据得结果时一致得,避免了脏读和不可重复读问题,但是可能会遇到幻读问题;
    • 序列化:最高得隔离级别,可以避免所有并发问题,但是并发性能非常低,开销很大。

                mysql得默认隔离级别是可重复读。

  • MySQL中的索引 
    • 索引是一种数据结构,用于提高数据库表的查询效率
    • 索引可以帮助数据库快速定位和检索存储在 表中得数据,从而加快数据查询得速度。在数据量比较大时,使用索引可以极大地提高数据检索得效率
    • 索引是通过构建一个额外得数据结构来加速数据的检索,实在数据库表上创建得一种数据结构,包含一些指向表中数据得指针,可以快速定位到满足查询条件数据行,从而提高查询效率,
  • 适合使用索引得场景
    • 频繁查询得列,如主键,外键
    • 经常作为查询条件得列
    • 经常需要连接得列
    • 数据量较大得表
  • 索引得缺点
    • 占用了额外的存储空间
    • 建立索引需要时间,增加了系统开销
    • 数据库得操作会导致索引得重建,影响系统得性能。
  • 索引失效的场景 
    • 使用函数,计算,类型转换
    • 不符合最左匹配原则
  • Redis 一些常见的数据类型和指令 Y
  • Redis怎么保证数据库和缓存双写一致性 N
  • Redis的哈希槽了解吗 Y
  • Redis的缓存问题以及如何解决 Y
  • Redis的持久化 
    • RDB持久化机制:快照 Snapshot
    •  将redis在内存中的数据以快照的形式写入磁盘中,可以手动或者自动执行快照操作,将数据集保存到一个RDB文件中
      • 优势:适合在数据集比较大时进行备份操作,因为它可以生成一个非常紧凑,经过压缩的数据文件,对于备份,回复,迁移数据都很方便。
      • 缺点:可能出现数据丢失,因为数据是周期性地进行备份,一旦redis出现问题并且上一次备份之后还没有进行过数据变更,那么这部分数据将会丢失。
      • RDB机制会早成一定的IO压力,当数据集比较大时,进行备份操作可能会阻塞Redis服务器进程。
    • AOF机制Append Only File 只追加日志文件 
    • 是指将Redis在内存中的操作命令以追加的方式写入到磁盘中的AOF文件,AOF文件记录了Redis在内存中的操作过程,只要在Redis重启后重新执行AOF文件中的操作命令即可将数据回复到内存中。
      • 优点:比RDB机制更加可靠,因为AOF文件记录了Redis执行的所有操作命令,可以确保数据不丢失。
      • 在恢复大数据集时更加稳健,因为AOF文件记录了数据的执行过程,可以确保每一次操作都被正确执行。
      • 缺点:生成的AOF文件比RDB文件更大,数据集教大时,占用更多的磁盘空间。
      • 恢复数据的时间比RDB机制更耗时,因为要重新执行AOF文件中的所有操作命令。

综上所述,RDB适合用于数据集较大,备份,恢复数据和迁移数据等场景。AOF适合要求数据可靠性高,数据恢复稳健等场景。

默认开启快照,同时启用两种持久化方式时,优先AOF  

        

  • 搭建过Redis集群吗,出现过什么问题吗 N
  • 项目中用过Redis分布式锁,为什么要用,怎么用的,代码是怎么写的 Y
  • 了解过zk吗 N
  • RabbitMQ 的优点好处,项目中用过MQ吗,还了解哪些MQ N
  • 冒泡排序的时间复杂度、空间复杂度 Y
  • Linux 解压缩命令 Y

你可能感兴趣的:(java,开发语言)