【面试】面试之汇付天下

昨天下午面试,汇付天下高级,栽了...
特此做下总结,记录学习经历:
面试题并不难,问题也很基础,概念都懂一点,但牵涉到底层、及实现原理时,就一脸懵逼样,过程稍显尴尬。
面试自我感触:
Java概念要熟练,底层实现要精通,语言组织要精练,气场掌控要得心,总之就是:基础要打好,准备要充足。失败是成功之母,真心要多努力多总结。
废话不再赘述,failure is failure,干货奉上:
  • 没有自我介绍
  • 所做项目介绍
  • Java知识考察
  • 数据库知识块
一、自我介绍
最近,朋友也在面试跳槽,各种经历也曾分享,自我介绍因面试官而异,不过最好做个准备。

二、项目介绍
面试,面试官会围绕你简历上所述项目进行提问。如“请你介绍下所做**项目的业务”,作为一个奋战在一线几年的老鸟来说,时序流图应不再话下,图示简单明了易懂。另,在介绍项目业务的同时,可把项目应用的业务架构、系统架构、部署架构、以及技术亮点等到结合起来,这样就更加显得高大上。这里很想说一句,项目应用中只要熟知的知识都可以说是自己的,面试时毕竟你是站在团队的肩膀上,不要有任何心理压力。

尴尬,在项目介绍时,不知是因几年来第一次参加面试紧张,还是准备不够充分啥的,脑袋竟然短路了一会。还好确实对项目业务熟悉,也能介绍的清楚,可惜的是只是生硬的介绍业务,至于高大上的加分点愣是一个都没提到...
  • 如:“应用以什么样的方式对外提供服务 ”笔者所做项目是全国电信充值集约业务,以WebService接口方式对“外部商户”提供服务,以Dubbo调用方式对“内部商户”提供服务。尽管WebService接口方式有些陈旧,但毕竟也属于分布式技术;至于Dubbo服务调用,目前市面上相当火爆。简单几句带过,介绍业务的同时,也说明了自己熟悉的技术。笔者面试时,面试官问到内部应用间如何交互,用没用到类似Duboo的技术时,才想起...真是哔了狗了...
  • 如:“应用对接收到的请求参数如何校验 ”服务端应用提供服务,第一步肯定是对接收到的请求进行参数校验,这里是否有亮点可提?如“白名单校验”、“加密校验”等等。笔者所做项目用到了上述两点,其中白名单校验比较常见,但加密校验则不同,一般银行、金融类公司项目才会用到,另外是否可以引申一下到加密方式(对称加密、非对称加密等),加密算法(RSA、3DES算法等),请求方式(Http、Https)。多么高大上,吹吹牛皮多好。
  • 如:“应用对业务逻辑的处理是什么方式? 对分布式服务来说,若应用中只用到同步处理方式,而一丁点儿儿都没涉及到异步处理,完了...肯定被减分,除非应用中的业务必须同步 ,否则或多或少都会牵涉到异步处理,同步处理转异步处理能大大提高应用的性能。另外,若异步处理时有较好的异常处理机制的话,也要尽量提及。
  • 如:“应用中有哪些比较好的中间件技术? *MQ、Kafka 、*Cache、Redis、 Zookeeper、Dubbo...此类常用中间件技术,谈及的话也是加分点。优秀的中间件在解决实际问题方面得天独厚,对其底层的深入研究必不可少,否则可能给自己挖坑作死了,因为面试官对这些技术的底层似乎都很有兴趣。
  • 如:“应用服务调用是否有异常处理机制?”作为服务提供方,当访问量过大超过系统瓶颈时如何处理?作为服务访问者,当调用其它服务时超时如何处理?笔者面试被问到第一个问题时有点懵(系统服务器多,很少遇到此类问题),只好含糊说“粗暴滴拒绝前端服务,页面提示系统维护升级”,不能说这种回答不行,只能说非常不好,如此作答很容易说明没有遇到或解决过此类问题。现在想来,其实项目中做过异常处理:首先就是所谓的粗暴式“业务开关”,当应用服务器扛不住压力时,主动关闭某些服务(如查询),或者关闭某些商户能力(限制交易)以减轻压力;其次应用中使用到了线程池,线程池中有个队列,能够缓存一部分的交易,只不过对缓存时间做了限制,若缓存的交易1H之后才开始处理,直接做失败处理。另外就是服务器扩容了,服务器以虚机镜像方式进行扩容,部署很容易(只是了解过,具体不太清楚)。其实对于第二个问题,也有相应的异常处理:若访问其它服务访问超时,有“立时重发”机制,尝试重发;有“稍后重发”机制,另起线程过一段时间后重发。若访问其它服务响应超时,若非交易类查询,做失败处理;若交易类支付,做成功或“未知”处理,防止资损。
  • 如:“应用做过什么业务技术等方面优化?”笔者项目业务是电信集约话费充值,日均交易量300W笔,上线之初遇到过不少问题,系统是在一步步的业务、技术等方面的优化趋于稳定的。主要可分为物理扩容、业务优化、sql优化、技术优化等几个方面
  1. 物理扩容:有段时期,月初日交易量达1000W笔,系统扛不住访问压力,被各种投诉。优化并不能立竿见影,无奈之下,只能申请机器扩容(由原来的10台虚机扩充到20台,另20台备用,瞬间幸福到天堂)。不过物理扩容只是“懒人方式”,面试中可带过,不可过多讨论,毕竟公司希望你用最少的人力、物力、财力,挣最大的利润。笔者项目目前日均300W笔交易,20台服务器无压力,其它机器已被回收...
  2. 业务优化:不得不说,项目中有些业务好似那老太太的洗脚布又臭又长,因此做过一段时间的优化,主要是删减那些不必要的校验、业务同步转异步缩短流程。对于校验删减大多是因为开发者多,而每个人的编程及思维方式不同,往往导致代码中校验重复或不必要的处理,优化的过程是痛苦的,而且上线后几乎没有什么性能提高,后来觉得除了重构,否则可能得不偿失,就放弃了...倒是同步转异步优化对系统性能有较大提升,如话费充值:同步受理交易、异步通知结果。
  3. sql优化:项目中有些业务逻辑的实现,竟然是开发者通过sql语句来实现的,这是对数据库这种珍贵资源的一种浪费,因此对此类sql优化。另外,就是通过线上监控,发现那些运行较慢、耗时较长的sql语句,通过添加诸如索引、执行计划等进行优化。此处想说一下,不要因为公司有了DBA,就放弃对数据库的研究,不然面试时就说个人悲剧了,要引以为戒...
  4. 技术优化:数据库线程池Jdbc->C3P0->Druid优化,数据库缓存OSCache优化;内部系统间采用Dubbo调用优化;分布式定时任务框架XXL-Job优化;Maven标准化应用改造等等
---------------------------------------------------------------------------------------------
面试官关于项目方面主要有以下问题:
一、针对充值应用:
1、项目业务介绍(主要考察语言表达能力,以及对项目的了解)
2、业务交易级别(根据业务交易量,来推测应用的能力)
  • 应用是否会出现高并发现象?
  • 当系统扛不住请求压力时,如何处理?拒绝服务?
  • 数据库交易表如何设计的,做大表查询时做过什么优化?
  • 手机号码池的大小(所做应用中没有,其实问的应是交易时手机号码白名单什么的,感觉和缓存有关)
3、业务流程中是否有异步处理措施?
4、业务流程中是否有异常处理措施?(如交易的撤销、冲正等)
5、中间件的使用场景?
  • Kafka在项目中使用场景是什么?
  • Duboo业务降级有没有过了解?
二、针对对账应用
1、为什么使用XXL-JOB框架,如何实现支持分布式部署的,底层原理是?
2、失败转移机制有没有?当定时任务因为业务失败时怎么处理的?
--------------------------------------------------------------------------------------------
项目介绍总结:
1、业务介绍要用时序流图、语言组织要精练、项目中使用到的技术尽量加进来
2、项目中使用到的中间件底层原理一定要涉猎到
3、分布式应用的高并发处理
4、优化用到的技术框架、实现原理、底层要清楚
项目介绍主要以被面试者为主,其实面试官根据你介绍的项目、根据自身经验来提问相关问题,问题不外乎 分布式技术、 高并发、缓存技术、数据库技术...看人品
三、Java知识考察
1、Java GC机制、底层原理、算法实现(问到了垃圾回收算法)
2、Java动态机制、底层实现(反射原理)
3、ConcurrentHashMap介绍、底层实现
4、Lock锁介绍、底层实现、应用场景
5、 volatile 关键字介绍、底层实现
6、线程池介绍、实现原理、队列使用
四、数据库知识块
1、Oracle数据库视图、索引实现、使用
2、索引失效:
  • 查询字段有%时是否失效
  • 查询字段用函数查询时是否失效
3、大表如何优化的?切表、分区、分块怎么做的?
做好总结、做好准备、从工作模式中转变为面试模式,既然知道不足那就应该努力补上...

你可能感兴趣的:(程序人生)