给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/integer-break
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1 | class Solution: |
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/integer-break
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1 | class Solution: |
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-binary-search-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1 | class Solution: |
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1 | class Solution: |
分布式版本控制工具
因为需要版本控制,尤其多人协作开发的时候,用于版本回滚。
主流的版本控制器有:
SVN(Subversion)
CVS(Concurrent Versions System)
VSS(Micorosoft Visual SourceSafe)
TFS(Team Foundation Server)
Visual Studio Online
版本控制产品非常的多,影响力最大且使用最广泛的就是Git。
SVN时集中版本控制工具,所有人在进行开发时都要在联网状态下从远程仓库中拉取最新代码才能进行开发,开发后还要上传到远程服务器。如果服务器损坏将无法继续工作。
Git是分布式版本控制工具,所有参与开发的人员手中都有完整的项目代码,内容变更时只需要将自己更新的内容推送给其他人即可。此外,开发过程中不依赖网络,服务器损毁对工作人员也无影响。
访问git官方网站下载适合自己硬件环境的安装包,无脑下一步即可。
1.配置用户名
1 | git config --global user.name "你的名字" |
2.配置邮箱
1 | git config --global user.email "你的@邮箱.com" |
git中包含工作目录、暂存区、本地仓库和远程仓库4个工作区域。
工作区就是平时存放项目代码的路径;暂存区用于临时存放变更的内容,其本质是一个文件,保存即将提交到文件列表的信息;本地仓库是安全存放数据的位置,这里面有你提交的所有版本的数据。其中HEAD只想最新放入仓库的版本;远程仓库就是托管代码的服务器,简单理解就是github中后缀是“.git”的仓库。与使用者之间直接相关的只有工作目录和远程仓库,暂存区和本地仓库只涉及到一些命令操作。
在工作目录使用git add指令将变更内容推送至暂存区,暂存区的内容使用git commit推送至本地仓库,使用git push将本地仓库中的内容推送至远程仓库;反向操作时,使用git pull将远程仓库的内容回滚到本地仓库中,使用git reset将本地仓库的内容回滚到暂存区中,使用git checkout将暂存区中的内容回滚到工作目录中,上述命令的使用如下图所示。
在工作路径中右键空白处,唤出git bash界面。
1.本地仓库搭建
在git bash界面中输入以下指令,初始化git项目。
1 | git init |
init结束后会在工作路径中生成一个隐藏的.git文件夹,表示当前工作路径已然是一个Git项目。git init后可以在将本地变动添加至暂存区和本地仓库。
2.配置远程仓库
init后如果需要将本地内容推送至服务器,需要使用git remote指令对远程服务器地址进行配置。
1 | git remote add origin url |
需要修改url时可以使用git remote set-url指令。
1 | git remote set-url origin url |
另外,remote指令还可以用来验证是否成功添加配置。
1 | git remote -v |
推荐姿势
使用init的方式创建项目后,还是需要在github中创建仓库之后再使用remote进行配置。不如先在github中创建库存然后使用gitclone的方式将库存下载到本地,省去一捏捏配置的步骤。
创建库存后制git链接,在工作路径中唤出git bash界面,使用git clone “.git链接”下载该项目的代码,复制git链接的方法如图所示。
1 | git clone xxx.git |
使用git过程中,有些文件比如日志、临时文件、数据等通常不会被提交到代码仓库当中,这时就需要设置相应的忽略规则,避免不必要的文件上传到远程仓库当中,.gitignore文件就是用于设定工作路径中哪些文件不会被上传。在Github中创建库存时,勾选生成.gitignore文件选项即可生成该文件。clone到本地后可以对其进行修改配置,.gitignore文件的内容书写方式如下。
1 | #不需要提交的目录 |
这里只对gitignore文件的基本用法进行介绍,详见[Git].gitignore文件的配置使用。
Git中,文件包含未跟踪(Untracked)、暂存状态(Staged)、未修改(Unmodify)和已修改(Modified)。下面用一个例子对这4种状态进行解释说明。
假设现在创建一个hello.py文件,该文件并未加入到git库中,不参与版本控制,所以处于“未跟踪状态”;使用git add . 指令将该文件存入暂存区后,则其状态为“暂存状态”;使用git commit指令将其推送至本地仓库后,暂存区为空,此时该文件所处状态为“未修改”。此时若对文件进行了修改,则其状态为“Modified”,使用add加入暂存区后,commit即可将其重新推送到本地仓库中。
使用git add 指令可以将未跟踪文件和已修改文件添加至暂存区。
1 | git add . # “.” 表示将当前路径所有内容都添加至暂存区 |
如若想要撤回暂存区中的内容,可以使用git reset指令。
文件撤出暂存区,但保留修改:
1 | git reset --mixed |
撤销所有已经add的文件:
1 | git reset HEAD . |
撤销某个文件或文件夹
1 | git reset HEAD -filename |
git commit指令可以将暂存区中的内容提交至本地仓库中,在使用commit指令时一定要附带-m参数,为当前commit添加注释信息。
1 | git commit |
1.分布式版本管理工具
2.敏捷开发
3.开源
用于临时保存修改的文件。修改文件时,需要临时切换到其他分支,但是还不想提交,可以用stash临时保存。
1 | git stash save "xxx" |
包含两个参数“–oneline”和“–graph”可以帮助看到日志的流程?
1 | git log --oneline --graph |
用于删除远程分支:
1 | git push branch_name |
如果错误commit,想去除掉文件,可以使用rm命令,可以将暂存区未commit的文件去除?
1 | git rm --cached filename |
提交commit但是不创建新的提交记录,再上一次log中更新内容,可以用来压缩日志
1 | git commit --amend |
提交特定一次修改
1 | git cherry-pick commit-id |
文件快照打包
1 | git archive -o archive.zip master |
解决代码冲突的常见两个方法
1 | git merge master |
1 | git rebase -i master |
如何将本地文件和远程仓库文件关联起来?
项目路径要保证是被git管理的路径,即“git init”,然后使用-v参数查看与哪些远程仓库有关联,然后使用add参数添加关联。
可以使用rm指令删除关联。
1 | git remote -v #查看当前路径与哪些远程仓库关联,没有则为空 |
本地内容变更后,使用commit将内容推送至缓存区,想要推送到远程仓库时,需要用到push指令,-u用于指定上游分支
1 | git push -u prigin master |
?从远程仓库获取指定分支
1 | git checkout -b local_branch_yy origin/remote_branch_yy |
如果有多次提交记录,却只想保留一条记录怎么办?
在当前commit中包含多个comit时,
1 | git reset commit-id |
1 | git commit --amend |
1 | git rebase -i commit-id |
1 | git tag tag_name |
自己使用git的转变,这鬼东西好难学啊。
欸?这个项目好像不错欸,下下来康康!这时候git对我来说只是一个下载代码的地方,所用到的指令基本上也就是clone了。下载之后自己在本地跑一跑改一改,基本不设计到其他指令,甚至是直接下载压缩包。。不需要用指令。。
1 | git clone something.git |
以后我把我自己写的代码都存上云,谁想了解我我就丢他个github链接!这时候就是自己创建一个远程仓库,把自己更改过的代码上传到仓库当中,每次变动后只要add、commit、push就可以了。
1 | cd workspace |
跟一个小伙伴一起写代码~这个时候就需要开始接触分支了,各自在自己的分支上更新代码,两人同时编写一个文件时,上传的时候可能就要遇到冲突。所以在每次上传之前需要先从远程仓库将最新的内容pull下来,然后再把本地的变动推送到远程服务器。这时候就可以使用stash指令,暂时将本地的内容恢复到变动之前,从远程pull最新内容后使用stash pop指令恢复本地的改动,然后再进行add、commit、push上传自己的代码。
1 | git clone something.git |
Hexo博客搭建
Hexo 博客利用 Github Action 自动化部署
利用 Github Actions 自动部署 Hexo 博客
hexo博客搭建从入门到入土完全优化系列
Github Pages+Hexo搭建博客
由于Github提供了免费的Page服务,所以就有了Hexo生成站点然后部署在Github Page上的玩法。博客的页面设计、部署等问题可以通过Hexo一键完成,作者只需要关注文章内容即可。本篇博文只对Windows操作系统的博客搭建过程进行记录,其他需求还请读者自行探索。搭建博客的整体思路是,首先使用Hexo一键生成博客站点,并使用butterfly对站点进行美化。然后,将站点部署到Github page上,即可通过访问[git_user_name].github.io来查看博客内容。接着,单独为博客内容创建一个仓库,使用Github Action监听内容仓库,如果内容仓库中有更新则重新将内容重新部署到博客当中。
Hexo的安装方法可以直接参考Hexo官方文档,为保证博文结构完整性,将官方文档中的相应步骤抄录至本文中。
在安装Hexo之前需要先安装下列应用程序:
Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本)
Git
两者的安装过程中并无任何特殊配置,只需要点击“下一步”完成安装即可,读者可以根据自身喜好在安装过程中进行相应设置。安装完成后,可以在CMD中通过以下指定,测试是否安装成功。
1 | $ node -v |
这里要记录一下node -v的结果,后续配置_config.yml时会使用到。
安装必备的应用程序后,需要创建一个空文件夹作为博客的项目路径,接下来我们将称这个创建好的文件夹为博客项目路径。进入博客项目路径,空白处点击右键,选择“Git Bash Here”,准备安装搭建博客所需要的工具。
Hexo的安装方式相当简单。安装必备的应用程序后,使用 npm 指令安装即可,过程可能需要持续若干分钟。
1 | $ npm install -g hexo-cli |
安装完毕后,可以在CMD中使用hexo -v指令查看hexo版本以确定是否安装成功。
1 | $ hexo -v |
安装阶段结束后开始建站,hexo可以使用init指令生成项目相关文件。
1 | $ hexo init |
执行完毕后,使用hexo s指令就可以在浏览器中输入“localhost:4000”访问博客,看到博客内容。
1 | $ hexo s |
Butterfly的安装可以直接按照官方文档逐步进行。为保持博文结构完整性,同样将其中的内容摘抄过来,读者可能要注意命令的时效性。
首先,进入博客项目路径,呼出Git界面,输入以下命令。
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
然后,将博客项目路径中的_config.yml中的[theme]对应的值修改为[butterfly]。
安装完成后可以在博客项目路径中看到butterfly文件夹,其中包含了主题的配置文件_config.yml,复制其中的内容,在博客项目路径中创建_config.butterfly.yml,将之前复制的内容粘贴后保存。
(使用过程中未能正确配置mathjax,无法渲染公式,所以最后放弃butterfly使用next主题)
如果希望其他人也能看到你的博客,那就需要将博客部署在服务器或Github上。Github完全可以满足笔者对博客的需求,所以并未探索如何将博客部署在服务器上,读者有相关需求可以自行探索。
创建仓库需要读者已经创建过Github账户,这里不对如何注册Github账户进行赘述。拥有Github账户后,需要在本地配置账户信息。在任意位置唤出git bash,通过以下指令配置用户和邮箱。
1 | $ git config --global user.name "你的名字" |
创建的仓库要求与Github用户名完全相同,并勾选“Add a README file”选项。
在git bash命令窗口中输入命令生成SSH密钥,命令如下所示,注意-C是大写字母C,邮箱要加引号。
1 | $ ssh-keygen -t rsa -C "你的@邮箱.com" |
生成的内容可以在路径“C:\用户\用户名.ssh\id_rsa.pub”中查看到,将其中所有内容复制。
在Github中打开个人设置页面,左侧选中“SSH and GPG keys”,Title中的内容读者可以任意定义,在Key中粘贴刚刚复制的内容,然后点击“Add SSH key”。
在博客的项目路径中唤出git bash窗口,安装部署工具,指令如下所示。
1 | $ npm install hexo-deployer-git --save |
然后,在github中打开创建好的仓库,复制其git链接,如图所示。
然后修改博客项目路径中的“_config.yml”文件,在yml文件中,最下方可以看到“deploy:”,在其下方添加type、repo和branch,填写的内容如图所示。
使用clean指令清除缓存,然后使用g、d指令将博客内容推送至github,期间按照要求输入yes即可。
1 | $ hexo c |
执行完毕后,即可通过访问“[git_user_name].github.io”直接看到博客内容。
上述这种写博文、hexo clean、hexo g、hexo d更新博客的方式是hexo的基础用法。如果读者写博客的场景比较固定,不会涉及到多设备更新博客的话,hexo的基础用法已经足够满足需求了。但是如果写博文的设备并不固定,基础用法就不那么便利了。
基础用法每次都会将本地的博文重新部署至github中,“删除文章”这一功能也是通过这种方式实现的,只要在本地删除博文后重新部署即可达到删除博文的目的。换句话说,如果在一个未保存全部博文的设备上更新内容,以往的心血就全被“删除”了。为避免上述情况出现,我们使用Github action来“备份”博客内容。首先,在Github中创建一个私有仓库,用于存储博客内容。然后,在本地编辑博文本,将新内容上传到博客内容仓库中,内容变动时触发Action,将新内容再部署到博客页面中。如果使用新设备撰写博客,只需要git clone博客内容仓库后编辑文本,重新push到仓库中即可。
在创建过程中注意勾选private即可。
访问 Github注意->右上角头像处->Settings->Developer Settings->Personal access tokens->generate new token,选择classic token即可,创建的 Token 名称随意,但必须勾选 repo 项 和 workflows 项。
创建好token后暂时不要关闭页面,这个token只在此处显示一次,关闭之后就无法找回Token内容。
1 | name: 自动部署 |
ps:
1 | git init #初始化 |
1 | git add . |
此时,博客更新的逻辑就变为,博客项目路径中的内容变动后,会提交至私有博文内容仓库中,内容仓库变动后Github Action会将内容重新部署到github.io仓库中。
想要撰写新博客时,打开博客项目路径,唤出git bash窗口,输入new指令创建md文件。
1 | $ hexo new "博客名" |
提示创建成功后,在生成的md文件中撰写文章,然后git add, git commmit, git push后,重新访问github.io页面即可看到更新内容。
1.post_asset_folder
当博文中需要引入图片等资源时,可以将_config.yml中的post_asset_folder参数设置为true。修改配置文件后,hexo new在创建md文件的同时还会为该博文创建一个同名的文件夹,用以存放博文中所需要的资源。要注意在博文中引入资源的方式,引入方法如图所示,使用传统的“叹号中括号括号”的引用方式是无效的。
图片未正常显示,先尝试删除Hexo-asset-image、Hexo-image-link等插件,按照官方文档逐步重新实现图片引用,还是不能正常渲染再参考其它博文。
查看网页原代码发现图片引用的位置全是.com文件:
图片显示bug参考
hexo-asset-image部分
2.创建类别、标签
网上很多hexo创建类别的教程,笔者在最开始创建分类时陷入了一个误区,就是觉得要“先生成一个类别,然后在博文中才可以设置为这个类别”,其实不是。
实际上只要按照教程操作之后,你就可以任意的为你的博文添加类别了,hexo new page categories更“像是”允许作者为博文添加类别的开关。
3.引用历史博文
详见如何在Hexo的博文中引用自己的文章,要注意中间写的是文件名,不是博文title名。
4.博文分页
当按类别访问博文且该类别博文数量较多时,Hexo会根据博客数量进行分页,默认一页内摆放十篇博文,可以在_config.yml中的per_page属性进行修改。