面试题
1.throw 和 throws 的区别?
- throw:是用在语句抛出异常
throw特点:
1) throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。throw 是具体 向外抛异常的动作,所以它是抛出一个异常实例,执行 throw 则一定抛出了某种异常
2) throws 是用在声明方法时,表示该方法可能要抛出异常- throws特点:
1)throws 语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理
2) throws 主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常
3) throws 表示出现异常的一种可能性,并不一定会发生这些异常
注意:抛出的异常可以使系统定义,也可以是自定义;使用 try,catch,finally 捕获异常。
2.final、finally、 finalize 的区别
- 1)final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
- 2)Finally:异常处理语句结构的一部分,表示总是执行。
- 3)finalize:Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
3.IO 流
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在
两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
4.break 和continue 的区别?
- break 和 continue 都是用来控制循环,主要是终止循环;
- break 用于完全结束一个循环,跳出循环体执行循环后面的语句;
- continue 用于跳过本次循环,执行下次循环;
5.如何实现对象克隆?
1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;
2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深克隆
6.获得一个类的类对象有哪些方式?
1):类型.class,例如:String.class
2):对象.getClass(),例如:”hello”.getClass()
3):Class.forName(),例如:Class.forName(“java.lang.String”)
7.MyBatis编程步骤是什么样的?
① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话
8.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。
④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。
9.简单的说一下MyBatis的一级缓存和二级缓存?
- Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象
- Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。
流程图
1.程序之间通信json数据转换.png 2.用户注册--发送短信--流程分析.png 3.用户登录和登录过滤器--流程分析.png 4.鉴权中心--用户登录--流程图.pngjmyp.png
网友评论