算法导论-动态规划-笔记

动态规划:找其中一个最优解
4个步骤来设计
1.刻画一个最优解的结构特征
2.递归地定义最优解的值
3.计算最优解的值,通常是自底向上的方法
4.构造解

适合用动态规划求解的最优化问题,应具备两个要素:
最优子结构、子问题重叠

对于不同问题领域,最优子结构的不同 体现在两个方面:

  1. 原问题的最优解中涉及多少个子问题
  2. 在确定最优解使用哪些子问题时,我们需要考察多少种选择

动态规划 vs 贪心算法
能够应用贪心算法的问题也必须具有最优子结构性质。两者不同之处是:
动态规划,首先寻找子问题的最优解,然后在其中选择
贪心算法,首先做一次“贪心”选择————在当时(局部)看来最优的选择————然后求解选出的子问题,从而不必求解所有可能相关的子问题

贪心算法两个关键要素:
贪心选择性质
最优子结构

GO SQL MySQL driver解读

GO标准库中的database/sql搭配社区开源的mysql驱动go-sql-driver/mysql,是我们常用的组合。

标准库实现了什么

Package sql provides a generic interface around SQL (or SQL-like) databases.
抽象了统一的连接、读写、事务等操作,负责调用实际的driver与特定的数据库交互(比如MySQL、SQLlite、Oracle等)
database/sql库维护了数据库连接池,它并发安全,可供多个协程并发调用。

driver实现了什么

与具体的数据库的交互过程

怎么用

用户代码直接调用标准库,同时指明使用哪个driver,使用之前要先注册driver

import (
"database/sql"
"time"

_ "github.com/go-sql-driver/mysql"
)

// ...
db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
    panic(err)
}
// See "Important settings" section.
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)

proftpd配置备忘

proftpd看似很简单、很强的ftp服务器,但是想快速配置、运行起来,却不太直观。

我的两个使用场景:
1.Mac开发 FTP代码同步到Linux开发机,在服务器中运行程序
2.给其他人共享一些文件

./configure
make
make install
三步骤完成后,怎么配置,才能正常跑起来?
这里分享一个同事写的shell脚本,命名为init.sh

#!/bin/sh

CURPATH=`cd $(dirname $0);pwd`

authmsg=$(id)

#uid=506(quanjing)
suid=$(echo $authmsg|awk -F' ' '{print $1}')
#gid=505(map)
sgid=$(echo $authmsg|awk -F' ' '{print $2}')

uid=$(echo $suid | awk -F'=' '{print $2}' | awk -F'(' '{print $1}')
gid=$(echo $sgid | awk -F'=' '{print $2}' | awk -F'(' '{print $1}')

uname=$(echo $suid | awk -F'(' '{print $2}' | awk -F')' '{print $1}')
gname=$(echo $sgid | awk -F'(' '{print $2}' | awk -F')' '{print $1}')


echo "uid $uid uname $uname gid $gid gname $gname";

proconf="$CURPATH/etc/proftpd.conf"

## 替换配置文件
function editconf()
{
opt="$1"
#sed -i "s/^.$opt[[:space:]]*.*/$opt     $2/" $proconf
sed -i "s#^\s*[#]*\s*$opt\s.*#$opt      $2#" $proconf
#echo "sed -i \"s/^\s*[#]*\s*$opt\s*.*/$opt $2/\" $proconf"
}

editconf "User"   "$uname"
editconf "Group"  "$gname"

editconf "DefaultRoot"  "$HOME"

editconf "AuthUserFile"        "$CURPATH/var/ftpd.passwd"
editconf "AuthGroupFile"       "$CURPATH/var/ftpd.group"
editconf "UserAlias"           "anonymous ftp $uname"

# 处理UID
bin/ftpasswd --home $HOME --name $uname --group $gname --shell /bin/bash --file $CURPATH/var/ftpd.group --uid $uid --gid $gid
bin/ftpasswd --home $HOME --name $uname --passwd $uname --shell /bin/bash --file $CURPATH/var/ftpd.passwd --uid $uid --gid $gid

我们执行 sh init.sh 它做的事儿是:
通过调用ftpasswd命令、替换默认配置文件,以当前用户作为ftp的用户

最后 sh start.sh启动服务

#!/bin/sh
CURDIR=`cd $(dirname $0);pwd`
export LD_LIBRARY_PATH=$CURDIR/lib:$LD_LIBRARY_PATH
nohup sbin/proftpd -c $CURDIR/etc/proftpd.conf -n &

附件 proftpd.tar.gz.zip 是已编译好的proftpd,先后执行init.sh start.sh 可快速运行起来。

参考 http://ftp.proftpd.org/docs/

写作&输出计划

我大学本科读的是管理科学与工程,包含经济管理、计算机相关课程。
大学时,我没有好好学习专业课程,只是学会了些编程技术,做了程序员。

现在想想,其实是自己的焦虑和懒惰、缺乏好奇心,措施很多认真学习的机会。没办法,现在我很想捡回来,很想成为一个真正的思考者、实践者,能够不断提高自己的认知、见识体验更多事物、同时带来一定的财富,理想地过这一生。

接下来,我的计划是

  1. 深入研究计算机科学,产出系列教程,包括算法详解、GOLANG语言基础、WEB项目实战
  2. 深入学习金融证券,产出学习总结系列文章

本周起,每周一篇文章

随想

曾一度我想要赚钱赚钱(无论什么方式,快钱、大钱最好),然后早点退休,不再日复一日坐办公室。

我目前的认知极其狭窄,又对自己目前认知外的东西熟视无睹。妄想有什么简单直接的方式,就赚钱了。忘了当今这个社会,专业性是必要的。

如果人人都可以通过少许的努力,就赚到了很多的钱。还有谁会去努力工作,还有谁能为社会进步、社会服务贡献力量呢?

还是要回放几年前告诫自己的话,不要焦虑不要急。那应该怎么做呢?永远要有追求,追求自我实现,追求平静的生活,追求自律和自由。

当我准备考试、准备面试时,我精神抖擞、注意力集中,感觉效率比平日高出5倍;当我做了一些题感觉劳累时,同时因为没有下决心去拿下考试、拿下面试,结果大概率是很符合预期的,那就是不尽人意。

当我们见识得越多,我们包容的也应该越多。但对于我们自己,想要什么样的生活,想要怎么样的人生,就应该去有与之匹配的计划和行动。

无论在什么行业,都要想着成为顶尖,这是一种习惯,习惯。
​把应该做的事情做好,不断提高自己的水平和认知。MONEY FOLLOWS.