Author: zevin

  • Python常用特性

    字符串格式化

    Python中的f字符串、format()内置函数、str.format()方法中都接受format_spec作为参数。

    f字符串中包含一种特殊的以开闭花括号(‘{‘, ‘}‘)为界的replacement field,形如{field_name:format_spec}

    在format_spec中使用的记号称之为Format Specification Mini-Language。

    用户自定义类可以实现__format__方法来自定义自己的Format Specification Mini-Language,object类中的默认实现是返回str(my_object)

    可哈希类(Hashable Type)

    从语法上讲,在类的定义中必须实现以下2个方法:

    • __eq__(self, other: object)
    • __hash__(self)

    从语义上讲,类的定义必须满足以下条件:

    • 类的实例在进行相等性比较的时候,相等的实例必须拥有相等的哈希值
    • 类的实例不可变

    序列类(Sequence Type)

    切片(Slicing)

    用户自定义类支持切片的必要条件是实现__getitem__魔法方法,语义上也要满足。当执行切片时,__getitem__的入参类型为slice,且它是Python的内置类型。

    slice类型除了大家熟知的startstopstride外,还有一个鲜为人知的方法,indices,官方文档说明如下:

    S.indices(len) -> (start, stop, stride)

    Assuming a sequence of length len, calculate the start and stop
    indices, and the stride length of the extended slice described by
    S. Out of bounds indices are clipped in a manner consistent with the
    handling of normal slices.

    说白了,某个slice中的三个关键属性:startstopstride,有可能缺省,有可能为负数,indices的作用就是根据序列的长度len,把它们补齐,或者重新计算,使得其“完美”适配长度为len的序列,比如原本stop属性的值大于len,那么新的stop会等于len,这个过程称之为归一化(Normalize)。

    私有以及”保护”属性

    • 以双下划线(__)开头的属性称为私有属性,解释器会对其做”name mangle”,具体做法是在原有名字的基础上拼接单下划线类名的前缀,程序员可以通过__dict__属性查看。
    • 以单下划线(_)开头的属性称为“保护”属性,之所以要加引号是因为对于解释器来说,所谓的“保护”属性并没有什么不同,仅仅是程序员之间形成的一个约定而已
  • C++常用数据结构

    pair

    Qualified NameIncludeReference
    std::pair<utility>pair-cppreference
    pair简要信息

    常用变量

    NameTypeSynopsis
    firstT1pair的第一个成员变量
    secondT2pair的第二个成员变量
    pair常用的成员变量

    常用函数

    SignatureSynopsisNotes
    pair<T1, T2> make_pair(const T1& t, const T2& u);
    pair<T1, T2> make_pair(T1&& t, T2&& u);
    用于构造的工具函数
    pair常用的非成员函数

    STL容器

    SignatureSynopsisNotes
    iterator find(const Key& key);
    const_iterator find(const Key& key);
    检索与key相等的元素Lookup
    通用成员函数

    双端队列

    Qualified NameIncludeReference
    std::deque<deque>deque-cppreference
    deque简要信息

    常用函数

    SignatureSynopsisNotes
    reference front();
    const_reference front() const;
    获取队首元素
    reference back();
    const_reference back() const;
    获取队尾元素
    deque常用的Access成员函数
    SignatureSynopsisNotes
    void push_front(const T& value);
    void push_front(T&& value);
    向队首压入元素
    void emplace_front(Args&&... args);向队首压入元素,与push_front所不同的是,直接在队列的内部地址上初始化数据,而无需经过一次拷贝或移动
    void push_back(const T& value);
    void push_back(T&& value);
    向队尾压入元素
    void emplace_back(Args&&... args);向队尾压入元素,与push_back不同的是,直接在队列的内部地址上初始化数据,而无需经过一次拷贝或者移动
    void pop_front();从队首弹出元素
    void pop_back();从队尾弹出元素
    deque常用的Modifier成员函数

    集合

    Qualified NameIncludeReference
    std::unordered_set<unordered_set>unordered_set-cppreference
    std::set
    集合简要信息

    常用函数

    SignatureSynopsisNotes
    std::pair<iterator, bool> insert(const value_type& value);
    std::pair<iterator, bool> insert(value_type&& value);
    插入元素
    常用的成员函数

    优先队列

    Qualified NameIncludeReference
    std::priority_queue<queue>priority_queue-cppreference
    优先队列简要信息

    常用函数

    SignatureSynopsisNotes
    const_reference top() const;
    void push(const value_type& value);
    void push(value_type&& value);
    void pop();
  • 自建WordPress第一坑——404

    背景

    租用了DigitalOcean的Droplet搭建自己的个人站,裸机器,从LAMP到Wordpress都是手动安装,配置也是自己修改,辛苦安装成功后,发布了第一篇帖子,但是从主页点击帖子链接跳转出现404错误。

    异常上下文

    帖子的链接路径类似于/index.php/%year%/%monthnum%/%day%/%postname%/,在Wordpress安装目录下找不到请求的资源

    问题原因

    WordPress有一个关键的设置Permalinks,用户可以自定义帖子的路径格式,但是这个路径不是实际存在于服务器的文件系统下,需要配置一定的URI重写规则。

    解决方案

    Apache2服务器开启rewrite模块

    a2enmod rewrite
    systemctl restart apache2

    修改Apache2 Virtual Host配置

    <Directory /usr/share/wordpress>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    在网站的Dashboard上修改Permalinks格式

    网站会尝试自动修改Wordpress的.htaccess文件。如果修改失败,会在页面底部显示具体的配置,需要自己手动拷贝

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    

    结语

    WordPress原生的编辑器太难用了,想换个Markdown

  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!