- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 代码大全《Code Complete》——可以工作的类(第6章)
抽象数据类型(ADT, abstract data type)是指一些数据以及对这些数据所进行的操作的集合。这些操作既向程序的其余部分描述了这些数据是怎么样的,也允许程序的其余部分改变这些数据。假设你正在写一个程序,它能用不同的字体、字号和文字属性(如粗体、斜体等)来控制显示在屏幕上的文本。程序的一部分功能是控制文本的字体。如果你用一个ADT,你就能有捆绑在相关数据上的一组操作字体的子程序——有关的数据包括字体名称、字号和文字属性等。这些子程序和数据集合为一体,就是一个ADT。
2023-01-18 15:42:37
279
原创 代码大全《Code Complete》——创建高质量的代码(第5章)
犯错是设计的关键所在,在设计阶段犯错并加以改正的代价要比在编码阶段这么做要低得多。一般很难判断设计何时算是足够好,一个简单的原则就是设计到没时间继续了为止。设计者的关键任务是衡量彼此冲突的各项设计特性,并在其中寻求平衡。永远都不会有一套完美的设计方案,但是会有最适合当前需求的设计方案。
2023-01-17 18:33:07
223
原创 代码大全《Code Complete》——打好基础(1-4章)
构建活动主要是编码与调试,但也涉及详细设计、规划构建、单元测试、集成、集成测试等。问题定义只需要提出问题是什么,而不涉及任何的解决方案。在完成问题定义后,需求分析阶段就要对定义的问题进行深入调查。定义问题应该从客户的角度来书写,有时候程序员思维会让人陷入窘境——许多问题或许会有除了编写程序之外的更简单的解决方案。
2023-01-17 18:29:56
700
原创 超容易看懂的java多线程开发基础2
上一节中我们已经介绍了如何用继承Thread类的方法来创建线程。但是Java中具有单继承的限制,一旦继承了Thread类以后就无法继承其他类了,这样就存在隐性的限制。所以一般而言,更推荐用实现接口的方法来创建多线程。 Thread类自身继承了Runnable接口,我们需要重写的run方法正是来自于Runnable接口。同时,Thread类中还提供了一种构造方法,它需要的参数就是一个实现了Runnable接口的类。由以上条件,新的创建线程的方法就很显然了,我们对上一节末尾的demo稍作改造://除了
2022-04-06 20:19:11
306
原创 超容易看懂的java多线程开发1
首先要了解什么是进程(Process),什么是线程(Thread)。 进程,即进行中的程序。比如qq之类的,当它运行起来之后计算机会为它分配系统资源,这就是一个进程。一个进程中可以包含若干个(至少一个)线程,比如qq中可能同时要提供多个聊天窗口的实时更新,就需要有多个线程共同运作。线程的运行由cpu安排调度(单核cpu也能模拟出多线程效果,即在多个线程之间快速切换,造成一种在同时进行的假象。不过真实的多线程还是要靠多个cpu实现)。 我们在写java代码的时候,main函数就是一个线程入口,一般
2022-04-06 20:17:10
474
原创 Q1两数之和-10.11
法1暴力求解class Solution { public int[] twoSum(int[] nums, int target) { int len=nums.length;//.length不加括号 long a,b; for(int i=0;i<len-1;++i) { a=nums[i]; for(int j=i+1;j<len;++j)
2021-10-11 21:16:51
106
原创 吴恩达机器学习笔记1
1.监督与无监督学习监督学习分为线性回归和定位。线性回归可以概括为,依据离散点的分布来绘制一条能大致描述其规律的线(曲线或直线),定位可以概括为,对于给定的数据集和分类标准,将数据集按分类标准进行区分。之所以说这两者是监督学习,是因为训练的目的是人为控制的。在线性回归中,给定一定的参数,可以推测出要预测的某个解;在分类中,给定一个数据,可以预测其在哪个范围内。线性回归的结果是连续的,而定位的结果是离散的。无监督学习则是,给机器一定的数据,机器会按照“自己的方式”对数据进行分类,其分类标准不是预先设定
2021-09-28 20:12:10
120
原创 软件构造易错点总结及课程感想
1.Java中的Primitive Type(int, char, boolean等)和Object Type(String, Boolean, Calendar等),前者是Imutable的,后者既有可变的也有不可变的2.一个immutable的类,只要外部无法观察到变化,其实例的成员变量能够再被做修改。3.对于Object type ,final 是引用不可变。对于Primitive type,final 是值无法更改4.两个方法具有“行为等价性”, 其实是针对同一个spec来说是等价的。若对这个
2021-07-07 21:22:29
170
原创 软件构造9,10讲知识点总结
LSP1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;2、子类中可以增加自己特有的方法。具体表现在:子类必须实现父类所有非私有的属性和方法,或子类的所有非私有属性和方法必须在父类中声明。即,子类可以有自己的“个性”,在项目中,采用里氏替换原则时,尽量 避免子类的“个性”,一旦子类有“个性“,这个子类和父类之间的关系就很难调和了)。Preconditions cannot be strengthened in a subtype. 前置条件不能强化Postconditions can
2021-07-07 11:07:46
106
原创 软件构造第2、12讲混谈
1.区分健壮性和正确性健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度即使终止执行,也要准确/无歧义的向用户展示全面的错误信息Robustness principle (Postel’s Law):对自己的代码要保守,对用户的行为要开放正确性:程序按照spec加以执行的能力,是最重要的质量指标!正确性倾向于直接报错(error),健壮性则倾向于容错(fault-tolerance)2.ThrowableThrowable是Error和Exception的父类,用来定义所有可以作为
2021-07-06 19:51:38
236
1
原创 软件构造学习心得(2)
设计规约学习心得静态类型检查阶段完成:1.参数类型是否匹配2.返回值类型是否匹配final关键字定义了设计决策:“不可改变”Spec给“供需双方“都确定了责任,在调用的时候双方都要遵守前置条件:对客户端的约束,在使用方法时必须满足的条件后置条件:对开发者的约束,方法结束时必须满足的条件契约:如果前置条件满足了,后置条件必须满足;前置条件不满足,则方法可做任何事情除非在后置条件里声明过,否则方法内部不应该改变输入参数避免使用可变的全局变量欠定的规约:同一个输入可以有多个输出声明式规约
2021-07-03 23:20:33
170
原创 软件构造学习心得(1)
软件构造的多维度视图:按动态性划分:Moment View和Period View按阶段划分:Build-time view和Run-time View按构造对象划分:Code-level view 和Component-level view举例介绍先看biuld-time view 中code-level view对应的部分Moment view包含source code,即被创造后就存在的源代码,period view包含code churn,代码改动,是一个阶段、过程。再看,compo
2021-07-02 17:01:02
202
2
原创 csapp大作业
计算机系统大作业题目程序人生-Hello’s P2P专业计算学部学 号1190201115班 级1903006学生陈宇豪 指导教师史先俊 ...
2021-06-27 22:25:54
598
原创 csapp深入理解计算机系统大作业
摘 要本文从hello.c的一生入手,利用Ubuntu下的操作工具,介绍了它的诞生,即计算机系统是如何将一个文本文件转化为可执行文件的;运行,即可执行文件在计算机底层的实现逻辑,包括如何被加载到进程中,进程的上下文切换,参数的保存形式以及如何利用系统级I/O实现输入输出交互等。最后hello被回收,结束了它的一生,本文也就完整地梳理了计算机系统这门课程要教给我们的知识。关键词:hello.c的一生,Ubuntu,计算机系统(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)目 录第1章
2021-06-27 18:11:45
498
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人