当前位置: 代码迷 >> 综合 >> java 银行基础面试(一)
  详细解决方案

java 银行基础面试(一)

热度:82   发布时间:2024-02-19 14:11:03.0

1.了解过序列化吗?什么是序列化?序列化有什么用?怎么用?

答:序列化其实就是将一个对象流化的一种机制。即可以很方便的保存内存中java对象的状态,同时也为了方便传输。

作用:

1.方便传输,速度快,还很安全,被调用方序列化,调用方反序列化即可拿到传输前最原始的java对象,常用于不同进程之间的对象传输

2.方便存储,不管是存储成文件还是数据库,都行,存储为文件,下回要用可以直接反序列拿到对象

使用:

实现Serializable接口,定义serialVersionUID 版本,在反序列的时候会根据版本进行比对,必须public static final。

同时记住静态变量不会被序列化的,它可不在堆内存中,序列化只会序列化堆内存

延申:

1.标识该成员为transient,即序列化时跳过该成员

2.Serializable 和 Externalizable 接口有何不同?Externalizable 提供了writeExternal ()和 readExternal () 方法

2.string用+号在for循环中会怎样?

答:在for循环中,每次都是new了一个StringBuilder,然后再把String转成StringBuilder,再进行append。

而频繁的新建对象当然要耗费很多时间了,不仅仅会耗费时间,频繁的创建对象,还会造成内存资源的浪费。

因此,经过对比发现,直接使用StringBuilder的方式是效率最高的。因为StringBuilder天生就是设计来定义可变字符串和字符串的变化操作的。

但是,还要强调的是:

1、如果不是在循环体中进行字符串拼接的话,直接使用+就好了。

2、如果在并发场景中进行字符串拼接的话,要使用StringBuffer来代替StringBuilder。

3.mybatis中#号和$符的区别?要用哪个?

答:

区别:

1.#可以防止Sql 注入,它会将所有传入的参数作为一个字符串来处理。

2.$ 则将传入的参数拼接到Sql上去执行,一般用于表名和字段名参数,$ 所对应的参数应该由服务器端提供,前端可以用参数进行选择,避免 Sql 注入的风险

在预编译的过程中,#会被替换成占位符?,而$直接就变成参数名。

4.java8新特性中你知道哪些?知道并发的时候用什么?

答:目前只用过list steam()流,用过分组groupby,排序sort,转list,map。

将普通流转并发流用parallel(),或者parallelStream()。