给公司出的一套java后端面试题


0:都会哪些技术?如果是常用的技术就问接下来的1 2 3 4 5 6 7 8
如果是自己公司有自己的框架,并且技术较高,就问(★★★★☆)
框架启动的工作原理?框架启动时时怎么把哪些jar包、.class文件、xml配置文件加载进来的(类似spring),框架是怎么管理bean的

1:springmvc工作流程?(★★★)
(★★★)前端页面:一个/ .do 等请求,会被拦截,web.xml中的 DispatcherServlet,找到对应的controller层—>service层—>dao层,查数据库,然后dao层—>service层—>controller层—>前台页面
(★★★)dispatcherServlet:
controller层的技术:
(★★★)service层的技术:事物传播机制
dao层的技术:有没有做过读写分离?是如何实现的?
2:spring工作原理?(★★★)
(★★★★)说说项目启动中,spring是怎样工作的?
(★★★★)如果说不出来,可以引导 spring中xml文件中的是怎样注入的?
例子:

3:中间件
缓存用的是什么?redis memcache ? 现在比较流行的是redis

(★★★)Nginx:用过tomcat集群吗?用过ngin吗?toncat集群如何配置nginx权重?如何保障session共享的?
ps:(假如用户a登录第一次打到a tomcat则在a tomcat中有session,登录有请求服务,第二次打到b tomcat,b tomcat还没有session)
tomcat session共享可以解决,如果集群中tomcat较多会存在什么问题?你们项目中是怎么做的?一般回答就是redis,接下来就问redis

MQ用的是啥?activemq rocketmq rabbitmq kafka
(★★★★)MQ的模式:发布订阅模式 对于消费者而言获取消息有哪些方式?
1.Push方式:由消息中间件主动地将消息推送给消费者;缺点:如果消费者处理消息能力很弱,处理不了.ActiveMQ是怎么解决这个问题的(prefetch limit 规定了一次可以向消费者Push(推送)多少条消息,当推送消息的数量到达了perfetch limit规定的数值时,消费者还没有向消息中间件返回ACK,消息中间件将不再继续向消费者推送消息。)
2.Pull方式:由消费者主动向消息中间件拉取消息。
kafka了解吗
(★★★)kafka的topic和group了解吗?kafka的消息会消失吗?了解kafka的游标吗?kafka如果想重新从头获取消息该怎么做?kafka组内互斥组间共享(组:consumer group)
(★★★)RPC:dubbo + zookeeper
(★★★★)netty/mina?
1.如果要实现一个简单的聊天室项目,用netty怎么做,说说思路?
2.netty的粘包.拆包了解吗,是怎么解决的?netty客户端主动关闭是怎么做的?是不是每次都能关闭?有什么优化策略?
4:数据库
(★)项目中是如何写sql的(select u.username, u.password from user u;如果说 select * from user;就问他 * 这样写好不好,会有什么问题?)
(★)left join / right join /inner join/full join 的区别(a left join b 如果a表的数据量小)
(★★)statement 和 prepareStatement 的区别?mybatis中的${}和#{}一般用哪个?分别对应的是什么?
(★★★)哪些sql语句什么情况下会导致索引失效?(sql优化)
(★★★)什么是事物?事物四大特性?事物隔离级别有几种?分别说一说每种隔离级别都有哪些优缺点?
(★★★★☆)了解分布式事物吗?
ps:A(订单)系统处理完业务以后把消息发给MQ,返回给用户success,B(财务)系统,获取MQ中的消息进行下一步处理,如果A系统处理成功,B系统处理失败,这种情况下您是怎么做的?
1:A系统提供一个接口,如果B系统处理失败,则调用A系统的接口可以初步保障事务一致性。(假如B系统调用A系统的接口出异常怎么办?)
2:异常系统:B处理失败的订单号发往MQ,由异常系统统一处理,实在不行,人工处理.
(★★)mysql:说说乐观锁/悲观锁
(★★★☆)oracle:查询user表的第20-30行数据,说说怎么写sql?
(★★★)reids:redis基本数据类型?redis持久化策略?(★★★)哪些数据适合用缓存,举例说明?redis集群用的是啥?(★★★★)集群里面数据持久化策略是怎么配置的?(★★★★)LRU算法的原理?
(★★★★)redis缓存击穿(缓存雪崩)是什么?如何预防?
mongodb:
5:设计模式/多线程
(★★★)平时接触到的设计模式有哪些?单例模式会写吗?工厂模式?责任链模式?
(★★)创建线程有哪些方式?
(★★)线程可以start两次吗?
(★★★)线程如何停止?有哪些更优雅的停止线程的方式吗?比如 interrupt
(★★★)代码是如何加锁的?synchronized相对lock有哪些缺点?下面的代码多线程执行会有问题吗,怎么改进?
private int i = 0;
public int getCount () {
synchronized (new Object()) {
return i++;
}
}
说一说ThreadLocal?
6:jvm
(★★★★★)平时有没有接触到jvm?
(★★★★)tomcat怎么设置jvm参数?-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true 各个参数都是什么意思?
(★★★★)对类加载机制了解吗?说说双亲委托机制?tomcat源码的类加载机制是怎样的,为什么不遵循双亲委派机制,有什么优缺点?
(★★★★★)如果你写了一个java项目,防止别人反编译,有哪些好的办法,每个方法的优缺点?代码混淆/((★★★★))写自己的类加载器/(★★★★★)写自己的JVM(一般不用)
7:项目经验
(★★★☆)0:用到过单点登录吗?能说一说sso的工作原理吗?
(★★★☆)1:和外部对接项目时如何把第三方的数据导进自己项目的数据库,因为表名、字段名都不同,开发的时候应该怎么设计?
可以写一个.properties配置文件配置第三方字段名=自己项目字段名
ps:export = {“a.username”:“b.uname”, “a.passsword”:“b.pwd”},可以通过map把第三方的数据转换为自己系统对应的实体类,再插入数据库
(★★★☆)2:有两个List,怎么获取两个list的交集、并集、差集,说思路?
(★★★★)3:项目中是如何排查线上内存泄漏的?
8:算法和数据结构
(★★)1:排序会那些?可以写吗?
(★★★☆)2:输入一个String类型的num;设计一个算法返回一个String类型的returnNum,使得她满足下面的规律(returnNum为num最后一个数加1),我们知道String是很长的,所以不能用Stirng转int/integer来计算?
ps: num returnNum
“12345” “12346”
“12349” “12350”
“12456789864123567876543234567876” “12456789864123567876543234567877”
(★★★★)3:说一说(1:)排序的时间复杂度和空间复杂度,该算法还可以优化吗?

猜你喜欢

转载自blog.csdn.net/qq122716072/article/details/102783884