Web后端开发训练营之微总结

目录

1 前言

2 Web后端发展的现状与未来

3 数据库

3.1 多表查询

 3.2 多表联查的快速查询---索引查询

4 Java高级特性学习 

4.1Java线程池

4.2 Web后端开发---Java线程池

5 前后端交互与接口设计学习

5.1原理

5.2组成

5.3 应用

5.4 实际例子

6 总结


1 前言

        本人为一名大二生,专业为软件工程,因参与Web后端开发训练营,培训结束。分享心得体会与一些知识点,特记录该篇博客,如有不对的地方,还请大家指正。

2 Web后端发展的现状与未来

        相比于最开始网页出现的时代,人们已经不再满足于单纯地浏览网页信息, 其需要的是一种基于动态的具有多样性功能的HTML页面 。正是技术的快速发展与用户的多样化需求,使得后端的发展有多极化趋势。

        一些关键趋势正在影响Web后端的发展。例如,云计算的进程正在加快,一切皆服务。此外,Python、Go、Rust成为后端未来最先考虑学习编程语言。网络安全也是一个重要的话题,许多公司都在投入大量资金来加强网络安全。

        例如网络安全,Web后端开发人员在设计和开发Web应用程序时需要考虑安全性。这包括采取措施来防止常见的攻击,如SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。此外,开发人员还需要确保Web应用程序使用安全的加密协议来传输敏感数据,并且在存储敏感数据时使用适当的加密方法。

        SQL注入是一种常见的攻击方法,攻击者利用Web应用程序中的漏洞,向数据库发送恶意SQL代码,以获取敏感信息或执行其他恶意操作。为了防止SQL注入攻击,Web后端开发人员可以采取以下措施:

1. 使用参数化查询:参数化查询可以确保用户输入被正确处理,不会被解释为SQL代码的一部分。这可以有效防止SQL注入攻击。

2. 验证和清理用户输入:开发人员应该验证所有来自用户的输入,以确保它们符合预期的格式和类型。此外,开发人员还应该清理用户输入,以删除可能导致安全漏洞的字符。

3. 使用最小权限原则:数据库帐户应该只具有执行所需操作所需的最小权限。这样,即使攻击者成功进行SQL注入攻击,他们也无法执行未经授权的操作。

4. 定期更新和打补丁:开发人员应该定期更新Web应用程序中使用的库和框架,并及时打补丁以修复已知的安全漏洞。

3 数据库

        (以下语法,均在Navicat Premium 15.0.17中运行)        

3.1 多表查询

        即多表连接查询,指在一个查询语句中从多个表中检索数据。重点在于选择何种类型的连接操作,常用的连接操作:

嵌套循环法(耗时、无需条件)

排序合并法(最快、条件苛刻、理想化)

索引连接(最常用,效率优于嵌套循环,需条件) 

以下举例说明笛卡尔积等多表连接、嵌套循环法、索引连接:

笛卡尔积:

select distinct Sno,Sname,ClsNO from student,class;

      

等值连接---自然连接

区别:对于查询表,后者自动匹配相同的属性列进行数据连接,并且自动去除重复的属性列,只保留一个。但具体SQL语法规则,需根据DBMS的不同,使用不同的语法。

等值:

select Sno,ClsNO from student,class where student.CIsNO=class.ClsNO;

自然:

select Sno,ClsNO from student join class on(student.CIsNO=class.ClsNO);

 自身连接

自身连接需要为表“起别名”

select temp1.Sno from sc temp1,sc temp2 where temp1.Sno=temp2.Sno and temp1.Cno='0001' and temp2.Cno='0003';

 外连接(Outer join)

左外连接:left outer join

右外连接:right outer join

全外连接:full outer join

select student.Sno,Sname,ClsNO from student left join class on (student.CIsNO=class.ClsNO and ClsNO='CS01');

多表连接:

select student.Sno,class.ClsName,sc.Cno,sc.Grade from student,class,sc where student.Sno=sc.Sno and student.CIsNO=class.ClsNO;

 3.2 多表联查的快速查询---索引查询

        当数据量由几十条增加到几万条,连接查询的速度远远不如索引查询的速度。

        例如:有一张student表,其中有2W条记录,记录着2W个人的信息。有一个Sno的字段记录每个学生的学号,现在想要查询:当前大二生的信息,即21级,学号首4位为2021。

   如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到符合该要求的信息,并且继续遍历,直到遍历全部2W条记录为止。

   如果有了索引,那么会将该Sno字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。其中MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段,要知道其中详细是如何查找的,就需要会算法的知识了。我们现在只需要知道索引的作用,功能是什么就行。

创建索引:

CREATE INDEX idx_sname ON student (sname DESC);

 

4 Java高级特性学习 

4.1Java线程池

        一种用于管理和复用线程的机制,它提供了一种方便的方式来处理多线程任务。通过使用线程池,可以避免频繁创建和销毁线程的开销,提高程序的性能和资源利用率。

        线程池的原理是将一组预先创建的线程保存在池中,并在需要时重用这些线程来执行任务。线程池通常由两个主要组件组成:工作队列和线程管理器。工作队列用于存储待执行的任务,而线程管理器负责创建、启动、停止和监控线程池中的线程。

使用线程池的好处包括以下几点:

  1. 提高性能:线程池可以控制并发线程的数量,避免创建过多的线程导致系统资源耗尽,从而提高程序的性能。

  2. 提高资源利用率:线程池可以重用线程,避免频繁地创建和销毁线程,从而节省了系统资源。

  3. 提供线程管理和监控机制:线程池提供了一套管理和监控线程的机制,可以方便地管理线程的生命周期,并且可以监控线程池的运行状态。

下面是一个简单的Java线程池的示例代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建一个固定大小为5的线程池
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 提交任务给线程池
        for (int i = 0; i < 10; i++) {
            final int taskId = i;
            executor.execute(() -> {
                System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName());
                // 执行任务的逻辑代码
            });
        }

        // 关闭线程池
        executor.shutdown();
    }
}

        在上述代码中,首先通过Executors.newFixedThreadPool(5)创建一个固定大小为5的线程池。然后,使用executor.execute()方法向线程池提交任务。每个任务都会打印出任务ID和执行任务的线程名。最后,通过executor.shutdown()关闭线程池。

        线程池在实际应用中非常常见,特别是在需要处理大量并发任务的情况下。例如,在Web服务器中,可以使用线程池来处理接收到的客户端请求,以避免每个请求都创建一个新线程的开销。此外,线程池还可以在其他需要并发处理的场景中使用,如批量数据处理、多线程下载等。

4.2 Web后端开发---Java线程池

  1. 请求处理模块:Web服务器接收到客户端请求后,可以使用线程池来处理请求。每个请求可以在一个独立的线程中执行,从而提高服务器的并发处理能力。例如,当有多个客户端请求到达时,线程池可以管理和分配可用的线程来处理这些请求。

  2. 数据库访问模块:在与数据库进行交互的过程中,线程池可以用于处理数据库的读写操作。通过将数据库查询和更新任务提交给线程池,可以实现并发执行多个数据库操作,提高数据库访问的效率。例如,当多个客户端同时请求访问数据库时,线程池可以并发执行这些请求,从而减少响应时间。

  3. 异步任务模块:在Web开发中,有时需要执行一些耗时的操作,如发送电子邮件、生成报表等。这些操作可以通过线程池在后台异步执行,以避免阻塞主线程的执行。例如,当用户提交一个表单时,可以将发送邮件的任务提交给线程池,让线程池处理邮件发送,同时主线程可以继续响应用户的请求。

  4. 文件上传/下载模块:在处理文件上传和下载时,可以利用线程池来处理文件的读写操作。当有多个客户端同时上传或下载文件时,线程池可以管理并发执行这些操作,提高文件传输的效率。

  5. 缓存更新模块:在使用缓存提升系统性能时,线程池可以用于定期或异步更新缓存数据。通过将缓存更新任务提交给线程池,可以实现定时或异步地更新缓存,从而减少对数据库或其他外部资源的访问。

        以上是一些常见的应用场景,其中Java线程池在Web后端开发中扮演着重要的角色。它可以提高系统的并发处理能力、优化资源利用、提升用户体验和系统性能。

5 前后端交互与接口设计学习

前后端交互和接口设计是Web开发中非常重要的部分,它们涉及到前端和后端之间的数据传输和通信。下面我将介绍其原理、组成、应用以及给出一些实际例子

5.1原理

前后端交互是指前端(通常是浏览器)与后端服务器之间进行数据交流和通信的过程。前端通过发送请求,后端服务器接收请求并处理,然后返回响应给前端。这种通信通常是通过使用HTTP协议进行的,前端通过发送HTTP请求(如GET、POST等)向后端请求数据或提交数据,后端服务器接收请求并根据请求处理相应的逻辑,最后将响应数据返回给前端。

5.2组成

前后端交互和接口设计主要由以下几个组成部分构成:

  1. 客户端(前端):通常是用户在浏览器中运行的Web应用程序,负责向服务器发送请求并接收和展示响应数据。
  2. 服务器端(后端):接收来自客户端的请求并进行处理,根据业务逻辑生成响应数据。
  3. HTTP协议:作为前后端交互的基础协议,定义了请求和响应的格式和规则。

5.3 应用

 前后端交互和接口设计在Web开发中有广泛的应用,主要体现在以下几个方面:

  1. 数据获取和展示:前端通过发送HTTP请求获取后端的数据,并将数据展示给用户。例如,一个电子商务网站的前端页面通过发送请求获取商品信息,并将商品展示给用户。
  2. 用户注册和登录:前端通过发送注册和登录请求,后端验证用户信息,并返回相应的响应。例如,用户在前端页面输入用户名和密码后,前端将用户信息发送到后端进行验证。
  3. 表单提交和数据处理:前端通过发送表单数据的请求,后端接收并处理数据,进行相应的业务逻辑处理。例如,用户在前端填写一个订单表单,前端将订单数据发送到后端进行处理。
  4. 文件上传和下载:前端通过发送上传请求,后端接收上传文件并进行存储和处理。例如,用户在前端页面上传一个文件,前端将文件发送到后端进行保存。

5.4 实际例子

         以下是一个简单的实际例子,展示了前后端交互和接口设计的应用:

前端(HTML页面):

<form action="/login" method="POST">
  <label for="username">用户名:</label>
  <input type="text" id="username" name="username"><br><br>
  <label for="password">密码:</label>
  <input type="password" id="password" name="password"><br><br>
  <input type="submit" value="登录">
</form>

后端(Java Servlet):

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 后端处理逻辑,验证用户名和密码
        if (username.equals("admin") && password.equals("123456")) {
            response.setStatus(HttpServletResponse.SC_OK);
            response.getWriter().write("登录成功");
        } else {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            response.getWriter().write("用户名或密码错误");
        }
    }
}

        在上述示例中,前端通过HTML表单将用户名和密码发送到后端的/login接口。后端的LoginServlet接收到请求,从请求参数中获取用户名和密码,并进行验证。根据验证结果,后端返回相应的响应给前端。

6 总结

         数据库是用于存储数据的系统,它是服务端,也就是后端中的重要组成部分,服务端可以通过数据库检索和存储数据,以便向客户端,也就是前端Web页面提供数据。       

        JAVA的特点之一就是内置对多线程的支持。多线程使人产生多个任务在同时执行的错觉,因为目前的计算机的处理器在同一时刻只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器速度非常快,远远超过了人接受信息的速度。当JAVA的多线程技术与线程池技术应用与Web页面,用户的体验感将大幅上升。JAVA的平台无关性让JAVA成为编写网络应用程序的佼佼者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值