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接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,