WordPress 标题中的横杠“-”显示为“&#8211”怎么办?

WordPress 自带钩子wptexturize,可以在wp-includes/functions.php中查看,随着 WordPress 版本的更新,禁用wptexturize()函数更有效果,在当前主题目录下的functions.php中添加如下代码:

//禁用wptexturize函数,解决“-”显示为“&#8211”的问题
add_filter( 'run_wptexturize', '__return_false' );

Proxmox VE(PVE)硬盘扩容,支持EMMC

pve,esxi都是用lvm管理分区,可以使用lvm扩容分区

  • 启动emmc里的pve
  • 扩充的是local-lvm(local主要是VZDump备份文件, ISO镜像, 容器模板,local-lvm主要是 磁盘映像, 容器)
  • 使用putty、xshell一类的软件通过ssh进pve,端口22,用户名root,密码是安装pve时设置的密码

扩容前

检查可能出现的情况

fdisk -l

如果提示

GPT PMBR size mismatch (67108863 != 121634815) will be corrected by write.

执行

apt-get update
apt-get install parted
parted -l

Fix

扩容分区

安装需要的软件

apt-get update
apt-get install parted

执行

fdisk -l

提示

GPT PMBR size mismatch (67108863 != 121634815) will be corrected by write.
Disk /dev/sda: 58 GiB, 62277025792 bytes, 121634816 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0C17A6FD-69E2-401F-97C8-209F38118AC9

Device       Start      End  Sectors  Size Type
/dev/sda1       34     2047     2014 1007K BIOS boot
/dev/sda2     2048  1050623  1048576  512M EFI System
/dev/sda3  1050624 67108830 66058207 31.5G Linux LVM


Disk /dev/mapper/pve-swap: 3.9 GiB, 4160749568 bytes, 8126464 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/pve-root: 7.8 GiB, 8321499136 bytes, 16252928 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

查看系统内硬盘名称(这一步可省略)

lsblk

提示

NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk1            179:0    0 58.2G  0 disk
├─mmcblk1p1        179:1    0 1007K  0 part
├─mmcblk1p2        179:2    0  512M  0 part /boot/efi
└─mmcblk1p3        179:3    0 57.8G  0 part
  ├─pve-swap       253:0    0  3.6G  0 lvm  [SWAP]
  ├─pve-root       253:1    0  7.3G  0 lvm  /
  ├─pve-data_tmeta 253:2    0    1G  0 lvm
  │ └─pve-data     253:4    0 44.9G  0 lvm
  └─pve-data_tdata 253:3    0 44.9G  0 lvm
    └─pve-data     253:4    0 44.9G  0 lvm
mmcblk1boot0       179:8    0    4M  1 disk
mmcblk1boot1       179:16   0    4M  1 disk

如果是emmc,硬盘名称是mmcblk1,执行

parted /dev/mmcblk1

如果是非emmc,硬盘名称是sda,执行

parted /dev/sda

提示

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

执行

print

提示

(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 62.3GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   34.4GB  33.8GB                     lvm

(parted)

扩容LVM,执行

resizepart 3 100%

quit

提示

(parted) resizepart 3 100%
(parted) quit
Information: You may need to update /etc/fstab.

更新物理卷的大小,LVM所在驱动器

如果是emmc,执行

pvresize /dev/mmcblk3

非emmc,执行

pvresize /dev/sda3

提示

Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

扩容逻辑卷,执行

cat /etc/pve/storage.cfg

提示

dir: local
        path /var/lib/vz
        content iso,vztmpl,backup

lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

执行

lvdisplay

提示

--- Logical volume ---
  LV Path                /dev/pve/swap
  LV Name                swap
  VG Name                pve
  LV UUID                ArHV9L-H5ZI-M4gs-Gj1M-4bFV-qbWO-K2VYk4
  LV Write Access        read/write
  LV Creation host, time proxmox, 2020-07-02 19:06:14 +0800
  LV Status              available
  # open                 2
  LV Size                <3.88 GiB
  Current LE             992
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/pve/root
  LV Name                root
  VG Name                pve
  LV UUID                L1MtJ0-LX2s-JfVn-5bTY-WdM8-jfxZ-Gi2oTD
  LV Write Access        read/write
  LV Creation host, time proxmox, 2020-07-02 19:06:14 +0800
  LV Status              available
  # open                 1
  LV Size                7.75 GiB
  Current LE             1984
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                data
  VG Name                pve
  LV UUID                AYiySQ-K6O5-Ye17-XAtF-m154-tRoG-mljDuL
  LV Write Access        read/write
  LV Creation host, time proxmox, 2020-07-02 19:06:15 +0800
  LV Pool metadata       data_tmeta
  LV Pool data           data_tdata
  LV Status              available
  # open                 0
  LV Size                <14.00 GiB
  Allocated pool data    0.00%
  Allocated metadata     1.58%
  Current LE             3583
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

执行

pvs

lvextend -l +100%FREE /dev/pve/data

提示

Size of logical volume pve/data_tdata changed from <14.00 GiB (3583 extents) to 43.87 GiB (11231 extents).
Logical volume pve/data_tdata successfully resized.

扩容成功,可在pve控制端网页查看

根据凸多边形顶点坐标来计算面积的算法与实现

把凸多边形划分成若干个三角形,取多边形的一个顶点为三角形共同顶点

double x0 = x.get(0);
double y0 = y.get(0);

三角形个数 = 坐标对数 – 2

// 每个三角形的三条边 i从0开始
double s1 = Math.sqrt(Math.pow(x0 - x.get(i + 1), 2) + Math.pow(y0 - y.get(i + 1), 2));
double s2 = Math.sqrt(Math.pow(x0 - x.get(i + 2), 2) + Math.pow(y0 - y.get(i + 2), 2));
double s3 = Math.sqrt(Math.pow(x.get(i + 1) - x.get(i + 2), 2) + Math.pow(y.get(i + 1) - y.get(i + 2), 2));
// 每个三角形的面积
double s = (s1 + s2 + s3) / 2;
double area = Math.pow((s * (s - s1) * (s - s2) * (s - s3)), 1.0 / 2);

Java实现代码等待一段时间后执行

方法一:线程睡眠,根据系统计时器和调度程序的精度和准确性,使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。 该线程不会失去任何监视器的所有权,参数单位是毫秒

Thread.sleep(3000); // 毫秒

// 特殊情况
Thread.currentThread().sleep(1000); // 毫秒

方法二:java.util.concurrent.TimeUnit 类中的 sleep() 方法,底层调用的也是线程睡眠

import java.util.concurrent.TimeUnit;

TimeUnit.DAYS.sleep(1); // 天
TimeUnit.HOURS.sleep(1); // 小时
TimeUnit.MINUTES.sleep(1); // 分
TimeUnit.SECONDS.sleep(1); // 秒
TimeUnit.MILLISECONDS.sleep(1000); // 毫秒
TimeUnit.MICROSECONDS.sleep(1000); // 微妙
TimeUnit.NANOSECONDS.sleep(1000); // 纳秒

报未处理异常: java.lang.InterruptedException?
使用 try/catch 环绕

try{
    TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException e) {
    e.printStackTrace();
}

微信无法登录,扫码后报错:java.lang.NumberFormatException:null

原因:微信需加JVM运行参数

找到你的IDE所在的安装目录下的bin文件夹,打开,找到你的exe运行参数文件,如(idea64.exe.vmoptions,studio64.exe.vmoptions)使用编辑器打开,在最后一行添加

-Djsse.enableSNIExtension=false
// 保存后重启IDE

也可以通过exe快捷方式添加参数,如快捷方式目标指向:

E:\Android\eclipse\eclipse.exe -nl=en -Djsse.enableSNIExtension=false

这种方式要求exe所在的路径不能带空格

*Java系统属性的修改通常只能用于本次运行

将Java系统属性Djsse.enableSNIExtension设置为false,$java -Djsse.enableSNIExtension=false
尝试运行时只输出帮助信息?解决方法:

$java -Djsse.enableSNIExtension=false MainClass
$java -Djsse.enableSNIExtension=false -jar foobar.jar

为了你的帐号安全,此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录

<error><ret>1203</ret><message>为了你的帐号安全,此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。Windows微信下载地址:https://pc.weixin.qq.com  Mac微信下载地址:https://mac.weixin.qq.com</message></error>

好几年的微信老账号,早就实名认证了依然是没办法登录

临时解决方法:

1、微信关联QQ

2、下载 QQ浏览器,安装并用QQ号登录

3、登录成功后,QQ浏览器的左侧有一个工具条,有个微信插件的安装,安装,扫码,登录成功

微信官方已经不再支持登录web协议了

虚拟机病毒会感染电脑吗?

基本就是两个方向,一个方向是虚拟机本身存在漏洞,历史上在18、19年的时候 VMware就出现过这样的一次问题:

VMware Workstation有一个拖放功能,就曾经出现了越界内存访问漏洞,在虚拟机正常情况下应该是访问虚拟的内存,而不访问宿主机(实体机)的内存,但漏洞导致有时候会访问实体机内存,黑客就可以制作一个命令执行。如果虚拟机已经中毒了,病毒就可以逃出虚拟机感染宿主机,在宿主机上执行命令。

第二个方向是在自己不知道虚拟机已经被病毒感染的情况下,从虚拟机里把文件拷贝出来,存储到了宿主机的硬盘中,就会导致电脑被感染。

除去以上两种情况,虚拟机还是很安全的,在里边安装杀毒软件后再下载软件,出现的问题就不会很严重了。

在虚拟机安全中,有个专业的名词就叫做虚拟机逃逸,指的是进程越过虚拟机范围,进入到宿主机的操作系统中,也就是病毒逃离虚拟机,对真实主机造成危害。

Pwn2Own黑客大赛:虚拟机逃逸获得10500美元奖金——通过三个独立漏洞的巧妙利用
在加拿大温哥华的Pwn2Own世界黑客大赛上,来自360安全战队的参赛选手完成了一项令人印象极其深刻的战绩:他们完成了虚拟化软件VMware Workstation的逃逸,并攻破了微软防御工事森严的Edge浏览器。这次破解给他们带来了10.5万美元的奖励,这是Pwn2Own连续三天赛程上的最高奖励。
根据Pwn2Own赛事主办方在周五早上(加拿大当地时间)发布的Tweet显示,来自360安全战队的成员运用了Edge的堆溢出漏洞、微软内核的一种混乱缺陷、VMware的缓冲区漏洞,成功完成了“完整的虚拟机逃逸过程”。

“实际上,虚拟机管理程序就是另一个存在漏洞,且可以被攻破的软件隔离层。”Capsule8的联合创始人兼首席技术官Dino Dai Zovi告诉记者,Capsule8是为现代网络基础设施提供实时威胁防护的公司。“隔离层比如沙箱、虚拟化、封装等都让黑客的攻击难度增加,但是没有一个隔离层是完美的。作为防御者来说,应该始终保持这样的态度,那就是所有的防御措施都可以通过攻击者的足够努力而被攻破。”报道链接:https://arstechnica.com/security/2017/03/hack-that-escapes-vm-by-exploiting-edge-browser-fetches-105000-at-pwn2own/

String类valueOf(int i)方法的实现

Java 库 String 类的 valueOf 方法大致可以分为三种:

  • String.valueOf(Object)
  • String.valueOf(char[])
  • String.valueOf(基本数据类型)


String.valueOf(int i)源码:

public static String valueOf(int i) {
        return Integer.toString(i);
}


Integer.toString(int i)源码:

public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true);
}


Integer.getChars(int i, int index, char[] buf)的源码:

static void getChars(int i, int index, char[] buf) {
        int q, r;
        int charPos = index;
        char sign = 0;

        if (i < 0) {
            sign = '-';
            i = -i;
        }

        // Generate two digits per iteration
        while (i >= 65536) {
            q = i / 100;
        // really: r = i - (q * 100);
            r = i - ((q << 6) + (q << 5) + (q << 2));
            i = q;
            buf [--charPos] = DigitOnes[r];
            buf [--charPos] = DigitTens[r];
        }

        // Fall thru to fast mode for smaller numbers
        // assert(i <= 65536, i);
        for (;;) {
            q = (i * 52429) >>> (16+3);
            r = i - ((q << 3) + (q << 1));  // r = i-(q*10) ...
            buf [--charPos] = digits [r];
            i = q;
            if (i == 0) break;
        }
        if (sign != 0) {
            buf [--charPos] = sign;
        }
    }

其他方式实现MyString1 valueOf(int i)

public static MyString1 valueOf(int i) {
        int n;
        char[] temp;
        int count;

        if (i <= Character.MAX_VALUE)
            return new MyString1(Character.toChars(i));
        else {
            n = i % Character.MAX_VALUE;
            count = i / Character.MAX_VALUE;
            temp = new char[count + 1];
            temp[0] = (char) n;
            for (int j = 1; j <= count; j++)
                temp[j] = Character.MAX_VALUE;
            return new MyString1(temp);
        }
    }

刚注册不久没有使用的Facebook账户被封禁

2021/3/8
请上传一张清楚显示你面部的照片。请确保照片足够亮、不模糊,而且其中没有其他人。我们使用此照片来验证这是你的帐户。完成验证后,我们会立即删除照片,决不让这张照片显示在你的个人主页中。

没有分享过照片与视频,包括头像,注册后使用 Facebook 账号登录过第三方网站,这可能是账户被封禁的原因