一、前言 在上一篇教程中,我们把我们的博客部署在了 GitHub Pages 上,虽然能够在公网上访问,但是可能访问速度并不理想。以 yngcy.github.io 为例,站长工具测 ping 值,国内延迟比较高,甚至有些地区超时! 为了解决访问速度慢、甚至访问不上的问题,我们可以把博客部署在别的地方,例如服务器上。 许多云服务厂商提供了轻量云服务器,在经济条件允许的情况下,我们可以将博客部署在云服务器上。在本篇教程中,我选择了腾讯云的轻量云服务器(2核2G 4M带宽)。你也可以选择阿里云、华为云等云服务厂商推出的服务器,对于部署博客的服务器配置要求并不高(当然还是配置越高越好)。应用镜像选择腾讯云自家的应用镜像(带宝塔面板),这个无所谓,只要是 Linux 操作系统即可,无非就是命令或配置上可能会有区别。 在购买完服务器后,我们可以通过公网 IP 来访问服务器。但是这样做并不安全,公网 IP 的暴露使得服务器被攻击的风险大大增加。一般需要绑定域名,在通过 DNS 解析到 IP 地址。 顶级域名根据经济情况选择,一般 .com 的比较贵。不管是什么域名,对于国内的服务器(也就是服务 ...
一、前言 在上一篇教程中,我们已经搭建了本地的博客,并且能够在本地调试查看博客页面。但是我们搭建博客的目的之一就是让别人能够看到我们的博客,这样做其他人并不能看到。因此需要将其部署在公网环境中,以便其他人可以通过链接访问到你的博客。 本篇教程介绍如何将博客发布在 GitHub Pages 上。在网上你可以找到很多类似本篇的教程,但是大多数文章已经是几年前的了,即使这些教程仍然具有一定的参考价值。本篇教程为尽可能采用相关技术的最新版本(截至本篇博客的最后更新时间),同时总结我在部署时碰到的一些问题,帮助你能在部署时少踩一些坑。 二、相关技术概述 在本篇教程中会有一些术语,可能对零基础的小伙伴来说有些生疏。为了方便你的更好地理解,下面我将介绍它们。同时,为了节省你的时间,我会尽我所能用精简的语言让你快速理解这些技术。如果你想做更深层次的了解,可以自行 Google 或是在评论区进行交流讨论。当然,你若都有了解过的话,可以选择跳过这一小节。 2.1 Git、GitHub、GitHub Pages是什么? Git 是一个 分布式版本控制系统。版本控制是指记录若干文件的变化,并以版本来记录不同状 ...
一、前言 1.1 博客搭建方式 作为一个程序猿,博客可以帮助我们总结知识和经验并分享给他人。我们可以用三种方式来搭建我们的博客: (1)在线博客网站,如 CSDN、博客园、掘金社区和语雀等; (2)动态博客框架,如 WordPress、Halo 等; (3)静态博客框架,如 Hexo、Hugo 等。 它们的优缺点如下: 博客搭建方式 优点 缺点 在线博客网站 简便易用;维护简单;社区功能完善;免费使用 定制性差;数据权限小(点名吐槽某N给我的文章加VIP阅读);广告多;文章迁移困难 动态博客框架 功能强大;较高的可定制性;一般提供后台管理界面,便于管理;插件多,扩展性强 存在性能问题,如果服务器性能差,用户体验差;有一定的安全风险,需要做额外的安全防护 静态博客框架 性能好,可通过 CDN 加速访问;安全风险低;成本低,可直接部署在 GitHub Pages 等网站托管服务上;维护简单,只需要维护博客源码即可,不需要维护服务器 学习成本高,坑比较多比较劝退;无自带的后台管理,只能通过维护源码或引入第三方后台管理系统 1.2 搭建方式选择 这三种方式我都体验过 ...
语法笔记
未读MySQL中的窗口函数 前言 最近在练习 sql 时碰到了一类题:查询表中的前 n 项。直接想到的是用 order 排序然后使用 limit 获取前 n 项。例如,获取每天刷题通过数最多的前三名用户id和刷题数,DDL 如下: 1234567891011121314drop table if exists questions_pass_record;CREATE TABLE `questions_pass_record` (`question_type` varchar(32) NOT NULL,`device` varchar(14) NOT NULL,`pass_count` int NOT NULL,`date` date NOT NULL);INSERT INTO questions_pass_record VALUES(101, 'java', 'app', 2, '2020-03-01');INSERT INTO questions_pass_record VALUES(102, 'sql', 'pc', 15,'2020-03-01');INSERT INTO quest ...
什么是 Stream Stream 简介 在处理集合数据时,常常需要对其进行各种操作,例如过滤、映射、规约等。而 Java 8 中引入的 Stream 流为我们提供一种更加简洁和灵活的方式来处理数据。 Stream 特性 stream 不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。 stream 不会改变数据源,通常情况下会产生一个新的集合或一个值。 stream 具有延迟执行特性,只有调用终端操作时,中间操作才会执行。 如何使用 Stream 简单来讲,Stream 流操作分为以下 3 种: 创建 Stream 流 Stream 流中间处理 终止 Stream 流 创建 Stream 流 从 Collection 创建流 12345678910public class CollectionToStreamExample { public static void main(String[] args) { List<String> animals = Arrays.asList("cat", "dog", "tiger", "fi ...
算法教程
未读Um_nik: Stop learning useless algorithms, go and solve some problems, learn how to use binary search! 1、基本概述 二分算法的基本用法是在一个单调有序的集合或函数中查找一个解。因此,当问题的答案具有单调性时,可以考虑将问题的解,通过二分,转化为某种判定问题。每次分成左右两个区间,通过判断调整上下界,即继续搜索左区间还是右区间,直到找到目标元素。 更进一步的说,还可以扩展到三分算法取解决峰值函数的极值问题。三分算法将区间分成 3 个部分,可以明确判断答案不在哪一部分,舍弃三分之一的空间,继续进行查找。 此外,还有浮点数上的二分,其与整数二分大同小异。 总结一下,一般初学者在练习时可能会碰到以下问题: 整数集上的二分,需要注意左右区间的开闭情况,避免漏掉答案或者死循环; 实数域上的二分,需要注意精度问题。 二分的实现方法灵活多样,主要是处理边界上的差异时需要仔细考虑。为了避免混淆写法,下面只着重介绍一种实现方法。 2、算法实现 2.1、整数集上的二分 本文介绍的写法保证答案在 区 ...
语法笔记
未读1、基本介绍 扩展运算符:... 它是 ES6 的语法,用于将取出参数对象,然后拷贝到当前对象中。 1234567let o = { name: 'youngcy', age: 21};console.log(o); // { name: 'youngcy', age: 21 }console.log({...o}); // { name: 'youngcy', age: 21 } 2、使用技巧 2.1、对象合并 语法:mergeObject = {...o1, ...o2, ...o3, ...o4} 123456789101112131415let o1 = { name: 'youngcy', age: 21};let o2 = { gender: '男'}let o3 = { gender: '女', age: 35}console.log({...o1, ...o2}); // { name: 'youngcy', age: 21, gender: '男' }console.log({...o1, ...o2, ...
用户个人界面通过携带 cookie 发送给后端,后端根据这个 cookie 再返回数据给前端。为了使得前端发送的请求中携带 cookie,只需要在 myAxios.ts 中添加 myAxios.defaults.withCredentials = true;。但是随即登录出现了跨域问题。 后端的 Controller 层已用 @CrossOrigin 注解,但仍然存在跨域问题。 产生原因 查看 CrossOrigin 注解,可以发现默认参数 DEFAULT_ALLOW_CREDENTIALS 为 false,导致后端不能接收到 cookie。 解决办法 解决的办法有两种: 在 @CrossOrigin 注解中添加 allowCredentials = "true"。 删除 @CrossOrigin 注解,添加 WebMvcConfig 类,允许所有的请求跨域访问或者指定特定的请求路径进行跨域访问: 123456789101112@Configurationpublic class WebConfig implements WebMvcConfigurer { @Overr ...
MySQL 安装 本文基于 CentOS 7.9 系统进行安装。 1. 准备安装包 这里准备的是 mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz,并将其直接放在了 /root 目录下。 1[root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz 注意这里的 glibc2.12,是安装 MySQL 所需的的 glibc 版本,在安装之前先输入 rpm -q glibc ,查看本系统的 glibc 版本,安装的版本不能高于系统的版本,否则需要自行下载在配置(比较麻烦,不推荐)。 2. 卸载系统⾃带的 MARIADB 输入 rpm -qa|grep mariadb 检查是否有 mariadb,它会和 MySQL 冲突,如果没有则可以跳过此步骤。 输入如下命令卸载: 1[root@localhost ~]# yum -y remove mariadb-libs-5.5.68-1.el7 ...
Git 工具安装 方式一:通过包管理器安装 在 Linux 上安装 Git 只需要一行命令即可搞定,在 CentOS 系统中,执行如下命令即可安装: 1[root@localhost ~]# yum install git 当然通过这种这种方式安装的不是最新版本的 Git,以本实验环境 CentOS 7.9 来说,这种方式安装的 Git 版本为 1.8.3.1,一般来讲是够用的。 方式二:通过源码编译安装 如果想要安装最新版本的 Git,需要自行下载 Git 源码来编译安装。 https://git-scm.com/download 1. 准备 Git 安装包 这里选择的是 2.40.1 版,将下载好的安装包 git-2.40.1 放在 root 目录下,然后解压,得到 git-2.40.1 目录。 1[root@localhost ~]# tar -zxvf git-2.40.1.tar.gz 2. 提前装好可能需要的依赖 1[root@localhost ~]# yum install curl-devel expat-devel gettext-devel openssl- ...