Java中高级面试经验

1.自我介绍

    自我介绍一般是每次面试的开头,其实自我介绍的内容自己来把握,主要说下姓名,哪里人,什么时间毕业于什么学校的什么专业,毕业之后分别在什么公司做过什么,时间控制在2分钟左右即可。自我介绍环节其实是给面试官预留一些时间看你的简历,所以最好把简历重点部分提一下,比如个人擅长、重点项目以及个人成就等。最后注意一下谈吐自然,语速不快不慢,微笑中透露着自信,内容简洁有重点即可。

2.介绍项目

    介绍一个最能体现你个人技术或最有成就感的项目,这一般是面试的第二个环节,面试官是想知道你做什么比较擅长,有哪些工作经验,使用过什么技术框架。有的面试官在你介绍的过程中也会陆续的问你些技术问题,比如某个框架是怎么使用的,模拟个业务场景你会怎么处理,项目是否使用多线程,高并发,分布式等技术;如果系统复杂,面试官也会让你手画系统模块和架构图,从而判断你对系统的理解程度和全局视野;如果你做的系统太多,想一一描述的话这是不明智的,因为言多必失,冗余的内容反而没有重点。我一般是先总结一下做过的系统名(xx运营系统、xxOA系统、xx服务、xx门户网、xx平台、xx微信小程序),说3到5个,然后说一个最nb的系统详细吹一下。

3.技术面试

    技术面试就是比较直接了,可能在面试的各个环节都会出现,这也是我在阿里面试的时候得到的教训,技术永远是软件行业的核心竞争力,一家公司三四轮的技术面试也是常有的事情,所以技术储备和面前准备是非常重要的。下面进入正文,面试会问的问题和整理:

java基础:1.HashMap的数据结构是什么? 2、HashSet 是如何保证不重复的 3、HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? 4、HashMap 的扩容过程 5、HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的? 6、final finally finalize 7、强引用 、软引用、 弱引用、虚引用 8、Java反射的实现原理 9、Arrays.sort 实现原理和 Collection 实现原理 10、LinkedHashMap的应用 11、cloneable接口实现原理 12、异常分类以及处理机制 13、数组在内存中如何分配 14.io的模型和nio selectionkey是什么

多线程:1.什么是多线程,多线程的目的是什么? 2.什么是线程安全,非线程安全? 3.线程的有那几个状态以及相互间的转换 4.wait/notify为什么必须存在于synchronized块中? 5.多线程volatile关键字的作用? 6.Runnable,Thread,Callable三者的区别? 7.ThreadLocal 的作用,怎么使用它? 8.Lock与synchronized的区别? 9.请对比hashTable , concurrentHashMap, HashMap的区别? 10.什么是线程死锁?产生的原因?如何避免死锁? 11.什么是Executors框架? 12.什么是Callable和Future? 13.在静态方法上使用同步时会发生什么事? 14.什么是线程饿死,什么是活锁?

线程池:1.解释线程池的作用? 2.线程池的处理流程? 3.jdk提供的线程池工具类有哪些,区别是什么? 4.关闭线程池的方法有哪些?区别是什么?

MySqL:1.sql优化方法? 2.建索引有哪些策略和原则? 3.索引存储原理? 4.mysql数据库锁有哪几种? 5.写一个数据库死锁的sql? 6.如何做数据库分库分表?(mycat) 消息队列: 1.RabbitMQ的exchange有哪几种? 2.mq的使用场景有哪些? 3.RabbitMQ的系统架构? 4.RabbitMQ的任务分发机制有哪些?

Redis:1.使用redis有哪些好处? 2.redis相比memcached有哪些优势? 3.redis常见性能问题和解决方案? 4.redis集群有哪些模式? 5.redis中穿透,击穿与雪崩的预防及解决? 6.redis哨兵模式集群的原理?

Spring:1.IOC和AOP的实现原理? 2.AOP的应用场景有哪些?以及动态代理原理是什么? 3.事务的传播属性有哪几种? 4.bean的生命周期? 5.Spring有哪些模块,分别有哪些作用和功能?

SpringMVC:1.SpringMVC的工作原理,举例说明流程?

MyBatis:1.Mybatis的二级缓存?

Zookeeper:1.zk的作用和原理? 2.zk设计要满足哪些特性?分别解释一下? 3.zk的选举机制是什么?是否有了解Paxos算法?

Nginx:1.什么是Nginx?Nginx的作用是什么? 2.Nginx 有哪些特点?

分布式:1.什么是分布式系统?解决什么问题? 2.如何提升系统吞吐量? 3.如何降低延迟? 4.如何做故障恢复? 5.如何做日志统一系统? 6.怎么实现通讯编程?如rpc服务,webService服务等; 7.高并发秒杀解决方案有哪些? 8.分布式系统有哪些优势? 9.分布式系统会面临什么挑战? 10.如何设计分布式系统? 11.如何做分布式事务?

其他问题:1.如何将一个请求由原来的10s减少到3s?可以从哪些地方优化? 2.如何支持大量流量的访问?可以在哪些地方进行优化? 3.双11流量怎么控制? 4.1亿无序的数据文件,如何找出最小的10个数并去重?(topk算法) 5.分布式环境下,如何对一个web请求的做监控?

4.不可避免的问题

    请说一下你为什么想跳槽?为什么选择我们呢?你最近在关注那些领域的知识?你的职业规划是什么?你对自己未来的定位是怎样的?最近是否有打算深造提升自己?你平时是如何自学的?你喜欢读书吗,都有那些书?你除了工作之外还有哪些兴趣爱好?工作中遇到挑战你通常是怎么处理的?工作时是否遇到沟通中发生争执?你如何看待加班这件事?你觉得自己有哪些优势?生活中别人是如何评价你的?自己有哪些优点和缺点?你的期望薪资是多少?最低能接受多少?低于*k是否就不考虑了?......这些问题在面试的过程中会被经常闻到,回答这些问题的同时体现了个人性格、修养、爱好、知识面、工作态度、做事方式、沟通能力、主动性、逻辑思维等,以便于面试官能更高的了解你。

5.学习方法

    刚开始面试的时候,可能效果并不是很好,许多知识点没有准备好,问题也没有想过怎么回答,一脸懵逼的回来;但是越到后面越会发现问的内容大体一致,范围也越来越明显。这个时候需要找到好的学习方法,勤总结与后续准备;我的学习方法是先收集面试题,搞懂题目,准备笔记,然后再去面试,发现有回答不上来的问题,面后回来想想,查资料,然后加入笔记,然后再去面试,循环往复。4到5次面试后基本上技术面试没有什么难度了。

6.总结

  面试不仅是为了找到一份喜欢的工作,同时也是审核一下自己掌握的知识,寻找一些与某公司的差距,填补知识的不足与空缺,最后祝愿各位面试顺利。四月是一个美好的季节,桃花夭夭,渌水盈盈。

你可能感兴趣的:(Java服务端)