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.消息补偿机制