最近几周与阿里的面试官聊了聊,趁着我还有记忆先写下来。本人近5年工作的JAVA程序员,技术不精。大伙不必太过吐槽。哈哈。我曾两次时间投过简历。
》2013年
第一次是在2013年的时候,当时工作3年,第一轮面试还是比较容易的。就是讲项目的技术点是过了。二轮的话问一些基础然后可能就忘记了。失败告终。
》2016年
第一轮的时候问的比较细,
像java Object有哪些方法,
回答:toString equals hashCode wait clone notify notifyall .
然后接着问hashCode相同,equals相同?
回答:不同,一般来说这样约定equals相等那hashCode相等,hashCode只是对象的一个映射而已。
主要在集合中来区分不同的对象。然后他接着问,那相同hashCode相等的对象在hashmap中是什么区分的,
我是这样回答的。hashmap 是由数组和链表组成的,关于hashmap的查找是根据将key做hash然后得到链表,对于hash相等的对象是通过链表保存的。查找的时候就需要迭代了。
接着又说如果相等hash对象太多,那么怎么解决迭代的影响。后面接着还问了些数组与列表的区别,多线程相关的知识。
第二轮是面试官结合项目来问,会对你的项目来做一些提问还是比较好回答的
第三轮 我可就惨了,一上来就问说说你对spring IOC的理解,SpringBeanFactory 是怎么实现的。你对dubbo的理解,自带有哪些序列化。默认的是哪个。
dubbo怎么知道服务器状态有什么内部机制。说一下https的流程。说一下jvm优化的,项目中是怎么配置的。
我是这样回答的,spring通过dispathServlet或是filter加载bean,一种是基本注解的加载 一种是基本beanxml的加载。通过map来保存实例化和管理生命周期,ioc来说的话,map就相当于窗口的概念,spring 为什么能做代理,拦截器的原因。
可以理解 为一种注册机制,这种思想还是比较常见的。
然后回答了对dubbo的理解 ,dubbo也就是rmi的框架,实现方式也是将zookeeper +netty+hessian+http+webservice等东西集成在一起。
rpc的原理也就是动态代理的一个过程,那dubbo也就是将序列化和付输方式的封装然后加再加上zookeeper的协调功能。常见的序列化有xml,json,二进制。其中他问为zookeeper能够发生服务是否宕机或是出问题了。
我是这样理解的,zookeeper是在服务器注册时发现的,至于为什么能知道哪台服务器宕机,那肯定是做监听通过心跳这种机制了来发现服务了。但其它我觉得在zookeeper中是应该要知晓哪台服务器当前性能比较好,cpu比较低,内存使用率不高。
他也问了这个问题了,其实我在看zookeeper的时候想过个问题。对于每一个服务来说,应当对外提供监控的功能API,就想springBoot一样有专门的模块暴露服务器的资源使用情况,zookeeper是否能监听这些数据,而不是根据随机或其它方式。
最后提到两个问题一个说https的流程,
我的表达可能太简单,Https只是一种协议,将服务器客户端数据传输通过加密签名方式来传递。双方都需要安装 证书,客户端提交的数据通过加密后到服务器,服务器通过证书私钥解密,并验签,然后保证数据安全。
然后他说,你知道https最大的重点在哪里嘛?我想除了安全还能是什么...想了想。他说了一句‘防劫持’,签名不就为了防止数据被修改而做的嘛,当然‘防劫持‘’说的比较准,我没有说到点子上。回答了这几个问题,明显感觉到不行了。
最后说了下jvm优化,一般你们会调整哪几个参数,我说一般会设置xmx 与xx:persize 两个参数。然后他问一般你们设置成多少。
我说,4G xms 1G persize .然后参数设置有哪些根据。我说看项目情况吧,如果项目文件比较多,查询数据量比较大,功能复杂点的,会调高一点。
具体的值也是看情况,一般的可以看在tomcat下运行时的占用内存来看。接着说 32bit 与64bit 内存设置有什么区别。我说32bit 只能设置到1g多,64应该说无限吧。然后他具了个例子,他有一台64G的机器,设置成32的G的堆内存行不行。
我说不考虑业务发展的话 设这么多应该不合适吧。当然 我没有具体想过个问题,也不知道设置成一半有什么后果。一般项目没有实际去调整过。‘‘压缩’’指针我也不知道啥玩意。最后我忍不住了。
我说我属于项目型的,没有特别入深入研究的框架。但是看源码或是解决问题能力还是有的。整个面试就结束了
总结:来说还是被虐了,当然还是我技不如人。其实想自己开发近5年了还是这种水平还是太搓了点。像dubbo,zookeeper也是简单的了解 没有在项目中实际用过。也只是谈过自己理解,像jvm调优这就更没深入。一般也就是那几个参数了。dubbo,zookeeper,jvm调优深入理解实战。建立你的Java知识体系。
我的技术表达能力不太专业,我喜欢将自己的经验加自己去理解一些技术点。研究的方向不是那么深,总体来说我是一个实战派。我能快速的学习,但知道体系可能不太全面。当然我也会继续的努力。全面系统学习加群654675708
阿里Java高级大牛直播讲解知识点,分享知识,五大阶段都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
另外我也说下在优酷的面试吧
1 优酷比较注重基础、表达能力。面试中可能会要求里用图形表现你的项目结构
2 通过项目来提问
3 最终领导面会问下离职原因等,还有技术问题,设计问题,高并发,隔离级别,spring事务控制
当然我卡死在最终领导面试了,价值观的一些东西没说好,后面就挂了。技术我感觉没多大问题可能记得的就是如果不用数据怎么去统计大文本中的订单信息,交集或是并集,我说可以用Java的随机读,然后将数据保存到map中比较。还有如果现在有30家银行需要对接,你怎么去设计
4 保持你的自信心。
提问:
如果需要对api每秒请求次数做限制你该怎么实现。
我的回答是:
最好通过前置系统来统计,lua脚本之类的
还有就是通过spring aop来拦截统计。加锁。(面试官说有没有不锁,更高性能方案)
其实我想说,要你解耦合非得写在业务代码中,应该放在网关那一层多好。他说的更高方案没有给我答案,谁知道?