0
点赞
收藏
分享

微信扫一扫

【2月2日刷题笔记】

ZMXQQ233 2022-02-02 阅读 56

目录

1.Servlet 生命周期

2.转发和重定向

3.lee _62 :不同路径

4.lee _120:三角形最小路径和

官方解答

自己的解答


晴天 今天吃了火锅

1.Servlet 生命周期

关于Servlet生命周期说法错误的是

Servlet容器根据Servlet;类的位置加载Servlet类,成功加载后,由容器创建Servlet的实例

对于每一个Servlet实例,init() 方法只被调用一次。

当Servlet容器接收到客户端的请求时,调用Servlet 的Service()方法以及destory()方法处理客户端的请求

Servlet的实例是由servlet 容器创建的 ,所以实例销毁也是容器完成的

题解:
客户端的每次请求,都会根据路径查找对应的Servlet实例对象,并调用service方法
init和destroy 分别是初始化和销毁,只执行一次。

Servlet的生命周期 就是从Servlet出现到销毁的全过程。主要分为以下的阶段:

加载类——实例化对象——初始化(为对象的属性赋值)——请求处理(服务阶段)——销毁

服务器启动的时或者第一次请求Servlet时,就会初始化一个 Servlet对象,也就是会执行初始化方法,该Servlet对象去处理所有的客户端请求,最后关闭服务器的时候,才会销毁这个Servlet对象,执行destroy()方法。

2.转发和重定向

请求转发:

request.getRequestDispatcher().forward();

是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取出来,然后把这个内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转的过程是在服务器实现的,并不是在客户端实现的,所以客户端并不知道这个跳转的动作,所以地址还是原来的地址。

重定向

response.sendRedirect();

是服务器根据逻辑,发送一个状态吗码,告诉浏览器去重新请求那个地址,所以地址栏显示的是新的URL;

关于二者的区别:

请求转发和重定向都可以实现访问一个资源时转向当前应用资源;
请求转发是一次请求一次响应,而重定向为两次请求两次响应;
一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器的压力
请求转发地址栏没有变化,如果需要改变浏览器的地址栏或者更改浏览的刷新按钮的功能时需要使用重定向。
请求转发是在服务器端完成的,重定向是在客户端发生的;
请求转发的速度快,重定向速度慢;
请求转发必须在同一台服务器上完成,重定向可以在不同的服务器下完成。

题:关于转发和重定向的说法错误的是

转发通过request的getRequestDispatcher().foreard()方法即可实现,它的作用是在多个页面交互过程中实现请求数据的共享。

重定向可以理解为浏览器至少提交了两次请求,它是在客户端发挥作用,通过请求新的地址实现页面转向

转发和重定向都可以共享request范围内的数据

转发时客户端的URL地址不会发生改变,而重定向时客户端浏览器中显示新的URL地址。

题解:

转发时一次请求返回,可以共享本次请求的数据
重定向时两次请求,不能在通过request共享数据,如果要共享数据,可以使用session

3.lee _62 :不同路径

个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
​
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
​
问总共有多少条不同的路径?
​
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int uniquePaths(int m, int n) {
       int[][] rang = new int[n][m];
       // 初始化 两边概率都为1的数字
        for (int i = 0; i < n; ++i) {
            rang[i][0] =1 ;
        }
        //
        for (int i = 0; i < m; ++i) {
            rang[0][i] = 1;
        }
        //从上到下进行遍历
​
        for (int i = 1; i < n; i++) {// 此时的数字从1开始 ,因为之前的数字都已经被定义过了 再次定义会发生冲突。
            for (int j = 1; j < m; j++) {
                rang[i][j] = rang[i-1][j] + rang [i][j-1];
​
            }
        }
        return rang[n-1][m-1];
​
    }
}

4.lee _120:三角形最小路径和

官方解答

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        int n = triangle.size();
        int[][] f = new int[n][n];
        f[0][0] = triangle.get(0).get(0);
        for (int i = 1; i < n; ++i) {
            f[i][0] = f[i - 1][0] + triangle.get(i).get(0);
            for (int j = 1; j < i; ++j) {
                f[i][j] = Math.min(f[i - 1][j - 1], f[i - 1][j]) + triangle.get(i).get(j);
            }
            f[i][i] = f[i - 1][i - 1] + triangle.get(i).get(i);
        }
        int minTotal = f[n - 1][0];
        for (int i = 1; i < n; ++i) {
            minTotal = Math.min(minTotal, f[n - 1][i]);
        }
        return minTotal;
    }
}
​
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/triangle/solution/san-jiao-xing-zui-xiao-lu-jing-he-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

自己的解答

class Solution {
   public int minimumTotal(List<List<Integer>> triangle) {
        if (triangle.size() == 1) return triangle.get(0).get(0);
        int n = triangle.size();
        //定义二维数组 用于保存每个位置的最小路径的和
        int [][] t = new int[n][n];
        t[0][0] = triangle.get(0).get(0);
        // 一行一行的进行计算
        for (int i = 1; i < n; i++) {
            // 得到每一行的集合 定义每一行的值
            List<Integer> row = triangle.get(i);
            //对于上述的每一行的没有意义的值进行排除  根据动态规划来看
            t[i][0] = t[i-1][0] + row.get(0);
            for (int j = 1; j < i ; j++) {
                t[i][j] = Math.min(t[i-1][j],t[i-1][j-1])+ row.get(j);
            }
            t[i][i] = t[i-1][i-1] + row.get(i);
            
           /* for (int j = 0; j <= i; j++) {
                // 当j为0的时候,在第i行的最左侧时,我们只能从第i-1行的最左侧移动过来。
                if (j == 0){
                    t[i][j] = t[i-1][j] + row.get(j);// 加上自己本身。
                }else if (j == i){
                    t[i][j] = t[i-1][j-1] + row.get(j);
                }else {
                    //排除完所有的特殊情况之后
                    t[i][j] = Math.min(t[i-1][j],t[i-1][j-1])+ row.get(j);
                }
            }*/
        }
        // 此时已经求得每个位置的最小路径和,找出最后一行的最小路径和
        int min = t[n-1][0];
        for (int i = 0; i < n; i++) {
            min = Math.min(min,t[n-1][i]);
        }
        return min;
    }
}
举报

相关推荐

【2月6日 刷题笔记】

【2月1日的刷题笔记】

刷题笔记2

3月2日学习笔记

2月17日总结

2月10日练习

0 条评论