解决Hexo置顶问题

考虑到之前的博客有置顶文章,所以需要置顶功能。

Google了一下解决方案,发现了本博客主题是支持置顶功能的,在需要置顶的Front-matter中加上top: true即可。试了一下,能置顶。。只是文章置顶在某一页而不是首页。。

期间看到了Pacman主题支持置顶,需要在_config.yml中配置好需要置顶的文章,略麻烦。

然后看到了next主题支持置顶,在博文front-matter中加上sticky: Sticky即可置顶,根据Sticky的大小来决定置顶顺序。

想实现next主题那样的功能,参考了一篇博文添加Hexo置顶功能的操蛋3小时,在hexo-generator-index中增加比较函数比较top值,我试了一下Bug还是有的,置顶文章后文章日期有些会乱掉(比较函数条件比较少)。

我自己写了一个比较函数,也有问题,后来查了一下Javascriptsort函数,其比较函数和C++的完全不同= =

阅读更多

CSAPP第四章总结:Processor Architecture

这章主要讲如何设计一个处理器,可以更好的理解计算机的运作过程。

设计处理器的指令集为Y86,比较简单,适合学习,与x86类似。然后用HCL(Hardware Control Language)设计其电路结构。利用连续的指令(每条指令细分为5步)实现流水线pipelined,就可同时执行多条指令。

The Y86 Instruction Set Architecture

这部分定义了Y86的一些数据结构、指令集、编码、协议、异常处理。

Programmer-Visible State

337页图4.1给出了Y86的数据结构。

  • 其中有8个32位寄存器,名称和IA32一致。
  • 同样也有ZF, SF, OF这3个condition单位寄存器。
  • PC计数器寄存器,还有DMEM内存,可以看作一个数组。
  • Stat状态码标志事件类型。

同样的,%esp作为栈指针,用于push, pop, call, ret等指令。

阅读更多

CSAPP第三章总结:Machine-Level Representation of Programs

以下为自用笔记,具体可看Computer Systems A Programmer’s Perspective

这章主要讲高级语言的汇编形式,如何通过汇编/反汇编来分析一个程序。要想深入理解操作系统,必须从底层开始,那就是汇编了。

因为我的机器是64位的,可以通过参数-m32来编译32位的程序,这样结果可和书中的尽可能吻合。建议用-O1或者-O0参数来汇编,这样使得汇编代码与源代码差别不是很大。

阅读更多

实现一个生命游戏

前几天在LeetCode上面遇到这么一个题目:Game of Life,给定一个初始pattern,求其下一个状态。

然后今天闲的蛋疼又用Javascriptcanvas实现了一下,项目地址:https://github.com/netcan/gameOfLife,最后搞到博客上了,具体可看左栏。

操作方法:

  • 鼠标右键暂停
  • 鼠标中键清除所有细胞
  • 鼠标左键添加细胞,最好在暂停状态下添加。

阅读更多

求下一个排列数

LeetCode上遇到这么一个题:Next Permutation

意思就是给定一个序列,求下一个排列数。下一个排列数是指重排序列,使得下一个序列的字典序比当前序列要大,如果找不到,就返回最小字典序的那个序列。

要求是一步到位,不能分配多余的内存。

这个题貌似是要求实现C++的next_permutation函数,然后去瞄了一眼其实现:

阅读更多

整数除以2的幂与右移的关系

整数除法与右移运算

在C/C++中进行除以2的幂的运算,学过计组的同学,可能会知道更高效的是进行右移运算,右移几位,相当于除以2的几次幂。

C/C++中整数除法,去除小数部分,整数部分作为返回结果。

例如$6/4=1, -6/4=-1$

这里$4=2^2$,那么只要对一个数,右移2位,就相当于除以4了么?

容易用如下代码验证:

#include <stdio.h>
int main(void) {
    printf("%d\n%d\n", 6>>2, -6>>2);
    return 0;
}

阅读更多

谈谈localhost

刚刚发现一个有趣的现象,测试django项目的时候,这样启动服务器:

$ python3 ./manage.py runserver
...
Starting development server at http://127.0.0.1:8000/
...

然后想起laravel项目也是8000端口,就同时启动laravel项目:

$ php artisan serve
Laravel development server started on http://localhost:8000/

问题来了,2个端口一样,按理说应该会冲突啊,可是没有,打开浏览器,输入127.0.0.1:8000,看到的是django的项目。那么laravel项目哪去了,难道没启动成功,可是又没报错?

阅读更多

浅谈Java实现一个聊天软件

这是一个Java聊天系统(项目地址:https://github.com/netcan/Talk),作为Java实验课的内容,目前已基本完成,支持如下功能:

  • 群聊
  • 私聊
  • 消息提醒
  • 用户状态标记
  • 聊天记录保存
  • 表情支持

阅读更多