记得9月份秋招的时候和朋友说过一句话:如果不知道做什么的话就去面试吧,现在想起来当时的情景还是五味杂陈!更新一波梳理的百度(深圳)的Java后台面经(带答案),面经来源:https://www.nowcoder.com/discuss/124753 。
1. 使用过哪些linux命令?
基本指令:ls、mkdir、cd、touch、echo、cat、cp、mv、rm、find、grep、pwd、head、tail
系统管理:stat、who、whoami、top、ps、ifconfig、ping、netstat、man、kill
打包压缩:gzip、bzip2、tar
关机重启:shutdown、halt、reboot
编辑文件:vim
权限管理:chmod
2. 使用过哪些git命令?
git init、git clone、git status、git log、git add、git diff、git commit、git reset、git revert、git rm、git clean、git mv、git stash、git banch、git checkout、git merge、git tag、git remote、git fetch、git pull、git rebase、git push、git reflog
3. Java类加载机制(重点)
类的加载指的是将类的.class文件中的二进制数据读入到内存中,并将其存放在运行时数据区的方法区内。类的加载的最终产品是在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
类的加载过程包括加载、验证、准备、解析和初始化五个阶段。
类的加载是由类加载器来完成的,包括启动类加载器、扩展类加载器和应用程序类加载器。
双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上。因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。主要作用是为了防止内存中出现多份同样的字节码,保证Java程序安全稳定运行。
4. 数据库事务的四大特性
ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
5. MySQL索引与两种搜索引擎的区别(重点)
索引分类包括普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引、主键索引、组合索引。
MySQL主要有MyISAM和InnoDB两种存储引擎,主要区别有:
由此可见,MyISAM用于管理非事务表,主要提供高速存储、检索以及全文搜索能力,若在应用中需要执行大量的SELECT操作,应该选择MyISAM。而InnoDB用于事务处理,具有ACID事务支持等特性,若在应用中执行大量INSERT和UPDATE操作,应该选择InnoDB。
6. 了解哪些设计模式?
Java中的设计模式有23中,可准备几种使用过的或者框架中应用比较多的,如单例模式、工厂方法模式、抽象工厂模式、代理模式和策略模式等。
7. SQL优化
SQL优化的策略有很多,网上总结的有一大堆。面试时主要还是关注索引添加、使用关联查询替代子查询、查询语句不要使用*等,建议准备几种,并亲自操刀一下,面试时就可以把来龙去脉说的一清二楚。
8. 进程间通信方式
管道、命名管道(FIFO)、消息队列、共享内存、信号量、套接字和信号。
9. 拓扑排序
在图论中,拓扑排序是指用有向无环图中各个顶点所构成的有序序列。该序列必须满足如下条件:
注意:只有有向无环图才存在拓扑排序。
应用:某大学计算机专业必修课程以及这些课程之间的先后顺序关系图即为典型的有向无环图,可以进行拓扑排序。
实现:拓扑排序的最优算法是基于邻接表来实现的,具体实现过程暂且略过,后续单独来写。
10. 具体介绍一下SSM
SSM框架包括Spring+SpringMVC+Mybatis。
Spring是一个轻量级的容器框架,回答时主要答两点:控制反转(IoC)和面向切面编程(AOP),具体的使用和理解就需要自己下功夫来理解啦。
SpringMVC很好地实现了模型、视图和控制器的解耦,使用DispatchServlet来拦截请求,交给目标处理器类的相应方法来处理,处理完成后再返回给视图。
MyBatis是一个轻量级的基于Java的持久层框架,实现对象关系映射,将POJO映射为数据库中的记录。
11. 未来的发展规划
算是一个套路题吧,在和盘托出自己的规划前建议好好想一下企业所需要什么样的人。踏实做事,那就要表明自己在三到五年打算在当前的技术领域好好积累之类的决心,至于五年之后的规划就可以大概说一下想走技术路线还是管理路线,并补充说:毕竟五年之后自己各方面的成长和认知都会有质的提升,到时候可能还会根据实际情况进行调整等。
纯粹一家之言,欢迎补充。
1. 项目情况及项目中遇到的难题
这个没啥说的,简历中所涉及到的技术点都需要完全熟悉,而不是被问到的时候说这部分不是自己做的,因为简历中涉及到的基本都是必问题。项目中遇到的难题也务必准备一两个,描述清楚问题是什么原因产生的以及自己是怎么解决的。
2. MySQL索引与两种搜索引擎的区别
只能说这个问题很重要,具体见一面的第5题。
3. 介绍一下Java虚拟机(JVM)及垃圾回收(GC)
分模块来回答,包括JVM运行时数据区、Java内存模型、内存泄漏、垃圾回收、GC调优等。
强烈推荐《深入理解Java虚拟机:JVM高级特性与最佳实践》一书,这本书真的需要在面试准备阶段至少精读两遍,因为JVM是面试必问内容,公众号后台回复「电子书」即可获取电子版书籍资源。
4. 代码题
这部分就不拿具体的代码出来秀了,主要还是要有基本的算法思路,面试前主要刷《剑指Offer》和《程序员代码面试指南-IT名企算法与数据结构题目最优解》这两本书就足够打怪升级了,公众号后台回复「电子书」即可获取电子版书籍资源。
刚刚在回想关于未来的发展规划时,突然间想起了华为的佛系性格测评。我是八月中旬被邀请参加的武长区优招面试,面试前做了一次性格测评,傻傻地根据提示选择自己内心最真实的答案。面试完成之后,大概在九月初的时候,华为又给我发了一次性格测评说:测评系统未能成功生成您的在线测评结果,可能原因是未按内心真实情况进行选择,需要重新测评。结果当时真的是太年轻,打开测评继续按着自己的内心最真实的想法进行测评。测评结束后,脑子一转在网上发现华为性格测评居然有攻略,攻略推荐选择不愿当领导、愿意加班、遇事完全不焦虑等选项,果然还是年轻了一把,最终结果也可想而知。虽然面试结果挺不错的,面试官当场就说想要我去深圳那边去工作,还专门起来和我握手了,结果挂在性格测评上。
经验分享给大家,但愿各位在求职路上能被各大企业温柔以待!
Java名企面试吧,隔天10点24分,我们不见不散!
丙子先生的宗旨是,隔天以短篇幅讲高试题,不增加太多负担,但需要持之以恒。
能力有限,欢迎指教!