面试公司:南京中软国际
面试时间:10min
薪资:10-20k
经验:1-3年
String:字符串常量,不可变,String创建的字符串在常量池中,对于String类的任何改变都会返回一个新的String对象。适用于操作少量的数据。
StringBuild:在堆中创建对象,是非线程安全的,但是效率高,一般用于单线程的环境,在for循环中对字符串进行拼接。
StringBuffer:线程安全,效率比StringBuild低,底层使用同步锁,适用于多线程的环境。
概念:
序列化是把java对象转化为字节码的过程
反序列化是把字节码回复为对象的过程
作用:
正常情况下java对象是保存在内存中,是不能进行持久化,也不能进行网络传输的,如何解决呢?就是把Java对象转换为byte字节数据,以字节的方式去实现持久化保存和网络传输
序列化过程:
继承Serializable接口,这个一个空接口,告诉编译器这个类可以进行序列化的操作。这时候就可以把这个对象传输给前端或者保存在文件中
Java对象中,如果一个字段被transient修饰,或者这个字段是static静态字段,这个字段将不会被序列化,意味着,这个对象被序列化后,再次反序列化成Java对象后,对于的字段值为null。
gitlap;
1、索引优势:
索引类似于书籍检索目录,提高数据的检索效率,降低数据库的io成本
通过索引对数据排序,降低排序成本,降低cpu的消耗
2、索引劣势:
索引也是一张表,索引字段指向实体记录,索引占用空间,降低表的更新速度,增删改时不仅要保存数据,还要维护索引
3、 索引结构:
mysql索引是在存储引擎层实现的,默认索引是B+树(多路平衡搜索树)
4、 索引的分类:
单值索引:索引只包含一个列
唯一性索引:索引列的值唯一,但允许有空指。
复合索引:索引包含多列
5、索引设计原则:
a、对查询频次较高,且数据量比较大的表建立索引。
b、索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用、过滤效果最好的列的组合。
c、使用唯一索引,区分度越高,使用索引的效率越高。
d、索引可以提高查询效率,但是索引过多的话,对于DML操作比较多的表,会增加维护代价
e、使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O效率,也可以提升总体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效的提升MySQL访问索引的I/O效率。
g、利用最左前缀法则建立索引
6、索引的使用
违反最左前缀法则索引失效
范围查询右边的列索引失效
在索引列上进行运算操作索引失效
字符串不加单引号索引失效
尽量使用覆盖所有,避免使用select *
如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
in 走索引, not in 索引失效
is NULL , is NOT NULL 有时索引失效
通过group by age order by null;优化分组
可以适当提高 sort_buffer_size 和 max_length_for_sort_data 系统变量,来增大排序区的大小,提高排序的效率。
使用连接查询代替子查询,因为连接查询不需要使用临时表
单例模式,工厂模式,装饰者模式,策略模式,状态模式
1、使用@SpringBootApplication
2、@EnableAutoConfiguration + @ComponentScan
@SpringBootApplication包括三个注解
@SpringBootConfiguration:继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
@EnableAutoConfiguration:完成依赖的自动配置,比如添加了spring-boot-starter-web依赖,会自动添加tomcat和SpringMVC的依赖,那么SpringBoot会对Tomcat和SpringMVC进行自动配置。
@ComponentScan:会自动扫描@SpringBootApplication所在类的同级包(com.dpb.springboot)以及子包中的Bean,所以建议将入口类放置在groupId+arctifactID组合的包名下
没使用过