淘宝面试回来,想对程序员们谈谈

起因:

因为我是一个不管做什么事情都喜欢进行总结的一个人。所以对于在上周去淘宝面试的经历,现在面试回来总结,我想对所有程序员们谈谈。

之前我是在一家外企工作的,待遇还算不错,自己也做了快五年了,因为考虑到家庭的原因,所以在前面几周辞职回了杭州。在朋友听到我辞职回来后,好多关系比较好的同事朋友也向我推荐了好多家企业。如:蚂蚁金服;支付宝;蘑菇街;阿里云;淘宝;挖财等~~~~这几家公司我都去面试了,情况还算不错,基本都能聊的来,不出什么意外情况,应该都能过。面了这么多家大厂,那么我先来总结一下我在面试淘宝时的经历。

面试经历

今天自我感觉良好的去该公司面试,接待我的是一位漂亮的小姐姐,把我带到会议室,然后来了一个没有我帅的·`哈哈哈“自恋不花钱,要保持住心态”

面试官一进来,我一看,窃喜,没有我帅,接下来的开场非常直接,直接进入正题:(我一般只总结重要内容,其他的我就带过,你们自己想象)

淘宝一面:

1.简单介绍你目前的工作情况

2.在这些工作项目当中有没有哪些项目是你主导或者比较了解的,详细说明一下情况,包括技术的设计

3.由项目中所使用的框架,介绍一下对公司内部框架的具体实现(我这里主要是亚信的CSF和AICACHE)

4.csf是怎么实现的?

5.csf是亚信内部的分布式通信框架,通过zk去管理服务注册和发现,那么,如果当zk集群压力过大,是如何动态扩容和管理的?比如像阿里这样体系的公司, 对于服务注册和发现,可以如何设计,去承载搞负载,高并发的,也就是主机集群并没有宕机,但是负载很高,如何做扩展和优化?

6.当前是一个服务提供者,我发布了服务之后向zk注册,此时,服务调用方来调用服务,会首先询问zk我要调用的服务有哪些提供者,这些服务信息是缓存在 服务调用者这一方,还是每次调用时都问zk要呢?

7.如果服务调用时,突然提供服务的主机不可用了,比如因为网络抖动调用不通,此时又是一个什么样的流程呢?

8.假如此时服务不可用的主机短时间内又恢复了服务提供能力,又是一个怎样的流程?

9.csf服务本身有路由规则的设计吗?双机房,相互容灾,甚至是异地多机房相互容灾,调同机柜,同机房,同城,这些调用顺序是如何设计的?csf服务是如何 做优先选择的?或者说,服务有没有进行过一些分组,类似场景,比如根据用户id分组,50%用户使用A服务提供者,另外50%使用B服务提供者,这样的场景是如何实现的,有没有这样的一种策略在里面呢?如果有的话,又是如何实现的?

10.服务注册与发现之后,是对象的序列化,对序列化这块,在Java里了解有哪些具体的序列化方式呢?彼此之间的优劣是什么样的?在CSF里又是怎么做序列化的呢?

11.既然有第三方的序列化方式,说明java官方提供的序列化方式应该有一些很明显或者很致命的缺点,你能说说是什么吗?

12.假如让你来设计csf框架,恰好你负责序列化这一块,你会怎么来设计高可用,或者选择哪些数据来进行压缩,哪些数据又是不能压缩的,压缩之后肯定会 带来一些负面效果,这些负面有哪些,有具体了解过吗? 比如说,原生的bmp图片,我可以压缩成jpg图片,那我们知道,jgp图片其实是有损压缩,虽然在 肉眼上其实分辨不出来,那这种压缩它是如何做的呢?那还有一些是无损压缩。你觉得protobuf是有损压缩还是无损压缩呢?异构系统之间又是采取什么样 的序列化方式呢,能采用java原生的序列化机制来实现序列化传输吗?

13.序列化传输之后,就是底层网络传输了,那nio包也出来很久了,能说明一下nio主要是做了什么,为什么要设计nio?以及nio里面主要的类和接口吗?这些类和接口分别是设么作用能详细描述一下吗?nio是基于事件驱动机制来设计的,那nio里哪个类负责nio的事件驱动呢?

14.能说一下nio和aio的区别吗?有了解过aio吗?aio有哪些主要的类和接口,主要作用是什么,能说明一下吗?

15.对java8,java9,甚至java10有哪些重大版本的更新,有了解吗?(面试官更想问的是java9和java10),java8有哪些至少是包级别的重大的功能更新,有了解过吗?(我回答了了解ConcurrentHashMap put元素导致同一个hash桶元素多于8个时,会将链表转化为红黑树)

16.能具体说一下红黑树吗?红黑树的具体实现?红黑树具体是如何提高性能的?红黑树如何做到动态调整的?

17.对于列表的流式处理(流处理)和Lamda表达式有接触过吗?

18.对于Garbage First(G1)垃圾回收器有了解过吗?

19.对于其他垃圾回收器有了解过吗?

20.jvm应用启动参数优化,有了解吗?你们这边项目当中有这样操作过吗?比如说,当你发布应用上去,通过监控发现young GC和old gc数据比较异常,有没 有试图调整年轻代和老年代之间的空间比例,以及调整垃圾回收器,以达到性能调优的目的?

21.对类加载器有了解吗?什么样的情况下需要打破双亲委派模型?打破的方式是什么样子的?你能描述一下吗?举个场景,你现在有一个web应用程序,这个war包里有a模块和b模块,a模块依赖一个jar包的1.0版本,b模块依赖这个jar包的2.0版本,这个jar包的1.0版本和2.0版本互不兼容,因为a,b模块又在一个war包里面,那就意味着这个jar包的1.0和2.0全部在这个应用程序内部,tomcat启动的时候对jar包里的同一个类只会加载一次,那么现在情况是,要么a模块起不来不能用了,要么b模块起不来不能用了,如果你是这个应用的owner,你怎么办?模块代码本身很难改,或者说比较复杂,a模块无法升级jar包,b模块无法降级jar包。

22.听说过osji吗?你知道osgi主要功能是什么吗?它大概的一个实现原理又是什么样子?

23.前面都是我在问,你在回答,比较被动,你可以说说你对那些技术或者开源框架有比较深入的了解吗?

24.选举算法,能具体描述一下吗?怎么避免死循环的选举方式呢?比如说,有三台主机1,2,3,1主机选举自己并向23发送选举消息,2和3不同意,然后2主机选 举自己然后也向1和3主机发送选举消息,1和3主机也不同意,3主机也如法炮制,这个怎么避免呢?要么全部选自己,要么全部选别人,大家都是一条,怎 么办呢?

25.能描述一下paxos算法的具体实现方式吗?这个算法里有哪些角色?

26.能描述一下raft算法,它里面哪些角色和它整个选举过程是怎么样的吗?具体是如何选举的?比如还是有1,2,3三台主机,1,2,3都分别发出选举信息,要求 选举自己,过程僵住了怎么办?paxos和raft是不一样的处理,那raft是怎么处理的?

27.redis是如何解决热点问题的呢?dedis集群是怎么实现的呢,能跟我描述一下吗?每台redis从机上都是完整的数据吗,如果这样,数据是不是太过冗余了? 那如果是这样,应用在访问缓存的时候,是随机挑选一台redis机器吗?那怎么保证不会随机挑选到同一台机器上去呢?redis数据切片这个概念有了解吗?

28.~~~等(问了好多,后面写不完了)。

看到这里,你们能回答得出来多少,有多少是你们不能回答得上的?是不是心里此刻已经mmp了。不过你们不用担心,我此时我也懵了,心里想骂娘。不过心态不能慌呀~~~~

(心里想着,稳住,他没我帅~~~~哈哈哈)

面试总结

不知道你们看完了发现没,就一个淘宝,就要懂很多知识点,那如果阿里巴巴,支付宝,等一线大厂呢?是不是感觉自己还要学习的还有很多~

经过这次面试,我总结一下几点:

1、基本语法

这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。

2、集合

非常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。另外多说一句,ConcurrentHashMap的问题在面试中问得特别多,大概是因为这个类可以衍生出非常多的问题,关于ConcurrentHashMap,我给网友朋友们提供三点回答或者是研究方向:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

3、设计模式

设计模式在工作中还是非常重要、非常有用的,23种设计模式中重点研究常用的十来种就可以了,面试中关于设计模式的问答主要是三个方向:

(1)你的项目中用到了哪些设计模式,如何使用

(2)知道常用设计模式的优缺点

(3)能画出常用设计模式的UML图

4、多线程

这也是必问的一块了。会问得深入一些比如说Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,几次面试几乎都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

聪明的网友们对这个问题是否有答案呢?不难,java.util.concurrent下就有现成的类可以使用。

另外,线程池也是比较常问的一块,常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际一些的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适。最后,虽然这次面试问得不多,但是多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法等等

5、IO

IO分为File IO和Socket IO,File IO基本上是不会问的,问也问不出什么来,平时会用就好了,另外记得File IO都是阻塞IO。Socket IO是比较重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。这是基本一些的,深入一些的话,就会问NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等,这有些难,当时我也是研究了很久才搞懂NIO。提一句,NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO,面试回答的时候要注意这个细节,讲到NIO会阻塞在Selector的select方法上会增加面试官对你的好感。如果用过Netty,可能会问一些Netty的东西,毕竟这个框架基本属于当前最好的NIO框架了(Mina其实也不错,不过总体来说还是比不上Netty的),大多数互联网公司也都在用Netty。

6、JDK源码

要想拿高工资,JDK源码不可不读。上面的内容可能还和具体场景联系起来,JDK源码就是实打实地看你平时是不是爱钻研了。

JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:

(1)List、Map、Set实现类的源代码

(2)ReentrantLock、AQS的源代码

(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的

(4)线程池的实现原理

(5)Object类中的方法以及每个方法的作用

7、框架

老生常谈,面试必问的东西。一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做,比如我想要在Spring初始化bean的时候做一些事情该怎么做、想要在bean销毁的时候做一些事情该怎么做、MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习框架的使用细节自然都不成问题。

如果上面你的问题答得好,面试官往往会深入地问一些框架的实现原理。问得最多的就是Spring AOP的实现原理,当然这个很简单啦,两句话就搞定的的事儿,即使你不会准备一下就好了。

8、数据库

数据库十有八九也都会问到。一些基本的像union和union all的区别、left join、几种索引及其区别就不谈了,比较重要的就是数据库性能的优化,如果对于数据库的性能优化一窍不通,那么有时间,还是建议你在面试前花一两天专门把SQL基础和SQL优化的内容准备一下。

不过数据库倒是不用担心,一家公司往往有很多部门,如果你对数据库不熟悉而基本技术又非常好,九成都是会要你的,估计会先把你放到对数据库使用不是要求非常高的部门锻炼一下。

9、数据结构和算法分析

数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中绝对能派上用场。数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。

10、Java虚拟机

Java虚拟机应该是很重要的一块内容,谈谈Java虚拟机中比较重要的内容

ava虚拟机的内存布局

GC算法及几种垃圾收集器

类加载机制,也就是双亲委派模型

Java内存模型

happens-before规则

volatile关键字使用规则

也许这些内容面试无用,但在走向大牛的路上,不可不会。

11、Web方面的一些问题

Java主要面向Web端,因此Web的一些问题也是必问的。

谈谈分布式Session的几种实现方式?(常用的四种能答出来自然是让面试官非常满意的)

讲一下Session和Cookie的区别和联系以及Session的实现原理

这两个问题之外,web.xml里面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至少能对它们的使用知根知底。另外,一些细节的方面比如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。

最后,如果有兴趣有时间,建议学习、研究一下SOA和RPC,面向服务体系,大型分布式架构必备,救命良方、包治百病、屡试不爽。

关于HR面试

如果你过五关斩六将,成功地通过了所有的技术面,那么恭喜你,你离升职加薪、出任CEO、迎娶白富美、走向人生巅峰又进了一步。但是还没有到谈薪资待遇的时候,最后还有一个考验:HR面试。基本所有的大公司都有这一轮的面试,不要小看HR面试,很多公司的HR对于面试者都有一票否决权的----即使前面的面试对你的评价再高。

所以,这轮的面试也必须重视起来,HR面试主要问的是几点:

简历中写的过去工作经历的离职原因

当前公司薪资待遇

期望能到怎样的一家公司

个人未来的发展方向

如果大家想学习以下路线内容,在此我向大家推荐一个架构学习交流群。交流学习群号:521353348   里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

强力推荐大家学习的进阶路线

一、源码分析

二、分布式架构

三、微服务

四、性能优化

五、Java工程化

总结:

好了,我的总结就到这里了,如果你们也想面试BAT,建议你们把基础学好,偷偷的告诉你们,他们都是很喜欢问基础知识的哦......现在想着那个面试官,真心感觉他没我帅~~~~哈哈哈哈。

大家可以关注我的公众号:《Java烂猪皮》,平常我也会发写技术文章,比如:架构,分布式,微服务spring,jvm,MySQL等知识点。面试经验也会分享给大家。在此谢谢大家的关注支持~~~~


注:大家转载请注明原文出处,原文连接:     https://segmentfault.com/a/1190000015433230

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,186评论 11 349
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,413评论 1 14
  • ——《从0到估值1000万,创业者的五项修炼》书评 看完刘主编的《从0到估值1000万,创业者的五项修炼》这本书,...
    艺冯阅读 315评论 0 0
  • 你现在过得不好,可能是你的逻辑出了些问题 逻辑,一个十分抽象的词语,但与此同时,也是一个非常具体的词语。 每个人生...
    彭先生的杂货铺阅读 451评论 3 9
  • 这部电影是以也门撤侨的真实故事为背景。也门危机本是政府与反政府的冲突,后来,才形成的以沙特为首与背后提供后勤和情报...
    一梦异时空阅读 97评论 0 0