常见面试题

hashmap的遍历方式

第一种:使用entrySet() 效率高

public class HmTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        for (int i = 0; i < 50; i++) {
            hashMap.put(i,"第"+ i + "个");
        }
        //entrySet()  
        Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            System.out.println(entry.getValue());
        }
    }
}

第二种:使用keySet() 再get(index)

 Set<Integer> integers = hashMap.keySet();
        for (Integer integer : hashMap.keySet()) {
            System.out.println(hashMap.get(integer));
        }

springcloud的相关组件

	1、Eureka实现服务治理;
	2、Ribbon主要提供客户侧的软件负载均衡算法;
	3、Hystrix断路器,保护系统,控制故障范围;
	4、Zuul,api网关,路由,负载均衡等多种作用;
	5、Config配置管理。

创建线程的方式

Thread类
Runable
callable(有返回值)
线程池ThreadPoolExecutor

线程的状态(生命周期)

创建
就绪
阻塞(同步阻塞、(在换取同步锁时候,同步锁被其他线程占用,放到锁池中)、等待阻塞(wait方法,需要别的唤醒)、其他阻塞(sleep、join、I/O请求))
运行
死亡

mysql的索引以及区别

索引:普通索引、唯一索引、全文索引(fulltext)、多列索引
索引结构:B+tree、hash索引

索引失效

	1.or前后没有同时有索引
	2.复合索引未用左列字段;
	3.like以%开头;
	4.需要类型转换;
	5.where中索引列有运算;
	6.where中索引列使用了函数;
	7.如果mysql觉得全表扫描更快时(数据少);

linux查询日志的命令

消息队列中的重复消费问题如何解决(重点)

解决重复消费就要先理解“幂等性”
所谓幂等性就是,对于一个数据,无论相同操作操作多少次数据一样。比如“读数据”。相反就是非幂等性。如“写”。
因此只要保证消费幂等性,就能解决重复消费问题。

解决方法:

1、利用数据库唯一约束实现幂等性

​ 可以给消息的某一属性设置唯一,比如设置uuid,当添加时候查询uuid是否存在,不存在就添加。(要保证查询和添加时原子性操作)

2、设置版本号

UPDATE message SET m_status = #{status} WHERE uuid = #{uuid} AND version = #{version}

3、通过全局id实现(雪花算法)美团的leaf。

实体类 与 数据表中 字段不一致

//数据库表字段与result不一致时用@Column注解,例如:
@Column(name = "f_schema")
private String schema;

having和where的区别

1.类型:
Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”;
Having是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。
2.使用的角度:
where后面之所以不能使用聚合函数是因为where的执行顺序在聚合函数之前,
如下面这个sql语句:select  sum(score) from student  group by student.sex where sum(student.age)>100;
having既然是对查出来的结果进行过滤,那么就不能对没有查出来的值使用having,
如下面这个sql语句:  select  student.id,student.name from student having student.score >90;

mysql的语句优化及char和varchar的区别以及char(100)和varchar(100)能装多少汉字

char 表示定长,长度固定。
varchar表示变长,即长度可变。
char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长

char(100) 是100个字节,每个汉字占三个字节。
vachar(100) 是100个字符   可以存100汉字。

String字符串的截取和替换以及参数都是什么

截取:split() 参数是按什么截取    返回值是String数组
替换:replace(String 原始,String 替换)   返回值是更改后的字符串。

rabbitmq如何保证消息不丢失

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsCIs6Wm-1619584899071)(C:\Users\神奇奇\AppData\Roaming\Typora\typora-user-images\image-20210427221221078.png)]

1、消息由生产者传入MQ时候丢失(网络原因)

2、MQ收到消息,存到内存中,还没来得及消费就挂掉了。

3、消费者收到消息,没处理就挂了。MQ以为处理了。

解决方法:

1.消息持久化

2.ACK确认机制

3.设置集群镜像模式

mg-nsCIs6Wm-1619584899071)]

1、消息由生产者传入MQ时候丢失(网络原因)

2、MQ收到消息,存到内存中,还没来得及消费就挂掉了。

3、消费者收到消息,没处理就挂了。MQ以为处理了。

解决方法:

1.消息持久化

2.ACK确认机制

3.设置集群镜像模式

4.消息补偿机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值