首页 文章 精选 留言 我的

精选列表

搜索[知识库管理],共10000篇文章
优秀的个人博客,低调大师

Tomcat添加管理员role

最近朋友问我怎么在Tomcat里面使用 admin 登录,一般情况下登录后是提示xxx的,经过百度后,好不容易才找到答案: 原来添加一个role为admin:<role rolename="admin"/> 然后设置用户admin为admin role,当然你也可以设置用户是admin role: <?xmlversion='1.0'encoding='utf-8'?> <tomcat-users> <rolerolename="manager"/> <rolerolename="admin"/> <userusername="user"password="123456"roles="admin,manager"/> <userusername="admin"password="admin"roles="admin,manager"/> </tomcat-users> 本文转自 Icansoft 51CTO博客,原文链接: http://blog.51cto.com/android/56376

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

droid用户界面-布局管理Layout

在 Android 中各种布局的应用,以及菜单效果的实现 各种布局方式的应用,FrameLayout, LinearLayout, TableLayout, AbsoluteLayout, RelativeLayout 为指定元素配置上下文菜单,为应用程序配置选项菜单,以及多级菜单的实现 各种布局方式的演示res/layout/main.xml <?xmlversion="1.0"encoding="utf-8"?> <!-- layout_width-宽。fill_parent:宽度跟着父元素走;wrap_content:宽度跟着本身的内容走;直接指定一个px值来设置宽 layout_height-高。fill_parent:高度跟着父元素走;wrap_content:高度跟着本身的内容走;直接指定一个px值来设置高 --> <!-- LinearLayout-线形布局。 orientation-容器内元素的排列方式。vertical:子元素们垂直排列;horizontal:子元素们水平排列 gravity-内容的排列形式。常用的有top,bottom,left,right,center等,详见文档 --> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:gravity="right" android:layout_width="fill_parent"android:layout_height="fill_parent"> <!-- FrameLayout-层叠式布局。以左上角为起点,将FrameLayout内的元素一层覆盖一层地显示 --> <FrameLayoutandroid:layout_height="wrap_content" android:layout_width="fill_parent"> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="FrameLayout"> </TextView> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="FrameLayout"> </TextView> </FrameLayout> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="@string/hello"/> <!-- TableLayout-表格式布局。 TableRow-表格内的行,行内每一个元素算作一列 collapseColumns-设置TableLayout内的TableRow中需要隐藏的列的列索引,多个用“,”隔开 stretchColumns-设置TableLayout内的TableRow中需要拉伸(该列会拉伸到所有可用空间)的列的列索引,多个用“,”隔开 shrinkColumns-设置TableLayout内的TableRow中需要收缩(为了使其他列不会被挤到屏幕外,此列会自动收缩)的列的列索引,多个用“,”隔开 --> <TableLayoutandroid:id="@+id/TableLayout01" android:layout_width="fill_parent"android:layout_height="wrap_content" android:collapseColumns="1"> <TableRowandroid:id="@+id/TableRow01"android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextViewandroid:layout_width="wrap_content" android:layout_weight="1"android:layout_height="wrap_content" android:text="行1列1"/> <TextViewandroid:layout_width="wrap_content" android:layout_weight="1"android:layout_height="wrap_content" android:text="行1列2"/> <TextViewandroid:layout_width="wrap_content" android:layout_weight="1"android:layout_height="wrap_content" android:text="行1列3"/> </TableRow> <TableRowandroid:id="@+id/TableRow01"android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="行2列1"/> </TableRow> </TableLayout> <!-- AbsoluteLayout-绝对定位布局。 layout_x-x坐标。以左上角为顶点 layout_y-y坐标。以左上角为顶点 --> <AbsoluteLayoutandroid:layout_height="wrap_content" android:layout_width="fill_parent"> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="AbsoluteLayout" android:layout_x="100px" android:layout_y="100px"/> </AbsoluteLayout> <!-- RelativeLayout-相对定位布局。 layout_centerInParent-将当前元素放置到其容器内的水平方向和垂直方向的中央位置(类似的属性有:layout_centerHorizontal,layout_alignParentLeft等) layout_marginLeft-设置当前元素相对于其容器的左侧边缘的距离 layout_below-放置当前元素到指定的元素的下面 layout_alignRight-当前元素与指定的元素右对齐 --> <RelativeLayoutandroid:id="@+id/RelativeLayout01" android:layout_width="fill_parent"android:layout_height="fill_parent"> <TextViewandroid:layout_width="wrap_content"android:id="@+id/abc" android:layout_height="wrap_content"android:text="centerInParent=true" android:layout_centerInParent="true"/> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="marginLeft=20px" android:layout_marginLeft="20px"/> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:text="xxx" android:layout_below="@id/abc"android:layout_alignRight="@id/abc"/> </RelativeLayout> </LinearLayout> res/values/strings.xml <?xmlversion="1.0"encoding="utf-8"?> <resources> <stringname="hello">HelloLayout</string> <stringname="app_name">webabcd_layout</string> </resources> Main.java packagecom.webabcd.layout; importandroid.app.Activity; importandroid.os.Bundle; publicclassMainextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080699

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

docker启动远程管理接口

默认情况下 Docker 的守护进程启动会生成一个 socket (/var/run/docker.sock)进程通信文件,而并没有监听端口,只能在本机操作 Docker。如果想在其它地方操作 Docker 主机,就需要让 Docker 主机监听一个端口号,这样可以通过端口号就能实现远程操作。Docker 提供了 Python API Client,所以可以直接用Python直接和 Docker 守护进程通信。 一、在 Docker 主机上安装 docker-py pip install docker-py 二、修改docker配置文件/etc/sysconfig/docker,添加以下参数,启用监听端口 other_args='--insecure-registry 10.44.86.222:5000 --graph=/data/docker/images --registry-mirror=https://10.44.86.222:5000 -H tcp://10.44.86.222:9527 -H unix:///var/run/docker.sock' 三、测试连接 [root@ali-sz01-qgz-prd-048 /root]#python Python 2.7.8 (default, Feb 2 2016, 10:07:49) [GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import docker >>> client = docker.Client(base_url='tcp://10.44.86.222:9527',version='1.21',timeout=5) >>> print(client.images()) [{u'Created': 1454489329, u'Labels': {}, u'VirtualSize': 760166676, u'ParentId': u'4378e9fcb6924ee8b3a21c61dd7e7e2bb95b159b73d61cbc73059af108fe1efe', u'RepoTags': [u'tomcat-basess:latest'], u'RepoDigests': [], u'Id': u'2898c52a54b4a6fb0dd83ce1a18ae17e7504b0d1206540ba7529cedc363d51b9', u'Size': 0}, {u'Created': 1454489177, u'Labels': {}, u'VirtualSize': 760166676, u'ParentId': u'4378e9fcb6924ee8b3a21c61dd7e7e2bb95b159b73d61cbc73059af108fe1efe', u'RepoTags': [u'tomcat-bases:latest'], u'RepoDigests': [], u'Id': u'a0793529d2eb91e6eba33fcc2b5f6831252d30a3647a217a4088a0f0ae401491', u'Size': 0}, {u'Created': 1454488647, u'Labels': {}, u'VirtualSize': 760166676, u'ParentId': u'4378e9fcb6924ee8b3a21c61dd7e7e2bb95b159b73d61cbc73059af108fe1efe', u'RepoTags': [u'tomcat-base:latest'], u'RepoDigests': [], u'Id': u'c3040687f5b468c25247f497fadefce0ab208bbc5bb7743a68d5b94db0462ede', u'Size': 0}, {u'Created': 1454470181, u'Labels': None, u'VirtualSize': 381670700, u'ParentId': u'', u'RepoTags': [u'centos6-base:latest', u'10.44.86.222:5000/centos6-base:latest'], u'RepoDigests': [], u'Id': u'61520f109a13674ea1a0cfd8750e6b52552a4bcce6d3b30ef9ea549a451366c5', u'Size': 381670700}, {u'Created': 1454399313, u'Labels': None, u'VirtualSize': 381670724, u'ParentId': u'', u'RepoTags': [u'10.44.86.222:5000/centos6.7-base:latest'], u'RepoDigests': [], u'Id': u'0d58c43c95548fa41f7b64c3756f61616da129ee8cd94bc7ba8fe7a60f064f1b', u'Size': 381670724}, {u'Created': 1453844265, u'Labels': None, u'VirtualSize': 422820953, u'ParentId': u'4b0669413b8f2e10c5b06c5386713d2ccfde1b0edb05cd76504d7b9f46b0e775', u'RepoTags': [u'registry:latest'], u'RepoDigests': [], u'Id': u'07d93e41c370ee6d181a969117b4e0fefd9554659159ecc156e6d2f092ab6f44', u'Size': 0}] >>> 四、版本对应错误解决方案 如果客户端版本与服务端版本对应不上,报以下错误,可以通过升级docker方式解决 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/python/lib/python2.7/site-packages/docker/api/container.py", line 68, in containers res = self._result(self._get(u, params=params), True) File "/usr/local/python/lib/python2.7/site-packages/docker/client.py", line 146, in _result self._raise_for_status(response) File "/usr/local/python/lib/python2.7/site-packages/docker/client.py", line 142, in _raise_for_status raise errors.APIError(e, response, explanation=explanation) docker.errors.APIError: 400 Client Error: Bad Request ("client is newer than server (client API version: 1.21, server API version: 1.19)") 升级方法: 1、下载docker最近稳定版 curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 2、停止docker服务并备份文件 service docker stop mv /usr/bin/docker /usr/bin/docker_bak 3、升级docker mv docker-1.9.1 /usr/bin/docker chmod +x /usr/bin/docker service docker start 4、查看最新版本 docker -v 本文转自aaron428 51CTO博客,原文链接:http://blog.51cto.com/aaronsa/1741088,如需转载请自行联系原作者

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

说说iOS与内存管理(中)

0. 内存工具 针对iOS开发,我们所能使用的内存排查工具选择其实并不算特别多。最主要的调试工具就是Instruments。然而,如果仔细探查细节,Instruments还是集成了很多不错的调试模板/Library的。 本文针对如下几类应用场景,对通用的调试方法做基本介绍: 最基本最常用的内存问题场景——内存泄露、过度释放 malloc相关的堆内存分配问题排查相关工具 其它内存工具 1. 内存泄露与过度释放 我们应该都知道,iOS开发过程中,使用Objective-C分配的堆内存都是通过引用计数来做保留和释放的。一块内存初始分配,引用计数为1,此后每新增一个强引用,引用计数增加1;释放正好相反,每一次release,引用计数减1,直到为0,对象所用内存被真正free掉,以被再次复用。然而,实际开发当中,总有一些原因导致引用计数无法按正常逻辑减少到0,或者减少到0之后仍然被调用release,前者是内存泄露,后者则是过度释放。 当内存泄露发生时,运行的App不会直接第发生明显问题,但废弃内存得不到回收,在长时间持续运行后,App进程会由于可用内存不断变低而被kill或带来其它隐患。 避免内存泄露,首要是有良好的代码习惯,避免循环引用、会用weak,其次可以通过Analyze来进行静态代码检查,以发现在语法上显而易见的内存泄露问题。但更多时候,内存泄露是运行时的问题,这时可用Instruments中的Allocation和Leaks来不断重复操作App,发现和定位内存泄露点。 当运行时发生显示内存泄露时,Leaks会在时间轴上标出红色指示线,同时在Instruments的下方会列出调用细节,结合系统提供的malloc历史,其中包含引用计数变化情况,以及调用栈可以很直接地找到泄露原因。 同时对于一些“隐式”的情况,需要反复操作,同时观察Allocation中只增不减,一直创建新对象而不释放老对象的情况。 过度释放,是对同一个对象释放了过多的次数,其实当引用计数降到0时,对象占用的内存已经被释放掉,此时指向原对象的指针就成了“悬垂指针”,如若再对其进行任何方法的调用,(原则上)都会直接crash(然而由于某些特殊的情况,不会马上crash)。 对于这种问题,可以直接使用Zombie,当过度释放发生时会立即停在发生问题的位置,同时结合内存分配释放历史和调用栈,可以发现问题。 至于上文提到的不会crash的原因,其实有很多,比如: 对象内存释放时,所用内存并没有完全被擦除,仍有旧对象部分数据可用 原内存位置被写入同类或同样结构的数据 2. malloc库提供的相关工具 上一段提到,对象释放时,所用内存并没有完全被擦除,仍有旧对象部分数据可用,如果不使用Zombie调试,App可能不会直接crash。对付这种情况,其实很简单,可以在对象内存释放时写入无意义数据,如0×55,0xaa等,而系统已经帮我们做了这个工具,那就是Scribble,在Xcode的Edit Scheme里,Diagnostics Tab下勾选Enable Scribble。 Scribble其实是malloc库(libsystem_malloc.dylib)自身提供的调试方案,除了Scribble,malloc还提供了很多其它的调试工具/方案,在Diagnostics Tab下你应该都看到了。其实,malloc可用的工具还不止这些,通过环境变量至少还可以添加如下调试参数: MallocLogFile MallocGuardEdges MallocDoNotProtectPrelude MallocDoNotProtectPostlude StackLogging StackLoggingNoCompact MallocCorruptionAbort MallocNanoZone MallocCheckHeap 其中,有几个参数是和记录分配历史的日志有关的。 除此之外,Xcode里还提供了Guard malloc,这个是等同于默认malloc库功能的另外一个调试库,为了定位大内存越界访问问题,不过只能在模拟器上使用(个人分析是因为真机根本承受不起保护页内存消耗)。 对以上参数的实现细节感兴趣的,可以参看苹果开放出来的malloc源码。 3. 其它 下面我还想对Instruments里的三样东西做简要介绍: Allocation Activity Monitor VM Tracker Allocation针对堆内存及匿名映射的情况提供了详细的数据,包括某类对象有多少个,对象的具体地址,占用多大内存等。通过Allocation,可以对我们开发中实际接触到的内存有非常全面的把握。 Activity Monitor则从系统的层面,对主要进程的CPU、内存、网络等数据做分析。从内存方面看,我们可以知道占用系统内存最大的5个App,它提供的数据包含了实际物理内存和虚拟内存部分。 VM Tracker则可以告诉我们哪些部分是Dirty的,Dirty的数据系统不会直接清理掉,因为这些数据是被写过的,无法通过外部存储直接生成,只能维持在内存当中。此外,通过VM Tracker我们还可以看到Region Map,看到进程地址空间各部分的映射情况。 除了上面提到的这些,对于诡异的内存问题,我们可以对Xcode7中的Address Sanitizer期待和试用下,也许它真得能帮我们解决好多问题! 本文转自ljianbing51CTO博客,原文链接: http://blog.51cto.com/ljianbing/1865151,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册