首页
KMS
推荐
layui
站长工具
全能工具
Search
1
MobaXterm最新版破解
121,627 阅读
2
Sublime text 3 最新版注册码
112,218 阅读
3
[易语言] Game-EC 驱动辅助模块8.5.1[卓越]加密狗版【破解版】
108,535 阅读
4
文件对比神器 Beyond Compare 注册码
65,245 阅读
5
Office 2016 零售版转VOL版
16,898 阅读
默认分类
编程
探究
Yii2学习笔记
疑难杂症
原创
工具
数据库
算法学习
服务器运维
网络安全
渗透测试
逆向破解
登录
Search
标签搜索
PHP
PHP Tools for Visual Studio
PHP Tools 破解
破解
Crack
VS2019
Beyond Compare
python
mitmproxy
mitmweb
mitmdump
openssl
windows
青春图床
开源
swoole
hyperf
redis
vue
SnowFlake
kali
累计撰写
28
篇文章
累计收到
40
条评论
首页
栏目
默认分类
编程
探究
Yii2学习笔记
疑难杂症
原创
工具
数据库
算法学习
服务器运维
网络安全
渗透测试
逆向破解
页面
KMS
推荐
layui
站长工具
全能工具
搜索到
28
篇与
的结果
2023-09-05
深度优先和宽度优先的区别、前(先)序遍历和中序遍历以及后序遍历的使用
深度优先深度优先搜索属于图算法的一种深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件)过程:是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次深度优先遍历深度优先遍历图的方法是,从图中某顶点v出发:从图中一个未访问的顶点V开始沿着一条路一直走到底第二步路走完过后,再从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…不断递归重复2和3过程一直执行3过程,直到所有的顶点都遍历完成(即所以顶点都被访问过)特点:先走完一条路,再换一条路继续走。下面是使用深度优先进行树的遍历如下图:从根节点1开始遍历,遍历过程:1->2->5->9过程已经走到底,然后就从9开始回退到上一个节点5,5没有除了9以外的节点,再次回退到2,2没有除了5以外的节点。回退到1,1有除了2以外的节点3和4,这时再执行深度优先,步骤为:1->3->6->10同理,走到10已经是到底了,开始回退,直到回退到3,发现3有除了6以外的子节点,这时回去遍历7同理,7已经到底了,回退到1节点,继续进行遍历,执行步骤为1->4->8由上可知,完整的节点遍历属性如下:1->2->5->9->3->6->10->7->4->8由数的遍历可以知道:前序遍历、中序遍历和后序遍历都属于深度优先遍历前(先)序遍历说明:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树。简:从根开始,先左后右前(先)序遍历:1–>2–>4–>7–>5–>8–>9–>3–>6–>10–>11中序遍历说明:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树。简:从底向上,先左后右中序遍历:4–>7–>2–>8–>5–>9–>1–>3–>10–>6–>11后序遍历说明:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。简:从底先上,先左后右,最后根后序遍历:7 --> 4 --> 8 --> 9 --> 5 --> 2 --> 10 --> 11 --> 6 --> 3 --> 1根据树的三种遍历结果推导数的结构根据后序遍历的特点可以知道:根节点在结尾根据前序遍历的特点可以知道:根节点在开头根据中序遍历的特点可以知道:通过前序遍历和中序遍历可以知道根节点后,便可以清楚根节点的左边是左子树,根节点的右边是右子树宽度优先宽度优先搜索(又称广度优先搜索,又叫层次遍历)是最简便的图的搜索算法之一,又叫BFS,属于一种盲目搜寻法目的:是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。说明:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止。宽度优先:1–>2–>3–>4–>5–>6–>7–>8–>9–>10–>11深度优先和宽度优先的区别深度优先搜索用栈(stack)来实现 广度优先搜索使用队列(queue)来实现深度优先遍历:对任何一个分支都深入到不能再深入为止,每个节点只能访问一次。二叉树的深度优先分为:先序遍历、中序遍历、后序遍历。具体介绍见上面的说明宽度优先遍历:层次遍历,从上往下对每一层进行遍历,在每一层中,从左往右(也可以从右往左)访问结点,一层一层的进行点,直到没有结点为止深度优先搜素算法:不全部保留结点,占用空间少;有入栈、出栈操作,运行速度慢。广度优先搜索算法:保留全部结点,占用空间大; 无入栈、出栈操作,运行速度快。版权声明:本文为CSDN博主「?abc!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/yyuggjggg/article/details/120796567
2023年09月05日
69 阅读
0 评论
0 点赞
2021-10-22
搭建MySQL高可用集群
MySQL InnoDB Cluster 搭建过程基于Ubuntu 20.04系统搭建系统防火墙均已关闭为了方便管理,主节点和从节点root密码统一使用一个模式:单主多从graph LR A[Application/Client] --> B[Mysql Router] B --> A B --> C[MySQL Master R/W] C --> |Group Replication| D[Slave01 R/O] C --> |Group Replication| E[Slave02 R/O] C --> |Group Replication| F[Slave02 R/O] C --> |Group Replication| G[Slave02 R/O] 节点IP作用node01192.168.121.135主node02192.168.121.136从node03192.168.121.137从node04192.168.121.138路由管理系统配置(所有服务器)在每台服务器上配置hosts,编辑/etc/hosts文件,加入以下内容192.168.121.135 node01 192.168.121.136 node02 192.168.121.137 node03 192.168.121.138 node04软件安装主节点、从节点、路由管理节点初始化,安装MySQL官方apt源sudo wget https://repo.mysql.com/mysql-apt-config_0.8.19-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.19-1_all.deb && sudo apt-get update主节点、从节点安装mysql-server、mysql-shellsudo apt install mysql-server mysql-shell -y路由管理节点安装mysql-shell、mysql-routersudo apt install mysql-router mysql-shell -yMySQL配置(主、从服务器)修改MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf(主节点)[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log default-storage-engine = INNODB character-set-server = utf8mb4 port = 3306 #复制框架 server_id = 1 gtid_mode = ON enforce_gtid_consistency = ON master_info_repository = TABLE relay_log_info_repository = TABLE binlog_checksum = NONE log_slave_updates = ON log_bin = binlog binlog_format = ROW max_connections = 100 max_allowed_packet = 100M #组复制设置 #server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列 transaction_write_set_extraction = XXHASH64 #告知插件加入或创建组命名,UUID loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。 loose-group_replication_start_on_boot = off #告诉插件使用IP地址,端口33061用于接收组中其他成员转入连接 loose-group_replication_local_address = "node01:33061" #启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意 loose-group_replication_group_seeds = "node01:33061,node02:33061,node03:33061" loose-group_replication_ip_whitelist = "node01,node02,node03,node04" loose-group_replication_bootstrap_group = off # 使用MGR的单主模式 loose-group_replication_single_primary_mode = on loose-group_replication_enforce_update_everywhere_checks = off disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE从节点也需要修改,只需要把配置文件中的server_id、loose-group_replication_local_address修改为对应的值例如node02server_id = 2 loose-group_replication_local_address = "node02:33061"以此类推重启MySQLsudo service mysql restart使root用户支持远程登录update mysql.user set host='%' where user='root';赋予管理集群所需的权限GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;刷新权限flush privileges;配置本地实例在所有节点服务器上配置本地实例,使用mysqlsh工具dba.configureLocalInstance('root@localhost:3306', {'password': 'root', 'interactive': false});检查实例状态dba.checkInstanceConfiguration("root@localhost:3306");如果输出以下内容说明配置成功。The instance 'node01:3306' is valid to be used in an InnoDB cluster. { "status": "ok" }创建集群在主节点上创建集群,同样使用mysqlsh工具# 连接实例 shell.connect('root@localhost:3306'); # 创建一个集群,命名为 'myCluster' var cluster = dba.createCluster('myCluster'); # 查看集群状态 cluster.status();输出以下内容就表示创建成功{ "clusterName": "myCluster", "defaultReplicaSet": { "name": "default", "primary": "node01:3306", "ssl": "REQUIRED", "status": "OK_NO_TOLERANCE", "statusText": "Cluster is NOT tolerant to any failures.", "topology": { "node01:3306": { "address": "node01:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" } }, "topologyMode": "Single-Primary" }, "groupInformationSourceMember": "node01:3306" }从节点加入集群在主节点中打开mysqlsh工具# 连接实例 shell.connect('root@localhost:3306'); # 根据集群名字获取集群对象 var cluster = dba.getCluster('myCluster'); # 将node02节点加入集群 cluster.addInstance('root@node02:3306');如果出现WARNING: A GTID set check of the MySQL instance at 'node02:3306' determined that it contains transactions that do not originate from the cluster, which must be discarded before it can join the cluster. node02:3306 has the following errant GTIDs that do not exist in the cluster: bbdb0716-32e7-11ec-86e0-000c29040a05:1-2 WARNING: Discarding these extra GTID events can either be done manually or by completely overwriting the state of node02:3306 with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'. Having extra GTID events is not expected, and it is recommended to investigate this further and ensure that the data can be removed prior to choosing the clone recovery method. Please select a recovery method [C]lone/[A]bort (default Abort):输入C继续,之后提示出下面内容说明加入成功The instance 'node02:3306' was successfully added to the cluster.其他从节点加入的方式一致查询集群状态cluster.status()输出下面内容{ "clusterName": "myCluster", "defaultReplicaSet": { "name": "default", "primary": "node01:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "node01:3306": { "address": "node01:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" }, "node02:3306": { "address": "node02:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" }, "node03:3306": { "address": "node03:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": null, "role": "HA", "status": "ONLINE", "version": "8.0.27" } }, "topologyMode": "Single-Primary" }, "groupInformationSourceMember": "node01:3306" }可以看到,所有节点均已加入集群,并且正常运行配置 MySQL Router创建配置文件保存目录sudo mkdir /mysqlrouter将创建的目录授权给mysqlrouter用户编辑/etc/apparmor.d/usr.bin.mysqlrouter文件,加入以下内容# Allow config file access /mysqlrouter/ rw, /mysqlrouter/** rw,重启apparmorsudo /etc/init.d/apparmor restart配置 MySQL Router,生成配置文件到/data/mysqlrouter目录sudo mysqlrouter --bootstrap node01:3306 --directory /mysqlrouter --user=root --conf-use-sockets --force--conf-use-sockets 表示使用 unix sockets 通信--directory 指定配置文件保存目录输出下面内容表示创建成功# Bootstrapping MySQL Router instance at '/mysqlrouter'... - Creating account(s) (only those that are needed, if any) - Verifying account (using it to run SQL queries that would be run by Router) - Storing account in keyring - Adjusting permissions of generated files - Creating configuration /mysqlrouter/mysqlrouter.conf # MySQL Router configured for the InnoDB Cluster 'myCluster' After this MySQL Router has been started with the generated configuration $ mysqlrouter -c /mysqlrouter/mysqlrouter.conf InnoDB Cluster 'myCluster' can be reached by connecting to: ## MySQL Classic protocol - Read/Write Connections: localhost:6446, /mysqlrouter/mysql.sock - Read/Only Connections: localhost:6447, /mysqlrouter/mysqlro.sock ## MySQL X protocol - Read/Write Connections: localhost:6448, /mysqlrouter/mysqlx.sock - Read/Only Connections: localhost:6449, /mysqlrouter/mysqlxro.sock启动 MySQL Routersudo /mysqlrouter/start.sh启动完成后会监听下面几个端口端口socket文件协议服务6446/mysqlrouter/mysql.sockMySQLMySQL 读写6447/mysqlrouter/mysqlro.sockMySQLMySQL 只读6448/mysqlrouter/mysqlx.sockMySQL XMySQL X 读写6449/mysqlrouter/mysqlxro.sockMySQL XMySQL X 只读8443无HTTPSWeb 管理验证集群登录后,新建一个数据库和表,往里面写进数据,查看从节点数据会不会同步;关闭node01的mysql服务,route将主节点自动切换到node02,node02从只读变为可读写,重新启动node01 mysql后,node01变为只读模式。
2021年10月22日
501 阅读
0 评论
0 点赞
2021-09-01
[2021]PHP循环性能比较
导语时间飞速流逝,转眼已经过去了3年,这几年科技在快速发展,PHP也来到了8.0.10版本。回望这几年,大数据时代悄然降临,面对海量的数据,我们迫切的需要更为快速的运算性能;基础硬件的升级、软件算法的迭代,这些都是必不可少的部分。编程语言也在不断进化着,但是我们写的代码真的高效吗?你真的会用这门语言吗?带着这些疑问来到我们今天的测试项目。循环语句是我们在编程中经常书写的代码,我们通常会使用循环对数组、集合、列表进行遍历,但是每种循环语句的实现各不相同,今天我们就对for、foreach这两个最常用的语句进行一个简单的性能测试。这次测试不包含内置函数的测试,例如array_map等回调类型的函数,也不对while、do...while语句进行测试,毕竟用while、do...while遍历数据的情况较少。其实早在2018年的时候做过这样的一个测试,但是不严谨,具体可以看之前这篇文章: PHP循环性能测试测试方法使用for、foreach、foreach-key三种方式进行嵌套空循环测试,每一层循环1000次,且每种方式运行5次,记录每次运行的耗时,取最小值作为最终测试结果。测试代码算法例子:$test_result = []; for($t = 0; $t < 5; $t++) { $start_time = microtime(true); for($i = 0; $i < 1000; $i++) { for($j = 0; $j < 1000; $j++) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'for:'.min($test_result).PHP_EOL;测试环境硬件环境 CPU单核 Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz内存2GB硬盘60GB SSD云硬盘操作系统Ubuntu Server 20.04 LTS 64bit软件环境PHP 5.6.40PHP 7.4.23PHP 8.0.10完整测试代码<?php function _for($test_count = 5, $loop_count = 1000) { $test_result = []; for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); for($i = 0; $i < $loop_count; $i++) { for($j = 0; $j < $loop_count; $j++) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'for:'.min($test_result).PHP_EOL; } function _foreach($test_count = 5, $loop_count = 1000) { $test_result = []; $array = range(1, $loop_count); for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); foreach($array as $value) { foreach($array as $value2) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'foreach:'.min($test_result).PHP_EOL; } function _foreach_key($test_count = 5, $loop_count = 1000) { $test_result = []; $array = range(1, $loop_count); for($t = 0; $t < $test_count; $t++) { $start_time = microtime(true); foreach($array as $key => $value) { foreach($array as $key2 => $value2) { // do something } } $end_time = microtime(true); $test_result[] = ($end_time-$start_time)*1000; } echo 'foreach-key:'.min($test_result).PHP_EOL; } _for(); _foreach(); _foreach_key();测试结果PHP5.6.40PHP7.4.23PHP8.0.10测试方法PHP 5.6.40PHP 7.4.23PHP 8.0.10for21.63696289062513.2529735565194.356861114502foreach46.97203636169419.380092620856.3300132751465foreach-key53.55119705200234.90209579467810.4660987854以上耗时结果均为毫秒单位,值越小越好从上面的结果可以看出,新版本对性能的提升确实非常大,基本上都是质的提升。如果可以尽量使用最新的稳定版。PHP8对比PHP7基本是3倍的性能提升。结束语这次测试结果还是让我很意外,本以为PHP7性能提升得已经够多了,没想到PHP8直接碾压,再加上PHP8引入的JIT(Just In Time),让PHP8非常乐观,不过到目前我还没弄懂在哪些情况下才会用到JIT,如果后面有时间我会专门写一篇文章来测试JIT。这篇文章的目的只是参考作用,毕竟只是空循环,实际应用中可能会复杂很多。但有一点可以肯定,新版本带来的性能提升是毋庸置疑的,大家可以放心食用~
2021年09月01日
408 阅读
0 评论
0 点赞
2021-01-28
PHP Tools for Visual Studio 一键破解工具 v1.3
为什么要做这个工具介于之前有小伙伴在问 PHP Tools 什么时候更新呀,为什么补丁用不了之类的问题,我做了这个一键破解工具。
2021年01月28日
4,543 阅读
14 评论
0 点赞
2020-12-25
PD16 虚拟机 网络初始化失败 解决
引子随着苹果公司发布了新一代搭载自研ARM架构的M1处理器的新Macbook 系列产品,各大厂商也是先后对自家的软件进行优化适配。其中就有 Parallels Desktop 虚拟机。
2020年12月25日
5,193 阅读
2 评论
0 点赞
2020-09-24
[免费]JetBrains全系列软件激活教程激活码
写在前面目前支持 JetBrains 2020.2.2 及以下版本的激活!!!建议大家去 JetBrains官网 下载JetBrains系列工具的官方版,然后使用本教程方法激活。Jetbrains 自2020年1月起大量封杀激活码,现在几乎没有可用的激活码了,X宝上的都已经关店了,那些卖激活码的随时准备坑钱跑路。没有激活码了怎么办?
2020年09月24日
3,504 阅读
0 评论
0 点赞
2020-09-12
MYSQL | 最左匹配原则
最左匹配原则最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。例如某表现有索引(a,b,c),现在你有如下语句:
2020年09月12日
1,769 阅读
0 评论
0 点赞
2020-07-21
PHP Tools for Visual Studio 破解版(1.40.11953)(更新)
如何使用请看 https://www.jindashen.cn/default/2019/11/13/112.html这篇文章。
2020年07月21日
3,847 阅读
3 评论
0 点赞
2020-07-07
SnowFlake算法PHP版
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。
2020年07月07日
1,862 阅读
0 评论
0 点赞
2020-07-02
开源一个图床程序《青春图床》
最近在研究 swoole,还有基于 swoole 的一些开发框架,目前主要在研究 hyperf 。熟悉了一下,随手撸个简单的图库出来看看效果。。。体验地址: http://yp.3yi.ink/就只做了一个图片上传的功能。。。。(不要笑哦。。)
2020年07月02日
1,674 阅读
0 评论
0 点赞
2020-06-25
PHP Tools for Visual Studio 破解版(更新)
如何使用请看 https://www.jindashen.cn/default/2019/11/13/112.html这篇文章。
2020年06月25日
4,004 阅读
5 评论
0 点赞
2020-03-12
python之windows上安装mitmproxy遇到的问题和解决办法
mitmproxy 简介首先说下mitm是什么意思,mitm是 Man-in-the-Middle 的缩写,意思是中间人,proxy就是代理了。而 mitmproxy则是用python开发的一个免费、开源的中间人代理工具,并且支持使用python api来进行外挂脚本扩展...
2020年03月12日
4,105 阅读
0 评论
0 点赞
2019-12-18
Beyond Compare 4.x 通杀注册机
在网上找了好久才找到的Beyond Compare 4.x 通杀注册机网上找了一圈,发现有狗东西居然拿人家的东西卖钱???果断分享出来!具体怎么使用就不说了,很简单,自己研究截至目前Beyond Compare的最新版是 4.3.3 (构建号 24545)里面包含Mac版的破解!!百度云链接: https://pan.baidu.com/s/1rqNnUw8HZw7EL0lxDCt75w 提取码: c2q3建议保存一份到自己的网盘!!链接掉了不补
2019年12月18日
5,601 阅读
1 评论
0 点赞
2019-11-13
PHP Tools for Visual Studio 破解版
PHP Tools for Visual Studio 2019 破解版这个是我无意间发现漏洞,然后破解的。。。
2019年11月13日
10,801 阅读
9 评论
0 点赞
2019-09-23
什么是IaaS、PaaS和SaaS及其区别
IaaS、PaaS和SaaS是云计算的三种服务模式。定义SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储等等;
2019年09月23日
2,196 阅读
0 评论
0 点赞
2019-05-23
记一次极限Linux分区扩容
这次操作可谓是争分夺秒啊~记录下来,一遍后面忘了能找到。。在写这篇文章的时候,之前扩容的100G还剩80G,还不够啊~~
2019年05月23日
11,137 阅读
0 评论
0 点赞
2019-04-10
Yii2-常用数据库操作
简单的介绍一下在Yii2中一些常用的数据库CURD操作
2019年04月10日
3,682 阅读
0 评论
0 点赞
2019-03-20
开源小工具:Hosts-Manager
Hosts-Manager
2019年03月20日
3,788 阅读
0 评论
0 点赞
2019-01-17
MySQL分区表
分区:分区的功能不是在存储引擎层实现的。因此不只是InnoDB才支持分区。MyISAM、NDB都支持分区操作。分区的过程是将一个表或者索引分解为多个更小、更可管理的部分。从逻辑上将,只有一个表或者索引,但是在物理上这个表或索引可能由数十个物理分区组成。
2019年01月17日
2,657 阅读
0 评论
0 点赞
2018-10-11
[2018]PHP循环性能比较
我们来测试一下for foreach array_map 这三个遍历数组方式的性能测试环境操作系统:Windows 7 64 位PHP版本:5.3.8 x64 TS
2018年10月11日
4,953 阅读
0 评论
0 点赞
1
2