使用docker安装nextcloud/onlyoffice document server/gitlab

VMware Workstation 配置桥接模式

在VMware界面选中需要设置的虚拟机,点击“虚拟机设置”->“硬件”->“网络适配器”,选中“桥接模式”。

在VMware界面点击“编辑”->“虚拟网络编辑器”,如果“VMnet信息”下面的原点是灰色的,需要首先点击一下右下角的“更改设置”使之具备管理员权限。选中VMnet0,在VMnet信息中选择“桥接模式”,并设置“桥接到”自己的真实网卡。自己的真实网卡可在宿主机的网络连接中查询到。

我在操作的过程中,给虚拟机配置好了桥接模式,也将虚拟机的ip地址设置成和宿主机在一个子网里,但宿主机与虚拟机之间依旧无法互相ping通,经查询后需要做以下两个事情: Read more

配置utorrent使之能使用v2ray代理下载种子

配置utorrent使之能使用v2ray代理下载种子的具体过程

  1. 打开utorrent->选项->设置->连接,配置为如下图。
  2. 如果更新tracker的时候提示“不能连接到吊销服务器或者未能获得最终响应”,使用如下方式解决:打开Internet Explorer>“工具>”Internet选项>“高级”选项卡>安全选项组,取消选中框旁边的选项,“检查服务器证书吊销”。 (需要Internet Explorer的重新启动才能生效)

Read more

pip离线安装package

主要思路为:先从联网的电脑上将包以及相应的依赖下载好,再拷贝到未联网的电脑上安装。

下面是具体步骤:

为了加快下载速度,首先设置国内源:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

创建requirements.txt文件,里面为要安装的包,比如requirements.txt中的内容为: Read more

使用frp实现内网穿透

安装frp服务端:frps

Frp 这个内网穿透项目的官方地址为 https://github.com/fatedier/frp ,不过我们今天搭建服务端时不直接使用这个,而是使用了网友做的一键安装脚本,地址为 https://github.com/clangcn/onekey-install-shell/tree/master/frps 。亲测Centos 7 64位和Centos 8 64可用。

wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install

三行分别是下载脚本、改变权限、执行安装,安装过程一般按照默认值(直接回车)就行了,就是有些常用的端口肯定被占用了,所以要改一下。一切顺利的话,在最后会列出所有重要信息,包括客户端绑定的端口(bind_port),服务端的管理(查看客户端在线情况),端口(dashboard_port)以及用户名和密码,还有服务端和客户端的 token 值。 Read more

常用的正则表达式

常用正则表达式

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

用户名:/^[a-z0-9_-]{3,16}$/

密码:/^[a-z0-9_-]{6,18}$/

十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

URL:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/或者^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

HTML 标签:/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

Unicode编码中的汉字范围:/^[u4e00-u9fa5],{0,}$/

hostname:

^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$

Read more

正则表达式零宽断言详解

基本概念

零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。
作用是给指定位置添加一个限定条件,用来规定此位置之前或者之后的字符必须满足限定条件才能使正则中的字表达式匹配成功。
注意:这里所说的子表达式并非只有用小括号括起来的表达式,而是正则表达式中的任意匹配单元。
javascript只支持零宽先行断言,而零宽先行断言又可以分为正向零宽先行断言,和负向零宽先行断言。 Read more

centos 7 远程连接 ssh connection refused

问题描述:

使用SSH无法连接到远程主机,提示

ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused

解决方案:

  1. 使用远程主机供应商所提供的网页版termianl或其他在目前状态下可以连接上远程主机的方法连接远程主机;
  2. 首先查看ssh服务是否安装或启动,service sshd status
  3. 如果提示ssh没有安装,则安装之,sudo yum install openssh-server openssh-client
  4. 如果提示ssh服务没有启动,则启动之,service sshd start
  5. 如果ssh服务已启动,依旧无法使用连接,先测试一下本地是否可以连接,ssh localhost
  6. 如果还是connection refused,则查看ssh配置:vim /etc/ssh/sshd_config,要配置的项及值如下图所示。需要注意的是,配置项Port一定要在配置项ListenAddress之前,并确保配置文件的其他地方没有上述两个配置项的配置
  7. 完成之后重启ssh服务加载最新配置,service sshd restart,此时ssh localhost命令生效
  8. 给防火墙开端口,/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
  9. 开完端口重启防火墙,service iptables restart

到此为止,远程连接 ssh connection refused的问题就得到了解决,可以尝试在本地使用ssh连接一下远程服务器。

 

C++经典面试题(最全,面中率最高)

1.new、delete、malloc、free关系

delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 Read more

Solution2 for GSH

#include <iostream>
#include <vector>
#include <string>
#include <climits>

int main() {

    int n;
    int temp;
    std::cin >> n;
    std::vector<int> numbers(n, 0);
    std::vector<int> dp(n, 0);
    for(int i = 0; i < n; ++i)
    {
        std::cin >> temp;
        numbers[i] = temp;
        dp[i] = i;
    }
    for(int i = 2; i < n; ++i)
    {
        for(int j = 0; j < i; ++j)
        {
            if(numbers[j] >= i - j)
            {
                dp[i] = std::min(dp[j]+1, dp[i]);
            }
        }
    }
    std::cout << dp[n-1] << std::endl;

    return 0;
}

 

Solution for GSH

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::string inStr;
    int num[255] = {0};
    std::vector<int> vecPair(255, 0);
    std::cin >> inStr; // read input stream
    for(auto iter = inStr.begin(); iter != inStr.end(); ++iter)
    {
        ++vecPair[*iter];
    }
    // output
    int outputNum = 0;
    while(outputNum < inStr.size())
    {
        for(int i = 48; i <= 57; ++i)
        {
            if(vecPair[i] != 0)
            {
                --vecPair[i];
                ++outputNum;
                std::cout << static_cast<char>(i);
            }
        }
        for(int i = 65; i <= 90; ++i)
        {
            if(vecPair[i] != 0)
            {
                --vecPair[i];
                ++outputNum;
                std::cout << static_cast<char>(i);
            }
        }
        for(int i = 97; i <= 122; ++i)
        {
            if(vecPair[i] != 0)
            {
                --vecPair[i];
                ++outputNum;
                std::cout << static_cast<char>(i);
            }
        }
    }
    std::cout << std::endl;

    return 0;
}