Java常见面试题

Java常见面试题,第1张

Java常见面试题 数据库语句是如何优化的?

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

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

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

4.分表分区分库

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

在spring-boot-autoconfigure包下保存大量的自动配置类,类名都保存 meta-INFO/spring.factotiries文件下,自动配置类生效需要一定条件,如@ConditionalOnClass,引入某些类时(导入了对应的框架依赖)。自动配置类是什么时候导入内存的?启动类上的注解:@SpringBootApplication,@SpringBootApplication包含三个注解:

    @ComponentScan 包的扫描,扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。@SpringBootConfiguration 定义配置类,允许在上下文中注册额外的 bean 或导入其他配置类@EnableAutoConfiguration 启动自动配置(将自动配置类加载到内存)加载步骤:@EnableAutoConfiguration --> AutoConfigurationimportSelector --> loadFactoryNames --->loadSpringFactories --> classLoader.getResources("meta-INF/spring.factories")
说说你做过的项目和你主要负责的模块。

叮咚在线教育平台,使用SpringCloud微服务架构开发具体模块有:用户登录注册,搜索课程,浏览课程,下单,购买课程,评论等服务。

我负责的有:

1.搜索功能:调用课程服务查询到数据库的信息导入到Elasticsearch中,通过用户选择的过滤条件

和当前参数,是一个多条件查询,我们选择了es的bool查询的fliter查询,将条件加进去,然后对过滤的数据进行一个order排序,再设置一个from和size进行分页,处理查询结果。

2.解决数据同步问题:当对数据库进行增删改 *** 作,使用RabbitMQ消息队列同步到Elasticsearch

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

用过, Redis是一个高性能的内存数据库,以key-value方式存储数据,可以作为缓存使用。

为什么使用缓存?

高并发

MySQL的连接数存在瓶颈,连接过大可能导致MySQL宕机

解决方法:

部署多个MySQL服务,主从复制

部署缓存,承担一部分的并发

高性能

基于内存,内存IO效率远远高于磁盘

Redis的特点:

性能高(读的速度是110000次/s,写的速度是81000次/s,单机redis支撑万级并发)

支持多种存储类型

丰富的特性(发布订阅、事务、过期策略等)

支持持久化

线程 (避免上下文切换,线程同步问题)

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

显示长度会不相同,int(1)保存的如果是1只会显示1,而int(2)会补0显示为01.

#和$的区别

#{}对传入的参数视为字符串,也就是它会预编译防止sql注入
${}字符串拼接有sql注入风险

Springmvc的执行流程

    用户发送请求前端控制器获得用户请求的URL,发送URL给处理器映射处理器映射将Handler(包装方法信息)返回给前端控制器前端控制器发送Handler给处理器适配器,适配器执行Handler方法执行Handler方法后,返回ModelAndView(逻辑视图)给前端控制器前端控制器将ModelAndView发送给视图解析器,解析出物理视图返回给前端控制器前端控制器渲染视图,发送视图给用户
 讲讲ioc

IOC(Inverse of Control)控制反转是一种程序设计思想。
控制是什么?  
 JavaBean(Java对象)的创建和管理
反转是什么?  
 一般情况下对象的创建和管理由开发者控制,反转是把对象的创建和管理交给容器完成,然后再交给开发者。

IOC容器是 Spring 框架的核心。容器将创建对象,配置对象,并管理对象的整个生命周期。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件;

IOC的主要作用是:解耦。
解耦,是降低程序耦合度,也就是减少程序代码之间的依赖性,如果代码之间的依赖性很高,修改一处代码会影响很多其他的代码,这就给项目的稳定性带来的问题,不利于代码的扩展和维护

Jvm参数
    跟踪参数:跟踪、监控JVM状态,用于程序员JVM调优及故障排查堆分配参数:分配堆内存栈分配参数:分配栈内存
反射的三种创建方式
    通过类.classClass c1=Foo.class;通过对象.getClass Class c2 = foo1.getClass();通过包的路径获取对象Class.forName(“Foo的相对路径”);
 Arraylist和linkedlist的区别
    ArrayList的底层结构数组,linkedList的底层结构双向链表。对于随机访问,ArrayList优于linkedList对于插入和删除 *** 作,linkedList优于ArrayList
 Arraylist一次扩容多少

一次扩容1.5倍

Vector是如何实现的安全的

 Vector 的所有方法加上了 synchronized 关键字

讲讲你知道哪些排序方法,并说下他们的时间复杂度
    选择排序:时间复杂度 O(n^2)插入排序:时间复杂度 O(n^2)冒泡排序:时间复杂度 O(n^2)
stringbuild跟stringbuffer的区别

stringbuffer为线程安全,对字符串的 *** 作的方法都加了synchronized,保证线程安全;stringbuild为非线程安全;stringbuffer效率没有stringbuild效率高。

hashmap跟hashtable区别
    HashMap的性能高于HashtableHashmap可以存null的键值对,hashtable和ConcurrentHashMap不能,Hashmap没有多线程机 制,所以多线程不安全,hashtable和ConcurrentHashMap有线程锁,是线程安全的
 一些常见集合的区别
    list和set是实现了的。list可以允许重复的对象。可以插入多个null元素。是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。Set不允许重复对象,无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。只允许一个 null 元素。Map不是collection的子接口或者实现类。Map是一个接口。Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
css类选择器
    class 类选择器id选择器name属性选择器
 为什么要使用Elasticsearch

因为我们日常的搜索是正排索引,键找值,效率比较慢,而es是倒排索引,通过值找键,效率更高更快

为什么要用 redis

简单来说使用缓存主要是为了提升用户体验以及应对更多的用户。

高并发

MySQL的连接数存在瓶颈,连接过大可能导致MySQL宕机

解决方法:

部署多个MySQL服务,主从复制

部署缓存,承担一部分的并发

高性能

基于内存,内存IO效率远远高于磁盘

 消息队列的用法
    解耦:
    服务之间进行解耦,A服务调用B服务时,需要编写相关的代码,调用情况发生改变时,需要修改调用的代码异步:
    传统的同步调用方式,需要等待调用完成,才能进行其它业务异步调用方法,将消息发送到队列中,就可以返回,执行其它业务,速度大大提升削峰:
    出现流量激增的情况时,消息队列可以设置消息的最大数量,处理一部分消息,其它消息交给队列排队处理
 常见的设计模式知道几种

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。

装饰者设计模式

开闭原则:程序开发过程中,对功能的扩展开放,对功能的修改关闭,提高程序的稳定性

目的:在不修改原有类的代码基础上,对类的功能进行扩展

spring跟springcloud区别

Spring是一个生态体系(也可以说是技术体系),是集大成者,它包含了Spring framework、Spring Boot、Spring Cloud等

SpringCloud 是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件

vue的生命周期

从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。

创建线程的三种方式
    继承Thread类创建线程类通过Runnable接口创建线程类通过Callable接口创建线程类

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5717067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存