前几天面试某公司的时候,简历上密密麻麻的一片还是让我十分膨胀,在那跟面试官疯狂吹🐮🍺,前面的部分都差不多,自我介绍,公司职务,项目分析。
“你简历上说项目都是独立开发,并且前后端分离,使用了 MQ 处理聊天消息,为什么要这样做呢?”
“因为使用前后端分离可以让前后端开发进度不需要受到对方进度的限制,分工更明确,使用 MQ 是考虑到大量聊天消息同时发往处理器的场景下产生高并发问题的解决方案。”
“那你说说为什么选用 RabbitMQ,RabbitMQ 相对于其他 MQ 的优缺点是什么?”
“ RabbitMQ 并发能力强,性能好,延迟低,社区活跃度高,出了问题比较好解决。”
“那你详细说一下 MQ 做了什么事情,为什么可以解决高并发问题?”
“ MQ 相当于一个信息交换器,有出口和入口,在信息交换的过程中,生产者和消费者不需要进行直接接触,只需要通过 MQ 进行信息交换,生产者的变更或消费者的变更完全影响不到整个业务的流程,同时在高峰期间可以多个服务器进行读取 MQ 的数据以保证信息不会因为某台服务器挂掉直接 GameOver。”
“那你再说说 MQ 工作原理,它的底层是怎么工作的。”
“......呃....应该是类似于一个单向链表的结构?遵循先进先出原则.....”
“那你说说 MQ 的底层实现是怎么做到的?”
“。。。。。。不太了解。。。”
“ Angular 的 AOT 编译跟 JIT 编译有什么区别? AOT 的坏处是什么? AOT 底层是如何实现的?为什么 AOT 编译不支持箭头函数?”
“ Observables 和 Promises 的差别是什么?分别是如何实现的?底层原理是什么?”
“ TypeScript 中的泛型和接口最后会转化成什么? TS 是强类型语言吗?怎样把 JS 库转化为 TS 库?命名空间和模块的区别是什么? TS 的重载和 C#的重载有什么区别?是如何使用 JS 实现的重载?”
“ Ionic 是如何跟手机交互的? Ionic 作为一个 UI 库底层做了什么东西?为什么可以打包出一个 APK 文件?”
“呃,应该是调用了 AndroidSdk 对 Angular 项目进行打包,通过调用 Angular 内的 Cordova 库的 API 跟手机进行交互?”
“ Cordova 作为一个 JS 库是怎么对 Android 的 API 进行调用的?为什么可以对 AndroidAPI 进行调用?如何在不使用 Cordova 的情况下页面调用 AndroidAPI?”
“那这样吧,给你道算法题,你来手写解法吧”
“彳亍....口巴....”
“我出去上个厕所,等会回来”
“做完了吗?”
“好吧,这边面试结束了,我们会在 3 个工作日内通知您的面试结果。。。。”
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.