读书笔记
文章平均质量分 72
JustDI-CM
对于可控的事情要保持谨慎,对于不可控的事情,要保持乐观,人只能做自己能力范围内的事情,你要接受这个现实,并且以乐观的心,去应对这一切
展开
-
读书笔记-《数据结构与算法》-摘要11[Divide and Conquer - 分治法]
在计算机科学中,分治法是一种很重要的算法。分治法即『分而治之』,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个思想是很多高效算法的基础,如排序算法(快速排序,归并排序)等。原创 2024-01-26 15:17:14 · 335 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要10[基数排序]
由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序。| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |桶编号。| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |桶编号。分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样。待排序数组[62,14,59,88,16]简单点五个数字。最后输出结果:[14,16,59,62,88]输出结果:[62,14,16,88,59]原创 2024-01-22 15:54:19 · 372 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要9[计数排序]
计数排序,顾名思义,就是对待排序数组按元素进行计数。使用前提是需要先知道待排序数组的元素范围,将这些一定范围的元素置于新数组中,新数组的大小为待排序数组中最大元素与最小元素的差值。其中反向填充主要是为了避免重复元素落入新数组的同一索引处。图片来源:https://visualgo.net/en。原创 2024-01-18 15:38:40 · 338 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要8[桶排序]
桶排序和归并排序有那么点点类似,也使用了归并的思想。原创 2024-01-17 16:31:41 · 500 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要7[堆排序]
堆排序通常基于实现,以大根堆为例,堆排序的实现过程分为两个子过程。第一步为取出大根堆的根节点(当前堆的最大值), 由于取走了一个节点,故需要对余下的元素重新建堆。重新建堆后继续取根节点,循环直至取完所有节点,此时数组已经有序。基本思想就是这样,不过实现上还是有些小技巧的。原创 2024-01-16 19:20:11 · 399 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要6[快速排序]
书上的例子好多是用 Python 写的,看不懂,上网看了几篇文章,发现有个大神的文章浅显易懂,非常适合我这种小白。,大致分为三个步骤。原创 2023-12-15 22:30:00 · 156 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要5[归并排序]
通常做法为递归排序,并将两个不同的有序数组归并到第三个数组中。先来看看动图,归并排序是一种典型的分治应用。原创 2023-12-14 20:00:00 · 243 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要4[插入排序]
核心:通过构建有序序列,对于未排序序列,在已排序序列中从后向前扫描(对于单向链表则只能从前往后遍历),找到相应位置并插入。实现上通常使用in-place排序(需用到O(1)的额外空间)原创 2023-12-07 22:00:00 · 343 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要3[选择排序]
核心:不断地选择剩余元素中的最小者。原创 2023-12-05 22:00:00 · 232 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要2[冒泡排序]
持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。原创 2023-12-05 20:00:00 · 147 阅读 · 0 评论 -
读书笔记-《数据结构与算法》-摘要1[数据结构]
所谓快慢指针中的快慢指的是指针向前移动的步长,每次移动的步长较大即为快,步长较小即为慢,常用的快慢指针一般是在单链表中让快指针每次向前移动2,慢指针则每次向前移动1。开发常用,没啥可说的,注意的是字符串拼接时,可能会用到 StringBuffer 与 StringBuilder,前者保证线程安全,后者不是,但单线程下效率高一些,一般使用 StringBuilder。链式存储结构就是两个相邻的元素在内存中可能不是相邻的,每一个元素都有一个指针域,指针域一般是存储着到下一个元素的指针。(大根堆或者小根堆)。原创 2023-12-01 18:11:13 · 292 阅读 · 2 评论 -
读书笔记-《ON JAVA 中文版》-摘要26[第二十三章 注解]
注解的定义看起来很像接口的定义。事实上,它们和其他 Java 接口一样,也会被编译成 class 文件。Retention;Target;@Target 定义你的注解可以应用在哪里(例如是方法还是字段)。@Retention 定义了注解在哪里可用,在源代码中(SOURCE),class文件(CLASS)中或者是在运行时(RUNTIME)。原创 2023-10-11 21:00:00 · 925 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要25[第二十二章 枚举]
Java 的 enum 有一个非常有趣的特性,即它允许程序员为 enum 实例编写方法,从而为每个 enum 实例赋予各自不同的行为。为此,你可以提供一个构造器,专门负责处理这个额外的信息,然后添加一个方法,返回这个描述信息。虽然枚举类型本身并不是特别复杂,但还是将本章安排在全书比较靠后的位置,这是因为,程序员可以将 enum 与 Java 语言的其他功能结合使用,例如多态、泛型和反射。关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。原创 2023-09-20 08:00:00 · 100 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要24[第二十一章 数组]
在Java的最初版本中,固定大小的低级数组是绝对必要的,这不仅是因为Java设计人员选择包含原生类型(也考虑到性能),还因为那个版本对集合的支持非常少。然而这种高速也是有代价的,代价就是数组对象的大小是固定的,且在该数组的生存期内不能更改。而在 Java 中,你只需返回数组,你永远不用为数组担心,只要你需要它,它就可用,垃圾收集器会在你用完后把它清理干净。它的作用是根据给定的数组索引,使用指定的lambda表达式或方法引用来设置数组的值。对象数组存储的是对象的引用,而基元数组则直接存储基本数据类型的值。原创 2023-09-07 22:00:00 · 224 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要23[第二十章 泛型-2]
因此 Java 泛型不仅必须支持向后兼容性——现有的代码和类文件仍然合法,继续保持之前的含义——而且还必须支持迁移兼容性,使得类库能按照它们自己的步调变为泛型,当某个类库变为泛型时,不会破坏依赖于它的代码和应用。不同的类型会有不同的行为。这是因为数组是完全在语言中定义的,因此可以具有编译期和运行时的内建检查,但是在使用泛型时,编译器和运行时系统不知道你想用类型做什么,以及应该采用什么规则。super T>。尽管这可以强制执行有关应用了泛型类型的规则,但潜在的更重要的效果是我们可以在绑定的类型中调用方法。原创 2023-08-29 21:00:00 · 270 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要22[第二十章 泛型-1]
而我们希望编写更通用的代码,能够适用“非特定的类型”,而不是一个具体的接口或类。语句只能返回单个对象,解决方法就是创建一个对象,用它打包想要返回的多个对象。当然,可以在每次需要的时候,专门创建一个类来完成这样的工作。你可以将方法的参数类型设为基类,这样的方法就可以接受任何派生类作为参数,包括暂时还不存在的类。拘泥于单一的继承体系太过局限,如果方法以接口而不是类作为参数,限制就宽松多了,只要实现了接口就可以。的,则无法访问该类的泛型类型参数,因此,如果使用了泛型类型参数,则它必须是泛型方法。原创 2023-08-19 08:00:00 · 219 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要21[第十九章 类型信息-2]
通过将其转型为 B ,我们可以调用不在 A 中的方法。这给了他们一个机会,使得他们的代码与你的代码的耦合度超过了你的预期。可以通过调用静态方法 Proxy.newProxyInstance() 来创建动态代理,该方法需要一个类加载器(通常可以从已加载的对象中获取),希望代理实现的接口列表(不是类或抽象类),以及接口 InvocationHandler 的一个实现。这里有趣之处在于:即使你从 makeA() 返回的是 C 类型,你在包的外部仍旧不能使用 A 之外的任何方法,因为你不能在包的外部命名 C。原创 2023-08-04 21:30:00 · 202 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要20[第十九章 类型信息-1]
RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息Java 使用 Class 对象来实现 RTTI,保存在 java 文件编译后 .class 文件中Java 还提供了另一种方法来生成类对象的引用:类字面常量(例如:FancyToy.class),此时不会自动初始化该 Class 对象使用类前要做到3个步骤:加载(JVM加载类)、链接(为 static 字段分配存储空间)、初始化(初始化超类及 static 修饰的方法和块)原创 2023-07-31 22:00:00 · 237 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要19[第十八章 字符串-2]
而在Java中, \ 的意思是“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。导致此问题的一个典型理由就是假定我们的模式仅能匹配第一个可能的字符组,如果它是贪婪的,那么它就会继续往下匹配。在匹配操作成功之后, start() 返回先前匹配的起始位置的索引,而 end() 返回所匹配的最后字符的索引加一的值。一般来说,正则表达式就是以某种方式来描述字符串,因此你可以说:“如果一个字符串含有这些东西,那么它就是我正在找的东西。因此也被称作懒惰的、最少匹配的、非贪婪的或不贪婪的。原创 2023-07-05 21:06:23 · 428 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要18[第十八章 字符串-1]
String 对象是不可变的操作符重载就是在不同场合有不同的作用,例如,+ 除了数值相加,还可以用于字符串连接,+ 与 += 是 Java 中仅有的两个重载操作符简单的字符串连接可以使用 + ,这是因为编译器自动优化为了 StringBuilder 去处理,涉及到复杂的、繁多的字符串连接时,还是显式的使用 StringBuilder 最好。原创 2023-07-03 07:00:00 · 137 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要17[第十七章 文件]
虽然本章对文件和目录操作做了相当全面的介绍,但是仍然有没被介绍的类库中的功能——一定要研究 java.nio.file 的 Javadocs,尤其是 java.nio.file.Files 这个类。如果说"监视这个目录",自然会包含整个目录和下面子目录,但实际上 的:只会监视给定的目录,而不是下面的所有内容。,是一个跨操作系统(OS)和文件系统的抽象,目的是在构造路径时不必关注底层操作系统,代码可以在不进行修改的情况下运行在不同的操作系统上。的文件系统,还可以构建新的文件系统(对于支持它的操作系统)。原创 2023-06-16 16:25:53 · 333 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要15[第十五章 异常]
要自己定义异常类,必须从已有的异常类继承,最好是选择意思相近的异常类继承(不过这样的异常并不容易找)。");—PS:不能无中生有编译器创建了无参构造器,它将自动调用基类的无参构造器。super(msg);try {f();} try {g();} } }将打印“从方法调用处直到异常抛出处”的方法调用序列。—PS:简单讲,就是能帮你定位到抛异常的代码处super(msg);super(msg);原创 2023-05-09 22:00:00 · 507 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要14[第十四章 流式编程]
利用流,我们无需迭代集合中的元素,就可以提取和操作它们。流的一个核心好处是,它使得程序更加短小并且更易理解。当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体。流使得 Java 8 更具吸引力。—PS:我们存储在 list set 中的对象可以通过流进行操作输出:—PS: 这就是流式编程,非常的简洁明了声明式编程(Declarative programming)是一种:声明要做什么,而非怎么做的编程风。—PS:例如上面代码的,要去重(distin原创 2023-04-15 11:00:29 · 376 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要13[第十三章 函数式编程]
其中重要的四个接口的类型,Consumer(消费型)、Supplier(供给型)、Predicate(判断型)与Function(转换型) ,对应的抽象方法 Consumer(accpet)、Supplier(get)、Predicate(test) 与 Function(apply)Lambda 表达式产生函数,而不是类。如果接收的参数是基本类型,则由名称的第一部分表示,如 LongConsumer , DoubleFunction , IntPredicate 等,但基本 Supplier 类型例外。原创 2023-03-31 16:49:55 · 266 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要12[第十二章 集合]
==**java.util** 库提供了一套相当完整的集合类(collection classes)来解决这个问题,其中基本的类型有 **List** 、 **Set** 、 **Queue** 和 **Map**==。这些类型也被称作容器类(container classes),集合提供了完善的方法来保存对象,可以使用这些工具来解决大量的问题。原创 2023-02-28 18:27:11 · 413 阅读 · 1 评论 -
读书笔记-《ON JAVA 中文版》-摘要11[第十一章 内部类]
返回的是序列中的下一个值。通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象的引用,在此作用域内,内部类有权操作所有的成员,包括。但是,你将会了解到,内部类远不止如此,它了解外围类,并能与之通信,而且你用内部类写出的代码更加优雅而清晰。—PS:如果内部类实现的是接口那么与外部类自己 implements 多个接口是没有区别的,但若是内部类是继承的类,那么在一个外部类中定义多个内部类,每个内部类继承一个类,就实现了“多重继承”原创 2023-01-12 19:07:13 · 647 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要10[第十章 接口]
关键字。可以将一个不包含任何抽象方法的类指明为。原创 2022-11-11 16:05:43 · 400 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要9[第九章 多态]
这可以称为“is - like - a” 关系,因为派生类就像是基类——它有着相同的基本接口,但还具有需要额外方法实现的其他特性虽然这是一种有用且明智的方法(依赖具体情况),但是也存在缺点。为了在程序中有效地使用多态乃至面向对象的技术,就必须扩展自己的编程视野,不能只看到单一类中的成员和消息,而要看到类之间的共同特性和它们之间的关系。—PS:这个和初始化顺序有关,基类的构造方法一定是早于派生类执行的,如果在基类构造方法中调用了动态绑定的方法,就会调用到这个方法在派生类中重写的方法。这会给设计带来负担。原创 2022-11-04 19:58:36 · 905 阅读 · 3 评论 -
读书笔记-《ON JAVA 中文版》-摘要2[第二章 安装Java和本书用例]
学了一个很有意思的命令。原创 2022-11-04 19:23:09 · 115 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要8[第八章 复用]
这种“是一个”的关系是用继承来表达的,而“有一个“的关系则用组合来表达。新类的使用者看到的是你所定义的新类的接口,而非嵌入对象的接口。这介于继承和组合之间,因为你将一个成员对象放在正在构建的类中(比如组合),但同时又在新类中公开来自成员对象的所有方法(比如继承)。事实证明,在创建类时总是要继承,因为除非显式地继承其他类,否则就隐式地继承 Java 的标准根类对象(Object)。但是,对象本身是可以修改的,Java 没有提供将任意对象设为常量的方法。的含义有些微的不同,但通常它指的是“这是不能被改变的”。原创 2022-10-28 18:43:23 · 188 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要7[第七章 封装]
如果你没有自己的域名, 你就得构造一组不大可能与他人重复的组合(比如你的姓名),来创建独一无二的 package 名称。当你创建了一个类库,也就与该类库的使用者产生了联系,他们是类库的客户端程序员,需要使用你的类库创建应用或更大的类库。Java 把这样的文件看作是隶属于该目录的默认包中,因此它们为该目录中所有的其他文件都提供了包访问权限。访问权限修饰符也可以用于确定类库中的哪些类对于类库的使用者是可用的。,就意味着紧随 public 后声明的成员对于每个人都是可用的,尤其是使用类库的客户端程序员更是如此。原创 2022-10-19 18:42:44 · 503 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要6[第六章 初始化和清理]
事 实上,这就是静态方法的主要目的,静态方法看起来就像全局方法一样,但是 Java 中不允许全局方法,一个类中的静态方法可以被其他的静态方法和静态属性访问。对于方法的局部变量,这种保证会以编译时错误的方式呈现,要是类的成员变量是基本类型,情况就会变得有些不同。对于数组,初始化动作可以出现在代码的任何地方,但是也可以使用一种特殊的初始化表达式,它必须在创建数组的地方出现。在 Java 中,垃圾回收器会自动地释放所有对象的内存,所以很多时候类似的清理方法就不太需要了(但是当要用到的时候,你得自己动手)。原创 2022-10-14 15:41:29 · 563 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要3[第三章 万物皆对象]
类的字段可以是基本类型,也可以是引用类型。如果类的字段是对某个对象的引用,那么必须要初始 化该引用将其关联到一个实际的对象上。在这段代 码中,我们无法在这个作用域之后访问这个对象,因为唯一对它的引用 s 已超出了作用域的范围。如果类名是由多个单词构成的,则每个单词的首字母都应大写(不采用下划线来分隔),字段(成员变量)和对象引用名都采用驼峰命名的方式,但是它们的首字母不需要大写。—PS:寄存器不能之间控制,栈内存存放Java的引用,堆内存存放Java的对象,常量存储在代码中,非RAM存储脱离代码的存在。原创 2022-08-19 16:42:24 · 449 阅读 · 0 评论 -
读书笔记-《ON JAVA 中文版》-摘要1[第一章 对象的概念]
上周在一个公众号里看见了这本书竟然出版了,瞬间惊喜。干 Java 的怎么都得有本圣经,所以,买它!工作之余换个脑子,看个几页,在此权作记录。–每天进步一点点。原创 2022-08-10 17:17:03 · 482 阅读 · 0 评论 -
读书笔记-《20世纪最伟大的心理学实验》读后感1
目录1.老鼠都可以2.老板快看3.儿子真棒1.老鼠都可以他改变压杆获得食物奖励的比例,多数时老鼠空手而回,但也许在压杆第40或60次,突然获取食物奖励。一般人直觉认为,随机且间隔如此长的奖赏,会使老鼠对获得奖赏不抱希望,致使压杆行为消失。事实却非如此。斯金纳发现,间歇给与食物奖赏的方式,反而让这些老鼠像染上毒瘾一样,不断压杆,不论能否得到奖赏。斯金纳还对固定比例(如:压杆4次就给与食物)与不规则的间歇奖赏进行对比,他发现奖赏间隔不规则的情境下,消除既有行为需时最久。---摘自《20原创 2022-05-31 18:43:04 · 377 阅读 · 0 评论 -
读书笔记-程序是怎么跑起来的-摘要5
53.利用操作系统提供的系统调用功能,就可以实现对硬件的控制。系统调用称为API。各API就是应用调用的函数,这些函数的实体就是DLL文件。--这次知道DLL干啥的了54.Windows控制硬件时借助的是输入输出指令,其中最具代表性的是IN和OUT。IN:输入指令,通过指定端口号的端口输入数据,并将其存储在CPU的寄存器中。OUT:输出指令,则是把CPU寄存器中的数据,输出到指定端口号的端口。--就是字面意思55.计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器。而连接器的内部,原创 2021-06-09 17:59:34 · 114 阅读 · 2 评论 -
读书笔记-程序是怎么跑起来的-摘要4
40.用某种语言编写的程序就称为源代码,保存源代码的文件称为源文件。源文件经过编译器编译成为本地文件。--C语言,源文件为object.c,本地文件为object.obj41.本地文件不可运行,需要经过链接,最后生成一个EXE文件。链接的过程中涉及静态、动态链接库和导入库。--链接是将运行所需的所有东西组合到一起的过程42.栈,是用于存储函数内部临时使用的变量(局部变量),以及函数调用时所使用的的参数的内存区域。堆,是用于存储程序运行过程时的任意对象及数据的内存区域。栈空间由编译器管理(原创 2021-06-07 17:48:42 · 127 阅读 · 2 评论 -
读书笔记-程序是怎么跑起来的-摘要3
27.磁盘中的程序需要加载到内存后才能运行,这是因为CPU需要通过内部程序计数器来指定内存地址,才能运行程序--磁盘、内存、CPU之间的关系类似于原材料、仓库、工厂28.磁盘缓存指的是把从磁盘中读出的数据存储在内存空间中的方式。--缓存嘛,我懂29.虚拟内存指的是将磁盘的一部分假想成内存来使用。当内存不足时,可以使用虚拟内存。虚拟内存的方法有分页式和分段式。--暂停一下,我卡了30.DLL,可以动态加载的库文件,共用、节约内存,Windows就是一堆DLL文件。--就是工具类,谁都可原创 2021-06-03 20:07:47 · 161 阅读 · 0 评论 -
读书笔记-程序是怎么跑起来的-摘要2
18.编程中的数据类型表示是存储的何种类型的数据,从内存上看就是占用内存的大小--就是你坐硬座、一等座、动卧的区别19.char a=123;short b=123;long c=123;原创 2021-06-01 09:37:55 · 100 阅读 · 0 评论 -
读书笔记-程序是怎么跑起来的-摘要1
1.CPU和内存是由许多晶体管组成的电子部件,简称IC--物理上,这二者都有许多触角2.CPU从功能上分为4个部分:寄存器、控制器、运算器、时钟--见名知意3.程序启动后,根据时钟信号,控制器从内存中读取指令和数据。通过对这些指令加以解释和运行,运算器就会对数据进行运算,控制器根据该运算结果来控制计算机。--计算过程中,可以将数据暂存至寄存器,谁还不是个宝宝4.CPU是具有各种功能的寄存器的集合体,分为8种,分别是累加寄存器、标志寄存器、程序计数器、指令寄存器、栈寄存器、基址寄存器、变原创 2021-05-28 09:23:14 · 185 阅读 · 2 评论