1.300道SpringCloud面试题(持续更新)
2.程序员面试必备的码面Java八股文,适合所有的码面Java求职者!
3.300道SpringCloud面试题及答案(最新整理)
4.spring底层原理面试题?
5.21道 SpringCloud面试题及答案 ,码面我只能答出一半
6.SpringCloud面试题及答案(最新)持续更新
300道SpringCloud面试题(持续更新)
深入理解Spring Cloud
一、码面Spring Cloud核心组件与优势
Spring Cloud是码面一系列框架的有序集合,旨在简化分布式系统基础设施的码面hypervisor 源码开发,包括服务发现、码面配置中心、码面智能路由、码面消息总线、码面负载均衡、码面断路器、码面数据监控等。码面优势:
集成Spring Boot的码面开发便利性,一键启动和部署。码面
通过Spring Boot风格屏蔽复杂配置和实现原理,提供简单易懂的分布式系统开发工具包。
二、Spring Cloud基础知识
二、Spring Boot是什么?
Spring Boot是微服务面试问题的关键话题。它简化了Spring应用的启动过程,通过内置配置和自动装配,减少了样板代码和配置。三、微服务的特点
微服务具有解耦、组件化、业务能力、自治、持续交付、责任分散、敏捷性等特性,支持快速开发和独立部署。三、Spring Cloud实践与工具
四、Hystrix与容错
Hystrix是一个用于隔离远程系统和服务的库,实现容错,防止级联故障,确保分布式系统的弹性。五、Spring Cloud Bus
Spring Cloud Bus通过轻量级消息代理链接分布式节点,用于广播配置更改、服务间通信和监控。六、Ribbon与Feign
Ribbon和Feign都是用于服务调用的工具,其中Feign在Ribbon的基础上提供了接口形式的服务调用,简化了服务调用的步骤。七、负载均衡的意义
负载均衡通过分散计算资源的使用,优化资源使用、最大吞吐量、最小响应时间,避免单一资源过载。八、Spring Cloud Gateway
Spring Cloud Gateway是一个用于微服务架构的网关,提供统一的路由管理,支持安全、监控、限流等功能。四、Spring Cloud核心组件详解
九、Eureka与服务注册
Eureka作为服务注册中心,管理服务发现与注册,提供服务端注册中心和客户端服务发现机制。十、微服务架构的复杂性与挑战
微服务架构面临分布式系统复杂性、服务发现、冗余、负载平衡、性能优化和部署复杂性等挑战。十一、Spring Cloud与Spring Boot版本对应关系
Spring Cloud基于Spring Boot实现,提供了丰富的服务治理工具,不可替代Spring Boot。五、Spring Cloud关键概念
十二、耦合与设计原则
耦合度量组件之间的依赖关系强度,高内聚、低耦合的设计原则有助于系统的稳定性和可维护性。十三、Eureka与ZooKeeper的区别
Eureka和ZooKeeper在服务注册与发现上各有优势,Eureka在高可用性与自我保护机制上更胜一筹。十四、Spring Boot执行器
Spring Boot执行器提供RESTful Web服务,用于监控和检查运行中的应用程序状态。十五、持续集成(CI)
持续集成自动构建和测试代码,鼓励开发人员共享代码和单元测试,加速开发过程。六、微服务面试题解析
十六、Hystrix断路器
Hystrix断路器用于隔离远程系统和服务,防止异常扩散,提升系统容错性。十七、微服务之间的独立通讯
微服务之间通过远程调用、消息中间件等方式独立通讯,实现服务间的高效协作。十八、网关的作用
网关作为请求入口,统一管理微服务请求,提供权限控制、负载均衡、监控等服务。十九、Eureka的作用
Eureka作为服务注册中心,负责服务的注册与发现,提供稳定的服务路由机制。二十、Spring Boot与Spring Cloud的关系
Spring Boot是Spring Cloud的基石,Spring Cloud基于Spring Boot构建,提供一站式服务治理解决方案。七、Spring Cloud工具与实践
二十一、Spring Boot执行器与监控
使用Spring Boot执行器监控应用程序状态,实现自动化监控与诊断。二十二、链路跟踪Sleuth
Sleuth用于追踪微服务调用链路,图片模板源码下载支持链路跟踪与性能分析,提升系统诊断能力。二十三、Ribbon与Feign的区别
Ribbon与Feign分别是客户端负载均衡与声明式服务调用的实现,Feign更易于使用且功能更强大。二十四、Spring Cloud与SpringBoot版本对应
Spring Cloud与SpringBoot版本对应,提供稳定、高效的服务治理框架。八、Spring Cloud实践案例与最佳实践
二十五、微服务架构设计与实现
基于Spring Cloud,实现微服务架构设计与实现,关注组件间协作、负载均衡、服务发现等关键点。二十六、Spring Cloud应用案例
通过实际应用案例,深入理解Spring Cloud在微服务架构中的应用,包括服务注册、路由、监控等。九、Spring Cloud面试题与解析
二十七、微服务面试题与解答
精选微服务面试题,涵盖Spring Cloud核心组件、设计原则、实践案例等,提供深入解析与解答。二十八、Spring Cloud面试准备指南
准备微服务面试时,应重点掌握Spring Cloud基础知识、核心组件功能、最佳实践与案例分析。十、总结
Spring Cloud提供了强大的微服务基础设施,帮助开发者构建稳定、高效、可扩展的分布式系统。通过深入理解其组件、优势、实践与面试题,开发者能更好地应对微服务架构的挑战,实现业务目标。程序员面试必备的Java八股文,适合所有的Java求职者!
本文提供Java后端面试的高频题目及详细解答,助力求职者顺利通过面试。涵盖Java基础、多线程、JVM、数据库、Redis、Shiro、Spring、SpringBoot、MyBatis、MQ、ELK、SpringCloud、设计模式等。
题目设置涵盖从简单到复杂、从高频到低频,适用于所有Java求职者,包括应届生、转行者、三年内经验者、三到五年经验者、五到十年经验者等。
面试时,你可能会遇到以下问题。
此套面试题的特色在于:看过本文的朋友和同事参加面试后表示,面试中被问到的问题%以上都在本文中。我在面试时遇到的情况是,%的题目都在本文中,我对答如流,面试官甚至怀疑是泄题。这些面试都稳定拿到了offer。
注:因篇幅限制,完整PDF笔记无法全部展示,以截图形式提供主要内容。如需完整版,请关注老猿的公众号清朝程序猿,回复“”即可免费领取。
面试题难度与频率以五角星表示,最高五颗星。
三年以上经验者,可关注难度三颗星及以上的题目。一两年经验者,可根据个人水平选择题目,水平较高者可看一颗星到五颗星所有题目。
基础题(难度:★★★ 频率:★)String static异常 IO JDK8语法类库反射
其他
集合
1.HashMap、TreeMap、LinkedHashMap的区别?(难度:★★ 频率:★★★★★)
2.JDK8的HashMap和ConcurrentHashMap的改变?(难度:★★ 频率:★★★★)
3.HashMap数据结构、哈希冲突解决方法(难度:★★★ 频率:★★★★)
4.HashMap扩容的原理(难度:★★★ 频率:★★★★)
5.HashMap为什么线程不安全?如何线程安全地操作?(难度:★★★ 频率:★★★★★)
6.ConcurrentHashMap原理?(难度:★★★ 频率:★★★★★)
7.String的hashCode怎么实现的?(难度:★★ 频率:★)
8.hash:s[0] * ^(n-1) + s[1] * ^(n-2) + ... + s[n-1]
9.HashMap和HashSet的区别及其实现原理?(难度:★★ 频率:★)
.HashMap如果使用对象作为key,要注意什么?(难度:★★ 频率:★)
.对象比较为什么重写hashCode和equals?(难度:★★ 频率:★)
重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用。
JVM
运行时数据区
类加载
内存泄露
垃圾回收
1.引用类型及其含义(难度:★★ 频率:★★★)
2.finalize方法做什么用的?(难度:★ 频率:★)
3.可以作为GC.Roots的对象有哪些?(难度:★★★ 频率:★)
4.调用System.gc()会立刻垃圾回收吗?(难度:★★ 频率:★)
5.Minor GC和Full GC的触发时机。(难度:★★★ 频率:★★)
6.频繁Full GC如何排查(难度:★★★★ 频率:★)
7.JDK默认的垃圾回收器是什么?(难度:★★ 频率:★)
8.CMS垃圾回收器的流程?(难度:★★★ 频率:★★★★)
9.CMS和G1区别(难度:★★★ 频率:★★★)
.CMS与其他老年代垃圾回收器的区别?(难度:★★★ 频率:★)
JVM调优
其他
多线程
综合
1.项目中哪些地方用到了多线程?(难度:★★★ 频率:★★★★★)
2.线程的安全性问题体现在哪些方面?(难度:★★ 频率:★)
3.死锁产生的条件?(难度:★★ 频率:★)
4.i++是否线程安全?(难度:★ 频率:★)
5.JMM内存结构(难度:★★★ 频率:★★)
synchronized 线程池 JUC
方案1:Java多线程-使用阻塞队列实现顺序消费
方案2:模拟阻塞队列
MySQL综合问题
存储过程
建立索引、字段冗余(减少联表查询)、使用缓存、读写分离、分库分表
事务
索引
锁
分库分表
Sharding-JDBC、Mycat
语句
语句类笔试题(难度:★★★ 频率:★)
OR与IN的效率?(难度:★★★ 频率:★)
内联结,全(外)联结,左联结,右联结,的含义?(难度:★★ 频率:★)
Redis
基本问题
Redis所有单个命令都是原子性的。
用type命令。例如:type key1
分布式锁
设置中等长度的时间,线程执行完删除这个值;另起线程,定期去刷新这个值。Redisson的分布式锁就是这个方案
使用RedLock红锁算法:若过半的Redis节点能够setnx成功则表示获取锁成功,类似于zk实现分布式锁方式
集群
主从、哨兵、c 在线人数源码集群(Cluster)
可以使用哨兵部署,自动故障转移。
在主节点上写,在从节点上读。
集群(Cluster)
设计模式框架Spring
IOC
AOP
前置,后置,环绕,返回,异常。若报异常,返回不会执行。
事务
默认采用数据库的隔离级别。项目里就是用的默认的
其他
SpringMVC
SpringBoot
SpringBoot 1.5.x:默认使用JDK代理,SpringBoot 2.x:默认使用CGLIB代理。
MyBatis中间件MQ
综合
RabbitMQ
多机多节点,单机多节点
Kafka
Shiro分布式综合分布式配置中心Nacos
两者都支持,选一种即可。(默认是AP)
Zookeeper
Zookeeper注册中心挂了,服务还能否调用?(难度:★★★ 频率:★★)
ZK分布式锁,leader节点宕机了,会发生什么?(难度:★★★★ 频率:★)
注:因篇幅限制,完整PDF笔记无法全部展示,以截图形式提供主要内容。如需完整版,请关注老猿的公众号清朝程序猿,回复“”即可免费领取。
道SpringCloud面试题及答案(最新整理)
最新SpringCloud面试题及答案附答案解析
以下是SpringCloud面试题及答案,包含SpringCloud最新面试题及新答案。这些答案包括了自己总结的部分和网上搜集整理的内容。虽可能存在一些错误,但可作为参考。如有发现错误,欢迎指正,感谢。
如果不背 SpringCloud面试题的答案,面试可能会遇到困难。这套SpringCloud面试题大全,希望能为你的准备提供帮助。
此外,还有一份多页的Java面试题PDF大全,也请一并参考。
以下为SpringCloud核心组件及其作用和工作原理解析:
1. Eureka:服务治理组件,负责服务注册中心与客户端服务发现机制。
2. Ribbon:负载均衡服务调用组件,提供多种负载均衡策略。
3. Hystrix:服务容错组件,采用断路器模式,为依赖服务的出错和延迟提供容错能力。
4. Feign:基于Ribbon和Hystrix的声明式服务调用组件。
5. Zuul:API网关组件,提供请求路由与过滤功能。
Netflix OSS开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。这些组件在微服务架构中扮演着关键角色。
负载均衡的意义在于改善计算资源的工作负载分布,优化资源使用,提高最大吞吐量,缩短响应时间,并防止单一资源过载。通过多个组件进行负载均衡,可以提高系统的可靠性和可用性。
Feign是一个声明性Web服务客户端,简化了Web服务客户端的实现,用户只需定义抽象方法并添加注解,无需构建HTTP请求,直接调用接口即可。
Eureka与ZooKeeper在服务注册与发现上有所不同:Eureka采用AP策略,自我保护机制避免服务注册列表过期服务被移除;ZooKeeper采用CP策略,但在选举期间注册服务可能瘫痪。Eureka的高可用性设计通过网络分区问题解决。
微服务的特点包括:服务颗粒度小、可独立开发与部署、采用松耦合设计、无状态化服务,支持独立扩展、升级与替换。
微服务限流通常通过IP限流、时间窗口限流等方式实现,以避免服务过载。
Spring Cloud Netflix提供了一系列用于集成Netflix OSS组件的工具,包括Eureka、Hystrix、Ribbon、Feign、Zuul等。
端到端微服务测试验证了工作流的完整性,确保系统作为一个整体协同工作。
Netflix Feign是基于Retrofit、JAXRS-2.0和WebSocket的Java客户端联编程序,简化了HTTP API的调用。
OAuth协议允许通过HTTP服务启用客户端应用程序访问资源所有者的资源,实现资源共享。
Ribbon是Netflix发布的一个开源项目,提供客户端软件负载均衡算法,支持负载平衡策略。
Spring Cloud抛弃了Dubbo的RPC通信,采用基于HTTP的REST方式,提供了更灵活的服务调用。
Idempotence特性确保在远程服务或数据源中处理指令多次时,结果保持不变。
SpringBoot支持Jetty、Tomcat和Undertow等嵌入式容器,提供了便捷的部署方式。
客户端证书用于远程服务器发出经过身份验证的请求,提供身份验证保证。
REST与RPC对比,REST是轻量级接口,服务提供与调用不存在代码耦合,依赖约定;RPC服务提供方与调用方存在强依赖,需要接口定义和版本控制。
分布式配置中心用于动态变更项目配置信息,无需重新部署项目。网吧易语言源码
链路跟踪Sleuth通过添加追踪信息辅助监控系统调用链路。
服务注册与发现机制通过Eureka等服务提供支持,简化服务查找与管理。
WebMvcTest注释用于在Spring MVC应用程序中进行单元测试,专注于测试Spring MVC组件。
双因素身份验证为登录过程增加第二层验证,提供更强的安全性。
不同类型的微服务测试包括底层技术测试、中间层探索性测试和顶层验收测试。
Eureka作为SpringCloud的服务注册功能服务器,是服务注册中心,通过客户端连接并监控微服务状态。
常用网关框架包括Nginx、Zuul和Gateway等。
Hystrix用于隔离远程系统访问点,实现服务容错与弹性。
微服务容器管理有助于单独部署和开发基于微服务的应用程序。
SpringCloud与Dubbo的区别在于功能、架构、维护难度和适用场景。
SpringCloud Config支持实时刷新配置。
Zookeeper通过复制机制确保CP特性。
微服务之间可通过同步通信(RPC、REST)或异步通信(消息队列)进行独立通讯。
OAuth协议允许第三方应用程序访问资源所有者的资源。
Eureka服务注册与发现原理包括定期心跳检测、复制服务实例信息和客户端缓存。
Zuul与Nginx的区别在于实现语言、性能和自定义操作。
Spring Cloud是一个集成外部系统集成的敏捷框架,提供版本化/分布式配置、服务注册与发现、服务调用、路由、断路器与负载平衡、分布式消息传递等功能。
spring底层原理面试题?
spring的拦截器底层是怎么实现的
可以是xml配置文件上等),如果验证通过后会将用户的权限信息封装一个User放到spring的全局缓存SecurityContextHolder中,以备后面访问资源时使用。
可以是基于url基于URL也可以是基于Springboot拦截器介绍Web开发中,可以用Filter(过滤器)和HandlerInterceptor(拦截器)来过滤web请求,都能对客户端发来的请求进行处理。
继承WebMvcConfigurationSupport实现WebMvcConfigurer但是继承WebMvcConfigurationSupport会让Spring-boot对mvc的自动配置失效。根据项目情况选择。
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。
—方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。
你好,SpringMVC的拦截器不是用动态代理实现的,而是基于Java反射机制实现的。
SpringBoot运行原理配置spring.factories,通过该配置,才能让springboot来自动加载我们的Configuration类。具体原理我们稍后深入了解。具体的,是在模块的resources/META-INF目录下,新建spring.factories文件。
springboot帮我们做的两件事,一个是通过starter引入我们需要的框架,starter负责引入自己的依赖;另一个是通过autoconfigure生效一些默认的配置,简化我们的使用,这一步是通过spring.factories中定义的配置类实现的。
首先打开一个基本的springboot项目,点进去@SpringBootApplication注解。
Springboot整合了web和batch,但是他们肯定不是同一条路,在springboot中,会推断当前的运行环境。
金三银四如何找工作?1、你可以在裸辞之前提前1-2个月提交简历。离职前的一两个月可以用来面试。你的简历也可以标上“还在工作中”,不多解释,尽量在几个月内找一份低调的工作,工资不低于现在的工资。
2、找工作其实是比较难的,应届毕业生可以寻求辅导员或者导师的帮助,让他们推荐一些工作岗位。在他们的推荐之下,你也能够获得一个面试机会,就有可能获得一份比较好的工作。
3、疫情后,金三银四招聘季消失了。
Spring运行原理
Spring的工作原理是让一个对象的创建不用new就可以自动的生产,在运行时与xmlSpring的配置文件来动态的创建对象和调用对象,而不需要通过代码来关联。
AOP的主要原理:动态代理。Spring工作原理Spring已经用过一段时间了,感觉Spring是个很不错的框架。
\x0d\AOP的主要原理:动态代理。\x0d\Spring工作原理\x0d\Spring已经用过一段时间了,感觉Spring是个很不错的框架。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。
springboot-boot-starter-xxx:spring-boot的场景启动器spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。
使用AOP解除了模块或组件之间的耦合简化其他框架的代码是框架之间的润滑剂和粘合剂spring是无侵入的设计。在代码中感觉不到它的存在spring是无依赖式的设计。
学springboot之前要学什么1、SpringBoot的出现只是让这些组件在和Spring家族的产品整合时变得更加方便,但是并不会简化这些组件原本的用法,所以,该学Redis、该学MongoDB、该学RabbitMQ等等,还是一个不能少。
2、springcloud=N个springboot+很多分布式组件+运维。利用面向切面编程进行声明式的androi源码 抢红包事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。
3、学习SpringBoot之前,你需要具备一些Java的基础知识,包括Java的基本语法、OOP的概念和Spring框架的简单了解。
道 SpringCloud面试题及答案 ,我只能答出一半
Spring Cloud 是一系列集成的框架,简化了分布式系统的开发,包括服务发现、配置中心、消息总线、负载均衡、断路器和数据监控等功能。利用 Spring Boot 的开发便捷性,Spring Cloud 一键启动和部署,使得分布式系统的开发更为轻松。
断路器模式在分布式架构中,通过监控服务单元的异常,如短路,向调用方返回错误响应,避免调用失败导致线程阻塞,有效防止故障蔓延。
Spring Cloud 的核心组件包括服务发现、配置中心、负载均衡、断路器、数据监控等,提供全面的微服务解决方案。相较于 Dubbo,Spring Cloud 拥有更多子项目,更加完善。
从技术选型来看,Dubbo 和 Spring Cloud 都是热门的微服务解决方案。Spring Cloud 在技术维度上更具优势,而 Dubbo 在国内应用广泛,因为更符合国内工程师的技术习惯。两者各有千秋,开发者需根据实际需求选择。
在服务调用方式上,Dubbo 使用远程过程调用(RPC),而 Spring Cloud 使用 REST API,更符合微服务规范。服务注册中心方面,Dubbo 使用 ZooKeeper,Spring Cloud 则通过 Eureka 实现。Spring Cloud 支持多种方式,如 ZooKeeper,但通常推荐使用 Eureka。
Spring Cloud 的核心组件,如服务注册、负载均衡、断路器、配置管理等,提供微服务架构所需的关键功能,相较于 Dubbo,Spring Cloud 的功能更为全面。
微服务独立通讯方式包括远程过程调用(Remote Procedure Invocation)和消息机制。负载均衡的意义在于优化资源使用、提高吞吐量、降低响应时间,并避免单一资源过载。
Spring Cloud 通过 Eureka 实现服务注册,当服务发布时,指定服务名并注册到注册中心,服务使用 Eureka 的客户端组件进行注册和发现。
服务熔断和降级机制用于防止服务雪崩效应。服务熔断在服务响应时间过长或不可用时直接中断,避免资源过度消耗。服务降级则提供默认响应,保证系统稳定性。
微服务架构的优缺点需综合考虑,优点包括弹性扩展、独立部署、快速迭代等,缺点包括复杂性增加、数据一致性挑战等。在项目开发中,需应对如服务间通信、依赖管理等常见问题。
微服务技术栈涵盖 Spring Cloud、Eureka、ZooKeeper、Ribbon、Feign 等组件,提供服务注册、发现、调用和管理等功能。Eureka 和 ZooKeeper 在注册中心功能上有区别,Eureka 具有高可用性和自我保护机制,而 ZooKeeper 则提供一致性和容错性。
Ribbon 是负载均衡客户端,Feign 是基于接口的注解框架,整合 Ribbon 实现服务调用和负载均衡。Spring Cloud Bus 用于广播配置更改或服务间通信,Hystrix 用于服务降级和熔断。
Spring Cloud Config 是分布式配置管理组件,支持配置文件统一管理和实时更新。在分布式系统中,Spring Cloud Config 组件通过内存或远程 Git 仓库管理配置文件,实现服务的灵活配置。
架构设计中,负载均衡通常由客户端负载均衡(如 Zuul、Nginx)或服务网格(如 Istio)实现,服务统一注册到高可用的服务注册中心集群。配置管理则通过分布式配置中心(如 Spring Cloud Config)实现,确保服务配置的实时同步和版本控制。
SpringCloud面试题及答案(最新)持续更新
SpringCloud的面试题和答案已经更新完毕,包含自己总结和整理的部分,虽然可能存在错误,仅供参考,期待大家的指正和分享。以下是部分内容概要:Spring Cloud Gateway:作为新网关,提供统一的API路由管理,替代Zuul,功能包括安全、监控和限流等。
Spring Cloud Netflix:集成Netflix OSS组件,如Eureka(服务注册与发现)、Ribbon(负载均衡)、Hystrix(容错)、Feign(声明式服务调用)和Zuul(API网关)。
负载均衡:优化资源分配,提高系统可用性和响应时间,避免单点故障。
OpenFeign:Spring Cloud的声明式服务调用组件,简化服务调用的实现。
Eureka与ZooKeeper的区别:Eureka更轻量级,自我保护,而ZooKeeper有领导选举机制。
Spring Cloud版本对应:Edgware.SR6和Greenwich.SR2是主要版本,Greenwich.BUILD-SNAPSHOT是开发分支。
微服务挑战:自动化组件、易感性、配置管理、调试等。
Spring Cloud的核心组件:Eureka、Ribbon、Feign、Hystrix和Zuul,各自功能和作用。
接口限流方法:总并发数、瞬时并发数、时间窗口速率限制等。
Spring Cloud Task:处理短运行任务,如微服务数据处理。
Oauth:开放授权协议,允许第三方访问资源。
微服务监控:报告和仪表板用于服务追踪和维护。
微服务架构中的DRY原则:避免代码重复,促进代码重用。
Spring Cloud解决的问题:分布式系统复杂性、服务发现、冗余和负载平衡等。
面试说两天给结果给我,那都没有机会为什么不说今天给结果给我?
今天给大家分享一个关于一次奇葩面试:喊价K,HR却给了K的经历,网友评论说:面试造飞机,工作拧螺丝?自报家门
先做个自我介绍,楼主坐标帝都,5 年经验,跳槽之前在一家传统小公司,年薪 万。
这次面试前前后后大概两个月的时间,面试了大概 6 家公司,命中 4 家,最终去了一家估值 亿美金的生鲜电商独角兽,年薪 万,刚好翻倍。
面试过程
话不多说,直接进入面试现场!
好未来
开始面试第一天上午投递好未来,下午 3 点面试,一共面试了 3 轮,问的问题比较多。
第一轮
面试官看了我的简历,首先让我画出 Eureka 的执行流程,这块在之前的准备过程中有深入看过,因此比较流畅的画出来并配合解释说明。
之后问到项目中使用分布式锁解决缓存重建并发的问题,并要求画出实际的执行流程,数据库也问的比较多,像事务的隔离级别,MySQL 实现可重复读的原理,索引等。
面试官给出了一个场景,在数据库主从同步的情况下,如果从库同步主库的数据延迟比较高,怎么才能在写到主库后立刻能够读取到数据。
我解释了主从同步的原理,并以此说明主库到从库的复制一定是有延迟的,因此要保证当写到主库的时候立刻能读到数据。
要么就直接配置那个接口读数据的话直接走主库,因为这种写完主库立刻要读取数据的场景比较少,可以做些特殊配置。
另一种方案就是在往主库写数据的时候,可以直接往内存缓存中写一份,设置一个较短的过期时间,后面可以直接从缓存中读到数据。我说完之后,面试官也没给出评价,就这么过去了。
此外,还问到一些基础性的问题,比较印象深刻的是:在加锁的时候,用什么锁对象是内存占用最小的,我说是 Object 对象,面试官说不对,我一时没想出来,面试结束后和朋友探讨,觉得应该是长度为 0 的 byte 数组。
其他还问到了 Collections.sort() 使用的排序算法,AQS,线程池,ThreadLocal 等等问题,主要都是一些考察基本功的问题,一轮面试就这么过去了!
第二轮
面试官更关注对一些技术的理解,问到了 ElasticSearch 的一些基础以及它和 MySQL 的区别在哪里;Eureka 和 Zookeeper 做服务发现的区别在哪里。
还问了分布式限流有哪些方案,以及用线程池进行限流的缺陷是什么,项目中系统日志的处理;还有 JVM 模型,JMM 模型,垃圾回收机制,垃圾收集器等问题。
之后聊了一些设计模式的使用,在项目中使用了哪些设计模式,对设计模式的几个原则的理解。
第二轮结束后,由于第三轮的面试官在开会,所以等了一段时间,等面试官来了之后,只聊了很短时间,面试官就说还有别的事,今天先到这里了。
主要问到了上家公司的加班情况,对加班的认识,职业规划,也问了几个技术问题,像 Tomcat 的优化这块,自我感觉答的不是很好。
整个面试从 3 点到 7 点,有点虎头蛇尾的感觉,结束后也没有消息了。
到家
面试一共三轮,上午 点过去,两轮技术面,下午两点过去,等了一会,然后跟 HR 聊了有半个多小时,HR 说明在一周之内会有结果。
第一轮
第一轮面试官的问题主要集中在基础上,我大概罗列了问到的一些问题,不同的简历不同人肯定问的也不太一样,有兴趣的同学可以参考看看。
主要是 JVM 模型,锁的原理,Synchronized 和 ReentrantLock的区别,偏向锁/轻量级锁/重量级锁的原理,能否从偏向锁直接升级成重量级锁。
Java 并发包里有哪些类,如何使用,线程池原理和参数配置,JVM 调优,堆大小的设置,多线程的线程数的设置,Volatile 原理,ThreadLocal 原理和使用。
Redis 和 Zookeeper 如何实现分布式锁,Redis 的数据类型,一些具体命令,比如要获取一个有序列表的前 个元素应该用什么命令。
数据库索引的使用,聚簇索引和非聚簇索引,没有主键的话,数据如何组织。
B+ 树的原理,InnoDB 引擎和 MyISAM 引擎的区别和使用场景,数据库隔离级别和原理,MySQL 的分库分表,MQ 的可靠性和顺序性,ES 插入数据的原理等。
第二轮
第二轮是部门 Leader 来面试,这轮面试主要集中在框架源码上,我画出了源码的执行流程,之后面试官在一些点深问,因为这块我看的比较全面,问的问题基本都答出来了。
然后这里面试官还问了在源码中我有学到什么东西,我讲了使用配置类代替 Properties 文件,Volatile 在单例模式中的使用,内存的多级缓存机制,线程池的各种不同应用场景,MeasureRate 统计一分钟内心跳次数,批处理机制等。
这里我的回答主要集中在代码编写层面,也可以从架构层面说下学到了哪些,我觉得后者更有高度。
最后我向面试官咨询了这个岗位具体做的事情,部门是基础服务部,面试官画图给我说明了部门内部一些项目划分,技术栈的使用,后续的规划等内容,并约我下午继续跟 HR 聊。
HR 面
下午跟 HR 的面试,HR 顺着简历上的公司一个个聊,问了离职原因,公司情况,如何向上司提出离职的,团队规模,是否带团队。
还问了上午面试的岗位知不知道具体要做什么,之后 HR 说了下公司的一些情况,上班时间,福利,加班情况,问了我现在的薪资情况,期望薪资,我问了下出结果的时间,HR 说一周之内。
第二周的周五下午六七点的时候,这家公司 HR 给我打电话,告诉我面试通过了,之后提到了给我的薪资,算下来竟然只给了我一个 5% 的涨幅。
HR 给出的解释是,因为我前家公司上一年只发了 薪,而他们有 薪和两个多月的绩效,用 个月的薪水除以 ,算下来平均到每个月也能达到我期望薪资的水平。
这个计算方法实在是膈应人,虽然 HR 后来表示可以跟 CEO 申请提高每月的 Base(大概提高到 % 的水平吧),不过当时我已经有较为满意的 Offer 了,还是决定不去这家了。
某生鲜电商独角兽
由于前面说了薪资,就不说具体公司名字了。这家公司我面试了两天,一共三面,第一天笔试加初面,然后第二天有两轮复试。
第一轮
一面主要还是基础,集中在 IO/并发/缓存/Redis/Zookeeper/分布式/JVM/数据库等。
其中问到 Redis 的单线程模型的时候,我这块了解的不是很清楚,只是知道使用 NIO 的方式,然后以自己的理解去说了,面试官表示这可能是我看过别的框架的模式,跟 Redis 搞混了,不过也算是答上来一些了。
之后聊了一些项目的情况,比如每日的访问量有多少,QPS 多少,订单量多少等数据,据此得出数据库的访问压力如何。
另外也深入问了使用分布式事务的一些问题,还有分布式事务在时间上的性能。
所以这里给各位兄弟强调一下,对自己的项目一定要非常熟悉,各个点都要考虑到。
一面跟面试官聊的还挺好,面试官也表示我的基础还不错,问我是不是平时都有学习,之后就是约二面了。
由于当时已经下午 1 点了,后面的面试官也在中午休息,而我下午也还有别的面试,因此 HR 跟我约第二天来复试。
第二轮
二面的面试官也聊了基础和一些设计上的问题,比如同时访问三个有相同功能的 API,要求将执行最快的结果返回,有哪些方式,这块主要还是考察对并发编程,并发控制的理解和掌握,有一些并发控制的类能够做到。
其他的还问到了,要开发一个新的 API,需要考虑哪些方面,把所有要考虑的地方都说出来,大家可以说下边界处理,高可用,并发问题,可扩展性,幂等性,重试机制等等,可以说的非常多。
总体问了有 6 块内容吧,面试官一边问也一边在记录,一些基础的问题这里就不再多说了。
第三轮
三面的面试官问的要更底层一些,Java 线程与内核线程的关系,与进程的关系;关于并发我所了解的方方面面。
对于这个,我从为什么有并发,并发问题产生的根源,解决并发问题的一些理论,Java 中解决并发问题的方式,不同方式的适用场景和对比等方面进行了回答。
另外还问到 Redis 的几种数据类型,以及每种数据类型的底层实现,跳表这种数据结构如何插入数据, Hash 如何扩容。
这块我跟面试官说具体扩容规则不太了解,然后向面试官说了我了解的 Java 中的 HashMap 的扩容规则和具体实现。
Tips:面试时如果遇到自己不太熟悉的部分,可以稍作变通,把自己熟悉的内容和面试官的问题结合起来。
之后又问了一些小的知识点,有的也没答好,像 CopyOnWrite 就不知道用来做什么,然后就是一些为什么离职之类的问题,对未来职业发展的考虑等。
之后面试官问我有什么想了解的,也问了我的期望薪资,我说了具体的数,也表示没想要太多,更看重平台的发展,最后面试官说明天 HR 会打电话给我。
HR 面
最后就是跟 HR 的沟通了,第二天 HR 打来电话告知面试通过,然后问了我期望薪资,沟通入职时间,之后加微信,按照 HR 的要求提供了一些材料,第二天就收到 Offer 了。
PS:最终楼主选择了这家公司,除了很有竞争力的薪资之外,我还很看重这家公司的发展平台,因为他们有非常大的用户量,会遇到各种技术挑战,是很好的提升锻炼的机会。
然后这里有一个开篇提到的小插曲:当时 HR 电话问我期望薪资的时候,我说 K。
结果后续加微信聊天时,HR 告诉我技术面试的反馈很好,决定给我 K,一个月还有 的补助,算下来一个月有 K,发 个月。这种 HR 主动加薪的事情我还是第一次见,意外之喜,哈哈!
玩吧
这家公司的职位是去做 App 后台的,用户量也不错,面试一共两轮技术面,最后是 HR 面。
第一轮
一面的时候,网络这块问的比较多,三次握手,四次挥手什么的,还有整个网络请求的执行流程,数据包的大小,对长连接的理解等。
然后数据库这块也问了一些,提供了一个场景,假如要实现一个最简单的朋友圈,用户可以看到朋友的朋友圈动态,朋友也可以看到用户发的动态,然后问表的设计。
我说了自己的实现,像用户表,好友表。面试官问有没有更好的方式,我没答上来,面试官表示这个轻易可能想不到,就问别的问题了,别的也没什么特殊的问题,都是一些基础的东西,大概聊了一个小时吧,就到了第二面了。
第二轮
二面是技术总监面的,整体没怎么聊技术,就是一些个人素质上的考察。比如:
为什么会选择做开发,没做别的用三个短语来描述自己的优点说说自己的缺点现在公司有系统稳定运行着,如果你发现了有新的技术能够改善现有系统,你会不会引进,会考虑哪些方面日常学习的方式,看过哪些书有没有带团队,描述下团队成员的优缺点,有没有改善有没有面试过别人,会从哪些方面考察职业规划是怎样的,想做技术管理还是技术专家对 Shell 熟不熟悉,写个 Word-Count 用到哪些命令最后还聊了下公司的氛围,项目的情况等。然后也没啥特殊的,就过了。
HR 面
最后跟 HR 聊,主要还是说了下公司的福利待遇,公司的氛围,也问了我现在有没有 Offer,对他们的感觉怎么样。
然后问了之前公司的薪资和现在的期望薪资,最后加了微信,告诉我两天内给结果。最后也是成功通过了面试并拿到了 Offer。
友信金服-人人贷
这家公司面试有三轮,大同小异,这里简短的说一下。
第一轮
一面仍然是基础的考察,像 CAS 的理解,和它存在的问题,ConcurrentHashMap 的锁机制,ElasticSearch 倒排索引,Eureka 的底层源码,还有服务访问的重试机制等等。
第二轮
二面上来问了垃圾回收的问题,类似下面的代码:
问 a 和 b 能否被垃圾回收?这里主要考察 JVM 如何判断一个对象是否可以被回收,是通过引用计数还是可达性分析,引用计数的方式会产生像上面代码一样的循环引用的问题,所以 JVM 没有采用这种方式。
第二个问题是,如果有个跟 Java 中原生的 String 一模一样的类,包括包名,类名都是一样的,方法也是一样的,唯独比原生的 String 的方法多个打印输出语句。
然后把它放进项目的依赖中,在写程序的时候,导入 String 类,问到底执行的是 Java 原生的 String 的方法还是自己写的 String 方法。
对于这个问题,可以考虑下 Java 中类加载的双亲委派模型。
然后就聊了项目的一些架构,问的比较细,要求我对每块都详细画图解释。
最后就是让画一个 Spring Cloud 技术栈所有框架的整体执行流程图,并对 Hystrix 的限流熔断机制做了解释说明,别的好像也没什么了。
这之后二面算是结束了,面试官和我说了下自己团队的情况,人员情况,要做的项目的情况等。
第三轮
最后一面是业务总监面的,面试官让我说了下自己在公司做了哪些事情,我挑其中一个项目做了仔细说明,然后说了下职业规划,对行业的看法等等。
最后 HR 和我加了微信,同样说是两天内给结果,不过第二天他们就给出通过的结果了,然后发了 Offer。
某实时数据分析服务公司
这是一家做体育赛事的实时数据分析展示的公司,公司不大,去年拿了 A 轮融资,看网上整体评价还不错,就去试了试。
面试总共有技术两轮,HR 一轮。去的时候首先是写笔试题。做完之后进入面试。
第一轮面试官没有聊太久,问的问题也比较偏基础,就是一些面试常问的问题,然后说了 Eureka 的执行原理,说完之后,面试官就去叫技术总监了。
第二轮面试是技术总监面的,技术点没问太多,主要集中在之前的笔试题上,笔试题包括 SQL 的考察,还有几道算法题:找出有序数组中指定元素出现的次数;二叉查找树从小到大排序。因为时间的问题,我主要写了实现思路。
还有一题是,有 瓶水,其中一瓶有毒,小白鼠喝一滴有毒的水一小时后会死,要在一小时找出来哪瓶水有毒最少需要几只小白鼠。
在 SQL 的考察这块,面试官看完我的答案后,又改了其中的需求,要求给出 SQL 的实现,另外也问到了 SQL 的执行效率。
这里给大家强调一下,我面的基本上每家公司面试都会问到数据库,所以这块还是挺重要的,需要重点去看。
然后关于找出有序数组中指定元素出现次数的问题,原来要求的时间复杂度是 O(lgn),后来面试官说不要求任何时间空间复杂度,如何简单的实现,我给出的方案是用 HashMap,相同的 Key 每出现一次,Value 加 1。
然后是小白鼠问题,说了解题思路,主要就是用位的思想,对 瓶水编码,实际只需要 4 个位就可以。
之后面试官还现场出了别的算法题,我基本都给出了结果,总体而言面试还比较顺畅,之后聊了下职业规划,技术发展,学习新技术的方法,面试官也聊了之后他们准备做的事情,并给我现场演示了他们的项目。
最后到了 HR 面,主要聊了下上家公司离职的原因,公司福利,上下班时间,我的期望薪水,还问到之前有没有带团队的经历等。
最终他们在第二周的周四才给出面试通过的结果并表示正在走 Offer 流程,由于 CEO 不在,在薪资上还没最终确定,我因为有了更满意的 Offer,因此婉拒了。
总结
总结一下,这两个月的面试,我觉得最重要的就是基础和项目这两块,基础一定要扎实,否则第一轮面试可能都过不了。
JVM,并发是非常高频被问到的地方,在开始面试之前一定要好好准备,另外也需要有自己非常熟悉的领域。
在这个领域里,面试官的一切问题你都可以 Hold 住,我觉得,对于这种基础好,而且有自己长处的面试者,面试官没有理由不喜欢。
还有项目这块,对项目的细节一定要清楚,各种方案的设计思路,实现细节等等都要了如指掌,这样在面试官对各种细节的追问下不至于手忙脚乱。
SpringCloud面试题(题)——答案
SpringCloud面试题(题)的答案详尽解析,涵盖了微服务架构的核心组件、功能和区别。 1. Spring Cloud是基于SpringBoot的微服务解决方案,集成了服务注册与发现、配置中心、监控、网关、负载均衡等组件,提供一站式服务架构解决方案。 2. 微服务的优点包括:可扩展性强,易于维护和独立部署。缺点可能包括:额外的复杂性,服务间通信开销,以及可能的分布式问题。 3. SpringBoot专注于快速开发单体微服务,而SpringCloud则负责全局协调,整合这些微服务。它们是互补的关系,Boot负责基础,Cloud负责集成和治理。 4. Spring Cloud的核心组件包括服务注册与发现(如Consul、Nacos),服务调用(Ribbon, Feign),断路器(Hystrix)、配置中心、消息总线和链路追踪等。Eureka不再推荐使用,推荐Consul或Nacos作为替代。 5. Ribbon是负载均衡客户端,Feign则简化了服务调用,Feign默认集成了Ribbon。Ribbon需要手动构建请求,Feign则直接定义接口进行远程调用。 6. 熔断器(Hystrix)用于服务降级、熔断和限流,确保服务在压力下仍能提供可读的反馈,而非直接失败。 7. 网关(Gateway)是微服务架构中的关键组件,负责路由、断言和过滤,保护内部服务并实现安全策略。 8. Spring Cloud Bus用于服务间通信,Config用于分布式配置管理,Dubbo和Spring Cloud的区别在于功能全面性和扩展性。 9. REST和RPC是服务间通信的不同方式,RPC提供更直接的调用,REST则基于HTTP协议,更易理解和维护。 . 微服务间通讯方式有远程过程调用和消息传递,各有优缺点,如处理复杂性和延迟的不同考虑。 . 负载均衡的意义在于平衡服务请求,避免单点故障,并提高系统可用性和性能。 . SpringCloud通过注册服务到Eureka或ZooKeeper来实现服务注册,而两者在数据一致性模型和角色分配上有所区别。 SpringCloud面试题的PDF版链接如下,供参考学习。2024-12-22 21:07
2024-12-22 20:45
2024-12-22 19:44
2024-12-22 19:27
2024-12-22 19:00
2024-12-22 18:40