java面试题1

1.策略模式是为了减少if-elses代码使用接口继承实现

2.工厂模式多用在使用反射机制初始化Bean

3.redis与mysql如何保证数据一致性问题?

答:传统的解决方案即当mysql数据库更改时,直接清理redis缓存,清缓存这个过程存在时差,B方案:当数据库进行add,del,update操作时,会记录日志binlog,搭建mq监听到日志记录变化时,把变化的日志记录传递到mq进而转发到redis。C方案:采用阿里巴巴Canal+kafka解决

4.消息中间件在高并发的情况下,如何保证消息不丢失?

答:如果消费者没有启动,消息不会丢失,如果消息中间件宕机了,消息不会丢失默认有持久化机制,如果消息中间件存放的消息满了达到了阈值,会有拒绝机制。消息的确认机制,确认成功投到消息中间件,消费者如果消费消息失败时,手动实现ACK(重试机制),如果生产者产生的消息过多,可以搭建消费者集群来消费。

5.hashtable线程安全,使用了synchronized锁,key不允许为空,hashmap线程不安全,允许存放key为空,存放到了数组下标为0,也就是第一个链表,只能存放一个key为空的。

6.hashmap的put方法底层如何实现的?

答:1.判断key如果为空的情况下,存放数组0,2.默认hashmap初始化容量为16,加载因子大小为16*0.75=12,3.根据key计算hash值,存放到数组下标位置,4.如果hash值相等,但内容不等的情况下,存放到同一个链表中5.如果当前size>12,开始*2倍扩容6.1.8中如果链表长度大于8转红黑树进行保存7.加载因子为0.75是因为这是折中的方案,空间利用率高,冲突少8.1.7数组扩容死循环是因为hashmap数组的扩容链表采用的头插入法9.hashmap根据key查询时间复杂度:如果数组中index没有冲突,可以直接获取值,时间复杂度为o1,否则要遍历链表时间复杂度为On,10.hashmap线程不安全可以采用concurrenthashmap或者用Collections.sysnchronizedMap(map)来替代。

7.springcloud支持eureka,consual,zookeeper3种注册中心,存放服务地址

8.zuul网关组件,提供智能路由,访问过滤等功能,可以拦截客户端所有请求,对该请求进行权限控制,负载均衡,日志管理,接口调用监控等。

9.过滤器适用于单个tomcat服务器进行拦截请求,网关拦截所有请求

10.nginx和zuul都可实现负载均衡,反向代理,过滤请求,实现网关,zuul负载均衡原理采用的是ribbion+eureka实现本地负载均衡,NGINX采用服务器端负载均衡,ngnix比zuul功能更强大,可以整合一些脚本语言(ngnix+lua)适用于服务器端.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值