支持向量机 支持向量机
本部分练习,我们将在2D示例数据集上使用支持向量机。通过在这些数据集上使用支持向量机,将帮助我们初识支持向量机的运行原理,以及如何使用高斯核函数支持向量机。
任务一 示例数据集1
本任务要求我们修改参数C的值,观察支持向量机对数据集的判定边界。ex6.m文件中已将相关代码备好,其代码如下:
%% =============== Part 1: Loading and Visualizing Data ================ % We start the exercise by first loading and visualizing the dataset. % The following code will load the dataset into your environment and plot % the data. % fprintf('Loading and Visualizing Data ...\n') % Load from ex6data1: % You will have X, y in your environment load('ex6data1.mat'); % Plot training data plotData(X, y); fprintf('Program paused.
FeignClient 日期属性与pojo保持一直,使用Date类型;
pojo 属性值添加注解JsonFormat,前端拿到的属性为格式化之后的值。
@JsonFormat(timezone = DateUtils.TIMEZONE, pattern = DateUtils.DATE_TIME_FORMATE) private Date date;
启动Aria2 RPC Server 直接在终端中执行aria2c --enable-rpc --rpc-allow-origin-all可直接开启RPC服务。
这种方法并不能进行个性化的参数设置,需要用到下面的方法。
使用配置文件启动Aria2 RPC Server 创建配置文件 $ mkdir ~/.config/aria2 $ touch ~/.config/aria2/aria2.session #用于保存日志 $ touch ~/.config/aria2/aria2.conf #创建配置文件 以配置文件方式启动Aria2 使用aria2c --conf-path=$HOME/.config/aria2/aria2.conf启动aria2,也可添加-D选项,后台启动aria2。
建议将以上命令添加到alias中或启用开机自启动。
aria2.conf配置文件示例,仅供参考 ## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ## ## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ## ## 进度保存相关 ## # 从会话文件中读取下载任务 #input-file=aria2.session # 在Aria2退出时保存`错误/未完成`的下载任务到会话文件 #save-session=aria2.session # 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0 #save-session-interval=60 ## 文件保存相关 ## # 文件的保存路径, 默认: 当前启动位置 #dir=/tmp/Downloads # 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M #disk-cache=32M # 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc # 预分配所需时间: none < falloc ?
机器学习算法 有监督学习:分类和预测 1、KNN算法:通过计算未知数据和样本距离中,数目最多类判断未知类归属。 2、决策树算法:通过信息增益来划分类,然后逐级划分到叶子节点。 3、贝叶斯算法:通过判断文本拆分后和样本比较出现的概率来确定是否过滤。 无监督学习:聚类和关联 1、聚类算法:通过判断相同属性归类。 2、关联算法:通过计算样本出现的次数概率,和所有频繁项集同时出现的概率来判断关联程度。 半监督学习 这类问题给出的训练数据,有一部分有标签,有一部分没有标签。我们想学习出数据组织结构的同时,也能做相应的预测。此类问题相对应的机器学习算法有自训练(Self-Training)、直推学习(Transductive Learning)、生成式模型(Generative Model)等。
1) round 方法表示四舍五人。round,意为“环绕”,其实现原理是在原来数字的基础上 先增加0.5 然后再向下取整,等同于( int) Math.floor( x +0.5f)。它的返回值类型为int 型,例 如, Math.round( 11.5 )的结果为12,Math.round(- 11.5) 的结果为一11。 2) ceil 方法的功能是向上取整。ceil, 意为“天花板”,顾名思义是对操作数取顶, Math.ceil(a),就是取大于a 的最小的整数值。需要注意的是,它的返回值类型并不是int 型, 而是double 型。若a 是正数,则把小数“人”,若a 是负数,则把小数“舍”。 第4章 Java 基础知识97 3) floor 方法的功能是向下取整。floor,意为“地板”,顾名思义是对操作数取底。 Math.floor( a),就是取小于a 的最大的整数值。它的返回值类型与ceil 方法一样,也是double 型。若a 是正数,则把小数“舍”; 若a 是负数,则把小数“人”。
dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算 前言: 移动端的设计需要去调整在不同机型上的显示, 所以在进行移动端开发的时候需要去了解一下尺寸大小, 需要去换算一下布局页面与设计页面尺寸大小的关系,所以就需要去换算一下布局页面与设计页面尺寸大小。 理解概念: dip : Density independent pixels, 设备无关元素;dp : 就是dip;px : 像素;dpi : dots pei inch, 直接来说就是一英寸多少个像素点; 常见取值120,160,240`。这个概念可以理解为像素密度, 简称密度;density : 中文意思是密度; 常见取值1.5, 1.0;和标准dpi的比例(160px/inc);分辨率 : 纵横2个方向的像素点数量; 移动端常见的取值是480 * 800, 320 * 480;屏幕尺寸 : 屏幕对角线的长度; PC端的电脑与电视同理;屏幕比例的问题 : 因为只确定了对角线长, 两边长度还不一定; 这就是屏幕比例的来源, 如: 4 : 3, 16 : 9这种, 这样就可以算出屏幕的边长了. 应用: 在android里面, 获取一个窗口的metrics, 里面有这么几个值。 metrics.density; metrics.densityDpi; densityDpi : 就是常见的dpi;density : 其实是DPI/(160像素/英寸)后得到的值; DPI本身的单位也是像素/英寸, 所以density其实是没单位的, 他就是一个比例值。而dpi的单位是像素/英寸, 比较符合物理上面的密度定义, 密度不都是单位度量的值, 所以更多的人愿意把dpi叫做像素密度, 简称密度, density还是就叫density。 重点: 一般Big-man在页面的操作中给的是像素的值, 也就是px的值, 但是再做设计图的时候, Big-man却给的是dp点的概念。比如:dp: px: 所以在Big-man书写自己布局的时候, 肯定还是要知道1个dp究竟等于多少个px的。所以需要去写一个换算公式, 如下所示: dp = (DPI/(160像素/英寸)) px = density px这里的dp是单位, px是单位, 但是density是没有单位的;也就是说dpi针对不同的值, dp与px之间的换算也就存在不同的对应值,请看如下表格: dpidensitydppx1203/4431601112401.
之前在Android Studio上使用git都好好的,这几天不知道抽什么风,一直报错,整的我很是郁闷 报错信息如下:
error: cannot spawn : No such file or directory fatal: unable to fork 但是很神奇的一点是Android Studio不能Commit不能Push,但是在对应文件目录下使用Git Bash使用git命令就没有问题,能正常commit和push。 但是毕竟使用Android Studio来commit和push会更方便,搜索了很久终于发现可能跟目录中包含空格有关系,我将原本安装在D:\Program Files目录下的Git删除后,重新将Git安装在了D盘下,重新设置了Android Studio中的git路径后,终于不再报错。
出错前的Git路径 D:\Program Files\Git\bin\git.exe
修改后的Git路径 D:\Git\bin\git.exe
首先,int *a[10] : 是数组指针,本质上就是数组元素是是个int型指针的一维数组,
int (*a)[10] : a是指针,指向一个数组。此数组有10个int型元素
int (*a)[10]与int*a[10]的差别就在那个小括号
int *a[10]
先找到声明符a,然后向右看,有[ ]说明a是个数组,再向左看,是int *,说明数组中的每个元素是int *。所以这是一个存放int指针的数组。
int(*a)[10]
先找到声明符a,被括号括着,先看括号内的(优先级高),然后向右看,没有,向左看,是*,说明a是个指针,什么指针?再看括号外面的,先向右看,有[ ] 是个数组,说明a是个指向数组的指针,再向左看,是int,说明数组的每个元素是int。所以,这是一个指向存放int的数组的指针。 值得一提的是,在计算机二级考试中,经常看见在主函数中声明一个二维数组,在其他被调用函数中的参数表中,有利用数组指针的形式来接收这个二维数组的参数传递的,我举个例子
#define N 5
主函数:
main( )
{
int a[N][N] , b ;
***************************
fun(a,8);
}
被调函数:
fun(int c[ ][N] , int d )
{<><><><><><><><><><><><><><><>}
或者
fun(int *c[N] , int d )
{<><><><><><><><><><><><><><><>}
也就是说,这样的数组指针的形式可以传递二维数组的指针,既然是二维数组,就要注意这个指针所指的维数,比如
*(p+1)对普通的一维数组,就是让这个指针指向这个数组的下一个元素
但是如果这个p是来源于类似于int (*p)[10]的,那么*(p+1)指向的是下一个具有10个int型成员的数组,也就是说这个指针直接向后移动10个sizeof(int)从而直接指向下一个数组的首地址;
如果不懂这个意思,你就把它想象成
int (*p)[10]指向了一个二维数组int a[10][10];从一到一百给这个二维数组赋值,a[0][0]=1;.........a[9][9]=100;
令p=a;
则*(*p)==1;
*(*p+1)==2;
*(*(p+1))==10;
只需要在命令行中输入一行命令即可。如下:
which node 结果如下:
/usr/local/bin/node
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ //因为具有公共结点的两个链表从此节点开始指导最后,都相同,因此我们让较长链表先走到N步长,然后一起向后走,第一个结点 相同的节点就是所求; class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL||pHead2==NULL) return NULL; ListNode*p=pHead1,*q=pHead2; int len1=0,len2=0,dif=0; while(p!=NULL) { len1++; p=p->next; } while(q!=NULL) { len2++; q=q->next; } if(len1>len2) { dif=len1-len2; int i=0; while(i<dif) { pHead1=pHead1->next; i++; } } if(len1<len2) { dif=len2-len1; int i=0; while(i<dif) { pHead2=pHead2->next; i++; } } while(pHead1&&pHead2) { if(pHead1->val==pHead2->val) return pHead1; else { pHead1=pHead1->next; pHead2=pHead2->next; } } return NULL; } };
class Solution {//先整体反转,然后在单个单词翻转 public: void revers(string &str,int i,int j)//要采用引用传递 { while (i < j) { char tmp = str[j]; str[j] = str[i]; str[i] = tmp; i++; j--; } } string ReverseSentence(string str) { if (str.size() == 0) return ""; int len = str.size(); revers(str,0,len-1); //string s = str; int i = 0, j = 0; while (str[i]!='\0') { if (str[i] == ' ') { i++; j++; continue; } else if (str[j] == ' ' || str[j] == '\0') { j--; revers(str, i, j); j++; i = j; } else j++; } return str; } };
function sendMail($to,$title,$content,$type=0){ //引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告 require_once("phpmailer/class.phpmailer.php"); require_once("phpmailer/class.smtp.php"); //实例化PHPMailer核心类 $mail = new PHPMailer(); //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式 $mail->SMTPDebug = 1; //使用smtp鉴权方式发送邮件 $mail->isSMTP(); //smtp需要鉴权 这个必须是true $mail->SMTPAuth=true; //链接qq域名邮箱的服务器地址 // $mail->Host = 'smtp.qq.com'; //链接163企业邮箱的服务器地址 $mail->Host = 'smtp.qiye.163.com'; //设置使用ssl加密方式登录鉴权 企业邮箱必须关闭,个人邮箱才需要 // $mail->SMTPSecure = 'ssl'; //设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587 // $mail->Port = 465; //企业邮箱服务器端口号 $mail->Port = 25; //设置smtp的helo消息头 这个可有可无 内容任意 // $mail->Helo = 'Hello smtp.qq.com Server'; //设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名 $mail->Hostname = 'www.XXXXXX.com'; //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码 $mail->CharSet = 'UTF-8'; //设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名 $mail->FromName = 'XXXXX'; //企业邮箱账号 $mail->Username = 'XXXXXXX'; //smtp登录的账号 这里填入字符串格式的qq号即可 // $mail->Username ='XXXXXX@qq.
10年前用过InstallShield,已经好久没有使用了, 现在发现一片文章不错,特意转载一下
VS2012没有自带打包工具,所以要先下载并安装一个打包工具。我采用微软提供的打包工具: InstallShield2015LimitedEdition。下载地址:https://msdn.microsoft.com/en-us/library/dn531020.aspx。注意:要先注册才能下载,注册的时候一定要填写自己本人的准确的邮箱号码,注册成功后会发送一封邮件,内含注册码。把打包工具安装好后,先使用注册码激活后再进行打包,如果选择试用就进行打包,安装打包后的软件的时候会有提示,大概内容就是:本软件是使用的未注册的工具进行打包的。(PS:多影响用户体验啊,还没有安装使用就收到警告提示)
打包的详细过程: 1.新建安装部署项目 在要打包的项目的“解决方案资源管理器”中,右击“解决方案***” 》添加》新建项目。在弹出框中选择和设置信息如下图:
创建成功后的资源管理器的结构图如下图:
2.设置程序基本信息 Application Information主要设置程序在安装时显示的有关程序的一些信息,包括:程序开发公司、程序名、程序版本号和公司官网等。
General Information 还可以设置更加详细的信息:
3.设置安装需求 Installation Requirements重点是选择支持的操作系统和其他依赖的软件框架。根据自己需求选择即可。
4.添加应用文件 Application Files一项用于设置应用程序锁包含的文件。程序引用的DLL,其他文件,如:exe文件,chm文件等都在这一步添加。
首先设置程序的主输出(主输出就是程序主体,包括程序的启动和入口):
操作步骤:1.选中程序名(图中左边红框) 》 2.点击“Add Project Outputs” 》 3.勾选主输出(图中左边红框)》4.点击“OK”
通过“Add Files”添加程序引用的DLL及其他文件。
5.设置程序快捷图标 操作步骤:
1.点击左边的“Create an uninstallation shortcut”,为程序创建卸载项目;
2.点击“New...”,在弹出的菜单中选择上一步生成的“*.主输出”文件,默认名字是“Built”,通过“rename”按钮可以改变名字,本名字将显示在安装程序的图标下面(如桌面上的QQ图标);也可以设置程序Shortcut,即选择程序安装后在桌面或开始菜单中显示的图标;
3.设置程序图标和卸载选项图标的显示位置,选项如下图4方框。
6.设置程序的注册表信息 也可以不设置,跳过此步骤。
7.设置安装视图 根据自身需求进行设置即可。
8.发布程序 上面的安装步骤执行完成后即可生成解决方案,但是生成的文件会放在DVD-5文件夹内,想要使用安装文件的话就必须拷贝整个文件夹否则安装会出错,这样内容很繁琐,而且给客户的安装体验度也很差。
解决方法:使用SingleImage的安装包,将所有文件集成到一个Setup.exe中,再次安装的时候只需要一个Setup.exe即可。
步骤:右击“解决方案” 》 属性,再按下图进行设置。
9.将安装环境一并打包 操作步骤如下图:
经过上述步骤,程序打包完成,打包后的exe文件:
在打包过程中,可能会遇到各种报错,根据错误编号放狗搜索,一个个解决完,那么打包后的程序一定可以安装执行。
------------------------------------------------------------------------------------------------------------ InstallShield的官网是:
http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio
现在的最新版本应该是InstallShield 2015,按照网站说明注册安装即可。
也可以这样安装:
1、打开VS2013,文件-新建-项目-已安装-模板-其他项目类型-安装和部署-启用InstallShield Limited Edition。 2、根据提示操作,点击步骤2的“转到下载网站”。 3、填写相关信息后,点击Download下载InstallShield,同时注册邮箱会收到一封邮件,里面有 序列号 和下载链接。 4、退出VS,使用管理员权限重新打开VS,在文件-新建-项目-已安装-模板-其他项目类型-安装和部署中则可以看到InstallShield Limited Edition Project,点击确定,会弹出注册对话框,输入注册邮箱中收到的 序列号 即可完成注册。
快速开始序贯(Sequential)模型 序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
可以通过向Sequential模型传递一个layer的list来构造该模型:
from keras.models import Sequential from keras.layers import Dense, Activation model = Sequential([ Dense(32, units=784), # 代码感觉有误,应该是input_shape=(784,) Activation('relu'), Dense(10), Activation('softmax'), ]) 也可以通过.add()方法一个个的将layer加入模型中:
model = Sequential() model.add(Dense(32, input_shape=(784,))) model.add(Activation('relu')) 指定输入数据的shape 模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape
传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据,其中也可以填入None,如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。
有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape。一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。
如果你需要为输入指定一个固定大小的batch_size(常用于stateful RNN网络),可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),则你需要传递batch_size=32和input_shape=(6,8)。
model = Sequential() model.add(Dense(32, input_dim=784)) model = Sequential() model.add(Dense(32, input_shape=784)) 编译 在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:
优化器optimizer:该参数可指定为已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象,详情见optimizers
损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也可以为一个损失函数。详情见losses
指标列表metrics:对分类问题,我们一般将该列表设置为metrics=['accuracy']。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name - > metric_value映射的字典.请参考性能评估
# For a multi-class classification problem model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # For a binary classification problem model.
编写代码模拟手机与SIM卡的组合关系。
要求:
SIM卡类负责创建SIM卡;
Phone类负责创建手机;
手机可以组合一个SIM卡;
手机可以更换其中的SIM卡。
代码示例如下:
SIM卡类:
package PhoneSim; public class SIM { private int sNum; //卡号 public int getsNum() { return sNum; } public void setsNum(int sNum) { this.sNum = sNum; } } Phone类: package PhoneSim; public class Phone { private SIM pSIM; //手机卡 public SIM getpSIM() { return pSIM; } public void setpSIM(SIM pSIM) { this.pSIM = pSIM; } } TestMobileSIM类: package PhoneSim; public class TestMobileSIM { public static void main(String args[]) { Phone phone = new Phone(); SIM simOne = new SIM(); SIM simTwo = new SIM(); simOne.
说实话,第一次打BZOJ的月赛,本来是准备充分的,但由于英语考试,然后班主任又喂了一节课的鸡汤,导致最后只剩下一个半小时。也只做出来这一道题(蒟蒻属性暴露无遗)
题目描述 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移。空间传送装置分为m种,第i种装置可以用4个参数 ai,bi,ci,di 来描述。因为时空抖动的问题,在非整数时刻禁止使用空间传送装置。如果在整数s时刻使用装置,那么需要花费 ((ai∗s+bi)modci)+di 单位时间才能完成传送。现在是s时刻,小Q位于1号星球,请写一个程序计算从1号星球到每个星球最少需要的时间。
第一行包含4个正整数n,m,s,e(2<=n<=100000,1<=m<=50,1<=s<=2000,1<=e<=200000) 分别表示星球的个数、空间传送装置的种类数、当前的时间以及空间传送装置的个数。 接下来m行,每行4个正整数a_i,b_i,c_i,d_i(1<=a_i,b_i,c_i,d_i<=2000),依次描述每种装置的参数。 接下来e行,每行3个正整数u_i,v_i,w_i(1<=u_i,v_i<=n,u_i!=v_i,1<=w_i<=m) 表示从星球u_i可以使用第w_i种装置单向传送到星球v_i。
分析 设我们可以在 i,j 两个时间到达某一个点 (i<j) 因为这道题的路程消耗与出发时间有关,所以可能会担忧这样会不会i比j还要劣一些。然而其实只要稍加思考,就会发现不存在这样的问题,因为这道题允许等待!i时刻完全可以在原地等到j时刻再出发,这样早到的无论如何都不比晚到的差。这样一来,只要能算出 ((ai∗s+bi)modci)+di 在不同s下的最小值,那么这道题就变成了裸的最短路了。 首先,我们很容易想到,我们需要考虑的出发时间只有 [0,ci) 这个区间,不在这个区间内的,我们把出发时间s mod c_i即可。 那么整个问题就变成了: 统计不同出发时间的分别的路程消耗的最小值。 机制地发现数据范围小了很多: m<=50,c<=2000 感受到了DP的气息。 首先,我们忽略c-1秒,在0秒到c-2秒中: 对于某个时间t,设其消耗时间为dp[t], 我们可以选择: 等待一秒, dp[t]=dp[t+1]+1 一秒钟都不等,直接从当前时刻出发:即 dp[t]=((ai∗t+bi)modci)+di 转移方程很容易理解,那么问题来了,c-1秒怎么解决? 答案是:暴力呗。。。 只有50个c-1秒,我们等待时间也在 [0,c−1] 的范围内,直接每个等待时间枚举一次就好了嘛(亏cch还想了半天怎么高效地算出c-1的消耗)。
附上代码:(考场上脑残地wa了4次,全是因为输出的时候逗逼了)
#include<cstdio> #include<cstring> #include<algorithm> #include<climits> #include<cmath> #include<vector> #include<queue> #define SF scanf #define PF printf #define MAXT 55 #define MAXC 2010 #define MAXN 100010 #define MAXM 200010 using namespace std; int n,m,tot,dist[MAXN],res; vector<int> d[MAXN],p[MAXN]; bool inq[MAXN]; int dp[MAXT][MAXC]; queue<int> q; struct node{ int a,b,c,d; }s[MAXT]; void prepare(){ for(int i=1;i<=tot;i++){ int st=s[i].
查看安装的mysql组件 rpm -qa | grep -i mysql
mysql57-community-release-el6-8.noarch mysql-community-common-5.6.37-2.el6.x86_64 mysql-community-client-5.6.37-2.el6.x86_64 php70w-mysql-7.0.22-2.w6.x86_64 mysql-community-libs-5.6.37-2.el6.x86_64 mysql-community-libs-compat-5.6.37-2.el6.x86_64 mysql-community-server-5.6.37-2.el6.x86_64 查看与mysql相关的文件 find / -name mysql
/home/mysql /etc/logrotate.d/mysql /usr/share/mysql /usr/bin/mysql /usr/lib64/mysql /var/spool/mail/mysql /var/lib/mysql /var/lib/mysql/mysql whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz 卸载mysql组件 rpm -ev --nodeps mysql57-community-release-el6-8.noarch rpm -ev --nodeps mysql-community-common-5.6.37-2.el6.x86_64 rpm -ev --nodeps mysql-community-client-5.6.37-2.el6.x86_64 rpm -ev --nodeps mysql-community-libs-5.6.37-2.el6.x86_64 rpm -ev --nodeps mysql-community-libs-compat-5.6.37-2.el6.x86_64 rpm -ev --nodeps mysql-community-server-5.6.37-2.el6.x86_64 删除mysql相关文件 rm -rf /home/mysql rm -rf /etc/logrotate.d/mysql rm -rf /usr/share/mysql rm -rf /usr/bin/mysql rm -rf /usr/lib64/mysql rm -rf /var/spool/mail/mysql rm -rf /var/lib/mysql rm -rf /var/lib/mysql/mysql Linux彻底删除mysql5.
欢迎关注微信公众号: 程序员小圈圈 转载请标明出处^_^ 原文首发于: www.zhangruibin.com 本文出自于: RebornChang的博客 idea对诸多数据库插件提供支持,举例MySQL数据库,使用idea中数据库插件首先把数据库database显示出来.步骤:View → Tool Windows → database 然后.......看图了开始:  图片时一步步截取的,所以文字就省略啦…
通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。在讲解利用@keyframes做动画之前,我们先来看一个例子,即在一定时间内,将正方形进行移动,效果如下:
这里先附上代码,后面再来解释:
<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; background:red; position:relative; animation:mymove 5s infinite; -moz-animation:mymove 5s infinite; /* Firefox */ -webkit-animation:mymove 5s infinite; /* Safari and Chrome */ -o-animation:mymove 5s infinite; /* Opera */ } @keyframes mymove { 0% {top:0px; left:0px; background:red;} 25% {top:50px; left:50px; background:blue;} 50% {top:100px; left:100px; background:yellow;} 75% {top:150px; left:150px; background:green;} 100% {top:200px; left:200px; background:red;} } @-moz-keyframes mymove /* Firefox */ { 0% {top:0px; left:0px; background:red;} 25% {top:50px; left:50px; background:blue;} 50% {top:100px; left:100px; background:yellow;} 75% {top:150px; left:150px; background:green;} 100% {top:200px; left:200px; background:red;} } @-webkit-keyframes mymove /* Safari and Chrome */ { 0% {top:0px; left:0px; background:red;} 25% {top:50px; left:50px; background:blue;} 50% {top:100px; left:100px; background:yellow;} 75% {top:150px; left:150px; background:green;} 100% {top:200px; left:200px; background:red;} } @-o-keyframes mymove /* Opera */ { 0% {top:0px; left:0px; background:red;} 25% {top:50px; left:50px; background:blue;} 50% {top:100px; left:100px; background:yellow;} 75% {top:150px; left:150px; background:green;} 100% {top:200px; left:200px; background:red;} } </style> </head> <body> <div></div> </body> </html> 1、定义和用法 通过 @keyframes 规则,您能够创建动画。