二面:50分钟(主要围绕项目展开)记忆开始模糊....尽量想先问了下是不是搞错了,怎么刚结束一面马上二面了。我迟到了1-2分钟。1.自我介绍?我自我介绍有说本科自动化主要用了C语言,研一做过C助教,现在做实验室研究用的Python,自学JAVA找开发工作。2.听你自我介绍,熟悉的语言还是比较多的,介绍一下他们的区别?主要讲了一下C有用到指针,当时学得比较辛苦,指针难理解。3.既然你说到指针,你有没有碰到过这么一个异常,NullPointerException?我说确实有印象,我记得刷题的时候碰到过,好像是比如一个nums数组长度为5,我访问Nums[5]的话就会抛空指针异常。面试官说是的,然后问我知不知道指针具体是什么,我就回答是对象的地址嘛,问我知不知道在操作系统层面指针是个什么玩意儿(记不太清了),我就回答了一些堆、内存之类的,面试官给我大概说了一下,有点忘记了。开始关于项目的了。4.怎样保证Redis预减库存不会出错呢?我一开始以为是MySQL、Redis数据同步的问题,还讲了一下RabbitMQ的持久化,后来才反应过来问的是Redis持久化机制。5.你简历上说到了解关系型数据库MySQL和非关系型数据库Redis,那你为什么选用Redis和MySQL来做这个项目?随便说了下,不太懂。。。就MySQL好建表来当库存嘛,用Redis的话,它是高效缓存,能不能处理高并发情况。6.为什么Redis这么高效?虽然单线程,但主要操作在内存中完成,瓶颈不是CPU等等八股,还回答到 I/O 多路复用机制,能处理多个 Socket 请求。后面的问题都拓展了项目的情景,我只能记起来个大概。7.如果我现在有这么一个场景,有一个演唱会抢票,我有3个演唱会抢票场次,每场100张票,该怎样实现?凭感觉回答分批次将100张票来初始化到Redis。8.你的意思是,串行化实现对吧,那如果我3个抢票场次是同一时间进行的呢?回答了用Redis的Pipeline来进行批处理并行执行。9.那你在一个Redis中执行,怎样确定是哪个场次的呢,你是不同场次同时抢票的呀?想了一会儿,用票的ID来进行判断,1~100就第一场这样。面试官说,可以在KEY上加上场次的ID,后来感觉确实比票ID更简单。好像就这么些项目问题了。。。