android点击另一个app,Android 怎么从一个APP中打开另外一个APP

Android 如何从一个APP中打开另外一个APP 众所周知,在一个APP内部,从一个页面跳转到另外一个页面是使用startactivity函数来实现的。 同样的,对于应用之间的跳转也是如此的。应用直接的跳转分为三种情况,为了方便描述,我加上有两个应用A和B,需求是要从A点击一个按钮,可以跳转到B,同时A要传数据给B,B能够接收并且处理: 1.从A跳转到B的主Activity,代码如下: Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.nbg.baby", "com.nbg.baby.MainActivity"); intent.setComponent(comp); int launchFlags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED; intent.setFlags(launchFlags); intent.setAction("android.intent.action.VIEW"); Bundle bundle = new Bundle(); bundle.putString("from", "来自测试应用"); intent.putExtras(bundle); startActivity(intent); 1.1如果B是应用是关闭的,那么在onCreate()函数中增加如下语句: Bundle bundle = this.getIntent().getExtras(); if(bundle!=null && bundle.getString("from")!=null){ Util.showToast(s_instance, bundle.getString("from"), Toast.LENGTH_LONG); } 1.2 如何B应用是开启状态,那么在onRestart()函数中增加如下语句: Bundle bundle = this.getIntent().getExtras(); if(bundle!=null && bundle.getString("from")!=null){ Util.showToast(s_instance, bundle.getString("from"), Toast.LENGTH_LONG); } 2.从A跳转到B的某个被设置为exported的activity,B应用的状态无关紧要,代码如下: ComponentName comp = new ComponentName("com.nbg.baby", "com.nbg.baby.ApiLoginActivity"); Intent intent = new Intent();

android相对布局一行三个,037-布局-相对布局-RelativeLayout

RelativeLayout又称作相对布局,也是一种非常常用的布局。和LinearLayout的排列规则不同, RelativeLayout显得更加随意一些,它可以通过相对定位的方式让控件出现在布局的任何位置。 android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Button 1" /> android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="Button 2" /> android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Button 3" /> android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:text="Button 4" /> android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="Button 5" /> 让Button 1和父布局的左上角对齐,Button 2和父布局的右上角对齐,Button 3居中显示,Button 4和父布局的左下角对齐,Button 5和父布局的右下角对齐。

android广播 有序 无序,Android中的有序和无序广播浅析

BroadcastReceiver所对应的广播分两类:无序广播和有序广播。 无序广播即为我们平时经常使用的广播,其主要是通过public abstract void sendBroadcast (Intent intent)方法进行发送,并通过intent传递数据。代码示例如下: Intent nonOrderIntent = new Intent(); nonOrderIntent.setAction(ACTION); sendBroadcast(nonOrderIntent); 无序广播会被注册了的相应的感兴趣(intent-filter匹配)接收,且顺序是无序的。如果发送广播时有相应的权限要求,BroadCastReceiver如果想要接收此广播,也需要有相应的权限。 无序广播的广播接收者不可以使用setResultData()方法和abortBroadcast()方法,如果使用了会报错。 但是可以使用getResultData()方法,虽然不报错,但是获取到的数据为null。但是在一种特殊情况下,getResultData()方法能取到无序广播传递的数据,下文会说明在什么情况下。 无序广播不可以被拦截,不可以被终止,不可以被修改,无序广播任何接收者只要匹配条件都可以接收到,无优先级问题。 如果想通过无序广播传递数据,则可以调用intent.putExtra方法传递, 接收者可通过intent.get...接收,不可通过getResultData接收。 有序广播主要是通过public abstract void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)方法进行发送。代码示例如下: Intent intent = new Intent(); intent.setAction(ACTION); sendOrderedBroadcast(intent, null, new Priority2BroadcastReceiver(), null, Activity.RESULT_OK, "MainActivity发送了一个有序广播", null); 先介绍一下public abstract void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)方法

CSS学习笔记(二十二)弹性布局

CSS Flexbox CSS Flexbox 布局模块 在 Flexbox 布局模块(问世)之前,可用的布局模式有以下四种: 块(Block),用于网页中的部分(节)行内(Inline),用于文本表,用于二维表数据定位,用于元素的明确位置 弹性框布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。 Flexbox 元素 如需开始使用 Flexbox 模型,您需要首先定义 Flex 容器。 上面的元素表示一个带有三个 flex 项目的 flex 容器(蓝色区域)。 实例 含有三个 flex 项目的 flex 容器: <!DOCTYPE html> <html> <head> <style> .flex-container { display: flex; background-color: DodgerBlue; } .flex-container > div { background-color: #f1f1f1; margin: 10px; padding: 20px; font-size: 30px; } </style> </head> <body> <div class="flex-container"> <div>1</div> <div>2</div> <div>3</div> </div> <p>弹性布局中必须有一个 <em>display</em> 属性设置为 <em>flex</em> 的父元素。</p> <p>弹性容器的直接子元素会自动成为弹性项目。</p> </body> </html> 父元素(容器) 通过将 display 属性设置为 flex,flex 容器将可伸缩:

CSS学习笔记(二十)CSS object-fit 属性,按钮,分页,多列

CSS object-fit 属性 CSS object-fit 属性用于规定应如何调整 <img> 或 <video> 的大小来适应其容器。 CSS object-fit 属性 CSS object-fit 属性用于指定应如何调整 <img> 或 <video> 的大小以适合其容器。 这个属性告诉内容以不同的方式填充容器。比如“保留长宽比”或者“展开并占用尽可能多的空间”。 一个300x300 像素的图片,如果设置成了 200x300 像素,图片就会被压缩。 图像被压缩以适合 200x300 像素的容器,并且原始宽高比被破坏了。 如果我们使用 object-fit: cover;,它会剪切图像的侧面,保留长宽比,并填充空间 实例 img { width: 200px; height: 400px; object-fit: cover; } CSS object-fit 属性的所有值 object-fit 属性可接受如下值: fill - 默认值。调整替换后的内容大小,以填充元素的内容框。如有必要,将拉伸或挤压物体以适应该对象。 contain - 缩放替换后的内容以保持其纵横比,同时将其放入元素的内容框。 cover - 调整替换内容的大小,以在填充元素的整个内容框时保持其长宽比。该对象将被裁剪以适应。 none - 不对替换的内容调整大小。 scale-down - 调整内容大小就像没有指定内容或包含内容一样(将导致较小的具体对象尺寸) CSS 按钮 基本按钮样式 实例 .button { background-color: #4CAF50; /* Green */ border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; } 可悬停按钮 当鼠标移动到按钮上方时,使用 :hover 选择器可更改按钮的样式。

rsa签名算法c语言,数字签名算法_RSA

public static void jdkRsa(String data) { try { // 初始化密钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); // 获取密钥 KeyPair keyPair = keyPairGenerator.generateKeyPair();//keypair将公钥和密钥联系起来了,如果不是同一个对象就会验证通不过 RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey); signature.update(data.getBytes()); //加密之后的字节数组 byte[] result = signature.sign(); StringBuilder hexString = new StringBuilder(); for (int i = 0; i < result.length; i++) { if ((result[i] & 0xff) < 0x10)

CSS学习笔记(十八)CSS 2D 转换,3D 转换,过渡,动画

CSS 2D 转换 CSS 2D 转换方法 通过使用 CSS transform 属性,您可以利用以下 2D 转换方法: translate() rotate() scaleX() scaleY() scale() skewX() skewY() skew() matrix() translate() 方法 translate() 方法从其当前位置移动元素(根据为 X 轴和 Y 轴指定的参数)。 下面的例子把 <div> 元素从其当前位置向右移动 50 个像素,并向下移动 100 个像素: 实例 div { transform: translate(50px, 100px); } rotate() 方法 rotate() 方法根据给定的角度顺时针或逆时针旋转元素。 下面的例子把 <div> 元素顺时针旋转 20 度: 实例 div { transform: rotate(20deg); } 使用负值将逆时针旋转元素。 下面的例子把 <div> 元素逆时针旋转 20 度: 实例 div { transform: rotate(-20deg); } scale() 方法 scale() 方法增加或减少元素的大小(根据给定的宽度和高度参数)。

STM32Cube IDE安装:Error launching installer!

本来想体验一下官方IDE,双击安装程序启动安装,它竟然报错了???! 经过一番纠缠后,竟然发现是路径问题!!! So,只需要把这个安装程序放在英文路径下就好了……

CSS学习笔记(十五)CSS 圆角,多重背景

CSS 圆角 CSS 圆角 通过 CSS border-radius 属性,可以实现任何元素的“圆角”样式。 CSS border-radius 属性定义元素角的半径。 提示:您可以使用此属性为元素添加圆角 带有指定背景颜色的元素的圆角:带边框元素的圆角:带有背景图像的元素的圆角: 提示:border-radius 属性实际上是以下属性的简写属性: border-top-left-radius border-top-right-radius border-bottom-right-radius border-bottom-left-radius CSS border-radius - 指定每个角 border-radius 属性可以接受一到四个值。规则如下: 四个值 - border-radius: 15px 50px 30px 5px;(依次分别用于:左上角、右上角、右下角、左下角): 三个值 - border-radius: 15px 50px 30px;(第一个值用于左上角,第二个值用于右上角和左下角,第三个用于右下角): 两个值 - border-radius: 15px 50px;(第一个值用于左上角和右下角,第二个值用于右上角和左下角): 一个值 - border-radius: 15px;(该值用于所有四个角,圆角都是一样的): CSS 多重背景 CSS 多重背景 CSS 允许您通过 background-image 属性为一个元素添加多幅背景图像。 不同的背景图像用逗号隔开,并且图像会彼此堆叠,其中的第一幅图像最靠近观看者。 实例 (其中第一个url(flower.gif)在最上面) #example1 { background-image: url(flower.gif), url(paper.gif); background-position: right bottom, left top; background-repeat: no-repeat, repeat; } 多重背景图像可以使用单独的背景属性(如上所述)或 background 简写属性来指定。

CSS学习笔记(十三)CSS 下拉菜单,属性选择器

CSS 下拉菜单 基础的下拉菜单 创建当用户将鼠标移到元素上时出现的下拉框。 实例 <style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); padding: 12px 16px; z-index: 1; } .dropdown:hover .dropdown-content { display: block; } </style> <div class="dropdown"> <span>Mouse over me</span> <div class="dropdown-content"> <p>Hello World!</p> </div> </div> 例子解释: HTML 使用任何元素打开下拉菜单内容,例如 <span> 或 <button> 元素。 使用容器元素(如 <div>)创建下拉内容,并在其中添加任何内容。 用 <div> 元素包围这些元素,使用 CSS 正确定位下拉内容。 CSS .dropdown 类使用 position:relative,当我们希望将下拉内容放置在下拉按钮的正下方(使用 position:absolute)时,需要使用该类。

C语言实现简单的RSA算法

C语言实现简单的RSA算法 实验内容: 1、输入两个素数,然后生成一个随机数,计算出随机数的逆元,然后保存这些信息; 2、选择加密,则输入明文,输出密文; 3、选择解密,则输入密文,输出明文。 (要求有必要的文字说明,比如选取的两个素数,随机数,逆元等都需要显示) 代码: #include<stdio.h> #include<stdlib.h> #include <time.h> #include<math.h> char text[100]; int result[100]; int count = 0; int getNi(int e, int n)//求逆 { int d; for (d = 0; d < n; d++) { if (e * d % n == 1) return d; } } int Gcd(int a, int b)//求最大公因数 { if (a % b == 0) return b; else; return Gcd(b, a % b); } int getrand(int p,int q){//产生随机数e int m=(p-1)*(q-1); int e,c; while (1 ) { srand((unsigned)time(NULL)); e = rand() % m; c = Gcd(e, m); if (c == 1) break; } return e; } //加密 void Encode(int e,int n) { printf("

CSS学习笔记(十二)CSS 水平导航栏

CSS 水平导航栏 水平导航栏 有两种创建水平导航栏的方法:使用行内或浮动列表项。 行内列表项 构建水平导航栏的一种方法是,除了上一章中的“标准”代码外,还要将 <li> 元素指定为 inline: 实例 li { display: inline; } 例子解释: display: inline; -默认情况下,<li> 元素是块元素。在这里,我们删除每个列表项之前和之后的换行符,这样它们才能显示在一行。 浮动列表项 创建水平导航栏的另一种方法是浮动 元素,并为导航链接规定布局: 实例 li { float: left; } a { display: block; padding: 8px; background-color: #dddddd; } 例子解释: float: left; - 使用 float 使块元素滑动为彼此相邻 display: block; - 将链接显示为块元素可以使整个链接区域都可单击(不仅是文本),而且允许我们指定填充(如果需要,还可以指定高度,宽度,边距等) padding: 8px; - 使块元素更美观 background-color: #dddddd; - 为每个元素添加灰色背景色 提示:如需全宽的背景色,请将 background-color 添加到 <ul> 而不是每个 <a> 元素: 实例 ul { background-color: #dddddd; } 水平导航栏实例 创建具有深色背景色的基础水平导航栏,并在用户将鼠标移到链接上方时改变链接的背景色:

c语言listinsert函数怎么用,listinsert函数什么意思

int listinsert(sqlist * & L)中的&是什么意思 void InitList(SqList &L) InitList 函数是初始化链表 前面 的& 是说 参说 L 是以 引用方式调用 初始化链表当然需要对参数做修改 应该使用引用或者指针形式的参数,引用形式的参数更加安全 引用形式的参数只有c++ 才可以 如果是在c程序里就要使 listinsert,c2什么含义 表示引用,就是别名的意思,直接使用这个变量本身 没有则使用此变量的一份拷贝。 ListTraverse()函数和ListInsert()函数该怎么写?#include #include #include #include C++ list容器有个函数叫insert(),和push_back()区别: 返回类型不同 insert返回类型为iterator或者void,push_back返回类型为void。 数据插入位置不同 insert插入位置为指定的插入位置,而push_back将数据插入在list的尾部。 用法 insert (1)iterator insert( iterator pos, const 在C语言中,如何用ListInsert实现插入,输入字符,输入5个字母,在第4个字母处插入U,表长增加1,怎么弄输出???我到这程序都是对的了 你只是在创建新链表忘了初始化了,结果相当于定义了一个S结果S里连首地址都还没分配。还有你的插入函数返回的是int,你又想打印字符串,最后输出不符合的。main函数改成 int main() { SqList S; InitList_Sq(S);//S的初始化 Elem 数据结构 C语言 单链表 Status ListInsert_L(Linkl数据结构 C语言 单链表 Status ListInsert_L(Linklist &L,int i,ElemTyp在C语言中,函数形参是没有&修饰符的,这个&来自于C++,因为使用方便,且目前的大部分编译环境都支持C++,所以不讲究的人在C中使用了C++的&修饰符,在C++的函数形参表中,&修饰符表示对实参的引用,可以这样理解,通过&操作符。 ListInsert(&L,i,e)中这个L 指的是什么?是头指针,另外ListInsert(&L,i,e) GetElem(L,e,compare()) 一个有&一个没有&区别&表示引用,就是别名的意思,直接使用这个变量本身 没有&则使用此变量的一份拷贝。 ListInsert(*L,i,e)中的*L是什么意思,指针? *L 是指向列表头的指针 ListInsert(*L,i,e) 是向列表第i个位置插入元素e

Python读取csv文件乱码的解决办法

直接用Python的pandas模块下的read_csv方法,设定读取编码为GBK,引擎为Python即可。 import pandas as pd csv1 = pd.read_csv(r"C:\Users\Administrator\Desktop\test.csv", encoding='GBK', engine='python') print(csv1)

rsa算法c 语言实现,(完整版)RSA算法C语言代码

《(完整版)RSA算法C语言代码》由会员分享,可在线阅读,更多相关《(完整版)RSA算法C语言代码(5页珍藏版)》请在人人文库网上搜索。 1、include #include #include #include #include char s100,*c; int n,e,d,i,C,j,k=0,len; int str100,b30; unsigned gcd(unsigned a, unsigned b ) if(a%b=0) return b; else return gcd(b,a%b); void Egcd(int a, int b,int y=0; return ; if(ab) Egcd(a,b%a,x,y); x=(int)(b*y+1)/a; else Egcd(a%b,b,x,y); y=(int)(a*x-1)。 2、/b; void RSA() int p,q,N,Y; printf(请输入素数p和q:); scanf(%d %d, n=p*q; N=(p-1)*(q-1); 初始化随机数 产生随机整数e, e与N互质 /printf(n=%d N=%dn,n,N); srand( (unsigned)time( NULL ) );/ while(1) / e=rand()%N; / printf(e=%dn,e); if(e=0) continue; if(gcd(N,e)=1) break; /printf(e=%dn,e); Egcd(e,N,d,Y); / printf(d=%d Y=%dn,d,。

用c语言编程一个枚举,C语言中的共用体(union)和枚举(enum)

1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union Data a = {.ch = ‘j’}; //正确 在什么情况下使用共用体类型的数据?往往在数据处理中,有时需要对同一段空间安排不同的用途,这时用共用体类型比较方便,能增加程序处理的灵活性。 例如,学生的数据包括:姓名、号码、性别、职业、班级。 教师的数据包括:姓名、号码、性别、职业、职务。 要求用同一个表格来表示。 C语言核心代码 1 struct{2 int num; //成员 编号 3 char name[10]; //成员 姓名 4 char sex; //成员 性别 5 union{ //声明无名共用体类型 6 int class; //成员 班级 7 char position[10];//成员 职务 8 }category;9 }person[2]; View Code 2 enum 一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型。

c语言枚举算法案例,C语言枚举(enum)和联合(union)实例分享

使用enum进行定义 /* 枚举类型演示 */ #include int main() { enum /*季节*/ {CHUN, XIA = 5, QIU, DONG}; printf("QIU是%d\n", QIU); } 使用union联合进行定义 /* 联合演示 */ #include typedef union{ int val; float fval1; } tmp; int main(){ tmp utmp = {0}; printf("&(utmp.val)是%p\n", &(utmp.val)); //所指向的地址是相同的 printf("&(utmp.fval)是%p\n", &(utmp.fval1)); } 知识点扩展: 枚举类型的定义形式为: enum typeName{ valueName1, valueName2, valueName3, ...... }; enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字; valueName1, valueName2, valueName3, ......是每个值对应的名字的列表。注意最后的;不能少。 例如,列出一个星期有几天: enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };

软件测试之黑盒测试(等价类、边界值、因果图、功能图)

软件测试之黑盒测试 一、黑盒测试的基本概念二、等价类划分等价类类别划分等价类的基本方法设计测试用例 三、边界值分析法边界值设计测试用例的基本原则 四、因果图法因果图设计方法因果图的基本图形符号因果图的约束符号 因果图测试用例 五、功能图法功能图设计方法状态迁移图逻辑功能模型 六、总结测试方法选择策略 一、黑盒测试的基本概念 黑盒测试也称功能测试,通过测试来检测每个功能是否都 能正常使用。 在测试中,黑盒测试完全不考虑程序内部结构,仅对程序接口进行测试。只检查程序功能是否能够按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。进行黑盒测试的目的是试图发现以下类型的错误: 功能错误 数据结构或外部数据库访问错误 性能错误 界面错误 初始化和终止错误 二、等价类划分 等价类类别 等价类划分是一种黑盒测试的技术,其不考虑程序内部的结构,仅将所有可能的输入数据划分为若干子集,然后在 每一子集中选取少数具有代表性的数据作为测试用例。 等价类分为: 1、有效等价类: 顾名思义,有效等价类是指对于程序的需求规格说明来说是合理的,有意义的输入数据构成的集合。 2、无效等价类 不符合需求规格说明的数据所构成的集合, 划分等价类的基本方法 等价类划分依托于以下六条原则: 1、在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。 eg:输入条件为( x>=3 && x<5 ),则可以确定一个有效等价类为(3<=x<5);两个无效等价类为(x<3)、(x>=5)。 2、在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。 eg:输入条件为( x=3 ),则可以确定一个有效等价类为(x=3);一个无效等价类为(x!=3)。 3、在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。 eg:输入条件为(x),则可以确定一个有效等价类为(x);一个无效等价类为(!x)。 4、在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。 eg:输入条件为(x= =3|x= =4),则可以确定n个有效等价类为(x= =3)、(x==4);一个无效等价类为(x!=3 && x!=4)。 5、在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。 6、在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。 设计测试用例 对于一个100以内乘法计算器来说,已知其输入条件为(1<= x1 <=100)、(1<= x2 <=100)。则其测试用例应划分为: 对于x1而言: 1、划分等价类 有效等价类:(1<= x1 <=100) 无效等价类:(x1<1)、(x1>100) 2、从等价类中设计测试用例 用例编号所属等价类乘数1乘数2乘积123206021-102提示:输入错误332003提示:输入错误 x2同x1。 三、边界值分析法 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法,其测试用例来自等价类的边界。 边界值设计测试用例的基本原则 1、如果输入条件规定了值的范围,则应以该范围边界以及边界范围外的相邻值作为测试输入数据。 2、如果输入条件规定了值的个数最大为M、最小为m个,则用M、M+1、m、m-1的个数作为测试数据。 3、如果程序的规格说明给出的输入域或输出域是有序集合,应选取集合的第一个元素和最后一个元素作为测试用例。

黑群晖系统备份与恢复

本教程适用于快速恢复群晖的系统,备份套件,要求将系统与套件安装在一个单独的磁盘上。 一、这是我们已经安装好套件与系统 我们在 控制面板-终端机与SNMP,将启用Telnet功能勾选(开启SSH也是一样的,没有本质区别),然后点击应用,重启群晖一次。 二、等待群晖重启完毕,我们在利用管理员模式打开cmd.exe 输入命令 telnet xx.xx.xx.xx ,这个xx.xx.xx.xx是你的群晖的局域网ip地址,我的是192.168.52.137.因此输入 telnet 192.168.52.137 在这里输入 root,回车 Passwdord输入你的admin用户的密码,注意,此处没有回显,输入回车即可。 下图代表你进入成功。 此时我们需要使用linux命令dd进行系统镜像的备份,首先需要查找是那块硬盘对应的系统盘。在我的测试环境中一共有两块硬盘,一块是16gb的系统盘安装系统与套件,一块是80gb的数据盘。 我们首先看一下系统上有哪些硬盘。 在终端输入 ls /dev|grep sd 可以看到有sda sdb两块硬盘,我们使用fdisk命令查看每个硬盘的大小。 输入命令:fdisk /dev/sda 然后出入 “p”,回车 从输出可以看到,sda的大小为17GB是系统盘,输入“q”,然后回车退出fdisk。 我们已经知道/dev/sda是我们需要备份的盘,那么备份镜像到何处呢?这里我选择备份到数据盘上面,首先在群晖数据盘新建一个文件夹用于存储镜像。 我们发现数据盘使用的是存储空间2,也就是/volume2,我们使用 ls /volume2查看一下是否正确。 发现data img video文件夹均在,确定是数据盘的挂载位置。 下面我们开始备份 命令为:dd if=/dev/sda of=/volume2/img/sys.img,然后回车 这个命令的意思是 要备份的设备为/dev/sda,也就是我们上面确定的系统盘,/volume2/img/sys.img代表我们将系统的镜像保存为这个文件。在这个备份过程中必须保证telnet或者ssh不断开 注意:时间较长需要断开telnet或者ssh,请使用以下命令 nohup dd if=/dev/sda of=/volume2/img/sys.img & 下图代表镜像保存完毕 在file station中已经出现,我们将这个镜像下载到我们的计算机中。 下面我们模拟一次灾难操作,我们将原有的系统硬盘移除,插入一块新的同样大小的硬盘。 此时我们有两种方式,可以在windwos上恢复,我们选择在windwos上面恢复。我们将新的硬盘插入计算机。 然后在运行里面输入 msinfo32,然后在左侧选择 组件,存储,磁盘。我这里利用一个U盘模拟,可以发现磁盘#3,记住这个数字 我们打开管理员模式的cmd.exe 利用cd命令切换到dd与sys.img所在目录 输入命令 dd if=e:\dd\sys.img of=\\.\PhysicalDrive3 bs=1M,这里一定要注意!!! \\.\PhysicalDrive3这个3是是上面msinfo32查询到的我的新的磁盘(此处我用U盘代替)的编号是3 ,一定不能弄错,否则可能干掉你别的硬盘。e:\dd\sys.img是你开始保存的镜像的绝对路径。恢复过程取决于设备速度。耐心等待即可。 恢复完毕 我们将新的硬盘插入群晖 开机。注意,下面的问题不是一定存在。 这里因为更换了硬盘,设备号改变了,所以出现这个问题,我们点击修复即可。 套件什么的都恢复了,不需要其他操作。

CSS学习笔记(二)标准盒模型与怪异盒模型,margin,border,padding

标准盒模型与怪异盒模型 一、盒子模型 盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版。W3C组织建议把网页上元素看成是一个个盒子。盒模型主要定义四个区域:内容( content)、内边距( padding)、边框( border)、外边距( margin)。转换到我们日常生活中,可以拿手机盒来对比,手机=内容,内边距=盒子中的填充物,边框-盒子的厚度,外边距两个手机盒之间的距离。通常我们设置的宽和高是指“手机” content的宽高,一整个盒子还包含了“填充物”、盒子、盒子与盒子的距离。 二、W3C盒模型 盒模型由内容(content)、填充(padding)、边框(border)、边界(margin)组成 外边距 围绕在元素边框周围的空白区域 会在元素外创建额外的空白区域外边距是透明的 语法:margin: value; 单边设置 margin- top/right /bottom/left: value;value可取值为像素,%,auto,负值 使用以下margin形式可以使块状元素居中 /* 实现块状元素居中显示 */ margin: 10px auto; 外边距简写: margin: value(四个方向相同); margin: value(上下) value(左右); margin: value(上) value(左右) value(下); margin: value(上) value(右) value(下) value(左); 以上四个位置按顺序分别为:margin-top–margin-right–margin-bottom–margin-left,即“上-右-下-左”。以下简写为top–right–bottom–left。其中需要注意的是后三种情况,当有像素值缺省时,浏览器会自动对缺省像素按照“bottom=top”和“left=right”的方法进行赋值。 外边距合并 ●当两个垂直外边距相遇时,他们将形成一个外边距,成为外边距合并 ●合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 margin设置元素外边距的宽度,它有这么几个特点 1.块级元素的垂直相邻外边距会合并 2.行内元素实际上不占上下外边距。行内元素的左右外边距不合并 3.浮动元素的外边距也不会合并 4.允许指定负的外边距值,不过使用时要小心 border边框 border属性设置一个元素的边框,它有三个要素:宽、样式、颜色,统称“边框三要素”。 要素书写的时候一般如下顺序: border:宽度样式颜色 border: 1px solid red; 不过不按此顺序来写依然能正常显示。 border- style设置边框的样式,有五种常用样式可选 点状 dotted实线 solid双线 double(需要最起码设置为3像素,不然显示不下虚线 dashed无边框 none border的三要素可以统一写在” border”属性中,也可以单独设置。