码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【金三银四】哈啰Java实习一面


    面经来源:https://www.nowcoder.com/share/jump/7602220581710053984592

    目录

    • 1、项目用了哪些框架?(springboot,Redis)这些框架是如何读取数据的?
    • 2、比如说你的Redis是如何读取到数据的?(用的Redistemplate类实现)
    • 3、数据库是用什么连接的?(没反应过来,面试官说总不能是用jdbc吧,反应过来是mybatis)
    • 4、讲讲mybatis,mybatisplus
    • 5、项目中事务怎么实现的?
    • 6、那谈谈你对事务的理解
    • 7、有没有设置隔离级别?
    • 8、MySQL默认的隔离级别是什么?解决了什么问题?
    • 9、数据一致性怎么考虑的?(旁路缓存)
    • 10、项目问完了,问你一些基础知识,谈谈你对spring的理解?
    • 11、spring源码有研究过吗?(说了springbootapplication注解相关的东西)
    • 12、项目中你用了哪些注解?(每一层的注解讲了一下)
    • 13、spring是如何管理这些Bean的?(不太会说,讲了工厂模式和依赖注入)
    • 14、自动配置注入的类是单例模式的吗?
    • 15、手撕单例模式(不会,说思路,问我项目中用到的设计模式可以写下,也没有)
    • 16、那spring中用到了哪些设计模式?(工厂,适配器)

    1、项目用了哪些框架?(springboot,Redis)这些框架是如何读取数据的?

    2、比如说你的Redis是如何读取到数据的?(用的Redistemplate类实现)

    3、数据库是用什么连接的?(没反应过来,面试官说总不能是用jdbc吧,反应过来是mybatis)

    4、讲讲mybatis,mybatisplus

    5、项目中事务怎么实现的?

    在项目中实现事务控制,特别是对于基于Java的企业级应用,例如使用Spring Boot构建的应用结合JDBC或ORM框架(如Hibernate或MyBatis)时,通常采用Spring Framework提供的事务管理机制。以下是实现事务的基本步骤和原理概述:

    1. 选择支持事务的数据库存储引擎:

      • 在使用MySQL时,确保你使用的数据库表是基于支持事务的存储引擎,如InnoDB。因为事务是由存储引擎层面实现的,像MyISAM这样的非事务性存储引擎则不支持。
    2. 配置事务管理器:

      • 在Spring中,你需要配置一个事务管理器,例如PlatformTransactionManager的一个实现,对于JDBC事务,可以使用DataSourceTransactionManager,对于JPA或Hibernate,可以使用JpaTransactionManager或HibernateTransactionManager。
    3. 启用事务管理:

      • 在Spring Boot应用中,由于其自动配置特性,通常无需手动配置事务管理器,只要相关依赖已经引入并且数据源配置正确,Spring Boot会自动配置好事务管理器。
    4. 注解式事务管理:

      • 使用@Transactional注解来标记那些需要进行事务控制的方法。此注解可以放在服务层或DAO层的方法上,表明在该方法内部进行的所有数据库操作都应当在一个事务内执行。
        @Service
        public class UserService {
            // ...
            @Transactional
            public void updateUserAndHisDepartment(User user, Department department) {
                // 更新用户...
                userRepository.save(user);
                // 更新部门...
                departmentRepository.save(department);
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
      • @Transactional注解还可以指定事务的传播行为(propagation)、隔离级别(isolation)、只读(read-only)属性、超时(timeout)等。
    5. 编程式事务管理:

      • 如果不使用注解,也可以通过编程方式来实现事务管理,通过TransactionTemplate或者直接调用PlatformTransactionManager的API来手动开启、提交或回滚事务。
    6. 全局事务控制:

      • 对于分布式事务(例如涉及多个数据库或微服务之间的事务),可能需要JTA(Java Transaction API)或者其他分布式事务解决方案,如Seamless事务或两阶段提交(2PC)。

    总结来说,在Spring Boot项目中实现事务管理主要是通过Spring AOP(面向切面编程)与IoC容器配合,利用@Transactional注解或编程方式来代理方法调用,从而实现对数据库操作的事务控制。同时,事务的具体执行由底层的数据源或存储引擎保证。

    6、那谈谈你对事务的理解

    事务(Transaction)是一个逻辑工作单元,它包含了对数据库一系列相关的操作。这些操作作为一个整体执行,满足ACID特性(原子性、一致性、隔离性、持久性)

    事务是一个数据库操作的基本单位,它具有四个核心特性,即ACID原则:

    • 原子性(Atomicity):事务被视为一个不可分割的整体,事务中的所有操作要么全部成功,要么全部失败。如果事务中的任何操作失败,则整个事务将被回滚到开始之前的状态,就像从未发生过一样。

    • 一致性(Consistency):事务完成后,无论事务是否成功提交,数据库都应该保持一致状态。这意味着事务的执行必须使数据库从一个有效状态转换到另一个有效状态,符合所有的完整性约束。

    • 隔离性(Isolation):并发执行的事务之间互不影响,每个事务都好像在单独地操作数据库。为达到这一目标,数据库系统提供了不同的隔离级别,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

    • 持久性(Durability):一旦事务成功提交,对数据库的修改就是永久性的,即使在系统崩溃后也能保持不变。

    在实际开发中,事务管理是非常重要的一环,尤其在涉及到多表更新、资金转账、库存增减等场景,事务能够确保数据的一致性和完整性。例如,银行转账业务就是一个典型的需要事务的例子:从账户A向账户B转账时,需要先减少账户A的余额,再增加账户B的余额,这两个操作必须放在同一个事务中执行,以防止因中途出现问题导致某一方的账户余额出现错误。

    7、有没有设置隔离级别?

    8、MySQL默认的隔离级别是什么?解决了什么问题?

    9、数据一致性怎么考虑的?(旁路缓存)

    10、项目问完了,问你一些基础知识,谈谈你对spring的理解?

    11、spring源码有研究过吗?(说了springbootapplication注解相关的东西)

    12、项目中你用了哪些注解?(每一层的注解讲了一下)

    13、spring是如何管理这些Bean的?(不太会说,讲了工厂模式和依赖注入)

    14、自动配置注入的类是单例模式的吗?

    15、手撕单例模式(不会,说思路,问我项目中用到的设计模式可以写下,也没有)

    16、那spring中用到了哪些设计模式?(工厂,适配器)

  • 相关阅读:
    SOA中间件DDS(数据分发服务-Data Distribution Service)
    [运维|数据库] MySQL 中的COLLATE在 PostgreSQL如何表示
    解析Activity启动-生命周期角度
    前端逆向之下载canvas引用的图片
    path正则匹配MatcherUtil
    【Tensorflow生成minist手写图像以及解决遇到的问题】
    MySQL 学习笔记
    xml 解析bean工具类
    二叉树相关问题细谈递归
    在报酬与体验之间触碰到玩家“G”点才是元宇宙链游发展之道
  • 原文地址:https://blog.csdn.net/Z70769691/article/details/136602309
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号