注1:以下为个人理解或结合个人使用情况的回答,不一定全面和正确。如果有更好的回答可以评论。
注2:回答不详细的以后有空填补,面试时主要是需要自己发挥。
1.springboot和springmvc的区别
springmvc是spring提供的用于web开发的mvc框架
springboot是对spring框架以及常用的第三方框架进行整合的快速开发工具
springboot对springmvc进行了配置上的简化,使用springboot就不需要springmvc的那一套配置,
springboot自动完成了springmvc的功能注入,但本质上还是走的springmvc的代码。
2.springboot接收到的请求是个对象,且对象中的属性名和实体中的属性名不一致怎么办
对象实体类中在对应字段增加@JsonProperty标签
@JsonProperty("myName")
private String acctName;
这样前台传myName就能解析到acctName字段,并且后台传给前台的返回中也是myName名称
实际测试时发现要使用@RequestBody
3.你的项目中登录时连接断开时间怎么设置
#单位s
server.session.timeout=10
4.说一下你的项目怎么集成amq的
https://blog.csdn.net/qq_39089503/article/details/87877379
5.springboot使用外部tomcat怎么配置
https://blog.csdn.net/qq_39089503/article/details/90343388
6.springboot返回页面的方法
非前后端分离项目中
(待补充)
1.返回静态页面
2.使用模板引擎
7.项目中登录时权限和菜单是如何设计的
目前项目中:
Account用户表,和角色多对一关系,和权限多对多关系
Auth权限表,和菜单多对一关系
Menu菜单表
Role角色表,和权限多对多关系,和用户一对多关系
用户可以直接使用角色的权限,也可以额外定制单独的权限
8.登录后用户信息怎么记录
使用redis缓存(待补充)
9.dubbo,mq的使用场景
dubbo:dubbo可以让外部接口像本地接口调用一样方便,使用dubbo可以获取实时数据,但是服务方挂了你的调用也挂了。
amq:为了多个系统之间保持数据的一致性,当A系统修改后异步通知其他系统;
当某个流程要异步操作几个模块时,可以使用amq进行通知调用,提高效率。
10.amq数据丢失了怎么办
amq有两种消息模式,一种是queue,一种是topic
对于queue,一般不会出现丢失情况,即使服务器崩溃了,只要消息没有消费掉也能够恢复,
如果真丢失,可能是发布消息后被其他服务消费掉了。
对于topic,如果发布一个消息,结果没有消费方,那么该topic会被抛弃丢失。
mq支持多种方式的数据存储,可以将消息归档以便查找或者重发。
目前项目中是使用oracle记录发送和接收的消息内容,自己写了重发功能。
11.arraylist线程安全怎么解决
使用vector
使用Collections.synchronizedList(new ArrayList<Map<String,Object>>());
使用concurrent包的CopyOnWriteArrayList
12.amq ack机制
在事务性会话中,当一个事务被提交的时候,ack确认自动发生;在非事务性会话中,消息何时被确认取决于创建会话时的应答模式;
一般创建mq session 使用自动签收(Session.AUTO_ACKNOWLEDGE),如果Session设置为CLIENT_ACKNOWLEDGE 时,消费方必须手动调用acknowledge方法才为消费成功,然后从队列里移除该条数据。
13.说下线程池,以及主要参数
java.util.concurrent.ThreadPoolExecutor
corePoolSize:线程池的大小,当前执行的线程数大于该值,线程会加入到缓冲队列
maximumPoolSize:线程池中创建的最大线程数,一般为corePoolsize+排队队列中允许的个数
keepAliveTime:空闲的线程多久时间后被销毁
workQueue:用来存储等待执行的任务,决定了线程池的排队策略
TimeUnit unit:代表keepAliveTime时间单位
14.git分支如何合并到master
git checkout -b fenzhi 创建并且换到分支(本地)
分支提交后(远端)
git checkout master 切换到主干
git merge fenzhi 合并分支代码
如果有冲突要手动解决,然后add commit push
没有冲突直接push
-----切换到分支
git push origin --delete fenzhi 删除远端分支
----切换到主干
git branch -d fenzhi 删除本地分支
15.谈一下你对mysql的索引的理解
转
这篇介绍的很详细,学习一下
16.对于后台,小程序开发和web开发的区别
暂等自己去实践
17.介绍下JVM垃圾回收算法有那几种
主要有四种:
标记-清除:从根集合出发,将所有活动对象及其子对象打上标记,然后对不存活的对象进行处理;缺点是标记和清除效率不高,会造成内存碎片
复制:将可用的内存空间分为大小相等的两块,每次只是用其中的一块,当这一块被用完的时候,就将还存活的对象复制到另一块中,然后把原使用过的内存空间一次性回收掉;缺点是内存空间利用率不高,存活对象非常多的时候,复制操作效率很低
标记-整理:在标记-清除算法的基础上,在回收时,将所有存活的对象都向一端移动,并更新对应的指针,这样解决了内存碎片的问题和复制算法得到缺点
分代收集:根据对象生存周期的不同将内存空间划分为不同的块,然后使用不同的回收算法。一般把Java堆分为新生代和老年代,新生代中对象的存活周期短,只有少量存活的对象,所以可以使用复制算法;而老年代中对象存活时间长,而且对象比较多,所以可以采用标记-清除和标记-整理算法;还有个持久代,用于存放静态文件,如Java类、方法等,持久代对垃圾回收没有显著影响,持久代也称方法区