java mina 客户端_给公司出的一套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文件中的<bean>是怎样注入的?

例子:

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<User>,怎么获取两个list<User>的交集、并集、差集,说思路?

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

-----2019.05.28编写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值