Java软件工程师面试常见问题整理5

41.题目:索引失效情况有哪些?
        1、like以%开头索引无效,当like 以&结尾,索引有效。
        2、or 语句前后没有同时使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生效。
        3、组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。
        4、数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为int 类型,这个时候索引失效。
        5、在索引列上使用IS NULL或者 IS NOT NULL时候,索引失效,因为索引是不索引空值得。
        6、在索引字段上使用,NOT、<>、!=、时候是不会使用索引的,对于这样的处理只会进行全表扫描。
        7、对索引字段进行计算操作,函数操作时不会使用索引。
        8、当全表扫描速度比索引速度快的时候不会使用索引。


42.题目:请你谈谈 Cookie的弊端?
        1、Cookie 数量和长度的限制。每个domain 最多只能有20条Cookie,每个Cookie 长度不能超过 4KB,否则会被截掉。
        2、安全性问题。如果 Cookie 被人拦截,就可以取得所有的 Session 信息。即使加密也与事无补,因为拦截者并不需要知道Cookie 的意义,他只要原样转发 Cookie 就可以达到目的。
        3、有些状态不可能保存在客户端。例如,为了防止重复提交表单,需要在服务器端保存一个计数器。如果把这个计数器保存在客户端,那么它起不到任何作用。


43、题目:HTTP 和 HTTPS 的区别?
        1.端口:HTTP 的URL 由“http://”起始且默认使用端口80,而 HTTPS 的 URL 由“https://”起始且默认使用端口 443。
        2.安全性和资源消耗:HTTP 协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都是。HTTPS是运行在SSL/TLS之上的HTTP协议, SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥在服务器端的证书进行了非对称加密。

        所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。


44.题目:说一下 Session 的工作原理?
        其实 Session 是一个存在服务器上的类似于一个散列表格的文件、里面存有需要的信息,在需要用的时候可以从里面取出来。类似于一个大号的 Map,里面的键存储的是用户的 SessionId,用户向服务器发送请求的时候会带上这个SessionId。这时就可以从中取出对应的值。


45.题目:Spring AOP 和 AspectJ AOP 有什么区别?
        Spring AOP 属于运行时增强,而 AspectJ是编译时增强。Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。
        Spring AOP 已经集成了 AspectJ,AspectJ 应该算的上是 Java生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,
        如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ,它比 Spring AOP 快很多。


46.题目:解释一下什么是 AOP?
        AOP:Aspect Oriented Programming,面向切面编程。通过预编译和运行期动态代理实现程序功能的统一维护。在 Spring 框架中,AOP 是一个很重要的功能。
AOP 利用一种称为横切的技术,剖开对象的封装,并将影响多个类的公共行为另封装到一个可重用模块,组成一个切面,即 Aspect 。"切面"就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,利于可操作性和可维护性。

实现 AOP 的方式,主要有两大类:
        采用动态代理技术,利用拦截方法的方式,对该方法进行装饰,以增强原有对象的方法。具体实现技术有 JDK 动态代理、基于接口代理和 CGLIB基于类代理的字节码提升。
        采用静态织入的方式,引入特定的语法创建"切面",从而使得编译器可以在编译期间织入有关"切面"的代码。具体是 Spring 对 AspectJ 进行织入的实现。


47.题目:Spring 事务实现方式有哪些?
        1、编程式事务管理对基于 POJO的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
        2、基于 TransactionProxyFactoryBean 的声明式事务管理。
        3、基于 @Transactional 的声明式事务管理。
        4、基于 AspectJ AOP 配置事务。


48.题目:什么是 Spring MVC?简单介绍下你对 Spring MVC的理解?
        Spring MVC 是一个基于MVC 架构的用来简化 WEB 应用程序开发的应用开发框架,它是 Spring 的一个模块,无需中间整合层来整合,它属于表现层的框架。在WEB 模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的WEB用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 


SpringMVC 三大组件:
        1、HandlerMapping:处理器映射器,用户请求路径到Controller方法的映射。
        2、HandlerAdapter:处理器适配器,根据handler(controlelr类)的开发方式(注解开发/其他开发)方式的不同去寻找不同的处理器适配器。
        3、ViewResolver: 视图解析器,可以解析 JSP/freemarkerr/pdf 等。


49.题目:Spring MVC Framework 有哪些特点?
        1、它是基于组件技术的全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件,并且和Spring 提供的其他基础结构紧密集成。
        2、不依赖于 Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet 的)。
        3、可以任意使用各种视图技术,而不仅仅局限于 JSP。
        4、支持各种请求资源的映射策略。
        5、它应是易于扩展的。


50.题目:说一下 Hibernate的缓存机制?
        Hibernate 中的缓存分为一级缓存和二级缓存。
        一级缓存就是Session 级别的缓存,在事务范围内有效是,内置的不能被卸载。
        二级缓存是 SesionFactory级别的缓存,从应用启动到应用结束有效。是可选的,默认没有二级缓存,需要手动开启。保存数据库后,缓存在内存中保存一份,如果更新了数据库就要同步更新。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不吃橘子的橘猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值