js 实现的快速排序
目前是升序排列,改成降序只需要将 arr[j] >= midarr[i] <= mid 中的 >= 和 <= 互换
算法优化:

  • 随机取基准数
  • 采用三数取中的方式取基准数
  • 多种排序算法配合 - 当数组元素比较少的时候采用插入排序
const quickSort = (arr, left, right) => {
    if (left < right) {
        // 取第一个数为基准数
        let mid = arr[left];
        let i = left;
        let j = right;
        let temp = 0;

        while (i < j) {
            // 先从 *右边* 开始找 *小于* 基准数的值
            while (i < j && arr[j] >= mid) {
                // 在 i < j 的前提下 直到找到小于基准数的值 本次循环结束
                j--;
            }
            // 再从 *左边* 开始找 *大于* 基准数的值
            while (i < j && arr[i] <= mid) {
                // 在 i < j 的前提下 直到找到大于基准数的值 本次循环结束
                i++;
            }
            // console.log(i, j);
            // 交换 - 这里 肯定是 i <= j 的,加上 i < j 的判断可以少一次无用的赋值
            if (i < j) {
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;            
            }
        }

        // 到这里的话 i = j
        arr[left] = arr[i];
        arr[i] = mid;
    
        // 再排左半边
        quickSort(arr, left, i - 1);
        // 再排右半边
        quickSort(arr, i + 1, right);
    }
}

var arr = [15, 4, 23, 32, 2, 7, 14, 24, 3, 1, 44, 51, 17];
// var arr = [153, 234, 4364, 565, 32423, 2, 5, 55, 35, 23, 24, 23, 32, 22, 27, 14, 4, 3, 1, 14];

quickSort(arr, 0, arr.length - 1);
console.log(arr);

package main

import (
    "encoding/base64"
    "fmt"
    "io"
    "os"
    "regexp"

    "github.com/imroc/biu"
)

func main() {
    
    s := `二进制字符串`
    s = strings.Replace(s, "_", "1", -1)
    arr := regexp.MustCompile("\\d+").FindAllString(s, -1)

    var r = make([]byte, 0, len(arr))

    for _, x := range arr {
        var a byte
        biu.ReadBinaryString(x, &a)
        r = append(r, a)
    }

    wireteString, _ := base64.StdEncoding.DecodeString(string(r))
    // fmt.Println(wireteString)
    f, err := os.Create("/Users/jiayx/workspace/jiayx/go/src/lean/a.tar.gz") //创建文件
    if err != nil {
        panic(err)
    }
    n, _ := io.WriteString(f, string(wireteString))
    println("写入文件成功, 长度:", n)
}

在俊杰的“唆使”下加入了户外游的队伍,于 11 月 5-6 日去了位于浙江衢(qu二声)州的巨龙顶。
真是一次难忘了旅途。。。
同行共 7 人,其中的 5 位老司机,均表示这是自己玩户外这么多年,遇到的最虐的路线。
然而这是我的第一次 /摊手
表示我的第一次就被这样粗暴的旅途强奸了。。
没有下一次了
再也不要提爬山二字了 /二哈

需求是用 HTML 生成 PDF 所以就找啊找
找了半天,有以下几个主流的库

  1. tcpdf
  2. html2pdf
  3. dompdf

试用之后,只有 dompdf 能比较完美的还原 css 样式
但是默认对中文支持不好。
暂时不知道怎么解决,百度搜到的全是 N 年前的解决方案,而且千篇一律 --

UPDATE:
下午看 dompdf 项目的时候,发现一个项目 https://github.com/dompdf/utils
这个项目就是用来导入其他字体的,我用它导入了微软雅黑。
这个工具 依赖 https://github.com/PhenX/php-font-libhttps://github.com/PhenX/php-svg-lib
我是把 https://github.com/dompdf/utils 下载到 dompdf 的根目录下使用的
执行 php load_font.php font_name /path/to/font.ttf 会在 dompdf/lib/fonts/ 下生成 以 font_name 命名的两个文件。这时候就可以在生成的 PDF 里愉快的显示中文了。
不过执行上述命令时,会报错

PHP Warning: require_once(/Users/jiayx/workspace/fdd/trade-center/vendor/dompdf/dompdf/lib/php-font-lib/src/FontLib/Autoloader.php): failed to open stream: No such file or directory in /Users/jiayx/workspace/fdd/trade-center/vendor/dompdf/dompdf/autoload.inc.php on line 20

这种情况需要把 php-font-lib 和 php-svg-lib 复制一份到 dompdf/lib/ 目录下,他俩在 vendor/phenx/ 下
然后再执行上述命令,这时候就成功了。(虽然还是会报一堆 warning --

示例代码

<?php

use Dompdf\Dompdf;
use Dompdf\Options;

$html = '<html>......</html>';

$options = new Options();
// 是否加载远程文件 比如互联网上的图片、字体等。
$options->setIsRemoteEnabled(true);
// 这个不能没有
$options->setIsFontSubsettingEnabled(true);
// 设置字体
$options->setDefaultFont('msyh');    

$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4');
$dompdf->render();
// 第二个参数加上可以在 chrome 上预览 PDF,比较方便,不加会直接下载
$dompdf->stream('收款清单', ["Attachment" => 0]);

遇到的一个小问题:
不能 在 html 里设置 font-family 否则会按照 html 中的设置显示。

一直以来我都是看到新系统就不能忍。。想在第一时间更新,今天 macOS 正式版推送了,就立马更新了一波。
说一说遇到的问题吧。

golang 遇到的问题

更新之后,执行 go build 会提示错误

fatal error: MSpanList_Insert

我还以为我昨天把代码改坏了。。。一番查证之后,发现是由于我目前的 golang 1.6 不支持 macOS,更新 golang 到1.7.1之后问题解决。

brew 遇到的问题

还有更新 golang 过程中遇到的问题。
更新 golang 就少不了 brew 的帮忙,在我执行 brew upgrade go 的时候注意到命令行提示:

/usr/local is not writable. You should change the ownership 
and permissions of /usr/local back to your user account: 
sudo chown -R $(whoami) /usr/local

(百度是真的不靠谱...) google 查到是因为 mac 系统升级的问题。只需要按照提示执行 sudo chown -R $(whoami) /usr/local 就 ok 了。

更新: homebrew 更新了,不再需要 修改 /usr/local 的权限了

这是目前我发现的升级 macOS Sierra 遇到的问题,之后遇到会继续更新。