phpstorm+wamp在线调试wordpress

news2024/10/6 16:22:40

简介

本文源自公司内部使用wordpress搭建了一套官网,经常有定制化的需求,有些插件实现不了,需要通过phpstorm调试的方式熟悉wordpress,同时修改php代码,本地测试环境window,适合用wamp作为php运行环境,同时带apache+mysql。

  • WAMP:是Windows、Apache、MySQL和PHP的缩写,它是一个软件堆栈,这意味着在操作系统(Windows)上安装Apache、MySQL和PHP。
  • phpstorm:PhpStorm 是 JetBrains 公司开发的一款商业的PHP集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。
  • wordpress:WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用,可以用不同主题定制为官网,商城,博客等。

wamp安装

下载地址:https://www.wampserver.com/#download-wrapper,也可以去sourceforge下载
https://sourceforge.net/projects/wampserver/files/WampServer%203/
一步步默认安装即可,我的路径安装d:/green/wamp,安装完成后工具栏多了一个图标
在这里插入图片描述
如果没有菜单栏点击启动即可
在这里插入图片描述
apache默认占用80端口
mysql占用3306端口。
mariadb占用3306端口。
可通过工具栏右键-》tools查看
在这里插入图片描述

phpstorm调试环境

下载phpstorm,商业版pj,自行百度
在这里插入图片描述

php开启调试

wamp默认已经集成了xdebug相关库。
在wamp对应的php.ini文件中设置开启调试,并制定调试信息链接的dbgp主机ip和端口。
首先访问php的首页,我这里是http://localhost
点击tools中的xdebug_info()
在这里插入图片描述
注意看下最下面php.ini位置的,不要自己瞎找,wamp一堆的php.ini,绝对很难找到
我的位置: D:\green\wamp\bin\apache\apache2.4.51\bin\php.ini
step debugger明显是没开启的。点击右侧的计算机表示进入docs,可以找到教程(之前看了网上的教程一堆的remote配置,结果不生效,版本问题,所以需要通过文档去看)
在这里插入图片描述
文档如下(说明设置参数xdebug.mode=debug即可)
在这里插入图片描述
打开对应的php.ini找到最下面的xdebug

[xdebug]
zend_extension="d:/green/wamp/bin/php/php7.4.26/zend_ext/php_xdebug-3.1.1-7.4-vc15.dll"
;xdebug.mode allowed are : off develop coverage debug gcstats profile trace
xdebug.mode =develop
xdebug.output_dir ="d:/green/wamp/tmp"
xdebug.show_local_vars=0
xdebug.log="d:/green/wamp/logs/xdebug.log"
xdebug.log_level=7

发现他的值是:develop,改成debug,修改了重启下。
在这里插入图片描述
可以修改php.ini设置这个ip和端口,我这设置为localhost和9000,最终

[xdebug]
zend_extension="d:/green/wamp/bin/php/php7.4.26/zend_ext/php_xdebug-3.1.1-7.4-vc15.dll"
;xdebug.mode allowed are : off develop coverage debug gcstats profile trace
xdebug.mode =debug
xdebug.output_dir ="d:/green/wamp/tmp"
xdebug.show_local_vars=0
xdebug.log="d:/green/wamp/logs/xdebug.log"
xdebug.log_level=7
xdebug.client_port="9000"
xdebug.client_host="localhost"

诊断消息出现,就修改成功了。

[Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9000 (through xdebug.client_host/xdebug.client_port) :-(	

idea配置

在idea中File-Open打开wamp的www目录,打开这个目录的好处是下面的项目,都可以在同一个目录下管理。
在这里插入图片描述
点击File-Settings-Languages & Frameworks ->php->debug 设置xdebug的端口
在这里插入图片描述
Servers新建一个server的配置(ip和端口设置成wamp中apche入口端口)在调试时需要用
在这里插入图片描述
添加一个调试配置
在这里插入图片描述
点击ok,点击调试,浏览器自动弹出地址:
http://localhost/wordpress?XDEBUG_SESSION_START=10392(这个id启动一次换一个)

注意如果你在postman中调用这个地址,需要idea断下来就必须带上XDEBUG_SESSION_START=10392这段参数,

如果你想调试其他项目,改个path带上这个参数即可,比如
http://localhost/helloworld/if.php?XDEBUG_SESSION_START=10392

在这里插入图片描述

如果出现问题,首先netstat -aon | grep 9000看下端口是否开启(注释idea启动调试才会有这个端口),然后就是查看http://localhost/?xdebuginfo的xdebug是否开启,同时Diagnostic Log是否有错误

php语法入门到精通

php语法参考:https://www.runoob.com/php/php-tutorial.html

变量

<!--在?php快外面是html内容,?php快是后端渲染-->
test
<?php
echo "Hello World!";
echo "<br/>";
# ----------------->1.研究变量定义
###############变量定义
$i=100; //注意变量是$开头,结尾要有;定义在最外部的是全局变量
var_dump($i,"<br/>");  //打印变量的堆栈,类型,变量名,堆栈。
$j=$i>100?"老年":"中年"; //三目表达式
echo $j,"<br/>";
//注意php是弱类型,引用全局变量需要定义一个global变量,名称和全局变量一致
function add($t1,$t2){
    global $j,$s; //注意这里$s在外部没有定义,但是也相当于定义了一个全局变量,函数外部就能直接饮用
    static $x=101; //注意这里定义了一个静态变量 $x,在外部引用是会报错的,但是他的值在函数结束后不会被删除,当函数被多次调用时他的值会透传到下一次调用中,保持状态
    $s=100;
    $j=$t1+$t2;
    echo "--->",$GLOBALS["j"],"<br/>";//全局变量原理就是定义在$GLOBALS变量中索引就是变量名,也可以赋值$GLOBALS["$j"]=$t1+$t2;
    return $GLOBALS["j"];
}
$x=100; //注意这里是定义了一个全局变量 $x 与add的局部变量$x不冲突,也互不影响
echo "静态变量",$x,"<br/>";
echo add(10,2),"<br/>";
print("print函数占位符:{$s}<br/>");
//常量,常量是全局的 php中const和define的区别有:const是语言结构,define是函数;const可以在类中使用,define不可以;const不能在条件分支中使用,define可以。
//常量不能使用$开头
define("CHARSET","utf-8");
const  CHASET_GBK="gbk";
echo "常量:",CHARSET,"<br/>";
echo "常量:",CHASET_GBK,"<br/>";
if(CHASET_GBK=="GBK"){

}

//字符串函数 ,参考:runoob.com/php/php-ref-string.html
$str="i_j_s";
echo "字符串长度:",strlen($str),"<br/>";
echo "切割字符串:";var_dump(explode("_",$str));echo "<br/>";
echo "合并数组为字符串:";var_dump(join("_",array("dd","ggg")));echo "<br/>";
echo "找字符串位置:",strpos($str,"_");echo "<br/>"; //注意索引从0开始

###############bool
$isA=true;
###############数组
$cars=array("byd","bmw","bens");
var_dump($cars);echo "<br/>";
echo "打印数组:",$cars[0] .$cars[1].$cars[2],"<br/>";  //可以使用.连接字符串,+号尽量用于数字,不同类型不能使用连接符号,可以使用,隔开
//数组函数,参考:https://www.runoob.com/php/php-ref-array.html
echo "打印数组长度:",count($cars),"<br/>";
//循环打印
for($i=0;$i<count($cars);$i++){
    echo $i," ";
}
echo "<br/>";
//定义map,和js类型索引可以是数组也可以是其他类型
$map=array("name"=>"张三","age"=>12);
echo "获取key对应值:",$map["name"],"<br/>";
foreach ($map as $key=>$value){
    echo "循环获取key对应值:",$key,"=",$value,"<br/>";
}
###############面向对象

class Car
{
    var $color;
    //构造函数
    function __construct($color = "green")
    {
        $this->color = $color;
    }
    function what_color()
    {
        return $this->color;
    }
}
$car=null;
$car=new Car("yellow");
var_dump($car);echo PHP_EOL,"<br/>"; // 换行符:PHP_EOL是\n

?>

ggg

流程

if|switch

<?php
###############流程控制:if
date_default_timezone_set("Asia/Shanghai");
//date_default_timezone_set('UTC');
$date=date("H");
echo "获取小时:",$date,"<br/>";
if($date>=6 && $date<12){
    echo "上午","<br/>";
}
elseif($date>=12 && $date<18){
    echo "下午","<br/>";
}
//switch
$favcolor="red";
switch ($favcolor)
{
    case "red":
        echo "你喜欢的颜色是红色!","<br/>";
        break;
    case "blue":
        echo "你喜欢的颜色是蓝色!","<br/>";
        break;
    case "green":
        echo "你喜欢的颜色是绿色!","<br/>";
        break;
    default:
        echo "你喜欢的颜色不是 红, 蓝, 或绿色!","<br/>";
}

循环

<?php
$arr=array("white","yellow","green");
for($i=0;$i<count($arr);$i++){
    echo $i,"=>",$arr[$i]," ";
}
echo "<br/>";
foreach ($arr as $key=>$value){
    echo "循环获取key对应值:",$key,"=",$value,"<br/>";
}
$i=0;//while循环注意要先初始化变量 否则null无法进入循环
while($i<count($arr))
{
    echo $i,"=>",$arr[$i]," ";
    $i++;
}

引用

了解下include、include_once、require和require_once这4个函数:

  • include函数:会将指定的文件读入并且执行里面的程序;
  • require函数:会将目标文件的内容读入,并且把自己本身代换成这些读入的内容;
  • include_once 函数:在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次;
  • require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含

include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。

include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而 require()则是无条件包含函数。

例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:

if($something){
    include("somefile");
}

但不管$something取何值,下面的代码将把文件somefile包含进文件里:

if($something){
    require("somefile");

常用库

<?php
#############日期 https://www.runoob.com/php/php-ref-date.html
date_default_timezone_set("Asia/Shanghai");
echo date("Y/m/d H:i:s") . "<br>";
echo time(). "<br>";
############自定义异常
class CustomException extends Exception
{
    public function errorMessage()
    {
        // 错误信息
        $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
            .': <b>'.$this->getMessage().'</b>';
        return $errorMsg;
    }
}

try{
    throw new CustomException();
}catch (CustomException $e){
   echo $e->errorMessage(),"<br>"; //注意.是连接字符串->才是调用
}

超级变量(http)

<?php
###############$GLOBALS变量
$x = 75;
$y = 25;
function addition()
{
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();

################$_SERVER
/*
 $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
以下实例中展示了如何使用$_SERVER中的元素: 参考:https://www.runoob.com/php/php-superglobals.html
 * */
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo array_key_exists('HTTP_REFERER',$_SERVER)?$_SERVER['HTTP_REFERER']:"";
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'],$_SERVER["REQUEST_URI"];
echo "<br>";
################请求参数
echo "获取参数:",array_key_exists("id",$_REQUEST)?$_REQUEST["id"]:"","<br>";
echo "获取参数:",array_key_exists("id",$_GET)?$_GET["id"]:"","<br>";
echo "获取参数:",array_key_exists("name",$_POST)?$_POST["name"]:"","<br>";
foreach (getallheaders() as $name => $value) {
    echo "获取请求头:$name: $value<br/>";
}
//解析json数据,是raw方式body添加个json
$post = @file_get_contents('php://input');
if($post!="") {
    $post = json_decode($post, true);        //解析成数组
    var_export($post);
}

//上传文件,postman 使用form-data上传一个名字为file的文件
//文件相关的参数参考:https://www.runoob.com/php/php-ref-filesystem.html
if(array_key_exists("file",$_FILES)){
    echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
    // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
    $uploadDir="d:/upload/";
    //创建上传目录
    if(!file_exists($uploadDir)){
        mkdir($uploadDir);
    }
    if (file_exists( $uploadDir. $_FILES["file"]["name"]))
    {
        echo $_FILES["file"]["name"] . " 文件已经存在。 ";
    }
    else
    {
        // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
        move_uploaded_file($_FILES["file"]["tmp_name"], $uploadDir . $_FILES["file"]["name"]);
        echo "文件存储在: " . $uploadDir . $_FILES["file"]["name"];
    }
}

namespace

新建namespace.php

<?php
namespace a\b{
    $name="zs"; //注意这是全局变量在任何namespace都可以用
    const i=100;
    function print1(){
       echo i;
    }
    class A{
        public function __construct()
        {
        }
    }
}
namespace a\c{
    const i=200;
    function print1(){
        global $name;
        echo i,$name;
    }
    class A{
        public function __construct()
        {
        }
    }
}
namespace {
    //导入其他php文件
    include 'namespacelib.php';
    function print1(){
        echo 500;
    }
    echo print1(),"<br/>";
    echo a\b\print1(),"<br/>";
    echo a\c\print1(),"<br/>";
    echo var_dump(new a\c\A()),"<br/>";
    echo var_dump(new a\b\A()),"<br/>";
    echo var_dump(new a\d\A("zs")),"<br/>";
    a\d\A::staticmethod();
}

新建namespacelib.php

<?php
namespace a\d{
    class A{
        var $name=null;
        public function __construct($name)
        {
            $this->$name=$name;
        }

        static function staticmethod() {

        }
    }
}

mysql数据库

<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "information_schema";


// 检测连接// 创建连接
$conn = mysqli_connect($servername, $username, $password,$database);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功<br/>";
$sql="SELECT * FROM ENGINES";
$result=$conn->query($sql);
if($result->num_rows>0){
    while($row=$result->fetch_assoc()){
        printf("%s (%s)\n<br/>", $row["ENGINE"], $row["COMMENT"]);
    }
}
mysqli_select_db($conn,"jieztech"); //切换到另外一个数据库
$result=$conn->query("drop table if exists a;");//删除表
if(! $result )
{
    die('数据表创建失败: ' . mysqli_error($conn));
}
$result=$conn->query("create table a(id int);"); //创建表
if($conn->query("insert into a(id) values(1)")){ //插入数据
    echo "插入数据成功<br/>";
}
//mysqli_close($conn);
$conn->close();
?>

wordpress安装

wordpress包安装

创建数据库

首先需要在mysql中创建一个库,打开首页http://localhost点击php http://localhost/phpmyadmin/
选择mysql,输入root,密码空进入。
在这里插入图片描述
输入你想要的名字,选择字符集utf8_bin
在这里插入图片描述

wordpress安装

下载并提取WordPress,将文件解压到www目录下,目录结构:
在这里插入图片描述
运行http://localhost/wordpress 一步步安装,选择简体中文(下面几张图copy其他站点的,安装忘记截图了)
在这里插入图片描述
,选择你的数据库名称,账号和密码,
在这里插入图片描述
  在接下来的步骤中,输入您的站点标题,用户名,密码和其余所需数据。您应该取消选中“建议搜索引擎不索引本站点”按钮(因为我们不希望搜索引擎在开发阶段或实验阶段将我们的网站编入索引),然后单击“安装WordPress”
  在这里插入图片描述
访问http://localhost/wordpress/wp-admin 输入你设置的用户名和密码登录

duplicator备份还原

比如你的站点在线上,如果希望备份下来安装到你的wamp中,可以在线上的wordpress安装duplicator插件。
在这里插入图片描述
将下载安装php和备份包两个文件拷贝到www/wordpress目录下,然后访问
http://localhost/wordpress/installer.php,还原完成即可访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解放你的双手----WIN7设置自动化任务

近期在使用双屏工具DualMonitor的时候遇到一个问题&#xff0c;每次电脑锁屏超过一定时常之后&#xff0c;登录解锁该软件虽然在运行但是功能失效了&#xff0c;需要手动关闭打开该程序&#xff0c;一时也没找到有效的解决方法和替代软件&#xff0c;于是就想着能不能在我登录解…

数据存储——存储图像

图像数字化&#xff08;一&#xff09;图像数字化1.图像采样2.数字图像的技术指标3.编码&#xff08;三&#xff09;数字图像的分类1.光栅图2.矢量图总结&#xff1a;图像数字化的过程&#xff08;一&#xff09;图像数字化 按一定空间间隔&#xff0c;自左至右&#xff0c;自…

面试系列Spring:SpringMVC的工作流程

核心组件&#xff1a; DispatcherServlet&#xff1a;前端控制器&#xff0c;负责调度其他模块执行&#xff0c;核心模块 Handler&#xff1a;处理器&#xff0c;完成具体的业务逻辑&#xff0c;相当于Servlet HandlerMapping&#xff1a;处理器映射器&#xff0c;DispatcherSe…

[世界杯]根据赔率计算各种组合可能性与赔率

目录 一、背景 二、数据输入 2.1 赔率示意图 2.2 代码 三、数据处理 3.1 计算各种组合可能性 3.2 修正概率 四、输出结果 一、背景 本文以世界杯体彩“混合过关”4场串胜平负为的赔率进行编码 其他类型如比分 、总进球数可以参考代码进行相应修改 需要的库&#xff…

Web3中文|区块链游戏的成长之痛

来源 | cointelegraph 编译 | DaliiNFTnews.com 在过去十年中&#xff0c;手机游戏已成为互动娱乐产业的重要支柱&#xff0c;得益于智能手机的普及&#xff0c;来自世界各地的用户都成为了硬核游戏玩家。 现在&#xff0c;区块链技术的出现正在推动一种范式的转变&#xff…

基于SSM的在线书城网站【附源码】

一、项目功能 1.前台功能 图书基本展示,包括推荐图书展示和类图书类型展示.推荐图书包括条幅推荐,热销推荐和新品推荐.按照图书类型展示商品.图书详细信息展示.图书加入购物车.修改购物车内图书信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款…

环状序列(逐行解析)(保姆式解析)(算法竞赛入门经典二)

环状序列长度为n的环状串有n种表示法&#xff0c;分别为某个位置开始顺时针得到。例如&#xff0c;图中的环状串有10种表示&#xff1a; CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中&#xff0c;字典序最小的称为“最小表示”。 输入一个长度为n(n<100)的环状DNA串…

leetcode 526. 优美的排列(回溯)

题目链接&#xff1a;526. 优美的排列 回溯 树型结构: 预处理 matchmatchmatch 数组&#xff08;每个位置符合条件的数有哪些&#xff09;&#xff1a; void getMatch(int n) {used.resize(n 1);match.resize(n 1);for (int i 1; i < n; i) {for (int j 1; j < n…

供应双功能螯合剂THP-Mal,THP 马来酰亚胺,CAS:1314929-99-1

一&#xff1a;产品描述 1、名称 THP-Mal THP Maleimide THP 马来酰亚胺 2、CAS编号&#xff1a;1314929-99-1 3、分子式&#xff1a;C44H57N9O13 4、分子量&#xff1a;919.41 5、外观&#xff1a;白色或者灰白色粉末 6、沸点&#xff1a;1389.365.0 C(Predicted) …

内网穿透无法访问本地wordpress网站

解决办法:在wordpress主目录下修改wp-config.php文件 增加2行代码。 define(WP_SITEURL, http:// . $_SERVER[HTTP_HOST]); define(WP_HOME, http:// . $_SERVER[HTTP_HOST]); 增加2代码的意思&#xff1a;设置网站域名为当前访问的域名&#xff0c;也就是取消了域名的绑定。…

Linux下 生成coredump文件前配置

一. Linux下coredump文件 在 Linux 系统下&#xff0c;存在一种 coredump机制。 Linux 系统下&#xff0c;在进行 C/C 开发时&#xff0c;经常会遇到程序运行突然崩溃的问题。这时可以通过离线调试即 coredump 方式进行 bug 的定位。 具体为当程序出现段错误时&#xff0c;内…

用匠心创造可期未来!与广州流辰信息科技一起携手创佳绩!

当今社会世界经济一体化趋势逐渐明朗化&#xff0c;竞争也愈发激烈&#xff0c;同时&#xff0c;这也是一个机遇与挑战并存的开放社会。在机遇面前&#xff0c;作为企业&#xff0c;要紧紧抓住机遇&#xff0c;顺势而为&#xff0c;创造辉煌佳绩&#xff1b;在挑战面前&#xf…

Hostlink读写寄存器报文分析

引言 Hostlink是欧姆龙PLC默认的串口上行通信协议&#xff0c;使用默认的通信协议可免除PLC端的配置工作&#xff0c;易于实现分工协作。下面以CP1E-E的PLC为例进行说明&#xff0c;CP系列的PLC规则都是一样的。 读离散量 请求报文 字节流 40 33 31 46 41 30 30 30 30 30 3…

[Jetson]在nvidia orin/xavier上快速配置深度学习环境(Tensorflow,Pytorch都可以参考)

本文章将介绍如何通过docker在边缘计算设备nvidia orin/xavier上快速配置深度学习环境.该方法适用于Tensorflow,Pytorch,但是本文以介绍Tensorflow的安装为主. 文章目录第一步:安装docker第二步:安装nvidia-docker2第三步:拉取tensorflow镜像3.1 确定容器版本3.2 拉取镜像3.3 测…

awk命令应用

记录&#xff1a;353 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用awk文本处理工具处理文本&#xff1b;使用awk、cat和grep搭配使用处理文本&#xff1b;使用awk直接处理文本&#xff1b;使用shell脚本调用awk脚本处理文本。 版本&#xff1a; 操作系统&#x…

基于神经网络彩色图像插值研究-附Matlab程序

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、色彩过滤阵列CFA✳️ 三、BP网络结构✳️ 四、神经网络彩色图像插值实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 彩色图像插值是通过估算相邻像素来估计缺失的颜色分量的过程&#xff0c;数字相机通过色彩过滤…

若依对SpringSecurity框架的运用

引言&#xff1a;借助ruoyi-vue框架学习其对SpringSecurity框架的运用。若依的前后端分离版本基于SpringSecurity和JWT配合Redis来做用户状态记录. 1 SpringSecurity 1.1 入口 后台接收登录数据&#xff0c;基于用户名和密码封装一个(UsernamePasswordAuthenticationToken)认…

线程安全和synchronized关键字

一&#xff0c;线程安全的引入 1.示例 多线程在多进程的基础上更好解决了并发问题&#xff0c;但由于一个进程内的多个线程是资源共享的&#xff0c;就会出现多个线程在并发执行的时候造成内存中数据的混乱。 举一个例子&#xff1a; class Counter {public int count;publi…

hypervision理解的记录

目录 一、hypervision介绍 Type 1 Hypervisor Type 2 Hypervisor 二、QNX hypervision是TYPE1的虚拟机 三、QNX hypervision架构 1、VMM (虚拟机管理器) 2、virtual-net 3、qnx官网 network 九、其他 一、hypervision介绍 首先&#xff0c;hypervision分为Type1和Type2…

SpringBoot添加外部jar包及打包(亲测有效) - 第452篇

历史文章&#xff08;文章累计450&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 深入Feign源码吃透Spring扩展点「扩展点…