简介
面试是上海的Java岗位,周日一轮面试,自我感觉答的都还不错。
结果收到邮件面试结束了,说什么"你优秀的学识和能力给我们留下了深刻的印象!经过对你综合情况的仔细评估,并经过与岗位需求进行谨慎匹配和权衡之后, 非常遗憾,我们这次没有和你达成合作。但你的信息已经被录入到公司人才库"。意思就是挂了呗。
后来打电话问hr,说是我擅长的技术不是他们所需要的,???(黑人问号)。然后面试过程中,有一点奇怪的地方,面试前面试官跟我说我面的而这个岗位有点奇怪,他也没跟我说哪奇怪。
本文分享给需要面试刷题的朋友,另外本人也整理了一份资料包含了Java基础,数据结构,jvm,Redis,并发多线程,分布式,数据库等等,由于篇幅有限,以下只展示小部分面试题,有需要的朋友可以点击进群795983544领取,暗号CSDN
面试官的问题:
1.自我介绍
2.介绍印象深刻的项目,我介绍的是最新在做的项目,用到的技术,自己做的哪些模块?
- 回答:讲了用到的设计模式——模版方法,然后讲了模式方法的实现
3.因为最新的项目用到了,问了Spring Boot,Spring的区别?
- 回答:去配置化话,然后其他的基本一样,顺便说了一下Spring MVC的原理
4.Spring 的 bean是什么?我说了IOC、DI、Bean之间的关系
5.Hibernate 和 Mybatis的区别?
6.因为项目中用到了webservice,问了创建的方式,怎么访问?
- 回答:通过SOAP协议访问,创建的方式我忘记了…(我用的是EndPoint发布的)
7.因为简历中讲到了我个人的电商秒杀系统(个人喜好写的,提升自己的技术栈)问我怎么实现一个高并发系统?
回答:
横向扩展(用nginx实现负载均衡,提高服务器性能等等)
纵向扩展
- MQ队列实现异步下单,减轻服务器的压力
- redis缓存减轻数据库的压力,redis的算法原理,常用的hash算法、以及一致性hash算法的原理,然后就说具体的做法了,SSO单点登录的时候用redis中存放用户信息
- 缓存秒杀列表界面的方式
- 前后端分离的开发模式
其实还有很多个,不过我没有用到,比如说服务降级(天猫双11的时候经常会关闭一下评价或者说不怎么常使用的模块)、数据库分库分表
8.线程的创建方式?怎么实现线程安全?
回答:通过多个线程对static的变量进行++操作,
(1)利用A.Q.S的相关类比如说AtomicInteger的线程安全的类,顺便说了一波实现原理CAS算法(看过相关
的博客,略懂),Java的内存模型等等
(2)利用线程封闭的方式,
(3)利用synchronized、Lock的方式,顺便说了一下两者的区别,
(4)我还说了一些线程不安全的类,比如说HashMap(大概说了一下源码实现),可以使用concurrenthashmap (说了分段锁,其实也是利用CAS算法)…
(5) volatile关键字实现线程安全的用法以及场景,因为volatile保证了线程的可见性、禁止指令重排序,可以用来做来状态变量,如果比如说
//线程1
boolean stop = false;
while(!stop){
doSomething();
}
//线程2
stop = true;
因为volatile不具备原子性操作,不适合用来作为原子性操作的场景
9. 只有static的变量是不安全的吗?还有别的吗?
回答:堆、方法区都是线程共享的,栈是线程独有的,比如说类变量、静态变量都是放在堆、方法区中的,会有线程不安全的情况,栈中的内容是线程独有的,然后再说了下Java的内存模型,从主内存到线程的栈内存
10. 敏捷开发懂不懂?
回答:举例了平时的项目(类似敏捷开发):每周出一次build,然后客户不满意,改,继续出build;改bug,QA测试有问题,继续改…
11. 个人电商项目的访问数量级?有没有并发的数量要求?
回答:我说因为是个人项目没有统计具体说是什么,会使用Jmeter工具测试优化前后的QPS变化量
12. 怎么保证代码质量?
13. 公司项目的数量级,数据库的量级?
…
好了,一个小时多的面试就结束了
面试中的细节
之所以是细节杂谈,说实话,是因为真的不知道可以写什么,网上关于面试的文章很多,大概看了几篇之后,更不知道写什么了。而根据自己的面试经验来看,发现其实有很多细节,在面试的时候都没有被好好重视起来。所以,这里针对这些细节做个总结,细节决定成败,也希望可以对你们有所帮助。
1. 准备一个良好的开场白
首先笔者理解的自我介绍的作用是缓解初次交谈的尴尬以及过渡开场,然后才是扩展为对候选人的口才、逻辑以及表达能力的判断。
如果你实在不知道怎么说,即便是把你简历上的姓名、年龄、爱好、工作经验复述一遍,至少也是起到了暖场的作用。当然要是能基于此,表现出一定出彩的地方,那自然是再好不过,多花点心思准备是值得的。
最近看到一个有趣的分享,唐僧每次介绍自己:贫僧唐三藏,从东土大唐而来,去往西天拜佛取经。其实这几句话包涵了每人都要问自己的三个问题:我是谁?我从哪里来?我要到哪里去?在面试中也可以总结为三个问题:我是谁,我的学习和工作经历?我有什么技术亮点?
2. 谦虚是必要的,因为这是礼节
很大程度上,面试官还有一个身份就是以后可能要一起共事的同事或者老板,所以切忌不要表现的心高气傲,尤其在电话面试中,很难在短时间就能了解一个人,你所表现出的态度就显得非常重要,如果和面试官产生了争论,要注意谈话技巧,可以在你的观点前加上我理解的是什么什么…
就连牛顿说他不过是站到了巨人的肩膀上了,所以永远不要觉得自己有多牛,真正牛的人只会更谦虚。
3. 大招放的好,工作何愁找
何谓大招,首先对于候选人来说,技术面试所涉及的深度和广度是很难全部顾及的,加之每个面试官的问题又会多种多样,所以与其担心被问到自己不熟悉的领域,不如挑几个自己的熟悉的技术点深挖下去,总结和形成自己的一套理论。
之前看到一句话说的很好,面试的本质不是一问一答,而是亮点展示(放大招)。所以要学会掌握面试的主动权,把话题尽量往自己擅长的地方引,当然陈述的时候记得一定要简洁扼要。
4. 算法题 — 知之为知之,不知为不知
面试中问到算法题,如果不知道就明确表示不知道,切记不要装做知道,然后不知所云的说了一大推,这样反而会给面试官留下比较差的印象,面试评价上也会比较难看,很有可能也会影响你后续的面试。
不用担心回答不知道,就感觉没戏了。这里一般有两种情况:一种确实是对算法要求高的职位,那没办法了,只能回去好好加强一下,来日再战。还有一种情况主要是考察你的综合能力,你其他方面的能力表现的非常好,可以弥补。不会有影响的。嗯,笔者当时就属于第二种(强行炫耀)。
5. 还有一些小细节
-
简历遵循 STAR 法则,内容才是王道。对于某些大厂来说,都会有自己的招聘系统,而你精心打造的酷炫简历在导入到后台后,会变得面目全非。你的简历样式做的再好看也没用,少在样式上下功夫,多在内容上下功夫。
-
听到面试官的问题后,先不要急于回答,给自己几秒的思考时间,多站在面试官的角度去思考这个问题应该怎么答,比如当问到你觉得你最大的优势是什么?有些同学会直接回答热爱技术……然后…然后就没有了。这样显然毫无说服力,如果加上一句,经常浏览国外优秀的技术博客、在 GitHub 参与和贡献自己的开源力量,是不是就好很多了。
-
面试结束后,不要觉得不好意思,或者觉得没有必要,对面试官说一声:“谢谢,辛苦您了”。就我个人经验来说,毕竟大部分负责的面试官都会和你聊比较长的时间,也会尽可能挖掘你的技术亮点。结尾给面试官留个好印象,如果没有通过,至少对你的面试评价上也不会太难看。
最后
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
来源:oschina
链接:https://my.oschina.net/u/4368490/blog/4771957