总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
public void checkLoginParam(LoginRequest request){
if ("name".equals(request.getRequestType())){
// 姓名的检验逻辑
}else if ("age".equals(request.getRequestType())){
// 年龄的校验逻辑
}
//其他的校验逻辑...............
}
很容易发现 代码会随着后期校验逻辑的增加 越来越长,越复杂。耦合性很高,而且新增校验逻辑需要修改以前的代码判断分支,也违背了单一职责原则和开闭原则。
使用后的效果:
如何解决这个复杂校验逻辑,还能满足设计原则呢?
推荐使用 责任链模式,当然,责任链模式的实现方法很多
javax.servlet.Filter#doFilter 使用 过滤器数组 移动数组索引实现 调用下一个过滤器 (核心类 ApplicationFilterChain)
我先采用最简单的嵌套构造的方式来实现:
先看下类图,有个总体的认知
public abstract class LoginHandler {
protected LoginHandler handler;
public LoginHandler(LoginHandler handler){
this.handler = handler;
}
protected abstract void handlerLoginRequest(LoginRequest request);
}
具体的处理器类:
1. 年龄校验逻辑
public class LoginAgeHandler extends LoginHandler {
public LoginAgeHandler(LoginHandler handler){
super(handler);
}
@Override
protected void handlerLoginRequest(LoginRequest request) {
if (“age”.equals(request.getRequestType())){
System.out.println("LoginAgeHandler----》 " + request.getTaskName());
return;
}
if (null != handler){
handler.handlerLoginRequest(request);
}
}
}
2. 姓名校验逻辑:
public class LoginNameHandler extends LoginHandler {
public LoginNameHandler(LoginHandler handler){
super(handler);
}
/**
-
处理完成自己的逻辑后 判断是否需要交给下一个处理器来处理
-
@param request
*/
@Override
protected void handlerLoginRequest(LoginRequest request) {
if (“name”.equals(request.getRequestType())){
// query user from db, if exist execute next stop
System.out.println(“LoginNameHandler–》” + request.getTaskName());
}
// 交给下一个处理器处理 请求任务
if (null != handler){
handler.handlerLoginRequest(request);
}
}
}
待处理的任务类:
public class LoginRequest {
private String requestType;
private String taskName;
public LoginRequest(String requestType, String taskName) {
this.requestType = requestType;
this.taskName = taskName;
}
public String getRequestType() {
return requestType;
}
public String getTaskName() {
return taskName;
}
}
最后,我们做一下调用测试:
package com.cheri.designpattern.cases.action;
/**
-
嵌套过滤器,内部依次判断是否存在 执行过滤器
-
@author Aaron Du
-
@version V1.0
-
@date 2020/5/1 15:08
**/
public class Client {
public static void main(String[] args) {
Ending
Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下
如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)
吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。
不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。