2021年3月面试总结
春水初盛,垂钓者络绎不绝,鱼儿按捺不住,拍打着尾鳍纷纷跃出水面,沽个好价。
作为一名步入职场将近两年的打工人,到了现在还算是清楚职场的“金三银四”。随着二零二一上半年的求职高峰揭开帷幕,我也涌进了这波浪潮中。技术栈储备有限并且接触到的应用场景比较单一,网上那些必问的分布式?微服务?多线程?高并发?我明白自己没有什么优势!所以只能把面试尽可能排的满一点,每天晚上和电话另一头的兄弟聊聊技术也是不错的选择。
下面我就简单记录一下我前一段时间被问到的问题。题目是当时面完有做记录的,不过漏记一定会有的,对于当时的心情的描述是写文章时候的回忆。当中可能不仅仅是三月份的,也会有两场年前的~
面试公司一览
2020-11-06 周五
周一到周四当中在Boss直聘上更新了一版简历,对于那些主动来要简历的hr,简单沟通后约定一下时间,决定在周五当天请一整天假,作为年前面试试水。
上海XX教育科技有限公司(A轮在线教育)——Java开发工程师
上午11点到的,安排在了一个很小的会议室等待。不一会过来了两个面试官,一个脸胖胖的中年男子A和一个年轻面试官B。面试官A安排B先来面试,明显感觉到B是被临时安排的,给我说还没看简历,首先当着我的面看了一会简历。然后就开始进入面试问答。
- 一轮面试(现场)
- 自我介绍
- jvm相关
- 进程线程协程
- Java集合相关的
- 数据库索引事务
- 数据库锁
- 同步io、异步io、阻塞io
- tcp udp
- 网络七层协议,为什么要分层?
- 三次握手
- 长连接、短连接
- 目前公司人员架构,工作安排流程,以及怎么去完成任务。
- 跳跃游戏[2,3,1,1,4]
- 搜索二叉树判断
自我感觉一面回答的不是很好,好些问题说的不是很详细就糊弄过去了。结束之后,面试官B出去之后面试官A拿着我的算法答题纸进来了。
- 二轮面试(现场)
- 自我介绍
- redis缓存预热雪崩穿透
- 讲讲自己最擅长的技术领域 针对这一块看过那些源码 底层实现
- 快速排序
- 最大子树和
- 为什么想换工作
- 对加班的看法
最终结果和预料的一致,面试不通过。中午在地铁站附近吃了个肯德基就去了下一家公司面试。
XX教育科技有限公司(D轮财经教育)——Java开发工程师
这家公司就显得稍微大一点,自己的园区。2点左右到前台联系了对应的hr,穿过一片满是小姐姐的办公区域,被安排到一个圆桌等待面试官。首先过来的是一个小姐姐程序员,照着简历确认了身份一脸严肃的坐在我对面。感觉到面试过程中我的一些反问把她问的有点措施不及,哈哈哈。
- 一轮面试(现场)
- 自我介绍
- Java集合相关的
- 建立数据库索引规范
- 联合索引失效情况
- 几种关联的区别
- redis几种数据类型 什么场景下使用
- redis缓存预热雪崩穿透
- restful接口
小姐姐程序员面试官拿着面试记录离开之后,不一会来了一个矮个子眼镜男面试官C,看样子感觉他很随便的样子,问题很发散。他更喜欢了解我上家情况,闲聊的状态。
- 二轮面试(现场)
- 自我介绍
- 介绍对自己最具有成长的项目
- 项目开发部署流程
- 支付怎么实现的
- 秒杀设计
- ……
秒杀这一块回答的和面试官C理解的有点出入,C叫我回去百度百度真实场景到底是怎么设计的。呜呜呜~~
三轮面试官D是一个很温和的中年男子。说话的语气就带着一股稳重和谦逊,和面试官C比较感觉C更像一个小伙子。交谈中得知是面试官D需要招人,面试官C只是兄弟部门的小领导,哈哈哈~
- 三轮面试(现场)
- 自我介绍
- springboot是什么?为什么使用?
- redis缓存预热雪崩穿透
- 分布式微服务理解
- ……
一天安排三个就感觉有点多了,毕竟面试需要复盘。就和我们上初中高中考完试整理错题集一样,需要把不是很明白的题目整理消化。第三家是电话面试,和前面两家公司的面试官交谈后,有点不想继续第三家的面试。因为第二家面的时间有点长,电话面试的迟到了。最后还是在外包公司的hr不断催促下,找到地铁一个相对安静的角落进入了电话会议。
外企银行外包岗位——Java开发
- 一轮面试(电话)
- 英文自我介绍
- 怎么理解面向对象?
- 集合 多继承 枚举和接口的关系
- 往map里面put一个数据发生了什么?
- 强软弱虚
- jvm
- 多线程
- 可重入锁 如何实现
- 分布式锁?
- synchronized底层实现、和ReentrantLock的区别
- 接口幂等性
- 布隆过滤器
- ……
这轮面试还是比较有意思的,因为感觉上他问的东西太多我当时不会的。所以就没有下文了。
在晚上七八点的样子,坐地铁回出租屋的路上,接到了第二家的hr发来的口头offer,听到给的薪资比上家高了将近50%。但是因为这只是我尝试一下而已,再考虑上家年底的两个月年终奖也蛮香的,电话里就直接拒绝掉了。其他两家就杳无音信了。
2月15日从家里来到上海,又开始打开Boss直聘查看好的岗位。收藏了一堆二三线互联网公司,就是人家不邀请我我也不敢投简历。我面试的都是经典的“我想要一份你的简历”,然后我点进“我同意”。这个操作投过简历的都懂。出于自由的考虑,二月月底的那一周,我连续请了三天假。
上海XX信息技术有限公司(小型创业公司)——Java开发工程师
2021-02-25 周四 17:30
这是一家从事金融AI人工智能技术研究的小型创业公司,面的是Java岗位,看他们招聘岗位还挺多,使用到的技术也比较主流。面试官是个小哥哥E,为数不多的直接省去了自我介绍,问的问题很跳跃,关联性不大,要么是我回到的太差,要么我怀疑他是对着网上面试题问我的。
- 一轮面试(电话)
- hashMap容量为什么总是2的次幂?
- mysql数据库隔离级别?
- spring是怎么解决循环依赖的?
- redis有哪几种数据类型?
- 你最大的优势?
这一场我觉得是因为spring循环依赖那一题我直接没回答,加上其他的问题回答的磕磕巴巴。特别是我最大的优势?问出这种问题我觉得都不是多聪明的人,所以也没聊多久,就挂掉了。
上海海X信息工程股份有限公司(新零售)——Java开发工程师
2021-02-26 周五
当天下着雨,十点多到他们公司迟到了十几分钟,进去前台帮我联系hr,之后就安排在一个大会议室开始做笔试。其他来面试的候选人都已经做了好多。二轮面试因为都十一点半了,所以只和技术聊了半个小时左右。三面hr面安排在了当天下午一点,在他们公司附近肯德基吃了份午餐,然后就回去等着hr面试了。可能hr到的时候我正在手写复盘,她对我留下了好印象。hr轮聊得还不错。
- 一轮面试(线下笔试)
- 两道问答题
- 事务的特性有哪几个?常用的事务传播行为有哪几个?并说明具体使用场景?
- 分布式事务的CAP理论分别是哪几个特性?如何保障分布式事务一致性?
- 两道数据库
- 写一条DELETE语句,实现对相同的NAME值,只保留ID最小的记录。
- 给出STUDENT、SUBJECT、SCORE表,求每个学生的平均成绩。
- 四道编程题
- 手写单例模式。
- 手写工厂模式。
- 后缀表达式。
- 区间求交集。
- 两道问答题
- 二轮面试(线下)
- 自我介绍
- 针对简历和项目进行问。
- 三轮面试(线下hr)
- 离职原因。
- 期望等等。
过了周末,周二接到了offer。感觉薪资不到位,一顿沟通之后,同意加面一轮。最后一轮是技术leader,他告诉我他在这家公司呆了十七八年,还有他平时喜欢看51cto。
2021-03-05 周五
- 四轮面试(线下技术)
- 主要是照着简历逐条询问。
- 另外就是问笔试题目的东西。
- 平时怎么学习技术的?喜欢逛那些论坛?
- ……
杭州X克时代(阿里外包)——Java开发(新零售)
这还是要追溯到我2月25日的海投。从2月26到3月2日面试官给我打了五个电话,两个没有接到,两个我接到然后告诉对方我在忙不方便。正式的面试要到3月2日晚上9点。
2020-03-02 周二 晚上9点
- 一轮面试(线上技术)
- 自我介绍
- Java集合、hashMap
- JVM相关
- 总共20分钟不到
2020-03-03 周三 上午10点左右
汉克的hr告知拿到offer了,base地杭州。并告知我前一天晚上一共通过8个。挂断电话就收到offer。(卧槽外包年薪20+也太好进了吧)后面考虑需要换城市和外包原因拒绝掉了。
上海汉得信息技术股份有限公司(科创板上市公司)——研发顾问(电商业务)
还是那个操作“我想要一份你的简历”,我随手点了一下同意。没想到我就成为了汉得的打工人。
2021-02-25 周四
hr要走我的简历半个小时左右,电话打给我,开始询问离职原因、对下一家公司的期望、期望薪资等问题。当时因为前面和Boss上好几个外包公司的hr刚刚电话聊完。对于我的感受就是,全程类似于机器般的回答问题。
- hr面试(电话hr)
挂断电话后,收到一份一封邮件,主要是需要在他们招聘网站上重写填写一下简历信息。我感觉有点麻烦一直没怎么在意。拖了四五天又收到他们的电话催促快一点填写线上简历。
2021-03-03 周三
入职后两周左右在部门聚餐中,大家叫我们找自己的一面面试官。我对这场面试一点印象都没有,声音也记得不是很清楚,只记得回答的不是很好,但是使用了一些面试技巧。稀里糊涂两杯啤酒认了个假的面试官,最后磊哥出来认领我,然后又多喝了一杯==。事后,我特意翻看当天的通话记录,发现那天晚上真的是和磊哥聊了42分钟。
- 一轮面试(电话技术42分钟)
- 题目都忘记了。
- 就记得问了数据库锁、事务。分布式、微服务的东西。
- DDD领域驱动设计。
- SpringCloud系列的组件。能讲多少讲多少。熔断降级。
2021-03-04 周四
二面我记得特别清楚,晚上九点多一点,我正在和女朋友在路旁的米线馆吃米线。突然接到一个云南昆明的电话,说是昨天晚上的面试通过了,他是本次的面试官。电话里的面试官特别礼貌,因为九点多已经算是蛮晚的了,还特意解释了一下,然后询问是否方便。我找了一个小巷口,开始了本轮的面试。
- 二轮面试(电话技术55分钟)
- 自我介绍
- Java集合、hashMap
- Mysql相关
- jvm内存模型、垃圾回收机制
- jvisualvm使用、dump文件分析
- redis几种数据类型?给定场景选择类型并说明理由。
- redis雪崩击穿穿透,如何解决?为什么?
- redis持久化方式rdb/aof,你们项目使用的哪个?使用过程中有遇到什么问题吗?
- 四种mq如何选择。你使用过哪一个?
- 你们项目中分布式锁怎么实现的。
- 讲一下你对spring的了解?ioc&aop&常用注解&事务
- 你使用过那些springcloud组件?服务治理、负载均衡、断路器等。
- 设计模式[讲了单例、工厂、策略、模板、状态机(重点讲了密钥变更流程)]被问到责任链、观察者。
- 平时使用到的Linux命令。
- ……
- 讲一讲工作中最有难度的任务?[讲了协议的编解码]
- 反问环节闲聊几分钟。
2021-03-05 周五 中午
因为前一天晚上聊到的薪资涉及到定级问题,所以周五中午又加面一轮,同样是二面的面试官。
- 三轮面试(电话技术20多分钟)
- 问了一些平时的学习方法
- Git和SVN的使用情况
- 是否有参与开源项目或者博客
- 团队里担当的角色
- 聊一下上家所负责模块的架构体系
这轮面完,人事那边就发来了性格测试的在线试题,80分钟感觉和华为od的性格测试一样的。然后当天中午我还是在kfc做完了性格测试。之后就是走offer流程了。
上海纽X信息科技有限公司(B轮)——Java开发工程师
这家公司也特别有意思,我是在脉脉上收到他们公司的邀请,然后投了简历。hr通过邮件给发送了一道AOE网求关键路径的算法题目,说给一天的时间要独立不能参考做出来之后代码发给他,他交到他们那边的技术来检查。
3月1日收到邮件,当天晚上我尝试了2个钟头,代码可以边百度边写出来。但是我是抄的呀,所以第二天直接拒绝掉了面试机会。理由是:我代码不参考网络写不出来,想诚实一点。对方发出一个笑哭🤣的表情。
杭州X云科技有限公司(B轮)——Java开发工程师
2021-03-04 晚上7点
面试官是个小姐姐,我个人觉得她还是有点技术的,不然也不可能语气很冲。。。也有可能是被安排帮助hr冲业绩的。
- 一轮面试(电话技术)
- 面试内容记不来了。
- 只记得问了个特别奇葩的问题:五个词语形容一下你自己。拒绝,哈哈哈。
这种面试其实还是蛮尴尬的,前面被问到好多不会的问题,说了不会就问的更深。最后还天秀一波,五个词形容自己。
必会题目总结(持续整理中…)
自我介绍
1.英文自我介绍。
Good afternoon!
Thank you for giving me this opportunity for this phone interview.
My Chinese name is zhangyao and you can call me Yao which is English name.
I am 24 years old,born in jiangsu province.
I graduated from Nantong university.my major is computer science and technology,and i got my bachelor degree after my graduation in the year of 2019.
I worked as a Junior Software Engineer in a small private company.
and I have about 2 years work experience.
My major work was Java Web development base on spring,spring boot and mybatis framework.
I also did some other things like writing test cases,doing detailed design and so on.
I think I’m a good team player.I am eager to get an opportunity to fully play my ability and my computer skills.
That’s all,thank you.
英文面试官更希望可以用英文介绍项目之类的,主要针对一些外企的岗位。
2.中文自我介绍
关于中文自我介绍这个就可以随心所欲,不过线下面试的话更容易引导面试官。这部分主要内容还是重点介绍自己所经历的项目和负责的模块。
Java基础相关
1.JDK版本差异
2.abstract与interface的区别
3.Arraylist与Linkedlist区别。
4.hashMap底层,与ConcurrentHashMap的区别。hashMap的put过程。
HashTable/HashMap/ConcurrentHashMap/
https://www.cnblogs.com/heyonggang/p/9112731.html
https://mp.weixin.qq.com/s/dLR697JzdOWvCmnR9RhpaA
HashTable
- 底层:数组+链表,无论key和value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurentHashMap做了相关优化。
- 初始化size为11,扩容newsize = oldsize*2+1;
- 计算index的方法:index = (hash&0x7FFFFFFF)%tab.length。
HashMap
底层:数组+链表实现,可以存储null键和null值,线程不安全。
- 初始siez为16,扩容:newsize = oldsize * 2,size一定为2的n次幂。
- 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入。
- 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)
- 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀。
- 计算index方法:index = hash&(tab.length - 1)【等价于hash%length】
ConcurrentHashMap
- 底层采用分段的数组+链表实现,线程安全。
- 通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)
- Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。
- 有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。
- 扩容:段内扩容(段内元素超过该段对应Entry数组长度的75%触发扩容,不会对整个Map进行扩容),插入前检测需不需要扩容,有效避免无效扩容。
常见问题
1.HashMap插入put过程?
(1) 首先判断table数组的长度,如果大于0说明已经被初始化过,那么按照当前table数组长度的2倍进行扩容,阈值也变为原来的2倍。
(2) 若table数组未被初始化过,且threshold(阈值)大于0说明调用了HashMap(initialCapacity, loadFactor)构造方法,那么就把数组大小设为threshold。
(3) 且threshold(阈值)大于0说明调用了HashMap(initialCapacity, loadFactor)构造方法,那么就把数组大小设为threshold。
(4) 接着需要判断如果不是第一次初始化,那么扩容之后,要重新计算键值对的位置,并把它们移动到合适的位置上去,如果节点是红黑树类型的话则需要进行红黑树的拆分。
2.HashMap数组长度为什么是2的幂次方?
(1) 当数组长度为2的幂次方时,可以使用位运算符来计算元素在数组中的下标。
(2) 增加hash的随机性,减少hash冲突。
5.sleep与wait区别。sleep与wait各自是否会释放锁?
都是用来做线程控制的。
Sleep不释放同步锁,wait释放同步锁
Sleep可以指定时候唤醒,也可以调用interreput()强行打断。Wait()可以用notify()直接唤起。
Sleep是Threa类的静态方法。Wait是object中的方法。
Wait,notify,notifyAll必须在同步控制方法或者同步代码块中。Sleep可以在任何地方。
Sleep必须捕获异常,而wait,notify,notifyAll不需要捕获异常。
6.Java8新特性,lambda表达式、stream有哪些方法、函数式接口
https://zhuanlan.zhihu.com/p/60796123
排序(sorted…),筛选(filter,limit,distinct…),映射(map,flatMap…)等
7.多线程启动方式。
8.线程池参数。
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口+FeatureTask可以拿到返回的结果
- 使用线程池
参数解释:
corePoolSize:核心线程数
maximumPoolSize:最大线程数
keepAliveTime:多余核心线程数得线程存活时间
unit:时间单位
workQueue:阻塞队列,如果任务很多,可以先把任务放到队列中,当线程执行完当前任务会自动从队列获取新任务
threadFactory:线程得创建工厂
handler:如果线程满了。按照我们指定得拒绝策略拒绝执行任务
线程池执行顺序:
- 线程池创建,创建核心线程,准备接收任务
- 没有空闲核心线程,就把任务放到队列中
- 队列满了之后,在最大线程数范围内创建新得线程处理任务
- 最大线程数也满了,就开始使用拒绝策略处理任务
- 任务执行完,除了核心线程,空闲得线程会在存活时间之后释放
JVM相关
JVM内存模型、垃圾回收GC
Spring相关
1.Spring的ioc和aop的好处
Spring是一个框架,在我们整个开发流程中,所有的框架生成几乎都依赖于spring。Spring帮我们起到了一个ioc容器的作用,用来承载我们整体的bean对象。他帮我们进行了全部对象从创建到销毁的整个生命周期的管理,在使用spring的时候我们可以使用配置文件也可以使用注解的方式来进行相关的实现。
但是,当我们程序开始启动之后,会把注解或者配置文件定义好的那些bean对象转换成beanDefinition,然后整个beanDefinition的解析和加载过程。当我获取到这些完整的对象之后,下一步要去对整个beanDefinition进行实例化操作,在进行实例化的时候最简单的是通过反射的方式进行创建。当对象创建完成之后,创建对象只是在堆里面开辟了一个空间,并没有完成后续的一系列初始化操作。所以在后面会实现一些Aware接口的一些相关操作,包括一些初始化方法的操作,包括我要实现aop的话可能要执行一些beanPostProcessor,包括在刚刚的beanDefinition环节也会创建一些beanFactoryPostProcessor来实现相关的扩展工作。当我们整体对象都创建完成之后,对象就可以直接调用了。
2.Bean的加载流程
3.Spring是如何解决循环依赖的?
4.SpringBoot的启动流程
5.AOP自定义注解实现日志管理、AOP在Spring中的应用
MySQL相关
聚簇索引、非聚簇索引
回表
数据库优化
乐观锁悲观锁
事务undo_log,redo_log
……
Redis相关
简介
简单来说reids就是一个数据库,不过与传统数据库不同的是redis的数据库是存在内存中的,所以读写速度非常快,因此redis被广泛应用于缓存方向。另外,redis也经常被用作分布式锁。Redis提供了多种数据类型来支持不同的业务场景。除此之外,reids支持事务、持久化、LUA脚本,LRU驱动事件、多种集群方案。
为什么要用redis做缓存?
高性能:用户第一次访问数据库中的某些数据。这个过程会比较慢。因为是从硬盘上读取的。用户访问一次之后放在缓存中,下次从缓存中获取就比较快了。操作缓存就是直接操作内存,所以速度相当快。
高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中部分数据放在缓存中,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
使用redis作为分布式缓存。Java自带的map和guava都是本地缓存。
Redis的线程模型
Redis内部使用文件事件处理器file event handler,这个文件事件处理器是单线程的。所以redis才叫做单线程的模型。它采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器进行处理。
文件事件处理器的结构包括4个部分:
- 多个socket
- IO多路复用程序
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
1.几种数据类型?使用如何保证DB与缓存数据一致性?
2.雪崩击穿穿透如何解决,布隆过滤器,跳表
String,List,Set,ZSet,Hash。
更新的时候,先更新数据库,然后再删除缓存。
读的时候,先读缓存;如果没有的话,就读数据库,同时放入缓存。
SpringCache
@Cacheable/@CacheEvict/@CachePut/@Caching/@CacheConfig
- 读模式:
- 缓存击穿:查询一个null数据。解决:缓存空数据:cache-null-value。
- 缓存穿透:大量并发进来同时查找一个正好过期的数据。解决:加锁。
- 缓存雪崩:大量key同时过期。解决:加随机过期时间。
- 写模式:
- 引入Canal,感知MySQL的更新去更新数据库。
- 读少写多,直接去数据库查询就行。
MQ消息中间件
1.Kafka、activemq、rabbitmq、rocketmq
计算机网络相关
操作系统相关
数据结构&算法相关
设计模式
Linux相关
1.如何判断一个java服务是否启动成功?
ps -ef |grep 名称
、查看日志
、netstat -nltp
工具相关
1.测试工具用过哪些?
https://www.cnblogs.com/boonya/p/10337435.html
Elasticsearch相关
sharingSphere
https://shardingsphere.apache.org/document/current/cn/overview/
1.什么是sharingSphere?
2.分库分表?
3.Sharing-JDBC分库分表操作?
4.Sharing-Proxy分库分表操作?
什么是SharingSphere?
- 一套开源的分布式数据库中间件解决方案。
- 有三个产品Sharing-JDBC和Sharing-Proxy。
- 定位为关系型数据库的中间件,合理再分布式环境下使用关系型数据库操作。
什么是分库分表?
数据库数据量不可控的,随着时间和业务发展,造成表里面数据越来越多,如果再去怼数据库表crud操作时候,造成性能问题。
解决方案
- 方案一:硬件上加内存
- 方案二:分库分表
数据库数据量不可控的,随着时间和业务发展,造成表里面数据越来越多,如果再去怼数据库表crud操作时候,造成性能问题。
分库分表的两种方式:垂直切分和水平切分。
- 垂直切分:垂直分表和垂直分库。
- 水平切分:水平切表和水平切库。
分库分表应用和的问题
- 应用
- 在数据库设计的时候考虑垂直分库和垂直分表。
- 随着数据库数据量增加,不能马上考虑做水平切分,首先要考虑缓存处理,读写分离,使用索引等等方式,如果这些方式不能根本解决问题,再考虑做水平分库和水平分表。
- 问题
- 跨节点连接查询(分页、排序)
- 多数据源管理问题。
- 应用
Sharing-JDBC
- 是轻量级的java框架,增强版的JDBC驱动。Sharing-JDBC并不是做分库分表的。
- 主要做两个功能:数据分片和读写分离。
- 主要目的:简化对分库分表之后数据相关操作。
Sharing-JDBC实现水平分表
- 环境搭建
- SpringBoot+MybatisPlus+SharingJDBC+Druid连接池
- 创建SpringBoot项目
- 引入依赖
- 创建数据库,创建数据表
- 环境搭建
针对我的个人面试经验,这一块可以结合项目中数据采集入库这一块共同阐述。同时这一块还被问到一个数据量太大,报表生成比较慢的解决思路:定时任务把计算之后的数据放到临时表中。
单表到几百万的时候,性能就会相对差一些了,你就得分表了。
https://mp.weixin.qq.com/s/dLR697JzdOWvCmnR9RhpaA
https://www.cnblogs.com/javafirst0/p/11388768.html
springcloud五大组件
1、Eureka实现服务治理;2、Ribbon主要提供客户侧的软件负载均衡算法;3、Hystrix断路器,保护系统,控制故障范围;4、Zuul,api网关,路由,负载均衡等多种作用;5、Config配置管理。
架构相关
1.微服务与SOA的区别及各自优缺点?
https://zhidao.baidu.com/question/1899225333752310100.html
2.DDD领域驱动设计?
写在后面
还有一些没有记录的都是一面死,也就是还有两三家公司。和上面部分记录的一样都是特别小不出名的作坊。关于为啥没有去面试大厂,主要是因为大厂不理我。投了蚂蚁、字节、头条、携程、得物、华为、中通、华住会、微盟等都没有邀请我面试。我觉得可能是他们不看2年没有互联网经验双非背景的求职者,在他们过滤简历的一个环节我就被筛选去了回收站。再加上稍微好一点的公司也有跟多的候选人去竞争。我能选择的只有顺应这个内卷的职场,争取早日进入二流程序员的日常,做到能聊架构能聊原理。一流的永远是算法,我不太适合,还需要努力。
其实失败的面试并不是被否定,而是对方找到了更适合你的候选人。