一 : DIY入门必读:浅谈板卡系统带宽
二 : "浅谈Android"第一篇:Android系统简介
近来,看了一本书,名字叫做《第一行代码》,是CSDN一名博主写的,一本Android入门级的书,比较适合新手。(www.61k.com]看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的学习,知识杂乱无章,没有条理和总结。因此,想想我是否可以尝试的写些文章,来对自己之前学过的知识和工作经验进行归纳和整理,整理出自己的知识体系呢。所以,就有这篇文章的诞生,如果其中理解不到位的地方,望园里的兄弟姐妹给予指出错误,我们共同讨论,一起进步。我一直相信一句话,好东西要分享,不断地分享,直至温暖整个世界。
目前安排是一周一篇文章,因为从前期每篇文章主题的思考,素材收集,代码验证,思维导图设计,是很耗时间的,如果碰到问题没解决的话,就顺延到下一周,宁愿速度慢点,但要保证写出来的东西是原创的,对人有帮助才行。
这篇的主题是”什么是Android“,关于Android的内容,从以下几点来介绍:
1,Android系统架构
有图有真相:这是Android系统架构图,够一目了然了吧,Android大致可以分为四层架构,五块区域。
1.1,Linux内核层
Android系统是基于Linux 2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi驱动、电源管理等。
1.2,系统运行层
这一层通过一些C/C++库来为Android系统提供了主要的特性支持,比如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供浏览器内核的支持等。同时,在这一层还有Android运行时库,它提供了一些核心库,能允许开发者使用Java来编写Android应用。其中,关键是Dalvik虚拟机,它使得我们每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例,相比Java虚拟机(JVM),Dalvik是专门为移动设备定制的,它对手机内存、CPU性能有限等情况做了优化处理。
1.3,应用框架层
这一层主要提供了构建应用时可能用到的API,Android自带的一些核心应用程序就是使用这些API完成的,开发者可以通过使用这些API构建自己的应用程序。比如有活动管理器、View系统。内容提供器、通知管理器等。
1.4,应用层
所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者我们从Google Play上下载的程序,包括我们自己开发的应用程序。
2,Android已发布的版本
有图有真相:
从图中我们能看到,Android最新版已经5.0了,名叫Android 5.0 Lollipop,中文简称为”棒棒糖“。自从2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本,随后的几年,谷歌以惊人的速度不断更新发布Android系统,2.1、2.2、2.3系统推出使Android占据了大量的市场。2011年2月,谷歌发布了Android 3.0系统,这个系统版本是专门为平板电脑设计的,但也是Android为数不多比较失败的版本,推出之后一直不见什么起色,市场份额也少的可怜。不过很快,在同年10月,谷歌又发布了Android 4.0系统,这个系统版本不再对手机和平板进行差异化区分,既可以应用在手机上也可以应用在平板上,除此之外,还引入了不少特性。
那么Android目前市场使用情况如何呢?如图所示:
图片来源自维基百科
自2009年12月起的Android用户版本分析。直至2014年5月,Android的Jelly Bean为最被广泛使用的版本,在所有用户中佔了61%。
3,Android应用特色
Android主要有什么特色呢,有以下几个方面来体现:
3.1,四大组件
什么是四大组件?分别是活动(Activity)、服务(Service)、广播接收器(BroadCast Receiver)和内容提供器(Content Provider)。其中活动(Activity)就是Android应用程序中看得东西,也是用户打开一个应用程序的门面,并且与用户交互的界面,比较高调。服务(Service),则比较低调了,一直在后台默默的付出,即使用户退出了,服务仍然是可以继续运行的。广播接收器(BroadCast Receiver),则允许你的应用接收来自各处的广播消息,比如电话、短信等,可以根据广播名称不同,做相应的操作处理,当然了, 除了可以接受别人发来的广播消息,自身也可以向外发出广播消息,自产自销。内容提供器(Content Provider),则为应用程序之间共享数据提供了可能,比如你想要读取系统电话本中的联系人,就需要通过内容提供器来实现。
3.2,丰富的系统控件
Android系统为开发者提供了丰富的系统控件,我们可以编写漂亮的界面,也可以通过扩展系统控件,自定义控件来满足自我的需求,常见控件有:TextView、Buttion、EditText、一些布局控件等。
3.3,持久化技术
Android系统还自带了SQLite数据库,SQLite数据库是一种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。
3.4,地理位置定位
移动设备和PC相比,地理位置定位是一大亮点,现在基本Android手机都内置了GPS,我们可以通过GPS,结合我们的创意,打造一款基于LBS的产品,是不是很酷的事情啊,再说,目前火热的LBS应用也不是空穴来风的,不过在天朝,因为可恶的GFW,只能用些本土化的地图API,比如百度地图、高德地图。要是哪天能用上大谷歌的地图,那才是高大上啊。
3.5,强大的多媒体
Android系统提供了丰富的多媒体服务,比如音乐、视频、录音、拍照、闹铃等,这一切都可以在程序中通过代码来进行控制,让你的应用变得更加丰富多彩。
3.6,传感器
Android手机中内置了多种传感器,比如加速传感器、方向传感器,这是移动设备的一大特点,我们可以灵活地使用这些传感器,可以做出很多在PC上无法实现的应用。比如“微信摇一摇"_你懂得,“搜歌摇一摇”等功能。
4,Android开发环境
开发环境搭建所需要的软件,配置等攻略,相信大家网上搜一搜,这类文章太多了。这里只强调重要几个工具:Android SDK、Eclipse、ADT。
4.1,Android SDK
Android SDK谷歌提供的Android开发工具包,在开发Android程序时,我们需要引用该工具包,里面包含了开发Android应用程序的API。
4.2,Eclipse
开发Java应用程序的神器,最好用IDE工具之一,特点是开源、超强的插件功能、可支持多种语言开发。当然除此之外,谷歌也推出了Android Studio,专门针对Android程序定制的,但因为Android Studio才刚推出不久,不太稳定,毕竟新工具问题还是比较多的,Eclipse被应用已经很成熟了,网上各种关于Eclipse疑难杂症的解决方案很多,相比Android Studio就比较少了。
4.3,ADT
ADT全称叫做"Android Development Tools",是谷歌提供的一个Eclipse插件,用于在Eclipse提供一个强大的、集成的Android开发环境。
5,Android程序结构
有图有真相:
从图中看是不是一目了然,那么接下来就一一讲解吧。
5.1,src
毫无疑问,src目录是放置我们所有Java代码的地方,它在这里的含义和普通Java项目下的src目录是完全一样的。
5.2,gen
这个目录里的内容都是自动生成的,主要有一个R.Java文件,你在项目中添加任何资源都会在其中生成一个相应的资源ID,这个文件永远不要手动去修改它。
5.3,assets
这个目录里主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。
5.4,bin
这个目录页不需要过多的关注,它主要包含了一些在编译时自动产生的文件。当然,会包括一个编译好的安装包,后缀为.apk的文件。
5.5,libs
如果你的项目中使用到了第三方的jar包,就需要把这些jar包放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
5.6,res
这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.Java中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
5.7,AndroidManifest.xml
这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件中注册。另外还可以在这个文件给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。
5.8,proguard-project.txt
在发布你的程序时候,有些apk文件容易被人反编译,所以此时这个文件就发挥作用了,用来混淆你的程序代码,让别人不那么容易看到源代码。
5.9,project.properties
指定了编译程序时候所用的SDK版本
6,Logcat工具
有图有真相:
日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要查看日志则必须要使用Logcat工具。
Android提供了一个日志工具类是Log,总共有个等级,级级递增。
6.1,Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android 日志里面级别最低的一种。
6.2,Log.d()
这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。
6.3,Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的那种。对应级别 info,比 debug 高一级。
6.4,Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。
6.5,Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别 error,比 warn 高一级。
小提醒:定制自己的日志工具
比如,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。
那该怎么办呢,难道要一行一行把所有打印日志的代码都删掉?显然这不是什么好点子,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。因此,最理想的情况是能够自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线了之后就把日志屏蔽掉。
那么我们可以自定义一个日志工具类,对Android原生的工具类封装下。
public class LogUtil { public static final int VERBOSE=1; public static final int DEBUG=2; public static final int INFO=3; public static final int WARN=4; public static final int ERROR=5; public static final int NOTHING=6; public static final int LEVEL=VERBOSE; //发布新版本时候 等级为6 public static void v(String tag,String msg){ if(LEVEL <=VERBOSE){ Log.v(tag, msg); } } public static void d(String tag,String msg){ if(LEVEL <=DEBUG){ Log.d(tag, msg); } } public static void i(String tag,String msg){ if(LEVEL <=INFO){ Log.i(tag, msg); } } public static void w(String tag,String msg){ if(LEVEL <=WARN){ Log.w(tag, msg); } } public static void e(String tag,String msg){ if(LEVEL <=ERROR){ Log.e(tag, msg); } } }
可以看到,我们在 LogUtil 中先是定义了 VERBOSE、 DEBUG、 INFO、 WARN、 ERROR、NOTHING 这六个整型常量,并且它们对应的值都是递增的。然后又定义了一个 LEVEL 常
量,可以将它的值指定为上面六个常量中的任意一个。接下来我们提供了 v()、 d()、 i()、 w()、 e()这五个自定义的日志方法,在其内部分别调用了 Log.v()、 Log.d()、 Log.i()、 Log.w()、 Log.e()这五个方法来打印日志,只不过在这些自定义的方法中我们都加入了一个 if判断,只有当 LEVEL 常量的值小于或等于对应日志级别值的时候,才会将日志打印出来。
这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通的日志工具一样使用 LogUtil,
比如打印一行 DEBUG 级别的日 志就可以这样写:LogUtil.d("TAG", "debug log");
打印一行 WARN 级别的日志就可以这样写:LogUtil. w("TAG", "warn log");
然后我们只需要修改 LEVEL 常量的值,就可以自由地控制日志的打印行为了。比如让LEVEL 等于 VERBOSE 就可以把所有的日志都打印出来,让 LEVEL 等于 WARN 就可以只打印警告以上级别的日志,让 LEVEL 等于 NOTHING 就可以把所有日志都屏蔽掉。使用了这种方法之后,刚才所说的那个问题就不复存在了,你只需要在开发阶段将LEVEL 指定成 VERBOSE,当项目正式上线的时候将 LEVEL 指定成 NOTHING 就可以了。
7,Hello World
好了,说了这么多,这些只是一些理论的东西,要想更深入的理解,必须要自己动手做Demo,我们可以去创建一个Hello World程序试试,用Eclipse+ADT帮我们创建的默认项目就是Hello World.
三 : 浅谈系统密码加密方式
前几天恰巧碰到不算是题目的题目吧,涉及到Win与Linux的系统密码存放问题。这里总结一下两个系统下密码加密保存方式。
Windows:
SAM文件一般存放在C:\Windows\System32\Config下,存在LM-Hash与NT-Hash两种加密方式。
Windows系统下的hash密码格式为:
用户名称:RID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE
:683020925C5D8569C23AA724774CE6CC:::
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
关于Windows下LM-Hash值生成原理:
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0×00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
“KGS!@#$%” -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
由于LM-Hash只能最大限制14位密码,安全性较差,NT-Hash应运而生。
假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0×00补足14字节
“123456″ -> 310032003300340035003600
从ASCII串转换成Unicode串时,使用little-endian序。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串”KGS!@#$%”。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
Linux:
Linux密码存放于shadow文件。假设取其中一条记录如下:
manifold:$1$UmP0IdhG$JwSobqdBKrgzY9GJafh.I1:14627:0:99999:7:::
manifold为账户名
$1代表md5加密
UmP0IdhG是salt
JwSobqdBKrgzY9GJafh.I1是使用MD5加密后的密码。
注意由于salt是不固定的,故同样的帐号对应HASH可以不同。
四 : 浅谈:织梦(DEDE)系统搬家终极攻略
各位朋友大家好,相信大家现在用DEDE的用户越来越多吧,DEDE很不错,尤其像我们这样的小站长,用起这个CMS来感觉特别方便,很人性的操作化和SEO,开源,方便修改等等都是它的一大特色,用的人多了,难免会有很多新问题,今天我就先教大家怎样把我们的DEDE程序搬家,就是换空间或换服务器,老鸟就飘过吧,照顾新手!!
第一 : 空间和空间之间搬家
其实空间和空间之间搬家时最方便的,大家掌握好我说的步骤,100%能成功搬家,首先大家进入DEDE后台,选择系统-数据库备份-全选-然后点开始,这里要看下你的数据库对应版本要和新空间的数据库版本一样才可以,不然会出现乱码。等一会就会提示所有数据备份完毕,根据你的数据库大小时间不一定,备份完后,大家打开你网站的FTP,看一下databackupdata目录中有SQL文件,名字就是今天的日期,这就是我们刚才备份的数据了,然后把这个文件夹的内容同时下载到本地,继续,把images,templets,uploads,plus这4个文件夹全部下载到本地。最后我们把新空间重新安装DEDE程序,要对应你的版本,安装好后,把这几个文件夹覆盖到根目录,进入后台,选择系统-数据库还原-数据还原,就会看到你的数据库信息,全选后点击开始还原数据,一会就完了,然后选择你的首页文件,更新首页就OK了,这样我们的空间搬家就完成了。
第二:后台无法备份数据库怎样搬家
由于种种原因,我们的后台进不去了,或者数据库无法备份,那么我应该怎么搬家那?首先我们用PHPMYADMIN进入SQL数据库,这个应该都会把,不会的话百度一下,选择你的数据库然后备份,导出到本地,然后把你原来空间的所有文件全部下载到你的新空间中,继续打data这个文件夹当中的common.inc.php这个文件,修改你的新空间数据库账户密码和IP,然后覆盖,这样就可以了,但是不适合菜鸟使用这种方法,除非真的没办法了,推荐第一种搬家方法,这一种方法多多少少可能有点小问题,我的网站就是昨天从空间搬到了VPS服务器,用这种方法出现了后台无法更新,不过很快解决了,是权限的问题。
目前搬家的方法就是这两种,其实还有高手有更简单的方法,希望和大家一起分享出来,本文转自于网赚先生 转载请注明出处!
五 : 浅谈雅虎网站统计系统
现在雅虎的网站统计系统变得越来越好用了,因此我不得不说说雅虎的网站统计系统,让大家了解雅虎的网站统计系统。一般国内的网站统计系统主要有51yes,中国站长统计系统、百度网站统计系统、ITSUN等网站统计系统。这些网站统计都有各自的特点我不一一描述了。我主要说的我主要用的雅虎的网站统计系统,雅虎统计系统是比国内的统计系统出来的晚些,但是如今雅虎的网站统计系统发展的很好。今天雅虎的统计系统又开发出来了新版本的,功能也变多了许多。用一句话说:“雅虎变得越来越厚道了“。
我的站http://www.zzxiu.com用了后给大家简要介绍一下雅虎最新的网站系统有那些模块,哪些功能以及相应的介绍。
雅虎的站长工具主要有三大模块;定制搜素、站点管理器、雅虎统计。这里我主要介绍的是雅虎统计。
雅虎统计系统可以添加很多的网站,每一个网站的统计都是独立的互相不干扰。雅虎统计系统从表面上看主要有网站的名称、网站的详细数据、管理、获取代码、和删除。下面的就是PV、UV、IP。点击系统数据就会出现雅虎统计系统的真正的实用界面。
左面一栏的上面是综合报告,综合报告里面包括一下功能:最近访客、时段分析、每日分析、IP来源分析、搜索引擎分析、关键词分析、访问来源分析、详细来源分析、访问地区分析、被访主机分析、被访页面分析、访问入口分析、访问出口分析、客户端分析。这就是雅虎综合包括中14种网站统计功能。
综合报告下面的模块是雅虎统计系统今天刚出来的三大版块,我简要介绍一下,第一版块是网站信息查询,雅虎统计系统提供了Alexa全球排名查询和China Rank中国网站排名查询两大排名查询功能。
下面就是域名、IP、服务器信息查询,这些功能对于网站的地址和IP和服务器的管理有很大的帮助。
下面就是seo信息查询,seo信息查询主要包括搜索引擎收录查询、搜素引擎反向链接查询、网页关键字密度查询、网页信息查询。
Seo信息查询下面就是网站实用工具主要包括html特殊符合查询、蜘蛛模拟抓取、html/js代码转换、html/ubb代码转换、网站Header信息、MD5加密、网页源代码查看、火星文查询、网页颜色代码选择器。
最新的功能下面就是一些报警查询、留言查看、获取代码和管理。说完了左面的雅虎统计系统的功能在简要说一下右面,右面主要是网站流量走势图和网站信息和网站流量的具体的统计报告。
好了雅虎统计系统我已经介绍完了,你现在对雅虎统计系统又了解了些了吧!想要的话赶紧去雅虎官方站去申请吧!
本文标题:浅谈神经系统解剖-DIY入门必读:浅谈板卡系统带宽61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1