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

mac2022-12-08  32


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:)排序的时间复杂度和空间复杂度,该算法还可以优化吗?

最新回复(0)