11.30 一面 57 min
基础:
- Java Object类方法,只说出了equals。
- 问equals怎么做得,我将了下,然后重点说了HashMap,他问hashcode是不是Object方法,
- String、StringBuilder、Stringbuffer。
- 自己写一个String类,行不行。我说不行,一开始没想到,只是隐约记得不允许,然后说不了解,他说再好好想想,我说那我猜一下,可能跟类加载机制有关,越说越觉得对,然后把类加载机制说了一下。
- get跟post
- HTTP响应状态码。
- cookie跟session区别。
- 多个服务器怎么保存session一致性,我说了用一个代理,保存所有session,然后任意连接服务器,他问还有没有方法,我说能不能想数据库主从复制一样同步一下session,他说这样破坏了服务器之间无状态啥的设计原则。(不会)
- Exception、Error、Throwable区别,第三个不会,第二个问到底能不能被处理,我不确定了。
- Out of memory和Stack over flow,是什么,怎么排查
- 线程池原理
- Java 8特性,用过吗。(只知道Labmda表达式,没用过)
代码:
判断是否正确,({[这三个,我给写复杂了,一开始觉着用set放一下比较方便判断在不在,后来写起来觉得不方便,还写的很麻烦,写完之后运行了,结果不对,刚看了一会,他就说下去再看吧,时间不多了,咱再问点别的。
设计:
银行转账,a到b,会有什么问题,要怎么解决,我说了三种情况,应该差的挺多的,没准备过这种题目。
- a的钱不够转账,上层判断一下。
- 好多人都在给b转,a通过自旋转账。
- a减完钱,b还没加上去,宕机了,通过事务恢复。然后问Spring boot事务怎么做的,我说了下原理,他说不是问这个,我说我看过,使用一些注解,但是没用过,记不清了。
如果表太多,比如有10亿行,速度怎么样,我说非常慢,那怎么办,我说分表,说做垂直拆分和水平拆分,他说就两列,我说那就只作水平拆分,问我具体怎么分,我说用hash,对银行卡号或id做hash,分成多个表。他说要是还放不下,我说那就分库来做,他问这种场景下,如何保证上面说的安全,如何实现事务。这个我也不会,我说能不能做个中间服务器,都传到中间一起做事务,或者将一台机器的数据传到另一台,在一个机器上做事务。他说那不分不就行了,我说不分的话一个机器放不下,然后就完了。(这个算是问到点上了,我背的八股文是:水平拆分的缺点是分布式事务难以解决,没背怎么解决。)
反问:
- 问缺陷:说对应届生不要求掌握很深,项目和设计了解的比较少。
- 做什么:内部app能看到的所有广告。
- 几面:2技术+1hr。
全部评论
(9) 回帖