{eval=Array;=+count(Array);}
java程序都会被问到的面试问题,月薪20k+
那如果有感兴趣老友们想要获取完整面试题的呢...可以去我的主页看看我的面试文章,也可以私信我【面试】获取,很开心能分享给大家!
我的很多文章都有分享各种架构资料,相信对于已经工作和遇到技术瓶颈或者写博客码友,在我的主页一定都有你需要的内容。
两年的java经验, 找工作时候简历就要实事求是, 匹配一些基础的java研发岗位去面试, 如果平时内功修炼的到位, 拿下一个offer应该不成问题。
1、会问你科班基础: 操作系统知识, 数据库原理、数据结构、以及软件工程相关的测试, 流程之类知识。
2、会问你java涉及到的基础知识: OO基础, 常见类库用法, 常见类的区别, 优点和缺点。
3、会问你一般问题的解决方法: 如登录流程, 数据库不重名的方法, 文件读取或者处理的方法。这些都是平时应该积累的。
4、会问你一些算法的定义和区别, 可以参考一下:hihocoder.com/problemset
5、阐述问题的时候,尽量不要教科书式, 白话形式。
6、数据库方面:关系数据库各个范式的目的, 主键,索引,规则,PS,triger这些也要了解下用法。
7、能用常见BS框架做过小东西:ssh,ssi等, 能说出mvc,切面等内容。
8、记住: 不懂千万不要装懂乱说,态度要诚恳, 面试官看你求知欲强, 态度诚恳,也就喜欢和你聊下去, 就会有好印象。
9、面试过程不要有压力, 也不要为不能回答问题就担忧, 多面试总结也是提升自己的一种手段。
一般两年的工作经验,技术上不会了解得很深,有一些项目经验,面试官更看重的应该是你的java基础理论的理解和项目经历的理解。
一般两年的工作经验,java技术上的面试可能从以下方面可以去复习:
1、java基础知识(包括java集合、java异常、IO与NIO,同步与异步,阻塞与非阻塞)
2、spring
3、mybaits
4、mysql(特别是索引相关的)
5、dubbo
6、jvm以及垃圾回收机制
7、简单的排序算法(冒泡排序、快速排序、选择排序、插入排序等等)以及他们的时间复杂度
高级一点的东西,可能就涉及到分布式和消息队列,多线程以及锁处理的高并发方面的知识,但是以上是比较基本的,一般都会问到,所以面试前要有一个好好的准备过程。
然后项目经验上,对自己做过的项目,一定要有一个项目,你非常熟悉整个过程,了解整个系统的运转,这个也是面试官比价看重的一块,毕竟两年的工作经验,项目经验肯定要有一定的积累的,虽然我们技术上由于工作经验的原因不能做的很深,但是项目,我们是经历过几个月甚至是一两年的,你得有自己的理解,最好,对你们系统能够提出改进的意见或者建议那是最好不过的了,这样肯定是很大的加分项,面试官觉得会对你刮目相看的。
另外,在分布式和消息队列,多线程以及锁处理的高并发这方面需要了解更深的同学,可以关注一下我的微信公众号“我的个人记事”,个人有视频资料可以奉献,并且后续会继续更新。
两年的java经验, 找工作时候简历就要实事求是, 匹配一些基础的java研发岗位去面试, 如果平时内功修炼的到位, 拿下一个offer应该不成问题。
1、会问你科班基础: 操作系统知识, 数据库原理、数据结构、以及软件工程相关的测试, 流程之类知识。
2、会问你java涉及到的基础知识: Java基础, 常见类库用法, 常见类的区别, 优点和缺点。
3、会问你一般问题的解决方法: 如登录流程, 数据库不重名的方法, 文件读取或者处理的方法。这些都是平时应该积累的。
4、会问你一些算法的定义和区别, 可以参考一下:hihocoder.com/problemset
5、阐述问题的时候,尽量不要教科书式, 白话形式。
6、数据库方面:关系数据库各个范式的目的, 主键,索引,规则,PS,triger这些也要了解下用法。
7、能用常见BS框架做过小东西:ssh,ssi等, 能说出mvc,切面等内容。
8、记住: 不懂千万不要装懂乱说,态度要诚恳, 面试官看你求知欲强, 态度诚恳,也就喜欢和你聊下去, 就会有好印象。
9、面试过程不要有压力, 也不要为不能回答问题就担忧, 多面试总结也是提升自己的一种手段。
2021年很多公司都在问黑红树,数据结构与算法一定要看哦~
尚硅谷Java大厂面试题第3季,跳槽必刷题目+必扫技术盲点(周阳主讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Hy4y1B78T?
尚硅谷Java大厂面试题第2季,面试必刷,跳槽大厂神器_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV18b411M7xz?
尚硅谷经典Java面试题第一季(java面试精讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Eb411P7bP?
强烈推荐一个网站:
Java面试题-帮助你通过Java面试 (zwmst.com)
https://zwmst.com/
两年 java 的面试过程中遇到了很多挑战,也遇到了一些不谈技术的公司,从上面的面试题可以看出,目前对于 java 的要求越来越高,水涨船高,毕竟这个行业的人数越来越多,而保持自己的竞争力的唯一方法就是找对方向,不断学习,注意这里我提到的第一点是方向,然后才是学习。给自己制定一个职业规划,按照这个路线往前走,我其实还在想分布式微服务这块以后再深入学习,可是按照市场要求,现在已经刻不容缓了,一些技术架构比如:springcloud、duboo 都得保持学习,这样才能有竞争力!作为一名两年的 javaSir,你必须具备以下技能
阅读源码的能力,多用 Intelj idea 这个开发工具,而不是 eclipse。它是直接支持反编译 class 文件的,多读 jdk 源码,吸收优秀的源码并加以复用
做到能够手写常见的排序算法,比如快速排序和堆排序、冒泡排序、选择排序、二分查找这些都是必须的
对 java 的框架有很深入的认识,现在基本流行的 ssm 框架很多人都会,可是知道一些原理的人就不多了,得不断研究这些框架本身,它们都是经过无数次锤炼 出来的优秀框架
多用 redismongodb,传统的关系型数据库已经无法市场需求了,这些东西也是面试中的一部分,虽不是重点,但也是加分的选项
对于微服务和分布式,这个是有一定难度的,我在面试人人车的时候,一面很顺利,二面被技术总监给 pass 了,问题就是分布式不是特别熟悉!要想进入好的互联网公司,分布式和微服务是很必须的
当我刷到这条脉脉的时候,想到当年老板面试我的时候,拿多线程问题虐我时,想想当时太难了。
悄悄给大家看几道ucloud必问的面试题,测测能完美的回答几道呢?
1. 有没有一种一定能保证线程安全的代码写法?(偷偷告诉你,真的有!)
2. 多个线程如何保持A1B2C3等顺序交替输出?
3. synchronized volatile的CPU原语是如何实现的?
4. 无锁、偏向锁、轻量级锁、重量级锁有什么差别?
5. 如何正确的启动和停止一个线程?
6. 线程和纤程的区别的是什么?为什么纤程比较轻量级?
7. ThreadLocal有没有内存泄漏的问题?为什么?
8. 下列三种业务,应该如何使用线程池:
高并发、任务执行时间短
并发不高、任务执行时间长
并发高、业务执行时间长
网上搜罗一堆答案,各式各样,唉!!!
如果你平时只有CRUD的经验,不了解多线程与高并发,面对这样面试题,大概率一头雾水。
如果你真是这样,要想走到架构师的级别,不啃下高并发这块硬骨头是非常难的。
那么“高并发”到底该如何学呢?
不用害怕,我们为你精心准备了高并发专题课,带你将多线程的知识系统化,帮助你理解多线程在CPU层级的实现,以及这些实现如何一层一层的映射到那些上亿用户,千万QPS,百万TPS的系统。
怎么样,是不是超级酷?当然如果你还学的不过瘾的话,我们Java全栈课程也是相当充实的,还会你手把手进行大型互联网电商项目实战演练,让你充分将每个知识点融入实际的操作中。
课程主理人是知名院校教学总监吴刚老师,拥有数十年IT行业教学经验,曾任职大型互联网公司首席架构师,主导过多个高并发项目,其电商项目曾在双十一活动中承载过亿的浏览量和成交量。他的专业素养与实战经验将为课程注入丰富的趣味和营养!
课呱呱,爱她(IT)就上课呱呱,IT小白变专家,课呱呱能帮你实现!
理论上来说,两年工作经验的情况下,一般会问些基础知识,常用的开发框架,是不是碰到过一些问题,如何解决的,在之前开发的项目中是什么角色和负责什么,数据库的相关知识,这些一般都是从比较简单的基础问起,然后慢慢会提一些高级点的内容,如实作答就好,没接触过直接说就行了,没必要编。当然,也会问一些高级的问题,比如分布式等等这样的问题。这样的问题主要是看平时是否接触过,或者学习过。
一般都是考察基础知识,常用的框架是否熟悉,看看是不是可以直接上手做开发。新知识新理念是看下有没有学习的欲望和学习能力。
希望对你有帮助,谢谢。
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间。我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架。我相信其它公司招初级开发时,应该也照着这个标准来面的。
我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。
但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小。
作为面试官,我只能根据候选人的回答来决定面试结果。不过,与人方便自己方便,所以我在本文里,将通过一些常用的问题来介绍面试的准备技巧。大家在看后一定会感叹:只要方法得当,准备面试第一不难,第二用的时间也不会太多。
别让人感觉你只会山寨别人的代码
框架是重点,但别让人感觉你只会山寨别人的代码!在面试前,我会阅读简历以查看候选人在框架方面的项目经验,在候选人的项目介绍的环节,我也会着重关注候选人最近的框架经验,目前比较热门的是SSM。
不过,一般工作在5年内的候选人,大多仅仅是能“山寨”别人的代码,也就是说能在现有框架的基础上,照着别人写的流程,扩展出新的功能模块。比如要写个股票挂单的功能模块,是会模仿现有的下单流程,然后从前端到后端再到数据库,依样画葫芦写一遍,最多把功能相关的代码点改掉。
其实我们每个人都这样过来的,但在面试时,如果你仅仅表现出这样的能力,就和大多数人的水平差不多了,在这点就没法体现出你的优势了。
我们知道,如果单纯使用SSM框架,大多数项目都会有痛点。比如数据库性能差,或者业务模块比较复杂,并发量比较高,用Spring MVC里的Controller无法满足跳转的需求。所以我一般还会主动问:你除了依照现有框架写业务代码时,还做了哪些改动?
我听到的回答有:增加了Redis缓存,以避免频繁调用一些不变的数据。或者,在MyBitas的xml里,select语句where条件有isnull,即这个值有就增加一个where条件,对此,会对任何一个where增加一个不带isnull的查询条件,以免该语句当传入参数都是null时,做全表扫描。或者,干脆说,后端异步返回的数据量很大,时间很长,我在项目里就调大了异步返回的最大时间,或者对返回信息做了压缩处理,以增加网络传输性能。
对于这个问题,我不在乎听到什么回答,我只关心回答符不符逻辑。一般只要答对,我就会给出“在框架层面有自己的体会,有一定的了解”,否则,我就只会给出“只能在项目经理带领下编写框架代码,对框架本身了解不多”。
其实,在准备面试时,归纳框架里的要点并不难,我就不信所有人在做项目时一点积累也没,只要你说出来,可以说,这方面你就碾压了将近7成的竞争者。
单机版够用?适当了解些分布式
别单纯看单机版的框架,适当了解些分布式!此外,在描述项目里框架技术时,最好你再带些分布式的技术。下面我列些大家可以准备的分布式技术。
1、反向代理方面,nginx的基本配置,比如如何通过lua语言设置规则,如何设置session粘滞。如果可以,再看些nginx的底层,比如协议,集群设置,失效转移等。
2、远程调用dubbo方面,可以看下dubbo和zookeeper整合的知识点,再深一步,了解下dubbo底层的传输协议和序列化方式。
3、消息队列方面,可以看下kafka或任意一种组件的使用方式,简单点可以看下配置,工作组的设置,再深入点,可以看下Kafka集群,持久化的方式,以及发送消息是用长连接还是短拦截。
以上仅仅是用3个组件举例,大家还可以看下Redis缓存,日志框架,MyCAT分库分表等。准备的方式有两大类,第一是要会说怎么用,这比较简单,能通过配置文件搭建成一个功能模块即可,第二是可以适当读些底层代码,以此了解下协议,集群和失效转移之类的高级知识点。
如果能在面试中侃侃而谈分布式组件的底层,那么得到的评价就会比较好了,比如“深入了解框架底层”,或“框架经验丰富”,这样就算去面试架构师也行了,更何况是高级开发。
别就知道增删改查,得了解性能优化
数据库方面,别就知道增删改查,得了解性能优化!在实际项目里,大多数程序员用到的可能仅仅是增删改查,当我们用Mybatis时,这个情况更普遍。不过如果你面试时也这样表现,估计你的能力就和其它竞争者差不多了。
这方面,你可以准备如下的技能:
1、SQL高级方面,比如group by, having,左连接,子查询(带in),行转列等高级用法。
2、建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?
3、尤其是优化,你可以准备下如何通过执行计划查看SQL语句改进点的方式,或者其它能改善SQL性能的方式(比如建索引等)。
4、如果你感觉有能力,还可以准备些MySQL集群,MyCAT分库分表的技能。比如通过LVS+Keepalived实现MySQL负载均衡,MyCAT的配置方式。同样,如果可以,也看些相关的底层代码。
哪怕你在前三点表现一般,那么至少也能超越将近一般的候选人,尤其当你在SQL优化方面表现非常好,那么你在面试高级开发时,数据库层面一定是达标的,如果你连第四点也回答非常好,那么恭喜你,你在数据库方面的能力甚至达到了初级架构的级别。
围绕数据结构和性能优化准备面试题
Java核心方面,围绕数据结构和性能优化准备面试题!Java核心这块,网上的面试题很多,不过在此之外,大家还应当着重关注集合(即数据结构)和多线程并发这两块,在此基础上,大家可以准备些设计模式和虚拟机的说辞。
下面列些我一般会问的部分问题:
通过上述的问题点,我其实不仅仅停留在“会用”级别,比如我不会问如何在ArrayList里放元素。大家可以看到,上述问题包含了“多线程并发”,“JVM优化”,“数据结构对象底层代码”等细节,大家也可以举一反三,通过看一些高级知识,多准备些其它类似面试题。
我们知道,目前Java开发是以Web框架为主,那么为什么还要问Java核心知识点呢?我这个是有切身体会的。
之前在我团队里,我见过两个人,一个是就会干活,具体表现是会用Java核心基本的API,而且也没有深入了解的意愿(估计不知道该怎么深入了解),另一位平时专门会看些Java并发,虚拟机等的高级知识。过了半年以后,后者的能力快速升级到高级开发,由于对JAVA核心知识点了解很透彻,所以看一些分布式组件的底层实现没什么大问题。而前者,一直在重复劳动,能力也只一直停留在“会干活”的层面。
而在现实的面试中,如果不熟悉Java核心知识点,估计升高级开发都难,更别说是面试架构师级别的岗位了。
至少了解如何看日志排查问题
Linux方面,至少了解如何看日志排查问题!如果候选人能证明自己有“排查问题”和“解决问题”的能力,这绝对是个加分项,但怎么证明?
目前大多数的互联网项目,都是部署在Linux上,也就是说,日志都是在Linux,下面归纳些实际的Linux操作。
1、能通过less命令打开文件,通过Shift+G到达文件底部,再通过?+关键字的方式来根据关键来搜索信息。
2、能通过grep的方式查关键字,具体用法是, grep 关键字 文件名,如果要两次在结果里查找的话,就用grep 关键字1 文件名 | 关键字2 --color。最后--color是高亮关键字。
3、能通过vi来编辑文件。
4、能通过chmod来设置文件的权限。
当然,还有更多更实用的Linux命令,但在实际面试过程中,不少候选人连一条linux命令也不知道。还是这句话,你哪怕知道些很基本的,也比一般人强了。
通读一段底层代码,作为加分项
如何证明自己对一个知识点非常了解?莫过于能通过底层代码来说明。我在和不少工作经验在5年之内的程序员沟通时,不少人认为这很难?确实,如果要通过阅读底层代码了解分布式组件,那难度不小,但如果如下部分的底层代码,并不难懂。
1、ArrayList,LinkedList的底层代码里,包含着基于数组和链表的实现方式,如果大家能以此讲清楚扩容,“通过枚举器遍历“等方式,绝对能证明自己。
2、HashMap直接对应着Hash表这个数据结构,在HashMap的底层代码里,包含着hashcode的put,get等的操作,甚至在ConcurrentHashMap里,还包含着Lock的逻辑。我相信,如果大家在面试中,看看而言ConcurrentHashMap,再结合在纸上边说边画,那一定能征服面试官。
3、可以看下静态代理和动态代理的实现方式,再深入一下,可以看下Spring AOP里的实现代码。
4、或许Spirng IOC和MVC的底层实现代码比较难看懂,但大家可以说些关键的类,根据关键流程说下它们的实现方式。
其实准备的底层代码未必要多,而且也不限于在哪个方面,比如集合里基于红黑树的TreeSet,基于NIO的开源框架,甚至分布式组件的Dubbo,都可以准备。而且准备时未必要背出所有的底层(事实上很难做到),你只要能结合一些重要的类和方法,讲清楚思路即可(比如讲清楚HashMap如何通过hashCode快速定位)。
那么在面试时,如何找到个好机会说出你准备好的上述底层代码?在面试时,总会被问到集合,Spring MVC框架等相关知识点,你在回答时,顺便说一句,“我还了解这块的底层实现”,那么面试官一定会追问,那么你就可以说出来了。
不要小看这个对候选人的帮助,一旦你讲了,只要意思到位,那么最少能得到个“肯积极专业“的评价,如果描述很清楚,那么评价就会升级到“熟悉Java核心技能(或Spring MVC),且基本功扎实”。要知道,面试中,很少有人能讲清楚底层代码,所以你抛出了这个话题,哪怕最后没达到预期效果,面试官也不会由此对你降低评价。所以说,准备这块绝对是“有百利而无一害”的挣钱买卖。
把上述技能嵌入到你做过的项目里
一切的一切,把上述技能嵌入到你做过的项目里!在面试过程中,我经常会听到一些比较遗憾的回答,比如候选人对SQL优化技能讲得头头是道,但最后得知,这是他平时自学时掌握的,并没用在实际项目里。
当然这总比不说要好,所以我会写下“在平时自学过SQL优化技能”,但如果在项目里实践过,那么我就会写下“有实际数据库SQL优化的技能”。大家可以对比下两者的差别,一个是偏重理论,一个是直接能干活了。其实,很多场景里,我就不信在实际项目里一定没有实践过SQL优化技能。
从这个案例中,我想告诉大家的是,你之前费了千辛万苦(其实方法方向得到,也不用费太大精力)准备的很多技能和说辞,最后应该落实到你的实际项目里。
比如你有过在Linux日志里查询关键字排查问题的经验,在描述时你可以带一句,在之前的项目里我就这样干的。又如,你通过看底层代码,了解了TreeSet和HashSet的差别以及它们的适用范围,那么你就可以回想下你之前做的项目,是否有个场景仅仅适用于TreeSet?如果有,那么你就可以适当描述下项目的需求,然后说,通过读底层代码,我了解了两者的差别,而且在这个实际需求里,我就用了TreeSet,而且我还专门做了对比性试验,发现用TreeSet比HashSet要高xx个百分点。
请记得,“实践经验”一定比“理论经验”值钱,而且大多数你知道的理论上的经验,一定在你的项目里用过。所以,如果你仅仅让面试官感觉你只有“理论经验”,那就太亏了。
这里根据自身的实际经历,整理了一份面试这些大厂的2020-2021 最新整理的 Java 面试题,希望能帮助到大家查漏补缺,攻克面试难关。
题库非常全面,包括 Java 集合、JVM、多线程、Spring全家桶、Redis、Dubbo、Netty、Elasticsearch、ucloud巴巴等大厂面试题等。
部分面试题预览内容如下:
关注「java锦囊」,回复「面试」获取。
正在动力节点学Java中..不过马上也该刷面试题了,老师给我们解释讲解了许多,还听有经验的学长讲了很多,大概都有这些:
1)集合相关问题(必问):
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。
HashMap和Hashtable的区别。
ArrayList、LinkedList、Vector的区别。
HashMap和ConcurrentHashMap的区别。
HashMap和LinkedHashMap的区别。
2)多线程并发相关问题(必问):
创建线程的3种方式。
什么是线程安全。
Runnable接口和Callable接口的区别。
wait方法和sleep方法的区别。
synchronized、Lock、ReentrantLock、ReadWriteLock。
介绍下CAS(无锁技术)。
3)JVM相关问题:
介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
垃圾收集有哪些算法,各自的特点。
类加载的过程。
双亲委派模型。
有哪些类加载器。
能不能自己写一个类叫java.lang.String。
4)设计模式相关问题(必问):
先问你熟悉哪些设计模式
然后再具体问你某个设计模式具体实现和相关扩展问题。
5)数据库相关问题,针对Mysql(必问):
给题目让你手写SQL。
有没有SQL优化经验。
Mysql索引的数据结构。
SQL怎么进行优化。
SQL关键字的执行顺序。
有哪几种索引。
6)框架相关问题:
Hibernate和Mybatis的区别。
Spring MVC和Struts2的区别。
Spring用了哪些设计模式。
Spring中AOP主要用来做什么。
Spring注入bean的方式。
什么是IOC,什么是依赖注入。
Spring是单例还是多例,怎么修改。
Spring事务隔离级别和传播性。
介绍下Mybatis/Hibernate的缓存机制。
Mybatis的mapper文件中#和$的区别。
Mybatis的mapper文件中resultType和resultMap的区别。
Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的,其内部是怎么实现的。
7)可能会遇到问题:
介绍下栈和队列。
IO和NIO的区别。
介绍下B树、二叉树。
接口和抽象类的区别。
int和Integer的自动拆箱/装箱相关问题。
xml全称是什么。
常量池相关问题。
==和equals的区别。
重载和重写的区别。
String和StringBuilder、StringBuffer的区别。
静态变量、实例变量、局部变量线程安全吗,为什么。
常用的linux命令。
try、catch、finally都有return语句时执行哪个。
ajax的4个字母分别是什么意思。
分布式锁的实现。
分布式session存储解决方案。
我自己是小白,不考java吃饭,但是也有在学,也看了一些前人的经验之谈,Java毕竟功能强大,所以岗位细分相对来讲也比较多,看自己主要是从事哪一块的吧,比方说是架构师的话肯定会问一些架构相关的问题,还有就是一些算法,排序啊之类的。
????????????????????????????????????????????????????????????????????????
我就是觉得很有意思,才接触这块的,也没打算用这个找工作
讲点大众的,你也知道的。
1、自我介绍
2、项目经验、工作履历
3、Java高级的内容,这点我不是很清楚了。
4、有没有blog,github上有没有代码等等
祝楼主一切顺利~~
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答3
回答