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()。