Java的面试总结
前言
今天接到一份Java后端开发工程师的面试,怎么赶过去就不说了,就想分享一下今天的面试经历,顺便给自己总结一下,给自己大脑放松一下。首先,面试开始的自我介绍,今天的面试官他说他在微软干过,所以给我的感觉就是很资深,就直接给我进入主题了,按道理的一般面试官都很问我一些比如:Spring IOC的生命周期、SpringMVC的运行流程或者原理,或者是根据我的简历跟我谈谈,但是他直接给我略过这些。
正文
问题一
首先第一个问题,开门见山,你懂微服务吗?那么说说你对微服务的看法?
当然,这个问题是很常见的
答:
微服务架是从单体应用、SOA架构演变过来,对比SOA架构粒度会更加精细,每个服务于服务之间相对独立,互不影响,每个服务都有自己单独的逻辑,服务与服务之间采用RPC远程调用,微服务架构相对来说更加轻巧、轻量级,更适合敏捷开发。
问题二
他从我上一个问题的答案中进行了提问
说说你对网站架构的了解
我记得我有分类说,这个问题还好,我大概说了。
传统架构
传统项目一般是SSH、SSM,系统分为三层架构,分别是业务逻辑层、持久层层、WEB层。
分布式架构
根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程通讯技术。
SOA架构
SOA是相对传统的单体框架来说,系统的耦合度比较高,不便于系统团队的开发,就将共同的业务逻辑抽取出来,封装成单独的服务 ,分为表现层,业务逻辑层
业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力
通过服务的组合和编排来实现上层的业务流程
微服务架构
微服务是指开发一个单个、小型的但有业务的服务,每个服务都有自己的处理和轻通讯机制,可以部署在单个服务器上,让专业的人做专业的事情。
当然,我那时候没回答这么细,只是大致说了。
问题三
以前传统架构方案不行?为什么一定要微服务方案?好像大概是这个意思
这个我问他可以跟他聊一下传统架构的缺点,以及微服务架构的好处;
传统架构也就是单点应用,就是SSH架构或者SSM架构,业务没有进行拆分,都写同一个项目工程里面,一般是适合于个人或者是小团队开发。这种架构模式,系统耦合度比较高,一旦有一个模块导致服务不可用,可能会影响整个项目。还有就是只适合0-100的访问量,对于高并发问题的话,用户体验不好。
微服务
1.微服务架构基于 SOA架构 演变过来,继承 SOA架构的优点,在微服务架构中去除 SOA 架构中的 ESB 消息总线,采用 http+json(restful)进行传输。
2.微服务架构比 SOA 架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。
3.SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。
4.项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。
问题四
基于上述问题,公司的系统需要考虑到什么情况?
这个问题很开放性。可以随意说
问题五
分布式微服务架构设计的各个节点服务器的进行升级,这个过程应该是怎样或者应该注意些什么?这个问题,我当时听到就感觉脑子空白,记得那时候缓了一分钟,这个问题我都没遇到过,反正我记得回答的很乱,也没到点上。
之后请教的阿里的架构师帮我回答了一下,他大概给我一点思路,版本控制、开关控制、灰度控制。哈哈,而且还给我提供了资料。
想了解的话,在下面评论一下,我分享那位大神的资料。
问题六
他问了个场景题,用户进行登录系统,连续输入错误账号密码10次,锁定用户账号1小时。
答:
首先,系统的设计使用的是SSO单点登录,用户的登录请求经过nginx的反向代理服务器,再由zuul网关本地负载均衡,处理所有的请求,我先是说登录的大致流程,接下来才说问题的正文,就是用redis记录用户的错误密码次数,判断达到10次后,设置用户的数据过期处理以及对于消息队列监听设置用户的状态。大概是这样答的。
面试官说我说的有点多余了,大致前部分就行,他说大概能够及格吧!这回答。
问题七
说说你对redis 的看法,什么时候用到redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库(nosql),应用在缓存。它通过提供多种键值数据类型来适应不同场景下的存储需求。
redis的应用场景
缓存。
分布式集群架构中的session分离。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。(SortedSet)
网站访问统计。
数据过期处理。(expire)
大概就做这些,我现在做的比较详细,回答的时候倒是没有。
问题八
居然你说到redis,然后他就问了挺多关于redis的问题。这个没什么印象,就不细说了,自己脑补。
后面还有几个问题有点忘了
总结
本来是求职java实习的,面试的时候总感觉被面试官带着回答,跟老师以及同学聊了之后,才发现自己被带偏了,脱离了自己面试岗位的内容。才发现,他并不是说希望你一定能回答所有问题,他探测你各方面的底线,确定你是否能够回答,其实我也感觉应该是框架、网络、JVM等的一些问题。所以,无论面试官问你什么问题,自己坦诚一点,知道就说知道,懂一点的话,也别乱说,没技术可以学,千万别不懂装懂。面试了这么多次,面试题得多背,项目也得多做。