面试总结-618
前言
今天久违地(半个月)终于捞到了一场来自上海的岗位的线上面试。
找工作真的太难了,这次撑了这么久,家里人都看不下去,软硬兼施,让我找一个其他行业的工作也行早点干起来。
然后,就是感受到了自己的无能为力。
面试题
- 请开始吧?
好吧,我从xxx毕业,做了几分工作,简历上的项目有xxx,自己的定位分别是xxx……
- 我看你自己从零开始做的项目比较多,有什么心得么?
- 项目的业务梳理和设计:业务和设计需要在最开始就要做好、包括业务流程图、项目设计文档、技术设计文档
- 项目整体的架构:文件/包架构、命名规范、代码规范要在最开始就指定,以免写出不符合规范、混乱的代码
- 项目服务的分层、结构的管理:在最开始就做好分层、以免层次混乱
- 一些特殊功能模块的考量:数据存储、消息通知中间件的选型可以在一开始就做好
- 选择一个项目,介绍一下
blablabla
- 你刚才说了,这个项目用了es而不是mysql,是为什么呢?为什么es比mysql快?
我用了es的实体存储结构可以比mysql的混乱关系型数据存储快,因为只存一次,只用查一次。
另外,关于es和mysql关于倒排索引:
- es使用倒排索引可以快速锁定搜索的结果 / mysql只能用like或者全文索引(全文索引搜索有局限性)
- es可以应对大数据量、分布式数据存储、分布式海量数据查询 / mysql不适合分布式
- es定制化强可以满足更加复杂的搜索需求 / mysql这方面只有全文索引的查询的结构
- 这个项目有了缓存吗?请简单介绍一下哪里用了,怎么用的
- 在控制层查询的地方用到了,可以避免从es再次获取数据
- 在控制层里调用更新数据的时候,逻辑上更新刷新了缓存里的数据
- 缓存的数据保存一个小时(实际上根据数据的业务实际存活时间可以调整,比如业务的数据可能会一天也不变,那可以保存24h)
- 这个项目有用过多线程吗?用了什么?
- 这个项目在某些比较耗时的地方用了多线程队列来进行操作排队已免同时过多的线程申请导致的大量线程堆积占用耗尽系统报错。
- 你了解多线程吗?线程池有哪些创建的参数?你用的什么拒绝策略?为什么?线程池如何感知线程生命周期的?
- 了解一些
- 参数有核心数量、最大数量、空闲线程最大存活时间、阻塞的任务队列、拒绝策略
- 使用过的拒绝策略有callerrun这个策略、这个策略是用于不允许失败的场景。
- 线程池通过自己管理线程的创建、线程的运行来管理任务运行的生命周期,当任务线程中任务运行完毕后,线程池自行决定是否分给他新的任务或者销毁
- 如果一个请求需要分三个线程请求不同的数据,如何把结果统一然后返回给请求者?
- 可以使用CountDownLatch,使用他的countdown
- 有哪些多线程并发安全的集合和类?HashMap安全吗?如何解决?
- 有并发包下的集合,比如ConcurrentHashMap、ArrayBlockQueue、CopyOnWriteArrayList
- HashMap多线程环境下不安全,可以选用ConcurrentHashMap,在多线程下并发安全。ConcurrentHashMap为每一个节点数组的节点设置了锁,并发操作时会进入锁从而保证并发安全。
写在后面
真希望能快点步入正轨。
也衷心祝愿大家也能得到自己喜欢的、想要的东西,尽管这可能很困难。
面试总结-618
https://natsufumij.cn/2024/06/18/interview-618/