java面试的一些深度问题?(5)
1、正向代理和反向代理的区别
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。
反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。
2、nginx反向代理负载均衡策略
ip_hash:对IPV4,使用前3个字节计算哈希值;对于IPV6,使用全部字节计算哈希值。
3、MySQL索引
MySQL索引
4、innodb事务的MVCC机制
MySQL事务隔离级别和MVCC
5、MySQL中redo日志和undo日志的作用
MySQL到底有几种日志类型需要我们记住?
6、MySQL执行计划(explain语句)
MySQL之Explain详解
7、微服务优缺点
优点:
独立的可扩展性,每个微服务都可以独立进行横向或纵向扩展,根据业务实际增长情况来进行快速扩展;
独立的可升级性,每个微服务都可以独立进行服务升级、更新,不用依赖于其它服务,结合持续集成工具可以进行持续发布,开发人员就可以独立快速完成服务升级发布流程;
易维护性,每个微服务的代码均只专注于完成该单个业务范畴的事情,因此微服务项目代码数量将减少至IDE可以快速加载的大小,这样可以提高了代码的可读性,进而可以提高研发人员的生产效率;
语言无关性,研发人员可以选用自己最为熟悉的语言和框架来完成他们的微服务项目(当然,一般根据每个公司的实际技术栈需要来了),这样在面对新技术或新框架的选用时,微服务能够更好地进行快速响应;
故障和资源的隔离性,在系统中出现不好的资源操作行为时,例如内存泄露、数据库连接未关闭等情况,将仅仅只会影响单个微服务;
优化跨团队沟通,如果要完全实践微服务架构设计风格,研发团队势必会按照新的原则来进行划分,由之前的按照技能、职能划分的方式变为按照业务(单个微服务)来进行划分,如此这般团队里将有各个方向技能的研发人员,沟通效率上来说要优于之前按照技能进行划分的组织架构;
原生基于“云”的系统架构设计,基于微服务架构设计风格,我们能构建出来原生对于“云”具备超高友好度的系统,与常用容器工具如Docker能够很方便地结合,构建持续发布系统与IaaS、PaaS平台对接,使其能够方便的部署于各类“云”上,如公用云、私有云以及混合云。
缺点:
增加了系统复杂性
运维难度增加
本地调用变成RPC调用,有些操作会比较耗时
可能会引入分布式事务
8、分布式事务
第一次有人把“分布式事务”讲的这么简单明了
9、spring cloud有哪些组件
Spring Cloud Netflix:核心组件,可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
Eureka:服务治理组件,包含服务注册与发现
Hystrix:容错管理组件,实现了熔断器
Ribbon:客户端负载均衡的服务调用组件
Feign:基于Ribbon和Hystrix的声明式服务调用组件
Zuul:网关组件,提供智能路由、访问过滤等功能
Archaius:外部化配置组件
Spring Cloud Config:配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。
Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理
Spring Cloud Security:基于spring security的安全工具包,为我们的应用程序添加安全控制
Spring Cloud Consul : 封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成
10、eureka原理
Eureka精品源码
11、Redis怎么实现分布式锁
Redlock:Redis分布式锁最牛逼的实现
12、动态代理
太好了!总算有人把动态代理、CGlib、AOP都说清楚了!
13、单点登录怎么实现
单点登录原理与简单实现
14、MD5是加密算法吗?
MD5是信息摘要算法,不是加密算法。
加密算法是可逆的,也就是说,将明文加密之后得到的密文,是可以通过解密还原回去的。
而信息摘要算法是不可逆的,因为在计算摘要的过程中,明文的信息被压缩了,只保留了明文的一部分特征,而根据这些特征,是没办法还原成明文的。这就是信息摘要算法和加密算法的区别。
如果将你的身体比作明文,那么你的指纹就是你的信息摘要,指纹是你身体的一部分特征,而单单凭借指纹,是没办法还原出你整个身体的。
延伸问题:信息摘要、加密、数字签名分别有什么用?
15、ThreadLocal原理
深入分析ThreadLocal
16、Java线程池原理
Java线程池实现原理及其在美团业务中的实践
17、HashMap是怎么实现的?
https://mp.weixin.qq.com/s/SiHedmstpeA8BwCyCW9m7w
掌握 HashMap 看这一篇文章就够了
在 jdk1.7 中,HashMap 主要是由数组+链表组成,当发生 hash 冲突的时候,就将冲突的元素放入链表中。
从 jdk1.8 开始,HashMap 主要是由数组+链表+红黑树实现的,相比 jdk1.7 而言,多了一个红黑树实现。当链表长度超过 8 的时候,就将链表变成红黑树,如图所示。