首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

Android UI学习 - TableLayout

TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的,它是由多个TableRow对象组成,每个TableRow可以有0个或多个单元格,每个单元格就是一个View。这些TableRow,单元格不能设置layout_width,宽度默认是fill_parent的,只有高度layout_height可以自定义,默认是wrap_content。 单元格可以为empty,并且通过android:layout_column可以设置index值实现跳开某些单元格。在TableRow之间,添加View,设置layout_height以及背景色,就可以实现一条间隔线。android:layout_span可以设置合并几个单元格: <?xmlversion="1.0"encoding="utf-8"?> <TableLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow> <TextView android:text="column1" android:padding="3dip"/> <TextView android:text="column2" android:padding="3dip"/> <TextView android:text="column3" android:padding="3dip"/> </TableRow> <TableRow> <TextView android:text="column11" android:visibility="invisible"/>//cell不见了 <TextView android:text="左边的invisible" android:gravity="right" android:padding="3dip"/> <Button android:id="@+id/go" android:text="go" android:padding="3dip"/> <Button android:text="cancel" android:padding="3dip"/> </TableRow> <View//间隔线 android:layout_height="2dip" android:background="#F00"/> <TableRow> <TextView android:text="右边的cellempty"/> <TextView android:layout_column="2" android:text="跳开emptycell" android:padding="3dip"/> </TableRow> <TableRow> <TextView android:text="合并3个单元格" android:layout_span="3" android:gravity="center_horizontal" android:background="#FFC0C0C0" android:textColor="#f00" android:padding="3dip"/> </TableRow> </TableLayout> 没有设置收缩/伸展效果 注意,原来没有添加 android:padding="3dip" 的,发现那些column会凑在一起的,没有空白间隔!明显看到,那个cancel按钮被挤到几乎看不见了!这时候需要使用android:shrinkColumns="可收缩的column",android:stretchColumns="可伸展的column"。 android:shrinkColumns和android:stretchColumns的值都是以0开始的index,但必须是string值,即用"1,2,5"来表示。可以用"*"来表示all columns。而且同一column可以同时设置为shrinkable和stretchable。 如果使用TableLayout类的 setColumnShrinkable/setColumnStretchable (int columnIndex, boolean isShrinkable)就麻烦些了,需要一个一个column来设置。也可以使用TableLayout的 setShrinkAllColumns/setStretchAllColumns来设置all columns。 判断这些column是否shrinkable或stretchable,可以调用 isColumnShrinkable/isColumnStretchable(int columnIndex),isShrinkAllColumns()/isStretchAllColumns()。 <?xmlversion="1.0"encoding="utf-8"?> <TableLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:shrinkColumns="0">//设置第一个column可收缩 <TableRow> <TextView android:text="column1" android:padding="3dip"/> <TextView android:text="column2" android:padding="3dip"/> <TextView android:text="column3" android:padding="3dip"/> </TableRow> <TableRow> <TextView android:text="column11" android:visibility="invisible"/> <TextView android:text="左边的invisible" android:gravity="right" android:padding="3dip"/> <Button android:id="@+id/go2" android:text="go2" android:padding="3dip"/> <Button android:text="cancel" android:padding="3dip"/> </TableRow> <View android:layout_height="2dip" android:background="#F00"/> <TableRow> <TextView android:text="右边的cellempty"/> <TextView android:layout_column="2" android:text="跳开emptycell" android:padding="3dip"/> <TextView android:text="123456789" android:padding="3dip"/> </TableRow> </TableLayout> 可收缩column效果 现在可以看到第一个column为了让第4个column完整显示,而收缩得内容分为几行显示! 而 可伸展column的效果就是在其他column可以完整显示时,该column就会伸展,占最多空间: <?xmlversion="1.0"encoding="utf-8"?> <TableLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1">//设置第二个column可伸展 <TableRow> <TextView android:text="column1" android:padding="3dip"/> <TextView android:text="column2" android:gravity="right" android:padding="3dip"/> <TextView android:text="column3" android:padding="3dip"/> </TableRow> <TableRow> <TextView android:text="column1" android:padding="3dip"/> <TextView android:text="column2" android:gravity="right" android:padding="3dip"/> <TextView android:text="column3" android:padding="3dip"/> </TableRow> </TableLayout> 可伸展column效果 而动态隐藏column,可以调用TableLayout.setColumnCollapsed (int columnIndex, boolean isCollapsed)来指定相应的column。另外TableLayout类的boolean isColumnCollapsed (int columnIndex)能够判断指定的column是否隐藏。 TableLayout可以用来做网页上的Form显示效果,看看官方的sample: <?xmlversion="1.0"encoding="utf-8"?> <TableLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="@string/table_layout_10_user" android:textStyle="bold" android:gravity="right" android:padding="3dip"/> <EditTextandroid:id="@+id/username" android:text="@string/table_layout_10_username_text" android:padding="3dip" android:scrollHorizontally="true"/> </TableRow> <TableRow> <TextView android:text="@string/table_layout_10_password" android:textStyle="bold" android:gravity="right" android:padding="3dip"/> <EditTextandroid:id="@+id/password" android:text="@string/table_layout_10_password_text" android:password="true" android:padding="3dip" android:scrollHorizontally="true"/> </TableRow> <TableRow android:gravity="right"> <Buttonandroid:id="@+id/cancel" android:text="@string/table_layout_10_cancel"/> <Buttonandroid:id="@+id/login" android:text="@string/table_layout_10_login"/> </TableRow> </TableLayout> Form效果 本文转自 Icansoft 51CTO博客,原文链接:http://blog.51cto.com/android/314262

优秀的个人博客,低调大师

springcloud 学习-eureka搭建

组件名:Netflix Eureka 作用:支撑微服务的自注册、自发现,提供负载均衡能力 开发环境使用IDEA,jdk1.8 一、搭建eureka服务 1.新建maven项目,配置pom.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Camden.SR7</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> 2.新建启动类 1 2 3 4 5 6 7 @SpringBootApplication @EnableEurekaServer public class Application{ public static void main(String[]args){ SpringApplication.run(Application. class ,args); } } 3.新建配置文件application.yml 1 2 3 4 5 6 7 8 9 10 11 server: port: 1000 eureka: instance: hostname:localhost client: register-with-eureka: false fetch-registry: false spring: application: name:eureka-server 4.启动(启动类) 5.访问 eureka:http://localhost:1000/ erueka服务器启动成功,目前还未有服务注册 二、搭建服务提供方 1.新建maven项目,配置pom.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Camden.SR7</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> 2.创建Application启动类,提供/hello服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Configuration @ComponentScan @EnableEurekaClient @EnableAutoConfiguration @RestController public class Application{ @RequestMapping (value= "hello" ,method=RequestMethod.GET) public Stringhello(){ return "你好,世界" ; } public static void main(String[]args){ new SpringApplicationBuilder(Application. class ).web( true ) .run(args); } } 3、新建application.yml配置文件 1 2 3 4 5 6 7 8 9 eureka: client: serviceUrl: defaultZone:http: //localhost:1000/eureka/ spring: application: name:feign-client-test- 001 server: port: 2000 查看路径id展示,需要添加配置 1 2 3 4 5 6 eureka: client: serviceUrl: defaultZone:http: //admin:admin123@localhost:1000/eureka instance: prefer-ip-address: true 4、运行,查看之前Erueka服务端的页面,FEIGN-CLIENT-TEST-001在注册中心变为了大写这个注意下 5、访问:http://127.0.0.1:2000/hello 三、搭建服务消费方 使用@FeignClient注解 Feignis a declarative web service client. It makes writing web service clients easier. 如上是Spring Cloud文档中对于Feign的定义,结合之前的两篇博文,在这里我们就可以吧Feign简单的理解为用户(前端)可以直接接触到的REST接口提供者。在Feign中,我们可以方便的访问和使用意已经在Erueka服务器中注册过的服务了。 1、建立maven工程,配置pom.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version> 1.5 . 2 .RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <properties> <project.build.sourceEncoding>UTF- 8 </project.build.sourceEncoding> <project.reporting.outputEncoding>UTF- 8 </project.reporting.outputEncoding> <java.version> 1.8 </java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR6</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 2、建立包及启动类FeignApplication 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /** *Createdbygaofengon2017/7/14. */ @Configuration @ComponentScan @EnableAutoConfiguration @EnableEurekaClient @EnableFeignClients @SpringBootApplication public class FeignApplication{ public static void main(String[]args){ SpringApplication.run(FeignApplication. class ,args); } } 3、建立接口类,用来调用上文中FEIGN-CLIENT-TEST-001服务的方法hello(),FEIGN-CLIENT-TEST-001是全大写的 1 2 3 4 5 @FeignClient ( "FEIGN-CLIENT-TEST-001" ) public interface IHello{ @RequestMapping (value= "/hello" ,method=RequestMethod.GET) Stringhello(); } 其中@FeignClient中指定需要调用的微服务的名称(全大写),@RequestMapping中指定访问微服务响应接口的路径,如之前微服务的hello方法是通过"/hello"路径访问,那么这里需要配置一致 4、新建Controller类,为前端提供REST接口 1 2 3 4 5 6 7 8 9 @RestController public class HelloController{ @Autowired private IHelloiHello; @RequestMapping (value= "gethello" ,method=RequestMethod.GET) public StringgetHello(){ return iHello.hello(); } } 5、配置Feign的配置文件,指定Eureka服务器注册地址和访问端口application.yml 1 2 3 4 5 6 7 8 9 server: port: 8081 eureka: client: serviceUrl: defaultZone:http: //localhost:1000/eureka/ spring: application: name:feign-client-test- 002 6、运行,查看之前Erueka服务端的页面 7、访问:http://127.0.0.1:8081/gethello 这里访问的就是feign-client-test-001的hello服务。 本文转自gaofeng36599 51CTO博客,原文链接:http://blog.51cto.com/786678398/1947471

优秀的个人博客,低调大师

docker容器学习

Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。 Docker 容器通过 Docker 镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。 Docker 面向对象 容器 对象 镜像 类 Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。 Docker 容器(Container) 容器是独立运行的一个或一组应用。 Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 Docker 仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 本文转自去轻狂书生51CTO博客,原文链接:http://blog.51cto.com/8999a/1966961,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发学习笔记

1常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Builder(IB)中将视图拖拽到窗口上并将各种视图连接到插座变量和动作上, 这样它们就能以编程方式与代码交互。IB使用Nib文件储存GUI资源,同时适用于Cocoa和Carbon程序。在需要的时候,Nib文件可以被快速地载入内存。 2iOS的常用开发框架 2.1 Foundation框架,该框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组、字典和集合,还有其他功能,包括处理日期和时间、自动化的 内存管理、处理基础文件系统、存储(或归档)对象、处理集合数据结构(如点和长方形)等。 2.2 Cocoa框架,术语Cocoa(适合开发桌面应用程序)是指Foundation框架和Application Kit框架(窗口、按钮、列表等能够开发交互式图形应用程序)。术语Cocoa Touch(适合iPhone和iTouch的应用程序开发)是指Foundation框架和UIKit框架。 3iOS程序框架 3.1 典型的iOS程序包含一个Window(窗口)和几个UIViewController(视图控制器),每个UIViewController可以管理多高UIView(在iPhone里看到的、摸到的都是UIView, 可能是UITableView、UIWebView、UIImageView等)。这些UIView之间如何进行层次叠放、显示、隐藏、旋转、移动等都由UIViewController进行管理,而 UIViewcontroller之间的切换,通常情况是通过UINavigationController(当程序具有层次化的工作流时,比较适合)、UITabBarController(当应用程序需要分为几个 相对比较独立的部分时,比较适合,比如tab)或UISplitViewController(适合用于“主-从”界面的情况,比如左菜单,右明细)进行。 4MVC 4.1 MVC的处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型用业务逻辑来处理用户的请求并返回数据;最后控制器用相应的视图格式化 模型返回的数据,并通过表示层呈现给用户。 5创建并连接输出口和操作 在Assistant Edit模式下,将视图控件拖拽到包含控件ViewController.h的代码编辑器中,当鼠标位于@interface行下时松开。 创建IBOutlet,是指输出口,用于实例变量/属性; 创建IBAction,是指操作,用于事件。 本文转自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/5268086.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

SWIFT学习笔记01

1、Swift。用来推断option是不是nil,相当于OC的 if(option) if let name = option{ greeting = “if=====“ }else{ greeting = "else===" } 2、执行switch中匹配到的子句之后。程序会退出switch语句,并不会继续向下执行,所以不须要在每一个子句结尾写break。 3、//使用..创建的范围不包括上界,假设想包括的话须要使用...,集合上,就是[)与[]的关系 for i in 0..3{ println("i===\(i)")//仅仅经历0,1,2三次循环 } 4、//传入数组參数 func sumOf(numbers:Int...) -> Int{ var sum = 0 for number in numbers{ sum += number } return sum } 5、//函数嵌套,函数里面定义并使用函数 func returnFifteen() -> Int{ var y = 10 func add(){ y+=5 } add() return y } 6、处理变量的可选值时。你能够在操作(比方方法、属性和子脚本)之前加? 。假设?之前的值是nil,? 后面的东西都会被忽略。而且整个表达式返回nil。否则,?之后的东西都会被执行。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5180947.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

学习笔记 十六 : Docker

一 docker简介 docker是一个轻量级的,运行在用户内核的一组进程,与主机系统想隔离。它有自己的进程,文件系统和其它资源,它可以和其它主机共享物理主机内核。 二 安装配置 yum install docker systemctl start docker systemctl enable docker docker pull registry.access.redhat.com/redhat/rhel7 docker load -i rhel-server-docker-7.0.tar.gz docker images docker run -i -t --rm rhel7 cat /etc/hosts docker ps -a docker start -ai silly_fermi3 2.创建docker镜像 docker run -i rhel7 bash -c "yum install -y httpd;" docker ps -l docker commit -m "RHEL7+httpd" dreamy_goodall1 rhel_httpd docker images docker run -p 8080:80 -d rhel_httpd /usr/sbin/httpd -DFOREGROUND yum install docker-registry systemctl start docker-registry systemctl enable docker-registry firewall-cmd --add-port=5000/tcp firewall-cmd --add-port=5000/tcp --permanent docker tag rhel_httpd registry.example.com:5000/usr/httpd docker push registry.example.com:5000/user/httpd 三 案例 3.1 docker 私有仓库搭建 3.2 docker 发布一个web应用 3.3 docker 发布一个mysql服务 3.4 docker高可用 本文转自 woshiwei201 51CTO博客,原文链接:http://blog.51cto.com/chenwei/1841979

优秀的个人博客,低调大师

android学习笔记(1)

1.android概念 android是一个软件合集,包括操作系统,中间件和关键应用程序.(取自android sdk所带的文档) 2.android的体系结构 官方给出来的体系结构如下: 可以看到,自顶向下,android体系结构分为4层:应用程序层,框架层,库与运行时层,linux内核层. 应用程序 我们自己开发出来的程序属于这一层.应用程序使用java编程语言来写. 应用程序框架 提供了一些api,有很好的复用性. 库与运行时 库是一些基本的程序包(C/C++实现);运行时和java的运行时类似. linux内核 提供了操作系统所需的最基本的东西(包括一些驱动) 3.android历史 2005年Google收购Android公司 2007年Google联合总共34家公司成立开放手机联盟(open handset alliance,OHA) 2008年9月22日,Google第一款手机T-Mobile G1面世 2009年2月,android sdk 1.1发布 本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/08/01/2124002.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

JAVA学习资料汇总

1、尚学堂JAVA视频 http://www.bjsxt.com/shipinxiazai/ 2、《魔乐MLDN3G版Java核心课程》(3Gjava视频) http://www.verycd.com/topics/2907692/ 3、《尚学堂科技.马士兵.JAVA视频教程(java培训内部视频) http://www.verycd.com/topics/93279/ 4、《动力节点Java培训视频》 http://www.verycd.com/topics/2758880/ 5、《魔乐MLDN李兴华教你Android开发实战》 http://www.verycd.com/topics/2898607/ 6、JAVA书籍http://pan.baidu.com/share/link?shareid=2269339491&uk=2033258291 7、JAVA工具集 http://pan.baidu.com/share/link?shareid=2118490812&uk=2033258291 本文转自dllglvzhenfeng51CTO博客,原文链接:http://blog.51cto.com/1443208/1277305,如需转载请自行联系原作者

优秀的个人博客,低调大师

7、yum 学习笔记

Linux的程序包管理: 软件包的组成部分: 二进制程序 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 库 lib, /usr/lib, /lib64, /usr/lib64, /usr/local/lib, /usr/local/lib64 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 配置文件 /etc 帮助文件 man文件, info文件, README, INSTALL, ChangeLog man COMMAND 到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字 /usr/share/man/ ldd命令: 查看应用所依赖的共享库 ldd [options] FILE... rpm包的使用: rpm包命名格式: 源程序:name-version.tar.{gz|bz2|xz} version: major.minor.release rpm包:name-version-release.arch.rpm release:通常包含rpm的制作发行号,还包含适用的OS bash-4.3.2-2.el6.x86_64.rpm 来源合法性验正: 源程序:通过md5或sha1校验码验正; rpm包:发行商提供的合法性是可信的 验正包完整性:校验码 验正来源合法:公钥 获取rpm包的途径: 1、发行商的光盘或站点服务器 以CentOS为例: http://mirrors.163.com http://mirrors.sohu.com 2、http://rpmfind.net 3、http://rpm.pbone.net rpm包管理:安装 # rpm -ivh [install-options] /path/to/rpm_package 安装软件包,显示安装进度 [install-options] --test 仅测试,不真正执行安装过程 --nodeps 忽略依赖关系 --replacepkgs 重新安装 原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件 rpm包管理:卸载 #rpm -e [install-options] package_name 卸载软件包 [install-options] --nodeps 忽略依赖关系 rpm包管理:查询 #rpm -qa 查询所有已经安装的包 #rpm -q package_name 查询某单个包是否安装 #rpm -qi package_name 查询包的描述信息 #rpm -ql package_name 查询包安装之后在当前系统生成文件列表 #rpm -qd package_name 查询包安装后生成的帮助文档 #rpm -qc package_name 查询包安装后生成的配置文件 #rpm -qf /path/to/somefile 查询某文件是哪个包安装生成的 #rpm -q --scripts package_name 查询包相关的脚本 脚本有四类: preinstall 安装前脚本 postinstall 安装后脚本 preuninstall 卸载前脚本 postuninstall 卸载后脚本 查询尚未安装的rpm包文件的相关信息: #rpm -pqi /path/to/package_file 查询包的描述信息 #rpm -pql /path/to/package_file 查询包安装之后在当前系统生成文件列表 #rpm -pqd /path/to/package_file 查询包安装后生成的帮助文档 #rpm -pqc /path/to/package_file 查询包安装后生成的配置文件 rpm包之升级: #rpm -Uvh [install-options] /path/to/package_file 升级或安装 #rpm -Fvh [install-options] /path/to/package_file 升级 [install-options] --nodeps 忽略依赖关系 --force 强行安装 rpm包管理:检查包安装后生成的文件是否被修改过; #rpm -V package_name S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ rpm包管理:检验来源合法性和软件包完整性 包完整性:通过单向加密机制(md5|sha1) 来源合法性:通过公钥加密机制(RSA) 导入制作者的公钥,CentOS发行版的公钥在iso文件中; 导入命令:rpm --import /path/to/gpg-key-file #pm -K --nosignature /path/to/package_file 只检查完整性,不检查来源合法性 #pm -K --nodigest /path/to/package_file 不检查完整性,只检查来源合法性 #pm -K /path/to/package_file 既检查完整性,又检查来源合法性 rpm包管理:数据库重建 数据库:/var/lib/rpm/ #rpm --initdb 初始化,如果事先不存在一个数据库,则新建之; #rpm --rebuilddb 重建,直接重建数据库,会覆盖原有的库; yum客户端: 1、配置文件:指定各可用的yum仓库; 2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地; 3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息; 4、执行具体操作: 客户端配置文件指定对应服务器访问方式: ftp ftp://server/path/to/repo http http://server/path/to/repo nfs nfs://server/nfs_path file file:///path/to/repository 要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中: /etc/yum.conf /etc/yum.repos.d/*.repo 配置文件格式:由两段组成,类似windows的ini配置文件 [main] :主配置段 [repo] :仓库配置段 配置repo: [repo_ID] name=String baseurl=仓库的访问路径 enabled={1|0} gpgcheck={1|0} gpgkey=公钥文件(可以在本地,也可是服务器端路径) cost=定义此仓库开销,默认为1000 [base] name=CentOS 6.5 X86_64 relase baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/ enabled=1 gpgcheck=1 gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6 yum的各命令: # yum repolist 列出所有可用yum repo #yum clean all 清理缓存 #yum list [all|installed|available] 列出[所有的安装包|已安装包|可安装包] # yum info package_name 列出包的描述信息 # yumwhatprovides|provides /path/to/somefile 查询某文件是由哪个包安装生成的 # yuminstall package_name 安装指定的程序包 # yum reinstall package_name 重新安装指定的程序包 # yumerase package_name 卸载指定的程序包 # yumcheck-update 检查可升级的包 # yumupdate package_name 升级指定的程序包 # yum downgrade package_name 降级指定的程序包 # yum grouplist 列出所有包组 # yum groupinfo "group_name" 显示包组信息 # yum groupinstall "group_name" 安装指定的包组 # yum groupremove "group_name" 卸载指定的包组 如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries” 如果系统为CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development” 安装本地包: # yum install /path/to/package_file 手动禁止检查来源及完整性:--nogpgcheck # yum --nogpgcheck install /tmp/zsh-2.3.1-2.el6.x86_64.rpm 练习:安装相关的包组,确保如下命令可执行 # gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #yum -y groupinstall "Development tools" "Server Platform Development" yum repository: 文件服务器 repodata/: repomd.xml: 测试实现yum repository的配置: 1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包; 2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包; # cd /var/www/html # lftp 172.16.0.1/pub/Sources/6.x86_64 # lftp: > mirror openstack # bye 3、创建yum仓库 # rm -rf /var/www/html/openstack/repodata # createrepo /var/www/html/openstack 4、启动httpd服务 # service httpd start 5、配置使用自建的yum仓库 [openstack] name=Openstack Repository baseurl=http://172.16.100.7/openstack/ enabled=1 gpgcheck=0 6、配置好epel的yum源 7、测试使用 # yum install openstack-keystone 程序包管理之编译安装: 源程序: 项目工程:把代码分散于多个源代码文件 GNU/make autoconf: configure脚本 检查编译环境是否编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等; 结果:会根据Makefile.in文件生成makefile文件 automake: Makefile.in文件 用于结合configure脚本生成makefile文件 makefile文件是make命令的配置文件 编译安装的步骤: 1、拿到源代码,并解压: # tar xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录名通常为package-version 2、切换至源码目录中 # cd package-version 3、执行configure脚本 # ./configure 4、编译 # make 5、安装 # make install configure脚本的通用功能: 我们需要定义的配置: 1、指定安装路径: --prefix=/usr/local/package_name --sysconfdir=/etc/package_name 2、指定启用/禁用的特性: --enable-feature: 例如--enable-fpm --disable-feature: 例如 --disable-socket 3、指定所依赖功能、程序或文件 --with-function:启用某功能 --without-function:禁用某功能 不同的程序,其configure脚本功能不同,要获取帮助: ./configure --help 练习: 1、编译安装nginx, 并启动之; 2、编译安装axel,并试用之; 3、编译安装httpd,并启动之; /usr/local/apache/bin 二进制程序: # vim /etc/profile.d/apache.sh PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH export PATH 头文件输出给系统: # ln -sv /usr/local/apache/include /usr/include/httpd 库文件输出: # vim /etc/ld.so.conf.d/httpd.conf /usr/local/apache/lib 让系统重新生成库文件路径缓存 # ldconfig 导出man文件: # vim /etc/man.config MANPATH /usr/local/apache/man 本文转自开源殿堂 51CTO博客,原文链接:http://blog.51cto.com/kaiyuandiantang/1942716,如需转载请自行联系原作者

优秀的个人博客,低调大师

AIDL深入学习

以下两种方式都是基于bindService启动服务。 1)一种简单的实现跨进程的方式(Binder,Messenger) http://www.open-open.com/lib/view/open1469493830770.html 使用Messenger的好处就是如果有多个请求,不会冲突,会将请求放入请求队列中一个一个执行任务。 首先要明确哪个是客户端,哪个是服务端。 Service是声明在服务端工程里的,因为要被客户端工程调用到,所以是隐式声明的: ` <service android:name=".aidl.MessengerServiceDemo" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.lypeer.messenger"></action> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service> <activity android:name=".aidl.ActivityMessenger"/>` 服务端工程安装好后,开启客户端工程,绑定服务端声明的服务。(服务端服务不一定要事先开启了,声明了即可。) 注意:客户端工程隐式调用服务端开启的那个service,传给intent的包名是服务端的包名,并非自己的包名。 `public class MainActivity extends AppCompatActivity { static final int MSG_SAY_HELLO = 1; Messenger mService = null; boolean mBound; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { //接收onBind()传回来的IBinder,并用它构造Messenger mService = new Messenger(service); mBound = true; } public void onServiceDisconnected(ComponentName className) { mService = null; mBound = false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.sample_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sayHello(view); } }); } //调用此方法时会发送信息给服务端 public void sayHello(View v) { if (!mBound) return; //发送一条信息给服务端 Message msg = Message.obtain(null, MSG_SAY_HELLO, 1, 2); try { mService.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } @Override protected void onStart() { super.onStart(); //绑定服务端的服务,此处的action是service在Manifests文件里面声明的 Intent intent = new Intent(); intent.setAction("com.lypeer.messenger"); //不要忘记了包名,不写会报错 intent.setPackage("com.example.lianxiang.cmakedemo1"); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); // Unbind from the service if (mBound) { unbindService(mConnection); mBound = false; } } }` 这样,在客户端就可以操作,实现与服务端工程的一个交互。 Messenger实现的进程间的交互,只是信息的传递,客户端无法直接调用服务端的方法,所以AIDL就是解决的这个问题。 2)AIDLhttp://www.open-open.com/lib/view/open1469493649028.html(上) 按照博主所说的,结果能实现。 2-1)新建aidl文件,注意新建的规则。 2-2)注意aidl及java类的目录的问题,并且保证服务端与客户端都存在aidl与java文件。 2-3)服务端声明service,service里调用aidl自动生成的java类。 2-4)客户端绑定服务端的service,调用aidl转化的类。 本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/2065985,如需转载请自行联系原作者

优秀的个人博客,低调大师

lvm相关命令学习

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 我的博客已迁移到xdoujiang.com请去那边和我交流 基础环境 1、当前版本 cat /etc/debian_version 7.8 2、安装包lvm2 apt-get install lvm2-y 一、将sdbsdcsdd三块分区加到卷组(hadoop),并创建5G的逻辑卷(hadoop1),PE默认 1、使用pvcreate命令将sdbsdcsdd分区创建成物理卷(pvcreate-initializeadiskorpartition for usebyLVM) pvcreate /dev/sdb /dev/sdc /dev/sdd Writingphysicalvolumedatatodisk "/dev/sdb" Physicalvolume "/dev/sdb" successfullycreated Writingphysicalvolumedatatodisk "/dev/sdc" Physicalvolume "/dev/sdc" successfullycreated Writingphysicalvolumedatatodisk "/dev/sdd" Physicalvolume "/dev/sdd" successfullycreated EXAMPLES Initializepartition #4onthethirdSCSIdiskandtheentirefifthSCSIdiskforlaterusebyLVM: pvcreate /dev/sdc4 /dev/sde 2、使用pvs或pvdisplay命令查看 1)pvs(pvs-reportinformationaboutphysicalvolumes) PVVGFmtAttrPSizePFree /dev/sdb lvm2a--10.00g10.00g /dev/sdc lvm2a--10.00g10.00g /dev/sdd lvm2a--10.00g10.00g 2)pvdisplay(pvdisplay-displayattributesofaphysicalvolume) "/dev/sdb" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdb VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUIDOkVC5O-SWOq-daXZ-BrNy-Hy83-G9Sm-d8bMT4 "/dev/sdc" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdc VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUID7vg9eM-pIRR-Ahi0-BNvn-A1pr-WQa0-hvdC9X "/dev/sdd" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdd VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUIDMyPYTC-Vk4P-ltjL-SX6w-jK3V-422c-HACxOK 3、使用vgcreate命令创建hadoop卷组并将sdbsdcsdd加入到卷组里(vgcreate-createavolumegroup) vgcreatehadoop /dev/sdb /dev/sdc /dev/sdd Volumegroup "hadoop" successfullycreated 这里使用默认的PE4MB EXAMPLES Tocreateavolumegroupnamedtest_vgusingphysicalvolumes /dev/sdk1 ,and /dev/sdl1 withdefaultphysicalextentsizeof4MB: vgcreatetest_vg /dev/sdk1 /dev/sdl1 4、使用vgs或vgdisplay命令查看 1)vgs(vgs-reportinformationaboutvolume groups ) VG #PV#LV#SNAttrVSizeVFree hadoop300wz--n-29.99g29.99g 2)vgdisplay(vgdisplay-displayattributesofvolume groups ) ---Volumegroup--- VGNamehadoop SystemID Formatlvm2 MetadataAreas3 MetadataSequenceNo1 VGAccess read /write VGStatusresizable MAXLV0 CurLV0 OpenLV0 MaxPV0 CurPV3 ActPV3 VGSize29.99GiB PESize4.00MiB TotalPE7677 AllocPE/Size0/0 FreePE/Size7677/29.99GiB VGUUID9BpObQ-0qNt-7MRM-cJ4Y-aMyE-5ZEd-GoSi9N 5、使用lvcreate命令创建逻辑卷为hadoop1大小是5G(lvcreatecreatesanewlogicalvolume in avolumegroup) lvcreate-L5G-nhadoop1hadoop Logicalvolume "hadoop1" created -L,--sizeLogicalVolumeSize[bBsSkKmMgGtTpPeE] Givesthesizetoallocate for thenewlogicalvolume.AsizesuffixofK for kilobytes,M for megabytes, G for gigabytes,T for terabytes,P for petabytesorE for exabytesisoptional.Defaultunitismegabytes. 6、使用lvs或lvdisplay命令查看 1)lvs(lvs-reportinformationaboutlogicalvolumes) LVVGAttrLSizePoolOriginData%MoveLogCopy%Convert hadoop1hadoop-wi-a---5.00g 2)lvdisplay(lvdisplay-displayattributesofalogicalvolume) ---Logicalvolume--- LVPath /dev/hadoop/hadoop1 LVNamehadoop1 VGNamehadoop LVUUIDy8CHyc-G7du-h9jZ-XV4T-dvZC-bzv1-NdsbS0 LVWriteAccess read /write LVCreationhost, time debian,2015-06-1223:51:09-0400 LVStatusavailable #open0 LVSize5.00GiB CurrentLE1280 Segments1 Allocationinherit Readaheadsectorsauto -currently set to256 Blockdevice254:0 7、将 /dev/hadoop/hadoop1 格式化成ext4 mkfs.ext4 /dev/hadoop/hadoop1 8、写进 /etc/fatab 中并挂载 /dev/mapper/hadoop-hadoop1 /hadoop ext4defaults00 mount -a 9、查看是否挂载成功 df -Th FilesystemTypeSizeUsedAvailUse%Mountedon rootfsrootfs9.2G1.7G7.1G19%/ udevdevtmpfs10M010M0% /dev tmpfstmpfs99M256K99M1% /run /dev/disk/by-uuid/f730250f-21de-45dd-a3e7-6c5d74508f4b ext49.2G1.7G7.1G19%/ tmpfstmpfs5.0M05.0M0% /run/lock tmpfstmpfs961M0961M0% /run/shm /dev/sda5 ext417G180M16G2% /opt /dev/mapper/hadoop-hadoop1 ext45.0G138M4.6G3% /hadoop 二、将 /dev/mapper/hadoop-hadoop1 逻辑卷夸大到40G并挂载 1、使用pvcreate命令将sde分区创建成物理卷 pvcreate /dev/sde Writingphysicalvolumedatatodisk "/dev/sde" Physicalvolume "/dev/sde" successfullycreated 2、使用vgextend命令将sde加入到卷组hadoop(vgextend-addphysicalvolumestoavolumegroup) vgextendhadoop /dev/sde Volumegroup "hadoop" successfullyextended Examples vgextendvg00 /dev/sda4 /dev/sdn1 triestoextendtheexistingvolumegroupvg00 bythenewphysicalvolumes(seepvcreate(8)) /dev/sdn1 and /dev/sda4 . 3、先查看下卷组有多少PE vgdisplay ---Volumegroup--- VGNamehadoop SystemID Formatlvm2 MetadataAreas4 MetadataSequenceNo8 VGAccess read /write VGStatusresizable MAXLV0 CurLV1 OpenLV1 MaxPV0 CurPV4 ActPV4 VGSize39.98GiB PESize4.00MiB TotalPE10236 AllocPE/Size8956/34.98GiB FreePE/Size1280/5.00GiB VGUUID9BpObQ-0qNt-7MRM-cJ4Y-aMyE-5ZEd-GoSi9N 一共有10236个PE 4、使用lvextend命令将现有逻辑卷为hadoop1增大到40G(lvextend-extendthesizeofalogicalvolume) lvextend-l10236 /dev/hadoop/hadoop1 Extendinglogicalvolumehadoop1to39.98GiB Logicalvolumehadoop1successfullyresized -l,--extents[+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] Extendor set thelogicalvolumesize in units oflogicalextents. 5、使用resize2fs命令扩大文件系统(resize2fs-ext2 /ext3/ext4 file systemresizer) resize2fs /dev/hadoop/hadoop1 resize2fs1.42.5(29-Jul-2012) Filesystemat /dev/hadoop/hadoop1 ismountedon /hadoop ;on-lineresizingrequired old_desc_blocks=1,new_desc_blocks=3 Performinganon-lineresizeof /dev/hadoop/hadoop1 to10481664(4k)blocks. Thefilesystemon /dev/hadoop/hadoop1 isnow10481664blockslong. 6、最后检查下是否扩大到40G了 df -Th FilesystemTypeSizeUsedAvailUse%Mountedon rootfsrootfs9.2G1.7G7.1G19%/ udevdevtmpfs10M010M0% /dev tmpfstmpfs99M260K99M1% /run /dev/disk/by-uuid/f730250f-21de-45dd-a3e7-6c5d74508f4b ext49.2G1.7G7.1G19%/ tmpfstmpfs5.0M05.0M0% /run/lock tmpfstmpfs961M0961M0% /run/shm /dev/sda5 ext417G180M16G2% /opt /dev/mapper/hadoop-hadoop1 ext440G143M38G1% /hadoop 三、参考文章 https: //wiki .archlinux.org /index .php /LVM_ %28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 本文转自 xdoujiang 51CTO博客,原文链接:http://blog.51cto.com/7938217/1661595,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop学习笔记一

第一个hands-on入门程序: 参考 http://blog.csdn.net/sim_szm/article/details/12578055 搭建环境并跑WordCount程序,区别是我安装的是最新的hadoop版本0.23.11,JDK我使用的是Sun JDK,Linux使用的是国产的Kylin。 问题一:Error: JAVA_HOME is not set and could not be found. 解决方案: /etc/profile 文件中export JAVA_HOME ${HADOOP_HOME}/libexec/hadoop-config.sh 显式export JAVA_HOME ${HADOOP_HOME}/etc/hadoop/yarn-env.sh显式export JAVA_HOME 问题二:NameNode 没有启动 解决方案: 删除core-site.xml文件中配置的tmp目录 运行 hadoop namenode -format 命令 再运行sbin目录下的start-dfs.sh脚步启动NameNode和datanode 问题三:为何需要SSH 解决方案:Hadoop集 群成员的通讯机制都是使用SSH,即使是单机环境,内部脚本也会运行 ssh localhost进行处理,所以安装SSH是必须的。 本文转自sarchitect 51CTO博客,原文链接:http://blog.51cto.com/stevex/1535193,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS学习——ViewController(六)

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图。 iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。 按结构可以对iOS的所有ViewController分成两类: 1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。 2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。 ViewController使用 UIViewController可以使用两种方式创建,1、xib方式,2、代码方式 1)xib方式 Command+N 新建文件,选Cocoa Touch UIViewController subclass,SubClass of UIViewController,勾选with XIB for user interface。定义ViewController名字是MainViewController,最终生成MainViewController.h MainViewController.m MainViewController.xib三个文件。在AppDelegate.m文件的 didFinishLaunchingWithOptions方法中加载xib文件。 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil]; self.window.rootViewController=vc; [self.window makeKeyAndVisible]; return YES; 加载xib文件后,在xib文件拖拽几个控件可看到效果。 2)代码创建 Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代码创建view。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; // MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil]; // self.window.rootViewController=vc; RootViewController *rc=[[RootViewController alloc] init]; self.window.rootViewController=rc; [self.window makeKeyAndVisible]; return YES; } 创建View - (void)loadView{ [super loadView]; UIView *view=[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; view.alpha=0.5; view.backgroundColor=[UIColor cyanColor]; self.view=view; } ViewController的生命周期 前面写了iOS应用程序的生命周期,这里会写到ViewController的生命周期,这个更像Android的Activity的生命周期(见文章最后的图)。ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。 1)init方法 初始化ViewController本身。 2)loadView方法 当view需要被展示而它却是nil时,viewController会调用该方法。 如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。 3)viewDidLoad方法 执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。 4)viewDidUnload方法 当系统内存吃紧的时候会调用该方法,内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。 在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。 在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。 一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行。 5)dealloc 释放其他资源或内存。 viewController的生命周期图 ViewController加载view过程,见下图(loadView) 1)loadView ViewController卸载View过程见(unLoadView) 2)unLoadView /** * @author 张兴业 * http://blog.csdn.net/xyz_lmn * iOS入门群: 83702688 * android开发进阶群: 241395671 * 我的新浪微博: @张兴业TBOW */ 参考: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1 http://xcodev.com/341.html http://iostrack.com/post/2012-07-20/40029700941 Activity生命周期 本文转自xyz_lmn51CTO博客,原文链接: http://blog.51cto.com/xyzlmn/1230733,如需转载请自行联系原作者

优秀的个人博客,低调大师

开始python学习

今晚折腾了半天,终于在mac上把python开发ide搞好了。 本来是打算使用eclipse+pydev的,结果在eclipse marketplace里面搜索到得pydev插件无法安装,一直是提示网络连接错误。 后面找到Komodo edit,打开之后在界面上没有找到直观的运行和调试python的菜单选项,也放弃了。 接下来,安装了pythonCharm,界面有点类似android studio和eclipse,所以很快就找到了运行和调试菜单项。 所以,就选它了,O(∩_∩)O~。 本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/p/4449132.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册