软件构造心得
awake020
这个作者很懒,什么都没留下…
展开
-
软件构造blog合集
git ssh: connect to host github.com port 22: Connection timed out 无以及法clone 利用jar 配置log4j2 和 slf4j ArrayList 源码分析 Java ArrayList的Iterator源码解析 从实例分析如何提升软件可复用性和可维护性(软件构造实验的遗憾) Java List Collections.unmodifiableList 与 表示泄露 单例模式笔记 synchronized 与死锁 ...原创 2020-07-10 22:46:07 · 164 阅读 · 0 评论 -
synchronized 与死锁
在进行多线程编程时,死锁是我们一定要进行判断和避免的。本篇博客介绍一下synchronized的死锁内容。 synchronized介绍 synchronized是常见的锁。常见用法如下: synchronized (A) { ... ... ... } 它可以保证花括号内的所有代码是原子执行的。 但我们要注意的是,sychronized锁定的对象不是代码段。sychronized锁定的实际上是一个类或者对象(A)。每个对象只能由一个线程占用锁。在执行由sychronized包含的原创 2020-07-10 22:40:17 · 447 阅读 · 0 评论 -
单例模式笔记
我们在使用状态模式进行编程时,状态往往可以利用单例模式进行编写。这篇文章介绍一下什么是单例模式以及如何实现。 何时需要单例模式 当我们在程序很多的地方都需要用到某个完全相同的类时,我们就可以利用单例模式来帮助我们节省空间。单例模式可以保证程序中单例类只有一个对象。 例如我们利用状态模式进行编程,一个状态可能有很多的对象需要使用,那么状态就可以利用单例模式来进行实现。 如何实现单例模式 饿汉法 这个是比较容易想到的方案 public class Single { private static Sing原创 2020-07-10 20:27:58 · 200 阅读 · 0 评论 -
Java List Collections.unmodifiableList 与 表示泄露
表示泄露: 对于一个ADT来说,表示泄露是一项要坚决避免的事情。我们会采用包括但不限于private final、防御式拷贝等方式来避免表示泄露。今天我想讨论一下和List有关的表示泄露问题。 常规方式: 1.防御式拷贝:在传入List或返回List时,我们可以采用防御式拷贝的方式避免List的别名从而避免表示泄露。这种方法的问题在于 2. List 如果List当中存放的是Immutable类型的数据,我们就可以采用 ...原创 2020-07-10 18:13:26 · 304 阅读 · 0 评论 -
从实例分析如何提升软件可复用性和可维护性(软件构造实验的遗憾)
在大学的软件构造类似的课程中,我们了解过很多的设计模式,然而如何在一个具体实例中选择合适的设计模式是一个难题(困扰了我很久)。这次我通过实验中的一个较为复杂的例子来说明一下设计的心路历程。 问题说明 在这里,我简要提炼一下实验要求,挑选一部分侧重点来进行讨论。 本次实验要求设计一组计划项管理的ADT 可以对计划项进行:分配资源、启动、挂起、取消、停止等操作。 每个计划项需要占用一定的资源和地址。 要求能够实现下列5种不同的计划项:航班、高铁、进程、课程、活动。 可以看出对于不同的计划项,他们在资源数量、原创 2020-07-10 14:50:40 · 820 阅读 · 0 评论 -
git ssh: connect to host github.com port 22: Connection timed out 无以及法clone
可能的原因:github被墙,科学上网后仍需要对git配置代理地址,查了无数篇解答,最后用这两步解决问题。 一、ssh -T [email protected] 报错 打开你的.ssh文件夹,默认地址是~/.ssh(C:\Users\你的电脑名.ssh) 新建 config 文件(不带扩展名),写入: Host github.com User 你的github邮箱@XXX.com Hostname s...原创 2020-02-25 14:35:57 · 427 阅读 · 0 评论 -
Java ArrayList的Iterator源码解析
Iterator是一个非常重要的遍历List的工具,再利用迭代器进行增删改时,往往会产生意想不到的bug,因此我们从源码来理解一下ArrayList的Iterator实现。 rep private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element retu原创 2020-07-09 18:15:55 · 246 阅读 · 0 评论 -
ArrayList 源码分析
前言 本文从JDK1.8源码的角度简要分析一下ArrayList的常用方法以及扩容机制,帮助我们更好的使用这个常见的集合类实现。 rep private static final long serialVersionUID = 8683452581122892189L; /** * 默认容量 */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array ins原创 2020-06-12 18:32:01 · 158 阅读 · 0 评论 -
利用jar 配置log4j2 和 slf4j
文章内容: 介绍如何利用jar包而不用maven配置log4j2 和 slf4j(有些同学的课程实验可能有这种要求) 介绍为什么选择log4j2和slf4j 利用jar配置log4j2 和 slf4j 需要下载以下四个包: 在https://logging.apache.org/log4j/2.x/download.html中下载压缩包,在压缩包中选择: log4j-api-2.13.3.jar log4j-core-2.13.3.jar (这两个是log4j2必备的) log4j-slf4j-imp原创 2020-06-12 14:36:28 · 759 阅读 · 1 评论