BAT蘑菇街等Java社招面试总结一二

毕业之后工作两年有余,对现在的工作及工作环境有些不满,出来找下工作,看看外面的世界,同时也试下自己的水平。

至今共面试了多家公司,包括大厂阿里、网易、蘑菇街等、也有多家创业型公司,收到多个offer。由于面试策略问题,都不是非常满意。下面总结下本次面试的经历,引以为戒。

氛围最轻松的是网易,止步于一面,是一个比较年轻的面试官,随便在大堂里找了个空座就聊了起来,范围很广,对基础要求较深。最土豪的是蘑菇街,到场后会给你冲杯咖啡喝,止步于一面,招聘的是中间件的工程师,对技术要求较深,面试官比较高冷。

首先总结下阿里的面试。面试时间安排在下午一点,犹豫面试地点距离很远,所以赶到的时候已经一点了,还没吃午饭,匆匆在公司超市里面买了几个小面包充饥。面试官看上去像是四十岁左右的技术大拿,首先让我做了下自我介绍,然后问了我几个基本的问题:hashMap和concurrentHashMap的区别,内部实现原理,stringBuild和stringBuffer的区别等。然后让写一个单例模式的实现(这个没写好,缺了几个关键字,给面试官一个很差的印象,基础不太好)。然后基本上看着简历问了,做过项目吗?在项目中国解决了哪些问题,看过开源代码吗?struct2的工作原理是什么,一通连环问,有点蒙了。主要还是本人平时积累的知识不够,掌握的不够熟练啊。然后问jvm的内存结构有哪些,Linux写过shell吗,能直接写一下吗?你理解的高可用是什么,能实现秒杀吗?回答了两种,但没有描述具体。面试官有些失望了,给我最后一个救命的稻草,问我一个智力题,烧香算时间的问题,这么容易的题我当时竟然也蒙了,唉!失望啊!game over!

然后第二天去面试蘑菇街,本来按照阿里的套路准备了一下,但是过去之后面试方法完全不同。首先让自我介绍,然后主要看着简历中写到的东西提问。负载均衡的处理有哪些方式,lvs了解吗,你们为什么从iphash转到了使用最小链接的负载算法。平台的用户总量,这个回答估计直接被鄙视了。mq的p2p模式,阿里的中间件技术了解吗。然后问为什么从memcach迁到了redis,使用redis中遇到了哪些问题,这个估计直接挂了。然后就没有然后了。

其他两家小公司面的也类似,问一些基础知识,然后问项目中解决的问题!主要关注高并发的问题等!

需要总结的知识点比较多,主要还是平时要多积累吧,用到的东西要知道所以然,不能只停留在表面的使用。

比如concurrentHashMap内部结构、ajax请求的封装对象、负载均衡的几种策略,redis设置过期时间的实现原理,redis的并发操作数据怎么保证安全性。

Nginx轮询的实现原理、spring的事物及实现模式,数据库优化的策略,索引的数据结构。

springMVC的工作原理,常用的设计模式,ajax异步刷新实现的步骤,如何判断是Ajax请求。

servlet的生命周期,怎么判断是get请求还是post请求,后台实现session共享的方法。过滤器和拦截器的区别。

同花顺的搜索实现方案,Linux命令直接搜索大文档中的几行内容,按热度实现推荐算法的方案,单例模式获取到两个项实例的方案。

分库分表实践,Nginx轮询实现原理(组件的实现),序列化的原理,分布式一致性解决方案。

redis的锁机制,treeMap实现原理,一致性hash原理,同步锁,TCP/UDP的区别,说一下TCP的三次握手(建立连接)和四次挥手(四次挥手)。

其它知识(服务化《微服务、dubbo、并发、restful、NIO、序列化、springBoot、分布式》)。

Java8的一些新特性介绍。项目中遇到的问题,印象最深的问题!

线程进程的区别,Nginx负载均衡、LVS负载均衡,对springBoot理解,spring的增强方式,AOP,ZK保证一致性的方法,分布式事务的实现方式,分布式锁,分布式一致性,redis分布式锁;

还有很多东西要总结,有时间继续补上。。。







*关于TCP的三次握手、四次挥手:

为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为在建立连接时,当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。

所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。



猜你喜欢

转载自blog.csdn.net/bwh0520/article/details/78768661