java近期面试题小结

  1. final修饰的类、方法和变量

        final修饰的类不能被继承

        final修饰的方法不能在子类被覆盖

        final修饰变量,称为常量,初始化后不能改变值

        final修饰的对象引用不可变,内容可变

    2. mysql中的级联查询

        start with 指定层次开始的条件,即是说满足这个条件的行即可以做为层次树的最顶层

        connect by prior指层之间的关联条件,即什么样的行是上层行的子行(自连接条件)

   3. 开发中的7大原则(重点记忆开闭原则)

        开闭原则:对扩展开放,对修改关闭
        里氏替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象
        依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体
        接口隔离原则:客户端不应该依赖那些它不需要的接口
        迪米特法则:最少直到原则
        合成复用原则:尽量使用合成/聚合的方式,而不是使用继承
        单一职责原则:类的职责要单一,不能将太多的职责放在一个类中

 4. StringStringBuffer的区别

  • 内部实现不同
  1. String在进行字符串处理时,会生成新的对象
  2. StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上优于串类
  • 使用情况不同
  1. String用在固定的字符串,不经常对字符串进行修改
  2. StringBuffer用于经常需要对一个字符串进行修改,比如删除、修改等情况

5. “==”和”equals”的区别

  ==是运算符,如果是基本数据类型,就比较存储的值;如果是引用数据类型,则比较所指向对象的地址值

  Equals是Object的方法,比较的是所指向对象的地址值,一般情况下,重写之后比较的是对象的值

6. 常用的jdbc连接和mybatis的工作原理?

Jdbc连接:1.加载驱动 2.获取连接 3.创建Statement或PreparedStatement【设置参数】4.执行sql==>executeXxx() 5.遍历结果集 6.遍历结果集

使用数据库连接池解决问题:频繁的建立连接释放连接,造成资源的浪费

使用DateSource实现隔离解耦,用于dbcp连接池,c3p0连接池,druid连接池

Mybatis的工作原理:

从配置文件xml或者java文件中读取数据源;

创建SqlSessionFactoryBuilder;

构建SqlSessionFactory;

构建sessIon

第一种方式:以前原生的方式

SqlSession#selectOne(方法签名, 参数)

第二种方式:Mapper

MapperMethod#execute

7. Mybatis中的sql注入是什么?如何防止sql注入?#{}的底层实现

Sql注入即是指Web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

Mybatis在处理${}时,就是把${}直接替换成变量的值。而Mybatis在处理#{}时,会对sql语句进行预处理,将sql中的#{}替换成?号,调用PreparedStatement的set方法来赋值。

使用#{}可以有效的防止sql注入,提高系统安全性。

8. Mybatis中的一级缓存和二级缓存?如何实现多条语句的插入

Mybatis的一级缓存是Mybatis在一次会话中,生成一个SqlSession对象表示本地缓存,对于每次请求都会根据查询条件到本地缓存中查找是否在缓存中,如果在,则直接从缓存中取出返回给用户;否则从数据库读取数据,将查询结果保存到缓存中并返回给用户。

Mybatis中的SqlSession对象中有一个Excutor对象,Excutor对象持有一个新的PerpetualCache对象(Cache接口的实现类);当会话结束时,SqlSession对象及其内部的Excutor对象和PerpetualCache对象都会被销毁

如果SqlSession对象使用了close()方法,会释放调用PerpetualCache对象,一级缓存不可用

如果SqlSession对象使用了clearcache()方法,会清空PerpetualCache对象中的数据,但是SqlSession对象仍然可用

SqlSession对象每次执行一个增/删/改操作之后提交事务commit(),都会清空PerpetualCache对象的内容,但是SqlSession对象仍然可用。

二级缓存作用域全局,适用于相当消耗性能,并且对于时效性不敏感的场景

在全局设置中开启二级缓存:

<setting>

..

<setting name=”cacheEnabled” value=”True”>

</setting>

在xxxmapper.xml中开启标签

<cache/>

实现二级缓存除了xxxmapper.xml中开启以外,还需要目标实体类实现序列化的接口;如果实体类由父类或级联属性,也需要实现序列化

如何实现多条数据的插入:

xxxmapper.xml文件中,使用foreach标签拼接SQL

< insert id=”insertBatch” parameterType=”java.util.List”>

        INSERT INTO DL_RU_CASE(BATCH_NO,CASE_NO,PROC_DEF_KEY, FORM_ID, ECM_FILE_ID)

VALUES

        <foreach collection=”list” item=”item” index=”index” separator=”,”>

            (#{item.batchNo},#{item.caseNo},#{item.procDefKey},#{item.formId},#{item.ecmFileId}

        </foreach>

</insert>

9.springMVC的流程

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  5. 执行处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapatercontroller执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServletModelAndView传给ViewReslover视图解析器
  9. ViewReslover解析后返回具体View
  10. DispatcherServletView进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户

10. Restful如何跳过视图层

英文representational state transfer直译为表现层状态转移,或者表述性状态转移。

为什么需要Restful?

URL具有很强可读性的,具有自描述性

规范化请求过程和返回结果

资源描述与视图的松耦合

可提供OpenAPI,便于第三方系统集成,提高互操作性

提供无状态的服务接口,降低复杂度,可提高应用的水平扩展性

11. SpringBoot的启动类注解的组成

        第一个:@SpringBootConfiguration(声明当前类是一个配置类,简化xml操作)

        第二个:@EnableAutoConfiguration(开启自动配置,告诉SpringBoot基于所添加的以来

        第三个:@ComponentScan(配置组件扫描的指令)

12. SpringBoot的启动类可以加载哪些配置文件

        可以加载application.ymlapplication.xml配置文件

13. Servlet2.0Servlet3.0的区别

        新创建一个servlet,需要在web.xml中注册信息

        服务器根据url查找<url-pattern>,找到后就再找到对应<servlet-name>,最后通过对应的        <servlet-name>找到该servlet所在的地址。

        Servlet3.0引入了Annotation标注来取代xml配置,用于简化web应用的开发和部署。Servlet3.0除了如上方法还可以使用@WebServlet@WebFilter进行过滤器配置。

14. Servlet的生命周期

        初始化、实例化、服务、销毁

15. Servlet如何实现数据交互

  1. servletContext接口(全局作用域对象)
  2. cookie 一个cookie只能存一对键值对,键值对只能是两个字符串
  3. HttpSession接口 会话作用域对象

Httpsessioncookie的区别:

  1. 存储位置不同,cookie存放在用户电脑内存中。而httpsession存放在服务器的内存
  2. 可以存储的数据类型不同,cookie只能存字符性,而httpsession可以存任意类型
  3. 存储数量不同,cookie只能存一个键值对,而httpsession可以存多个键值对。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值