0%

Generic Programming

8.2 Defining a Simple Generic Class

  1. 本节使用Pair作为例子,代码如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Pair<T>
    {
    private T first;
    private T second;
    public Pair() {first = null; second = null;}
    public Pair(T first, T second) {this.first = first; this.second = second;}
    public T getFirst() { return first; }
    public T getSecond() { return second; }
    public void setFirst(T newValue ) {first = newValue; }
    public void setSecond(T newValue ) {second = newValue;}
    }
  2. 泛型类可以定义多个类型变量(常用T, K, V, U, S, E)

8.3 Generic Methods

  1. 泛型方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ArrayAlg
    {
    public static <T> T getMiddle(T... a)
    {
    return a[a.length / 2];
    }
    }
    // 调用
    String middle = ArrayAlg.<String>getMiddle("John", "Q.", "Public");
    // 或者省去<String>
    String middle = ArrayAlg.getMiddle("John", "Q.", "Public");
    大部分情况下类型推断都可以正常运作,但当传入的参数不是一致的类型时可能会发生问题,编译器会尝试寻找不同类型的共同父类来解决问题
阅读全文 »

Interfaces, Lambda Expressions, and InnerClasses

又来写只给自己看到笔记了.每次读一本书读不完,或者读完了又由于没有实践就都忘记是真的很烦,作为这个系列的第一篇,希望可以开一个好头。主要的计划是将原本一本书一个md文件改为一个章节一个文件,也许会有帮助?

6.1 Interfaces

  1. 从Java5以来对于Comparable有了一些改动,提供了另外一个可选的泛型接口接口的compareTo函数由原来的接收一个Object作为参数,变为接收一个泛型T作为参数,在这种情况下可以免去强制类型转换以及类型判定的繁琐操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public interface Comparable<T>
    {
    int compareTo(T other);// 参数有了类型T
    }

    class Employee implements Comparable<Employee> {
    public int compareTo(Employee other) {
    return Double.compare(salary, other.salary);
    // 没有cast
    }
    }

    当然这也只是可选项,并没有强制要求

    对于Comparable,如果比较的是int,double等可能发生溢出的类型的时候(相减的时候),需要使用对应的包装类(boxed class)的compare方法来避免溢出。

    同时理论上,对于大部分的类来说,当equals方法返回true的时候,compareTo方法也应该返回0,两者在这种情况下应该保持一致性,其中一个特例为BigDecimal,由于equals判定的时候考虑了精度

    理论上Comparable应该实现反向对称性(antisymmetry),即X.compareTo(Y) = - Y.compareTo(X),而继承有时候会破坏这一点(如果使用泛型的Comparable接口的话)

阅读全文 »

一段时间没有更新博客就全忘了,差点连这篇也写不出来,赶紧记一下,估计也只有我看得懂hhh

写作

  1. 创建文章
    hexo new [layout] <title>
    其中layout主要用到的有draft以及post,默认为post,如果有自定义布局另说
  2. 发布以及更新文章
    • hexo publish [layout] <title> 主要用于将草稿(draft)发布
    • 依次运行hexo clean(可选),hexo generate以及hexo deploy即可(大概)
  3. 设置多个标签
    在文章的tags一栏中,如果想要设置多个标签,使用如下格式
    1
    2
    3
    tags: [标签1, 标签2]
    # 如
    tags: [SQL, Linux]
  4. 插入图片
    无法使用markdown原生插入图片方式(大概)
    md文件中使用格式来插入图片,其中img_namemd文件对应的文件夹中的图片名称
    如文件结构如下
    1
    2
    3
    - Root
    |- Note.md
    |- Note/img_name.png
    那么在Node.md中引用图片img_name即为

    通过使用hexo-asset-image插件可以直接在md中使用正常的![]()写法,非常方便,并且支持hexo-abbrlink

    预览

  5. 本地运行
    hexo server
    访问http://localhost:4000即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
S = aA | bQ
Q = aQ | bD | b
= a*(bD | b)
D = bB | aA
= b(bD | aQ) | aA
= bbD | baQ | aA
= (bb)*(baQ | aA)
= (bb)*(ba(a* (bD | b)) | aA)
= (bb)*(ba(a*bD | a*b) | aA)
= (bb)*(baa*bD | baa*b | aA)
= (bb)*baa*bD | (bb)*baa*b | bb*aA
= ((bb)*baa*b)*((bb)*baa*b | bb*aA)
A = aA | bB | b
= a*(bB | b)
= a*(b(bD | aQ) | b)
= a*(bbD | baQ | b)

第一篇博客

突然开始写的原因

很久之前就听到说,对于一个程序员,技术博客是多么多么的重要,但是出于各种原因,一直没有搭建。最近深刻的感觉到了菜就是原罪,再不搞一波的话,指不定就拖到哪一天了。所以今天抽出了一些时间,基本算是完成了,有个了雏形。顺便在之前零零散散写的一些笔记之中挑选了一些先放了进来,算是稍稍填充一下内容吧。希望是一个好的开端,也希望之后可以一直坚持下去。

之后的计划

之后应该还会写一写其他的内容,毕竟全是一些所谓的”笔记”也未免过于单调。

Python

多个conda环境的 Jupyter lab 配置

1
2
3
4
5
6
7
8
9
10
conda activate envName
// 切换到对应的环境

pip install ipykernel
// 安装 ipykernel

python -m ipykernel install --user --name envName --display-name "whatever you like"
// envName 是你的环境名字,不能更改
// 后面的字符串是你在jupyter 之中想要显示的环境的名字,可以根据情况更改
如果出现某些原因导致之前的conda环境不存在了,可以在~/.local/jupyter/kernel中删除原来的kernel

conda 基本操作

1
2
3
4
5
conda create -n name python=version # version为3.6 / 2.7等版本号

conda update --all # 更新所有包

conda config --set changeps1 False # 取消在prompt中显示当前环境

Conda 去除终端显示的环境名

由于使用了spaceship作为zsh的主题,所以conda原生现实的环境名有点多余,使用以下命令关闭显示

conda config --set changeps1 false

多环境pip安装包

直接到想要安装包的环境的/bin下,运行

1
./python pip install packagename
阅读全文 »

Python Standard

Python 入门

  1. 字符串乘法

    1
    3 * '123' = '123123123'
  2. 三引号用于换行字符串

    1
    2
    3
    4
    5
    print("""\
    Usage: thingy [OPTIONS]
    -h Display this usage message
    -H hostname Hostname to connect to
    """)
  3. _在交互模式下表示最后打印的值

  4. 数组切片为浅拷贝

  5. print使用end参数来定义结束符

  6. 方便的使用切片来遍历,而不是直接使用原数组

    1
    2
    for w in words[:]:
    pass
  7. 全局变量和外层函数的变量不能在函数内部被直接赋值, 除非使用global等关键字

阅读全文 »

《我可能学的是假英语》

[英]David W. Ferguson 编著

周雅芳 译

石油工业出版社

Chapter Ⅰ

Learning and Studying

两者毫无疑问是不能互换的

  1. learning 指的是 learn how to do something
  2. studying 指的是 study something

1
2
3
I study Maths. I study English. I study the history of the CPC.

I'm learning to swim...I'm learning how to play the piano...Learn to use your brain.

Chapter Ⅱ

Plural Nouns

Nouns with no plural

  1. Advices
  2. Aircrafts
  3. Assistances
  4. Consensuses
  5. Equipments
  6. Evidences
  7. Trainings

Nouns that mean something different in the plural

  1. Aid/Aids
  2. Attention/Attentions
  3. Consumption/Consumptions
  4. Damage/Damages
  5. Discipline/Disciplines
  6. Enlightenment/Insights
  7. Progress/Progresses
  8. Research/Researches
  9. Staff/Staffs

Nouns with a singular and a plural that are more complicated

  1. Contribution/Contributions
  2. Convenience/Conveniences
  3. Grain/Grains
  4. Talent/Talents

Nouns with no plural

第一类之中的词语,Nice and simple,根本没有复数形式,也就是说advices不论在什么情况下都是错误的

但是对于trainings情况就不一样了,由于使用的人越来越多,常常是在商业领域中。

Nouns that mean something different in the plural

一个词语单数和复数表示完全不同的意思,无法相互切换,常常是因为这个词语同时具有抽象意义和具象意义,在表达抽象意义的时候,这个词语没有复数形式,表达具象意义的时候既有单数形式也有复数形式

阅读全文 »