太理软开方向的学弟学妹们可以进来看看,一些期末考试的小心得

听说最近咱们方向的小可爱要考试了,作为一个老学姐(强调!)(指指点点),给大家分享一下我对考试的一些心得吧~

**提前声明:我的成绩也不是特别好,心得也不一定有啥帮助,如果浪费了你们的时间不要骂我哈:)

设计模式:

首先,下面的内容都是精华,一定要全背会!其次,选择题需要把下面内容融会贯通然后再加点小拓展,才能做出高分,但是简答题背会下面的东西就无敌。大题要对所有设计模式有不错的理解,还要熟记代码才能拿满分。建议找去年的题做做,感受一下。

单一职责原则:提高复用性,高内聚低耦合。
开闭原则:对开放拓展,对修改关闭。灵活性,稳定性,抽象化。
里氏代换原则:父类可替换为子类,反之不成立。(抽象化,代码复用,扩展性)
依赖倒转原则:针对抽象层编程。(抽象化)
接口隔离原则:多个专门的接口取代统一接口,不依赖不需要的接口。
合成复用原则:多组合聚合,少继承。(降耦合)
迪米特法则:一个软件实体尽可能少地与其他实体相互作用。只与直接朋友通信。(松耦合)

名称定义优点缺点适用环境备注
简单工厂 (静态工厂) (创建型)根据参数的不同返回不同类的实例。 OA系统对象的创建、使用分离。 使用配置文件,提高了系统灵活性。 客户端只需要知道产品类对应参数。工厂类职责过重。 扩展困难。 增加了系统复杂性和理解难度。工厂类负责创建的对象少。 不关心创建细节。单一职责原则 降耦合 开闭原则
工厂方法将类的实例化延迟到子类中完成,由子类决定实例化(创建)哪个类。 日志记录器向客户隐藏哪种具体产品类被实例化。 工厂自主确定创建何种产品对象。 加入新产品符合开闭原则。类的个数成对增加,系统复杂度提升。 增加了系统的抽象性和理解难度。客户不知道具体产品类的类名。 抽象工厂类通过其子类指定创建哪个对象。开闭原则 可扩展性
抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。 电器工厂,数据库操作工厂隔离了具体类的生成。 保证客户端始终只使用同一产品族对象。 增加新的产品族方便,符合开闭原则。增加新的产品等级结构麻烦,违背开闭原则。系统不依赖产品创建、组合、表达细节。 每次只使用一个产品族且所有产品一起使用。 产品等级结构稳定。+新产品族,符合开闭。 +新产品等级结构,不符合开闭。
建造者 Builder将复杂对象的构建与表示分离,使同样的构建可以创建不同表示。 KFC套餐,JavaMail产品本身与产品创建过程解耦。 替换/新增具体建造者符合开闭原则。 可更精细地控制产品创建过程。产品之间差异大则不适用。 产品内部变化复杂需更多具体建造类,导致系统过于庞大。需要生成的产品有复杂的内部结构,属性相互依赖。 对象创建过程独立于创建对象的类。
原型模式 Prototype给出一个原型对象指明所要创建的对象类型,复制这个原型对象创建更多同类型对象。 浅克隆,深克隆(序列化),邮件复制。简化对象创建过程,提高新实例创建效率。 简化创建结构,扩展性好。 深克隆方式能保存对象状态。(撤销)每个类需要配备一个克隆方法。 改造已有类需修改源码,改变开闭原则。 深克隆代码复杂。创建新对象成本较大。 对象的状态变化小。 避免使用分层次工厂类。
单例模式 Singleton确保一个类中只有一个实例,自行实例化并向整个系统提供这个实例。 身份证,打印池提供了对唯一实例的受控访问。 节约系统资源,提高性能。 允许多例类。扩展困难。 单例类职责过重。 垃圾自动回收机制丢失单例对象的状态。只需要/允许创建一个对象。 只允许使用一个公共访问点。
适配器模式 (结构型) Adaptee将一个接口转换成客户希望的另一个接口,使接口不兼容的类可以一起工作。 机器人模仿,加密适配器将目标类和适配器解耦。 增加了类的透明性和复用性。 灵活性和扩展性好。类适配器:一次只适配一个适配者类。 目标抽象类只能为接口,不能为类。 对象适配器:置换适配者类的某些方法麻烦。系统需要使用一些现有的类,而这些类的接口不符合系统需要。 创建一个可以重复使用的类。
桥接模式 Implementor抽象与实现部分分离,使他们可以独立地变化。 大中小彩色毛笔,跨平台视频播放器分离抽象接口及其实现部分。 取代多层继承,减少子类个数。 提高系统的可扩展性。增加系统的理解与设计难度。 难以正确识别系统中两个独立变化的维度。增加抽象化和具体化间的灵活性。 抽象、实现部分独立扩展互不影响。 不希望使用继承。
组合模式 Leaf组合多个对象形成树形结构以表示整体-部分的结构层次,对单个对象和组合对象的使用具有一致性。 水果盘,文件浏览定义分层次复杂对象,忽略层次差异。 增加新容量构件和叶子构件方便。 实现树形结构面向对象。抽象复杂,难度大。 增加新构件时很难对容器中的构件类型进行限制。希望客户一致对待整体,部分层次结构。 面向对象开发系统中处理树形结构。 系统中可分离出叶子和容器对象。
装饰模式 Decorator动态地给一个对象增加一些额外职责。 变形金刚变飞机、机器人,多重加密系统比继承灵活,不会急剧增加类的个数。 动态方式扩展对象功能。 可对一个对象多次装饰。 加新的构件类和装饰类符合开闭原则。一定程度下影响对象性能。 比继承更易出错,难排错。动态透明地给单个对象添加职责。 不能采用继承方式扩展系统。
外观模式 Facade为复杂子系统提供一个统一入口。 电源总开关,文件加密外观类,减少了客户端所需处理的对象数目。 实现了子系统与客户端间的松耦合。 子系统修改对其他子系统,外观无影响。不能很好地限制客户端直接使用子系统类。 增加新子系统需修改外观类,违背开闭原则。为复杂子系统提供简单入口。 客户端与多个子系统存在依赖性。 层次性结构通过外观类建立联系。迪米特法则 降耦合
代理模式 Proxy给对象提供一个代理,并由代理对象控制原对象的引用。 论坛权限控制,图片预览协调调用者、被调用者,降耦合。 增加/更换代理类无须修改代码,符合开闭原则。(保护代理)可能造成请求处理缓慢。 (远程代理)实现过程复杂。远程代理,虚拟代理(预览),缓冲代理(共享访问),保护代理(权限),智能引用代理
命令模式(对象型行为模式) Invoker将一个请求封装为一个对象,使请求调用者和接收者解耦。 电视遥控器(开关,exchange),功能键降低系统耦合度。 新命令易加入系统,符合开闭原则。 命令队列,宏命令,请求撤销,恢复。可能会导致某些系统有过多具体命令类。将请求调用者和接收者解耦。 不同时间指定请求,请求排队,执行命令撤销,恢复。
迭代器模式 Iterator提供一种方法访问聚合对象,而不暴露对象的内部表示。 遥控器换台同一聚合对象可定义多种遍历方式。 简化了聚合类。 增加聚合类、迭代器方便,符合开闭原则。增加新聚合类需要新迭代器类,复杂性提升。 设计难度大,很难全面考虑。访问聚合对象内容而不暴露内部。 为一个聚合类提供多种遍历方式。 为遍历不同聚合结构提供统一接口。单一职责原则
观察者模式 Observer定义了对象间的一种一对多依赖关系,使每当一个对象状态改变时,其依赖对象得到通知并被自动更新。 猫狗鼠,MVC,自定义登录控件可实现表示层与数据逻辑层分离。 支持广播通信,一对多。 在观察目标和观察者间建立了一个抽象耦合。 增加具体观察者和观察目标符合开闭原则。通知所有观察者会花费很多时间。 如有循环依赖可能使系统崩溃。 观察者不知道目标对象是怎么发生变化的。抽象模型一方面依赖于另一方面。 一个对象改变会导致别的对象改变。 需要在系统中创建一个触发链。
状态模式 State允许一个对象在其内部改变时改变它的行为。 论坛用户等级,人开心时笑伤心时哭,银行账户余额为正则绿、欠款则红封装状态转换规则,集中管理代码。 注入不同状态可使环境对象行为不同。 允许状态转换逻辑与状态对象合成一体。 多环境对象共享一个状态对象,可以减少类的个数。增加类和对象的个数,增大开销。 使用不当代码会导致混乱,增加难度。 新增/修改状态类不符合开闭原则。状态改变导致对象行为变化。 代码有大量与对象状态有关的条件语句。
策略模式 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,记得备注。

  • 19
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
MOOC是一种在线教育平台,武汉理工大学也在该平台上开设了编译原理课程。编译原理是计算机科学与技术专业的一门重要课程,主要研究计算机编程语言的设计和实现。作为这门课程的一部分,学生们需要完成编译原理作业。 编译原理作业是为了检验学生对于课程内容的理解和掌握程度。作业内容通常包括理论知识和实践操作两个方面。在理论知识方面,学生需要掌握编译原理的基本概念、原理和技术,了解编译器的各个模块的作用和相互之间的关系。在实践操作方面,学生需要利用所学的知识,设计并实现一个简单的编译器,完成对某种编程语言的编译工作。 完成编译原理作业对学生来说是一个较大的挑战。首先,他们需要认真学习课程内容,理解编译原理的基本原理和方法。其次,需要熟悉编程语言的语法和语义,并学会使用编程工具和技术,如Flex和Bison等。最后,还需要具备一定的分析和解决问题的能力,能够发现和解决编译过程中可能出现的错误和异常情况。 通过完成编译原理作业,学生可以更好地理解和掌握编译原理的知识和技术,提高编程能力和解决问题的能力。同时,作业也是对学生知识掌握情况的一次检验,有助于教师对学生学习情况的评估和指导。总之,编译原理作业是学生在学习该课程中的重要环节,对于学生和教学效果都具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值