2024-08-13

在树莓派上搭建WordPress博客并通过内网穿透发布到公网涉及以下步骤:

  1. 安装WordPress:

    安装Apache、MySQL、PHP,并使用WordPress一键安装脚本。

  2. 内网穿透:

    使用工具如frpngroklocaltunnel等进行内网穿透。

以下是简化的步骤和示例代码:

  1. 安装必要软件:



sudo apt-get update
sudo apt-get install apache2 mysql-server php libapache2-mod-php
sudo apt-get install php-mysql php-curl php-gd php-xml
  1. 下载WordPress:



wget https://wordpress.org/latest.tar.gz
  1. 解压并移动到Apache目录:



tar -xzf latest.tar.gz
sudo mv wordpress/* /var/www/html/
  1. 配置MySQL数据库:



sudo mysql_secure_installation
  1. 访问WordPress安装页面:

    在浏览器中输入树莓派的IP地址,开始WordPress安装程序。

  2. 设置内网穿透:

    下载并配置frp

    
    
    
    # 下载frp
    wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_arm64.tar.gz
    tar -zxvf frp_0.32.1_linux_arm64.tar.gz
    # 修改frp配置文件frps.ini

    配置frp客户端(在你的电脑上):

    
    
    
    [common]
    server_addr = 你的服务器IP
    server_port = 7000
     
    [web]
    type = http
    local_port = 80
    custom_domains = your-subdomain.example.com

    启动frp客户端和服务端:

    
    
    
    # 在树莓派上
    nohup ./frps -c frps.ini &
    # 在你的电脑上
    nohup ./frpc -c frpc.ini &

    现在,你可以通过your-subdomain.example.com访问你的WordPress博客。

请注意,内网穿透工具的选择和配置可能会根据你的网络环境和需求有所不同。这里提供的是一个简化的流程和示例,实际操作时需要根据具体情况调整。

2024-08-10

题目描述:

在一个虚拟的游戏中,有一个财库系统,用户可以存钱或者消费。系统会记录每一笔交易,包括交易时间和交易金额。现在给你一系列的交易记录,请你计算在给定时间范围内,用户的财富变化情况。

输入描述:

第一行包含两个整数n和m,表示交易记录的数量和询问的时间范围数量。

接下来n行,每行包含两个整数ti和vi,表示第i笔交易的时间和金额。

接下来m行,每行包含两个整数ai和bi,表示查询的时间范围,[ai, bi]。

输出描述:

对于每个查询时间范围,输出一个整数,表示在该时间范围内用户的财富总变化。

示例输入:

5

2 6

3 7

4 8

5 9

6 10

1 5

4 6

示例输出:

-15

解决方案:

这是一个典型的动态规划问题,可以通过维护一个前缀和数组来解决。

Java代码示例:




import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] transactions = new int[n][2];
        for (int i = 0; i < n; i++) {
            transactions[i][0] = scanner.nextInt(); // ti
            transactions[i][1] = scanner.nextInt(); // vi
        }
        scanner.close();
 
        // 对交易按时间进行排序
        Arrays.sort(transactions, (a, b) -> a[0] - b[0]);
 
        long[] prefixSum = new long[n];
        for (int i = 0; i < n; i++) {
            if (i > 0) {
                prefixSum[i] = prefixSum[i - 1] + transactions[i][1];
            } else {
                prefixSum[i] = transactions[i][1];
            }
        }
 
        for (int i = 0; i < m; i++) {
            int start = scanner.nextInt();
            int end = scanner.nextInt();
            // 二分查找确定时间范围内的交易下标
            int left = 0, right = n - 1;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (transactions[mid][0] >= start) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            int startIndex = left;
            left = 0;
            right = n - 1;
            while (left < right) {
                int mid = left + (right - left + 1) / 2;
                if (transactions[mid][0] <= end) {
                    left = mid;
                } else {
                    right = mid - 1;
                }
            }
            int endInd