最后
这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)
创建一个包和Servlet
原理:从客户端向服务端发起请求,每次都要传递额外的键值对的数据method=“”,服务端获取到method对应的内容之后,通过判断不同的内容来调用不同的功能。
package cn.itzheng.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet implementation class ServletDemo01
*/
public class ServletDemo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取客户端提交服务端的method对应的值
String md = request.getParameter(“method”);
System.out.println(md);
//定义,功能执行完毕之后要转发的路径
String path = null;
// 通过判断md当中不同的内容来决定本次的功能
if (“addStu”.equals(md)) {
path = addStu(request, response);
} else if (“delStu”.equals(md)) {
path = delStu(request, response);
} else if (“checkStu”.equals(md)) {
path = checkStu(request, response);
} else if (“”.equals(md)) {
}
if (null != path) {
//服务端的一个转发
request.getRequestDispatcher(path).forward(request, response);
}
}
protected String addStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端添加学生”);
// 转发
return “/test.html”;
}
protected String delStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端删除学生”);
// 转发
return “/test.html”;
}
protected String checkStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端检查学生”);
// 转发
response.getWriter().println(“DDDDDDD”);//将DDDD发送到客户端
return null;
}
}
演示Servlet第二种获取到客户端的数据并对其进处理
再次新建一个index2.html
用户:
提交
按钮
再次新建一个ServletDemo02
采用反射的方式获取到不同的方法简化Servlet的复杂度
package cn.itzheng.servlet;
import java.io.IOException;
//引入method反射下面的包
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet implementation class ServletDemo02
*/
public class ServletDemo02 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取客户端提交服务端的method对应的值
String md = request.getParameter(“method”);
System.out.println(md);
// 定义,功能执行完毕之后要转发的路径
String path = null;
// 通过判断md当中不同的内容来决定本次的功能
// 获取到当前字节码对象(ServletDemo02.class在内存当中形成对象)
Class clazz = this.getClass();
try {
// 获取clazz上名称为md的方法(由传入的md来决定获取到那个方法)
Method method = clazz.getMethod(md, HttpServletRequest.class, HttpServletResponse.class);
if (null != method) {
//调用找到的方法
path = (String) method.invoke(this, request, response);// 执行当前(this)对象的方法
}
if (null != path) {
// 服务端的一个转发
request.getRequestDispatcher(path).forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String addStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端添加学生”);
// 转发
return “/test.html”;
}
public String delStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端删除学生”);
// 转发
return “/test.html”;
}
public String checkStu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(“向服务端检查学生”);
// 转发
response.getWriter().println(“DDDDDDD”);// 将DDDD发送到客户端
return null;
}
}
如果需要增加功能还需要该动代码所以需要抽取一个公共类
需要新建一个Servlet的公共类
BaseServlet
package cn.itzheng.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet {
// 重写HttpServletservice方法
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取客户端提交服务端的method对应的值
String md = request.getParameter(“method”);
System.out.println(md);
// 定义,功能执行完毕之后要转发的路径
String path = null;
// 通过判断md当中不同的内容来决定本次的功能
// 获取到当前字节码对象(ServletDemo02.class在内存当中形成对象)
Class clazz = this.getClass();
try {
// 获取clazz上名称为md的方法(由传入的md来决定获取到那个方法)
Method method = clazz.getMethod(md, HttpServletRequest.class, HttpServletResponse.class);
if (null != method) {
// 调用找到的方法
path = (String) method.invoke(this, request, response);// 执行当前(this)对象的方法
}
if (null != path) {
// 服务端的一个转发
request.getRequestDispatcher(path).forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
新建一个ServletDemo03用来继承BaseDemo
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
[外链图片转存中…(img-SQpCZHU5-1715287035516)]
[外链图片转存中…(img-FeNjUR4b-1715287035517)]