Tailiruan의 방향에있는 학생들은 와서 볼 수 있습니다, 기말 고사를위한 몇 가지 팁

우리 방향의 귀염둥이가 최근에 시험을 본다고 들었어. 선배로서 ( 강조!) (가리키며) 시험에 대한 경험을 말씀 드리겠습니다 ~

** 사전공지 : 제 성적이 특별히 좋지 않고 제 경험이 도움이 되지 않을 수도 있으니 시간낭비 하시면 혼내지 말아주세요 :)

디자인 패턴:

우선 다음 내용은 요령이니 다 외우셔야 합니다! 둘째, 객관식 문제는 다음 내용을 통합한 다음 약간의 확장을 추가하여 고득점을 만들어야 하지만 단답형 문제는 다음 사항을 외우면 무적입니다. 큰 질문의 경우 모든 디자인 패턴을 잘 이해하고 있어야 하며 코드를 암기해야 만점을 받을 수 있습니다. 작년의 질문들을 찾아보고 느껴보는 것을 추천합니다.

단일 책임 원칙: 재사용성, 높은 응집력 및 낮은 결합도를 개선합니다.
개폐의 원리: 확장에는 개방, 변형에는 폐쇄. 유연성, 안정성, 추상화.
Liskov 대체 원칙: 상위 클래스는 하위 클래스로 대체될 수 있지만 그 반대는 불가능합니다. (추상화, 코드 재사용, 확장성)
종속 역전 원칙: 추상화 계층을 위한 프로그래밍. (추상)
인터페이스 분리 원칙: 여러 특수 인터페이스가 통합 인터페이스를 대체하고 불필요한 인터페이스에 의존하지 않습니다.
합성 재사용의 원칙: 더 많은 조합과 집계, 더 적은 상속. (다운 커플링)
Demeter의 법칙: 소프트웨어 엔터티는 다른 엔터티와 가능한 한 적게 상호 작용합니다. 직접적인 친구들과만 소통하세요. (느슨한 결합)

이름 정의 이점 결점 적용 가능한 환경 주목
심플 팩토리(정적 팩토리)(크리에이티브 타입) 매개변수에 따라 다른 클래스의 인스턴스를 반환합니다. OA 시스템 객체의 생성과 사용은 분리되어 있습니다. 구성 파일을 사용하면 시스템 유연성이 향상됩니다. 클라이언트는 제품 카테고리의 해당 매개변수만 알면 됩니다. 팩토리 클래스에는 너무 많은 책임이 있습니다. 스케일링이 어렵습니다. 시스템 복잡성과 이해의 어려움 증가. 팩토리 클래스는 더 적은 수의 객체를 생성해야 합니다. 생성 세부 사항에 신경 쓰지 마십시오. 단일 책임 원칙 다운 커플링 개폐 원칙
공장 방법 클래스의 인스턴스화는 하위 클래스로 지연되고 하위 클래스는 어떤 클래스를 인스턴스화(생성)할지 결정합니다. 나무꾼 구체적인 제품 클래스가 인스턴스화되는 클라이언트로부터 숨깁니다. 팩토리는 생성할 제품 개체를 독립적으로 결정합니다. 신제품 추가는 개방 폐쇄 원칙을 따릅니다. 클래스의 수가 쌍으로 증가하고 시스템의 복잡성이 증가합니다. 그것은 시스템의 추상화와 이해의 어려움을 증가시킵니다. 고객은 특정 제품 클래스의 클래스 이름을 모릅니다. 추상 팩토리 클래스는 하위 클래스를 통해 생성할 객체를 지정합니다. 개방형 폐쇄 원칙 확장성
추상 공장 구체적인 클래스를 지정하지 않고 일련의 관련되거나 상호 의존적인 개체를 만들기 위한 인터페이스를 제공합니다. 전기 공장, 데이터베이스 운영 공장 구체적인 클래스의 생성은 격리됩니다. 클라이언트는 항상 동일한 제품군 개체만 사용하도록 보장됩니다. 새로운 제품군을 추가하는 것이 편리하고 개폐 원칙을 준수합니다. 새로운 제품 수준 구조를 추가하는 것은 번거롭고 개폐 원칙을 위반합니다. 이 시스템은 제품 생성, 구성 및 표현 세부 사항에 의존하지 않습니다. 한 번에 하나의 제품군만 사용하고 모든 제품을 함께 사용하십시오. 제품 계층 구조가 안정적입니다. + 새로운 제품군, 일치하는 개폐. + 새로운 제품 클래스 구조, 개폐를 준수하지 않습니다.
빌더 빌더 동일한 구성이 다른 표현을 만들 수 있도록 복잡한 객체의 구성과 표현을 분리합니다. KFC 패키지, JavaMail 제품 자체는 제품 생성 프로세스에서 분리됩니다. 콘크리트 빌더 교체/추가는 개방형 폐쇄 원칙을 따릅니다. 제품 생성 프로세스를 보다 세밀하게 제어할 수 있습니다. 상품간 차이가 큰 경우 해당되지 않습니다. 제품의 복잡한 내부 변경으로 인해 보다 구체적인 구성 클래스가 필요하므로 시스템이 지나치게 커집니다. 생성해야 하는 제품은 내부 구조가 복잡하고 속성이 서로 의존적입니다. 객체 생성 프로세스는 객체를 생성하는 클래스와 독립적입니다.
프로토타입 모드 프로토타입 생성할 객체 유형을 나타내는 프로토타입 객체가 주어지면 이 프로토타입 객체를 복사하여 동일한 유형의 객체를 더 만듭니다. 얕은 복제, 깊은 복제(직렬화), 메일 복사. 개체 생성 프로세스를 단순화하고 새 인스턴스 생성의 효율성을 향상시킵니다. 구조 생성을 단순화하고 확장성이 좋습니다. 깊은 복제 방법은 개체 상태를 저장할 수 있습니다. (폐지) 각 클래스는 복제 방법을 갖추어야 합니다. 기존 클래스를 수정하려면 소스 코드를 수정하고 열고 닫는 원리를 변경해야 합니다. 딥 클론 코드는 복잡합니다. 새 개체를 만드는 데 비용이 많이 듭니다. 객체의 상태는 거의 변하지 않습니다. 계층적 팩토리 클래스를 사용하지 마십시오.
싱글톤 모드 싱글톤 클래스의 인스턴스가 하나만 있는지 확인하려면 자신을 인스턴스화하고 이 인스턴스를 전체 시스템에 제공하십시오. ID 카드, 인쇄 풀 고유한 인스턴스에 대한 제어된 액세스를 제공합니다. 시스템 리소스를 절약하고 성능을 향상시킵니다. 클래스의 여러 인스턴스가 허용됩니다. 스케일링이 어렵습니다. Singleton 클래스에는 너무 많은 책임이 있습니다. 자동 가비지 수집 메커니즘은 싱글톤 개체의 상태를 잃습니다. 하나의 객체만 생성이 필요/허용됩니다. 공용 액세스 지점은 하나만 허용됩니다.
어댑터 모드(구조적 유형) Adaptee 한 인터페이스를 클라이언트가 원하는 다른 인터페이스로 변환하여 호환되지 않는 인터페이스가 있는 클래스가 함께 작동할 수 있도록 합니다. 로봇 사칭, 암호화 어댑터 어댑터에서 대상 클래스를 분리하십시오. 클래스 투명성 및 재사용성 향상. 좋은 유연성과 확장성. 클래스 어댑터: 한 번에 하나의 어댑터 클래스만 조정됩니다. 대상 추상 클래스는 클래스가 아닌 인터페이스만 될 수 있습니다. 개체 어댑터: 어댑터 클래스의 일부 메서드를 교체하는 것은 번거로운 일입니다. 시스템은 일부 기존 클래스를 사용해야 하며 이러한 클래스의 인터페이스는 시스템의 요구 사항을 충족하지 않습니다. 재사용할 수 있는 클래스를 만듭니다.
브리지 모드 구현자 추상화는 구현과 부분적으로 분리되어 독립적으로 변경될 수 있습니다. 대형, 중형 및 소형 컬러 브러시, 크로스 플랫폼 비디오 플레이어 추상 인터페이스와 구현 부분의 분리. 다단계 상속 대신 하위 클래스 수를 줄입니다. 시스템의 확장성을 향상시킵니다. 시스템 이해 및 설계의 어려움을 높입니다. 시스템에서 독립적으로 변화하는 두 차원을 정확하게 식별하는 데 어려움이 있습니다. 추상화와 구체화 간의 유연성을 높입니다. 일부 독립적인 확장의 추상화 및 실현은 서로 영향을 미치지 않습니다. 상속을 사용하고 싶지 않습니다.
조합 모드잎 여러 개체가 결합되어 트리 구조를 형성하여 전체 계층 구조를 나타내며 단일 개체와 복합 개체의 사용이 일관됩니다. 과일 접시, 파일 탐색 계층적 차이를 무시하고 계층적 복합 개체를 정의합니다. 새 용량 구성 요소와 리프 구성 요소를 추가하는 것이 편리합니다. 객체 지향 트리 구조를 실현합니다. 추상화는 복잡하고 어렵습니다. 새 구성 요소를 추가할 때 컨테이너의 구성 요소 유형을 제한하기 어렵습니다. 클라이언트는 전체, 부분 계층 구조를 일관되게 처리해야 합니다. 개체 지향 개발 시스템에서 트리 구조를 처리합니다. 리프 및 컨테이너 개체는 시스템에서 분리할 수 있습니다.
데코레이터 모드 데코레이터 개체에 일부 추가 책임을 동적으로 추가합니다. 트랜스포머는 비행기, 로봇 및 다중 암호화 시스템으로 변신합니다. 상속보다 유연하며 클래스 수가 크게 증가하지 않습니다. 개체 기능을 동적으로 확장합니다. 개체는 여러 번 장식할 수 있습니다. 새로운 컴포넌트 클래스와 데코레이션 클래스를 추가하는 것은 열고 닫는 원칙을 준수합니다. 개체 성능에 어느 정도 영향을 미칩니다. 상속보다 오류가 발생하기 쉽고 디버그하기 어렵습니다. 동적이고 투명하게 개별 개체에 책임을 추가합니다. 상속을 통해 시스템을 확장할 수 없습니다.
외관 모드 파사드 복잡한 하위 시스템에 대한 통합 항목을 제공합니다. 주 전원 스위치, 파일 암호화 출현 클래스, 클라이언트가 처리해야 하는 개체 수를 줄입니다. 하위 시스템과 클라이언트 간의 느슨한 결합이 실현됩니다. 하위 시스템 수정은 다른 하위 시스템, 외관에 영향을 미치지 않습니다. 클라이언트가 서브시스템 클래스를 직접 사용하는 것은 잘 제한되지 않습니다. 새로운 서브 시스템을 추가하려면 모양 클래스를 수정해야 하며 이는 개폐 원칙을 위반합니다. 복잡한 하위 시스템에 쉽게 액세스할 수 있습니다. 클라이언트는 여러 하위 시스템에 종속됩니다. 계층 구조는 파사드 클래스를 통해 연결됩니다. 데메테르의 법칙 다운커플링
프록시 모드 프록시 개체에 프록시를 제공하면 프록시 개체가 원래 개체의 참조를 제어합니다. 포럼 권한 제어, 사진 미리보기 발신자, 수신자, 디커플링을 조정합니다. 프록시 클래스를 추가/교체하기 위해 코드를 수정할 필요가 없으며 개폐 원칙을 준수합니다. (보호 프록시)로 인해 요청 처리 속도가 느려질 수 있습니다. (원격 에이전트) 구현 프로세스가 복잡합니다. 원격 프록시, 가상 프록시(미리보기), 버퍼 프록시(공유 액세스), 보호 프록시(권한), 스마트 참조 프록시
명령 모드(객체 동작 모드) 호출자 요청 호출자와 수신자를 분리하기 위해 요청을 객체로 캡슐화합니다. TV 리모콘(스위치, 교환기), 기능키 시스템 커플링을 줄입니다. 새로운 명령은 시스템에 추가하기 쉽고 개폐 원칙을 준수합니다. 명령 대기열, 매크로, 실행 취소 요청, 재실행. 일부 시스템에 특정 명령 클래스가 너무 많을 수 있습니다. 요청 호출자와 수신자를 분리합니다. 요청은 서로 다른 시간에 지정되고, 요청이 대기하고, 실행 명령이 취소되고, 다시 시작됩니다.
반복자 모드 반복자 개체의 내부 표현을 노출하지 않고 집계된 개체에 액세스하는 방법을 제공합니다. 채널을 변경하는 원격 제어 동일한 집계 개체에 대해 여러 순회 방법을 정의할 수 있습니다. 간소화된 집계 클래스. 집계 클래스와 반복자를 추가하는 것이 편리하고 개폐 원칙을 준수합니다. 새 집계 클래스를 추가하려면 새 반복자 클래스가 필요하므로 복잡성이 증가합니다. 디자인이 어렵고 종합적으로 고려하기가 어렵습니다. 내부를 노출하지 않고 집계 개체 콘텐츠에 액세스합니다. 집계 클래스에 여러 순회 방법을 제공합니다. 다양한 집계 구조를 순회하기 위한 통합 인터페이스를 제공합니다. 단일 책임 원칙
관찰자 패턴 관찰자 개체 간의 일대다 종속 관계가 정의되어 개체 상태가 변경될 때마다 해당 종속 개체에 알림이 전송되고 자동으로 업데이트됩니다. 고양이, 개, 마우스, MVC, 커스텀 로그인 컨트롤 프레젠테이션 계층과 데이터 논리 계층의 분리를 실현할 수 있습니다. 브로드캐스트 통신, 일대다를 지원합니다. 관찰 대상과 관찰자 사이에 추상 결합이 설정됩니다. 특정 관찰자 및 관찰 대상을 추가하는 것은 개폐의 원칙을 따릅니다. 모든 관찰자에게 알리는 데는 많은 시간이 걸립니다. 순환 종속성이 있는 경우 시스템이 충돌할 수 있습니다. 관찰자는 대상 개체가 어떻게 변경되는지 알지 못합니다. 추상 모델은 한쪽에 다른 쪽을 의존합니다. 한 객체를 변경하면 다른 객체도 변경됩니다. 시스템에서 트리거 체인을 생성해야 합니다.
상태 모드 상태 개체의 내부가 변경될 때 개체의 동작을 변경할 수 있습니다. 포럼 사용자 수준 사람들은 기쁠 때 웃고 슬플 때 울고 은행 잔고는 보통 녹색, 연체는 빨간색 封装状态转换规则,集中管理代码。 注入不同状态可使环境对象行为不同。 允许状态转换逻辑与状态对象合成一体。 多环境对象共享一个状态对象,可以减少类的个数。 增加类和对象的个数,增大开销。 使用不当代码会导致混乱,增加难度。 新增/修改状态类不符合开闭原则。 状态改变导致对象行为变化。 代码有大量与对象状态有关的条件语句。
策略模式 Strategy 定义一系列算法,并将每个算法封装在一个类中,并让他们可以互相替换。让算法独立于使用它的客户而变化。 旅游出行策略,排序策略 支持开闭原则,可管理相关算法族。 可替换继承,提高算法复用。 避免多重条件语句。 客户端必须知道所有策略类并进行选择。 可能造成系统产生很多具体策略类。 无法同时使用多个策略类。 一个系统需动态地在多种算法中选择一个。 避免使用难以维护的多重条件选择。 不希望客户知道与算法相关的数据结构。 算法保密性 安全性

编译原理

我是通过哔哩哔哩大学的一个编译原理混子速成课学完的,有笔记(文章最后有百度网盘的分享,自取)
跟老师讲的做题步骤不一样,至于能不能得分我也不大清楚,慎学。
链接:https://www.bilibili.com/video/BV1ft4y1X7p6/
注:往年题全部做五遍,包过包高分

SpringBoot

如果学院里某个g姓老师在带课的话,一定要去蹭!讲的特别特别好,理论实践相结合,而且最重要的是会奶!
大题把springboot的数据传输过程搞明白,实验二搞明白!就好了。下附代码。
Article实体类:

public class Article {
    
    
    private int id;
    private String title;
    private String content;
    private List<Comment> commentList;

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getTitle() {
    
    
        return title;
    }

    public void setTitle(String title) {
    
    
        this.title = title;
    }

    public String getContent() {
    
    
        return content;
    }

    public void setContent(String content) {
    
    
        this.content = content;
    }

    public List<Comment> getCommentList() {
    
    
        return commentList;
    }

    public void setCommentList(List<Comment> commentList) {
    
    
        this.commentList = commentList;
    }

    @Override
    public String toString() {
    
    
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", commentList=" + commentList +
                '}';
    }
}

Comment实体类:

public class Comment {
    
    
    private int id;
    private String content;
    private String author;
    private int aId;

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getContent() {
    
    
        return content;
    }

    public void setContent(String content) {
    
    
        this.content = content;
    }

    public String getAuthor() {
    
    
        return author;
    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }

    public int getaId() {
    
    
        return aId;
    }

    public void setaId(int aId) {
    
    
        this.aId = aId;
    }

    @Override
    public String toString() {
    
    
        return "Comment{" +
                "id=" + id +
                ", content='" + content + '\'' +
                ", author='" + author + '\'' +
                ", aId=" + aId +
                '}';
    }
}

mapper:

@Repository @Mapper
public interface ArticleMapper {
    
    
public Article findById(int id);
public List<Article> findAll();
}

mapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--<mapper><mapper>中内容自行补充-->
<mapper namespace="springbootsy.sy2.mapper.ArticleMapper">
    <select id="findById" parameterType="Integer" resultMap="articleWithComment">
        select a.*,b.id as cid ,b.content as bcontent ,author,a_id
        from t_article a left join t_comment b
        on a.id=a_id
        where a_id=#{
    
    id}
    </select>
    <resultMap id="articleWithComment" type="Article">
        <id property="id" column="id"/>
        <result property="title" column="title"/>
        <result property="content" column="content"/>
        <collection property="commentList" ofType="Comment">
            <id property="id" column="cid"/>
            <result property="content" column="bcontent"/>
            <result property="author" column="author"/>
            <result property="aId" column="a_id"/>
        </collection>
    </resultMap>

    <select id="findAll" parameterType="Integer" resultMap="articleWithComment">
        select a.*,b.id as cid ,b.content as bcontent ,author,a_id
        from t_article a left join t_comment b
        on a.id=a_id
    </select>
</mapper>

Controller:

@RestController
public class Controller {
    
    
    @GetMapping("/hello")
    public String hello(){
    
    
        return "软件1904班  白旭君   2019005368";
    }
}

ArticleController:

@Controller
@RequestMapping("/article")
public class ArticleController {
    
    
    @Autowired
    private ArticleMapper articleMapper;

    @GetMapping("/findAll")
    public  String findAll(Model model){
    
    
        List<Article> articleList = articleMapper.findAll();
        model.addAttribute("articleLists",articleList);
        return "articleList";
    }

    @GetMapping("/findById")
    public String findById(int id,Model model){
    
    
        Article article = articleMapper.findById(id);
        model.addAttribute("article",article);
        return "articleDetail";
    }
}

差不多就这些了,很多同学问我要实验报告,文章最后用百度网盘进行了分享。内容包含了一些我的个人信息,希望同学们不要恶意使用哦~

IT项目管理

就把PPT和老师发的那个文档背熟就行,平常多练练口才,考试写满!
文件(带一点点笔记)可以百度网盘自取。


百度网盘文件分享:


在这里插入图片描述链接:https://pan.baidu.com/s/1jOXvkSle2-DVsoSfYGWZJA?pwd=giv2
提取码:giv2
–来自百度网盘超级会员V5的分享
(看到没有,尊贵的v5)


声明:分享的内容均为免费,旨在为一些需要的同学提供一点点帮助,请勿私自售卖。


如果有啥想咨询的啥的,直接加我就好了,我有空就会回的~最后祝愿大家学业有成,事业顺利!一路长虹!
有想入门前端的,或者学Java、学安卓的,找我,我有很多百度网盘的网课可以分享!(都是免费的,不要再问我多少钱啦)
QQ1226371240,微信b1958721504,记得备注。

Supongo que te gusta

Origin blog.csdn.net/LYly_B/article/details/130857105
Recomendado
Clasificación