Home avatar

个人知识星球,专注于Python/Java/AI技术

Python核心 - 字符串编码

字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。

Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展, 但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

Python核心 - 函数式编程

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量(或者说不能给变量重新赋值), 因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言, 由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

归并排序中对小数组采用插入排序

纯归并排序的复杂度为O(nlgn),而纯插入排序的时间复杂度为O(n^2)。数据量很大的时候采用归并排序。

但是在n较小的时候插入排序可能运行的会更快点。因此在归并排序中当子问题变得足够小时, 采用插入排序来使得递归的叶子变粗可以加快排序速度。那么这个足够小到底怎么去衡量呢? 请看下面:

NIO笔记-缓存器细节

Buffer由数据和可以高效访问以及操纵这些数据的四个索引组成,这四个索引是:mark、position、limit、capacity。 下表是用于设置和复位索引以及查询它们的方法:

方法说明
capacity()返回缓存区容量
clear()清空缓存区,position=0,limit=capacity,此方法可覆写缓存区
flip()limit=position,position=0,用于准备从缓存区读取已经写入的数据
limit()返回limit的值
limit(int lim)设置limit的值
mark()将mark设置为position
position()返回position的值
position(int pos)设置position的值
remaining()返回(limit - position)
hasRemaining()若有介于position和limit之间的元素,返回true
reset()将position设置为mark
rewind()将position设置为0,也就是缓存区的开始位置

在缓存区中插入和提取数据的方法会更新这些索引,用于反映所发生的变化。

海盗分金

海盗,大家听说过吧。这是一帮亡命之徒,在海上抢人钱财,夺人性命,干的是刀头上舔血的营生。在我们的印象中,他们一般都瞎一只眼, 用条黑布或者讲究点的 用个黑皮眼罩把坏眼遮上。他们还有在地下埋宝的好习惯,而且总要画上一张藏宝图,以方便后人掘取。 不过大家是否知道,他们是世界上最民主的团体。参加海盗 的都是桀骜不驯的汉子,是不愿听人命令的,船上平时一切事都由投票解决。 船长的唯一特权,是有自己的一套餐具——可是在他不用时,其他海盗是可以借来用 的。船上的唯一惩罚,就是被丢到海里去喂鱼。