1045 Access denied for user ‘root‘@‘localhost‘ (using password: YES)

MySQL 连接错误,使用Navicat连接MySQL出现错误:1045 Access denied for user ‘root’@‘localhost’ (using password: YES) 解决方法: 编辑mysql配置文件my.ini(在mysql的安装目录下,不同电脑可能不一样,参考目录①D:\Program Files\MySQL\MySQL Server 5.0\my.ini;②C:\ProgramData\MySQL\MySQL Server 8.0\my.ini;),在[mysqld]这个条目下加入 skip-grant-tables 保存退出后重启mysql 1.打开cmd,点击“开始”->“运行”(快捷键Win+R)。 2.停止:输入 net stop mysql 3.启动:输入 net start mysql 也可以在计算机-管理-服务里面找到MySQL的服务,如图 这时候在cmd里面输入mysql -u root -p就可以不用密码登录了,出现 password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为没有grant权限。 继续按下面的流程走: 1.进入mysql数据库: mysql> use mysql; Database changed 2.给root用户设置新密码: mysql> update user set password=password(“新密码”) where user=“root”; Query OK, 1 rows affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 3.刷新数据库 mysql> flush privileges;

aws认证考试_AWS认证:参加考试

aws认证考试 A short time ago I wrote two pieces on this platform to outline why you should consider taking an AWS Certifications exam and how to go about preparing for it. As I wrote them I was also preparing for an exam, myself. And guess what: I passed the AWS Certified Solutions Architect Professional exam! 不久前,我在该平台上写了两篇文章,概述了您为什么应该考虑参加AWS认证考试以及如何进行准备 。 当我写信给他们时,我自己也在准备考试。 猜猜是什么: 我通过了AWS认证解决方案架构师专业考试 ! In this piece, I want to go through my experience of taking the exam online, what you can expect to happen on the day of the exam, and what happens after gaining your certification.

开源视频处理工具Shotcut的用法: 剪切、合并、增加背景音乐、添加字幕、 插入视频、图片转视频并加背景音乐、制作电子相册

shotcut 用法的记录 剪切、合并、调整音量、增加背景音乐、添加字幕、 插入视频(替换式、增加式)、将多张照片做成带有音乐的照片播放视频。 shotcut 是一个跨平台的视频处理软件,可以在linux和windows10 上安装, 界面也汉化的很好的,适合一般自拍视频或者Vlog等的编辑等。 当然,免费、不涉及版权问题,这一点最好了。 这里是记录该软件的 一般用法,是我在使用该软件过程中发现中文教程难以寻找,又不想看视频,所以自己做个易用教程。 感兴趣的可以将本文作为快速入门和参考。 一、 剪切视频 1.打开shotcut, 点击 “文件”→“新建”,建立一个剪切操作项目。 这里是 新工程。 复杂的视频处理可以称之为一项工程了。 2. 编一个 工程名称,点击开始,然后打开你要剪裁的视频文件所在文件夹,将其拖入软件界面即可 3. 调整视频下方时间显示的 前、后 箭头,对要剪切出来的片段进行基于时间轴的定位,然后点击 上方的 输出,会弹出一个导出帮助 对话框。 可以在下图界面的左侧 “预设”中进行输出文件格式等的选择,根据自己需要进行调整 如果有独立显卡,选择使用硬件编辑器, 然后点击下面的输出文件,会弹出为剪切出来的视频进行命名和确定存储位置的操作过程。点击保存,然后就开始保存需要剪切出来的视频内容了。 在软件的右侧会出现 输出过程的进度显示,完成后到输出文件夹用播放器查看剪切下来的视频是否符合要求。 二、两个及多个视频的拼接、合并 1. 和上一步一样,打开软件→新建一个工程→然后点击软件最上方的 “播放列表” 这个功能按钮→找到要合并的视频,拖入播放列表→双击播放列表中你所要作为第一段视频的 名称,这样中间所预览播放的内容就是第一段视频。 2.然后点击下方“时间线” 区域中 的 加号 按钮,就会出现V1. 调节 和加号按钮同行的 放大、缩小的拖动框, 将整个视频调整为合适的显示大小形式。 3. 双击播放列表中,你准备作为紧跟第一段视频的 第二段 视频文件的名称,令中间播放的预览视频为第二段视频文件,然后再点击 加号按钮,即可将第二段视频添加到下方的 时间线 v1中。 4. 然后点击 输出, 调整输入视频的格式等, 选择输出视频的名称和保存位置,等待任务完成即可。 三、调整视频或音乐的音量 1. 还是打开软件,新建工程,拖入要增加背景音乐的视频文件,选中,打开时间线,然后点击 “滤镜” 工具,增加处理滤镜。 2. 点击下图中的加号,即可出现滤镜类型的选择选项列表,可以多选,还有其他较为丰富的滤镜功能

python cli_使用Python创建您的第一个CLI应用程序Click

python cli Life at the terminal is sweet. It’s fast powering up tasks, makes multitasking feel remarkably easy and allows you to keep resources that would otherwise be used by a fancy, but unnecessary, GUI. 码头的生活很甜蜜。 它可以快速启动任务,使多任务处理变得异常简单,并允许您保留原本可以由花哨的但不必要的GUI使用的资源。 Think about having to load up a graphical interface Version Control tool every time you want to track a change in your file — it’s scary how time-wasting that is. That’s our need for command-line interfaces on applications.

传统PHP项目迁移到k8s上

1. 迁移前的准备 多个PHP项目,各个项目框架相同,lnmp方式。迁移到nginx可以实现快速扩容,不同项目使用同一套k8s而不需要新建太多虚拟机,节省了成本。 前期只迁移无状态应用,有状态应用如mysql、redis、rabbitmq仍使用之前的,因为目前项目全都是放在云平台,只需要将k8s部署到之前相同的VPC网段,既可以实现平滑无缝迁移。 传统项目中,nginx和PHP都是安装在同一台server中,通过fastcgi监听127.0.0.1:9000来获取PHP代码的解析结果,考虑到部署的便捷性,将PHP-FPM和nginx放在同一个pod里面的不同容器内,这样仍然可以通过localhost间进行通信。 部署以下项目前需要先部署k8s环境、Ingress-nginx controller,发布的话,可另外部署Jenkins 2. 相关dockerfile及yaml文件 所有文件已放在GitHub,可点击查看 NoviceZeng/nginx-php-k8s (1). nginx的Dockerfile nginx.conf一般不会修改,直接打包到镜像里面,此处关于nginx调用redsi、mysql、rabbitmq的PHP相关配置main-local.php、params-local.php也放入镜像 FROM nginx:1.17.0 COPY nginx.conf /etc/nginx/nginx.conf RUN rm -rf /etc/nginx/conf.d/default.conf \ && mkdir -p /data/conf/viba_back \ && mkdir -p /data/client_h5/dist \ && mkdir -p /data/dev_back COPY client_h5/dist /data/client_h5/dist/ COPY viba_back /data/conf/viba_back/ COPY dev_back /data/dev_back/ (2). php的Dockerfile 根据实际项目安装PHP扩展,此处需要安装redis、rabbitmq和mysql的扩展,通过php-extension-installer使用PHP官方镜像,很easy实现了模块扩展 FROM php:7.2-fpm #使用install-php-extensions安装PHP的扩展模块redis、rabbitmq、mysql COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/ RUN install-php-extensions redis amqp mysqli pdo_mysql \ && mkdir -p /data/dev_back #考虑到以上相关PHP模块安装耗时,可以将以上打包成新镜像 COPY dev_back /data/dev_back/ (3).

在cocos2dx3.15中引入FairyGUI的运行库,修改部分FairGUI运行库源代码以便成功编译。

1:先下载运行库:https://github.com/fairygui/FairyGUI-cocos2dx/projects 还有coocs2dx-3.15; 注意,fairGUI必须支持3.14以上的,我推荐就是3.15以上。 很多都是需要自己调整的,而且他的Example项目的配置和你也可能很不一样。所以不要过于依赖他的项目配置,自己新建项目;自行配置各种要点。 1.1:先修改一下: 打开fairgui的目录的readme,然后看到下面,照着做就可以了。 就是修改virtual void updateBMFontScale(); 其他的不用管,就修改这个就行。 1.2:继续修改:那个GLoader3D.cpp文件; 找到GLoader3D::onChangeSpine 然后注释掉这个方法的代码;这个方法有些bug。这是spine模块的; 不过现在不需要。 2:用cocos new搞一个lua项目或者C++,具体看看命令行即可。 至于减少编译时间只需要搞对应的lib,dll复制过来, 或者直接干脆就编译一下吧。记得,必须用VS2015以上! 注意,先编译好,再看下面 3:下面是重点了。 3.1: 把fairgui文件拷贝到 C:\你的VS项目目录\cocos2d\cocos\editor-support下面; 然后打开VS项目,在解决方案下添加这个项目。 其中,添加一定会出错, 打开libfairygui.vcxproj。 删除一些东西: 找到下面这个代码块: 把“”删除“”中间的代码删除了。然后就可以把ibfairygui.vcxpro加入项目中! <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> /删除 <Import Project="..\..\Examples\cocos2d\cocos\2d\cocos2dx.props" /> <Import Project="..\..\Examples\cocos2d\cocos\2d\cocos2d_headers.props" /> /删除// </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> /删除// <Import Project="..\..\Examples\cocos2d\cocos\2d\cocos2dx.props" /> <Import Project="..\..\Examples\cocos2d\cocos\2d\cocos2d_headers.props" /> //删除// </ImportGroup> 3.11: 3.2:设置你的项目头文件路径:这是你的项目的路径,因为要引用fairgui的头文件,不是fairgui项目的 3.3:libfairygui项目的项目管理器中,加入下面这两个。 他们在cocos/2d目录下;自己加即可很简单 3.4:在上面的cocos2dx(两个都是)右击属性, 链接器输入添加libfairygui.lib,

图像识别中——目标分割、目标识别、目标检测和目标跟踪的区别

计算机视觉旨在识别和理解图像/视频中的内容,包含四大基本任务:分类(图a)、定位、检测(图b)、语义分割(图c)、和实例分割(图d)。 这四个任务需要对图像的理解逐步深入。给定一张输入图像, 图像分类任务旨在判断该图像所属类别。 目标定位是在图像分类的基础上,进一步判断图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式。在目标定位中,通常只有一个或固定数目的目标。 目标检测更一般化,其图像中出现的目标种类和数目都不定。 语义分割是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标。但是,语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是, 实例分割则与语义分割不同,需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。 目标跟踪通常是用于视频数据,和目标检测有密切的联系,同时要利用帧之间的时序关系。

数字IC设计随笔之一(Verdi自动添加波形脚本应用)

Verdi自动添加波形脚本应用 在刚接触verdi时,每次查看波形都需要重新加载一遍,写了简单的脚本用于实现波形加载,没想到下载需求挺多,也有私信问如何使用,在这里将做简单的说明。 脚本有三个文件,分别是genwavecmd.sh、template.cmd和wavelist.txt,其中template.cmd是Verdi波形加载的模板,之前采用的Verdi软件版本低,在新版本中执行时将出现语法错误;wavelist.txt是需要查看的信号列表,必须以相应的语法格式书写,才便于genwavecmd.sh脚本读取。 wavelist.txt文件内容如下: /DCU_tb/DCU/ClockGen ( por oscclk rstn ) /DCU_tb/DCU/RAMController ( POR PWE PPROG ) /DCU_tb/DCU/Timer ( timer_INT ) 信号的定义以层级的形式声明信号所属的模块,之后在圆括号里声明需要查看的信号名,比如第一组信号声明,首先声明/DCU_tb/DCU/ClockGen,表示从顶层模块引用ClockGen模块中的信号,括号中的信号为该模块中的信号。后面两组信号类似。 template.cmd中的类容需要修改以在新版本的verdi中运行,主要修改内容为文件的读入和fsdb文件的加载,修改后的文件如下: debImport “-f” “./tb.v” wvCreateWindow wvResizeWindow -win $_nWave2 0 30 1920 394 wvOpenFile -win $nWave2 {/home/stu05/project/test_example/vg_dump.fsdb} verdiDockWidgetHide -dock widgetDock_WelcomePage verdiDockWidgetHide -dock widgetDock<Inst.Tree> verdiDockWidgetHide -dock widgetDock<Decl.Tree> verdiDockWidgetHide -dock widgetDock verdiDockWidgetHide -dock widgetDock_MTB_SOURCE_TAB_1 verdiDockWidgetDisplay -dock windowDock_nWave_2 wvResizeWindow -win $_nWave2 0 30 1920 874 wvGetSignalOpen -win $_nWave2 wvAddSignal -win $_nWave2 -clear

RTL仿真,前仿真,后仿真的区别

初学者学习FPGA,必定会被它的各种仿真弄的晕头转向。比如,前仿真、后仿真、功能仿真、时序仿真、行为级仿真、RTL级仿真、综合后仿真、门级仿真、布局布线后仿真等。 Quartus和Modelsim软件的仿真形式 Quartus II有两种仿真形式:1、功能仿真;2、时序仿真。 Quartus II调用Modelsim的两种仿真形式为:1、RTL级仿真;2、Gate-level仿真。 以下内容均经过资料查证,详细如下: 理解方法一 当用quartus进行仿真时,分为功能仿真(al)和时序仿真(Timing); 当用Modelsim-Altera时,分为功能仿真(RTL)、综合后仿真(post-synthesis)和布局布线仿真(Gate-level)。其中,功能仿真又称为前仿真,布局布线仿真又称为后仿真。 注:此处的功能仿真(RTL)与1中的功能仿真(al)是不一样的,前者是HDL级仿真,后者是门级网表的功能仿真。 (1)当在quartus中调用Modelsim-Altera进行RTL仿真时(前提是在第三方仿真工具中选择Modelsim-Altera),步骤如下: a) 编写源文件和测试文件; b) Assignment-》setting-》simulation-》不选中run gate leve simulation.。..。,选中nativelink-》添加测试文件,填写文件名; c) start analysis&elabration; d) Tools-》start RTL simulation; (2)综合后仿真一般不做。 (3)当在quartus中调用Modelsim-Altera进行Gate-level仿真时(前提是在第三方仿真工具中选择Modelsim-Altera),步骤如下: a) 编写源文件和测试文件; b)Assignment-》setting-》simulation-》选中run gate leve simulation.。..。,选中nativelink-》添加测试文件,填写文件名; c)全编译; 评价:对于Assignment-》setting-》simulation-》“run gate leve simulation automatically after comlilation”选不选中根本没必要说明,完全可以不用选中,需要在设置处把测试文件testbench添加就可以了(不添加的话到时候 quartus调用出modelsim软件后需要手动添加编译,下面补充了)。如果你想RTL级仿真,那么对于quartus ii只需要进行分析综合就可以,然后点击Tools-》Run EDA Simulation tool-》Run RTL Simulation即可,软件会自动将源文件以及测试文件在modelsim软件里编译,仿真出波形。如果你想Gate-level级仿真,那么对于 quartus ii需要对工程进行全编译,然后点击Tools-》Run EDA Simulation tool-》Run Gate-level Simulation即可,软件会自动将网表文件.vo(verilog输出文件)或.vho(VHDL输出文件)以及测试文件在modelsim软件里编译,并将标准延迟文件SDF(.sdo)添加到modelsim里面,仿真出波形。 补充:顺便说一句,如果没有在Assignment-》setting-》simulation把测试文件testbench设置好的话,不论是在RTL还是Gate-level级仿真,调用出modelsim后Quartus只把.vo或.vho文件送到modelsim里编译了,然后都需要手动把testbench编译进去的,并且将在Run Gate-level Simulation仿真的时候,.sdo文件也需要手动添加,相对来说比较麻烦。 vivado中的各种仿真: xilinx的开发软件 vivado 的仿真模式, vivado的仿真暂分为五种仿真模式。 分别为: 1. run behavioral simulation-----行为级仿真,行为级别的仿真通常也说功能仿真。

大数据——hadoop之hive安装和配置

hadoop之hive安装和配置 安装Hive前,需要准备的条件安装Hive配置Hive 安装Hive前,需要准备的条件 Hive需要hadoop环境 hadoop环境安装和配置Hive需要zookeeper环境 zookeeper安装和配置Hive需要myql数据库 mysql数据安装和设置 安装Hive 进入software目录 [root@hadoop100 ~]# cd /software 解压hive-1.1.0-cdh5.14.2.tar.gz到opt目录下 [root@hadoop100 software]# tar -zxvf hive-1.1.0-cdh5.14.2.tar.gz -C /opt 进入opt目录下 [root@hadoop100 software]# cd /opt 把hive-1.1.0-cdh5.14.2改名 [root@hadoop100 opt]# mv hive-1.1.0-cdh5.14.2/ hive 配置Hive 进入hive目录下,并创建个warehouse目录 [root@hadoop100 opt]# cd hive/ [root@hadoop100 hive]# mkdir warehouse 修改环境变量 [root@hadoop100 hive]# vi /etc/profile 输入 export HIVE_PATH=/opt/hive export PATH=$PATH:$HIVE_PATH/bin 保存退出,使环境变量生效 [root@hadoop100 hive]# source /etc/profile 查看版本信息 [root@hadoop100 hive]# hive --version 进入conf目录下 [root@hadoop100 hive]# cd conf/ 把hive-env.sh.template改名 [root@hadoop100 conf]# mv hive-env.

three.js方向光DirectionalLight使用,调整方向光颜色、光源位置、光照强度、光照指向、是否可见、是否产生阴影属性(vue中使用three.js10)

方向光DirectionalLight使用 一、方向光介绍二、如何使用方向光1.创建方向光2.方向光的属性2.1颜色-color2.2是否可见-visible2.3强度-intensity2.4目标-target2.5位置-position2.6是否产生阴影-castShadow2.7投影远点-shadow.camera.far2.8投影近点-shadow.camera.near2.9投影上边界-shadow.camera.top2.10投影下边界-shadow.camera.bottom2.11投影左边界-shadow.camera.left2.12投影右边界-shadow.camera.right2.13shadow.mapSize.width 和 shadow.mapSize.height 三、demo效果四、demo代码 一、方向光介绍 方向光发出的所有光线都是平行的,可以认为是距离很远的光源,例如遥远的太阳光就是方向光,方向光不像聚焦光那样距离目标越远越暗淡,被方向光照射的整个区域收到的光照强度都一样 二、如何使用方向光 1.创建方向光 创建一个简单的方向光,通过new THREE.DirectionalLight(color)语句就可以创建一个指定颜色的方向光,然后将它添加到场景中就可以了 var directionalLight = new THREE.DirectionalLight(0x0c0c0c) // 创建方向光 scene.add(directionalLight ) // 将方向光添加到场景 2.方向光的属性 2.1颜色-color color属性继承自基类Light,color属性的类型是Color,所以color属性的值需要通过颜色对象THREE.Color()来创建 2.2是否可见-visible visible属性继承自基类Object3D,使用很简单,该属性时布尔类型,取值true或false 2.3强度-intensity intensity属性是用来设置聚光灯的强度,默认值是1,如果设置成0那什么也看不到,该值越大,点光源看起来越亮 2.4目标-target target属性用来决定光照的方向,一般会指向一个对象 2.5位置-position position属性表示光源的发光位置,该属性继承自基类Object3D,positon属性的类是Vector3 2.6是否产生阴影-castShadow castShadow属性是用来控制光源是否产生阴影,取值为true或false 2.7投影远点-shadow.camera.far 表示到距离光源的哪一个位置可以生成阴影 2.8投影近点-shadow.camera.near 表示距离光源的哪一个位置开始生成阴影 2.9投影上边界-shadow.camera.top 2.10投影下边界-shadow.camera.bottom 2.11投影左边界-shadow.camera.left 2.12投影右边界-shadow.camera.right 2.13shadow.mapSize.width 和 shadow.mapSize.height 阴影映射宽度和阴影映射高度。决定了有多少像素用来生成阴影。当阴影具有锯齿状边缘或看起来不光滑时,可以增加这个值。在场景渲染之后无法更改,默认值都为512 三、demo效果 如上图,该示例支持以下功能 可以控制方向光是否显示调整方向光颜色调整方向光的位置调整方向光的强度调整聚光灯的照射目标,即光照方向调整聚光灯是否产生阴影 四、demo代码 <template> <div> <div id="container"></div> <div class="controls-box"> <section> <el-row> <el-checkbox v-model="lightProperties.visible">是否展示方向光</el-checkbox> </el-row> <el-row> <el-col :span="8" class="label-col"><label> 方向光颜色</label></el-col> <el-col :span="16"> <div @click="

pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at row 56789

笔者在用pandas读取csv文件时遇到该报错,根据报错提示,是因为在解析时出现了意外的文件结束符。在具体的报错信息中,会提示第几行触发异常,所以笔者通过查看原始原件的相应的第56789行,发现是该行出现了乱码,并且乱码中有一个双引号;所以实际上,该报错是因为pandas读取csv文件时,会默认把csv文件中两个双引号之间的内容解析为一个string,作为一个字段域读入,并且忽略两个双引号之间的分隔符。所以,在默认方式下,一旦文件中出现了奇数个双引号,那么最后一个引号从所在的行开始,直到文件结束也没有对应的结束引号形成单个字段域,就会报这个异常,即文件结束符(EOF)出现在了字符串中。 解决办法就是改变pandas在读取csv的这种默认行为。在pandas的read_csv函数中,有两个参数和这个行为有关,分别是quotechar引用符和quoting引用行为,如下所示,摘自pandas的官方文档。 quotechar : str (length 1), optional The character used to denote the start and end of a quoted item. Quoted items can include the delimiter and it will be ignored. quoting : int or csv.QUOTE_* instance, default 0 Control field quoting behavior per csv.QUOTE_* constants. Use one of QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3). quotechar引用符参数是表示在读取解析时,将指定的符号认为是引用符,不仅仅限制于双引号,默认情况下是双引号。被设为引用符之后,就会按照上面所述的那样,在引用符之间的内容会被解析为单个域读入,包括换行符和分隔符。而quoting表示引用行为,即如何对待引用符的解析。这里具有四种情况,分别是csv.QUOTE_MINIMAL, csv.QUOTE_ALL, csv.QUOTE_NONNUMERIC, csv.QUOTE_NONE.默认是csv.QUOTE_MINIMAL.这四个参数的解释如下: csv.QUOTE_MINIMAL:只有当遇到引用符时,才会将引用符之间的内容解析为一个字符域读入,并且读取之后的域是没有引用符的,即引用符本身只作为一个域的边界界定,不会显示出来;在写入时,也只有具有引用符的域会在文件中加上引用符。 csv.QUOTE_ALL:在写入文件时,将所有的域都加上引用符。 csv.QUOTE_NONNUMERIC:写入文件时,将非数字域加上引用符。 csv.QUOTE_NONE:读取文件时,不解析引用符,即把引用符当做普通字符对待并且读入,不做特殊的对待;在写入文件时,也不对任何域加上引用符。 所以,要解决这个异常,我们只需要将quoting参数设为3,或者导入python的内置模块csv,设为csv.QUOTE_NONE,这样pandas在读取时,就只会把引用符当做普通字符,从而不会一直寻找对应的结束引用符直至文件结束都没找到,从而报错。当然,由于这行是乱码,分隔符数量很可能也不正常,即分隔后和前面的行的域的个数不一致,还会报错,所以我们只需要将error_bad_lines参数设为False,这样pandas就会自动删除这种不正常的bad lines,从而文件剩下的正常的内容就可以正常的读入了。当然,根据quotechar的功能,我们也可以通过将quotechar设为其他的单个字符,从而pandas会把双引号当做普通字符,但是这样做的风险在于可能会触发其他引用符带来的异常,所以不推荐这样做。

在vue中如何在input中点击时,选中输入框中所有内容

在vue中如何在input中点击时,选中所有内容 <input type="text" :placeholder="showLogin === true ? '请输入手机号':'请输入用户名/邮箱'" v-model="userPhone" @click="selectValue($event)" /> methods: { // 点击选中所有 selectValue(e) { console.log(e); e.currentTarget.select(); }, } 参考博客:vue中如何让表单点击的时候选中表单中的内容?

基于SSM框架的校园二手交易平台实战记录(二)

持久对象层 首先先放一个目录结构: 从目录结构应该看出来了,基本上就是user、goods、bills的增删改查,我也就只例举一个user管理的操作了,剩下的goods、bills照猫画虎就行了。 先在pojo文件夹下创建一个User类,然后写上类的属性和toString、get、set方法就行了。 public class Yzq_User { private String userId; private String username; private String password; private int role; private String phone; private String gender; private int age; private Date createtime; private String address; @Override public String toString() { return "Yzq_User [userId=" + userId + ", username=" + username + ", password=" + password + ", role=" + role + ", phone=" + phone + ", gender=" + gender + "

基于SSM框架的校园二手交易平台实战记录(一)

项目描述 这是大学期间实训时的小组项目,我主要负责框架搭建和后端实现,也涉及了部分前端页面设计。这篇文章主要是进行一个实战记录,方便自己以后回顾,也顺便分享我自己的项目开发历程,也希望能帮到像我一样的小白,文章中如有错误,希望大佬能够指出,感谢。 JDK版本:1.7数据库:MySQL框架:Spring + SpringMVC + MyBatis服务器:Tomcat开发工具:MyEclipse 10 二手商品交易平台是一个针对校园范围内使用的二手商品交易平台,是提供个人与个人之间的电子商务通道,用户即是买家又是卖家。平台中,用户可以发布自己的闲置二手物品,浏览校园内闲置商品信息,可以搜索自己想要购买的商品,来购买其他卖家的闲置商品,在确认购买商品后,会在订单中获得卖家的联系信息,与卖家私下交流完成交易。 该项目是针对校园中的学生,方便学生去获得周围闲置物品信息的平台,交易全是学生自主交易,本产品不承担相应的法律责任。 项目预览 用户页面 登录页面 这是用户登录界面,管理员登录页面从登录按钮的左下链接进入。 注册页面 网站主页 商品页面 商品详情页 购买后,按订单中的联系方式,自行联系卖家,双方私下交易,平台不进行资金流转,这样就能有效避免商品与实物不符的问题。 商品发布页面 我的发布页面 商品信息修改页面 我的订单页面 修改密码页面 修改个人信息页面 管理员页面 管理员主页 商品管理页面 商品详情页面 管理员的商品详情页面没有购买按钮。 用户管理页面 项目开发 maven依赖 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <!-- Mysql的驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!-- dbcp坐标 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- aspectj坐标 --> <dependency> <groupId>org.

ByteBuffer

大小端的基础知识: 小端 ( little-endian):低位字节在前,高位字节在后。大端(Big-Endian),则反之。具体而言,就是为了说清楚,CPU架构中1字(word)的存储顺序。计算机内存中数据自然流动的顺序就是:低位先来,高位紧随其后 JAVA中所有的二进制文件都是按大端存储,这种存储方式也被称为network order。即在所有的平台上,如Mac、 PC、 UNIX等等运行JAVA,都不用考虑大小端的问题。麻烦的是不同语言开发的程序进行数据交换,如笔者最近的项目,二进制文件是由C生成的,通过redis 消息通道以Json格式发过来,而C语言默认是小端模式,就涉及到大小端转换。有些平台(如Mac、IBM 390)内置用的大端模式,其它一些平台内置用的小端模式 (如Intel)。JAVA帮你屏蔽了各平台字节顺序的差异。 32位16进制的 0x45679812在内存中的存储(大小端模式)如下图: /** * 将小端bytes数据转化为大端数据 * * 默认网络传输字节为大端,java 全部为大端(与平台无关) * 关于 “Little-Endian and Big-Endian”,详情请参考: * * @param bytes * @return 转化后得到的整数 * @Link https://howtodoinjava.com/java/basics/little-endian-and-big-endian-in-java/ * */ private int bytesToBigEndian(byte[] bytes) { int result = 0; if (bytes == null || bytes.length < 0) return -1; ByteBuffer buffer = ByteBuffer.wrap(bytes); buffer.order(ByteOrder.BIG_ENDIAN); if (bytes.length == RECORD_BYTES_SIZE) { result = buffer.getInt(); } else if (bytes.

【异常】Cannot read property ‘style‘ of undefined

1、一定要看看自己的传数据的地方是不是写错单词了!! 我把url 或者 php文件的名字写错了,就找不到对应的数据,然后你利用这些数据进行下一步操作时,自然是会报错; 下面这个是报错 定位到的地方: 1)看看自己这个地方变量名称是不是写错了 2)如果你的变量 (blcokTable)没有获得数据或者写错就会导致无法获取到数据,就会报这个错!!!!! 2、还可能是你文件还没加载完成就执行了js操作,也会报这个错 可以看下这个博客 window.onload的问题

Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)

废话不多说,直接上教程,喜欢请收藏加关注!谢谢支持!!! 第一步,搜索打开win10自带的应用商店 第二步,在商店内搜索安装Windows Terminal(不下载此软件也可以使用linux子系统,但是传统linux命令行终端操作不够便捷) 此时,我们仅仅安装了一个命令行终端而已,离我们扔掉Linux的目标还差上一小节。下面就介绍怎么在Windows上安装Ubuntu 首先与传统方法作比较: 传统方案一、通过虚拟机安装Linux,然后终端去访问。 传统方案二、划分一个分区安装Linux,然后重启的时候进行切换。 现在我们可以使用第三种方式,将linux作为win10的一个子系统来实现对linux的操作,下面进入重要环节,我们继续!!! 第三步,在控制面板,找到程序和功能选项(版本不同,有的系统是程序),点击 “启用或关闭Windows功能”,如下图所示: 从弹出的对话框里,划到最下边,然后给“适用于Linux的Windows子系统“,打勾! 此处会要求重启电脑,选择重启! 第四步,从Windows应用商店安装linux系统,这个系统将会以软件的形式存在。(搜索linux,找到自己喜欢的系统下载即可,作者使用的是Ubuntu系统) 第五步,此时,在我们的Windows Terminal右上角,有一个向下的箭头,点击它,就可以看到刚刚安装的linux系统(我这里是Ubuntu) 进入Linux系统之后,就是我们熟悉的Linux文件夹啦,我们就可以像配置一个普通Linux一样配置这台机器。 至此,Linux 作为Windows的子系统已经下载完成,是不是超级简单! 下面是一些注意事项: 1、win系统中linux的文件保存在哪里? C:\Users\你的电脑用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs 2、linux终端上怎样访问Windows的内容? Windows的所有内容均在/mnt下,其中c、f、g为我的电脑盘符 3、内置的Linux系统使用的IP地址与window系统的IP是共享的 更进一步! 作者才疏学浅,如果想linux子系统的使用更进一步,其他操作诸如C++编译环境、linux图形界面等的配置,可以参考以下博文。 https://blog.csdn.net/Azraelcc/article/details/95937372?utm_medium=distribute.pc_relevant_t0.none-task-blog-opensearch-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-opensearch-1.channel_param

lookup vindex

文章目录 创建vttablet创建lookup vindex创建VReplication streams 创建vttablet 分别在116、117、118节点上创建vttablet 主机116117118vttablet200201202vttablet300301302 for i in 200 201 202;do sh scripts/vttablet-up.sh user i vt_user1 3313 -80 done vtctlclient \ -server 10.216.91.117:15999 \ -log_dir /data/service_data/vitess/vtdataroot/tmp/ \ -alsologtostderr \ InitShardMaster -force user/-80 zone1-200 for i in 300 301 302;do sh scripts/vttablet-up.sh user i vt_user2 3314 80- done vtctlclient \ -server 10.216.91.117:15999 \ -log_dir /data/service_data/vitess/vtdataroot/tmp/ \ -alsologtostderr \ InitShardMaster -force user/80- zone1-300 创建vschema: vim vschema_user_sharded.json { "sharded": true, "

Vindex

文章目录 vindex如何选择vindexvindex的优势Primary VindexSecondary VindexLookup Vindex keyspace id vindex Vindex可以将字段值映射为keyspace ids。Vitess中的每个分片都覆盖一定范围的keyspace ID值,因此可以使用此映射来识别每一行属于哪个分片。 如何选择vindex where条件中频繁使用的列唯一性 (映射函数)用于join关联的列基数较高的列 vindex的优势 Vindex的优势源于其灵活性: 一张表可以有多个vindex.Vindexes可以是非唯一的,允许一个列产生多个kespace id值。Vindexes可以是一个简单的函数或者基于lookup表。Vindex可以在多张表中进行共享。可以创建使用自定义的Vindexes。 Primary Vindex Primary Vindex类似于表中的主键。每张分片表中必须含有一个Primary Vindex。primary vindex必须是唯一的:也就是说给定一个输入值,只能生成一个keyspace id。Primary Vindex决定了插入的行属于哪一个分片。通常可以将Primary Vindex称为分片键。 Primary Vindex必须是唯一的,但不一定是主键或唯一键,允许不同行映射为同一个keyspace id,Vindex唯一性约束仅确保同一个分片中的所有行具有相同的keyspace id边界。 分片表必须有一个Primary VindexPrimary Vindex必须是唯一的,但不一定是主键或唯一键,允许不同行映射为同一个keyspace idPrimary Vindex列称为分片键Primary Vindex不仅定义了分片键还决定了分片策略 Secondary Vindex Secondary Vindexes可以为where条件中没有使用primary vindex提供选择优化。Secondary Vindexes返回一个或多个keyspace id,可以确保查询落在确定的分片上,如果没有Secondary Vindexes,查询语句将会分散到所有分片上。 secondary vindex列上需要有相应的辅助索引。 Lookup Vindex 使用lookup vindex需要创建一张表,该表包含两个字段,第一个字段为主表的vindex字段,第二个字段字符类型为binary或者VARBINARY需要存储keyspace id。主表中插入数据时相应的也会在lookup表中插入数据。 表结构示例: create table user_seq( id int, next_id bigint, cache bigint, primary key(id) ) comment 'vitess_sequence'; insert into user_seq(id, next_id, cache) values(0, 1, 3); create table music_seq( id int, next_id bigint, cache bigint, primary key(id) ) comment 'vitess_sequence'; insert into music_seq(id, next_id, cache) values(0, 1, 2); create table name_keyspace_idx( name varchar(128), keyspace_id binary(8), primary key(name, keyspace_id) ); create table user( user_id bigint, name varchar(128), primary key(user_id) ); create table user_extra( user_id bigint, extra varchar(128), primary key(user_id) ); create table music( user_id bigint, music_id bigint, primary key(user_id, music_id) ); create table music_extra( music_id bigint, keyspace_id bigint unsigned, primary key(music_id) ); create table name_info( name varchar(128), info varchar(128), primary key(name) ); create table music_keyspace_idx( music_id bigint not null auto_increment, keyspace_id binary(8), primary key(music_id) ); vschema示例:

CTF-隐写术(一)

声明:以下CTF题均来自网上收集,在这里主要是给新手们涨涨见识,仅供参考而已。需要题目数据包的请私信或在下方留言。 1.欢迎来到地狱(来源:实验吧) 1.关卡描述 2.解题步骤 分析: 查看压缩包文件: 发现一张图片和word文档,并打开: 图片打不开(猜测密钥就在图片中),把图片拖入winhex中,发现缺少文件头(.jpg FFD8FF),粘贴3字节修改一下即可。 https://pan.baidu.com/s/1i49Jhlj 是一段音频 使用audacity 来处理这段音频:地狱之声.wav 发现其类似莫斯电码, -.- . -.-- .-.. . - ..- ... --. --- 将音频听到的声音,按照摩斯电码的规律记录下来“-.- . -.-- .-.. . - ..- ... --. --- ”,用CTFCrackTools工具进行转换得到一串字符“KEYLETUSGO” KEYLETUSGO 得到word密码:letusgo(小写有点坑) 打开word后: 看看 word里面有没有隐藏文字 文件--》选项---》隐藏文字的勾 勾上 出来了 steganography 上工具。。。 文档文字中说这张狗是通向第三层的钥匙,所以把狗的图片复制出来进行分析。 推荐两个在线解读隐藏信息的图片: http://www.atool.org/steganography.php http://tools.jb51.net/aideddesign/img_add_info 密钥:key{you are in finally hell now} 根据刚才的经验,知道这个key肯定是最后一个压缩包所要用到的 解压后有两个文件: 一张图片和一个txt文本信息,打开这个txt文档 通过里面的文字说明可以知道这个文档是那张图片所需要的秘钥,而文档理由提出按二进制数字,将其8个一组进行转换ASCII码,得到“ruokouling”,翻译成中文就是“弱口令”,好吧,这个的意思要么这个拼音是图片的秘钥,要么就是图片的解密需要弱口令,而需要弱口令的通常是爆破的时候,也就是说这张图片可能隐藏了一个压缩文件,所以用kali里的binwalk工具查看 把图片 地狱大门.jpg 的后缀改成 地狱大门.zip 然后打开: 需要解密: 通过之前的解密得到的提示,需要使用弱口令,所以打开工具Ziperello,进行弱口令字典爆破得出密码:(需要一个好的字典) 输入密码Password,打开这个文件,发现一段说明: 贝斯即base sixfour即64

批量地址解析

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>批量地址解析</title> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script> </head> <body> <input type="button" value="批量地址解析" onclick="bdGEO()" /> <div id="result"></div> </body> </html> <script type="text/javascript"> var index = 0; var myGeo = new BMap.Geocoder(); var adds = [ "百度大厦", "奎科大厦", "中央民族大学", "佳郡国际水疗", "金坛区晨鸿服装水洗公司", "常州市双成塑母料有限公司", "常州河海服装厂", "领域世家" ]; function bdGEO(){ var a = adds[index]; geocodeSearch(a); index++; } function geocodeSearch(a){ if(index < adds.length){ setTimeout(window.bdGEO,300); } myGeo.getPoint(a, function(point){ if (point) { myGeo.

Java自动化测试(web自动化测试框架 28)

测试数据 测试地址 http://120.78.128.25:8765/ 投资人 13323234545 lemon123456 借款人 13323234444 lemonbest 后台地址 http://120.78.128.25:8765/Admin/Index/login.html lemon7 lemonbest Page Object PO简介 https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/ Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性。 Page Object 设计模式的优点如下: 减少代码的重复; 提高测试用例的可读性; 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目; Paget Object 使用注意: public方法代表Page提供的功能 尽量不要暴露Page的内部细节 不要assertion 方法可以返回其他Page Objects Page Objects不用代表整个页面,可以是任意一个部分 一样的操作,不同的结果应该分开(正确登录,错误登录) 使用po是对页面进行抽象或者说建模的过程,需要把页面当作一个对象。 面向对象编程语言中,进行面向对象编程需要考虑以下两点: 对象的属性「全局变量」 == web页面的元素「定位方法,定位值」 对象的行为「方法」 == web页面的元素的操作 编写页面操作基类 package com.zhongxin.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class BasePage { private WebDriver driver; public BasePage(WebDriver driver) { this.

VMware Workstation 在此主机上不支持嵌套虚拟化。模块“MonitorMode”启动失败。未能启动虚拟机。

VMware Workstation 在此主机上不支持嵌套虚拟化。模块“MonitorMode”启动失败。未能启动虚拟机。 所遇问题: 原因分析: 得知VMware Workstation Pro 升级至15.5.6版本后,可以与Hyper-V兼容起来了。于是升级了。升级之后可以正常开启虚拟机。前几天,想试一试Windows沙盒,就是于是也安装起来了。测试安装成功。今天又再次打开了虚拟机,就报如上错误。VMware Workstation 在此主机上不支持嵌套虚拟化。,一提示到这个,我就想起来是可能是Hyper-V开启捣的鬼,百度了一大堆,有人说是windows电脑系统升级到2004版本的问题,需要重装系统之类的,也有人说是VMware 版本没有卸除干净,需要重装。额…怎么说呢,不想这么折腾。于是,下意识想到了,每次为什么要在内存那里选项中,开启虚拟化 Intel VT -x/RVI(V)呢,是不是现在windows兼容了,不需要在vm里开启虚拟化了。抱着试一试的心态,于是成功了。 成功。

Nginx中配置https服务兼容访问http资源

Nginx中配置https服务兼容访问http资源 简介: HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错: Mixed Content: The page at ‘https://www.taobao.com/‘ was loaded over HTTPS, but requested an insecure image ‘http://g.alicdn.com/s.gif’. This content should also be served over HTTPS. HTTPS改造之后,我们可以在很多页面中看到如下警报: upgrade-insecure-requests CSP 指令的作用就是让浏览器自动升级请求,防止访问者访问不安全的内容。 该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用。 1、html强制让http的访问Https <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"/> 2、php强制让http的访问Https header("Content-Security-Policy: upgrade-insecure-requests"); 3、nginx 强制让http的访问Https server { #HTTP_TO_HTTPS_END ssl_certificate /etc/letsencrypt/live/yogayx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yogayx.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Content-Security-Policy "

判断丑数

丑数:只包含2,3,5一个或多个质因子的数 例如:14 不是丑数 python代码如下,判断一个数是否为丑数: def isUglyNum(num): lst = [2, 3, 4] n = 0 if num <= 1: return 0 elif num in lst: print('{} is Ugly number'.format(num)) else: for j in [2, 3, 5]: if num % j == 0: n += 1 if n == 0: print('{} is not Ugly number'.format(num)) return False for i in range(5, num, 2): if i > 5 and num % i == 0: print('{} is not Ugly number'.

python两种方法实现线性规划

Python实现线性规划的计算 线性规划的目标函数既可以是求最大值,也可以是求最小值,约束条件可以是小于等于也可以是大于等于,但为了方便起见,MATLAB和python都规定线性规划标准型为: z = m i n f T x , s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b z=min\ \bm f^T\bm x,\\ s.t.= \begin{cases} \bm{A} \cdot \bm x \le\bm b,\\ Aeq \cdot \bm x=beq ,\\ lb\le \bm x \le ub \end{cases} z=min fTx,s.t.=⎩⎪⎨⎪⎧​A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub​ 转换为标准型的方法 目标函数 m a x → m i n max \rightarrow min max→min

几种常见的数据库连接的URL写法

达梦云适配中心上线啦,可以在线玩数据库,在线玩sql,在线问问题~各位老表们快戳连接来玩吧: https://eco.dameng.com/community/question 1 mysql 驱动:com.mysql.jdbc.Driver URL:jdbc:mysql://machine_name:port/dbname 注:machine_name:数据库所在的机器的名称; port:端口号,默认3306 2 oracle 驱动:oracle.jdbc.driver.OracleDriver URL:jdbc:oracle:thin:@machine_name:port:dbname 注:ip:数据库所在的机器的名称; port:端口号,默认是1521 3 SQL Server 驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName= 注:machine_name:数据库所在的机器的名称; port:端口号,默认是1433 4 DB2 驱动:com.ibm.db2.jdbc.app.DB2Driver URL:jdbc:db2://<machine_name><:port>/dbname 注:machine_name:数据库所在的机器的名称; port:端口号,默认是5000 5 dm(国产达梦) dataSource.username=SYSDBA dataSource.password=SYSDBA dataSource.databaseName=SYSDBA dataSource.driverClassName=dm.jdbc.driver.DmDriver dataSource.dialect=org.hibernate.dialect.DmDialect dataSource.url=jdbc:dm://ip:5236/SYSDBA dataSource.url=jdbc:dm://ip:5236/SYSDBA O_O

使用 Prometheus-Operator 监控 Calico(网络监控)

使用 Prometheus-Operator 监控 Calico(网络监控) Calico 中最核心的组件就是 Felix,它负责设置路由表和 ACL 规则等,以便为该主机上的 endpoints 资源正常运行提供所需的网络连接。同时它还负责提供有关网络健康状况的数据(例如,报告配置其主机时发生的错误和问题),这些数据会被写入 etcd,以使其对网络中的其他组件和操作人员可见。 一、配置 Calico 以启用指标 默认情况下 Felix 的指标是被禁用的,必须通过命令行管理工具 calicoctl 手动更改 Felix 配置才能开启,需要提前配置好命令行管理工具。 1、下载管理工具 $ wget https://github.com/projectcalico/calicoctl/releases/download/v3.15.0/calicoctl -O /usr/local/bin/calicoctl $ chmod +x /usr/local/bin/calicoctl 2、接下来需要设置 calicoctl 配置文件(默认是 /etc/calico/calicoctl.cfg)。如果你的 Calico 后端存储使用的是 Kubernetes API,那么配置文件内容如下: apiVersion: projectcalico.org/v3 kind: CalicoAPIConfig metadata: spec: datastoreType: "kubernetes" kubeconfig: "/root/.kube/config" 3、配置好了 calicoctl 之后就可以查看或修改 Calico 的配置了,先来看一下默认的 Felix 配置: $ calicoctl get felixConfiguration default -o yaml 手动修改配置: $ calicoctl patch felixConfiguration default --patch '{"

关于mac 上传、下载linux服务器sftp命令

二话不说,直接贴命令 root 是用户名 xxx.xx.x.xx 是ip地址 sftp root@xxx.xx.x.xx(ip地址) 连接进行输入密码即可执行: 上传: Put 本地地址 线上地址 下载: get 线上地址 本地地址

JournalNode无法启动问题排查

JournalNode无法启动问题排查 1.问题说明 1.1 JournalNode重新启动后又失败,一直重启不成功,经过观察,发现日志报错,经排查报错原因是编辑log损坏导致的 2018-05-28 16:06:07,896 WARN namenode.FSImage (EditLogFileInputStream.java:scanEditLog(359)) - Caught exception after scanning through 0 ops from /hadoop/hdfs/journal/DHTestCluster/current/edits_inprogress_0000000000019770365 while determining its valid length. Position was 1044480 java.io.IOException: Can’t scan a pre-transactional edit log. at org.apache.hadoop.hdfs.server.namenode.FSEditLogOp L e g a c y R e a d e r . s c a n O p ( F S E d i t L o g O p . j a v a : 4974 ) a t o r g .

linux离线安装gcc 和g++

1、先到有网的机器上下载依赖包 sudo yum install --downloadonly --downloaddir=/home/mjb/soft/gcc gcc sudo yum install --downloadonly --downloaddir=/home/mjb/soft/g++ gcc-c++ 2、把离线依赖包拷贝到无网机器上,分别切换到指定目录进行安装, 安装指令为 rpm -ivh *.rpm --nodeps --force 3.yum install glibc-devel

Vitess本地安装

总览 IP MySQL1MySQL2MySQL3vttabletvtctldvtgate 10.216.91.116 3308 3313 3314 vttablet_100,200,300,400 vtgate:15306 10.216.91.117 3308 3313 3314 vttablet_101,201,301,401 vtctld vtgate:15306 10.216.91.118 3308 3313 3314 vttablet_102,202,302,402 vtgate:15306 10.216.91.117 zk1 10.216.91.118 zk2 10.216.91.119 zk3 安装vitess 下载解压vitess sudo mkdir /data/service/vitess sudo tar -xvzf vitess-6.0.20-20200818-90741b8.tar.gz -C /data/service/vitess --strip-components 1 sudo chown -R mysql.mysql /data/service/vitess 配置环境变量 vim /home/mysql/.bashrc export TOPO=zk2 export VTROOT=/data/service/vitess export VTTOP=$VTROOT #export MYSQL_FLAVOR=MySQL57 export VTDATAROOT=/data/service_data/vitess/vtdataroot export PATH=${VTROOT}/bin:${PATH} source /home/mysql/.bashrc 创建vtdataroot目录 sudo mkdir /data/service_data/vitess sudo chown -R mysql.

利用ArrayList对map进行按key(键)和按value (值) 排序

利用ArrayList对map进行按key(键)和按value (值) 排序 使用比较器 /// 按key(键)排序 通过ArrayList将map.entrySet(),变成list 然后在类外写具体如何比较大小的方法compare(),最后调用 Collections.sort(list, new Comparator<Map.Entry<String, String>>() import java.util.*; public class MapSort { public static void main(String[] args) { Map<String,String> map=new HashMap<>(); map.put("say","no"); map.put("hash","baby"); map.put("you","know"); System.out.println("排序前"); for (String s : map.keySet()) { System.out.println(s+":"+map.get(s)); } //通过ArrayList构造函数将map.entrySet()转换成list List<Map.Entry<String,String>> list= new ArrayList<>(map.entrySet()); //通过比较器进行比较排序 Collections.sort(list, new Comparator<Map.Entry<String, String>>() { @Override public int compare(Map.Entry<String, String> entry1, Map.Entry<String, String> entry2) { //返回值为1,代表前面>后面,-1相反,0表示相等 return entry1.getKey().compareTo(entry2.getKey()); } }); //将排序后的结果打印出来 System.out.println("排序后:"); for (Map.Entry<String, String> entry : list) { System.

vivado 中的增量编译以及用法详解

目录 详细内容如下: 1、增量编译是VIVADO中的一项技术,即Incremental Compile,它是是Vivado提供的一项高阶功能。目的旨在当设计微小的改变时,重用综合和布局布线的结果,缩短编译时间。 增量编译的流程如下所示: 增量编译需要已经编译完成的原始设计的dcp文件作为参考,当我们在原始设计上做微小的改动时,就可以使用增量编译的流程。这些改动包括: - RTL代码的微小修改 - 网表的微小修改,比如增加或者改变ILA 在Vivado里面,使能IncrementalCompile的方式非常简洁,在Impl run上右键选择“Set Incremental Compile…”,然后设置相应的参考dcp文件即可,前提是工程已经实现过一次,已经有之前的网标作为对照参考 注意: 1. 当参考设计和当前设计的相似度大于95%的时候,最适合用增量编译技术 相似度低于75%时,工具会关闭增量编译 2. 有些时候,即使很小的RTL改动,也会造成网表的巨大差异。比如 a) 改变HDL中的某些全局常量 b) 增加总线的位宽 ISE和VIVADO中增量编译的使用: vivado: 1、首先实现整个工程,生成实现后的网表; 2、按步骤打开:implementation setting——options——incremental compile,浏览文件,然后选择.runs / impl_1 / *.dcp 如下图所示: 3、对程序进行微小修改后再实现,可以看到时间有所减少; ISE的增量编译步骤: 在ISE中主要使用SmartGuide来完成增量编译,这个是ISE中的全局优化选项,使能这个选项,编译器在Implementation时会比较前一次编译的Implementation结果,未修改部分则沿用前一次的结果,但是如果时序比较紧张,会根据情况重新实现相应未修改部分来达到时序要求。SmartGuide主要能缩短MAP和PAR的时间。 SmartGuide使用步骤如下: 右键top module,然后点击SmartGuide选项。 2.选择前一次的编译信息,其中NCD文件包含前一次设计的物理映射信息。 3.点击OK,使能SmartGuide。 

js实现暂停(sleep)的方法

js本身没有提供像java中的sleep这样的暂停方法,需要自己手动编写方法达到效果。 代码如下: function sleep(d){ for(var t = Date.now();Date.now() - t <= d;); } sleep(5000); //暂停5秒

字节面试:dubbo的服务引用过程

点赞再看,养成习惯,微信搜一搜【三太子敖丙】关注这个喜欢写情怀的程序员。 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 上篇文章我们已经了解了 Dubbo 服务暴露全过程,这篇文章我就带着大家再来看看 Dubbo 服务引入全流程,这篇服务引入写完下一篇就要来个全链路打通了,看看大家看完会不会有种任督二脉都被打通的感觉。 在写文章的过程中丙还发现官网的一点小问题,下文中会提到。 话不多说,咱们直接进入正题。 服务引用大致流程 我们已经得知 Provider将自己的服务暴露出来,注册到注册中心,而 Consumer无非就是通过一波操作从注册中心得知 Provider 的信息,然后自己封装一个调用类和 Provider 进行深入地交流。 而之前的文章我都已经提到在 Dubbo中一个可执行体就是 Invoker,所有调用都要向 Invoker 靠拢,因此可以推断出应该要先生成一个 Invoker,然后又因为框架需要往不侵入业务代码的方向发展,那我们的 Consumer 需要无感知的调用远程接口,因此需要搞个代理类,包装一下屏蔽底层的细节。 整体大致流程如下: 服务引入的时机 服务的引入和服务的暴露一样,也是通过 spring 自定义标签机制解析生成对应的 Bean,Provider Service 对应解析的是 ServiceBean 而 Consumer Reference 对应的是 ReferenceBean。 前面服务暴露的时机我们上篇文章分析过了,在 Spring 容器刷新完成之后开始暴露,而服务的引入时机有两种,第一种是饿汉式,第二种是懒汉式。 饿汉式是通过实现 Spring 的InitializingBean接口中的 afterPropertiesSet方法,容器通过调用 ReferenceBean的 afterPropertiesSet方法时引入服务。 懒汉式是只有当这个服务被注入到其他类中时启动引入流程,也就是说用到了才会开始服务引入。 默认情况下,Dubbo 使用懒汉式引入服务,如果需要使用饿汉式,可通过配置 dubbo:reference 的 init 属性开启。 我们可以看到 ReferenceBean还实现了FactoryBean接口,这里有个关于 Spring 的面试点我带大家分析一波。 BeanFactory 、FactoryBean、ObjectFactory 就是这三个玩意,我单独拿出来说一下,从字面上来看其实可以得知BeanFactory、ObjectFactory是个工厂而FactoryBean是个 Bean。 BeanFactory 其实就是 IOC 容器,有多种实现类我就不分析了,简单的说就是 Spring 里面的 Bean 都归它管,而FactoryBean也是 Bean 所以说也是归 BeanFactory 管理的。

String中删除空格的7种方法!

字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。 本文我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格。 其实,在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等。但是,在Java 11添加了一些新的功能,如strip、stripLeading、stripTrailing等。 大多数时候,我们只是使用trim方法来删除多余的空格。但是好像很多人并没有去思考过,是否有更好的方式呢? 当然,trim()在大多数情况下都工作得很好,但是Java中有许多不同的方法。每一种都有自己的优点和缺点。我们如何决定哪种方法最适合我们呢? 接下来我们将介绍几种方法,并对比下他们的区别和优缺点等。 在java中从字符串中删除空格的不同方法 首先,我们来看一下,想要从String中移除空格部分,有多少种方法,作者根据经验,总结了以下7种(JDK原生自带的方法,不包含第三方工具类库中的类似方法): trim() : 删除字符串开头和结尾的空格。 strip() : 删除字符串开头和结尾的空格。 stripLeading() : 只删除字符串开头的空格 stripTrailing() : 只删除字符串的结尾的空格 replace() : 用新字符替换所有目标字符 replaceAll() : 将所有匹配的字符替换为新字符。此方法将正则表达式作为输入,以标识需要替换的目标子字符串 replaceFirst() : 仅将目标子字符串的第一次出现的字符替换为新的字符串 需要注意的最重要的一点是,在Java中String对象是不可变的,这意味着我们不能修改字符串,因此以上所有的方法我们得到的都是一个新的字符串。 接下啦,我们分别针对以上这几个方法学习下用法,了解下其特性。 PS:本文代码都是使用在线运行工具(https://www.jdoodle.com/online-java-compiler/ )执行的,因为我的测试机并未安装Java 11,并且Unicode字符也不完整。如果大家也想实验,建议使用在线工具,选择对应的JDK即可。 trim trim()是Java开发人员最常用的删除字符串开头和结尾的空格方法。其用法也比较简单: public class StringTest { public static void main(String[] args) { String stringWithSpace = " Hollis Is A Java Coder "; StringTest.trimTest(stringWithSpace); } private static void trimTest(String stringWithSpace){ System.out.println("Before trim : \'" + stringWithSpace + "

数据结构--知识点16--搜索算法(二叉树)

文章目录 一、树的概念1、特点2、树的术语3、树的种类4、树的存储与表示5、常见的树的应用场景 二、二叉树1、概念2、性质3、python实现二叉树的构建4、二叉树的广度遍历5、深度优先搜索6、由遍历确定一棵树 一、树的概念 树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构 1、特点 每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为**多个不相交(因为都只有一个父节点)**的子树 2、树的术语 节点的度:一个节点含有的子树的个数称为该节点的度树的度:一棵树中,最大的节点的度称为树的度叶节点或终端节点:度为零的节点父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点兄弟节点:具有相同父节点的节点互称为兄弟节点节点的层次:从根节点开始定义,根为第一层,根的子节点为第二层,以此类推树的高度或深度:树中节点的最大层次堂兄弟节点:父节点在同一层的节点互为堂兄弟节点的祖先:从根到该节点所经分支上的所有结点子孙:以某节点为根的子树中任一结点都称为该节点的子孙森林:由m(m>=0)棵互不相交的树的集合称为森林 3、树的种类 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树 二叉树:每个节点最多含有两个子树的树称为二叉树 完全二叉树:对于一颗二叉树,假设其深度为d(d>1).除了第d层外,其他各层的节点数目均已达到最大值,且第d层所有节点从左向右连续的紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树排序二叉树(二叉查找树,也称二叉搜索树、有序二叉树): 霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树 4、树的存储与表示 顺序存储:将数据结构存储在固定的数组中,在遍历速度上有一定的优势,但因所占空间比较大,是非主流二叉树。二叉树通常以链式存储 链式存储:可以存储,但是子节点个数无法掌握,因此通常把多叉树转换为二叉树,子节点个数最多为2 5、常见的树的应用场景 xml,html等 路由协议使用了树的算法MySQL数据库索引文件系统的目录结构很多经典的AI算法,机器学习中的decision tree 二、二叉树 1、概念 二叉树是每个节点最多有两个子树的树结构,通常子树被称作‘左子树’和‘右子树’ 2、性质 在二叉树的第i层上至多有2(i-1)个节点,i>0深度为k的二叉树至多有2k-1个节点,k>0对于任意一棵二叉树,如果其叶节点树为N0,而度数为2的节点总数为N2,则N0=N2+1具有n个节点的完全二叉树的深度必为log2(n+1)对完全二叉树,若从上至下、从左至右编号,则编号为i的节点,其左孩子编号必为2i,其右孩子编号必为2i+1,其双亲的编号必为i/2(i=1时为根,除外) 3、python实现二叉树的构建 # 定义节点 class Node(object): def __init__(self,item): self.elem=item self.lchild=Node self.rchild=Node # 构建树 class Tree(object): # 二叉树 def __init__(self): self.root=None def add(self,item): node=Node(item) if self.root is None: self.root=node return # 因为要将新节点插入树中,树上的元素可以按照队列的方式操作, # 那么就在树中构建一个队列,先遍历元素,然后再将元素放入队列,再进行元素的添加删除等 # 通过队列的方式查找新节点应该放在哪里 # queue=[] queue.append(self.root) # 先将根节点放入队列中 queue=[self.root] # 每次取出的元素都进行相同的操作,直到队列中无元素 # 这里使用列表的逻辑值判断,若为空返回False,只要有元素就返回True,即使是None while queue: # 创建一个游标从根节点开始遍历,此时队列中只有一个刚放进去的根节点,因此弹出的就是根节点 cur_node=queue.

初学者如何准备开始学习Python-1 (中/英原版)

0.1 Python 2 or Python 3 (Python 2 与 Python 3 的区别) (序一) The print statement has become the print function. What this means is that this line in Python 2: print "hello world" is as follows in Python 3: print("hello world”) The raw_input function has also changed to input, so instead of: raw_input('What is your name?’) you will see: input('What is your name?’) The only other significant change is how Python handles various character sets.

js的多图片上传控件

git地址:https://github.com/cuuuuuirz/cupload 应该是一个国产,非常好用的一个控件,而且很美观。 基于原生js的图片上传插件。支持预览、像素限制、大小限制、多图上传、放大预览、异步上传、编辑初始化图片. 该方法将图片转为base64格式存到了input中,用户只要使用普通form表单直接提交即可,其中 name参数可以设置提交的input的name值,后台接收form表单的参数后,该图片数据格式为数组,只要循环将base64数据转为图片存到本地即可。 效果如下: 步骤如下: 1、引入js <script src="static/js/cupload.js"></script> 2、在需要的位置添加html,id可以自定义: <div id="cupload"></div> 3、实例化cupload对象: <script type="text/javascript"> var cupload = new Cupload ({ ele: "#cupload" }); </script> 可选参数 //为方便比较和计算,部分参数为number型,已设置默认单位,不可再带单位。 { ele : "#cupload", // 实例化的DOM对象id,必需,默认为cupload name : "image", // 图片input的name名,非必需,默认为image num : 1, // 可上传图片的数量,非必需,默认为1 url : "./upload.php", //异步上传url width : 148, // 预览框的宽,单位为px,非必需,默认为148 height : 148, // 预览框的高,单位为px,非必需,默认为148 minSize : 1024, // 图片大小最小限制,单位为KB,非必需,无默认值 maxSize : 2048, // 图片大小最大限制,单位为KB,非必需,无默认值 limitedSize : 2048, // 图片大小要求,单位为KB,非必需,无默认值 minWidth : 100, // 图片宽度最小限制,单位为px,非必需,无默认值 minHeight : 100, // 图片高度最小限制,单位为px,非必需,无默认值 maxWidth : 2000, // 图片宽度最大限制,单位为px,非必需,无默认值 maxHeight : 2000, // 图片高度最大限制,单位为px,非必需,无默认值 limitedWidth : 800, // 图片宽度要求,单位为px,非必需,无默认值 limitedHeight : 800, // 图片高度要求,单位为px,非必需,无默认值 data : ["

Spark 2.4.0如何优雅地解决sparksql小文件过多的问题

在使用SparkSql进行项目开发的过程,往往会碰到一个比较头疼的问题,由于SparkSql的默认并行度是200,当sql中包含有join、group by相关的shuffle操作时,会产生很多小文件;从集群优化的角度来说,太多的小文件对NameNode的压力比较大,而且太多的小文件对后续使用该表进行计算时会启动很多不必要的maptask,任务耗时高。因此,需要对小文件问题进行优化。 在Dataset/Dataframe中有repartition/coalesce算子减少输出文件个数,但用户往不喜欢编写和部署Scala/Java/Python代码的repartition(n)和coalese(n),在Spark 2.4.0版本后很优雅地解决了这个问题,可以下SparkSql中添加以下Hive风格的合并和分区提示: --提示名称不区分大小写 INSERT ... SELECT /*+REPARTITION(n)*/ ... INSERT ... SELECT /*+COALESCE(n)*/ ... Coalesce Hint减少了分区数,它仅合并分区 ,因此最大程度地减少了数据移动,但须注意内存不足容易OOM。 Repartition Hint可以增加或减少分区数量,它执行数据的完全shuffle,并确保数据平均分配。 repartition增加了一个新的stage,因此它不会影响现有阶段的并行性;相反,coalesce会影响现有阶段的并行性,因为它不会添加新stage。 该写法还支持多个插入查询和命名子查询。

聊一聊 SQL Server 数据库中的锁!

你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 来源:cnblogs.com/CoderAyu/p/11375088.html 推荐:https://www.xttblog.com/?p=5090 国内有大把的 MySQL 的文章,SQL Server 用的都比较少,关注索引、锁的就更少了,基于此,本文来浅谈一下 SQL Server 数据库中的锁! 背景 数据库中有一张叫后宫佳丽的表,每天都有几百万新的小姐姐插到表中,光阴荏苒,夜以继日,日久生情,时间长了,表中就有了几十亿的小姐姐数据,看到几十亿的小姐姐,每到晚上,我可愁死了,这么多小姐姐,我翻张牌呢? 办法当然是精兵简政,删除那些age>18的,给年轻的小姐姐们留位置... 于是我在数据库中添加了一个定时执行的小程序,每到周日,就自动运行如下的脚本 delete from `后宫佳丽` where age>18 一开始还自我感觉良好,后面我就发现不对了,每到周日,这个脚本一执行就是一整天,运行的时间有点长是小事,重点是这大好周日,我再想读这张表的数据,怎么也读不出来了,怎是一句空虚了得,我好难啊! 为什么 编不下去了,真实背景是公司中遇到的一张有海量数据表,每次一旦执行历史数据的清理,我们的程序就因为读不到这张表的数据,疯狂地报错,后面一查了解到,原来是因为定时删除的语句设计不合理,导致数据库中数据由行锁(Row lock)升级为表锁(Table lock)了????. 解决这个问题的过程中把数据库锁相关的学习了一下,这里把学习成果,分享给大家,希望对大家有所帮助。 我将讨论SQL Server锁机制以及如何使用SQL Server标准动态管理视图监视SQL Server 中的锁,相信其他数据的锁也大同小异,具有一定参考意义。 铺垫知识 在我开始解释SQL Server锁定体系结构之前,让我们花点时间来描述ACID(原子性,一致性,隔离性和持久性)是什么。ACID是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。 ACID 原子性(Atomicity):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。 隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 事务 (Transaction) 事务是进程中最小的堆栈,不能分成更小的部分。此外,某些事务处理组可以按顺序执行,但正如我们在原子性原则中所解释的那样,即使其中一个事务失败,所有事务块也将失败。 锁定 (Lock) 锁定是一种确保数据一致性的机制。SQL Server在事务启动时锁定对象。事务完成后,SQL Server将释放锁定的对象。可以根据SQL Server进程类型和隔离级别更改此锁定模式。这些锁定模式是: 锁定层次结构 SQL Server具有锁定层次结构,用于获取此层次结构中的锁定对象。数据库位于层次结构的顶部,行位于底部。下图说明了SQL Server的锁层次结构。 共享(S)锁 (Shared (S) Locks) 当需要读取对象时,会发生此锁定类型。这种锁定类型不会造成太大问题。 独占(X)锁定 (Exclusive (X) Locks) 发生此锁定类型时,会发生以防止其他事务修改或访问锁定对象。 更新(U)锁 (Update (U) Locks) 此锁类型与独占锁类似,但它有一些差异。我们可以将更新操作划分为不同的阶段:读取阶段和写入阶段。在读取阶段,SQL Server不希望其他事务有权访问此对象以进行更改,因此,SQL Server使用更新锁。

mysql show processlist,kill pid,查看连接数 查看被锁的表

show processlist找出执行时间最长的进程 show [full] processlist; 展示属于当前用户的线程,如果当前用户有 process privilege,那么会展示所有线程。 如果不加full,只显示前100条;show processlist展示的线程不包含background thread,所以线程数就等于connections 除了上述方式,我们还可以通过show status 查看连接,比如使用 show status like ‘%threads_%’;threads_connected就是连接数就是当前线程数。 查看被打开的表 show open tables where in_use>0; 这里有个疑问,这个sql查出来的表,不一定是被锁住的。因为用查询,如果耗费时间很长,也会查询出来。 这里的open tables是什么意思? 每次操作(查询、更新、增加、删除)都会打开表,一个线程一个connection 为了维护不同的状态,他们分别打开表,这就是open tables,所以说open tables说明在操作表,如果表锁了,这个sql是正确的。 可以使用 show status like ‘%Opened_tables%’;查看已经打开的表 活学活用show status和show variables,一个是查看mysql当前状态,一个是查看环境变量; KILL [CONNECTION | QUERY] processlist_id 不加modifier等同于kill connection kill query pid,是杀死connection中的sql,不杀死connection 总结 先通过show processlist查看耗时最长的进程,找到表; 然后再使用show open tables where in_use>0 验证一下; 确认后,使用kill process_id 杀死connection

mysql 查看表 是否有死锁

1、查询是否锁表bai show OPEN TABLES where In_use > 0; 2、查询进程 show processlist 查询到相对应的进du程===然后zhi kill id 补充: 查看正在锁的事务dao SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

vue-color插件取色器拾色器使用示例,vue实用demo颜色选择器Sketch组件使用,vue中选色板使用示例

一、demo效果 二、使用步骤 1.安装vue-color插件 在终端窗口中输入以下命令 安装插件 npm install vue-color 2.引入组件Sketch 使用import语法引入Sketch组件 import { Sketch } from 'vue-color' 3.注册组件 components: { 'sketch-picker': Sketch }, 4.在html部分使用组件 <sketch-picker v-model="color" @input="updateValue"></sketch-picker> 5.处理点击事件 // 颜色输入框点击事件处理 colorInputClick () { this.isShowColors = !this.isShowColors }, // 颜色值改变事件处理 colorValueChange (val) { console.log(val) // 取颜色对象的十六进制值 this.color = val.hex } 三、demo代码 <template> <el-col class="controls-box"> <el-col :span="8" class="label-col"><label>请选择颜色</label></el-col> <el-col :span="16"> <div @click="colorInputClick"> <el-input disabled :value="color" @click="colorInputClick"></el-input> </div> <div v-show="isShowColors" class="color-select-layer"> <sketch-picker v-model="color" @input="

从零开始学统计 04 | 协方差与相关性分析

一、老板的任务 老板今天又给一个任务: 计算肝脏细胞中 X 基因与 Y 基因的关系。 现在,两个基因在各个细胞中的表达值都有了。 绘制不同细胞中 X,Y 基因的表达值在坐标轴上。 计算 X 基因和 Y 基因在5个细胞中的均值,标准差。 因为这些测量值都是来自同一个细胞,所以我们可以成对来看: 那么这样成对的测量可以告诉我们哪些信息呢? 现在,先将一对细胞连接,绘制一个点 绘制完成,我们发现,X 基因相对较低的细胞对应的 Y 基因的值也较低,两个基因出现步调一致的表达情况,这可以用一条线来表示: 不难看到,这条线是正斜率,代表着细胞中的 X 基因表达高,Y基因同样会表达高,同样表达低也会出现相同的情况。说明两基因具有正趋势关系 来看一个相反的情况: 上图中的线为负斜率,告诉我们细胞中的 X 基因表达高,Y基因会表达低,出现相反的表达情况。说明两基因具有负趋势关系 第三种情况是,一个基因相对另一个基因,并没有显著变化。说明两基因无趋势关系: 我们现在总结出 X 基因相对 Y 基因的关系有以上三种情况: 正趋势关系负趋势关系无趋势关系 二、协方差 为了去说明 X 基因相对 Y 基因的趋势关系,我们需要一个数学上的解释: 首先计算 X基因与 Y 基因的均值 现在计算一个点的与两基因均值的差值: 将值代入计算:(3-17.6)x(12-24.4)= -14.6 x -12.4 = 181 如果将五个点都计算一遍,得到: 现在可以计算**协方差(Covariance)**了: 会发现: 这些点所在象限,最终的值都为正值,也就是说这五个点对总协方差的贡献都是正值。 协方差值为正,斜率为正,这告诉我们当协方差为正时,就可以将二者的关系分类为正趋势。如果协方差为负,则相反。 协方差的优缺点 但是,协方差值并不能告诉我们表示关系的直线的斜率是陡峭还是平缓,而且也不能反应点距离线是远还是近。协方差唯一能告诉我们的是关系的斜率为正还是负。 但是协方差还有一个很大的缺点,我们接下来讨论: 比如现在同样计算两个基因的协方差,我们将左边的数据范围扩大一倍,也就是从40 -> 80。 接下来,我们继续计算同样的两个基因的协方差,虽然线相对位置没发生变化,但是会发现协方差会扩大4倍。 就很有意思,我们唯一改变的只是数据点的值范围,数据点的关系并没有变化,但是协方差依旧在改变。 也就是说,协方差对于数据范围更敏感,而不是数据关系,这就使得它很难用于关系的描述,比如是否接近表示关系的虚线,以及和虚线间的距离。 虽然这样,但是协方差并不是一无是处,相反它是各种分析的基础,比如主成分分析,相关性分析。

显卡驱动无法更新代码19注册列表位置

运行Regedit然后在注册表中把HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class{4D36E968-E325-11CE-BFC1-08002BE10318}中大括号所对应的项删掉(显示卡部分的注册项),重启机器会重新安装显卡相应驱动即可