java
Timothyxxx
香港大学计算机科学博士在读
展开
-
软件构造心得(14):从两道期末考试题看待并发的一些思路与技巧(附答案参考)
前言哈工大的软件构造期末考试题中,最有难度的往往就是多线程了。而很多同学包括我在内,也是上课听的很懂,但是实际操作中出现了很多问题。这篇博文就和大家一起捋捋期末考试题,看看技巧和入手的点在哪里。如有错误恳请指正。2018年期末考题第二道大题先po一下笔者认为的有风险的地方。第一行的public,必然会引发表示泄露,而表示泄露从线程角度来看也是危险的,所以要将其改为private。加不加final修饰呢?我们发现,每一次调用removeSomelinesAndUnifyTitle方法都会进行一次原创 2020-07-08 15:19:32 · 2786 阅读 · 6 评论 -
软件构造心得(13):用流的泪说明为什么不要滥用unchecked异常
前言最早最早,我不知道有exception这个东西,之后去博客上找一些不系统的入门教程,在胎儿时接受了不正确的教育一样,觉得exception那么多,又不认识,怪乱七八糟的,反正在我代码上乱加东西可不行。于是曾几何时,我在我的代码里面写满了RuntimeException…一旦违背迅速报错,中间没有任何的乱七八糟追求短平快的我,即使一开始老师讲过,看了课件之后也是一个劲的狡辩:“那不是还说有些程序员支持有些程序员反对吗,那我这么写没问题的,好像老师最早也就只教了那个嘛,再改我真的吐了(HITlab3真的原创 2020-05-28 19:27:06 · 422 阅读 · 0 评论 -
软件构造心得(12):关于JFrame、动态显示、与交互界面制作的入门级心得
前言GUI虽然不是我们软件构造课程的核心思想所在,但是却往往是一个软件设计者外在而直接的品味。当然抛开这些不谈,初次接触GUI如我,因为毫无基础,面对网上鱼龙混杂的说法真的尝试而且崩溃了好久,多亏陶神佬相助为我仙人指路,让我得以系统性的接触并且学习了相关的知识。这里逐步整理一下我的心得。因为内容较多,可能需要多更新几回…JFrame是什么通过阅读书籍,发现JFrame和swing的历史是一个...原创 2020-05-03 13:50:47 · 704 阅读 · 0 评论 -
软件构造心得(11):里氏替换原则(Liskov Substitution Principle)保持行为一致的动机与目的
我们逐渐对于软件构造有了更深的要求。设计良好的代码需要做到可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码。抽象(Abstraction)和多态(Polymorphism)是实现这一原则的主要机制,而继承(Inheritance)则是实现抽象和多态的主要方法。而提高这一质量指标,打下构建可维护性和可重用性代码的基础,我们首先需要知道一个重要的原则。本文参考...原创 2020-04-13 22:07:25 · 398 阅读 · 0 评论 -
软件构造心得(10):编写等价性判断时重写Hashcode的原因:理论与性能分析
首先了解hash系列数据结构一些底层依赖hash系列数据结构在底层使用其构建对象所具有的hashcode将其分配index到表的各个位置。如果元素的hash值相同,则用链式结构将其追加到index所具有元素组的末尾。在我们使用键值索引时,实际上数据结构是先得到这个键的hashcode然后去索引该index的数据(链)直到最后。为什么要Override Hashcode一句话概括,因为我们...原创 2020-04-01 13:18:38 · 503 阅读 · 0 评论 -
软件构造心得(9):spec、RI、AF、A之A及系列总结--我们不过也是ADT
A(Abstract field)A是spec中涉及到的抽象变量,就是我们通过R、RI、AF最后映射的最终目标,也是我们费力建立这套流程的初心。A即一个抽象表达的区域,既源自于我们的spec的最初的目的,又是由RI解释而来,是我们努力的结果,具有高度抽象化的特点。书写要求我们需要在implement的过程中写下RI AF Safe from rep exposure这三个部分。RI:明确要...原创 2020-03-30 18:31:57 · 1267 阅读 · 0 评论 -
软件构造心得(8):specRI、AF、A之AF
AF(abstract function)其和rep invariant一起出现,共同完成R(rep)到A(abstract field)的对应关系。其中,RI负责从R中筛选出来有意义的我们要选择的部分,AF完成从R到A的映射,即对于RI的解释。AF性质准确地讲,AF是RI到A的映射(由于RI已经将我们要表示的部分选择出来了)。其具有以下几种性质1,一定是一个满射(即我们一定能实现RI和A...原创 2020-03-30 17:17:38 · 345 阅读 · 0 评论 -
软件构造心得(7):spec、RI、AF、A概念辨析之RI
RI(rep invariant)representation概念representation即为了支持功能实现的ADT内部的数据结构(表示方式)。“representation (the actual data structure or data fields used to implement it)”rep independent内部的数据结构的改变不影响外部的功能实现。re...原创 2020-03-30 12:31:24 · 898 阅读 · 0 评论 -
软件构造心得(6)有关于Invariant的一点说明
有关Invariant概念(notion)invariant,中文意思是不变性。是软件构造中ADT相关的一个概念。不变量的意思就是在程序的任何阶段都不会改变的一个抽象的性质举例说明,immutability就是程序中一个典型的不变量。(Immutability is one crucial invariant: once created, an immutable object should ...原创 2020-03-30 11:18:16 · 598 阅读 · 0 评论 -
软件构造心得(4)Java中有关于final的一些必需知识总结
(1),final关键字是一种变量前面的修饰符,代表着程序员的最终决策,final变量只能被赋值一次for example :final double PI = 3.14; PI=3.1415;//wrong or:final double PI; PI=3.14//ok PI=3.1415//wrong(2),对于基本的数值变量,比如int ,float , double, ...原创 2020-03-25 13:20:38 · 195 阅读 · 0 评论 -
软件构造心得(1)如何打开eclipse自动联想功能
我们都知道,eclipse这个软件功能很多,但是比较保守,用惯了各种把提示放在你嘴边的IDE的朋友可能觉得:“这个破eclipse,变量还得一个字母一个字母敲进去敲完才行,都没点提示啥的。”实际上并不是这样的,eclipse有联想功能,只不过默认缺省值是只能通过“.”来激发(也就是说你输入“.”才会触发联想),那我们怎么使它能对于所有的输入都能主动联想呢?操作如下进入eclipse,在菜单栏...原创 2020-03-02 12:58:24 · 896 阅读 · 0 评论