基础面试题

基础面试题

1、 String、StringBuffer与StringBuilder的区别?
①String的处理速度比StringBuffer、StringBuilder要慢的多,他们的关系是:String < StringBuffer < StringBuilder
②String本身就是一个对象,是不可变得对象,StringBuffer和StringBuilder是可变的对象
③由于String、StringBuffer和StringBuilder的区别,建议在数据量小的情况下使用String,在单线程操作字符串缓冲区下操作大量数据使用StringBuilder,在多线程操作字符串缓冲区下操作大量数据使用StringBuffer
④StringBuffer是线程安全的,StringBuilder是非安全的线程,所以速度比Stringbuffer块

2、说出ArrayList、Vector、LinkedList的储存性能和特性
①ArrayList 和Vector他们底层的实现都是使用数组方式存储数据,而LinkedList 采用的将对象存放在独立的空间中。
② ArrayList 和Vector的数组方式在插入数组时涉及数组元素移动等内存操作,因此插入数据慢,但是按照序号索引数据快,LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
③Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差
3、说一下java反射机制以及常用场景
java反射机制是指在程序的运行状态中,可以构造任意一个类的对象,了解任意一个对象所属的类,了解任意一个类的成员变量和方法,调用任意一个对象的属性和方法。
②java中的反射就是利用了Class这个类去实现的
常用场景
JDBC中,利用反射动态加载了数据库驱动程序。Web服务器中利用反射调用了Sevlet的服务方法。Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
4、什么是线程不安全?如何解决
线程不安全是指不提供加锁机制保护,有可能出现锁哥线程先后更改数据造成所得到的数据时脏数据。
解决方法加锁,使用synchronized包围对应代码块,保证线程之间是互斥的。
5、mybatis中#{}和${}的区别,以及防止SQL注入
①#{}在预编译是会把参数用?代替,所有传入的数据都会被当做一个字符串。
② $ {}则是简单的替换字符串,参数会被当成sql编译。
③#{}可以防止sql注入,能用#{}就不用${}
④ ${}一般用于传表明和字段名,使用时需要手动防止sql注入
6、String Boot 的核心注解有哪些以及功能作用

  • @SpringBootApplication:是Spring Boot 项目的核心注解,主要目的开启自动配置

    • @SpringBootApplication注解是一个组合注解,主要组合了@Configuration+@EnableAutoConfiguration+@ComponentScan
  • @Value : 属性注入,读取properties或者 Yml 文件中的属性

  • @ConfigurationProperties : 将properties属性和一个Bean及其属性关联,从而实现类型安全的配置

  • @EnableAutoConfiguration 注解:作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置

  • @ Configuration @EnableAutoConfiguration (exclude={xxxx.class}) 禁用特定的自动配置
    7、Mysql有几种索引
    MySQL目前主要有以下几种索引类型:

    1.普通索引

    2.唯一索引

    3.主键索引

    4.组合索引

    5.全文索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值