首页
关于
Search
1
湖南工商大学校园网优化指北2
107 阅读
2
湖南工商大学校园网优化指北
23 阅读
3
GKD:搞快点,李跳跳的最好替代
17 阅读
4
记一次服务器宕机
10 阅读
5
梦开始的地方-力扣001 两数之和
8 阅读
默认分类
杂谈
学习
极客
分享
登录
Search
标签搜索
LeetCode
服务器
校园网
路由器
手机
Zezin
累计撰写
10
篇文章
累计收到
7
条评论
首页
栏目
默认分类
杂谈
学习
极客
分享
页面
关于
搜索到
10
篇与
的结果
2025-12-01
湖南工商大学校园网优化指北2
最近听说商专校园网开始检测多设备共享了 ::(笑眼) 还好我毕业了不过可以提供一些防止多设备检测的思路, 本文方案来自网络,适用于大部分高校,未经测试,不保证商专校园网可用自购路由器刷openWrt,装插件本人推荐此方案。不仅可以实现防多设备检测,还可以拓展玩法,即使毕业之后路由器不至于浪费。该方案核心在于使用插件 UA2F UA2F作者Github地址 UA2F作者博客教程 作者的教程对于没有接触这方面的人或许较为难以动手,下面我对该方案进行简要教程。购买能够刷机的路由器路由器品牌配置啥的没有特殊要求,唯一硬性要求是可以刷openWrt。至于哪些路由器可以刷机下面列举几个,只是能刷机,某些型号并不推荐小米AX3000T华硕大部分型号中兴E8820S路由器解锁ssh,刷openWrt该步骤不同型号操作方式各不相同,可以去恩山论坛寻找教程 恩山论坛地址 小米AX3000T刷不死uboot+刷openwrt系统教程 别问为啥只分享小米AX3000T,因为我自己用的这个安装UA2F插件虽然UA2F作者推荐使用源码编译,但是这个方案对动手能力要求较高。我推荐刷openWrt时选择提供插件应用商店的固件(大部分都有),固件也是建议在上面提到的恩山论坛对于分区获取。这里也分享一个固件在线构建网站 https://openwrt.ai/使用UA2F的使用无需特别设置,但是得记得启动下面是UA2F部分官方文档# 启用 UA2F uci set ua2f.enabled.enabled=1 # 可选的防火墙配置选项 # 是否自动添加防火墙规则 uci set ua2f.firewall.handle_fw=1 # 是否尝试处理 443 端口的流量, 通常来说,流经 443 端口的流量是加密的,因此无需处理 uci set ua2f.firewall.handle_tls=1 # 是否处理微信的流量,微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效 uci set ua2f.firewall.handle_mmtls=1 # 是否处理内网流量,如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项 uci set ua2f.firewall.handle_intranet=1 # 使用自定义 User-Agent uci set ua2f.main.custom_ua="Test UA/1.0" # 禁用 Conntrack 标记,这会降低性能,但是有助于和其他修改 Connmark 的软件共存 uci set ua2f.main.disable_connmark=1 # 应用配置 uci commit ua2f # 开机自启 service ua2f enable # 启动 UA2F service ua2f start # 读取日志 logread | grep UA2F拓展玩法本部分与防检测无关,仅提供一些可玩的可能 第一篇指北最后提到的多拨带宽叠加,从那以后直到毕业我也没有再尝试 ::(阴险) ,希望有人可以继续尝试吧 路由器科学上网,直接通过路由器进行代理。clash面板挺吃内存的,最好选择配置好点的路由器;或者使用shellclash花钱买GS-WiFi此方案本人极 不推荐 。首先路由器本体性能较差,出了学校基本没用了;防检测能力不比上面所提方案高多少最高级别的防检测功能需付费(不一定用得上)动手能力比较差,多设备联网刚需的可以考虑写在最后本文仅是抛砖引玉,对校园网多设备检测提出几种可能的解决方案,并未经过测试。大家如果发现本文方案有问题,或者有其他选择可以在下面一起讨论一些
2025年12月01日
107 阅读
1 评论
1 点赞
2024-01-10
GKD:搞快点,李跳跳的最好替代
刚过去的双十二,虽然优惠力度一年比一年小,广告倒是一年比一年多😅。一天不知道要跳转到淘宝狗东多少次什么摇一摇广告拿手机的手抖动一下就给你跳转了,还有什么根本点不到的跳过按钮之前有很多跳过这种逆天广告的软件,李跳跳、大圣净化...其中李跳跳最为出圈,很多并不是很关注这方面的都有所了解。这类型的软件自然触动了某些人的利益,一纸律师函让开发者不得不放弃维护。GKD下载地址 GKD订阅列表
2024年01月10日
17 阅读
0 评论
0 点赞
2023-12-11
湖南工商大学校园网优化指北
关于校园网资费配置什么的我这里懒得喷了,这篇优化指南主要是一个突破校园网两台设备限制的教程。准备工作你只需要一台能正常工作的路由器首先把路由器设置好WiFi名称、密码。之后用网线把路由器连接到你宿舍的网口,不同宿舍区网口在不同地方,咸嘉园区网口在宿舍门上面的"小盒子"上。路由器插好网线之后,随便用一台设备连接路由器的WiFi,这时候还不能正常上网,随便打开一个网页会自动跳转到校园网登录页面,这时候正常登录即可。至此,你就可以连接路由器WiFi,不受设备数量限制地使用校园网了。还能够利用路由器使用局域网整活或是使用智能家居了。 tnnd 我一开始不知道我们学校校园网没有UA检测哪些东西,还给路由器编译固件搞插件什么的 ::(怒) 所有连接路由器使用校园网地的设备都只会占用校园网账号一个设备。你可以把账号另外的一个设备位出租出去,也可以跟室友商量一起用路由器的WiFi,这样资费不就降下来了。概率性的频繁掉线我在使用路由器的时候出现过频繁掉线的问题,但是我身边同样使用路由器的朋友都没有遇到过这种现象,如果你没有遇到那就可以往下滑了。校园网掉线之后是不能正常上网的,需要重新登陆。那么我们只需要实现自动检测网路状态,并在网路异常时自动登录。通过对校园网登录页面抓包,知道校园网登录提交是一个GET命令,信息全部明文通过url直接提交。下面是抓包得到的GET命令url https://portal.hutb.edu.cn:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C学号%40运营商代码&user_password=密码&wlan_user_ip=内网IP地址&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=9001&lang=zh 请最好自行抓包获取,内网IP并不相同 或许可以拿我的改改 10.5.110.55抓包教程浏览器进入校园网登录页面 [点我直达](https://portal.hutb.edu.cn/) 打开浏览器开发者工具(没有?请善用搜素)选择网络、勾选保留日志注销校园网登录,重新登录。登录成功后找到形如下面选中的这条日志右键复制链接地址,看看是不是跟我上面的url相似。并尝试浏览器直接访问这个地址能否登录(登录前记得先注销)接下来随便写一个检测网络的脚本,懒的话可以直接拿我的ping_baidu() { ping -c 1 www.baidu.com > /dev/null 2>&1 # ping百度一次,忽略输出 return $? # 返回ping的退出码,0表示成功,其他表示失败 } ping_baidu # 调用ping_baidu函数 result=$? # 获取ping的结果 if [ $result -ne 0 ]; then # 如果ping失败 echo "Ping failed with exit code $result" # 输出失败信息 # 在下面的引号里添加你抓包获取到的登录url curl' ' else # 如果ping成功 echo "Ping succeeded" # 输出成功信息 exit 0 # 结束脚本运行 fi然后你在一台能够长期连接WiFi的设备上设置定时任务;十秒或者多久执行一次上面的脚本。建议整一台微服务器,应该有的路由器也可以设置定时脚本,或是给路由器刷第三方固件。进阶玩法通过多拨来实现网速叠加首先要知道的是并不是很多路由器原厂支持多拨,入门级的路由器多数都不支持,但是在买一个高端路由器放宿舍实在是不值得。 富哥、或是有高端需求的请随意 不是富哥也想玩?那我建议你在买路由器之前做好攻略,买一台可以解锁ssh刷机的。
2023年12月11日
23 阅读
0 评论
0 点赞
2023-12-07
记一次服务器宕机
2023年12月5日,忽视服务器配置安装了某docker后导致服务器宕机超36小时 ::(怒) ::(怒) ::(怒) 每次重启服务器之后只能短暂的访问,之后Azure控制台显示VM代理错误。解决方案:利用短暂的可访问时间下载博客数据,然后删服重建 :@(哭泣) 传统美德,Azure
2023年12月07日
10 阅读
0 评论
0 点赞
2023-12-04
力扣106-数据结构经典作业:从中序与后序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树。 示例1 输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3] 输出:[3,9,20,null,null,15,7] 示例2 输入:inorder = [-1], postorder = [-1] 输出:[-1] 提示: 1 <= inorder.length <= 3000postorder.length == inorder.length-3000 <= inorder[i], postorder[i] <= 3000inorder 和 postorder 都由 不同 的值组成postorder 中每一个值都在 inorder 中inorder 保证是树的中序遍历postorder 保证是树的后序遍历力扣题目链接思路写代码之前我们要先保证自己能过根据中序遍历&后序遍历构造出原二叉树: 以后序遍历数组的最后一个元素为切割点,先切割中序遍历数组,然后根据中序遍历数组切割后序遍历数组。如此往复,每次后续数组中的最后一个元素为切割点。当数组大小为1时,直接返回其值为该子树根节点。(分割后的前段构造左子树,后段构造右子树) 示例1流程如下: 中序:9,3,15,20,7 后序:9,15,7,20,3 后续数组最后一个元素为: 3 切割之后 中序前段:9 中序后段:15,20,7 后序前段:9 后序后段:15,7,20 此时应当注意到中序数组切割与后序数组切割后的大小是相同的 前段数组长度为1则直接返回,继而对后段数组对进行重复操作切割点为:20 中序前段:15 中序后段:7 后序前段:15 后序后段:7 前后段数组元素数都为 1 ,二叉树构造完成 3 / \ 9 20 / \ 15 7图示可能更好理解(图源:代码随想录 点击前往 ) 代码实现很明显,这是一个递归的逻辑;我们采取的是前序遍历,首先确定中间节点,然后递归构造左、右子树。那么下面我们按照递归三要素一步步来实现代码。首先确定递归函数的参数和返回值传入中后续遍历数组,返回指向节点的指针。TreeNode* traversal (vector<int>& inorder, vector<int>& postorder)确定终止条件如果遍历数组为空,那么直接返回null,表示该子树为空如果遍历数组中只有一个元素,那么该节点为叶子节点,该子树构造完成,直接返回if(postorder.size() == 0) { return nullptr; } int rootValue = postorder[postorder.size() - 1]; TreeNode* node = new TreeNode(rootValue); if(postorder.size() == 1){ return node; }确定单层遍历逻辑找到切割点,即后序遍历数组最后一个元素,并切割中序、后序遍历数组int delimitIndex; for(delimitIndex = 0; delimitIndex < inorder.size(); delimitIndex++){ if(inorder[delimitIndex] == rootValue){ break; } } vector<int> leftInorder (inorder.begin(),inorder.begin() + delimitIndex); vector<int> rightInorder (inorder.begin() + delimitIndex + 1, inorder.end()); postorder.resize(postorder.size() - 1);//舍弃后序遍历数组末尾元素,作为分割点已经参与构造 vector<int> leftPostorder (postorder.begin(),postorder.begin() + leftInorder.size()); vector<int> rightPostorder (postorder.begin() + leftInorder.size(), postorder.end());这里需要特别注意数组切割的边界值问题,一定要使用一致的划分原则。上述代码中我使用的是左闭右开级 [0, delimiterIndex)接下便可以进入递归逻辑node->left = traversal(leftInorder,leftPostorder); node->right = traversal(rightInorder,rightPostorder);下面是完整代码class Solution { private: TreeNode* traversal (vector<int>& inorder, vector<int>& postorder) { if (postorder.size() == 0) return NULL; // 后序遍历数组最后一个元素,就是当前的中间节点 int rootValue = postorder[postorder.size() - 1]; TreeNode* root = new TreeNode(rootValue); if (postorder.size() == 1) return root; // 找到中序遍历的切割点 int delimiterIndex; for (delimiterIndex = 0; delimiterIndex < inorder.size(); delimiterIndex++) { if (inorder[delimiterIndex] == rootValue) break; } // 切割中序数组 // 左闭右开区间:[0, delimiterIndex) vector<int> leftInorder(inorder.begin(), inorder.begin() + delimiterIndex); // [delimiterIndex + 1, end) vector<int> rightInorder(inorder.begin() + delimiterIndex + 1, inorder.end() ); // postorder 舍弃末尾元素 postorder.resize(postorder.size() - 1); // 切割后序数组 // 依然左闭右开,注意这里使用了左中序数组大小作为切割点 // [0, leftInorder.size) vector<int> leftPostorder(postorder.begin(), postorder.begin() + leftInorder.size()); // [leftInorder.size(), end) vector<int> rightPostorder(postorder.begin() + leftInorder.size(), postorder.end()); root->left = traversal(leftInorder, leftPostorder); root->right = traversal(rightInorder, rightPostorder); return root; } public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if (inorder.size() == 0 || postorder.size() == 0) return NULL; return traversal(inorder, postorder); } };
2023年12月04日
7 阅读
0 评论
0 点赞
2023-09-27
双指针法-力扣151 反转字符串中的单词
力扣151-反转字符串中的单词 给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。提示:1 <= s.length <= 10^4s 包含英文大小写字母、数字和空格 ' 's 中 至少存在一个单词思路首先剔除字符串中多余的空格,多余的空格存在于字符串开头、末尾以及中间两个或以上连续的空格。开头和末尾的空格直接去除即可,而中间连续空格则需要保留一个。第二步,将整个字符串反转。如此,实现了各单词整体位置上的反转。那么最后便是将各单词内部字母反转。代码实现在这里我们实现一种时间复杂度为O(n),空间复杂度为O(1)(原地对字符串进行修改,不额外分配空间)为实现原地进行修改,我们用到双指针法。定义快慢指针,快指针赋值为字符串中第一个非空格下标,慢指针为字符串开头。使用快指针遍历字符串,判断值是否符合要求。符合则将其存入慢指针,同时,慢指针移动最后判断遍历完成后的字符串尾部是否存在多余空格,若存在则将其去除。并更新字符串长度。int fast = 0, slow = 0; while(s.size() > 0 && fast < s.size() && s[fast] == ' ' ){ fast++; } for(;fast < s.size(); fast++){ if(fast - 1 > 0 && s[fast-1] == ' ' && s[fast] == ' '){ continue; }else{ s[slow++] = s[fast]; } } if(s[slow-1] == ' ' && slow -1 >0){ s.resize(slow-1); }else{ s.resize(slow); }反转整个字符串,可以自行编写,也可调用库函数,这不是本题的重点所在。对单词内部字母的反转,只需要考虑好什么时候对哪一部分进行反转。这里我使用一种相似于双指针的方法。快慢指针同时指向字符串开头,快指针对字符串进行遍历。当快指针遍历元素为空格时,对慢指针到快指针-1的元素进行反转,同时慢指针改为指向快指针+1。for(int start = 0,end = 0; end <= s.size(); end++){ if(s[end] == ' ' || end == s.size()){ reserve(s,start,end-1); start = end+1; } }下面是可以在力扣网站中直接提交通过的完整代码class Solution { public: string reverseWords(string s) { int fast = 0, slow = 0; while(s.size() > 0 && fast < s.size() && s[fast] == ' ' ){ fast++; } for(;fast < s.size(); fast++){ if(fast - 1 > 0 && s[fast-1] == ' ' && s[fast] == ' '){ continue; }else{ s[slow++] = s[fast]; } } if(s[slow-1] == ' ' && slow -1 >0){ s.resize(slow-1); }else{ s.resize(slow); } reserve(s,0,s.size()-1); for(int start = 0,end = 0; end <= s.size(); end++){ if(s[end] == ' ' || end == s.size()){ reserve(s,start,end-1); start = end+1; } } return s; } private: void reserve(string& s,int start,int end){ for(int i = start, j = end; i < j; i++, j--){ swap(s[i],s[j]); } } };总结其实在各种高级语言中有很多功能强大的库函数,我们应该熟悉这些库函数,但是在我们做算法题时应该考虑使用库函数对题目的影响。如果库函数只能解决题目中的一小步,或者你对这个库函数的内部运作原理已经非常熟悉,那么直接调用也无伤大雅。例如题解中的reserve函数是我自行编写的,没有调用库函数,是因为我想要加强一下对反转操作的印象。(我刚在 反转字符串 以及 反转字符串II 两题中使用) 但是reserve函数中我却调用了swap函数进行互换,因为我认为我对swap函数的认识已经足够清晰,同时这也显然不是本题的意图所在。事实上,如果使用Python,本题仅用几行代码即可解决。另外,在C++中可以使用erase直接删除字符串中元素,但是时间复杂度会有所变化。
2023年09月27日
7 阅读
1 评论
0 点赞
2023-09-24
梦开始的地方-力扣001 两数之和
力扣001题-两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]暴力解法看到题目第一眼想到的是嵌套循环,很简单,代码如下:class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { for(int i = 0; i<nums.size(); i++){ for(int j = 0; j<nums.size(); j++){ if(nums[i]+nums[j] == target && i!=j){ return {i,j}; } } } return {}; } };显然双循环写法时间复杂度为O(n^2),下面我们来看一种时间复杂度为O(n)的解法。哈希表法这种解法我们利用C++中unordered_map这种数据结构的哈希表底层实现,以O(n)时间复杂度来解出这题。首先,我们要知道什么是哈希表。哈希表是根据关键码的值而直接进行访问的数据结构。这种说法可能难以理解,简单地说,数组其实也是一种哈希表。数组的下标就是它的关键码,通过下标的值可以直接访问其数据。常见的哈希结构有三种:数组、unordered_set、unordered_map。本题使用unordered_map,那么为什么选择这种结构呢?数组:大小固定,当元素很少而哈希值很大时将会造成内存浪费unordered_set:是一个集合,只能存放key值,而本题既要判断某值是否存在还要记录它的下标unordered_map:key value存储结构,本题中用key保存数值,用value保存其下标思路遍历数组,判断map中是否存在与当前遍历元素相加等于target的元素。有,则返回下标;无,则将当前遍历元素存入map。代码如下:class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { std::unordered_map<int,int> map; for(int i = 0; i<nums.size(); i++){ auto temp = map.find(target-nums[i]); if(temp != map.end()){ return {temp->second,i}; } map.insert(pair<int,int>(nums[i],i)); } return {}; } };总结什么时候应该想到使用哈希表?当我们需要查询一个元素是否出现过或是否存在于某个集合,我们就应该想到使用哈希表。本题中,我们需要一个集合来存放遍历过的元素,在遍历过程中我们又需要判断某元素是否是否遍历过,即判断某元素是否存在于集合。
2023年09月24日
8 阅读
0 评论
0 点赞
2023-09-19
Day01-力扣59 螺旋矩阵
力扣题目地址 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 这题并不涉及什么算法和思想,但是很考验对代码掌握程度。看似简单,但要完整的写出运行免不了磕碰。 首先要确定遍历每一条边时边界的选择,最好每条边采取一致的边界处理。这里我选择的是每一条边保留最后一个作为下一条边的开始,例如n=4,第一条边遍历只处理nums0至nums0,第二条边处理nums0至nums2;如此往复。 例外需要注意的是,当n为奇数时,矩阵中央会剩余一个需要另外进行赋值。class Solution { public: vector<vector<int>> generateMatrix(int n) { int startx=0,starty=0;//遍历从何处开始 int offset=1;//遍历从何处结束 int loop=n/2;//需要进行多少次画圈循环 int count=1; vector<vector<int>> nums(n, vector<int>(n, 0));//定义一个二维数组 int i,j; int temp=n%2; while(loop--){ i=startx; j=starty; //每一行/列都保留最后一个给下一行/列处理 for(j=starty;j<n-offset;j++){ nums[startx][j]=count++; } for(i=startx;i<n-offset;i++){ nums[i][j]=count++; } for(;j>starty;j--){//此时i,j都已经到达正确位置(即矩阵中右下角)不需要进行处理 nums[i][j]=count++; } for(;i>startx;i--){ nums[i][j]=count++; } startx++; starty++; offset+=1; } if(temp==1){ nums[n/2][n/2]=count; } return nums; } };
2023年09月19日
5 阅读
0 评论
0 点赞
2023-09-17
Azure云虚拟机白嫖教程--学生认证
话不多说直接上操作 在教程开始之前你应该准备:眼睛、手、不怎么要动基本够用的脑子、学信网学籍/学历/学位在线验证报告(最好为英文,可以直接用福析PDF进行编辑截图就行)、Github账号、可用的学生邮箱(可选项,最好有) 虽然是白嫖Azure云的虚拟机,但我们并不在Azure进行学生认证,Azure云使用中国大陆学生邮箱验证不了,而是在Github进行学生认证,再通过Github登录Azure云验证学生身份使用优惠。Github学生认证首先编辑YourProfile,昵称改为学信网报告上的拼音英文名,简介随便写点,Company填自己的学校英文名;然后在Email目录中绑定你的edu后缀学生邮箱。 接着在这个网址 https://education.github.com/discount_requests/application 进行Github学生开发包的申请, 切记在此过程中不要使用任何网络代理 选择学生 往下滑,在这里选择你的学生邮箱(如果你前面有绑定的话),学校填自己学校英文就行,理由随便写点,就写自己学习需要。点击continue。 上传学信网英文报告,注意这一步是通过调用摄像头来上传的。你可以在手机上进行操作,用手机拍摄你电脑屏幕的是报告;或者在电脑使用obs等软件捕获屏幕信息至虚拟摄像头。 z之后该填的都正常填了就行,提交。如果有问题会很快给你的发邮件;通过之后也会给你发邮件。 当然你也可以在上面的网址查看是否通过。Azure学生认证进入下面网址 https://azure.microsoft.com/zh-cn/free/students/ 使用已通过学生认证的Github登录 Azure教育计划每年有100美元额度的优惠,如果你想正常使用服务器一年,那你必须选择特定的配置。 在Azure门户点击创建资源,你能来白嫖这个服务器那你对服务器一定是有所了解的,一般的选项相信你都看得懂,根据自己选择就行。要注意的是服务器配置只能够选择B1s,只有这个是免费的。在磁盘大小选择时选择64GB(P6)。网络配置请选择动态IP,静态IP收费且价格不菲,虽然我们选择动态IP,但是只要我们不重启服务器,IP地址并不会发生改变,不会影响到我们后续的使用。这样我们就白嫖到了一年微软的服务器 ::(吐舌) 。使用方面我是不建议使用Azure云来进行管理的,可以选择一个自己喜欢的终端使用ssh连接管理,如果你不习惯使用命令,那你可以安装一个可视化面板(像1panel、 宝塔 什么的) 有问题可以在下面留言或者电邮联系:zezin1024@gmail.com
2023年09月17日
7 阅读
0 评论
0 点赞
2023-08-02
时隔两年再次上线
如果您看到这篇文章,表示您的 blog 已经安装成功. 一眨眼,自从上台服务器过期网站下线已经快两年了,最近在Azure那里白嫖了一台服务器(过程还挺崎岖的,或许可以写篇教程),闲着也是闲着就又玩起了博客,也顺便记录一下折腾过程什么的。 ::(吐舌) 顺便服务器挂了个 Alist 把我的一些学习资料 没有日语的那种影视资源什么开放了游客权限,感兴趣的可以看看,有什么需要的资源也可以在下面给我留言 快来氵快来氵 ::(小乖)
2023年08月02日
7 阅读
5 评论
0 点赞