写在前面
个人背景:
开发4年,坐标杭州
金九银十已经过去了,写这篇文章的目的就是与大家谈谈面试方面的经验,心得,就个人方面而言,我之前做过的很多的工作都是面试造核弹,工作拧螺丝。但是不要因为自己是个拧螺丝的就不学哪些难啃的技术。当项目出问题的时候,就是考验技术沉淀的时候。我也迷茫过好长一段时间,学了忘,学了没用,到底应该怎么成长才能成为一个别人眼中的大神,大牛。关于面试,关于技术的,我只能说有些路只能靠自己去走,没人可以帮到自己,哪怕偶尔帮一到两次,但是技术的路这么长,总归需要自己独自成长的。
我们遇到每一次面试我们都应该认真对待,有机会一定要多面试,面试是一种非常锻炼自己的方式,不要错过任何—场面试,你在面试的过程中,和对方讲自己所学,通过对方提问弥补自己的不足,这对自己提升会非常大。下面我会为大家分享一下我最近的一次面试经历希望对大家有所帮助。总结的不全的地方也请各位海涵,欢迎在评论区留言指正。
下面就是我这次某C轮金融科技公司的面试经历了,总共是四面:
一面(技术面)
- 重点聊了Java各种集合的实现原理,以及使用场景,主要包括不限于,ArrayList,LinkedList,HashMap,HashSet,TreeMap
- 线程池的实现原理,线程池中的等待任务只有一个队列,如果线程池中的线程比较多,竞争会比较大,怎么解决?
- Java中实现高并发的几种策略(COW, cas, 锁),各自的使用场景及区别?
- 简单的介绍下项目?
二面(项目+技术)
- 聊下项目中高并发,高可用的实现
- 负载均衡的几种算法
- 问了几个设计模式的实现
- 分布式系统中转账问题,如何保证分布式事务,项目中怎么处理这种情况?
- MySQL主从复制的实现
- jvm的内存模型,类加载机制,jvm gc实现原理,有没有jvm线上调优经验。如果遇到线上问题,一般通过哪些步骤定位,除了看日志和走读代码还有没有其他方法?
三面(项目经理面)
- 聊下项目内容,以及项目目前存在的问题,优化点
- 有没有带人的经验,怎么带一个新人?
- 离职的原因,对下一份工作的期望?
问了几个问题:
- 目前这边开展的是新业务,怎么让大家这群“新”人很好的配合起来
- 目前公司这块的业务在技术上的侧重是什么,会有哪些挑战点
四面(地区技术负责人面试)
- 聊了下项目
- 下一份工作,首先考虑的三个点按优先级排列是什么?
- 还有几个问题记不清了
最后侥幸还是通过了,但是由于自身的一些原因没有去这家公司工作,后续也是去面试了一些其他公司,但都不是自己理想的公司,下面说一说我的面试总结吧。
- 项目经历一定要准备好,目前市面上招聘基本上要求都是高并发,大数据,高可用。所以在你的项目中有哪些体现一定要提前准备好,并适当挖坑。也就是说目前还有哪些优化点可以做但是目前没有做。
- Java的基本功一定要扎实,不是说数据结构和算法要多么精通,但是至少Java中常见的集合的原理要知道,源码要过一遍,使用场景要了如指掌
- Java多线程,线程池的实现,并发包下面涉及到的经典工具,AQS,CAS,两种锁的实现,常用的并发工具,阻塞队列
- jvm的内存模型,HP原则,内存可见性;jvm类加载机制,类的加载过程;jvm的运行时数据区;Java gc的实现
- ssm框架的实现原理
- redis等中间件的数据结构,使用场景
- 高并发场景的常见处理手段
- 高可用系统的设计
- 分布式系统的设计,cap理论,分布式系统在实际场景中的运用。
这些年参加的面试场次大大小小也有两位数了,由于目前整个IT行业也有大量的Java后端程序员,所以后端开发岗位还是比较多的。如何在一大堆的面试者里面脱颖而出是我们要面对的一个最重要的问题,我觉得除了平时的积累,面试前还要系统的梳理一下自己会的知识点,万丈高楼平地起,掌握底层知识才是最重要的,下面我会把我搜罗到的Java全栈知识点笔记与架构面试知识点全梳理笔记分享出来,有需要的读者老哥文末有获取方式哈~
Java全栈知识点整理(篇幅关系,就只展示目录了)
这份全栈知识点笔记有283页,需要的读者老哥帮忙点赞转发加关注小编一下,然后私信【666】即可获取~
消息队列
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、R
- 如何保证消息队列的高可用?
- 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
- 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
- 如何保证消息的顺序性?
- 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时
- 如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。
搜索引擎
- es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?
- es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍
- es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
- es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?
Redis缓存
- 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?
- redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis
- redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
- redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?
- 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨
- redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的
- redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分
- 了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况
- 如何保证缓存与数据库的双写一致性?
- redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?
- 生产环境中的 redis 是怎么部署的?
分库分表
- 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分
- 现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上
- 如何设计可以动态扩容缩容的分库分表方案?
- 分库分表之后,id 主键如何处理?
读写分离
你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥
如何设计一个高并发系统?
分布式系统
- 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程?
- dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道
- dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
- dubbo 的 spi 思想是什么?
- 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
- 分布式服务接口的幂等性如何设计(比如不能重复扣款)?
- 分布式服务接口请求的顺序性如何保证?
- 如何自己设计一个类似 Dubbo 的 RPC 框架?
- zookeeper 都有哪些使用场景?
- 一般实现分布式锁都有哪些方式?使用 redis 如何设计分布式锁?使用 zk 来设计分布式锁可
- 分布式事务了解吗?你们是如何解决分布式事务问题的?
- 集群部署时的分布式 session 如何实现?
高可用架构
- Hystrix介绍
- 基于 Hystrix 线程池技术实现资源隔离
- 基于 Hystrix 信号量机制实现资源隔离
- Hystrix 隔离策略细粒度控制
- 深入 Hystrix 执行时内部原理
- 基于 request cache 请求缓存技术优化批量商品数据查询接口
- 基于本地缓存的 fallback 降级机制
- 深入 Hystrix 断路器执行原理
- 深入 Hystrix 线程池隔离与接口限流
- 基于 timeout 机制为服务接口调用超时提供安全保护
- 如何限流?在工作中是怎么做的?说一下具体的实现?
- 如何做技术选型?Sentinel 还是 Hystrix?
SpringCloud微服务架构
- 什么是 Spring Cloud?
- 使用 Spring Cloud 有什么优势?
- 服务注册和发现是什么意思?Spring Cloud 如何实现?
- 负载平衡的意义什么?
- 什么是 Hystrix?它如何实现容错?
- 什么是 Hystrix 断路器?我们需要它吗?
- 什么是 Netflix Feign?它的优点是什么?
- 什么是 Spring Cloud Bus?我们需要它吗?
为了不影响大家的阅读体验,就只能将主要内容展示出来了,需要这份178页Java架构面试知识点整理笔记跟上面的全栈知识点笔记的读者老哥,帮忙点赞转发加关注小编一下,然后添加小助理vx:bjmsb2020 即可获取。