面试常见问题(java)

面试问题总结

1. 4种线程池

链接

2. 乐观锁和悲观锁

链接

3. sleep()和wait()方法的异同

  1. 这两个方法来自不同的类,sleep来自Thread类,wait来自Object类

4. 单点登录的实现方法

链接

  1. 用户访问A系统,A系统是需要登录的,但用户现在没有登录。
  2. 跳转到SSO登录系统, SSO系统也没有登录,弹出用户登录页。
  3. 用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器中写入SSO域下的Cookie。
  4. SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到A系统,同时将ST作为参数传递给app系统。
  5. A系统拿到ST后,向SSO发送请求,验证ST是否有效。
  6. 验证通过后,A系统将登录状态写入session并设置app域下的Cookie。
    有人问:如果A系统拿到ST后,不去向SSO验证ST是否有效,直接将用户信息返回A系统,并登录可以吗?
    答: 不行,因为如果我在SSO没有登录,而是直接在浏览器中敲入回调的地址,并带上伪造的用户信息,A系统没办法确认ST是否正确,这样登录就是不安全的。

5. 5种索引类型

索引类型链接
mysql的4种索引链接

  1. 唯一索引
  2. 主键索引
  3. 组合索引
  4. 全文索引
  5. 普通索引

6. mybatis常用标签

7. 内连接、左外连接、右外连接的区别

#左连接
SELECT
  c.cno,c.cname,t.tno,t.tname
FROM
(SELECT tno,tname FROM teachers) t
LEFT JOIN
(SELECT tno,cno,cname FROM courses) c
ON t.tno=c.tno;

#内连接
SELECT
  c.cno,c.cname,t.tno,t.tname
FROM
(SELECT tno,tname FROM teachers) t
INNER JOIN
(SELECT tno,cno,cname FROM courses) c
ON t.tno=c.tno;

#右连接
SELECT
  c.cno,c.cname,t.tno,t.tname
FROM
(SELECT tno,tname FROM teachers) t
RIGHT JOIN
(SELECT tno,cno,cname FROM courses) c
ON t.tno=c.tno;

内连接就只展示两边都出现的数据;
左连接以左表为主,所以尽管“陈子枢”老师在右表中没有,它也列出来了,只是,其他相关课程的字段为null;
右连接以右表为主,右表的都出现,右表没有“陈子枢”,所以右连接时,就不显示“陈子枢”老师的信息。
在这里插入图片描述

8. mysql执行计划

explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。
链接
链接2

9. map源码、List源码

链接

10. 设计模式

11. 压力测试性能指标分析

链接

12. jvm运行时内存结构和调优

13.springmvc 执行流程

  1. 用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
  2. 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
  3. DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
  4. HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
  5. Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
  6. HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
  7. DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
  8. ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
  9. DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
  10. 视图负责将结果显示到浏览器(客户端)。

14. SQL优化

  1. 尽量避免在字段开头模糊查询(name like ‘%伟%’),会导致数据库引擎放弃索引进行全表扫描。(优化方式:如果需求是要在前面使用模糊查询,使用FullText全文索引或引入ElasticSearch)
  2. in 和 not in 也要慎用,否则会导致数据库引擎放弃索引进行全表扫描(优化方式:对于连续的数值,使用 between代替)
  3. 尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描(优化方式:使用union all代替)
  4. 尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描(优化方式:可以给字段添加默认值0,对0值进行判断)
  5. 查询条件不能用 <> 或者 !=,否则会导致数据库引擎放弃索引进行全表扫描
  6. 尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  7. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
  8. 索引并不是越多越好,因为 insert 或 update 时有可能会重建索引,一个表的索引数最好不要超过6个
  9. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

15. 网络7层模型 && TCP3握手4挥手流程

链接1
链接2
链接3

16. 事务、分布式事务

链接

17. 接口幂等性

链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值