【Java后端认证答辩、面试题】

1、标题死锁产生的原因及四个必要条件

产生死锁的原因主要是:

  • 因为系统资源不足。
  • 进程进行推进的顺序不合适
  • 资源分配不当等

产生死锁的四个必要条件

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件就必然成立,而只要上述条件之一不满足,就不会产生死锁。

死锁的解除与预防

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度方面注意如果不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占有资源。因此,对资源的分配要给予合理的规划。

2、Springboot的默认日志框架

Logback

3、Maven的生命周期

Maven 的内部有三个构建生命周期,分别是 clean, default, site。其中 default 生命周期的核心阶段如下所示
default 生命周期的核心阶段

4、Mysql B+树和B树的区别

首先B树的所有节点都存储数据信息,而B+ 树的所有数据都存储在叶子节点
B+ 树是在B树的基础上的一种优化,使其更加适合外存储索引结构,InnoDB存储引擎及时B+ 树实现其索引结构
从B树结构图中可以看到每个节点中不仅包含数据的Key值,还有data值,而每一页的存储空间是有限的,如果data数据较大时会导致每一个节点(也就是每一页)能存储的key的数量很小,当存储的数据量很大时同时会导致B树的深度很深,高度很高,增大磁盘的IO次数,进而影响查询效率,在B+树中,所有数据节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储Key值信息,这样可以大大增加每个节点存储的key值数量,降低B+树的高度

5、Nginx的工作模式有哪些

  • master-worker模式:nginx启动成功后,会有一个master进程和至少一个worker进程;master进程负责处理系统信号、加载配置、管理worker进程;worker进程负责处理具体的业务逻辑
  • 单进程模式:nginx只有一个进程,nginx的所有工作都由这个进程负责

6、Gitflow工作流程

  • 初始化项目为gitflow , 默认创建master分支 , 然后从master拉取第一个develop分支
  • develop拉取feature分支进行编码开发(多个开发人员拉取多个feature同时进行并行开发 , 互不影响)
  • feature分支完成后 , 合并到develop(不推送 , feature功能完成还未提测 , 推送后会影响其他功能分支的开发)
    合并feature到develop , 可以选择删除当前feature , 也可以不删除 . 但当前feature就不可更改了 , 必须从release分支继续编码修改
  • 从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG
  • release分支上线后 , 合并release分支到develop/master并推送
    合并之后 , 可选删除当前release分支 , 若不删除 , 则当前release不可修改 . 线上有问题也必须从master拉取hotfix分支进行修改
  • 上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改
  • hotfix通过测试上线后 , 合并hotfix分支到develop/master并推送
    合并之后 , 可选删除当前hostfix , 若不删除 , 则当前hotfix不可修改 , 若补丁未修复 , 需要从master拉取新的hotfix继续修改
  • 当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上
    即合并develop到当前feature分支
  • 当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上
    即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况)

7、nginx之压缩配置

#配置压缩的指令可以包含在http上下文中server或location配置块中
gzip on; #开启gzip压缩功能

8、Mybatis动态标签

元素作用场景
foreach循环语句批量添加或者批量查询
if判断语句单条件分支判断
choose、when、otherwise相当于Java中的switch case default语句多条件分支判断
trim、where、set辅助元素用于处理一些条件查询
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 什么是Django? Django是一个基于Python的高级Web开发框架,使用它可以轻松地创建高质量的Web应用程序。 2. 你为什么选择使用Django进行Web开发? Django具有强大的功能和可扩展性,可以帮助开发者更快地构建Web应用程序。它提供了很多有用的内置组件和功能,例如ORM、模板系统、安全性等。 3. 什么是Django的MVC模式? Django采用的是MVC(Model-View-Controller)模式,这种模式将应用程序分解为三个部分:模型、视图和控制器。模型表示数据,视图表示用户界面,控制器处理用户请求并调用相应的模型和视图。 4. 什么是Django ORM? ORM(对象关系映射)是一种将数据库中数据映射到对象上的技术。Django提供了强大的ORM功能,它允许开发者使用Python代码来操作数据库,而不必编写原始的SQL语句。 5. 什么是Django的模板系统? Django的模板系统允许开发者将HTML模板与Python代码分离。它使用一种类似于Jinja2的语法来呈现动态内容,例如变量、循环和条件语句。 6. 什么是Django的中间件? Django的中间件是在请求和响应处理过程中执行的一组插件。它们可以用于添加额外的功能,例如身份验证、缓存、日志记录等。 7. 什么是Django的信号框架? Django的信号框架是一种基于发布-订阅模式的机制,用于在应用程序中处理事件。信号可以在应用程序的不同部分之间传递信息,例如在模型保存之前或之后执行某些操作。 8. 什么是Django的缓存框架? Django的缓存框架可以帮助开发者提高Web应用程序的性能。它提供了多种缓存后端,例如内存、文件、数据库等,并且可以使用装饰器或中间件来缓存视图函数的输出。 9. 什么是Django的安全性功能? Django提供了多种安全性功能,例如跨站点请求伪造(CSRF)保护、跨站点脚本(XSS)防御、点击劫持防御等。开发者可以轻松地启用这些功能,以保护Web应用程序免受攻击。 10. 什么是Django的测试框架? Django的测试框架可以帮助开发者编写单元测试、功能测试和集成测试。它提供了多种测试工具和辅助函数,例如测试客户端、测试响应、测试模型等,可以帮助开发者确保应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月中cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值