Java面试知识点总结(二)

一, list常用类有哪几个?
1, ArrayList:基于对象数组,非线程安全,在查询,遍历,修改使用时适合使用Arraylist
2,linkedlist:基于环形的双向链表,非线程安全,在增加,删除的使用情况下适合linkedlist
3,vector:线程安全

二, map集合的实现类?
1,HashMap:
2,Hashtable:
3,linkedHashMap;
4, sortedmap
5, EnumMap
6, properties
7, treemap

三,说说hashmap和hashtable的不同点?
1,继承方式不同
hashmap继承Abstractmap
hashtable继承dictionary

2,安全不同
hashmap是线程不安全的
hashtable是线程安全的,支持多线程

3,对null的值处理不同
hashmap的key,null都可以为null
hashtable的key,null都不可以为null

4,遍历的种类不同
hashmap只支持一种iterator迭代器遍历
hashtable支持iterator和枚举器两种方式

5,遍历顺序不同
hashmap是从前向后的遍历数组
hashtable是从后向前的遍历数组

6,添加key-value时的hash值算法不同
hashmap添加元素时,是使用自定义的哈希算法
hashtable没有自定义哈希算法,直接采用的是key的hashcode()

7,部分API不同
hashmap不支持Contains(Object value)方法,没有重写tostring()方法。
hashtable支持Contains(Object value)方法,而且重写了tostring()方法。

四,简单谈谈springmvc,springboot,springcloud的区别?

1,springmvc:是在spring基础上的一个mvc框架,主要处理web开发路径,映射和视图渲染,属于企业级web开发框架,涵盖包括前端视图开发,文件配置,后台接口逻辑相对比较复杂

2,springboot:使用默认大于配置的理念,继承了快速开发的spring插件,同时自动过滤多余不需要配置的插件,简化了项目开发的流程配置,一定程度上取消了xml配置。能快速开发单个微服务

3,springcloud:大部分插件是基于springboot去实现的,springcloud关注全局的微服务整合管理,将多个springBoot单体微服务进行整合以及管理,springcloud依赖于springBoot开发,springBoot可以独立开发。

五,说说zookeeper和eureka的区别是什么?

根据cap理论,c(一致性),a(可用性),p(分区可容错性)

zookeeper:保证的是cp,作为服务注册中心,可以容忍注册中心返回的是几分钟以前的注册信息,但是必须保证可用,
对于可用性来说,zookeeper采用的是leader选举方案,当master主节点宕机时,其他节点会自助选举leader,选出新的master节点,但是这个选举时间太长了,这个期间的zookeeper无法使用,所以不能保证可用性,补充一点,zookeeper的端口号分别是,2181(代码访问client的端口号),3888(选举leader),2888(leader监听),7070(其他服务与监控中心通信端口。

Eureka;保证的是ap,eureka没个节点都是平等的,几个节点宕机不会影响工作,剩下的正常节点仍然可以提供服务注册和查询,但是对于一致性不能保证,因为eureka有一个自我保护机制,在15分钟以内85%节点都没有心跳,
那么eureka就会认为客户端与注册中心出现了网络故障:
1,eureka不再从注册列表移除没有心跳的节点
2,eureka仍然能够接受新的服务注册和需求
3,当网络稳定后,新注册的节点会同步到其他节点
因为eureka能保持高可用性。

六,如何做sql优化?
1,尽量少使用inner join查询
2,少使用临时表
3,少用子查询
4,exists替代in
5,like %abc% 索引失效
6,where子句后面对字段进行null判断,会导致全表扫描
7,不要在where子句后面使用or来连接条件
8,where子句后面不要使用!= 或者<>来操纵
9,组合索引在顺序颠倒时会失效
10,能用between不要用in
11,select语句务必指明字段

七,为什么redis是单线程模型也能效率这么快?
1,纯内存操作
2,核心是基于非阻塞得IO多路复用机制
3,单线程反而避免了多线程的频繁上下文切换问题

八,为什么redis是单线程的但是还可以支撑高并发?

reids是基于reactor模式开发的网络事件处理器,
关于reactor这篇文章解释的比较清楚,可以了解一下https://blog.csdn.net/bingxuesiyang/article/details/89888664
所以这个处理器叫做文件事件处理器,它是单线程的,所以redis才叫做单线程的模型。采用的是IO多路复用机制监听多个socket。

文件事件处理器是单线程模式运行的,但是通过IO多路复用监听机制监听多个socket,可以实现高性能的网络通信模型,

文件时间处理器包含四个部分,分别是多个socket,IO多路复用程序,文件事件分配器,事件处理器(命令请求处理器,命令回复处理器,连接应答处理器)

多个socket可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,但是会将socket放入一个队列中排队,每次从队列中取出一个socket给事件分派器,事件分派器把socket给对应的事件处理器。

然后一个socket的事件处理完之后,IO多路复用程序才会将队列中的下一个socket给事件分派器。文件事件分派器会根据每个socket当前产生的事件,来选择对应的事件处理器来处理。

当socket变得可读时(比如客户端对redis执行write操作,或者close操作),或者有新的可以应答的sccket出现时(客户端对redis执行connect操作),socket就会产生一个AE_READABLE事件。

当socket变得可写的时候(客户端对redis执行read操作),socket会产生一个AE_WRITABLE事件。

IO多路复用程序可以同时监听AE_REABLE和AE_WRITABLE两种事件,要是一个socket同时产生了AE_READABLE和AE_WRITABLE两种事件,那么文件事件分派器优先处理AE_REABLE事件,然后才是AE_WRITABLE事件。

如果是客户端要连接redis,那么会为socket关联连接应答处理器
如果是客户端要写数据到redis,那么会为socket关联命令请求处理器
如果是客户端要从redis读数据,那么会为socket关联命令回复处理器

九,说一下nginx能做些什么?
1,反向代理
2,正向代理
3,http服务器
4,负载均衡

谈谈nginx的正向代理和反向代理?
正向代理就是一个人发送一个请求直接就到了目标的服务器。
反向代理是nginx做的最多的事,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器得到的结果返回给internet上请求连接客户端,此时代理服务器对外就表现为一个反向代理服务器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值