<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>jking の 博客</title><description>记录编程、Linux、操作系统与日常学习中的探索和思考。</description><link>https://jking412.github.io/</link><language>zh-CN</language><item><title>正则表达式指南</title><link>https://jking412.github.io/2025/04/27/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://jking412.github.io/2025/04/27/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%8C%87%E5%8D%97/</guid><description>人生苦短，我用正则。 你有没有过这种体验：看着一串奇形怪状的符号，心里直犯嘀咕——这是在写魔法咒语吗？别怕，那不是巫术，那是正则表达式！虽然它一开始看起来像外星语言，但一旦掌握，你就能轻松驾驭文本世界，像武林高手挥剑断水一样精准又帅气。 今天，让我们带着轻松的心情，一起拆解正则表达式这位“复杂又迷人</description><pubDate>Sat, 26 Apr 2025 23:59:10 GMT</pubDate></item><item><title>Git小白成长记</title><link>https://jking412.github.io/2025/04/26/Git%E5%B0%8F%E7%99%BD%E6%88%90%E9%95%BF%E8%AE%B0/</link><guid isPermaLink="true">https://jking412.github.io/2025/04/26/Git%E5%B0%8F%E7%99%BD%E6%88%90%E9%95%BF%E8%AE%B0/</guid><description>Git 是现在最火的版本控制工具，开发合作时几乎人人都离不开它。但用着用着，什么工作区、暂存区、本地仓库、远程仓库就容易搞混；git checkout、git reset、git revert 这些命令也常常傻傻分不清。别担心，今天这篇文章就来帮你把 Git 理个明明白白，一次性搞懂它的运行逻辑和常</description><pubDate>Fri, 25 Apr 2025 23:21:28 GMT</pubDate></item><item><title>解决Ubuntu24安装搜狗输入法失败</title><link>https://jking412.github.io/2025/03/09/%E8%A7%A3%E5%86%B3Ubuntu24%E5%AE%89%E8%A3%85%E6%90%9C%E7%8B%90%E8%BE%93%E5%85%A5%E6%B3%95%E5%A4%B1%E8%B4%A5/</link><guid isPermaLink="true">https://jking412.github.io/2025/03/09/%E8%A7%A3%E5%86%B3Ubuntu24%E5%AE%89%E8%A3%85%E6%90%9C%E7%8B%90%E8%BE%93%E5%85%A5%E6%B3%95%E5%A4%B1%E8%B4%A5/</guid><description>​ 新安装了Ubuntu24之后，无法成功安装搜狐输入法，原因是Ubuntu24使用的是fcitx5，版本过新，最简单的办法就是卸载fcitx5，安装老fcitx 然后剩下的内容按照搜狐官网的安装教程安装即可 https://pinyin.sogou.com/linux/help.php</description><pubDate>Sun, 09 Mar 2025 03:38:31 GMT</pubDate></item><item><title>hexo环境配置记录</title><link>https://jking412.github.io/2025/03/09/hexo%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://jking412.github.io/2025/03/09/hexo%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</guid><description>该博客用于记录如何快速恢复博客环境 配置node 安装node环境 https://nodejs.cn/download/ 安装最新版node，解压后配置环境变量，进入node的bin目录后链接npm和node到/usr/local/bin 然后配置lib/nodemodules到环境变量，node</description><pubDate>Sun, 09 Mar 2025 02:32:45 GMT</pubDate></item><item><title>openssl生成自签名证书</title><link>https://jking412.github.io/2024/01/27/openssl%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6/</link><guid isPermaLink="true">https://jking412.github.io/2024/01/27/openssl%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6/</guid><description>使用openssl可以方便的生成自签名证书，步骤如下 1. 创建私钥 由于是自签名，该私钥会同时用于签名和服务器本身，采用如下命令生成 2. 基于私钥创建csr（证书请求签名），csr中包含服务器公钥 3. 最后使用csr和key来生成证书</description><pubDate>Sat, 27 Jan 2024 02:48:20 GMT</pubDate></item><item><title>lab1-添加内核模块</title><link>https://jking412.github.io/2023/10/17/lab1-%E6%B7%BB%E5%8A%A0%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97/</link><guid isPermaLink="true">https://jking412.github.io/2023/10/17/lab1-%E6%B7%BB%E5%8A%A0%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97/</guid><description>以题目一为例进行内核模块编程： 题目1： 1. 设计一个模块，要求列出系统中所有内核线程的程序名、PID、进程状态、进程优先级、父进程的PID。 2. 设计一个带参数的模块，其参数为某个进程的PID号，模块的功能是列出该进程的家族信息，包括父进程、兄弟进程和子进程的程序名、PID号、进程状态。具体参</description><pubDate>Tue, 17 Oct 2023 04:13:02 GMT</pubDate></item><item><title>在linux上安装wireshark</title><link>https://jking412.github.io/2023/10/10/%E5%9C%A8linux%E4%B8%8A%E5%AE%89%E8%A3%85wireshark/</link><guid isPermaLink="true">https://jking412.github.io/2023/10/10/%E5%9C%A8linux%E4%B8%8A%E5%AE%89%E8%A3%85wireshark/</guid><description>wireshark是一款很好用的抓包工具，它可以安装在windows,linux,macos等平台上，在这个教程中，会告诉你如何安装wireshark在ubuntu上 用apt安装wireshark 可以直接使用apt安装wireshark，但是这样无法安装新版本，所以最好先手动添加仓库 安装时你可</description><pubDate>Tue, 10 Oct 2023 02:29:28 GMT</pubDate></item><item><title>kube-proxy工作机制浅析</title><link>https://jking412.github.io/2023/10/09/kube-proxy%E5%B7%A5%E4%BD%9C%E6%9C%BA%E5%88%B6%E6%B5%85%E6%9E%90/</link><guid isPermaLink="true">https://jking412.github.io/2023/10/09/kube-proxy%E5%B7%A5%E4%BD%9C%E6%9C%BA%E5%88%B6%E6%B5%85%E6%9E%90/</guid><description>kube-proxy是k8s中的重要组件，在k8s的整个网络模型中有着重要的作用，kube-proxy有着多种工作模式，本博客只考虑在iptables模式下工作的kube-proxy iptables iptables是linux中著名的防火墙，有着过滤，转发等多种功能，iptables中有多张ta</description><pubDate>Mon, 09 Oct 2023 01:15:59 GMT</pubDate></item><item><title>Go init函数分析</title><link>https://jking412.github.io/2023/10/05/Go-init%E5%87%BD%E6%95%B0%E5%88%86%E6%9E%90/</link><guid isPermaLink="true">https://jking412.github.io/2023/10/05/Go-init%E5%87%BD%E6%95%B0%E5%88%86%E6%9E%90/</guid><description>Go的所有init函数会在main函数执行之前运行，init的执行是runtime帮助我们完成的，我们来看看init的运行机制。 init函数的编译处理 initTask是init初始化工作的关键结构体，一个包会有一个对应的initTask: 1. state: 该包的初始化函数是否被执行 - 0:</description><pubDate>Thu, 05 Oct 2023 06:09:26 GMT</pubDate></item><item><title>重新认识C指针</title><link>https://jking412.github.io/2023/10/03/%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86C%E6%8C%87%E9%92%88/</link><guid isPermaLink="true">https://jking412.github.io/2023/10/03/%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86C%E6%8C%87%E9%92%88/</guid><description>指针是C语言中的难点，但其本质和其他类型并无不同，下面我们从几个方面来重新认识指针。 在这个过程中，我需要你先抛去对指针类型的认识，先忘掉指针的类型，认识纯粹的指针，然后再重新认识带着类型的指针。 认识纯粹的指针 我们先抛开指针的类型，看看指针是什么 output: 可以看到不管什么类型的指针的都是</description><pubDate>Tue, 03 Oct 2023 01:49:37 GMT</pubDate></item><item><title>记录一次双系统linux未删除干净导致系统无法正常启动</title><link>https://jking412.github.io/2023/09/21/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1%E5%8F%8C%E7%B3%BB%E7%BB%9Flinux%E6%9C%AA%E5%88%A0%E9%99%A4%E5%B9%B2%E5%87%80%E5%AF%BC%E8%87%B4%E7%B3%BB%E7%BB%9F%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%90%AF%E5%8A%A8/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/21/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1%E5%8F%8C%E7%B3%BB%E7%BB%9Flinux%E6%9C%AA%E5%88%A0%E9%99%A4%E5%B9%B2%E5%87%80%E5%AF%BC%E8%87%B4%E7%B3%BB%E7%BB%9F%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%90%AF%E5%8A%A8/</guid><description>由于自己电脑的磁盘总共只有512G，能分配给双系统linux的空间实际上不会太多，所以我决定将其删除，安装到1T大小SSD的U盘上，但是删除以后由于linux的分区信息还存在，所以开机以后将进入grub，正常开机只能通过进入BIOS，或许也可以调正分区的启动顺序，但是我的电脑并不可以。 下面记录一下</description><pubDate>Thu, 21 Sep 2023 02:27:37 GMT</pubDate></item><item><title>Dockerfile中CMD和ENTRYPOINT的区别</title><link>https://jking412.github.io/2023/09/14/Dockerfile%E4%B8%ADCMD%E5%92%8CENTRYPOINT%E7%9A%84%E5%8C%BA%E5%88%AB/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/14/Dockerfile%E4%B8%ADCMD%E5%92%8CENTRYPOINT%E7%9A%84%E5%8C%BA%E5%88%AB/</guid><description>CMD和ENTRYPOINT的功能看起来比较类似，但是两者还是存在一些区别。 容器启动命令的构成 我们可以通过docker ps查看容器的启动信息 可以通过COMMAND字段查看到容器的启动命令为/app/web 实际上COMMAND由ENTRYPOINT+CMD构成 我们在docker run后默</description><pubDate>Thu, 14 Sep 2023 11:41:16 GMT</pubDate></item><item><title>记录一次Go打包Docker镜像的问题</title><link>https://jking412.github.io/2023/09/14/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1Go%E6%89%93%E5%8C%85Docker%E9%95%9C%E5%83%8F%E7%9A%84%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/14/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1Go%E6%89%93%E5%8C%85Docker%E9%95%9C%E5%83%8F%E7%9A%84%E9%97%AE%E9%A2%98/</guid><description>在Linux环境下编译好Go源文件以后我尝试将最后的可执行文件复制到Docker镜像alpine中。 这是一个最简单的Go Web代码 以及对应的Dockerfile 在最后运行容器时始终出现了file not found的警告，容器一直启动失败，我尝试通过exec进入到容器内部查看文件，发现文件确</description><pubDate>Thu, 14 Sep 2023 11:18:30 GMT</pubDate></item><item><title>Go切片扩容</title><link>https://jking412.github.io/2023/09/09/Go%E5%88%87%E7%89%87%E6%89%A9%E5%AE%B9/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/09/Go%E5%88%87%E7%89%87%E6%89%A9%E5%AE%B9/</guid><description>以下的内容为Go1.20.2版本的扩容方式 Go数组的扩容机制简单来说分为两种情况 - 一种是原来的容量小于256，此时会将原来的容量翻倍作为新的容量 - 一种是容量大于等于256，会按照以下方式扩容直至可以满足需求 $$ newcap+=(newcap+3∗256)/4 $$ 这是大致的分配方式，</description><pubDate>Sat, 09 Sep 2023 08:20:42 GMT</pubDate></item><item><title>xv6中创建syscall</title><link>https://jking412.github.io/2023/09/08/xv6%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E2%80%94%E2%80%94bootloader/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/xv6%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E2%80%94%E2%80%94bootloader/</guid><description>xv6的启动过程大致可以分为BIOS-bootloader-kernel，三个环节，本小节主要讲述bootloader的相关内容。 BIOS的作用是将磁盘的第一个扇区的内容移入到地址为0x7c00的位置，然后把控制权交给这份内容。这一份内容就是bootloader。 bootloader由boota</description><pubDate>Fri, 08 Sep 2023 08:20:49 GMT</pubDate></item><item><title>xv6系统启动——bootloader</title><link>https://jking412.github.io/2023/09/08/xv6%E4%B8%AD%E5%88%9B%E5%BB%BAsyscall/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/xv6%E4%B8%AD%E5%88%9B%E5%BB%BAsyscall/</guid><description>我们以在xv6中添加一个date系统调用为例，介绍在xv6中添加系统调用的方法和原理。 date syscall介绍 date系统调用可以获取系统当前的UTC时间。 在我们完成date系统调用后，我们利用这个系统调用做一个小小的工具，可以打印当前的系统时间，工具代码如下： date.c 变量r是我们</description><pubDate>Fri, 08 Sep 2023 08:20:47 GMT</pubDate></item><item><title>ssh的原理</title><link>https://jking412.github.io/2023/09/08/ssh%E7%9A%84%E5%8E%9F%E7%90%86/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/ssh%E7%9A%84%E5%8E%9F%E7%90%86/</guid><description>SSH是一种网络协议，用于计算机间的加密登录。 ssh保证安全的原理 SSH之所以能够保证安全，原因在于它采用了公钥加密。 整个过程是这样的： 1. 远程主机收到用户的登录请求，把自己的公钥发给用户。 2. 用户使用这个公钥，将登录密码加密后，发送回来。 3. 远程主机用自己的私钥，解密登录密码，如</description><pubDate>Fri, 08 Sep 2023 08:20:46 GMT</pubDate></item><item><title>mapreduce简介</title><link>https://jking412.github.io/2023/09/08/mapreduce%E7%AE%80%E4%BB%8B/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/mapreduce%E7%AE%80%E4%BB%8B/</guid><description>MapReduce是一个编程模型，用于处理和生成大数据。用户通过编写Map函数处理输入键值对生成中间键值对，通过编写Reduce函数来合并所有的中间键值对并生成结果。在我们的日常生活中，大部分的任务都可以被抽象成一个MapReduce模型，并通过这个模型解决问题。 MapReduce介绍 我们所遇到</description><pubDate>Fri, 08 Sep 2023 08:20:45 GMT</pubDate></item><item><title>C语言的内存模型</title><link>https://jking412.github.io/2023/09/08/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/</guid><description>- 程序为什么要被编译器编译之后才可以运行 - 编译器在把C语言转换成机器码的过程中做了什么 - 最后编译出来的可执行文件里面是什么，除了机器码还有什么，是如何组织的 - include 是什么意思，这意味着什么，C语言库是如何实现的 - 不同编译器和不同硬件平台以及不同的操作系统，最终编译出来的结</description><pubDate>Fri, 08 Sep 2023 08:20:44 GMT</pubDate></item><item><title>https简述</title><link>https://jking412.github.io/2023/09/08/https%E7%AE%80%E8%BF%B0/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/https%E7%AE%80%E8%BF%B0/</guid><description>在了解https之前，我们先来了解一下非对称加密。 非对称加密的数学原理 非对称加密，就是加密和解密用到的不是一个密钥，一般来说，我们用公钥加密，私钥解密。 下面我们来介绍非对称加密的数学原理，我们来举一个简单的例子： 易知x = 4，然后，我们将x的位置切换 我们通过枚举，似乎也可以得到答案，x </description><pubDate>Fri, 08 Sep 2023 08:20:44 GMT</pubDate></item><item><title>80386内存管理</title><link>https://jking412.github.io/2023/09/08/80386%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/</link><guid isPermaLink="true">https://jking412.github.io/2023/09/08/80386%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/</guid><description>80386转换逻辑地址到物理地址经过下面的两步： 1. 段翻译，把一个逻辑地址（包含一个段选择子和段偏移量）转换成一个线性地址 2. 页翻译，把一个线性地址准换成一个物理地址，这一步是可选的，取决于系统软件的设计者，在保护模式下段翻译是必须的而页翻译是可选的 这些转换对应用程序而言都是不可见的，下图</description><pubDate>Fri, 08 Sep 2023 08:20:43 GMT</pubDate></item><item><title>制作iso镜像文件</title><link>https://jking412.github.io/2023/08/15/%E5%88%B6%E4%BD%9Ciso%E9%95%9C%E5%83%8F%E6%96%87%E4%BB%B6/</link><guid isPermaLink="true">https://jking412.github.io/2023/08/15/%E5%88%B6%E4%BD%9Ciso%E9%95%9C%E5%83%8F%E6%96%87%E4%BB%B6/</guid><description>本教程会遵照El-Torito标准生成ISO文件。 编写内核文件 这里我们简单的写一个打印helloworld的汇编即可 我们编译上述文件 然后我们将内容放在新的位置 创建iso文件 最后我们可以用qemu或者vmware启动</description><pubDate>Tue, 15 Aug 2023 08:41:35 GMT</pubDate></item><item><title>计算机网络笔记</title><link>https://jking412.github.io/2023/08/06/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0/</link><guid isPermaLink="true">https://jking412.github.io/2023/08/06/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0/</guid><description>1.2 因特网概述 网络，互联网和因特网 - 网络由若干节点和连接这些节点的链路组成 - 多个网络可以由路由器互连起来，这样就构成了范围更大的网络，即互联网 - 因特网是全球最大的计算机网络 因特网的组成 - 边缘部分 - 由所有连接在因特网上的主机组成 - 核心部分 - 由大量网络和连接这些网络的</description><pubDate>Sun, 06 Aug 2023 09:02:25 GMT</pubDate></item><item><title>lab-2(mit-6.828)</title><link>https://jking412.github.io/2023/07/16/lab-2-mit-6-828/</link><guid isPermaLink="true">https://jking412.github.io/2023/07/16/lab-2-mit-6-828/</guid><description>Exercise 1 要求完成的函数内容如下 Exercise 4 Exercise 5 Question What entries (rows) in the page directory have been filled in at this point? What addresses do t</description><pubDate>Sun, 16 Jul 2023 12:04:34 GMT</pubDate></item><item><title>lab-1(mit-6.828)</title><link>https://jking412.github.io/2023/07/15/lab-1-mit-6-828/</link><guid isPermaLink="true">https://jking412.github.io/2023/07/15/lab-1-mit-6-828/</guid><description>Exercise 3 1. At what point does the processor start executing 32-bit code? What exactly causes the switch from 16- to 32-bit mode? 从这一行开始执行32行代码 开启保护</description><pubDate>Fri, 14 Jul 2023 22:33:21 GMT</pubDate></item><item><title>linux搭建dosbox环境</title><link>https://jking412.github.io/2023/06/29/linux%E6%90%AD%E5%BB%BAdosbox%E7%8E%AF%E5%A2%83/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/29/linux%E6%90%AD%E5%BB%BAdosbox%E7%8E%AF%E5%A2%83/</guid><description>dosbox能够让我们在现代os上使用早期dos环境。 dos环境下的汇编是比较友好的，dos本身简单的机制也有利于我们对系统有初步的理解。 下面我们来在linux环境中搭建dosbox和其汇编环境。 安装dosbox 我们直接使用包管理工具安装dosbox即可。 安装完成以后我们需要修改一些配置。</description><pubDate>Wed, 28 Jun 2023 23:56:36 GMT</pubDate></item><item><title>ubuntu美化macos主题</title><link>https://jking412.github.io/2023/06/08/ubuntu%E7%BE%8E%E5%8C%96macos%E4%B8%BB%E9%A2%98/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/08/ubuntu%E7%BE%8E%E5%8C%96macos%E4%B8%BB%E9%A2%98/</guid><description>最近突然想美化一下自己ubuntu的风格，想试一试macos风格的ubuntu，本博客记录这次的美化过程。 视频参考： https://www.bilibili.com/video/BV1gT411m7FF/?spmidfrom=333.337.search-card.all.click 此外先下载</description><pubDate>Thu, 08 Jun 2023 09:23:20 GMT</pubDate></item><item><title>tmux使用教程</title><link>https://jking412.github.io/2023/06/07/tmux%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/07/tmux%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>在传统的终端使用中，一个终端窗口是与一个会话绑定的，会话是与终端中启动的进程是连接在一起，这就意味着如果你关闭了一个终端，那么其内部的进程也会终止，而tmux就是一个可以将终端与会话解绑的工具，在此基础上，tmux可以对终端进行各种各样的操作。 快速开始 Tmux一般需要自己安装，用包管理工具直接安</description><pubDate>Wed, 07 Jun 2023 12:42:21 GMT</pubDate></item><item><title>vim的基本用法</title><link>https://jking412.github.io/2023/06/07/vim%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/07/vim%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/</guid><description>vim是一款Linux下的文本编辑器，当我们需要在终端环境下编辑文本时，vim就是我们最好的选择。vim看起来似乎对初学者不太友，但是想要上手使用vim并不困难。 认识vim 我们先来宏观的认识vim，vim常用的有四个模式： 1. 正常模式（Normal-mode） 2. 插入模式（Insert-</description><pubDate>Wed, 07 Jun 2023 03:49:55 GMT</pubDate></item><item><title>搭建riscv32环境</title><link>https://jking412.github.io/2023/06/03/%E6%90%AD%E5%BB%BAriscv32%E7%8E%AF%E5%A2%83/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/03/%E6%90%AD%E5%BB%BAriscv32%E7%8E%AF%E5%A2%83/</guid><description>hdu给我们提供的虚拟机非常庞大，而且放在百度网盘上:yum:，极大的占用了我们的时间，金钱还有本地空间，虽然不清楚学校的虚拟机到底提供了多少东西，但实际上riscv32所需的环境并不算太多，既然如此，为什么不在本地自己搭建一个呢？ 以下操作均在ubuntu 22.04下执行。 要搭建环境，我们需要</description><pubDate>Sat, 03 Jun 2023 04:47:23 GMT</pubDate></item><item><title>lab2-编译内核并添加系统调用</title><link>https://jking412.github.io/2023/06/02/lab2-%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8%E5%B9%B6%E6%B7%BB%E5%8A%A0%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/02/lab2-%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8%E5%B9%B6%E6%B7%BB%E5%8A%A0%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/</guid><description>在开始之前，请现配置好基本的环境，请你先完成下面博客中的qemu和busybox部分 因为内核需要添加系统调用，我们需要重新编译。 本实验均在ubuntu 22.04下进行，编译的内核版本是5.19（低版本内核会在添加系统调用时略有不同）。 添加系统调用 1. linux-5.19/arch/x86</description><pubDate>Fri, 02 Jun 2023 14:26:59 GMT</pubDate></item><item><title>编译x86_64 linux并运行在qemu上</title><link>https://jking412.github.io/2023/06/02/%E7%BC%96%E8%AF%91x86_64%20linux%E5%B9%B6%E8%BF%90%E8%A1%8C%E5%9C%A8qemu%E4%B8%8A/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/02/%E7%BC%96%E8%AF%91x86_64%20linux%E5%B9%B6%E8%BF%90%E8%A1%8C%E5%9C%A8qemu%E4%B8%8A/</guid><description>本节内容将会告诉你如何自己编译内核并且将这个内核运行在qemu模拟器上。在成功运行之后，我们可以自由的修改并验证我们的内核，以下操作均在Ubntun 22.04下完成。 在开始之前我们有一些需要注意的东西： 1. 在编译过程中，你会遇到各种各样的环境问题，造成的原因可能是多样的，尤其是在遇到这样比较</description><pubDate>Fri, 02 Jun 2023 12:32:52 GMT</pubDate></item><item><title>在u盘中安装ubuntu</title><link>https://jking412.github.io/2023/06/01/%E5%9C%A8u%E7%9B%98%E4%B8%AD%E5%AE%89%E8%A3%85ubuntu/</link><guid isPermaLink="true">https://jking412.github.io/2023/06/01/%E5%9C%A8u%E7%9B%98%E4%B8%AD%E5%AE%89%E8%A3%85ubuntu/</guid><description>你是否因为经常使用不同的电脑，但是编程环境不同而苦恼呢，今天的文章会教你把ubuntu装入移动固态中，现在SSD的价格已经很便宜了，这里我会用1T的移动固态为例，教会你如何将ubuntu装入移动其中（同时支持UEFI和BIOS）。 在开始之前，有几点需要提醒： 1. 操作不当可能会导致数据损失，严重</description><pubDate>Thu, 01 Jun 2023 12:41:56 GMT</pubDate></item><item><title>如何阅读一本书</title><link>https://jking412.github.io/2023/01/25/%E5%A6%82%E4%BD%95%E9%98%85%E8%AF%BB%E4%B8%80%E6%9C%AC%E4%B9%A6/</link><guid isPermaLink="true">https://jking412.github.io/2023/01/25/%E5%A6%82%E4%BD%95%E9%98%85%E8%AF%BB%E4%B8%80%E6%9C%AC%E4%B9%A6/</guid><description>阅读的四个阶段 1. 基础阅读 2. 检视阅读 3. 分析阅读 4. 主题阅读 阅读中我们应该对下面四个问题有自己的答案 1. 整体来说，这本书在谈什么 2. 作者说了什么，是怎么说的 3. 这本书说的有道理吗，是部分有道理还是全部有道理 4. 这本书和你有什么关系吗 基础阅读 基础阅读就是有着阅读</description><pubDate>Wed, 25 Jan 2023 01:43:17 GMT</pubDate></item><item><title>C语言声明</title><link>https://jking412.github.io/2023/01/04/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%A3%B0%E6%98%8E/</link><guid isPermaLink="true">https://jking412.github.io/2023/01/04/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%A3%B0%E6%98%8E/</guid><description>C语言的声明可以嵌套，所以可以构成一些相当复杂的嵌套，这种过于复杂的声明并不推荐，但是我们应该学会如何去阅读这些声明。并在后面的部分会讲述如何利用typedef去简化这些声明 left-right rule &quot;left-right&quot; rule是解读C语言声明的强力规则，掌握这个规则足够让我们解决几乎</description><pubDate>Wed, 04 Jan 2023 07:09:55 GMT</pubDate></item><item><title>C语言的数据存储</title><link>https://jking412.github.io/2023/01/02/C%E8%AF%AD%E8%A8%80%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/</link><guid isPermaLink="true">https://jking412.github.io/2023/01/02/C%E8%AF%AD%E8%A8%80%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/</guid><description>C语言允许类型之间进行转换，包括隐式的转换和强制转换，为了我们能更好的理解这些特性，我们需要了解C语言的数据在计算机中到底是如何存储的。 整型数据 我们先从简单的整型数据开始。 无符号整数的储存比较简单，直接以二进制形式储存，64位机的signed int存储形式如下 而有符号整数的表示稍复杂，有符</description><pubDate>Mon, 02 Jan 2023 11:43:45 GMT</pubDate></item><item><title>C语言的弱类型性</title><link>https://jking412.github.io/2023/01/01/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%BC%B1%E7%B1%BB%E5%9E%8B%E6%80%A7/</link><guid isPermaLink="true">https://jking412.github.io/2023/01/01/C%E8%AF%AD%E8%A8%80%E7%9A%84%E5%BC%B1%E7%B1%BB%E5%9E%8B%E6%80%A7/</guid><description>C语言是一个强类型的语言，变量必须先定义再使用，而且变量如果不经过转换，那么将永远保持原来的类型。但强和弱是相对的，如果我们把C语言和其它的一些强类型语言相比较，我们会发现C语言的一些弱类型特性，这些特性会在某些时候坑害我们。当然，讨论强类型还是弱类型是没有意义的事情，重要的是从这些对比中学到一些东</description><pubDate>Sun, 01 Jan 2023 09:33:44 GMT</pubDate></item><item><title>GDB快速入门</title><link>https://jking412.github.io/2023/01/01/gdb%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</link><guid isPermaLink="true">https://jking412.github.io/2023/01/01/gdb%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</guid><description>GDB全称GNU symbolic debugger，诞生于GNU计划，是一款程序调试器，如果脱离IDE环境，GDB将会是你强大的帮手。 GDB下载和使用 在windows环境中只要下载过C语言应该就会有GDB，这里主要介绍linux环境，也很简单 调试一个程序，例如我们现在要调试可执行程序a.ou</description><pubDate>Sun, 01 Jan 2023 07:17:06 GMT</pubDate></item><item><title>指针和数组并不相同——C语言</title><link>https://jking412.github.io/2022/12/27/%E6%8C%87%E9%92%88%E5%92%8C%E6%95%B0%E7%BB%84%E5%B9%B6%E4%B8%8D%E7%9B%B8%E5%90%8C%E2%80%94%E2%80%94C%E8%AF%AD%E8%A8%80/</link><guid isPermaLink="true">https://jking412.github.io/2022/12/27/%E6%8C%87%E9%92%88%E5%92%8C%E6%95%B0%E7%BB%84%E5%B9%B6%E4%B8%8D%E7%9B%B8%E5%90%8C%E2%80%94%E2%80%94C%E8%AF%AD%E8%A8%80/</guid><description>在我们初学C语言时，我们会有这样一个认知或者感觉：指针和数组是相同的。我们也经常干着这样的事情，比如下面这样代码。 这样看起来两者似乎确实没有差别，指针可以像数组一样使用[]，而数组名也可以解引用，而且它们的结果是一致的。 或者在我们定义函数时，也可能会把两者当成一种处理。 一切看起来都是那么自然。</description><pubDate>Tue, 27 Dec 2022 12:33:02 GMT</pubDate></item><item><title>Dosbox和masm搭建汇编环境</title><link>https://jking412.github.io/2022/12/26/Dosbox%E5%92%8Cmasm%E6%90%AD%E5%BB%BA%E6%B1%87%E7%BC%96%E7%8E%AF%E5%A2%83/</link><guid isPermaLink="true">https://jking412.github.io/2022/12/26/Dosbox%E5%92%8Cmasm%E6%90%AD%E5%BB%BA%E6%B1%87%E7%BC%96%E7%8E%AF%E5%A2%83/</guid><description>学习汇编语言之前，需要有一个环境来运行汇编代码，所以此文记录下自己的环境搭建过程 下载Dosbox和masm Dosbox提供32位机环境，masm负责编译汇编代码 Doxbox下载地址 Dos官网 点击Download下载即可 接下来安装masm https://github.com/xDarkL</description><pubDate>Mon, 26 Dec 2022 02:43:39 GMT</pubDate></item><item><title>(二)docker的基本使用</title><link>https://jking412.github.io/2022/12/17/docker%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://jking412.github.io/2022/12/17/docker%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</guid><description>在第一节的内容中，我们了解了docker的作用，以及完成了docker的安装和docker的hello world，初步进入了docker的时间，这一节内容会从docker的基本架构出发，讲解组成架构中组成部分的关系以及如何操作它们。 Docker的架构 接下来我会讲解docker的基本使用方式，在</description><pubDate>Sat, 17 Dec 2022 01:43:24 GMT</pubDate></item><item><title>(一)开启docker的旅程</title><link>https://jking412.github.io/2022/12/16/%E4%BB%8Edocker%E5%BC%80%E5%90%AF%E7%9A%84%E6%97%85%E7%A8%8B/</link><guid isPermaLink="true">https://jking412.github.io/2022/12/16/%E4%BB%8Edocker%E5%BC%80%E5%90%AF%E7%9A%84%E6%97%85%E7%A8%8B/</guid><description>天下苦环境久矣 printf(&quot;Hello World!&quot;)，这也许是你学习C语言时打印的第一行语句，C语言作为大多数人的入门语言，Hello World开始了我们的代码生涯。对于过去初学的我们而言，要打印出这一行代码并不轻松，我们要安装一个集成开发环境，可能是CodeBlocks，可能是visua</description><pubDate>Fri, 16 Dec 2022 03:34:36 GMT</pubDate></item><item><title>mysql索引使用指南</title><link>https://jking412.github.io/2022/12/06/mysql%E7%B4%A2%E5%BC%95%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://jking412.github.io/2022/12/06/mysql%E7%B4%A2%E5%BC%95%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid><description>mysql索引概述 在我们正式开始讲索引之前，我们不妨回想一个场景，当我们使用字典的时候，我们并不会直接去整本书去检索内容，而是先去查找目录，根据目录给我们提供的页码，在从字典中查询信息，索引就类似于字典中的目录，可以大大提高数据检索的效率。 mysql的索引机制是mysql提供给我们的一个超强的功</description><pubDate>Tue, 06 Dec 2022 11:56:18 GMT</pubDate></item><item><title>nginx基本使用指南</title><link>https://jking412.github.io/2022/11/24/nginx%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/24/nginx%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid><description>nginx是什么 nginx是一个由C语言编写的轻量级web服务器，占用内存小，并发能力强，性能非常优越，是当下非常流行的web服务器。除此以外，nginx还支持相当多的功能，包括但不限于 1. 反向代理 2. 负载均衡 3. 动静分离 这些也是nginx常见的应用场景，今天我们就来全面的介绍一下n</description><pubDate>Thu, 24 Nov 2022 11:07:56 GMT</pubDate></item><item><title>用git hooks自动化部署hexo</title><link>https://jking412.github.io/2022/11/23/%E7%94%A8git-hooks%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2hexo/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/23/%E7%94%A8git-hooks%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2hexo/</guid><description>背景 hexo是知名的博客部署框架，采用SSG（Static Site Generation）的方式生成静态页面，结合使用github等托管平台可以快速部署我们的站点。hexo也给我们提供了支持部署的插件，安装完成以后我们可以使用hexo deploy推送内容到托管平台。 虽然hexo已经给我们提供</description><pubDate>Wed, 23 Nov 2022 12:35:14 GMT</pubDate></item><item><title>从github page到github action</title><link>https://jking412.github.io/2022/11/22/%E4%BB%8Egithub-page%E5%88%B0github-action/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/22/%E4%BB%8Egithub-page%E5%88%B0github-action/</guid><description>Github Pages和Github Actions github pages是github给我们提供了托管静态网站的强大功能，让我们可以快速部署自己的一些应用。 github actions是github的一个CI/CD平台，可以帮助我们自动化测试，构建和部署项目，也拥有着十分强大的功能。 看似</description><pubDate>Tue, 22 Nov 2022 12:12:12 GMT</pubDate></item><item><title>cas认证流程简介</title><link>https://jking412.github.io/2022/11/18/cas%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B%E7%AE%80%E4%BB%8B/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/18/cas%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B%E7%AE%80%E4%BB%8B/</guid><description>CAS是什么 在认识CAS之前，我们先认识一下SSO。 SSO是Single Sign On的缩写，意为单点登录，是一种应用架构，用户只需要登录一次就可以访问所有相互信任的应用。 SSO只是一种架构，而CAS就是实现SSO的一套方案，CAS是Central Authentication Servic</description><pubDate>Fri, 18 Nov 2022 03:06:56 GMT</pubDate></item><item><title>swaggo的使用</title><link>https://jking412.github.io/2022/11/17/swaggo%E7%9A%84%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/17/swaggo%E7%9A%84%E4%BD%BF%E7%94%A8/</guid><description>swag是一个为Go语言生成文档的框架，主要有两个部分组成 - swag命令行工具，用于把Go注释生成为对应的Swagger2.0文档 - 为多种流行框架准备的插件，可以帮助我们快速嵌入Swag 快速开始(以gin为例) 下载和使用swag命令行工具 如果不能使用记得检查一下你的${GOPATH}/</description><pubDate>Thu, 17 Nov 2022 12:34:59 GMT</pubDate></item><item><title>hexo部署到自己的云服务器</title><link>https://jking412.github.io/2022/11/09/hexo%E9%83%A8%E7%BD%B2%E5%88%B0%E8%87%AA%E5%B7%B1%E7%9A%84%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/09/hexo%E9%83%A8%E7%BD%B2%E5%88%B0%E8%87%AA%E5%B7%B1%E7%9A%84%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/</guid><description>开始之前 本文不会涉及hexo的使用，请先去了解hexo的基本使用和部署，也可以参考我的文章 。 本教程基于Centos7.6，如果是其它linux发行版请自行修改相应命令。 构建服务器环境 安装git和nginx 配置git仓库 下面的用户和目录都可以自己定义，但注意要保持上下文统一 然后我们添加</description><pubDate>Wed, 09 Nov 2022 07:45:11 GMT</pubDate></item><item><title>github-action简明教程</title><link>https://jking412.github.io/2022/11/08/github-action%E7%AE%80%E6%98%8E%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/08/github-action%E7%AE%80%E6%98%8E%E6%95%99%E7%A8%8B/</guid><description>Github Actions是什么 GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台，可用于自动执行生成、测试和部署管道。简单地说，就是通过编写符合Github Actions要求的&quot;脚本&quot;，让Github来执行这一的&quot;脚本&quot;。 在开始之前，还是有必要简单的介绍一下持续集</description><pubDate>Tue, 08 Nov 2022 15:18:52 GMT</pubDate></item><item><title>大学物理光学笔记</title><link>https://jking412.github.io/2022/11/07/%E5%A4%A7%E5%AD%A6%E7%89%A9%E7%90%86%E5%85%89%E5%AD%A6%E7%AC%94%E8%AE%B0/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/07/%E5%A4%A7%E5%AD%A6%E7%89%A9%E7%90%86%E5%85%89%E5%AD%A6%E7%AC%94%E8%AE%B0/</guid><description>简谐振动 $$ 简谐振动的微分方程:\\ \frac{d^2x}{dt^2}+w^2x=0 $$ $$ 简谐振动方程:\\ x=Acos(wt+\varphi) $$ $$ 质点运动的速度:\\ v=\frac{dx}{dt}=-Awsin(wt+\varphi) $$ $$ 如果已知初始条件:\\</description><pubDate>Mon, 07 Nov 2022 06:18:35 GMT</pubDate></item><item><title>hexo建站简明教程</title><link>https://jking412.github.io/2022/11/05/hexo%E5%BB%BA%E7%AB%99%E7%AE%80%E6%98%8E%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://jking412.github.io/2022/11/05/hexo%E5%BB%BA%E7%AB%99%E7%AE%80%E6%98%8E%E6%95%99%E7%A8%8B/</guid><description>安装node.js 前往官网下载长期稳定版的node.js Node.js 下载完成以后检查一下能否打印出版本，正常打印就表示下载成功 安装hexo 我们用npm在全局安装hexo 检查一下是否下载成功 初始化博客 找到你想要放置博客的目录，在当前目录下执行初始化命令，后面跟着你想给博客目录取的名字</description><pubDate>Sat, 05 Nov 2022 01:26:38 GMT</pubDate></item><item><title>『mysql』mysql语法速记</title><link>https://jking412.github.io/2022/10/15/mysql%E8%AF%AD%E6%B3%95%E9%80%9F%E8%AE%B0/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/15/mysql%E8%AF%AD%E6%B3%95%E9%80%9F%E8%AE%B0/</guid><description>一、数据定义 主要使用DDL，用于定义数据对象（数据库，数据表，视图，索引等） 数据库（DATABASE） 创建数据库 删除数据库 选择数据库 数据表（TABLE） 数据表的创建与删除 创建数据表 根据已有表创建 删除数据表 修改数据表 添加列 删除列 修改列 添加主键 删除主键 视图（VIEW） </description><pubDate>Sat, 15 Oct 2022 02:37:10 GMT</pubDate></item><item><title>『mysql』mysql快速入门</title><link>https://jking412.github.io/2022/10/15/mysql%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/15/mysql%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</guid><description>一、基本概念 数据库术语 - 数据库（database）-保存有组织的数据的容器 - 数据表（table）-某种特定数据类型的结构化清单 - 模式（schema）-关于数据库和数据表的特性信息 - 列（column）：表中的一个字段 - 行（row）表中的一个记录 - 主键（primary key）</description><pubDate>Fri, 14 Oct 2022 22:57:38 GMT</pubDate></item><item><title>『git』git和github入门教程</title><link>https://jking412.github.io/2022/10/15/git%E5%92%8Cgithub%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/15/git%E5%92%8Cgithub%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/</guid><description>git简介 git是一个分布式的版本控制系统。 git快速开始 安装git Git - Download 这里不讲述安装教程 体验git 我们先来快速的体验一下git，这一部分我将尽量避开git的细节，专注于git的使用 git和github 要体验git的强大功能，github是必不可少的。 但是</description><pubDate>Fri, 14 Oct 2022 22:57:23 GMT</pubDate></item><item><title>『rss』ttrss极速搭建rss服务</title><link>https://jking412.github.io/2022/10/12/ttrss%E6%9E%81%E9%80%9F%E6%90%AD%E5%BB%BArss%E6%9C%8D%E5%8A%A1/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/12/ttrss%E6%9E%81%E9%80%9F%E6%90%AD%E5%BB%BArss%E6%9C%8D%E5%8A%A1/</guid><description>什么是rss Really Simple Syndication，简易资讯聚合。 名字并不重要，你可以理解为这是一个软件，可以帮助你订阅互联网上各种各样的信息，就好像微博你订阅了博主，然后你就可以特别的收到它的消息一样。只不过现在你可以订阅的范围变成了所有支持rss的网站 下面我们就尝试着使用ttr</description><pubDate>Wed, 12 Oct 2022 08:21:03 GMT</pubDate></item><item><title>『JavaWeb』基本坏境配置</title><link>https://jking412.github.io/2022/10/12/JavaWeb%E5%9F%BA%E6%9C%AC%E5%9D%8F%E5%A2%83%E9%85%8D%E7%BD%AE/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/12/JavaWeb%E5%9F%BA%E6%9C%AC%E5%9D%8F%E5%A2%83%E9%85%8D%E7%BD%AE/</guid><description>配置Tomcat 下载Tomcat9或者更低版本，Tomcat10的包目录结构有较大的改变，没有熟悉之前不建议使用 Apache Tomcat® - Apache Tomcat 9 Software Downloads 下载好之后解压到任意目录里 然后把Tomcat配置到环境变量里，我们需要有三个必</description><pubDate>Wed, 12 Oct 2022 08:19:09 GMT</pubDate></item><item><title>『创新实践』创新实践总结1</title><link>https://jking412.github.io/2022/10/06/%E5%88%9B%E6%96%B0%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%931/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/06/%E5%88%9B%E6%96%B0%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%931/</guid><description>Web服务器:sailboat: 什么是Web服务器 Web服务器一般指网站服务器，是指驻留于因特网上某种类型计算机的程序，可以处理浏览器等Web客户端的请求并返回相应响应，也可以放置网站文件，让全世界浏览；可以放置数据文件，让全世界下载。 Web服务器的本质 Web服务器的本质就是一个程序，不过这</description><pubDate>Thu, 06 Oct 2022 12:32:52 GMT</pubDate></item><item><title>『Go』在Go中使用JWT</title><link>https://jking412.github.io/2022/10/01/%E5%9C%A8Go%E4%B8%AD%E4%BD%BF%E7%94%A8JWT/</link><guid isPermaLink="true">https://jking412.github.io/2022/10/01/%E5%9C%A8Go%E4%B8%AD%E4%BD%BF%E7%94%A8JWT/</guid><description>什么是JWT JWT即JSON Web Token，工作机制是在用户通过鉴权之后，服务端发送一个JSON作为凭证给客户端，让客户端又权限可以访问一些资源 JWT 的三个部分依次如下。 我们需要注意的是Payload中的数据不会被加密，所以不要存放重要 签名保存在服务端，是绝对不可泄露的 最后，服务器</description><pubDate>Sat, 01 Oct 2022 11:02:20 GMT</pubDate></item><item><title>『springboot』shiro鉴权</title><link>https://jking412.github.io/2022/09/28/springboot%E4%BD%BF%E7%94%A8shiro%E5%AE%8C%E6%88%90%E9%89%B4%E6%9D%83/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/28/springboot%E4%BD%BF%E7%94%A8shiro%E5%AE%8C%E6%88%90%E9%89%B4%E6%9D%83/</guid><description>Shiro是什么 shiro是java的一个安全框架，关于它的优势和一些功能就不细讲了 Shiro的架构 先放一张经典的Shiro架构图 - Subject：可以理解为资源的请求者 - Shiro SecurityManager：作为一个中间的过度，管理着shiro各种资源 - Realm：存放着真</description><pubDate>Wed, 28 Sep 2022 06:03:45 GMT</pubDate></item><item><title>(十五)密码加密和jwt认证</title><link>https://jking412.github.io/2022/09/08/go-api-practice-15/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-15/</guid><description>开始前的准备 开始编码 密码加密 pkg/hash/hash.go 这里要注意的是BcryptCheck()函数的参数位置不能错误，否则函数将无法正常运行 添加钩子函数 app/models/user/userhooks.go 这里我们使用了gorm的钩子函数，注意参数和函数名都不要出错 验证密码 </description><pubDate>Thu, 08 Sep 2022 05:33:16 GMT</pubDate></item><item><title>(十四)邮箱发送验证码</title><link>https://jking412.github.io/2022/09/08/go-api-practice-14/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-14/</guid><description>开始前的准备 - 发送邮箱验证码时请确保开启MailHog 开始编码 整体逻辑和手机发送短信差不多 接受前端数据 app/requests/signuprequest.go 控制器 注册路由 测试</description><pubDate>Thu, 08 Sep 2022 05:31:16 GMT</pubDate></item><item><title>(十三)手机号发送短信验证码</title><link>https://jking412.github.io/2022/09/08/go-api-practice-13/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-13/</guid><description>开始前的准备 编码开始 接受前端数据 app/requests/signuprequest.go 从前端接受到数据，为了满足我们的自定义需求，我们需要自己来拓展验证包 自定义规则 app/requests/validators/customrules.go 自定义验证器 app/requests/v</description><pubDate>Thu, 08 Sep 2022 05:29:16 GMT</pubDate></item><item><title>(十二)用邮件来发送验证码</title><link>https://jking412.github.io/2022/09/08/go-api-practice-12/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-12/</guid><description>开始前的准备 我们用mailhog来作为邮箱服务器 - SMTP端口：1025 - 网页端口：8025 我们再powershell使用MailHog命令开启服务 编码 封装mail包 我们依然先去封装mail包 pkg/mail/driverinterface.go pkg/mail/drivers</description><pubDate>Thu, 08 Sep 2022 05:28:16 GMT</pubDate></item><item><title>(十一)利用阿里云平台发送短信</title><link>https://jking412.github.io/2022/09/08/go-api-practice-11/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-11/</guid><description>开始前的准备 开始编码 封装sms pkg/sms/driverinterface.go pkg/sms/driveraliyun.go pkg/sms/sms.go 我们先把阿里云的sms包封装成一个Send函数 验证手机验证码 在这里值得一提的是，我们要注意在整个用手机发送短信的过程中，有两个不</description><pubDate>Thu, 08 Sep 2022 05:27:16 GMT</pubDate></item><item><title>(十)统一返回格式</title><link>https://jking412.github.io/2022/09/08/go-api-practice-10/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-10/</guid><description>新建response包封装返回内容 然后，我们再把前面的返回内容改成新的函数，这一部分就作为课后内容由你们自己完成(不修改也不会影响正常使用)</description><pubDate>Thu, 08 Sep 2022 05:27:13 GMT</pubDate></item><item><title>(九)使用redis和captcha</title><link>https://jking412.github.io/2022/09/08/go-api-practice-9/</link><guid isPermaLink="true">https://jking412.github.io/2022/09/08/go-api-practice-9/</guid><description>开始前的准备 开始编码 redis包 pkg/redis/redis.go 我们对redis包中的redis函数进行了封装并且添加了日志 redis的配置 config/redis.go captcha包 base64Captcha内置了一个内存储存，但是这并不方便，我们用redis实现它的储存接口</description><pubDate>Thu, 08 Sep 2022 05:27:08 GMT</pubDate></item><item><title>(八)在gin和gorm中使用zap</title><link>https://jking412.github.io/2022/08/28/go-api-practice-8/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/28/go-api-practice-8/</guid><description>开始前的准备 gin整合zap 还记得我们在gin中自定义中间件的函数吗，我们将自定义中间件并整合zap来代替原来的中间件 bootstrap/route.go 接下来的内容涉及到的内容很多，只需要理解大概即可，所以这一部分的讲解只会介绍大概的思路。 logger中间件 app/http/middl</description><pubDate>Sun, 28 Aug 2022 12:41:16 GMT</pubDate></item><item><title>(七)集成zap</title><link>https://jking412.github.io/2022/08/28/go-api-practice-7/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/28/go-api-practice-7/</guid><description>开始前的准备 这一部分内容我们需要上面两个包的内容，zap是一个功能强大而且完善的日志包，lumberjack则是一个日志分割的包。 这一部分的内容由于较到了较为全面的个性化配置，所以新内容会比较多，难度上会稍大，但是慢慢来，我们尽可能地梳理这里面的内容:smirk: 开始编码 配置文件 配置的方法</description><pubDate>Sun, 28 Aug 2022 12:41:09 GMT</pubDate></item><item><title>(六)封装验证器</title><link>https://jking412.github.io/2022/08/27/go-api-practice-6/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/27/go-api-practice-6/</guid><description>开始前的准备 抽离公共部分代码 抽离验证函数中的公共部分 我们发现再验证手机号码和邮箱的过程中很多代码是类似的，所以我们可以把它们抽离出来重复使用 app/requests/signuprequest.go 我们发现这个部分是完全一致的 app/requests/requests.go 这里把这一段</description><pubDate>Sat, 27 Aug 2022 01:58:01 GMT</pubDate></item><item><title>(五)完成验证手机和邮箱是否存在接口</title><link>https://jking412.github.io/2022/08/27/go-api-practice-5/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/27/go-api-practice-5/</guid><description>开始前的准备 简单好用的go验证包，可以自定义验证规则和错误信息 创建controller app/http/controllers/api/v1/baseapicontroller.go 和前面一样，先创建一个Controller基类 app/http/controllers/api/v1/aut</description><pubDate>Sat, 27 Aug 2022 01:57:58 GMT</pubDate></item><item><title>(四)集成gorm</title><link>https://jking412.github.io/2022/08/27/go-api-practice-4/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/27/go-api-practice-4/</guid><description>开始前的准备 我们将使用gorm来使用数据库，项目中我们使用mysql数据库 集成gorm 配置信息 config/database.go .env 先用前面的配置配置好数据库相关的参数 连接数据库工具类 pkg/database/database.go 启动连接 和前面启动gin的思路类似，我们在</description><pubDate>Sat, 27 Aug 2022 01:57:54 GMT</pubDate></item><item><title>(三)集成viper</title><link>https://jking412.github.io/2022/08/22/go-api-practice-3/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/22/go-api-practice-3/</guid><description>开始前的准备 - viper viper是一个相当常用的配置管理包，功能相当强大。但是如果之前没有接触过这个包，第一次学习可能感到疑惑，你可以根据自己的情况去先学习viper的用法或者保持一定的疑惑。 - cast ​ 一个非常方便的类型转换包 编码 编写viper工具包 pkg/config/co</description><pubDate>Mon, 22 Aug 2022 01:38:36 GMT</pubDate></item><item><title>(二)集成gin</title><link>https://jking412.github.io/2022/08/22/go-api-practice-2/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/22/go-api-practice-2/</guid><description>开始前的准备 - gin go get github.com/gin-gonic/gin 编码 构建main函数 main.go 我们会在bootstrap包中的SetupRoute()中初始化router，下面我们去完成这个函数 初始化router bootstrap/route.go regis</description><pubDate>Sun, 21 Aug 2022 23:32:36 GMT</pubDate></item><item><title>(一)项目基础信息和说明</title><link>https://jking412.github.io/2022/08/21/go-api-practice-1/</link><guid isPermaLink="true">https://jking412.github.io/2022/08/21/go-api-practice-1/</guid><description>所需要的Go语言基础 这并不是一个完全零基础的Go语言Web项目教程，你需要对包括但不限于gin，gorm等常用框架有一定的了解。此外，如果你之前有过其它语言的Web开发经验，那么我相信你也可以很快学会这些内容。如果没有这些基础，你可以跟着本教程做下去，我们会在每一部分的练习中写上所需要的基础，你可</description><pubDate>Sun, 21 Aug 2022 13:52:00 GMT</pubDate></item><item><title>AtCoder Beginner Contest 248</title><link>https://jking412.github.io/2022/04/17/AtCoder-Beginner-Contest-248/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/17/AtCoder-Beginner-Contest-248/</guid><description>AtCoder Beginner Contest 248 下载PDF，获得别样的观看体验 A - Lacked Number 题意： 给出10个数字，输出09中未出现的那个数字。 思路： 统计数字出现情况即可。 时间复杂度： $O(1)$ AC代码： B - Slimes 题意： 给定$A,B,K$</description><pubDate>Sun, 17 Apr 2022 06:36:25 GMT</pubDate></item><item><title>Codeforces Round 781 (Div. 2)</title><link>https://jking412.github.io/2022/04/12/Codeforces-Round-781-Div-2/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/Codeforces-Round-781-Div-2/</guid><description>A. GCD vs LCM 题意： 给定数n，找到a,b,c,d四个数满足下列条件： 1.$a+b+c+d=n$ 2.$gcd(a,b)=lcm(c,d)$ 思路： 取特殊情况，令$gcd(a,b)=1$即可。 即构造$a=1,b=n-3,c=1,d=1$ 时间复杂度： 所需时间与输入规模无关: $</description><pubDate>Tue, 12 Apr 2022 10:34:34 GMT</pubDate></item><item><title>Codeforces Round 780 (Div. 3)</title><link>https://jking412.github.io/2022/04/12/Codeforces-Round-780-Div-3/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/Codeforces-Round-780-Div-3/</guid><description>A. Vasya and Coins 题意： 小明有$a$枚1元硬币和$b$枚2元硬币，输出小明无法支付的最小金额。 思路： 1. 没有1元硬币： 答案为1 2. 有1元硬币： 答案为$a+2b+1$ 时间复杂度： $O(1)$ AC代码： B. Vlad and Candies 题意： 有n种糖果</description><pubDate>Tue, 12 Apr 2022 10:34:26 GMT</pubDate></item><item><title>Codeforces Round 779 (Div. 2)(Permutationforces)</title><link>https://jking412.github.io/2022/04/12/Codeforces-Round-779-Div-2-Permutationforces/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/Codeforces-Round-779-Div-2-Permutationforces/</guid><description>A. Marin and Photoshoot 题意： 给定一个由0和1组成的序列，现在可以往这个序列中添加1，是的这个序列满足如下要求： 对于任意长度大于等于2的区间，要求这个区间中1的个数大于等于0的个数。 思路： 添加1，使得序列中不存在如下情况： 00或者010 即保证两个0之间的距离大于等</description><pubDate>Tue, 12 Apr 2022 10:33:55 GMT</pubDate></item><item><title>CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)</title><link>https://jking412.github.io/2022/04/12/CodeTON-Round-1-Div-1-Div-2-Rated-Prizes/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/CodeTON-Round-1-Div-1-Div-2-Rated-Prizes/</guid><description>A. Good Pairs 题意： 给定一个长度为n的序列： $a{1},a{2},\dots,a{n-1},a{n}$ 现在要找到一对下标$(i,j)$满足： $a{i}-a{k}+a{j}-a{k}=a{i}-a{j}$ 对所有的$k(1\leq k\leq n)$成立 思路： 显然只要$a{i</description><pubDate>Tue, 12 Apr 2022 10:33:21 GMT</pubDate></item><item><title>AtCoder Beginner Contest 245</title><link>https://jking412.github.io/2022/04/12/AtCoder-Beginner-Contest-245/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/AtCoder-Beginner-Contest-245/</guid><description>A - Good morning 题意： 语法题： 给定两个起床时间。 若第一个早于等于第二个，输出${\color{Red}Takahashi }$， 反之输出${\color{Red}Aoki}$。 思路： 见代码 时间复杂度： $O(1)$ AC代码： B - Mex 题意： 给定一个长度为n</description><pubDate>Tue, 12 Apr 2022 10:32:05 GMT</pubDate></item><item><title>AtCoder Beginner Contest 246</title><link>https://jking412.github.io/2022/04/12/AtCoder-Beginner-Contest-246/</link><guid isPermaLink="true">https://jking412.github.io/2022/04/12/AtCoder-Beginner-Contest-246/</guid><description>A - Four Points 题意： 给出三个点，找到一个点，让这4个点组成一个矩形 思路： 分别找到横纵坐标中只有一个的值。 时间复杂度： $O(1)$ AC代码： B - Get Closer 题意： 给出一个向量，将其变成单位向量。 思路： 将向量除以他的模即可。 时间复杂度： $O(1)$</description><pubDate>Tue, 12 Apr 2022 09:34:16 GMT</pubDate></item></channel></rss>