技术面试总结

目录

1.基础数据类型有哪些

2.int 与 Integer 的区别

3. Integer valueOf() 为什么高效,范围是多少

4.如果让你定义一个集合你会选择那种集合

5.说一说hashMap的底层原理

6.说一说hashMap是怎样扩容的

7.说一说有哪些索引

8.唯一索引与主键索引的区别

9.给定一张员工表,一张部门表,一张员工与部门表的关联表,怎样能查到部门中总人数

10.count(字段) 与 count(*) 有什么区别

11.count(1) 与count(*) 有什么区别

12.说一说项目中用到那些微服务组件

13.项目中 fegin 是如何使用的

14.说一说Sentinel中的限流与熔断

15.说一说项目中redis怎么使用的

16.说一说 SpringBoot 的自动装箱原理

17.项目中有没有使用MQ中间件,实现了那些功能

18.支付功能怎么实现的

19.谈谈项目


1.基础数据类型有哪些

byte  short  int  long  float  double  char  boolean

2.int 与 Integer 的区别

Integer是int提供的封装类,而int是Java的基本数据类型;
2、Integer默认值是null,而int默认值是0;
3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;
4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。

3. Integer valueOf() 为什么高效,范围是多少

Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来

4.如果让你定义一个集合你会选择那种集合

没有基于查询与插入去考虑我选择了 hashMap 原因是HashMap存储速度快

5.说一说hashMap的底层原理

在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值8)时,将链表转换为红黑树,这样大大减少了查找时间。

当链表数组的容量超过初始容量的0.75时,再散列将链表数组扩大2倍,把原链表数组的搬移到新的数组中

6.说一说hashMap是怎样扩容的

Hashmap的扩容需要满足两个条件:当前数据存储的数量(即size())大小必须大于等于阈值;当前加入的数据是否发生了hash冲突。

因为上面这两个条件,所以存在下面这些情况

(1)、就是hashmap在存值的时候(默认大小为16,负载因子0.75,阈值12),可能达到最后存满16个值的时候,再存入第17个值才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置,并没有发生hash碰撞。

(2)、当然也有可能存储更多值(超多16个值,最多可以存26个值)都还没有扩容。原理:前11个值全部hash碰撞,存到数组的同一个位置(这时元素个数小于阈值12,不会扩容),后面所有存入的15个值全部分散到数组剩下的15个位置(这时元素个数大于等于阈值,但是每次存入的元素并没有发生hash碰撞,所以不会扩容),前面11+15=26,所以在存入第27个值的时候才同时满足上面两个条件,这时候才会发生扩容现象。

7.说一说有哪些索引

唯一索引:在创建唯一索引时要不能给具有相同的索引值。
主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。
聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。
 

8.唯一索引与主键索引的区别

1  主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

2  主键创建后一定包含一个唯一性索引,唯一性索引不一定就是主键。

3   唯一性索引列允许空值, 而主键列不允许为空值。

4   主键可以被其他表引用为外键,而唯一索引不能。

5   一个表最多只能创建一个主键,但是可以创建多个唯一索引。

6   主键更适合那些不容易改变的唯一标识,如自动递增列,身份证号等。

7   在RBO 模式下,主键的执行计划优先级高于唯一索引。两者可以提高查询的速度。

9.给定一张员工表,一张部门表,一张员工与部门表的关联表,怎样能查到部门中总人数

10.count(字段) 与 count(*) 有什么区别

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(列名)只包括列名那一列,即某个列名值为NULL时,不统计。所以说不推荐,这里统计是数量可能会少一部分

11.count(1) 与count(*) 有什么区别

 Count (*) 与 Count(1)两着返回结果是一样的,假如表没有主键(Primary key), 那么count(1)比count(*)快,如果有主键的话,那主键作为count的条件时候count(主键)最快,如果你的表只有一个字段的话那count(*)就是最快的。

12.说一说项目中用到那些微服务组件

Nacos :一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Sentinel把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性

Fegin: 服务之间的远程调用

Gateway:网关,项目的通通以入口,路由与断言

13.项目中 fegin 是如何使用的

由三个部分组成:服务提供者,服务消费者,Feign客户端

服务接口,接口定义需要加上@RequestMapping注解
服务启动类,加上@EnableFeignClients表示开启Feign功能 

 Feign客户端实际上就是一个接口,但是这个接口继承了服务提供者的接口,通过@FeignClient注解声明需要调用的服务别名

服务接口,定义消费者服务的接口,同样要加上RequestMapping(因为同样是服务,也有可能被其他服务调用)

14.说一说Sentinel中的限流与熔断

限流: 基于流控规则对流量进行限流操作

熔断:让外部应用停止对服务的访问,生活中跳闸,路障设置-此路不通 平均响应速度越来越慢或经常出现异常,这样可能会导致调用链堆积,最终系统崩溃)

15.说一说项目中redis怎么使用的

我项目中使用redis存储了支付渠道参数,使用了jedis

16.说一说 SpringBoot 的自动装箱原理

SpringBoot启动会加载大量的自动配置类
我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
 

17.项目中有没有使用MQ中间件,实现了那些功能

18.支付功能怎么实现的

19.谈谈项目

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值