后端训练营学习报告

 一、数据库与SQL学习

        1.1学习心得

                目前我们使用最多的依然是关系数据库,因此我们学习的就是关系数据库中的mysql还有数据库管理工具navicat。首先学习到的便是sql的基础知识,即sql语句。当然这些最基础的东西的学习,大部分都是背诵与理解的内容,不需要过多的在乎,因为当你真正的写起来的时候,这些东西都是可以去查到的,你只需要知道做的思路即可。

                那么做的思路从那里来呢?没错,就是数据库设计,其中最重要的就是E-R图的绘制以及其转化为关系模型的具体方法。可以说,只要学会了E-R图的绘制以及其转换为关系模型的方法,你就可以设计出一个错误很少、实用性很高的关系数据库。当然,前面对于实体的分析总结等也十分重要。

                数据库还有一个很重要的问题,那就是安全性,毕竟数据库中存储的信息在有很多都是不能公开的,如果数据库的安全性不够高,那么就会很容易的造成严重后果。在培训过程中,主讲人就讲过一个现实中存在的安全性风险问题,那就是sql注入攻击:SQL注入攻击指的是通过构建特殊的输入作为参数传入应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是给后端程序分配的数据库账户没有进行权限限制或者在后端直接采用字符串拼接的方式产生了SQL语句,没有对用户的输入做检查,致使非法数据侵入系统。当然如今的SQL注入已经不再变得那么容易,这得益于各种ORM框架的出现。

                数据库系统的查询优化也是很重要的,它可以大幅提高数据库的性能。当然一般情况下,数据库系统都会自己提供代数优化的手段,而我们可以做的,就是在物理优化上下功夫。其中可以一说的就是索引的设置。

                数据库也会有并发操作带来的各种问题,包括不可重复读、读脏数据、更新丢失、幻读等问题。当然应对这些问题,我们可以利用锁去解决。

        1.2技术分享

                ①:E-R的画法非常简单,就是找实体和实体与实体的关系(实体的属性可以后加),并将他们完整的联系起来。实体就是你从需求中提取出来的一个对人、事 的抽象,他们往往非常好找,比如员工、学生、订单之类的,这些往往能够直接拉出来作为一个关系模式,但是由于他们与其他实体的关系不同,最后他们的属性组可能会与他们原始的属性组有所差别。非常好理解的是,实体与实体之间有三种不同的关系,分别是一对一、一对多、多对多。这三种关系处理的方式也会有一定的区别。

                一对一的关系,处理起来比较简单,无需将其视为一个关系模式,只需要把两边的主码放到这两个实体的属性组中就可以简单表示。

                一对多的关系,大部分情况下都会把一的那边实体的主码放到多的实体的属性组去,但是有时这个一对多的关系(注意是这个关系)可能也会有属性,这时候就要单独把这个关系拿出作为一个关系模式,以两边的主码为外键,两边主码的组合为该关系的主码,然后把关系的属性当作该关系模式的一个属性。

                多对多的关系,就需要跟上面的讲的差不多,直接拿出来作为一个新的关系模式即可。

                ②:索引并不是一定能够带来数据库性能的提升,合适的添加索引才能提高数据库的性能。一般来说,这样的列比较适合添加索引:

需要经常where的列、需要join连表的列、需要排序的列、需要group by的列。

                ③:锁比较常用总共有两种,分别是排他锁跟读写锁。

排他锁:引入锁之后就可以支持并发处理事务,如果事务之间涉及到相同的数据项时,会使用排他锁,或叫互斥锁,先进入的事务独占数据项以后,其他事务被阻塞,等待前面的事务释放锁。

读写锁: 读写锁就是进一步细化锁的颗粒度,区分读操作和写操作,让读和读之间不加锁,而其他操作之间加锁,这样下面的两个事务就可以同时被执行了。

当然除了锁,还可以使用MVCC的方法进行并发控制。

二、Java高级特性学习

        1.1学习心得

                maven这个项目管理工具真的非常好用,他简化了添加jar包的过程,自动导入相关依赖包,节省了寻找jar包的时间,让开发者更专注于编程。

                目前来说,JDBC已经用的不是很多了,但是对于JDBC的学习还是应该要有的。JAVA的多线程是一个很常用的东西,我想应该不用特别赘述,但是其中的线程池还是挺有意思的。

                Java8中添加的Stream对数据处理非常有用,它可以让程序员以声明式的方式处理数据集合——使其更简洁,更易读。

                注释与反射也是一个非常有用的东西,注释大家应该都知道,比如@override这种。注释共包含三种类型:元注释、标准注释、自定义注释。而反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作。注释与反射可以实现动态创建对象和编译,体现出很大的灵活性;可以对程序做出解释,方便其他程序(比如编译器)读取;可以通过反射机制编程实现对元数据的访问。

        1.2技术分享

                ①一般来说,maven中常用的命令如下:

                clean:

                package:打成Jar or War包,会自动进行clean+compile

                install:将本地工程Jar上传到本地仓库

                deploy:上传到私服

                 scope依赖范围:compile:默认的scope,运行期有效,需要打入包中;provided:编译期有效,运行期不需要提供,不会打入包中;runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离);test:测试需要,不会打入包中;system:非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)

                ②线程池:线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,使用完毕不需要销毁线程而是放回池中,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用、控制最大并发数、管理线程。下面是它的定义

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) 

                ③Stream:其中的各类方法还是挺多的,这里挑一个最常用的表示一下,其他的其实都是类似的使用方法。

ForEach

    static void test() {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(2);
        list.forEach(System.out::println);
    }

                ④注释与反射:三种注解中,元注解是专职负责注解其他注解,主要是标明该注解的使用范围,生效范围。我们是不能改变它的,只能用它来定义我们自定义的注解。标准注解一般不会自己使用。自定义注解就需要我们使用到元注解了。反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。下面是我的一个对注释与反射的实现:

@Retention(RetentionPolicy.RUNTIME) // 表示注解在运行时有效
@Target({ElementType.TYPE, ElementType.METHOD}) // 表示注解可以标记在类或方法上 
@Documented // 表示注解会被javadoc文档记录 
public @interface HelloWorld{// 注解没有属性 }

@HelloWorld // 标记在方法上
public void sayHello() {
    System.out.println("This is a test method.");
}

public static void main(String[] args) {
    // 使用反射技术来获取类和方法上的注解,并执行相应的行为
    try {
        Class<?> clazz = Class.forName("Test"); // 获取Test类的Class对象
        HelloWorld classAnnotation = clazz.getAnnotation(HelloWorld.class); // 获取类上的@HelloWorld注解
        if (classAnnotation != null) { // 如果存在该注解
            System.out.println("Hello World! This is " + clazz.getSimpleName() + " class."); // 打印出"Hello World!"和类名
        }
        Method method = clazz.getMethod("sayHello"); // 获取sayHello方法的Method对象
        HelloWorld methodAnnotation = method.getAnnotation(HelloWorld.class); // 获取方法上的@HelloWorld注解
        if (methodAnnotation != null) { // 如果存在该注解
            System.out.println("Hello World! This is " + method.getName() + " method."); // 打印出"Hello World!"和方法名
            method.invoke(clazz.newInstance()); // 调用该方法
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

三、Java SpringBoot学习

        学习心得 

                Spring,即Spring 框架,是一个分层的、 面向切面的Java应用程序的一站式轻量级解决方案,它是Spring生态的核心和基础,是为了解决企业级应用开发的复杂性而创建的。它有两大核心部分:IOC(Inverse of Control):译为控制反转”,AOP(Aspect Oriented Programming):译为面向切面编程”。目前Spring的体系结构由以下几部分组成:Core Container;AOPAspects、Instrumentation 和 Messaging;Data Access/Integration;Web;Test。这些概念都需要深入的去了解一下,当然更好的是能在使用中了解。Spring的项目结构即三层架构,在具体的方面,又有在其基础上发展的架构,例如MVC、SSM等。

                Spring Boot简化了新Spring应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。使用 Spring 创建 Web 程序时需要导入几个 Maven 依赖,而 Spring Boot 只需要一个 Maven 依赖来创建Web程序,并且Spring Boot 还把我们最常用的依赖都放到了一起,现在的我们只需要 spring-boot-starter-web 这一个依赖就可以完成一个简单的Web应用。之前用 Spring 的时候需要 XML 文件配置开启一些功能,现在 Spring Boot 不用 XML 配置了,只需要写一个配置类(@Configuration和继承对应的接口)就可以继续配置。

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

        学习心得

                前后端交互的基础是 HTTP 协议,它是一种无状态的、基于请求和响应的协议,规定了前端和后端之间的通信格式和规则。前后端交互的方式有多种,例如 AJAX ,Fetch ,Axios 等,它们都是基于 HTTP 协议的技术,用于实现异步的数据请求和响应。前后端交互的核心是接口,也就是后端提供给前端访问数据的 URL 和 HTTP 方法的组合。接口的设计需要遵循一些原则和规范,例如 RESTful 风格,使得接口清晰、统一、可扩展。学习接口的设计,需要了解接口的分类、命名、参数、返回值等内容,以及如何使用工具来测试和调试接口。前后端交互的目标是前端通过接口获取或提交的数据。数据通常是 JSON 或 XML 格式的,需要遵循一些规范和约定,使得数据结构合理、易于解析。学习数据的处理,需要了解数据的格式、转换、验证、渲染等内容,以及如何使用工具来查看和分析数据。

三、四两部分,我对其的理解还在门槛上,因此就不再写技术分享了。

本文为训练营结课作业

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值