JS格式化日期真是件淡疼的事。
网上转了半天终于发现有一个挺不错的函数。贴上来做个笔记。
/** * 时间对象的格式化 */ Date.prototype.format = function(format) { /* * format="yyyy-MM-dd hh:mm:ss"; */ var o = { "M+" : this.getMonth() + 1, "d+" : this.getDate(), "h+" : this.getHours(), "m+" : this.getMinutes(), "s+" : this.getSeconds(), "q+" : Math.floor((this.getMonth() + 3) / 3), "S" : this.getMilliseconds() } if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + "
田海立@CSDN
2012-8-20
本文从开发AppWidgetProvider角度出发,看一个AppWidgetPrvodier在整个AppWidget体系中所扮演的角色。分析了AppWidgetProvider如何被AppWidget系统所识别;AppWidgetProvider何时/如何通过RemoteViews提供并更新数据;如何响应通过RemoteViews提供的PendingIntent的按钮点击操作。
因为一般应用开发者并不关注AppWidget其他部分(比如,AppWidgetHost,或AppWidget内部组件)的开发,所以一般就直接把AppWidgetProvider开发称为“AppWidget开发”。
一、实现一个AppWidgetProvider 要实现一个AppWidgetProvider,需要:
实现AppWidgetProvider的子类,并至少override onUpdate()方法[非必须,但是如果不这样做,该AppWidgetProvider就没有提供任何内容,也就不是AppWidgetProvider了];在AndroidManifest.xml中,声明上述的AppWidgetProvider的子类是一个Receiver,并且:该Receiver的intent-filter的Action必须包含“android.appwidget.action.APPWIDGET_UPDATE”;该Receiver的meta-data为“android.appwidget.provider”,并用一个xml文件来描述布局属性。 在2.2的xml文件中描述布局属性的节点名称必须为“appwidget-provider”。 以上几点皆是AppWidget系统判断是否是AppWidgetProvider的标志。后面本文的3.2中详述是如何被检索并加入到系统中的。
二、AppWidgetProvider类分析 AppWidgetProvider是一个BroadcastReceiver,必须在AndroidManifest.xml中声明该Receiver,并接收“android.appwidget.action.APPWIDGET_UPDATE”。
类AppWidgetProvider的实现是一个模板模式:
图一、AppWidgetProvider
在AppWidgetProvider的onReceiver()实现中已经对接收到的ActionAppWidgetManager.ACTION_APPWIDGET_UPDATE / AppWidgetManager.ACTION_APPWIDGET_DELETED/ AppWidgetManager.ACTION_APPWIDGET_ENABLED以及AppWidgetManager.ACTION_APPWIDGET_DISABLED做了处理,分别执行onUpdate()/ onDeleted() / onEnabled() / onDisabled()。
所以,AppWidgetProvider的实现类,要overrideonReceive(),以及onXXX()[注:至少要实现onUpdate(),在这里AppWidgetProvider通过RemoteViews提供内容给AppWidgetHost,否则,所谓的AppWidgetProvider什么也没提供]。
而在onReceive()的开始处就要执行super.onReceive()让AppWidgetProvider来分发AppWidgetProvider所要处理的上述广播消息。
AppWidgetProvider处理AppWidget中的广播:
onUpdate() 处理AppWidgetManager.ACTION_APPWIDGET_UPDATE广播。该广播在需要AppWidgetProvider提供RemoteViews数据时,由AppWidgetService.sendUpdateIntentLocked()发出。onDeleted() 处理AppWidgetManager.ACTION_APPWIDGET_DELETED广播。该广播在有该AppWidgetProvider的实例被删除时,由AppWidgetService.deleteAppWidgetLocked()发出。onEnabled() 处理AppWidgetManager.ACTION_APPWIDGET_ENABLED广播。该广播在该AppWidgetProvider被实例化时,由AppWidgetService.sendEnableIntentLocked()发出。onDisabled() 处理AppWidgetManager.ACTION_APPWIDGET_DISABLED广播。该广播在该AppWidgetProvider的所有实例中的最后一个实例被删除时,由AppWidgetService.deleteAppWidgetLocked()发出。 一般地,AppWidgetProvider必须处理onUpdate();onEnabled()和onDisabled()最好也要处理;onDeleted()可以不处理。
三、AppWidgetProvider的如何被系统识别 3.1 AppWidgetProvider中配置AndroidManifest.xml Android中“电量控制”这个AppWidget是由Settings中的SettingsAppWidgetProvider实现的,先来看它的AndroidManifest.xml。
下面是Settings中关于SettingsAppWidgetProvider这个AppWidgetProvider的描述信息:
<receiver android:name=".widget.SettingsAppWidgetProvider" android:label="@string/gadget_title"android:exported="true"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" /> <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" /> <action android:name="android.location.PROVIDERS_CHANGED"/> <action android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" /> </intent-filter> <meta-data android:name="android.appwidget.provider"android:resource="@xml/appwidget_info" /> </receiver> 这其中满足一中的1&2的要求,另外,这个AppWidget要处理设置Wifi、Bluetooth、GPS、数据同步和亮度,所以要处理这些相应的设置项变化时的广播通知。
对3这点,还要要看res/xml/appwidget_info.xml文件
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dip" android:minHeight="72dip" android:updatePeriodMillis="0" android:initialLayout="
一、从右向左移
代码
<marquee direction=left>需要移动的文字</marquee>
二、从左向右移
代码
<marquee direction=right>需要移动的文字</marquee>
三、一圈一圈绕着移动
代码
<marquee behavior=scroll>需要移动的文字</marquee>
四、只移动三次就停了
代码
<marquee loop=3 behavior=slide>需要移动的文字</marquee>
五、移一步,停一停
代码
<marquee scrolldelay=500 scrollamount=100>需要移动的文字</marquee>
六、左右来回移动
代码
<marquee behavior=alternate>需要移动的文字</marquee>
七、忽隐忽现移动
代码
<marquee behavior="alternate"><marquee width="150" direction=right>需要移动的文字</marquee>
八、从下向上移动
代码
<marquee direction=up><div align="center">需要移动的文字</div></marquee>
九 、从上向下移动
代码
<marquee direction=down><div align="center">需要移动的文字</div></marquee>
十、垂直往复移动
代码
<marquee direction=up behavior=alternate><div align="center">需要移动的文字</font></div></marquee>
十一、从左上向右下移动
代码
<marquee direction=right><marquee width=216 direction=down>需要移动的文字</marquee>
十二、 从右上向左下移动
代码
<marquee direction=left><marquee direction=down>需要移动的文字</marquee>
十三、从左下向右上移动
代码
<marquee direction=right><marquee direction=up>需要移动的文字</marquee>
十四、从右下向左上移动
代码
<marquee direction=left><marquee direction=up>需要移动的文字</marquee>
一、<form>标签:创建表单。 作用:存放创建的任何表单控件(文本输入框、下拉框、复选框、提交按钮等),也可以包含其他的html元素。
但是任何<form>元素都不包含其他<form>元素。
<form>元素也可以附带所有的通用属性、UI事件属性。
提交: 表单提交常用一个提交按钮,当然,点击Enter键也会具有类似于单击该按钮的效果。
当用户填好一个表单后,数据以“名/值”对的形式发送给服务器,名字对应于表单控件的名称,值是用户输入的内容。
常用属性:
1、action属性:表明提交表单时将如何处理数据。
通常它值是Web服务器中的一个页面或者一个程序(以http://开头的URL),当用户单击提交按钮后,该页面或程将
接收表单中的信息。
2、method属性:说明表单数据发送给服务器的方式。
● get方法,它将数据作为URL的一部分进行发送 ● post方法,它将数据隐藏在HTTP头中
具体的不同用法,自行查阅。在后面的学习中也会接触到。
3、id 属性:唯一标识页面中的<form>元素。
常以字符frm作表单的id属性值的起始字符,然后用剩余部分描述表单所收集数据的类型,如frmLogin或frmSearch。
4、onsubmit属性:用户单击提交按钮时,指向提交前运行的脚本函数。
可以在数据发送给服务器之前运行一个脚本,以确保提交的数据的质量和准确性。
5、onreset属性:按下reset按钮时,将激活的脚本函数。
常用于清除表单之前让用户确认一下,以防止用户无意中按下的该按钮。
6、enctype属性:使用HTTP post方法向服务器发送数据时指定浏览器编码数据的方式。
● application/x-www-form-urlencoded,这是大多数表单使用的标准方法。使用该编码方式的原因是某些字符(例如空
格、加号和某些其他非字母数字字符)不能发送给Web服务器。相反,它们被用于表示它们的其他字符所替代。 ● multipart/form-data,这种方式允许将数据以多个部分的方式发送,每个连续的部分对应于一个表单控件,发送顺序
按照它们在表单中的出现顺序。每个部分可以具有一个可选的“内容-类型”头,以指明该表单控件的数据类型。
如果不写这属性时,默认是第一个方式。
7、target 属性:允许用户指明当提交表单时生成的页面被加载到哪一个框架或者浏览器窗口中。
除了这些属性外,还有几个要说明下。 1)、name属性,现在由于id属性的出现,已接近灭亡。但早期的浏览器还是又在用的。
2)、accept与accept-charset属性,这两个属性,在一些浏览器上不支持。他们的作用是指定一个字符编码列表,然后服
务器可以根据该列表进行处理。例如,下面的代码指示服务器接受UTF-8编码: accept-charset="utf-8" 下面的代码表明用户仅能上传GIF或JPEG类型的图像: accept="image/gif, image/jpg"
3)、当浏览器遇到<form>元素时,它通常会在该元素周围创建一些额外的空白。这有可能会影响到页面的设计,注意放
置<form>元素的位置(可以选择放置在文档的起始部分或者末尾附近)。 表单的基本介绍结束了。我觉得,表单在web编程方面确实是个重点。应该好好的学习的。对于深入了解web编程,是有莫大好处的。下一部分在看表单的一些控件吧。看完这些,写一个简单的网页,应该就可以做到了吧。
2019独角兽企业重金招聘Python工程师标准>>> 主程序:SNRindB1=0:1:12
SNRindB2=0:0.01:12;
for i=1:length(SNRindB1) smld_err_prb(i)=exa038_Fun_doublePe(SNRindB1(i));
end
semilogy(SNRindB1,smld_err_prb,'r*');
for i=1:length(SNRindB2)
SNR=10^(SNRindB2(i)/10);
theo_err_prb(i)=(1/2)*erfc(sqrt(SNR/2));
end
hold on
semilogy(SNRindB2,theo_err_prb);
grid on
子程序:
function [p]=exa038_Fun_doublePe(snr_in_dB)
E=1;
SNR=10^(snr_in_dB/10);
sgma=E/sqrt(SNR);
N=10000;
disource=(sign(rand(1,N)-0.5)+1)/2;
numoferr=0;
for i=1:length(disource)
if disource(i)==1
r=E+randn*sgma;
else
r=-E+randn*sgma;
end
if(r>0)
decis=1;
else
decis=0;
end
if(decis~=disource(i))
numoferr=numoferr+1;
end
end
p=numoferr/N;
转载于:https://my.oschina.net/annieduoduo/blog/71429
ICode联盟 项目中 App_Code 文件夹中的类的命名空间,在添加的页面的 using XXXX 时,提示 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?) , 说明要引用的这个类文件的 生成操作 属性没有选择 编译,vs中并没有承认此命名空间。 修改:右击类文件-》属性-》生产操作-》将“内容”改为“编译”,然后重新生成,问题解决。
网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。
UDP Socket的使用过程: 1. 初始化网络库
2. 创建SOCK_DGRAM类型的Socket。
3. 绑定套接字。
4. 发送、接收数据。
5. 销毁套接字。
6. 释放网络库。
广播数据包的原理: 专门用于同时向网络中所有工作站进行发送的一个地址叫做广播地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址。如果你的IP为:192.168.1.39,子网掩码为:255.255.255.0,则广播地址为:192.168.1.255;如果IP为192.168.1.39,子网掩码为:255.255.255.192,则广播地址为:192.168.1.63。
如果只想在本网络内广播数据,只要向广播地址发送数据包即可,这种数据包可以被路由,它会经由路由器到达本网段内的所有主机,此种广播也叫直接广播;如果想在整个网络中广播数据,要向255.255.255.255发送数据包,这种数据包不会被路由,它只能到达本物理网络中的所有主机,此种广播叫有限广播。
使用UDP协议发送、接收广播包的过程。 假如我们要向192.168.0.X,子网掩码为:255.255.255.0的子网中发送广播包。
其步骤如下:
1. 初始化Winsock库。
2. 创建SOCK_DIRAM类型的Socket。
3. 设置Socket的属性允许其广播。
4. 发送数据包到192.168.0.255
5. 接收自己广播的广播包。
6. 关闭Socket
7. 释放网络库。
注意事项如下:
1. 接收方一定要知道广播方的口号,然后绑定此端口号才能正确接收。
2. 接收方的Socket不需要设置成广播属性。
3. 绑定的IP不可以使用“127.0.0.1”,可以使用真实IP地址或者INADDR_ANY。否则接收失败。
参考代码:
#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <stdlib.h> #include <unistd.h> //*-----------变量,数据类型宏定义------------------- #define PORT 3387 #define MAX 255 int main(void) { int sockfd, ret; int size, len; int so_broadcast=1; struct sockaddr_in my_con; struct sockaddr_in cl_con; char snd[MAX] = "
首先需要root文件管理器 ,其次手机需要取得root权限 ,有root权限后,直接用文件管理进入/system /app 里删除对应的.apk。
*Accountprovider 账号管理器
cawO;K!~n0 ApkManager.apk APK安装器(即N多安装器)浙江博客网R0pM[ ]}4znD&Z
advancedsettings.apk 高级设置
%M&n+@cb:r:GB0 AlarmClock 闹钟
S IX-A2}A;Ps3y0 AndroidSyncService 系统同步服务
`SN@9oy Q Z0D[0 AndroidUI 索尼爱立信X10UI界面程序
b']xBJY2G3k4E0 appinstaller.apk app安装器浙江博客网zL ?7OCW \
*ApplicationsProvider 程序管理器浙江博客网I2F'Peh:O
AutoSettingDispatcher 自动设置修补浙江博客网/W8S1[fJIB&S
bootinfo 启动信息
/R]H0g!e ],t J\0 Bluetooth.apk 蓝牙(删了就没有蓝牙了)
[Q s%VZ#\V2s0 Browser 自带浏览器
'r4t;cmD0 Bugreport.apk Bug报告
X&e6Qu(vW4F0 btoppservice 蓝牙设置服务浙江博客网LQ?;S} d8kA-{?
Calculator 系统自带计算器浙江博客网/{8? cm5Y4Um q~w
Calendar 系统自带日历程序
}1O| ^+Y b ~V.I0 CalendarProvider 系统自带日历管理器
tq1f!oU9~gA$H0 *Camera 系统自带相机浙江博客网 J&cgwCvB
CapabilitySetupReceiver 接收器安装能力
停靠窗口作为主窗口的一部分,可以停靠、浮动、显示隐藏等。现在很多软件都具有可停靠窗口
可停靠位置:
//mydockwidget.h
#ifndef MYDOCKWIDGETDEMO_H
#define MYDOCKWIDGETDEMO_H
#include <QMainWindow>
class QAction;
class QMenu;
class QToolBar;
class QStatusBar;
class QDockWidget;
class QTextEdit;
class MyDockWidgetDemo : public QMainWindow
{
Q_OBJECT
public:
explicit MyDockWidgetDemo(QWidget *parent = 0);
signals:
public slots:
private slots:
void newSlot();
void saveSlot();
void aboutSlot();
private:
void createActions(); //创建动作
void createMenus(); //创建菜单
void createToolBars(); //创建工具条
void createStatusBars(); //创建状态栏
void createDockWidget(); //创建可停靠窗口
QAction *newAct;
QAction *saveAct;
QAction *quitAct;
QAction *aboutAct;
QMenu *fileMenu;
QMenu *viewMenu; //viewMenu主要控制QDockWidget控件的显示和隐藏
QMenu *helpMenu;
QToolBar *fileToolBar;
QToolBar *viewToolBar; //viewToolBar主要控制QDockWidget控件的显示和隐藏
QToolBar *helpToolBar;
QTextEdit *textEdit;
};
#endif // MYDOCKWIDGETDEMO_H //mydockwidget.
http://linuxtoy.org/archives/centos-54-released.html
转载于:https://www.cnblogs.com/timecode-2011/archive/2012/07/18/2597462.html
写方法的时候一定要记得有返回值
话说Amazon的Kindle DXG不具备wifi功能.但是具备3G无线上网功能.
据官方文档说明.3g在美国本土是免费的.其他国家有部分地区可以搜到3g(是亚马逊和当地运营商合作的).
能收到的地方,简单的上上网也是免费的(干什么不免费,请看官方文档).
免费的网络当然是好东西,不限流量,不限时长,有效期什么的也不用考虑.唯一不好的就是kindle dxg的内置浏览器太傻X.(另外,这个网络是绕过GFW的,你懂的)
目的:
我们现在要把kindle当作一个免费的3g无线网卡,通过usb接到电脑上,然后电脑就能上网了.
解决方案:
将浏览器的请求包全部转发到本地的某个端口(比如说2012).
通过ssh的端口转发功能将本地的2012端口收到的数据以kindle为桥梁转发到amazon_proxy_host.
由amazon_proxy_host对数据进行出来,并请求网络资源,然后将资源,反向返回到本机的浏览器.
上网成功.
一些解释:
1.为什么要转发到amazon_proxy_host?
答:亚马逊规定所有请求数据必须通过这个代理,方便其管理监视.
2.如何获取amazon_proxy_host的地址?
答:当你使用kindle上网的时候kindle的系统中会出现一个网络接口ppp0,通过监听查看,流过该接口的数据可以得到代理服务器的ip.
3.另外由于amazon的代理服务器需要验证身份,在发送给代理服务器的http请求header里面需要加上x-fsn和x-fn-appid头才能通过验证。 所以监听数据的时候,还要获取这两个.
具体操作:
1.kindle dxg越狱,越狱工具在这个帖子里,这是全球的kindle技术最高的一个帖子了.
要装jailbreak
要装usbnetwork
可参考这个帖子和这个帖子
2.kindle上面开启debug和启动usbnetwork的方法
在search中输入 ;debugon 开启debug模式,查看是否开启成功请输入 `help ,会弹出帮助窗口.
开启debug后输入 `usbnetwork 按确定.
3.将kindle通过usb线连接到电脑上,linux下用ifconfig会看到多了一个usb0
通过将usb0的ip地址设置为静态的192.168.2.1就能与kindle 建立网络连接了(kindle默认ip是192.168.2.2).
4.网络连接成功后就可以(telnet 或ssh)到192.168.2.2也就是kindle了,注意ssh需要等待很长时间,原因未知.
现在开始使用ssh建立kindle和电脑之间,以及代理服务器之间的连接了.
两种方式:
A. ssh到kindle上面,输入 ssh -R 2012:72.21.206.113:80 root@192.168.2.1 ,然后输入密码,然后不要退出保持连接就行了.
B. 在电脑上面输入 ssh -L 2012:72.21.206.113:80 192.168.2.2
此处的72.21.206.113就是上面提到的amazon的代理服务器,需要通过一个叫做tcpdump-arm的软件监测ppp0得到,具体操作看前面推荐的帖子.
5.火狐浏览器,设置代理,使用的是http代理(目前只能使用http,https还不能用)指向127.0.0.1,端口2012.
6.完毕.
更新(2012.1.22):
为火狐浏览器增加一个用来上wap网站的名为wmlbrowser的插件,效果更佳。
转载于:https://www.cnblogs.com/ituff/archive/2012/07/07/2858532.html
result in = lead to “导致,引起”,主语是原因,定语是结果。 result from = because of : “因...而导致...”,宾语是原因,主语是结果。 The bad weather result in traffic jam. 坏天气导致了交通阻塞。 The traffic jam result from bad weather. 交通阻塞是由于坏天气。
努力工作造就他的成功。 Hard work his success. His success hard work.
keys: 1. result in 2. result from
http://allanlk.blog.163.com/blog/static/57688012201188103422360/
------------------------------------------------------------------------------
The female education program resulted in increased female literacy.
为什么是increase+ed而不是ing。
介词后面不是总ing,什么情况不是
是因为这个increased是形容词吗?
本句 in 的宾语是literacy。
increasing不断增加的 increased 已经增加了的
Mrs. Harris paced in increasing (adj.
PROC虚拟文件系统自制kmsg文件存储打印信息
像内核proc文件系统的dmsg命令一样,prink内核打印的信息都会存储在/proc/kmsg文件里,我们cat它就能读出所有的内核打印信息,但是该文件类似于管道,读完了就读走了,不会再有,除非有printk函数继续向里面写入东西。而dmsg会打印出所有log_buf里面的东西,应该是开机以来所有的printk打印出来的。
在这里先说明下我的软硬件平台:
硬件: 友善之臂的mini2440,淘宝里面嵌入式家园那里买的(绝对不是打广告,而是详细说明自己的板子)
软件:linux-2.6.32.2
好,现在进入我们的话题:
在我们进行驱动调试的时候,我不想用printk函数,因为这样会和其他内核打印出来的信息混在一块。所以我希望在建立自己的/proc/mymsg文件,使用自己的打印函数myprintk,需要查看我打印出来的驱动调试信息时只要简单的cat /proc/mymsg,里面全是myprintk打印出来的东西。
1. 写mymsg的驱动
贴出源码:
Ubuntu_myproc_dmsg.c
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h>
#include <linux/proc_fs.h> #include <linux/wait.h> #include <linux/fs.h> #include <linux/sched.h> #include <asm/uaccess.h> #define UBUNTU_LOG_BUF_LENGTH 1024 //»·Ðλº³åÇø³¤¶È
static DECLARE_WAIT_QUEUE_HEAD(ubuntu_log_waitq);
static char ubuntu_log_buf[UBUNTU_LOG_BUF_LENGTH]; //»·Ðλº³åÇøÊý×é
static char tmp_buf[UBUNTU_LOG_BUF_LENGTH]; //ÔÝ´æ
static int ubuntu_log_rp=0; //»·Ðλº³åÇø¶ÁÖ¸Õë, ²»±ä
static int ubuntu_log_wp = 0; //»·Ðλº³åÇøÐ´Ö¸Õë
static int ubuntu_log_rp_for_read = 0; //»·Ðλº³åÇø¶ÁÖ¸Õ룬ΪÁ˶ÁÈ¡Êý¾Ý£¬¿É±ä
/*Åжϻ·Ðλº³åÇøÊÇ·ñÂú*/
static int ubuntu_Is_log_full(void)
{
return ((ubuntu_log_wp + 1) % UBUNTU_LOG_BUF_LENGTH == ubuntu_log_rp);
一、find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二、find(String queryString , Object value); 示例:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test");
或模糊查询:this.getHibernateTemplate().find("from bean.User u where u.name like ?", "%test%");
返回name属性值为test的对象(模糊查询,返回name属性值包含test的对象) 三、find(String queryString, Object[] values); 示例:String hql= "from bean.User u where u.name=? and u.password=?" this.getHibernateTemplate().find(hql, new String[]{"test", "123"});
返回用户名为test并且密码为123的所有User对象 --------------------------------- 四、findByExample(Object exampleEntity) 示例: User u=new User(); u.setPassword("123");//必须 符合的条件但是这两个条件时并列的(象当于sql中的and) u.setName("bb"); list=this.getHibernateTemplate().findByExample(u,start,max); 返回:用户名为bb密码为123的对象 五、findByExample(Object exampleEntity, int firstResult, int maxResults) 示例: User u=new User(); u.setPassword("123");//必须 符合的条件但是这两个条件时并列的(象当于sql中的and) u.setName("bb"); list=this.getHibernateTemplate().findByExample(u,start,max); 返回:满足用户名为bb密码为123,自start起共max个User对象。(对象从0开始计数) --------------------------------------------------- 六、findByNamedParam(String queryString , String paramName , Object value) 使用以下语句查询: String queryString = "
问题:
在一个房间里有 N 个人,其中一个是名人,所谓名人就是大家都认识他,但是他不认识任何人。其它人可能认识房间里面另外的一部分人。你可以问任何人问题,但是问题只能是:你认识 X 吗,对方回答 Yes or No. 请问最少要问多少个问题才能把名人找出来?
分析:
我们把人编号,比如从1 到 N。
我们考虑最坏情况:你问每一个人是否认识 X ,如果大家都认识,那么 X 一定是名人,如果其中一个人说不认识,那么那个人一定不是名人。因为 X 的范围是 1 到 N, 所以,在最坏情况下,我们 要问 (N - 1)* N 个问题。
但是,有一种更好的方法。我们从1开始,依次问他是否认识他的下一个,比如 2, 如果 1 说认识,那么 1 一定不是名人,2 有可能是名人; 如果1 说不认识,2 一定不是名人,1 却有可能是名人。这是这个方法巧的地方。所以,不管1 回答是还是不是,我们都可以确定其中一个不是名人,然后,我们继续问 可能是名人那一位 是否认识 3, 然后依次下去,直到第 N 个人。这样我们就可以只要问 (N - 1) 个问题就可以把名人找出来。
转载请注明出处:http://blog.csdn.net/beiyeqingteng
开始正式编译,在源码目录下make即可。
make
我完全不知道跑了个啥,只知道超级卡。完成后产生的out文件夹有3.9G。
镜像生成在out/target/product/generic下:android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。
当然编译是件很痛苦的事情:
错误1:
************************************************************
You are attempting to build on a 32-bit system.
Only 64-bit build environments are supported beyond froyo/2.2.
************************************************************
解决:
需要进行如下修改即可,将
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
四个文件中的
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
注释掉,或者将“64”换成“32”
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
然后,将./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))
错误2:
host C++: libutils <= frameworks/base/libs/utils/RefBase.cpp
frameworks/base/libs/utils/RefBase.cpp: In member function ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:
Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程。==程序的生命周期是由Android系统进行调度和控制的。
① 程序生命周期
a) Android进程的优先级。
前台进程==》
可见进程 ==》服务进程==》
后台进程==》空进程
说明:
㈠前台进程:
是Android系统中最重要的进程,是与用户正在进行交互的进程。有以下四种情况。·Activity正在与用户进行交互·进程被Activity调用,而且这个进程正在与用户进行交互·进程服务正在执行声明中的回调函数,如OnCreate()OnStart()OnDestroy()·进程的BroadCastReceiver在执行OnReceive()函数
Android系统在多个前台进程同时运行时,可能会出现资源部足的情况,此时会清除部分前台进程,保证主要的用户界面能够及时响应。
㈡可见进程
是指部分程序界面能够被用户看见,却不在前台与用户交互,不影响界面事件的进程。
如果一个进程包含服务,且这个服务正被用户可见的Activity调用,此进程同样被视为可见进程。
Androdi进程一般存在少量的可见进程,只有在特殊情况下,Android系统才会为保证前台进程的资源而清除可见进程。
㈢服务进程
服务进程是指包含已启动服务的进程。·没有用户界面·在后台长期运行
Android系统除非不能保证前台进程和可见进程所必要的资源,否则不强行清
除服务进程。
㈣后台进程
后台进程是指不包括任何已经启动的服务,而其没有任何用户可见的Activity的进程
Android系统中一般存在数量较多的后台进程,在系统资源紧张时,系统将优先清除用户较长时间没有见到的后台进程
㈤空进程
空进程是不包含任何活跃组件的进程
空进程在系统紧张时会被首先清除。但为了提高Android应用程序的启动速
度,Android系统会将空进程保存在系统内存用,在用户重新启动该程序时,空进程会被重新使用。
除了以上优先级以外,一下两个方面也决定了优先级。·进程的优先级取决于所有组件中优先级最高的部分·进程的优先级会根据其他进程的依赖关系而变化。
② Android组件
a) 组件式可以调用的基本功能模块,Android应用程序是由组件组成的。
b) Android系统四个组件:Activity,Service,BroadCastReceiver, ContentProvider
③Activity和生命周期
a) Activity生命周期
㈠Activity生命周期是指Activity从启动到销毁的过程
㈡Activity表现为四种状态。
·活动状态:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互
·暂停状态:Activity界面上被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互
·停止状态:Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡
·非活动状态:不在这三种状态中的Activity则处于非活动状态。
b) 四种状态变换关系
c) Activity栈
先进先出规则
d) 事件回调函数
e)Activity状态保存/恢复的事件回调函数
f)事件回调函数的调用顺序
g)Activity生命周期图和解释。
许多生命周期的分析都是纸上谈兵,没有经过实际项目的验证,光看些官方文档时不够的,对其的理解也是也不全面不深刻的。
activity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当 activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的 activity(使用ActivityGroup)。大部分的Activity子类都需要实现以下两个接口:
onCreate(Bundle)接口是初始化activity的地方. 在这儿通常可以调用setContentView(int)设置在资源文件中定义的UI, 使用findViewById(int) 可以获得UI中定义的窗口.
onPause()接口是使用者准备离开activity的地方,在这儿,任何的修改都应该被提交(通常用于ContentProvider保存数据).
为了能够使用Context.startActivity(),所有的activity类都必须在AndroidManifest.xml文件中定义有相关的“activity”项。
activity类是Android 应用生命周期的重要部分。
Activity生命周期
Vsftpd 是一款轻量级并有着安全与简易等特性的FTP服务器程序,破受欢迎。在 Linux 中一旦配置好 Vsftpd 环境就可以一劳永逸,任意的迁移到类似的服务器之上,因此我们对配置过程做个系统的了解也是有必要的。
本文的任务是创建两个虚拟账户,第一个账户(bugxm_admin)拥有可读写指定目录文件、不可登陆系统权限,第二个(bugxm_general)只拥有只读被绑定目录中文件的权限,依然不能登陆系统。新建一个虚拟用户并且合理分配权限、绑定目录,这和IDC商的虚拟主机效果是一样的。臭虫小明为了方便,直接采用的 Root 账户操作。
1、安装 Vsftpd 程序,为了方便我们采用以下方式进行自动安装
yum install -y vsftpd
2、创建“bugxm_admin”与“bugxm_general”这两个账户,密码暂定为“123456”,其中奇数行表示账号,偶数行表示密码。
vi /etc/vsftpd/vm_user.txt
bugxm_admin
123456
bugxm_general
123456
2-1、创建 Vsftpd 认证文件
db_load -T -t hash -f /etc/vsftpd/vm_user.txt /etc/vsftpd/vm_user.db
注: 执行上条命令若提示:“bash: db_load: command not found”,请安装“db4-utils”,具体操作如下
yum install -y db4 db4-utils
注:如果出现“db_load: unexpected end of input data or key/data pair、db_load: odd number of key/data pairs”提示,请在 vm_user.txt 最后一行添加空行,即回车一下。
3、编辑虚拟用户需要用到的PAM认证配置文件
rm -f /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
3-1、PAM认证配置文件输入以下内容
auth required pam_userdb.
1.对窗口位置、大小,最简单也是最常用的函数MoveWindow。
2.SetWindowPos相对于MoveWindow多了两个参数 const CWnd* pWndInsertAfter, UINT nFlags。
可以设置在Z轴上的层次位置。
3.DeferWindowPos与SetWindowPos的不同点主要在于:SetWindowPos窗口移动之后,原先被覆盖的区域立刻重绘。
DeferWindowPos结合BeginDeferWindowPos(int Number),EndDeferWindowPos()对多个窗口移动完之后,在进行重绘。提高了效率。