A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

华泰智胜工程项目管理有限公司
1. springmvc怎么把数据封装成对象?
        只需在相应的方法的参数中加上需封装的POJO,当用户提交表单时,springMVC会根据表单中dom元素的name属性与请求的方法中的参数中的POJO的属性名进行比对,
        如果相同,则将name属性的值赋给这个属性,进而完成封装,
2. 说说habernate和mybatis之间的区别?
        相同点
        Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。
        其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。Hibernate和MyBatis都支持JDBC和JTA事务处理。
        不同点
        (1)hibernate是全自动,而mybatis是半自动
        (2)hibernate数据库移植性远大于mybatis
        (3)hibernate拥有完整的日志系统,mybatis则欠缺一些
        (4)mybatis相比hibernate需要关心很多细节
        (5)sql直接优化上,mybatis要比hibernate方便很多
        (6)缓存机制上,hibernate要比mybatis更好一些
3. sql多表的优化,他们用的是oracel
        1.执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就
        2.选择最有效率的表名顺序(记录少的放在后面)
        3.WHERE子句中的连接顺序(条件细的放在后面)
        4.SELECT子句中避免使用'* '
        5.减少访问数据库的次数
        6.删除重复记录
        7.用TRUNCATE替代DELETE
        8.尽量多使用COMMIT
        9.减少对表的查询
        10.用EXISTS替代IN,用NOT EXISTS替代NOT IN
4. 讲讲你对jvm的理解
        JVM内存空间包含:方法区、java堆、java栈、本地方法栈。
        方法区是各个线程共享的区域,存放类信息、常量、静态变量。
        java堆也是线程共享的区域,我们的类的实例就放在这个区域,可以想象你的一个系统会产生很多实例,因此java堆的空间也是最大的。如果java堆空间不足了,程序会抛出OutOfMemoryError异常。
        java栈是每个线程私有的区域,它的生命周期与线程相同,一个线程对应一个java栈,每执行一个方法就会往栈中压入一个元素,
        这个元素叫“栈帧”,而栈帧中包括了方法中的局部变量、用于存放中间状态值的操作栈,这里面有很多细节,我们以后再讲。如果java栈空间不足了,
        程序会抛出StackOverflowError异常,想一想什么情况下会容易产生这个错误,对,递归,递归如果深度很深,就会执行大量的方法,方法越多java栈的占用空间越大。
        本地方法栈角色和java栈类似,只不过它是用来表示执行本地方法的,本地方法栈存放的方法调用本地方法接口,最终调用本地方法库,实现与操作系统、硬件交互的目的。
        PC寄存器,说到这里我们的类已经加载了,实例对象、方法、静态变量都去了自己改去的地方,那么问题来了,
        程序该怎么执行,哪个方法先执行,哪个方法后执行,这些指令执行的顺序就是PC寄存器在管,它的作用就是控制程序指令的执行顺序。
5. spring依赖注入和传统new有啥好处
        那就是软件的后期维护,比如数据库换了,只需要改配置文件,不用全局去找
6. stuts和springmvc优缺点
        一、框架机制
        Struts2采用Filter实现,SpringMVC则采用Servlet实现。
        二、拦截机制
        1、Struts2
        a、Struts2框架是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型
        模式prototype(否则会出现线程并发问题),然后通过setter,getter吧request数据注入到属性。
        b、Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。
        c、Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了        ?
        2、SpringMVC
        a、SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,
        独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。
        b、在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,
        只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。
        三、性能方面
        SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,
        每次请求对应实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2。
        四、拦截机制
        Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
        五、配置方面
        spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
        SpringMVC可以认为已经100%零配置。
        六、设计思想
        Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
        七、集成方面
        SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,
        而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
7. Spring的如何实现依赖注入的?
        通过调用带参数的构造方法来实现,每一个参数都代表是一个依赖。调用(注入)的对象通过在被注入对
象中的构造方法中声明的参数列表让容器知道他要依赖哪些对象,然后spring容器检查被注入对象的构造方法,需要哪些对象,接着进行注入。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马