SSH

本文探讨了Struts2的工作机制,包括为何每个请求都需要创建新的Action对象、ValueStack的概念及Struts2如何实现MVC设计模式。同时,文章还讨论了Spring框架的优势及其核心概念如IOC/DI和声明式事务管理。
Struts2:
1-1:为什么每次请求都要创建一个Action对象?
1-2:ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?
1-3:为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?
1-4:请你给我谈谈ValueStack?
1-5:Struts2是如何实现MVC设计模式的?

Spring:
2-1:你为什么要用Spring?
2-2:请你聊一聊IOC/DI?
2-3:什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?
2-4:把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行 查询任务的方法定义为read-only?

Hibernate:
3-1:请你谈谈你对OR映射的理解?
3-2:很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?
3-3:Hibernate为什么一定要定义一个数据库标识?
3-4:为什么Hibernate建议你的实体类实现hashCode和equals方法?
3-5:谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?
3-6:谈谈你对Hibernate关联映射与数据库外键之间关系的认识?
3-7:调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解
3-8:调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解
3-9:请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size
3-10:配置了lazy=”true”一定会实现懒加载吗?
3-11:请你谈谈Hibernate中的“N+1”问题
3-12:请你谈谈Hibernate有哪些最佳实践?


1-1:为什么每次请求都要创建一个Action对象?
为了防止线程迸发,如果每次都使用同一个Action进行数据修改和传递的话,容易引起线程迸发,使线程不安全。
1-2:ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?
在数据输出之前将数据接收的Bean里面的数据清空。解决了数据混淆的可能性。
1-3:为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?
为了1.可以将数据进行过滤
2.可以进行数据的转码将数据进行统一的编码
1-2:请你给我谈谈ValueStack?
堆值,堆里面的值。
1-5:Struts2是如何实现MVC设计模式的?
在Struts2里面是将每次页面的请求进行处理,然后将请求需要输出的数据转发的需要做数据显示的页面,Struts2只是起一个数据接受和转接的功能,就是Controler控制器,而传来数据的页面叫View显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的链接。


2-1:你为什么要用Spring?
使用Spring 1.主要将各个框架进行有效的联系起来,缩短实际编程的时间,起一个润滑剂的作用。
2.可以将各个框架进行有效的管理和控制,让数据传输中安全。
2-2:请你聊一聊IOC/DI?
依赖注入和控制反转Spring的两大基础作用
主要是将所有组件在Spring提供的外部容器中加载,提高安全性,减低耦合性,使各个框架或者类之间的依赖性降低。
2-3:什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?
声明事物管理主要是将在进行对数据库中数据进行添加或者修改的时候需要执行事物管理。主要是避免在执行数据修改和添加的时候数据添加或者修改不完全,导致数据丢失。
Spring是使用AOP面向切面的思想进行事物管理的。
2-4:把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行 查询任务的方法定义为read-only?
因为添加和删除和更新都涉及到数据库的修改,而查询并为涉及数据修改,所以只需要定义只读,这样可以提高效率,进行更加方便的事物管理。而事物管理主要是为添加和删除和更新设计的。


3-1:请你谈谈你对OR映射的理解?
将数据库里面的每一张表都映射成一个实体。
3-2:很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?
因为Hibernate属于大型框架,里面对许多方法的封装比较多,让SQL控制权降低。这样的话,适用性就会降低,在不必要的操作上会浪费时间。但是只要将Hibernate里的配置进行优化,也能提高其性能。
3-3:Hibernate为什么一定要定义一个数据库标识?
可以让映射文件变得简洁,消除无用的噪音(比如TBL_前缀等)。Hibernate使用的默认策略是几乎什么都不做,所以使用标识的作用就是使数据操作更加简洁和方便
3-4:为什么Hibernate建议你的实体类实现hashCode和equals方法?
因为Hibernate使用了一级和二级缓存,很多查询为了提高效率Hibernate都会先从缓存中进行查找,然后再从数据库进行查找。而HashCode是唯一的,所以这样避免数据操作出现数据混淆的可能,而equals的作用是对比Hibernate缓存中数据是否一致。
3-5:谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?
数据库标识是为了方便和简洁映射文件,而主键是为了使数据不会重复。
3-6:谈谈你对Hibernate关联映射与数据库外键之间关系的认识?
Hibernate在进行映射的时候会将数据库的关系也进行映射将数据库中的外键也使用标签的形式进行管理,这样在人为操作的时候就不需要手动的管理数据库关系了。
3-7:调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解
不会,具体执行步骤如下:
1. 首先在Session内部缓存中进行查找,如果发现则直接返回。
2. 执行实体类对应的Interceptor.isUnsaved方法(如果有的话),判断对象是否为未保存状态。
3. 根据unsaved-value判断对象是否处于未保存状态。
4. 如果对象未保存(Transient状态),则调用save方法保存对象。
5. 如果对象未已保存(Detached状态),则调用update方法将对象与Session重新关联。 。
3-8:调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解
理解同上
3-9:请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size
lazy懒,lazy=“extra”extra属性是不大容易重视的,其实它和true差不多,但有个小的智能的地方是,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
inverse控制翻转,主要是为了让谁去维护关系,一般是在主表中配置,将维护关系的只能交给主键。
fetch取来,fetch="join"主要是在查询的时候Hibernate会自动查询有关联的表。fetch="join",hibernate会通过select语句使用外连接来加载其关联实体或集合,此时lazy会失效
fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合
batch-size配置这个属性是让Hibernate在执行批量的数据库操作
3-10:配置了lazy=”true”一定会实现懒加载吗?
不一定,因为如果再配置中你也使用fetch属性的话此时lazy就会失效
3-11:请你谈谈Hibernate中的“N+1”问题
主要是如果再一般的查询时,如果需要查询很多次,就需要像数据库发送很多条SQL语句,而且,会返回很多个结果,而Hibernate中使用N+1策略时执行Criteria时,会将自动进行SQL构造,并且映射到实体Bean中,就只会返回一个结果,这样不仅提高了性能,而且在处理返回值的时候也变得比较轻松。
3-12:请你谈谈Hibernate有哪些最佳实践?
数据库建模,ORM是Hibernate中比较经典。


原文地址:http://zhidao.baidu.com/question/255434112.html
内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重点关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
基于Gin+GORM+Casbin+Vue.js的权限管理系统是一个采用前后端分离架构的企业级权限管理解决方案,专为软件工程和计算机科学专业的毕业设计项目开发。该系统基于Go语言构建后端服务,结合Vue.js前端框架,实现了完整的权限控制和管理功能,适用于各类需要精细化权限管理的应用场景。 系统后端采用Gin作为Web框架,提供高性能的HTTP服务;使用GORM作为ORM框架,简化数据库操作;集成Casbin实现灵活的权限控制模型。前端基于vue-element-admin模板开发,提供现代化的用户界面和交互体验。系统采用分层架构和模块化设计,确保代码的可维护性和可扩展性。 主要功能包括用户管理、角色管理、权限管理、菜单管理、操作日志等核心模块。用户管理模块支持用户信息的增删改查和状态管理;角色管理模块允许定义不同角色并分配相应权限;权限管理模块基于Casbin实现细粒度的访问控制;菜单管理模块动态生成前端导航菜单;操作日志模块记录系统关键操作,便于审计和追踪。 技术栈方面,后端使用Go语言开发,结合Gin、GORM、Casbin等成熟框架;前端使用Vue.js、Element UI等现代前端技术;数据库支持MySQL、PostgreSQL等主流关系型数据库;采用RESTful API设计规范,确保前后端通信的标准化。系统还应用了单例模式、工厂模式、依赖注入等设计模式,提升代码质量和可测试性。 该权限管理系统适用于企业管理系统、内部办公平台、多租户SaaS应用等需要复杂权限控制的场景。作为毕业设计项目,它提供了完整的源码和论文文档,帮助学生深入理解前后端分离架构、权限控制原理、现代Web开发技术等关键知识点。系统设计规范,代码结构清晰,注释完整,非常适合作为计算机相关专业的毕业设计参考或实际项目开发的基础框架。 资源包含完整的系统源码、数据库设计文档、部署说明和毕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值