JAVA 面试题目总结

1.数据库是如何优化的?

SQL语句优化、主从复制,读写分离,负载均衡、数据库分库分表。

1.使用索引,    建立索引可以使查询速度得到提升,我们首先应该考虑在where及order by,group by涉及的列上建立索引。

2.使用查询缓存,并将尽量多的内存分配给MYSQL做缓存

3.目前大多数的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。

4.分表分区分库

  

2. 你使用SpringBoot的时候各种配置文件是怎么引入的

第一种就是传统的方式:编写xml文件,像spring bean一样通过<bean>标签声明一个bean。

此方法需要在springboot主程序类上添加一下注解

@ImportResource(locations)
springboot程序默认只会加载application.properties和application.yml两种形式配置文件,对于自定义的配置文件必须在主程序上通过@ImportResource注解导入

第二种就是编写配置类(推荐使用):

@Configuration表示这是一个配置类
@Bean表示该方法是一个bean对象,方法名为bean的id,返回对象是bean的值

3.说说你看过的底层代码

SpringBoot自动配置原理

 4.说说你做过的项目和你主要负责的模块。

泡泡教育平台

1.课程模块,管理员登录成功后,多表查询分页展示课程信息,添加修改删除课程功能,添加课程的相关信息,包含基本信息、详细信息、课程相关信息等,保存在Redis缓存中,添加修改时会修改Redis。

2.课程的搜索功能,使用 Elasticsearch 实现,搜索出的数据使用 Redis 进行缓存,并将所有数据存到 Elasticsearch 中。

3.登录服务单点登录:用户登陆进去的话 先查询数据库给JWT和RSA加密算法完成token的加密验证登录。

4.订单模块使用了Sharding-Sphere进行分库分表,通过Seate解决分库分表带来的分布式事务问题。

5. 讲讲Redis,你在项目中有用过Redis吗?

  Redis是NoSql四大分类中的键值型存储数据库。它是一个开源的,先进的key-value,通常被称为数据结构服务器。因为它支持存储的value类型可以包含(string)字符串、(list)链表、(hash)哈希、(set)集合、(zset)有序集合等多种数据结构。

项目中课程的搜索功能,使用 Elasticsearch 实现,搜索出的数据使用 Redis 进行缓存,并将所有数据存到 Elasticsearch 中。

6.你对我们公司还有什么想了解的吗?

我想了解一下贵公司主要接手什么项目

7.数据库建表的时候int(1)和int(2)的区别

数据库的储存都是4个字节的长度    例如存入1

int(1)默认存储1

int(2)则补全为01,2为默认长度,当你不足2位时,会帮你补全,当你超过2位时,就没有任何的影响。

 8.#和$的区别

#使用 ?在sql语句中作占位符, 使用PreparedStatement执行sql,效率高
#能够避免sql注入,更安全。
$不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低
$有sql注入的风险,缺乏安全性。
$可以替换表名或者列名
9.Springmvc的执行流程

10.讲讲ioc

IoC (Inversion of control )控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。

 ioc是控制反转,控制是指控制java对象的创建和管理,而反转是指 之前java对象的管理和创建是由开发者完成的,现在由容器完成,然后再转交给管理者。

 11.Jvm参数

堆内存参数
-Xmx, 指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为4g。
这个内存不包括栈内存,也不包括堆外使用的内存。
-Xms, 指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并
不是操作系统实际分配的初始值,而是GC先规划好,用到才分配。 专用服务
器上需要保持 –Xms 和 –Xmx 一致,否则应用刚启动可能就有好几个 FullGC。
当两者配置不一致时,堆内存扩容可能会导致性能抖动。
-Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其
他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4.
-XX:MaxPermSize=size, 这是 JDK1.7 之前使用的。Java8 默认允许的
Meta空间无限大,此参数无效。
-XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设
置该选项。
-XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参
数跟 -Dsun.nio.MaxDirectMemorySize 效果相同。
-Xss, 设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与XX:ThreadStackSize=1m 等价

12. 反射的三种创建方式

1 类名.class

2 对象名.getclass

3 class.forname(包名.类名)

13.Arraylist和linklist的区别

Arraylist是数组,linklist是双向链表

ArrayList查找性能高(因为通过下标快速定位),插入和删除性能低(移动大量数据)

LinkedList查找性能低(因为要向前或向后依次查找),插入和删除性能高(只需要修改前后指针,不用移动)

 14.Arraylist一次扩容多少

第一次扩容会创建一个长度为10的数组,把元素添加到新数组,新数组会替换原来的数组.如果往里添加到第11个元素的时候,会触发第二次扩容,这时候扩容是上次容量的1.5倍,也就是15,会创建一个长度为15的新数组,原来数组的元素copy到新数组,新数组替换原来数组(变量的引用变成新数组地址),原来数组没有引用会被当成垃圾回收。

15. Vector是如何实现的安全的

原因可能是因为 Vector 的所有方法加上了 synchronized 关键字,从而保证访问 vector 的任何方法都必须获得对象的 intrinsic lock (或叫 monitor lock),也即,在vector内部,其所有方法不会被多线程所访问。

16.讲讲你知道哪些排序方法,并说下他们的时间复杂度

 17.mysql的优化

1.SQL语句及索引的优化

2. 数据库表结构的优化

3.系统配置的优化

4.硬件的优化

18.stringbuild跟stringbuffer的区别

stringbuffer为线程安全,对字符串的操作的方法都加了synchronized,保证线程安全。,

stringbuild为非线程安全

stringbuffer效率没有stringbuild效率高

19. hashmap跟hashtable区别

HashMap是线程不安全的,效率高
Hashtable是线程安全的,效率低
HashMap可以存储null键和null值
Hashtable不可以存储null键和null值
20.一些常见集合的区别

1、ArrayList和Vector的区别
答:
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值