用某个其他用户身份打开可视化软件
在某个用户不能登录桌面时,可能可以通过进入root用户创建一个新的用户,然后用该用户登录桌面
- 不同用户之间的软件可能不共享,所以要想打开其他用户装的软件可以考虑从终端切换到其他用户,然后再打开软件
- 不同用户的git用户信息等都不同,也需要切换到其他用户使用
- 为了避免用户权限问题,打开软件时都从终端用文件所属用户的身份打开即可
凡事预则立,不预则废
梯度方向是函数局部上升最快的方向
各种镜像源管理
一般来说pip默认使用的源可能会比较慢,此时需要修改成国内的源
在命令后面添加如下参数即可将安装源换成阿里云
1 | -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com |
只在当前命令中修改,以后想要使用时需要继续添加参数
修改文件~/.pip/pip.conf
内容, 如果没有该文件则新建一个
1 | vim ~/.pip/pip.conf |
这个命令修改当前用户的默认pip
命令镜像
1 | 清华:https://pypi.tuna.tsinghua.edu.cn/simple |
Linux一般默认使用自己系统的源,比如Ubuntu使用的就是自己的Ubuntu官网源
/etc/apt/source.list
1 | sudo /vim/apt/source.list |
1 | deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse |
1 | deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse |
1 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse |
/etc/yum.repos.d/CentOS-Base.repo
1 | # backup |
hexo d
后也会出现CNAME
source
文件夹下面新建该文件hexo generate
时会将source
文件夹下面的文件都拷贝到public
文件夹下面本文总结一些可能误解或者需要注意的指令用法
git (command) -h
即可查看本地分支
1 | git branch |
查看所有分支(包括远程)
1 | git branch -a |
删除本地分支
1 | git branch -d branch_name |
删除远程分支
1 | git push origin :branch_name |
新建本地分支
1 | git fetch origin master:branch_name |
fetch将远程分支拉取到本地的Repository中,但不修改本地工作目录,如果本地分支不存在,则新建分支
1 | git pull origin master:branch_name |
fetch将远程分支拉取到本地的Repository中,同时修改本地工作目录,如果本地分支不存在,则新建分支
新建远程分支
1 | git push origin master:branch_name |
git pull
和git push
均产生reject
异常使用下面语句拉取远程分支到本地old分支并合并
1 | git fetch origin master:old |
1 | git pull origin master:old |
如果能够快速合并,也就是相同文件没有同时被不同提交修改:
不能快速合并时
1 | git add . |
合并完成后删除多余分支
1 | git branch -d old |
1 | git pull == git fetch + git merge |
git diff A B
a/A
看b/B
有何变化git checkout -- xx/xx.py
git checkout -- xx/*
git reset
or git reset HEAD
git reset HEAD --hard
git fetch origin xxx
git branch -a
可以看到远程分支引用在本地git fetch origin xxx
后,FETCH_HEAD
会指向远程xxx
分支FETCH_HEAD
是个临时的引用,可以对该分支做任意想做的操作,比如此时可用git merge FETCH_HEAD
来合并新拉取的分支git checkout xxx
git clone ssh:xxx
默认拉取master分支git clone -b yyy ssh:xxx
拉取yyy分支git branch -d --remotes origin/xxx
git branch --set-upstream-to=origin/xxx xxx
.DS_Store
添加到Git仓库中.gitignore
中添加*.DS_Store
git rm --cached *.DS_Store
, 从缓冲区中删除所有*.DS_Store
文件,但保留本地文件git add .
并重新提交持续更新
n = (n-1) & n
可以将二进制数n中的最后一位1变成0==
符号直接比较1 | bool Equal(double num1, double, num2){ |
double
类型足以满足我们日常计算的精度,在无需很高精度时使用float
可以减少内存占用实例:
1 | double a = 0.9; |
0.9
,表示为二进制后小数部分是无线循环小数,在float
类型时与double
类型时由于保留的小数位不同,所以值不同1 | # int |
1 | # int |
如果mid
的定义如下
1 | mid = (low + high) / 2 |
那么每次查找结束时更新时应该作如下更新
1 | low = mid + 1 |
或者
1 | low = mid + 1 |
如果此时使用下面的语句作为更新
1 | low = mid |
low == high - 1
有low == mid
,上面的式子将造成死循环如果mid
的定义如下
1 | mid = (low + high + 1) / 2 |
那么每次查找结束时更新时应该作如下更新
1 | low = mid |
或者
1 | low = mid + 1 |
如果使用下面的语句作为更新
1 | high = mid |
low == high - 1
有high == mid
,上面的式子将造成死循环二分查找相等的数时往往可以使用
1 | low = mid + 1 |
但是查找的是当前数组不存在的节点的存放位置时要注意查找时
1 | low = mid + 1 |
DFS是把所有可能的情况考虑到就行了,但回溯法可能会重视访问节点的顺序[LeetCode 79 Word Search]
1 | def solution(nums): |
特殊情况,如果path不能访问同一元素而且不同顺序相同元素算是不同路径的时候,我们可能必须使用rest对象在迭代中记录当前未被访问的对象
其实在使用回溯法访问一个数组时,可以考虑这个我们在访问一棵树,从空节点开始,然后每次迭代所有符合的子节点
路径是否可以访问同一节点多次 | 顺序不同节点相同是否算不同路径 | 原始数组中是否包含重复元素 | 预处理 | 每一层迭代代码 |
---|---|---|---|---|
是 | 是 | 是 | data.sort() | for i in [:]: if与前一个相等: continue visit(i) backtrace() 最后移除重复路径 |
是 | 是 | 否 | - | for i in [:]: visit(i) backtrace() [待更新] |
是 | 否 | 是 | data.sort() | for i in [index:]: if与前一个相等: continue visit(i) backtrace(i) 最后移除重复路径 |
是 | 否 | 否 | - | for i in [index:]: visit(i) backtrace(i) |
否 | 是 | 是 | data.sort() rest存储剩余元素 |
for i in rest: if与前一个相等: continue visit(i) backtrace(rest-i) |
否 | 是 | 否 | rest存储剩余元素 | for i in rest: visit(i) backtrace(rest-i) |
否 | 否 | 是 | data.sort() | for i in [index:]: if与前一个相等: continue visit(i) backtrace(i+1) |
否 | 否 | 否 | - | for i in [index:]: visit(i) backtrace(i+1) |
1,3这两种情况实际中很少出现,我们不能提前用某种算法确保加入的数据不重复,这时需要我们最终从result中去除重复的(或者每次都查看result中是否有与当前路径相同的路径)
tuple(path)
的方式实现路径的比较,且可以放入set
中第4种情况对应LeetCode 39 Combination Sum
1 | List[List[number]] |
M
定义一个函数,用一个M+1
进制的数对每个内层列表进行映射表示
1
-1
0
示例:
1 | def key(x): |
映射函数定义后可以使用sort
函数排序
1 | l.sort(key=key) |
也可以使用lambda
函数定义
1 | l.sort(key=lambda x: x[0]*(M+1)**3 - x[1]*(M+1)**2 - x[2]*(M+1) + x[3]) |
memo可理解为备忘录,但是和传统的备忘录设计模式有一定区别,后者的目标是恢复对象之前的某个状态,前者的目标更应该理解为动态规划的思想dp存储计算中间值
某些包无法通过maven自动下载
1 | # 包信息 |