E. 宿舍分享 time limit per test 1 second memory limit per test 256 megabytes input input.txt output output.txt 一个学期有 n 天.第i天早上Vasya会带 ai kg食物来学校(食物最多放2天,今天和明天).
Vasya 每天吃 v kg 食物.他带来的食物原来够吃,但是Vasya 的 m 个室友会吃他的,编号 1 到 m. 第 j 个室友会在 lj到 rj 天和他一起住且每天吃 fj kg食物. Vasya 每天可以给同住的人 j 分 fj kg食物(可以选一些人分).Vasya每一次分食物都要让人吃饱(要不然不厚道).
Vasya 怎样分出最多次食物?
Input 第一行2个整数 n 和 v (1 ≤ n, v ≤ 400). 第2行 n 个整数 a1, a2, ..., an (1 ≤ ai ≤ 400), 第三行一个整数 m (1 ≤ m ≤ 400).
在上一篇文章中讲述了网络直播电视的M3U8解析和其中的关键字段。本章我将对我遇见到的不同数据源的M3U8文件进行列举和分析。
第一种:ts片段地址为文件名称,下载地址为:http:\\www.XXX.com\01\XX\1.m3u8
#EXTM3U #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:92595 #EXTINF:8, 20121120T182851-04-92595.ts #EXTINF:8, 20121120T182851-04-92596.ts #EXTINF:8, 20121120T182851-04-92597.ts #EXTINF:8, 20121120T182851-04-92598.ts #EXTINF:8, 20121120T182851-04-92599.ts #EXTINF:8, 20121120T182851-04-92600.ts #EXTINF:8, 20121120T182851-04-92601.ts #EXTINF:8, 20121120T182851-04-92602.ts 那么获取到 20121120T182851-04-92595.ts 片段地址就为http:\\www.XXX.com\01\XX\20121120T182851-04-92595.ts。
类似情况,如下:
#EXTM3U #EXT-X-ALLOW-CACHE:NO #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:6198 #EXTINF:3, aac749f7425bf07f_13b4b0fd1b7_6198.ts?wsApp=HLS&wsMonitor=-1&wsHost=rtmp.cntv.lxdns.com #EXTINF:3, aac749f7425bf07f_13b4b0fe1b8_6199.ts?wsApp=HLS&wsMonitor=-1&wsHost=rtmp.cntv.lxdns.com #EXTINF:3, aac749f7425bf07f_13b4b0ffa08_6200.ts?wsApp=HLS&wsMonitor=-1&wsHost=rtmp.cntv.lxdns.com 第二种:ts片段地址为目录结构,下载地址为:http:\\www.XXX.com\01\XX\1.m3u8。
#EXTM3U #EXT-X-ALLOW-CACHE:NO #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:9190381 #EXTINF:10, /timeshift/63/20121129165010.ts #EXTINF:10, /timeshift/63/20121129165020.ts #EXTINF:10, /timeshift/63/20121129165030.ts 那么获取到/timeshift/63/20121129165010.ts片段地址就为http:\\www.XXX.com\01\XX/timeshift/63/20121129165010.ts。
第三种:ts片段地址为目录结构,但是和m3u8下载地址目录重叠。下载地址为:http:\\www.XXX.com\01\timeshift\63\1.m3u8。
#EXTM3U #EXT-X-ALLOW-CACHE:NO #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:9190381 #EXTINF:10, /timeshift/63/20121129165010.ts #EXTINF:10, /timeshift/63/20121129165020.ts #EXTINF:10, /timeshift/63/20121129165030.ts 将冲突的目录剔除,那么获取到/timeshift/63/20121129165010.ts片段地址就为http:\\www.XXX.com\01\XX/timeshift/63/20121129165010.ts。
第四种:ts片段地址为完整的片段下载地址,下载地址为:http:\\www.XXX.com\01\XX\1.m3u8。
#EXTM3U #EXT-X-ALLOW-CACHE:NO #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:6297202 #EXTINF:10, http://202.108.17.170:80/ipad/160_12784_1758/20121127185340.ts?userid=2221281760225887_160_12784_1758 #EXTINF:10, http://202.108.17.170:80/ipad/160_12784_1758/20121127185350.ts?userid=2221281760225887_160_12784_1758 #EXTINF:10, http://202.
改成off之后也没效果。把web.config文件里面所有的注释去掉。
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
下面代码实现了一个最简单的含有QTableWidget的小程序:
[python] view plain copy #!/usr/bin/env python #coding=utf-8 from PyQt4.QtGui import * from PyQt4.QtCore import * class MyDialog(QDialog): def __init__(self, parent=None): super(MyDialog, self).__init__(parent) self.MyTable = QTableWidget(4,3) self.MyTable.setHorizontalHeaderLabels(['姓名','身高','体重']) newItem = QTableWidgetItem("松鼠") self.MyTable.setItem(0, 0, newItem) newItem = QTableWidgetItem("10cm") self.MyTable.setItem(0, 1, newItem) newItem = QTableWidgetItem("60g") self.MyTable.setItem(0, 2, newItem) layout = QHBoxLayout() layout.addWidget(self.MyTable) self.setLayout(layout) if __name__ == '__main__': import sys app = QApplication(sys.argv) myWindow = MyDialog() myWindow.show() sys.exit(app.exec_()) 其中:
self.MyTable = QTableWidget(4,3) 构造了一个QTableWidget的对象,并且设置为4行,3列
转载自: http://www.cnblogs.com/duguqing40/archive/2012/09/22/2697819.html
微软推出WINDOWS7操作系统后,很多朋友都升级到了WIN7系统,有些原来是由vista升级的。但是在使用中会碰到这样一个问题:每次重启或在使用中,会不定期地提示 “默认网关不可用” 然后就不能连接网络了。使用修复功能或者使用ipconfig -renew命令可以恢复正常,但是以后还会再次出现,该如何彻底解决这个问题呢?
甚至有些使用 ipconfig -renew的时候时候会提示“在释放接口 Loopback Pseudo-Interface 1 时出错: 系统找不到指定的文件。操作失败,没有适配器处于允许此操作的状态。”。
解决办法就是修复Winsock。
下面来看看具体该怎么做?
修复Winsock命令
第一步:点击左下角的WIN图标,输入CMD然后回车,打开DOS模式窗口。 第二步:在DOS命令行提示符下直接输入:“netsh winsock reset”,然后回车,会提示需要重启,不要管它。
第三步:在DOS命令行提示符下直接输入:“netsh int ip reset reset.log”,然后回车,提示重新启动计算机完成此操作。 第四步:关闭DOS窗口,重新启动计算机,问题解决。
程序代码
' *----------------------------------------------------------------------------
' * 函数:CheckIn
' * 描述:检测参数是否有SQL危险字符
' * 参数:str要检测的数据
' * 返回:FALSE:安全TRUE:不安全
' * 作者:
' * 日期:
' *----------------------------------------------------------------------------
function CheckIn(str)
if instr(1,str,chr(39))>0 or instr(1,str,chr(34))>0 or instr(1,str,chr(59))>0 then
CheckIn=true
else
CheckIn=false
end if
end function
程序代码
' *----------------------------------------------------------------------------
' * 函数:HTMLEncode
' * 描述:过滤HTML代码
' * 参数:--
' * 返回:--
' * 作者:
' * 日期:
' *----------------------------------------------------------------------------
function HTMLEncode(fString)
if not isnull(fString) then
fString = replace(fString, "
62.java中建立数据库连接取数据
public void init()
{
String url="jdbc:odbc:javadata";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url,"sa","");//mssql database user SA and password
DatabaseMetaData dma=con.getMetaData();
System.out.println("Connect to"+dma.getURL());
System.out.println(";Driver "+dma.getDriverName());
System.out.println(";Version "+dma.getDriverVersion());
System.out.println("");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from company.dbo.TB_NAME where number=1");//Sql
rs.next();
String dispresult=rs.getString("name");
System.out.println(dispresult);// Instead,you can display it in Paint() or use AWT etc.
rs.close();
stmt.close();
con.close();
}
catch(SQLException ex)
{
System.out.println("!!!SQL Exception !!!");
while(ex!=null)
{
System.out.println("SQLState:"+ex.getSQLState());
System.out.println("Message:"+ex.getMessage());
System.out.println("Vendor:"+ex.getErrorCode());
ex=ex.getNextException();
System.out.println("");
}
}
catch(java.lang.Exception ex)
1.文本框焦点问题
onBlur:当失去输入焦点后产生该事件
onFocus:当输入获得焦点后,产生该文件
Onchange:当文字值改变时,产生该事件
Onselect:当文字加亮后,产生该文件
<input type="text" value="郭强" οnfοcus="if(value=='郭强') {value=''}" οnblur="if
(value=='') {value='郭强'}">点击时文字消失,失去焦点时文字再出现
2.网页按钮的特殊颜色
<input type=button name="Submit1" value="郭强" size=10 class=s02
style="background-color:rgb(235,207,22)">
3.鼠标移入移出时颜色变化
<input type="submit" value="找吧" name="B1" onMouseOut=this.style.color="blue"
onMouseOver=this.style.color="red" class="button">
4.平面按钮
<input type=submit value=订阅style="border:1px solid :#666666; height:17px; width:25pt; font-size:9pt;
BACKGROUND-COLOR: #E8E8FF; color:#666666" name="submit">
5.按钮颜色变化
<input type=text name="nick" style="border:1px solid #666666; font-size:9pt; height:17px;
BACKGROUND-COLOR: #F4F4FF; color:#ff6600" size="15" maxlength="16">
6.平面输入框
<input type="text" name="T1" size="20" style="border-style: solid; border-width: 1">
7.使窗口变成指定的大小
<script>
window.resizeTo(300,283);
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>js动态设置div的值.html</title> </head> <body> <form method="post" name="form1"> <label><input type="radio" name="radio" value="1-10 岁" οnclick="ok(this.value);">1-10 岁</label> <label><input type="radio" name="radio" value="11 岁" οnclick="ok(this.value);">11 岁</label> <label><input type="radio" name="radio" value="12-120 岁" οnclick="ok(this.value);">12-120 岁</label> <input type="button" οnclick="ok()" value="测试选择值"> </form> <div id="test"></div> <script language="javascript" type="text/javascript"> <!-- function ok() { var temp=document.getElementsByName("radio"); for (i=0;i<temp.length;i++){ //遍历Radio if(temp[i].checked) { //alert("你选择了"+temp[i].value); //获取Radio的值 document.getElementById('test').innerHTML = temp[i].value; } } } --> </script> </body> </html> 作者 JavaAlpha
具体设置如下:
1. 调整IIS 7应用程序池队列长度
由原来的默认1000改为65535。
IIS Manager > ApplicationPools > Advanced Settings
Queue Length : 65535
2. 调整IIS 7的appConcurrentRequestLimit设置
由原来的默认5000改为100000。
c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到该设置:
< serverRuntime appConcurrentRequestLimit ="100000" /> 3. 调整machine.config中的processModel>requestQueueLimit的设置
由原来的默认5000改为100000。
< configuration > < system .web > < processModel requestQueueLimit ="100000" /> 参考文章:http://technet.microsoft.com/en-us/library/dd425294(office.13).aspx
4. 修改注册表,调整IIS 7支持的同时TCPIP连接数
由原来的默认5000改为100000。
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000 完成上述4个设置,就可以支持10万个同时请求。
D. 4a矩阵 time limit per test 2 seconds memory limit per test 256 megabytes input input.txt output output.txt 有一个 n × m 的矩阵, 行 1 到 n, 列1 to m.
4a矩阵定义:
矩阵内最多有 k 个 "a" ; 4个角相等,长宽大于1. 请在给定矩阵中数出有几个子矩阵是4a矩阵.
Input
第一行3个整数n, m, k (2 ≤ n, m ≤ 400; 0 ≤ k ≤ n·m).
接下来为矩阵.
Output 一个整数,表示4a矩阵数.
Sample test(s) input 3 4 4 aabb baab baab output 2 input 4 5 1 ababa ccaca ccacb cbabc output 1 Note 第一个样例的解 (2, 2) (3, 3), (2, 1) (3, 4).
拦截二进制函数 Detours库可以在运行过程中动态拦截函数调用。detours将目标函数前几个指令替换为一个无条件跳转,跳转到用户定义的detour函数。被拦截的函数保存在trampoline函数中。trampoline保存了目标函数移除的指令和一个无条件跳转,可以跳转到目标函数的执行体部分(未被移除的部分)。
当执行到目标函数的时候,直接跳转到用户提供的detours拦截函数。拦截函数开始执行自己的代码。detour函数可以直接返回或调用trampoline函数,将流程返回到拦截前。当目标函数执行完以后,再将控制交给detour函数。detour函数执行适当的代码返回,下图分别表示没有拦截和拦截以后的执行流程:
detours库通过在目标进程二进制映像中写入指令进行拦截。对于目标函数,detours实际上写入两个函数,目标函数和trampoline函数,以及一个函数指针pointer(怀疑文档中有错误)。trampoline函数由detours动态分配。拦截之前,trampoline只包含一条跳转到目标函数的语句。拦截以后,trampoline包含目标函数的初始几条语句和跳转到目标函数剩余内容的跳转指令。
目标指针最初被初始化为指向目标函数。用detour依附(attach)到目标函数以后,目标指针就被修改为指向trampoline函数。当detour从目标函数分离(detach)以后,目标指针像开始一样指向目标函数。
上图展示了detours拦截过程。为了拦截目标函数,首先为动态trampoline函数分配内存(如果没有静态的trampoline),然后修改目标函数和trampoline为可写。拦截的第一步,detours从目标函数中复制至少5字节指令到trampoline(足够一条无条件跳转指令)。如果目标函数小于5字节,detours退出并返回一个错误码
复制指令的过程中,detours采用了一种简单的表格驱动反汇编器。detours在trampoline最后添加一条跳转命令,跳转到目标函数第一条没有被复制的指令处。detours在目标函数的第一条指令处写入一条无条件跳转指令,跳转到detour函数中。最后,detours将目标函数和trampoline函数恢复为原始状态,然后通过调用借口FlushInstructionCache刷新cpu指令缓存。
使用Detours 为了detour目标函数,需要一个指向目标函数的指针和一个detour函数。为了能够正确拦截目标函数,detour函数和目标指针的调用规则需要一致,包括参数和调用规则。调用规则一致确保寄存器能正确保存,detour和目标函数的栈能够合理分配。
下面的代码描述了detours库的使用方法,用户必须包含头文件detours.h,连接过程包含库detours.lib
#include <windows.h> #include <detours.h> static LONG dwSlept = 0; // Target pointer for the uninstrumented Sleep API. // static VOID (WINAPI * TrueSleep)(DWORD dwMilliseconds) = Sleep; // Detour function that replaces the Sleep API. // VOID WINAPI TimedSleep(DWORD dwMilliseconds) { // Save the before and after times around calling the Sleep API. DWORD dwBeg = GetTickCount(); TrueSleep(dwMilliseconds); DWORD dwEnd = GetTickCount(); InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg); } // DllMain function attaches and detaches the TimedSleep detour to the // Sleep target function.
ClassLoader.getResourceAsStream(name);路径问题 InputStream in = getClass().getResourceAsStream('/'+"spring-beans.dtd");表示从classs目录下面的找文件,文件放在src下面就可以了. InputStream in = getClass(). getResourceAsStream("spring-beans.dtd");表示从当前classs下面的路径找文件 如果是在com.a.b.c.d.Test这个class就表示spring-beans.dtd要放在目录src\com\a\b\c\d下. SAXBuilder builder = new SAXBuilder(); EntityResolver resolver = new EntityResolver() { public InputSource resolveEntity(String publicId, String systemId) { if (publicId.equals("-//SPRING//DTD BEAN//EN")) { InputStream in = getClass().getResourceAsStream( '/'+"spring-beans.dtd"); return new InputSource(in); } else { return null; } } }; builder.setEntityResolver(resolver); (2) 例子 package ccutse.DB; import java.util.*; import java.net.*; import java.io.*; public class ReadProp { private String user,psw,url,driver; private int maxCon,minCon; public ReadProp() { } public static void main(String[] args) { ReadProp readprop = new ReadProp(); InputStream in=null; try{ in=readprop.
第一章:基本概念******************************* (1):c++程序至少包含一个main()函数 (2):函数的可执行部分由包含在一对花括号中的语句组成 (3):一对花括号定义了一个语句块 (4):语句用分号结束 (5):关键字是C++中有特殊含义的一组保留字,程序中的实体不能与C++语言中的任何关键字同名 第二章:基本数据类型和计算************************** (1):数值和字符常量被称为字面量 (2):可以把整数字面量定义为十进制,十六进制,或八进制 (3):浮点字面量必须包含小数点和指数,或者两者都包含 (4):C++的所有字面量和变量都有给定的类型 (5):Char类型的变量可以存储单个字符,占用一个字节,char类型在默认的情况下是带符号的,也可以是不带符号的,这取决于编辑器,也可以使用,signed 和 unsigned char 类型的变量存储整数 (6):类型wchat_t 可以存储宽字符,占用两个字节,这也取决于编辑器 (7):变量的名称和类型出现在声明语句中,以一个分号结束,声明一个变量,如果给该变量分配了空间内存,那么也就定义了该变量 (8):变量的声明可以指定初始值,这是一种良好的编程习惯 (9):可以用const保护基本数据类型的"变量"值,编辑器程序源代码文件中检查是否试图修改声明为const的变量 练习题: 1:编写一个程序,计算圆的面积.该程序应提示输入圆的半径,使用公式area = pi*radius*radius 计算面积,在显示结果 2:使用第一题的解决方案,改进代码,使用户输入所需的位数,控制输出的精度 (提示, 使用setprecision()操纵程序) 3:在生日那天,你得到了一个卷尺和一个可以确定角度的仪器,例如测量水平线和树高之间的夹角,如果你知道自己与树之间的距离d和眼睛平视量角器的高度h,就可以用下面的公式计算出树的高 h+d*tan(angle) 创建一个程序,从键盘上输入h, d ,angle 输出树的高度 第三章:处理基本数据类型*************************** (1):关键字typedef允许定义其他类型的同义词 (2):关键字extern允许引用在另一个文件中定义的全局变量. 练习题 1:编写一个程序,计算用户输入非0整数的倒数,该程序应把计算的结果存储在double类型的变量中,再输出它 2:创建一个程序提示用户以十进制形式输入一个整数,在对其二进制表示的最后一位就反,也就是说,如果最后一位是 1 ,那么就把它改为 0,反之亦然,结果应显示为一个十进制数(老师提示:将这个数与1异或就可以了) 3:编写一个程序,计算矩形搁板的一层可以容纳多少个正方形的盒子,且不会出现盒子悬垂的情况,使用double类型的变量表示搁板的长度和深度(单位是英尺),以及盒子一边的长度(单位是英寸),从键盘上读取这些值,需要声明并初始化一个常量,用于把英尺转换为英寸,在一个语句中,计算搁板的一层可以容纳多少个盒子,并把结果赋给一个long的变量 4:如果不运行下面的代码,能不能看出这些代码的输出结果? unsigned int k = 430u; unsigned int j = (k >> 4) & ~ (~0 << 3); std::cout<<j ; 5:编写一个程序,从键盘上读取四个字符,把它们放在一个四字节的整型变量中,把这个变量的值显示为一个十六进制.分解变量的四个字节,以相反的顺序输出它们,先输出低位字节 第四章:选择和决策****************************** (1):可以使用比较运算符比较两个值,得到一个bool类型的值,它可以是true或false (2):可以把bool转换为整型--true强制转换为 1,false转换为 0 (3):可以把数值强制转换为bool类型--0 强制转换为 false, 非 0 转换为true (4):if语句可以根据条件表达式的值执行一个语句或语句块,如果条件是true或非 0 值就执行语句和语句块,反之就不执行 (5):if--- else语句给简单的if语句提供了另一个选项,如果条件为false或0,就执行else语句 (6):switch语句可以根据整数表达式的值,从一组固定的选项中选择 (7):条件运算符根据一个表达式的值,选择两个值中的一个 (8):使用goto语句,可以无条件的分支带有指定标签的语句 练习题 1:创建一个程序,提示用户输入一个1到100之间的整数,使用if语句判断该整数是否在设定的范围之内,如果是,在判断整数是否大于,小于或等于50 2:编写一个程序,接受用户输入的一个字符,使用标准库函数判断它是否为一个元音字母,是否为小写字母,最后输出小写字母,再把字符编码输出为一个二进制的值 3:编写一个程序,只使用条件运算确定输入的整数是否是20或小于20,大于且小于30,大于30,且不超过100,或者大于100 4:编写一个程序,提示用户输入0美圆,和10美圆之间的一个钱款(允许使用小数)判断该钱款,包含多少个25美分,10美分,5美分,和1美分,并把该信息输出到屏幕上,输出的结果在语法上应该是有意义的(如,只需要一个 1 角,输出就应该写为1dime, 而不1dimes) 第五章:循环********************************* (1):循环定义了一个作用域,在循环内定义的变量不能在循环内部访问,特别是for循环 (2):在循环中执行break语句会立即退出循环 (3):do-while循环至少执行一次,只要条件为真就继续执行循环 (4):在循环中执行continue语句会跳过当前迭代的剩余语句,如果循环条件允许就直接执行下次循环 (5):一定要注意循环条件不能永远为真,否则将会用远循环,当然你可以用break强制退出循环 练习题 1:编写一个程序,输出1到用户输入的数字之间的所有奇数的平方 2:创建一个程序,它使用while循环累加用户输入的随机个数的整数和,最后输出所有数字的总和,和浮点数类型的平均值 3:创建一个程序,它使用do--while循环计算用户在一行上输入的非空白字符的个数,在第一次遇到输入中的#字符时,停止记数 4:创建一个程序,输出8个随机大小写字母或数字组成的密码,允许输入重复的字符 5:创建一个程序,循环25次,打印出1到10的数字,和20到25的数字 6:抽奖时要求在1-49之间6个不同的随机数,编写一个程序,每次运行时生成5个抽奖选项 7:在1-49之间选择7个数(这7个数有用户输入) 然后自动输出这7个数的所有排序(如,输入123, 则输出,123,321,231,132,312) 第六章:数组和字符串***************************** (1):数组是同一类型的数值的命名集合,它们存储在连续的内存块中,每个值都可以通过一个或多个索引值来访问 (2):一维数组需要一个索引值来引用其元素,二维数组需要两个索引值,n维数组需要n个索引值 (3):数组的元素可以用在等号的左边和表达式中,其方法和相同类型的变量一样 (4):char类型的一维数组可以用于存储非空字符串 (5):可以让编辑器根据声明语句中初始化值的个数来决定数组中最左边的一维大小 (6):可以把char类型的而维数组用做非空字符串的一维数组 (7):String类型存储了一个字符串,它不需要中止字符,因为sting会跟踪字符串的长度 (8):在string变量名后面的方括号中指定索引值,就可以访问string对象中的个个字符,索引值从0开始 (9):使用+运算符可以把string对象与字符串字面量,字符或另一个string对象连接起来 (10):String类型的对象可以用函数来搜索,修改,和提取字符串 (11):字符串中的存储位置为size_t类型的整数值 (12):声明string类型的数组与声明其他类型的数组所采用发方法是一样的 (13):wstring类型的对象包含wchar_t类型的字符串 练习题 1:创建一个数组,存储至多100个学生的姓,创建另一个数组,存储每个学生的成绩(0-100),使用一个循环,提示用户给这些输入姓名和成绩,计算平均成绩并显示,然后在一个表中显示所有学生的姓名和成绩 2:一位气象学家每天(周一到周五)都要记录大气的湿度三次(早晨,中午和晚上)编写一个小程序,让用户按年代顺序把这些记录输入到一个5行3列的 float数组中,接着并计算每天的平均湿度和每天3次的星期平均值 3:请看下面的一段程序 #include <stdlib.
【程序91】
题目:时间函数举例1
1.程序分析:
2.程序源代码:
#include "stdio.h"
#include "time.h"
void main()
{ time_t lt; /*define a longint time varible*/
lt=time(NULL);/*system time and date*/
printf(ctime(<)); /*english format output*/
printf(asctime(localtime(<)));/*tranfer to tm*/
printf(asctime(gmtime(<))); /*tranfer to Greenwich time*/
}
==============================================================
【程序92】
题目:时间函数举例2
1.程序分析: 2.程序源代码:
/*calculate time*/
#include "time.h"
#include "stdio.h"
main()
{ time_t start,end;
int i;
start=time(NULL);
for(i=0;i<3000;i++)
{ printf("\1\1\1\1\1\1\1\1\1\1\n");}
end=time(NULL);
printf("\1: The different is %6.3f\n",difftime(end,start));
}
==============================================================
【程序93】
题目:时间函数举例3
1.程序分析:
2.程序源代码:
/*calculate time*/
【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码:main(){int i,j,k;printf("\n"...
经典c程序100例 2010-03-20 15:47 | (分类:默认分类)
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
掉不满足条件的排列。 2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++) /*以下为三重循环*/
for(j=1;j<5;j++) for (k=1;k<5;k++)
{
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
==============================================================
【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i<=100000)
bonus=i*0.1;
else if(i<=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
#define NUM 1000
int j=2;//定义为全局变量
int randNum[NUM];//因为rand()函数有一定的缺陷,所以在程序中定义了randNum数组来存放随机数
//即使使用了种子函数srand(),由于程序运行时间比较短,也不太好设置种子。因此
使用数组来存放随机数
class Poker
{
private:
int poker[53]; //扑克
int pokerValue[53]; //扑克代表的数值
string pokerName[53]; //扑克名
int money; //玩家钱数 int bet; //玩家的赌注
int pokerF[5]; //玩家手中的牌 F:Farmer L:Landlord
int pokerL[5]; //庄家手中的牌 F:Farmer L:Landlord
int pokerNumF; //玩家手中的牌数
int pokerNumL; //庄家手中的牌数
public:
Poker(); //构造函数,对牌初始化
void initPoker(); //洗牌,在每轮游戏开始前进行
string getPokerF(); //用字符串的形式返回玩家的牌
string getPokerL(); //用字符串的形式返回庄家的牌
int getSumF(); //返回玩家牌的点数,用以判断是否超过21点
int getSumL(); //返回庄家牌的点数
void farmerAsk(); //玩家要牌
C. 光标移动 time limit per test 1 second memory limit per test 256 megabytes input input.txt output output.txt 文本编辑器有n行,每行k个字符(显然光标有k+1个位置,标记为1..k+1.
有4个操作:
"Up": 光标将向上移1行,列不变。如果上一行字符太少,则光标跑到行末。 "Down": 光标将向下移1行,列不变。如果上一行字符太少,则光标跑到行末。 "Right": 光标向右移1格,操作不能在行末进行。 "Left": 光标向左移1格,操作不能在行首进行。 求出把光标从 (r1, c1) 移向(r2, c2)最小步数.
Input 第一行一个整数 n (1 ≤ n ≤ 100) . 第二行 n个整数a1, a2, ..., an (0 ≤ ai ≤ 105), 表示每行字符数. 第三行4个整数 r1, c1, r2, c2 (1 ≤ r1, r2 ≤ n, 1 ≤ c1 ≤ ar1 + 1, 1 ≤ c2 ≤ ar2 + 1).
<!DOCTYPE html> <html class="ui-mobile landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px"> <head> <title> </title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> <link rel="stylesheet" href="css/ui-media.css"> <link rel="stylesheet" href="css/ui-base.css"> <link rel="stylesheet" href="css/ui-apple.css"> <script src="js/zy_anim.js"> </script> <script src="js/zy_control.js"> </script> <script src="js/zy_tmpl.js"> </script> </head> <body class="ui-mobile-viewport" > <div id="page" class="ui-page ui-body-d ui-page-active ui-header-fixed" tabindex="0"> <div data-role="header" class="ui-header ui-bar-iphone " > <h1 class="ui-title" tabindex="0" role="heading" aria-level="1">Images</h1> <div class="ui-btn ui-btn-right ui-btn-corner-all ui-shadow ui-btn-a " οnclick="
nRF24L01+ Single Chip 2.4GHz Transceiver Product Specification v1.0 问题: 刚开始看的时候,overview中写的,在接收数据的时候,接收通道接收数据后,发送应答包的时候,需要发送一个地址,该地址是标明发送端发送是所使用的地址,
该地址是发送端而来的。那么,就不需要接收端地址,不知道接收通道地址是怎么使用。后面看了overview和MultiCevier就知道了。
TXmode,发送模式,配置要求就是TX_addr和通道0使用同一个地址,即使在接收应答包的时候,发送端是使用的通道0来接收应答包。
RXmode,接收模式,配置的时候,接收通道地址的需要在接收到数据包后,需要使用该接收通道地址作为发送地址发送一个应答包。
在PTX模式下,发送端接收应答包的时候,需要检验应答包的地址与发送端地址是否一致。所以要求发送端地址与接收通道地址一致。
Enhanced ShockBurstTM overview
Enhanced ShockBurstTM uses ShockBurstTM for automatic packet handling and timing. During transmit,
ShockBurstTM assembles the packet and clocks the bits in the data packet for transmission. During
receive, ShockBurstTM constantly searches for a valid address in the demodulated signal. When Shock-
BurstTM finds a valid address, it processes the rest of the packet and validates it by CRC.
今天我们来看一下Delphi的运算符:
Delphi的运算符分为:@, not, and ^的一元运算符;*, /, div, mod, and, shl, shr, as, +, -, or, xor, =, >, <, <>, <=, >=, in, and is为二元运算符
一、赋值运算符
对于Pascal的新手来说,Delphi的赋值运算符和其它常用编程语言的赋值运算符不大一样,需要用:=来表示。例如:
Number := 5;
二、比较运算符
对于Object Pascal来说,用=运算符来对两个表达式或两个值进行逻辑比较运算;用<>表示不等于运算符,这和其它语言用==、!=来表示有比较大的区别,新手比较容易搞错。
三、逻辑表达式
Pascal用and和or作为逻辑与和逻辑或的运算符,用not作为逻辑非的运算符。例如:
if A and B then //逻辑与
while A or B do //逻辑或
if not A then //逻辑非
A xor B //逻辑异或
A shl B //A的二进制向左移动B位,尾数补零
A shr B //A的二进制向右移动B位,首部补1 四、算术运算符 这里需要注意的是,在Pascal中,特意定义了针对整数除的运算符——div。在两个整数向楚时,自动截取余数取整;mod取余。主要使用在对整数操作中。x mod y = x - (x div y) * y;一个运行时错误是发生在当y为0时,对X/Y、X div Y、X mod Y的操作中。
很多人都使用过这款很方便的加密软件,只有几百K大小,但是对电脑新手来说很方便,但是安全性方面不提倡使用,只是比使用系统自带的隐藏文件要靠谱一点而已。
软件运行如下所示:
文件夹加密成功后在文件家里能看到的只有加密软件,另外还两个隐藏的文件要在控制面板里设置文件夹选项后才能看的到,
步骤:1、控制面板-文件夹选项-查看
2、勾选“显示所有文件和文件夹”,把“隐藏受保护的操作系统文件(推荐)”前的勾去掉
可以看到如下图(图二):
如果忘记了加密的密码,有两种方法可以使用:
一、打开winrar软件,在路径里面输入你加密的文件所在的路径,这样就可以看到加密过的文件了,目录的名字或者文件的名字可能略有差别,但是内容不变,直接复制出来就可以使用了,这种方法适用于不太多的文件,否则一个一个找很麻烦。
二、在D盘根目录下新建文件夹temp,将"文件夹加密.exe"这个加密程序拷贝一份到temp中,再随便拷贝个文件到temp中备用,然后运行加密程序,输入密码(这个密码一定要记住)进行加密,假设我们忘记加密密码的文件路径为"E:\test"下面,打开开始菜单,输入CMD,进入命令行模式,输入 copy d:\temp\Thumbs.dn\117789687 e:\test\Thumbs.dn ,按回车键,会有一条提示“覆盖 d:\temp\Thumbs.dn 吗?”,输入“yes”,按回车键。现在忘记加密密码的那个文件的加密密码就是你刚才加密d:
test 文件的密码了,直接输入这个密码就可以解密了。
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [applicationContext.xml] cannot be opened because it does not exist错误。但是用mvn clean package命令编译时成功的。web.xml配置的如下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
用google搜索一下(之前google用不了,用百度搜到蛋疼),发现是由于classpath不是指向resource路径,导致一直找不到文件。需要在classpath后面加个*,这样就解决问题了。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
通常PC在开机之后,会进入带有PC机厂商信息的BIOS画面,并且会显示出当前PC机的硬件信息,比如:内存大小,CPU信息等,它其实是PC机启动之后运行的第一段程序,它主要完成一些基本硬件初始化操作和硬件检测工作,保证拥有操作系统正常运行的软硬件环境,随后会加载并且启动操作系统。该段小程序是烧制到主板上的BIOS存储硬件里的。由此可见计算机系统在启动过程中必须依赖软硬件,在嵌入式系统中同样需要软硬件互相协调来完成启动过程。
1.嵌入式系统启动 - 硬件支持
在嵌入式系统中,通常并没有像 BIOS那样的固件程序,而是将用于引导系统的二进制映像文件(image文件)烧写到只读的ROM中,系统启动之后从ROM里加载并执行该映像文件。根据只读ROM类型的不同,启动方式也不尽相同。
嵌入式系统通常有两种启动方式:
(1)“硬盘”方式启动
所谓“硬盘”方式启动是指,启动程序被烧写在“硬盘”中,系统上电后CPU读取并执行“硬盘”中的指令数据,由于“硬盘”不支持随机寻址(支持向任意有效地址进行读写操作,硬盘里最小的寻址单元是扇区),并且读写速度太慢,通常是将“硬盘”中的引导程序指令数据拷贝到RAM(随机访问存储器)中,然后执行这些指令。
嵌入式系统中通常不使用PC机的硬盘作为文件存储器,而是使用类似硬盘的一些小容量Flash如Nandflash。S3C2440A处理器支持从Nandflash启动,这是由于S3C2440A Nandflash控制器中含有一个特殊的RAM – Stepping stone。
图2-38 Stepping stone原理图
当系统选择从Nandflash启动时,硬件会完成以下操作:
(a)通过Nandflash控制器将Nandflash中前4K的指令数据拷贝到Stepping stone中
(b)将Stepping stone所在地址0x40000000映射到0x0地址
(c)PC从0x0地址处取址执行
(2)ROM方式启动
以这种方式启动的系统通常会有一个专门用来存放启动程序的存储固件,当系统以该方式启动时,CPU直接从存储固件里运行启动程序。启动程序一般不会被擦除并且要求掉电时数据不能丢失,因此该存储固件通常是XIP(eXectute In Place片内可执行,代码不被压缩,并且支持随机寻址)类型的ROM(掉电非易失只读存储器)。嵌入式系统中经常使用Norflash作为启动程序存储固件。S3C2440同样也支持这种启动方式。
2.嵌入式系统启动 -软件支持
在嵌入式系统启动时,通常也有类似于BIOS的启动程序,该启动程序被称为Bootloader,由于Bootloader是被编译生成的,并且它的正确执行通常和系统硬件密切相关。
(1)二进制映像文件(image):
二进制映像文件是指烧写到ROM中的bin文件,也称为image文件。通常image文件是由编译器将源码编译而成的可执行二进制文件,源码中的语句,初始化变量,未初始化变量,和初始化为0的变量分别被编译成对应的操作指令和变量数据域,这些编译成的操作指令和变量数据域被链接器统一编址进image文件,作为image文件的输入。用户可以指定这些image文件的输入数据的属性,可以为只读的RO(Read-Only),可读写的RW(Read-Write)和初始化为0的ZI(Zero-Initial)。通常源码文件中含有以下属性数据段:
(a)只读属性RO的操作指令,如:控制语句,表达式
(b)只读属性RO的数据段,如:常量
(c)可读写属性RW的数据段,如:变量
(d)初始化为0的数据段ZI属性,如:初始化为0结构体
多个代码源文件具有相同属性的数据段为了方便存储器对其存储空间访问权限进行管理,通常被链接器放置在Image的相同位置,具有相同属性的输入数据段组成image文件的输出域。链接器允许用户指定每个image文件的输出域的起始地址。如图2-39所示。
图2-39image文件结构图
(2)RAM中的执行程序:
外部存储设备上的image没有被加载到内存中时,和普通文件一样,是不能被执行的,image要想被CPU执行,必须要被程序加载器Load到内存中,并且设置好执行环境。
由于执行程序是内存中的image文件,因此二者内容是相同的,但还是有一些差别:
(a)image文件是存储在外部存储设备里的(嵌入式系统中通常是ROM,如:Nandflash,Norflash),而执行程序只能运行在内存RAM中。
(b)程序中初始化为0的变量(ZI数据段,也称为BSS数据段)在image文件里是不存在的变量要想被当前程序访问必须指定一个有效的内存地址,而未初始化的变量通常被设置为0,因此全部为0的数据是没有必要放到image文件里的,这样反而增加了image文件的体积。
由此可见,image文件被加载到内存之后,还要为ZI段准备地址空间来存放初始化为0的ZI数据段。
ZI段准备操作如下:
l 准备ZI数据段地址空间
l 将空间内容清0
对于运行在操作系统中的程序,该项工作可由操作系统的运行环境(程序加载器)来帮之实现,而对于没有操作系统的裸机程序,这项工作只能由RO段的代码自己实现,它也是启动程序最主要的一项工作之一。
3.嵌入式系统启动过程
嵌入式系统启动过程就是指处理器从复位到进入操作系统或程序能够运行的状态。该过程是由系统加载引导程序(Bootloader)来实现的,它主要完成以下工作:
l 初始化必要硬件,如:关闭看门狗,初始化内存SDRAM,提供硬件执行环境
l 初始化C程序软件执行环境
l 将启动代码从ROM拷贝到RAM中
l 跳转到RAM里继续执行启动代码
(1)初始化必要硬件
(a)关闭看门狗
看门狗是许多嵌入式系统里带有的硬件装置,主要用于在外界环境,如:噪声,电磁干扰,系统错误等造成的系统故障时自动重启系统,恢复系统正常工作。通常在系统启动过程中,直接将其关闭,详情查看看门狗控制器章节。
(b)初始化内存
虽然程序可以在外部存储器ROM里执行,但是由于ROM是只读的,不能像内存一样执行写入操作,而在C程序中必须要求将变量安放到可以执行写入操作的内存中,因此在系统启动之前必须要对内存进行初始化。
(2)初始化C程序软件执行环境
(a)初始化C程序栈指针
在C程序执行过程中,要进行出栈,入栈操作,在C程序执行之前,必须要将栈指针初始化为有效内存地址。
(b)清零ZI段
1. 二维数组 TYPE array[row][column]; 在定义时row可以不指定,但column必须指定。例如: int arr1[3][2]={{1,2},{3,4},{5,6}}; 等价于: int arr1[][2]={{1,2},{3,4},{5,6}}; 2.指向二维数组的指针: TYPE (*parray)[column]; 在定义时,column必须指定,例如定义一个指向上面定义的二维数组的arr1[3][2]的指针: int (*parr1)[2]; parr1=arr1; 3.指针数组: TYPE *array[num]; 例如定义一个指针数组,包含三个int的指针: int *parr2[3]; int a,b,c; parr2[0]=&a; parr2[1]=&b; parr2[2]=&c; 4.指向二维数组的指针数组: TYPE (*parray[num])[column]; 其中column为二维数组的维度。num为指针的个数,定义时如果直接赋值的话,可以不指定num的大小。 例如定义一个指针arr1的指针数组,数组的大小为5: int (*parr1[5])[2]; parr1[0]=arr1; printf("%d",parr1[0][2][1]); // 输出为:6 另外一个例子: static const char _keyboard_lower[4][10]= { {'q','w','e','r','t','y','u','i','o','p'}, {'a','s','d','f','g','h','j','k','l'}, {'z','x','c','v','b','n','m',LITE_KEYSYM_BACKSPACE}, {LITE_KEYSYM_INPUT_METHOD,LITE_KEYSYM_INPUT_MODE,' ',LITE_KEYSYM_CAPS_LOCK,LITE_KEYSYM_ENTER}, }; static const char _keyboard_upper[4][10]= { {'Q','W','E','R','T','Y','U','I','O','P'}, {'A','S','D','F','G','H','J','K','L'}, {'Z','X','C','V','B','N','M',LITE_KEYSYM_BACKSPACE}, {LITE_KEYSYM_INPUT_METHOD,LITE_KEYSYM_INPUT_MODE,' ',LITE_KEYSYM_CAPS_LOCK,LITE_KEYSYM_ENTER}, }; static const char _keyboard_num[4][10]= { {'1','2','3','4','5','6','7','8','9','0'}, {'@','$','%','&','*','-','/','(',')'}, {'!
SQL中内连接和外连接
转载于:http://323229113.blog.163.com/blog/static/2185362820070172553209/
感谢作者。
总说:
左连接:保留左边全部行。按左边行顺序和右边比较是否相等。相等就连接成一行。可以多对多
右连接:保留右边全部行。按右边行顺序和左边比较是否相等。相等就连接成一行。可以多对多
内连接:不保留不相等的行。左右有相等的就连接,不相等的多去掉不要。可以多对多
如表 ------------------------------------------------- table1 | table2 | ------------------------------------------------- id name |id score | 1 lee |1 90 | 2 zhang |2 100 | 4 wang |3 70 | ------------------------------------------------- 以下均在查询分析器中执行 一、外连接 1.概念:包括左向外联接、右向外联接或完整外部联接 2.左连接:left join 或 left outer join (1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。 (2)sql语句 select * from table1 left join table2 on table1.id=table2.id -------------结果------------- id name id score ------------------------------ 1 lee 1 90 2 zhang 2 100 4 wang NULL NULL ///
MII (Media Independent Interface 介质无关接口)
MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包 括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是 时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。MII Management interface只有两条信号线。The configuration and status data is written/read to/from the PHY via the MDIO signal.
MII标准接口 用于连快Fast Ethernet MAC-block与PHY。“介质无关”表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。在其他速率下工作的与 MII等效的接口有:AUI(10M 以太网)、GMII(Gigabit 以太网)和XAUI(10-Gigabit 以太网)。 MII总线
在IEEE802.3中规定的MII总线是一种用于将不同类型的PHY与相同网络控制器(MAC)相连接的通用总线。网络控制器可以用同样的硬件接口与任 何PHY GMII (Gigabit MII)
GMII采用 8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps。同时兼容MII所规定的10/100 Mbps工作方式。
GMII接口数据结构符合IEEE以太网标准。该接口定义见IEEE 802.3-2000。
发送器 :
◇ GTXCLK——吉比特TX..信号的时钟信号(125MHz)
◇ TXCLK——10/100M信号时钟
◇ TXD[7..0]——被发送数据
◇ TXEN——发送器使能信号
◇ TXER——发送器错误(用于破坏一个数据包)
注:在千兆速率下,向PHY提供GTXCLK信号,TXD、TXEN、TXER信号与此时钟信号同步。否则,在10/100M速率下,PHY提供TXCLK时钟信号,其它信号与此信号同步。其工作频率为25MHz(100M网络)或2.5MHz(10M网络)。
接收器: ◇ RXCLK——接收时钟信号(从收到的数据中提取,因此与GTXCLK无关联)
◇ RXD[7..0]——接收数据
◇ RXDV——接收数据有效指示
◇ RXER——接收数据出错指示
◇ COL——冲突检测(仅用于半双工状态)
管理配置
◇ MDC——配置接口时钟 ◇ MDIO——配置接口I/O
定时器使用的程序。开始---》不断输入aaa 可以停止 继续。
引用:using System.Timers; //、、、、、、、、、、、、、、 public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += Form1_Load; } //新建定时器。要用System.Timers.Timer。 //不要用forms.Timer的定时器。这个不精准 System.Timers.Timer myTimer; void Form1_Load(object sender, EventArgs e) { myTimer =new System.Timers.Timer(2000);//定时周期2秒 myTimer.Elapsed += myTimer_Elapsed;//到2秒了做的事件 myTimer.AutoReset = true; //是否不断重复定时器操作 } void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { richTextBox1.Text = richTextBox1.Text + "\n" + "aaa"; } //开始按钮 private void button1_Click(object sender, EventArgs e) { myTimer.Enabled = true; //定时器开始用 //如果不写下面这句会有一个异常。 //异常:线程间操作无效: 从不是创建控件"
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# 处理地图画面活动块和元件的类。本类在
# Scene_Map 类的内部使用。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
# 生成显示端口
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
# 生成元件地图
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.
在我们编程中经常会遇到采用submit form表单提交时不进入action方法的问题,造成这一问题的原因有很多,有可能是你路径的问题,也有可能是你html中提交属性没设置好,我下面讨论的主要是在引用kindeditor时form表单提交不进入action方法的问题:
这个是我引用的kindeditor:
$(function () {
KindEditor.ready(function (K) {
var editor1 = K.create('#Information', {
cssPath: '../kindeditor/plugins/code/prettify.css',
uploadJson: '../kindeditor/asp.net/upload_json.ashx',
fileManagerJson: '../kindeditor/asp.net/file_Manager_json.ashx',
allowFileManager: true,
afterCreate: function () {
var self = this;
K.ctrl(document, 13, function () {
self.sync();
K('form[name=example]')[0].submit();
});
K.ctrl(self.edit.doc, 13, function () {
self.sync();
K('form[name=example]')[0].submit();
});
}
});
});
});
我原先在页面表单中提交的方式是直接设成submit属性:
<input class="button" id="sub" type="submit" value="提交" />
结果试了好多遍,代码始终提交不了,而且不进入控制器的action方法中
解决办法:
把submit属性改掉,设置为button的形式:
<input class="button" id="sub" type="button" value="提交" />
再用js编写提交代码:
$(function () {
FUSE 的工作原理如图所示。假设基于 FUSE 的用户态文件系统 hello 挂载在 /tmp/fuse 目录下。当应用层程序要访问 /tmp/fuse 下的文件时,通过 glibc 中的函数进行系统调用,处理这些系统调用的 VFS 中的函数会调用 FUSE 在内核中的文件系统;内核中的 FUSE 文件系统将用户的请求,发送给用户态文件系统 hello ;用户态文件系统收到请求后,进行处理,将结果返回给内核中的 FUSE 文件系统;最后,内核中的 FUSE 文件系统将数据返回给用户态程序。 其中,用户态文件系统通过fuse提供的函数库libfuse,向内核中的fuse文件系统注册自己的文件处理函数。
我们以一个简单的基于FUSE的用户态文件系统hello为例,来分析FUSE的内部实现。 用 户态文件系统hello的源码hello.c的部分如下所示:
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
}
int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &hello_oper, NULL);
}
fuse_operations是libfuse提供给用户层文件系统的机 构,供用户定义自己的文件操作函数;fuse_main()是libfuse提供给用户文件系统最重要的接口,通过这个函数,用户层文件系统可以将自己定义的fuse_operation注册为文件系 统的处理函数,并挂载该文件系统。
1、内核FUSE文件系统和用户态文件系统的通信
在加载fuse模块的过程中,要在内核中注册fuse文件系统,并生成fuse设备/dev/fuse。
/dev/fuse是内核里的fuse文件系统和用户态文件系统的通信媒 介。用户态文件系统通过读取/dev/fuse的内容,获取内核中fuse文件系统发来的请求;而内核中的fuse文件系统,则把请求写入/dev/fuse,等待用户态文件系统处理。
在用户态文件系统和内核中的fuse模块通过/dev/fuse进行通信时,不可避免的会有内存拷贝。fuse中没有使用传统的copy_from_user/copy_to_user,而是用get_user_pages和memcpy来代替。
2、FUSE用户态文件系统的挂载过程
挂载用户态文件系统,只需运行其生成的程序。在hello中,运行编译hello.c生成的hello即可。fuse_main将完成一切的注册和挂载过程,其中主要分为两个步骤:
WDK介绍与安装 如果你要开发驱动,你可以在我的另外一篇博文《VS2008+WDK 文件驱动过滤程序 开发环境配置》中找到VS2008+WDK+DDKWizard的配置方案,祝你工作愉快!
WDK是微软提供的DDK的最新版本,它已经可以支持到WINDOWS7的驱动开发了,其兼容情况如下:
· Microsoft Windows® 7 · Microsoft Windows Vista® · Microsoft Windows XP · Microsoft Windows Server® 2008 R2 · Microsoft Windows Server® 2008 · Microsoft Windows Server® 2003
WDK提供了系统设备驱动开发环境,测试环境,USB驱动开发工具,其中USB驱动开发工具DSF可以不安装,因为它不仅大,而且会造成系统不稳定。 它主要是用于仿真USB设备的。
完整安装WDK需要4.7G的空间。使用WDK不需要再使用DriverStudio,而且听说DriverStudio已经停止开发了,也不知真假。有人配置它出错,反正WDK自带WINdbg,在wdk安装目录下的debugger文件夹下,何苦不用呢。
如前文介绍的《……驱动开发环境配置》中所介绍的可以成功下载WDK,下载后,就是安装了。
1、虚拟光驱加载iso文件
2、如果没有自动启动,则运行KitSetup.exe
3、这是会出现安装界面,默认是什么都不安装,根据需要选择。我选择的是除了DFS以外的所有组件。然后下一步,就等着吧。
4、安装完成大约要半个多小时,完成后需要测试。开始菜单--》All Programs > Windows Driver Kits > WDK 7600.。。。 > Build Environments > Windows xp.
5、点击x86 Checked Build Environment
6、在弹出的cmd中等待,到可输入时,输入build -cZ 回车,就会开始测试了,根据你安装组件的不同,最长耗时预计是半个小时。
如果测试中没有任何警告和错误,那么恭喜你,安装WDK成功了~~
在web.xml中配置Spring,配置如下
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
在Servlet中通过WebApplicationContextUtils.getWebApplicationContext(getServletContext())获取WebApplicationContext对象为null。这是由于除了配置DispatcherServlet,还需要配置ContextLoaderServlet,否则无法获取WebApplicationContext。配置方法如下,在web.xml中加入
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
Language: Default Bridging signals Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 8574 Accepted: 4635 Description
对于一个二分图的完全匹配,请找出最多的边使其两两不相交。 Input
第一行为测试数据数t, 对于每组数据,第一行为匹配数 p < 40000, 接下来p行,每行1个数a[i],表示左边第i个端点与右边第a[i]个端点相连 Output
对每组数据,输出一行ans,表示最大不相交匹配数 Sample Input
4 6 4 2 6 3 1 5 10 2 3 4 5 6 7 8 9 10 1 8 8 7 6 5 4 3 2 1 9 5 8 9 2 3 1 7 4 6 Sample Output
3 9 1 4 Source
在objects安装目录下 ----》tools文件夹-----》Register_VisualStudio.vbs 运行
这个要修改的文件在framework-res.apk里
1.反编译不多说
2.打开xml/power_profile.xml文件
3.我们可以看到一般我们都是这个样子的:
01. <?xml version="1.0" encoding="UTF-8"?>
02. <device name="Android">
03. <item name="none">0</item>
04. <item name="screen.on">0.1</item>
05. <item name="bluetooth.active">0.1</item>
06. <item name="bluetooth.on">0.1</item>
07. <item name="screen.full">0.1</item>
08. <item name="wifi.on">0.1</item>
09. <item name="wifi.active">0.1</item>
10. <item name="wifi.scan">0.1</item>
11. <item name="dsp.audio">0.1</item>
12. <item name="dsp.video">0.1</item>
13. <item name="radio.active">1</item>
14. <item name="radio.scanning">0.5</item>
15. <item name="gps.on">1</item>
16. <array name="radio.on">
17. <value>0.2</value>
18. <value>0.1</value>
19. </array>
20. <array name="cpu.speeds">
21. <value>400000</value>
22. </array>
23. <item name="cpu.idle">0.1</item>
说明:项目里webservice借口上传数据出异常 日志打印报错类似于标题那种。开始的解决方法是JS正则去掉非汉字、数字、英文、标点符号。后来上网查了下找到下述解决方法。
--------------------分割线---------------------------------
以下内容转自:http://hi.baidu.com/godtrip/item/90c1a4eec422eb0d560f1d8a
java做WebService接口上传数据,传输格式利用XML来传输。
XML不支持Unicode编码的字符串。会导致如下问题:
the char 'ox1e' after '' is not a valid xml character
解决方法是过滤字符串里的 'ox1e' .
/*去掉XML 不认可的字符0x0-0x20*/ //0x1e
public static String DECODE(String in) { StringBuffer out = new StringBuffer(); // Used to hold the output. char current; // Used to reference the current character. if (in == null || ("".equals(in))) return ""; // vacancy test. for (int i = 0; i < in.length(); i++) { current = in.
原文地址:http://blog.csdn.net/fly_buf/article/details/6367338
由于在svn的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法。
一般通过删除SVN客户端的账号配置文件来重新更换用户名和密码。
在window xp下面他们的位置在系统盘的 Documents and Settings/计算机用户名/Application Data/Subversion/auth/文件夹中,把里面的所有文件删除。
但是,我安装的是Win7。不能访问 C:/Documents and Settings 文件夹。提示没有权限。
找到文章说,Win7已经改变了用户数据文件的存放文件夹。我找到了以下的文件夹:
C:/Users/Tommy.Wu/AppData/Roaming/Subversion/auth/
于是把下所有的文件夹删除。
到Eclipse 中重新更新SVN, 提示出了用户名和密码的框。
一种简单的方法:右击-TortoiseSVN-Setting
在Saved data 中将Authentitaion data给clear掉就行了!
将java web工程部署到tomcat中,启动tomcat打开jsp页面出现org.apache.jasper.JasperException: java.lang.NullPointerException错误。这是由于项目中build path中加载的一些包与tomcat中的包重复,在项目中删除对应的包就行。
之前出现另外一种类似的情况,也是提示org.apache.jasper.JasperException: java.lang.NullPointerException错误。是通过ftp登录tomcat所在服务器,直接修改web工程中的jsp页面,然后重启tomcat。这时tomcat没有重新编译对应的jsp文件,导致没有重新生成class。需要将jsp文件下载到本地进行修改,再上传到服务器上覆盖原来的文件,重新启动tomcat。
一、什么叫用例图 1. 用例图的含义 • 由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例 图。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。 • 要在用例图上绘制一个参与者(表示一个系统用户),可绘制一个人形符号。参与者和用例之间的关系使用带箭头或者不带箭头的线段来描述,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者。 在用例建模中,为了更加清楚的描述用例或者参与者,会使用到注释。 2. 用例图的作用 用例图是需求分析中的产物,主要作用是描述参与者和用例之间的关系,帮助开发人员可视化的了解系统的功能。借助于用例图,系统用户、系统分析人员、系统设计人员、领域专家能够以可视化的方式对问题进行探讨,减少了大量交流上的障碍,便于对问题达成共识。 用例图可视化地表达了系统的需求,具有直观、规范等优点,克服了纯文字性说明的不足。 用例方法是完全从外部来定义系统功能,它把需求和设计完全的分离开来。我们不用关心系统内部是如何完成各种功能的,系统对于我们来说就是一个黑箱子。 二、用例图的构成要素 1. 参与者 参与者( Actor )是指存在于系统外部并直接与系统进行交互的人、系统、子系统或类的外部实体的抽象。 每个参与者可以参与一个或多个用例,每个用例也可以有一个或多个参与者。 在用例图中使用一个人形图标来表示参与者,参与者的名字写在人形图标下面。 2. 参与者间的关系 由于参与者实质上也是类,所以它拥有与类相同的关系描述,即参与者与参与者之间主要是泛化关系(或称为 “ 继承 ” 关系)。 泛化关系的含义是把某些参与者的共同行为提取出来表示成通用行为,并描述成超类。 泛化关系表示的是参与者之间的一般/特殊关系,在UML图中,使用带空心三角箭头的实线表示泛化关系 。 3. 系统边界 在项目开发过程中,边界是一个非常重要的概念。这里说的系统边界是指系统与系统之间的界限。通常我们所说的系统可以认为是由一系列的相互作用的元素形成的具有特定功能的有机整体。 系统同时又是相对的,一个系统本身又可以是另一个更大系统的组成部分,因此,系统与系统之间需要使用系统边界进行区分开来。我们把系统边界以外的同系统相关联的其他部分,称之为系统环境。 三、用例的重要元素 1. 识别用例 任何用例都不能在缺少参与者的情况下独立存在。同样,任何参与者也必须要有与之关联的用例。所以识别用例的最好方法就是从分析系统参与者开始,在这个过程中往往会发现新的参与者。 可以通过以下问题来寻找用例: (1)参与者希望系统提供什么功能?
(2)参与者是否会读取、创建、修改、删除、存储系统的某种信息?如果是的话,参与者又是如何完成这些操作的?
(3)参与者是否会将外部的某些事件通知给系统?
(4)系统中发生的事件是否通知参与者?
(5)是否存在影响系统的外部事件。
????
php现状及未来发展趋势: 1.全球5000万互联网网站中,有60%以上使用着PHP技术; 2. 2010年PHP从业人数将增加42%,远超JAVA的13%和.NET的24%; 3. PHP是全球五大最受欢迎的编程语言之一,并且是唯一入选的脚本语言; 4. 国内80%以上的动态网站使用PHP开发; 5. AlexaTOP500中国网站排名,有394家使用了PHP技术,比例为78.8%。
PHP以其灵活高效等特点实现了各种终端和平台的互联网应用,源于其具有如下特点: 1. 基于Web量身定制 2. LAMP架构安全稳定 3. 简单快速,扩展性强 4. 企业级应用发展迅速 在与其他同类编程语言的比较中,PHP具有开发速度快、运行效率高、安全性好、可扩展性强、开源自由等特点;而回顾PHP近10年来的发展过程、展望未来互联网行业的发展趋势,我们可以得出结论:PHP的发展势头不可阻挡,必将成为未来WEB开发领域的主流技术体系。 PHP就业现状 随着IT业和互联网的超速发展,企业对PHP程序员的需求也大量增加,PHP程序员和招聘岗位的供求比例是1:40,很多公司半年都招不到一个合适的PHP程序员。这个岗位是程序员中最火的,这种严重供不应求的局面在未来几年中将愈演愈烈。
虚拟机装了个系统,不过由于安装数据库的原因,只能装到C盘,C盘空间已不足,想增大C盘容量,又不想重装,谷歌之后尝试使用下面的方法 1:关闭虚拟机,新建一个虚拟硬盘,并挂载上去 2:挂载一个PE工具,使用ghost进行分区对拷 3:使用对拷后的分区硬盘作为系统启动首选硬盘 专业云主机提供商 珠海亿云科技 http://www.onecompu.com
最近双色球比较热闹,因为河南1彩民独中双色球3.6亿巨奖! 《媒体报道:2009年10月8日,国庆长假结束前的最后一天,在这个注定要被写进中国彩票史的日子,河南省安阳市成为了全国瞩目的焦点。当期中国福利彩票“双色球”第2009118期开奖,全国中出93注头奖,单注奖金409万元,河南一神勇彩民一人独得其中88注头奖,中奖总金额高达3.599亿元,在时隔286期后,一举改写了“甘肃神话”,刷新了中国彩票新纪录。 》 最近网上很多网民对此议论纷纷,这次传统媒体也开始有了质疑声音:《齐鲁晚报:公众对3.6亿巨奖的怀疑不能漠视》 。双色球能猜中吗?本篇博文并不是针对如何猜中双色球的评论,我的能力和知识也无法去评论,当然,作为一个对数字偏爱的人,当然会研究研究双色球这些数字啦! 有媒体曾经采访过沈老师,还说:沈浩老师一直带领着他的研究生从事双色球研究。哈哈!!! 下面我们就一起来挖挖双色球! 要挖双色球,首先要获得双色球数据。双色球网站:www.zhcw.com,往期回顾——>常规项目表,时间:采集日期2009年10月12日。 建议:大家用IE浏览器,找到常规项目表,Ctrl+C,然后Ctrl+V,收集到Excel里面,自从有了双色球游戏后,从03年到09年,近7年时间,共开出944期双色球! 我们能猜中双色球吗?基于常识回答:肯定猜不中,如果能猜中,国家没法玩这个游戏,如果能猜中,他会告诉你,不可能的事情;所以,我们要有基本的科学素养,但是很多人连基本的科学素养的没有! 上面这张表就是采集下来的944期双色球数据,看到没有,红色那期就是买中3.6亿的那组号码啦!我们首先删除不用的字段,保留ID期号,记住一定要有ID期号,这是数据的关键字。从数据中我们看到数据已经排好序了,已经没有出球顺序信息了。 我们也删掉蓝球No7,因为如果能够猜中红球,多买16注一定中一等奖!所以抓住主要矛盾不研究蓝球,只研究1-33个编号的红球,字段No1到No6。 这里我们假设:双色球数据是干净的,没有数据质量问题! 双色球数据天生适合数据挖掘,因为数据挖掘技术就是从数据中发现知识的过程,我们对双色球一点理论知识都没有,只好挖呗! 数据挖掘技术就是从数据中寻找隐藏在数据中的模式、趋势和相关性! 假设:双色球如果有规律,944期中应该呈现规律!(记住:双色球没有规律,但我们的商业不会像双色球那样没有规律) 首先,我们把Excel采集到的数据导入SPSS软件中,实际上我们现在整理的双色球数据是一张报表数据,我们需要把它转换成为交易数据集,也就是商业自动化采集的数据! 数据挖掘往往都是从数据库数据中挖的,记住:从来我们不是为了数据挖掘而收集数据,而是商业自动化导致海量数据存储,需要数据挖掘发现知识!发现分析模型,商业规则! 这里我们用SPSS17.0数据重组技术,把数据转换成交易数据集!(现在可以用博易智讯提供的17.0版本,因为是多语言版本,所以可以随心所欲用英文或中文界面和输出了) 这时候数据已经转换成了交易数据集,过去一期数据占一行六列,现在数据是一期占一列六行; 下面,我们开始进行数据挖掘! 这里我们采用Clementine挖掘软件工具,(前段时间听博易智讯的马博士说,Clementine已经有了13.0版本,不过我现在采用8.1版本来操作) 用SPSS类型数据源节点连上数据,当然要读取交易数据集,然后连上“类型”节点,注意,不同版本可能有不同的结果,8.1版会把Trans1字段认为是数值型的,但我们知道双色球1-33个红球,没有1+2=3,只是标记,所以要人工设定为“集合”类型,然后连上“过滤”节点,主要目的是保留ID字段和Trans1字段,删除id1和索引1字段,因为不考虑出球顺序,只要有ID字段和Trans1字段信息全部保留,记住这时候我们也把Trans1字段改名成字段P,方便记忆。 当完成这个基础工作后,我们就可以连上“设为标志”字段,同时要按照ID汇总,另外,如果某期出现这个号码,则是1,否则是0; 当数据流流到设为标志字段后,我们已经把交易数据集转换成为了分析数据集,一个0-1数据集; 此时,我们并不关系哪个球出现多少次,我们关系的是哪六个球经常一起出现!从上面的数据集角度看,我们并不需要关心哪个字段列分析,我们是希望横着分析,行里面的数据经常出现! 其实我们在市场研究和经营分析领域经常会碰到类似的数据结构,比如:移动公司某个手机号码,在33个业务中定制了哪6个业务;在购物篮数据中,33个物品哪6个商品经常被一起购买;市场研究的多项选择题,33个选项中最多选6个等等。 象这种类型的数据结构都可以采用Link Analysis叫做连接分析,博客上有个朋友提问什么是连接分析,其实一直想回答,但网上有很多描述不想赘述,正好我用这个数据来描述什么是link Analysis。 连接分析,也就Link Analysis,是一种关联分析方法,Link Analysis is the examination of the linkages between effects in a complex system. Analysts typically employ a variety of techniques including OLAP, associations, sequences, clustering, and most important, graphics to examine the relationships between entities in a complex system.
IIS或WEB连接数指同一时间服务器可以响应的访问请求,可以简单的理解为允许多少个浏览器窗口同时访问您的站点,比如说:100个IIS连接数就可以有100个浏览器窗口同时与服务器连接。 当一个网页被浏览,服务器就会和浏览者的浏览器建立连接,每个连接表示一个并发,这个连接在从服务器上读取信息时存在,读取结束时,一般即自动关闭。每个浏览者,访问某站点时,可能会占用1至多个连接,当页面包含很多图片,图片并不是一个一个显示的,服务器会产生出多个连接同时发送文字和图片以提高浏览速度。如果页面中的图片越多那么服务器的并发连接数量就越多。当图片或页面被服务发送后服务器就关闭连接用于和其他请求者建立连接。每次并发几乎是瞬间完成一般在几个毫秒和几十毫秒之间。
减少弹出窗口是有效提高在线人数的做佳方法、另外也要注意和其它网站作友情连接时尽量不要调用本站的代码或图片。对于一般网站,基本上都在同一浏览器窗口进行链接访问,很少用弹出窗口,一个访问者就只占一个IIS连接数,正常情况50个IIS可保证25-40人同时在线。而一些像论坛、江湖社区这样的程序,访问者通常都是开2-3个窗口访问,150个IIS才能保证50-75人同时在线。
所有基于IIS的WINDOWS类服务器同时连接数都是有限的,连接过多将直接导致服务器不稳定、掉线。严重的还会导致服务器IIS进程中断甚至整个操作系统崩溃。Linux的服务器也是同样类似。
可以说IIS连接数才是虚拟主机性能最直接的标准。要注意的是IIS连接数并不是日访问人数,IIS连接数是指同一时间的最大响应数,比如IIS连接数是60个,则表示一秒左右的时间内能响应的最大请求数是60,网站日访问量要大的多,如果访问量比较平均的话,日访量可以超过数千、甚至上万
Windows 2000专业版或Windows XP专业版操作系统中IIS最多允许10个客户端的连接,在Windows 2000服务器版或Windows 2003服务器版操作系统中不存在这种连接限制问题。
一、MetaEdit22.exe
安装后开始-----程序-----Administrative Tools-----MetaEdit
打开后在最左边选择LM\W3SVC
然后在右边那一堆东西中找到MaxConnections(最大连接)
data那就是你的最大连接数了,自己改吧
最大限制是2000000000
另外你改为-1就是不限制了
我们知道Windows 2000专业版或Windows XP专业版操作系统中IIS最多允许10个客户端的连接,在Windows 2000服务器版或Windows 2003服务器版操作系统中不存在这种连接限制问题。
Microsoft提供了一个管理IIS的小工具MetaEdit,MetaEdit工作在Windows NT4.0、Windows 2000上,我发现它在Windows XP上也能正常工作,另外,MetaEdit只能管理II4.0、IIS5.0或更高版本的IIS。
下面利用这个工具突破Windows XP专业版IIS客户端连接限制:
http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe
然后,执行MtaEdt22.exe按向导提示完成MetaEdit安装。
最后,在MetaEdit中设置客户端连接限制的参数。
安装MetaEdit完毕后,在开始菜单的程序组Administrative Tools下点击MetaEdit 2.2运行,出现窗口,在窗口的左边将树展开至LM \ W3SVC,直接在W3SVC文件夹上单击,选择右边列表中Name为MaxConnections的项,双击后,出现对话框
整数的逆序输出,递归算法:
#include "stdafx.h" #include<iostream> using namespace std; void reverse (int x){ int t_reserved = x; //临时保存x的值,因为x的值还要递归中使用 if (x==0) return; //如果是0,则程序结束 else if (x>0&&x<10) cout<<x; //如果是个位数,则输出结果 else cout<<x-(x/10)*10; //如果是多位数,则输出最后的一位 reverse(t_reserved/10); //递归运算 } int main() { int a; cout<<"请输入一个整数:"<<endl; cin>>a; reverse(a); return 0; } 非递归算法,很搓~~
#include <iostream> using namespace std; int weiShu(const int n) //求出数的位数 { int base=1; for(int i=1;;i++) { if(n>=base&&n<=base*10) return i; base*=10; } } void reverse(int n,int a[]) //逆制,并将其存入数组 { int acount=1; int num=weiShu(n); for(int i=1;i<num;i++) acount*=10; // cout<<acount<<endl; for(int j=0;j<num;j++) { if(n<10) //如果是个位数,直接赋值,结束 { a[j]=n; return; } a[j]=n/acount; n=n-a[j]*acount; acount/=10; } } int main() { int inPut; //想要输入的数 int temp[100]={0}; //临时数组,存入要存的数 cout<<"
WEB项目中脚本的位置是十分重要的,尤其在用户体验方面。 开发过程中可能需要动态创建hmtl控件,如使用提交服务器方法来实现实在是体验差,当前页面数据保存也是个麻烦事,jquery提供了clone()方法,其中有一个参数:
true:克隆指定对象所以内容,包括控件,值,事件。
flse:克隆内容,事件不会克隆。
实例如下:
//添加任务
function addTask() {
var taskNum = $(".divTask").size();
if (taskNum >= 5) {
dlg.Msg.Inf("最多只能添加5个预习任务");
return;
}
var theNextUploaderSerialNo = fileUploaderNum + 1;
//克隆模板
var $divTaskTemplate = $("#divTaskTemplate").clone(true).removeAttr("id").addClass("divTask").show(); //定义ID
$("#uploadFile", $divTaskTemplate).attr("id", "uploadFile" + theNextUploaderSerialNo);
$("#uploadFileShowPanel", $divTaskTemplate).attr("id", "uploadFileShowPanel" + theNextUploaderSerialNo);
var $theLastDivTask = $(".divTask:last");
var isNeedCopyData = $("#toolAdd :checked", $theLastDivTask).size() > 0 ? true : false;
if (isNeedCopyData) {
updateData($theLastDivTask, $divTaskTemplate);
}
//插入到页面 $("#divTaskTemplate").before($divTaskTemplate);
//绑定事件跟序号排列
bindUploadEvent(theNextUploaderSerialNo);
$("
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。
为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(13~0),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。
为了让大家了解STM32的bxCAN的接收过滤机制,首先大家需要了解几个概念。
2 几个重要的概念 2.1 过滤器组 STM32总共提供14个过滤器组来处理CAN接收过滤问题,每个过滤器组包含两个32位寄存器CAN_FxR0和CAN_FxR1组成,在设置为屏蔽位模式下,其中一个作为标识符寄存器,另一个作为屏蔽码寄存器。过滤器组中的每个过滤器,编号(叫做过滤器号)从0开始,到某个最大数值(这时最大值并非13,而是取决于14个过滤器组的模式和位宽的设置,当全部配置为位宽为16,且为标识符列表模式时,最大编号为14*4-1=55)。
2.2 过滤器的过滤模式 STM32提供两种过滤模式供用户设置:屏蔽位模式和标识符列表模式。
2.2.1 屏蔽位模式 为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
2.2.2 标识符列表模式 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。 在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。
2.3 过滤器的位宽 每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:
●1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
●2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
2.3 过滤器组的过滤模式和位宽设置 过滤器组可以通过相应的CAN_FMR寄存器(CAN过滤器主控寄存器)配置。但是不是什么时候都可以直接配置,在配置一个过滤器组前,必须通过清除CAN_FAR寄存器(CAN过滤器激活寄存器)的FACT位,把它设置为禁用状态。然后才能设置或设置过滤器组的配置。
通过设置CAN_FS1R(CAN过滤器位宽寄存器)的相应FSCx位,可以配置一个过滤器组的位宽。通过CAN_FM1R(CAN过滤器模式寄存器)的FBMx位,可以配置对应的屏蔽/标识符寄存器的标识符列表模式或屏蔽位模式。(见后续3.2节)
应用程序不用的过滤器组,应该保持在禁用状态。
关于过滤器配置,可参见下图:
图1
2.4 过滤器匹配序号 一旦收到的报文被存入FIFO,就可被应用程序访问。通常情况下,报文中的数据被拷贝到SRAM中;为了把数据拷贝到合适的位置,应用程序需要根据报文的标识符来辨别不同的数据。bxCAN提供了过滤器匹配序号,以简化这一辨别过程。
根据过滤器优先级规则,过滤器匹配序号和报文一起,被存入邮箱中。因此每个收到的报文,都有与它相关联的过滤器匹配序号。
过滤器匹配序号可以通过下面两种方式来使用:
● 把过滤器匹配序号跟一系列所期望的值进行比较
● 把过滤器匹配序号当作一个索引来访问目标地址
对于标识符列表模式下的过滤器(非屏蔽方式的过滤器),软件不需要直接跟标识符进行比较。
对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进行比较即可。
在给过滤器编号时,并不考虑过滤器组是否为激活状态。另外,每个FIFO各自对其关联的过滤器进行编号,如下图:
图2
2.5 过滤器优先级规则 根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
● 位宽为32位的过滤器,优先级高于位宽为16位的过滤器
● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高
如下图:
图3
如上图,在接收一个报文时,其标识符首先与配置在标识符列表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤器的序号(这时为4)被存入过滤器匹配序号中。如同例子中所显示,报文标识符跟#4标识符匹配,因此报文内容和FMI4被存入FIFO。
如果没有匹配,报文标识符接着与配置在屏蔽位模式下的过滤器进行比较。
如果报文标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对软件有任何打扰。
3 与过滤器相关的寄存器 3.1 CAN 过滤器主控寄存器 (CAN_FMR) 地址偏移量: 0x200
就像编译Java源程序需要设置环境变量一样,使用微软的Visual C++同样需要设置环境变量。 例如,在我的电脑里, cl.exe 和link.exe在C:\Program Files\Microsoft Visual Studio\VC98\Bin下, rc.exe在C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin下 将这两个目录添加到环境变量path中, 然后打开命令行cmd,分别测试cl、link、rc命令,如果有正确结果就说明设置成功。 cl命令举例 cl hello.c /out:hello.exe hello.obj
Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观。你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中。
Action bar的主要目的是:
1. 提供一个用于识别应用程序的标示和用户的位置的专用空间。
这个空间的左边是应用的图标或logo,以及Activity的标题。但是,如果是像当前选择的标签这样的标识当前View对象的导航标签,你可以选择删除Activity的标题。
2. 在不同的应用程序之间提供一致的导航和视觉体验。
Action bar提供了用于Fragment间切换的内置导航标签。它还提供了一个用于替换导航模式或优化当前视觉效果(如按照不同条件排序的列表)的下拉列表。
3. 突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。
对于关键的用户操作,你能够通过把选项菜单项作为操作项直接放到操作栏中,从而提供快捷的访问。操作项目还能提供一个操作窗口,这个窗口给更直接的操作行为提供一个嵌入的窗口部件。没有改进成操作项的菜单项在溢出菜单中还是有效的,用户既可以使用设备上的菜单按钮(设备上有按钮的时候),也可以使用操作栏中的溢出菜单按钮(当设备上不包含菜单按钮时)来显示这些操作项目。
上面的总结一下:Action bar就是替换3.0以前的tittle bar和menu。
图1. Honeycomb Gallery应用中的操作栏,从左边开始,依次是logo、导航选项标签和操作项(在右边插入的一个悬浮菜单按钮)。
Note: If you're looking for information about the contextual action bar for displaying contextual action items, see the Menu guide.
Action Bar Design For design guidelines, read Android Design's Action Bar guide.
添加Action Bar 从Android3.0(API级别 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity(或者是这些Activity的子类)中,当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一。如:
<manifest ... > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /> ... </manifest> 在这个例子中,应用程序要求最小的API版本级别是4(Android 1.
在用二维数组名作为参数传递时容易出现Segmention Error。这是因为不能正确为二维数组中元素寻址的问题,正确的方法如下:
1. 用指向一维数组的指针变量,如下例子所示:
#include <stdlib.h> #include <stdio.h> #define N 4 void testArr(int (*a)[N], int m) { for(int i = 0; i < m; ++i) for(int j = 0; j < N; ++j) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); } } int main() { int a[2][N] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; testArr(a, 2); } int (*a)[N] 表示指向一维数组的指针变量,即a所指向的对象是含有4个整型元素的数组。注意 () 不能少,若定义成: int *a[N] 则表示有一个一维数组a[N],该数组中的所有元素都是 (int *)类型的元素。
十二、如果遇到如下错误: FAILED java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI:***
就是URI里边出现了不允许出现的字符,比如冒号:之类的,操作系统不允许的文件命名字符。详细的可以根据提示的部分(星号部分)来进行grep匹配查看。消除掉就可以解决了。
十三、遇到tasktracker无法启动,tasktracker日志报错如下:
ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.net.BindException: Address already in use ***
是端口被占用或者已经有相应的进程启动了,这时候你先停止集群,然后使用ps -aux | grep hadoop 命令,来看看相关的hadoop进程,把hadoop相关的守护进程kill掉即可。
十四、遇到datanode无法启动的情况,datanode日志报错如下:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: No locks available 网上有许多说需要format,个人感觉是扯淡,因为我同样的添加节点,添加的其他节点没有问题,只有一个有问题,所以问题一定不在是否format身上,而且如果format后hdfs内的数据就会全部丢失,我也不会去尝试这种方法。详细看了一下,apache的邮件列表有这样一段内容:
No locks available can mean that you are trying to use hadoop on a filesystem that does not support file level locking. Are you trying to run your name node storage in NFS space?
pt-online-schema-change的概述:alter a table's structure without blocking reads or writes.Specify the database and tablein the DSN.Do not use this tool before reading its documentation and checking your backups carefully. DSN:Data Source Name(数据库源名称) 工作原理是创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表 中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认 动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具 在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表(转自飞鸿大哥的) 关键参数介绍: 这里有两个参数需要介绍一下: --dry-run 这个参数不建立触发器,不拷贝数据,也不会替换原表。只是创建和更改新表。 --execute 这个参数的作用和前面工作原理的介绍的一样,会建立触发器,来保证最新变更的数据会影响至新表。注意:如果不加这个参数,这个工具会在执行一些检查后退出。这一举措是为了让使用这充分了解了这个工具的原理,同时阅读了官方文档。 实例: use test;
set names gbk;
CREATE TABLE baike_student( `userid` int(11) NOT NULL DEFAULT '0', `username` varchar(12) NOT NULL DEFAULT '', PRIMARY KEY (`userid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='百科学生表'; 现在有加一个字段,code字段: pt-online-schema-change --lock-wait-time=120 -uzsd -p'zsdzsd' -S /data/3307/mysql.
一、结构体定义方法 1、 struct myStruct {
int ;
}; 编译出错:
error C2208: “int”: 没有使用此类型进行定义的成员 2、但如果是在结构体中放一个结构体的声明,那么是编译通过的 struct myStruct {
int a;
};
struct myStruct1
{
struct myStruct;
}; 它等价于:
struct myStruct {
int a;
};
struct myStruct1
{
struct myStruct a;
}; 只不过前者是不同通过名字访问的,那么它的访问方法是什么呢?
二、获得无名成员的方法 前提是:要把无名成员放在结构体中的第一个
struct myStruct1 myStructInstance;
struct myStruct* data = (struct myStruct1*)myStructInstance;
连续背包(bag)
【问题描述】
从T组物品中选出一些物品,放入背包中,求剩余空间的最小值。
限制条件:从每组物品中挑选物品必须要选取连续的一段。就是说,如果这组物品共有n个: 物品1、物品2、物品3、…、物品n,那么只能选取物品i、物品i+1、…、物品j,其中1<=i<=j<=n,或者不选。
【输入】
第一行为两个用空格隔开的正整数v和T。表示背包的空间和物品的组数。
接下来有T行,每行先是一个正整数ni,表示这组物品有ni个,然后ni个正整数,表示每个物品的大小。
【输出】
仅一个数,表示剩余空间的最小值。
【输入输出样例】
bag.in
100 3
3 7 6 8
2 80 70
4 101 108 103150
bag.out
6
【输入输出样例解释】
第1组选6、8,第2组选80,第3组不选。
【限制】
60%的数据满足:1 <= ni <= 10
100%的数据满足:1 <= ni <= 100,1<=v<=5000,1<=T<=10
对每一段背包
再对各段背包
注意单步中Vmax=V[i-1]+sum[ni]
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<cmath> #include<functional> #include<algorithm> using namespace std; #define MAXNI (100+10) #define MAXV (500000+10) #define MAXN (10+10) int T,n,v,sum[MAXNI]={0},a[MAXNI],A[MAXN][MAXV]={0}; bool f[MAXN][MAXV]={0}; int main() { freopen("
答案: 利用“欧拉公式” 1+1/2+1/3+……+1/n =ln(n)+C,(C为欧拉常数) 具体证明看下面的链接 欧拉常数近似值约为0.57721566490153286060651209 这道题用数列的方法是算不出来的 Sn=1+1/2+1/3+…+1/n >ln(1+1)+ln(1+1/2)+ln(1+1/3)+…+ln(1+1/n) =ln2+ln(3/2)+ln(4/3)+…+ln[(n+1)/n] =ln[2*3/2*4/3*…*(n+1)/n]=ln(n+1) 转载于:https://www.cnblogs.com/593213556wuyubao/archive/2012/10/24/2737502.html
前做成了启动盘,能脱离光盘的不便重装系统,最近帮别人重装系统的时候,通过u盘启动PE系统的时候突然断电,导致U盘暂时瘫痪,通过别的机器,插入U盘打开出现“磁盘i: 未被格式化”的提示,要求进行 U盘格式化,但是U盘里面存储了很多重要的数据肿么能随便格式化,于是走上探索如何 恢复U盘数据。 提示:磁盘未被格式化 很多时候在对U盘进行数据传输的时候,突然拔掉,活动断电,或者死机,都会导致u盘出错,打不开出错,提示“磁盘X:未被格式化”,如果大家也出现这样的请求,不用过于焦虑,因为其实问题解决起来也不是很难,分析一下,往往是是引导扇区破坏了导致出错,DBR受损!以下就是针对扇区破坏恢复内部数据的,也可以整个U盘恢复:
解决方法一 通过各种数据恢复软件,进行数据恢复。 推荐指数:★★★
这是最基本的数据拯救办法,大家不论是硬盘还是u盘 出错打不开或者有误删数据 ,也可以通过此类软件,进行恢复。因为u盘只是扇区破坏了,里面的数据是完好无损的,所以就可以通过软件检测出来然后提取出来就ok了。
在这推荐大家用用easyrecover,因为是免费得,也是支持raw格式(出错后,大家查看u盘属性,会显示让我格式),而且功能还是比较强大的,比较好用,dataexplore也非常不错,可视化视图,感觉更容易操作和辨别,如果大家有注册的的话就推荐dataexplore,如果是没有的还是吃免费的easyrecover
U盘文件系统各县显示为RAW 下面是用dataexplore,打开的:选择第三项,选择u盘,确定:
用dataexplore恢复U盘数据
扫描结束后,数据基本出来了,大家就选择自己重要的资料,注册版的在选好的文件,右键 提取文件就可以了:
dataexplore扫描U盘 如果大家用easyrecover的话,操作如下:点击数据恢复,在点击高级数据,选择你的u盘,然后在高级里面选择“文件系统类型”有fat32 fat16 ntfs 大家想想原来的是什么来格式硬盘或者u盘的,不行就多试一两遍,u盘一般fat32比较多把~~然后点击下一步,扫描完之后会显示里面的内容,因为数据本来就在里面,没被破坏,所有直接提取一般都可以打开,没什么问题,已经删除的文件则可能提取后打开出错~
用EasyRecovery恢复U盘数据 这样操作后,基本需要数据都保存好了,大家可以对u盘进行格式化,然后直接把提取出来的数据再复制回u盘内。
解决方法二 ghost镜像备份,大家也可以试试osGhost 软件进行备份,其对损坏磁盘识别能力强一点~:
osGhost 软件进行备份
(我的u盘用ghost办法不行,所以后来我尝试用ultraiso,把制作成硬盘映像,把里面的数据都提取成一个文件,但是我加载带虚拟光驱,打开出错,用 WinImage打开也是出错,但经过摸索还是发现生成的这个ima后面也是能利用的,后面会说到修复,修复后可以用ultraisO再写入u盘,u盘就和破坏前一模一样,当然也可以用winamage打开,然后可以提取数据)
U盘提示未格式化的解决方法 (把u盘内容制作成硬盘映像,生成的映像文件是ima,可以winimage打开此格式文件)
解决方法三 修改恢复引导扇区数据,从问题根源解决问题,恢复U盘!推荐指数:★★★★(此种直接方法是最好的,比较可靠,而且可以恢复到出现问题之前的状态,下面针对这根源问题,本人进行四种尝试的方法,每种方法成功的几率不一样,但是极力推荐法三中的3.3、3.4方法,成功率很高!)
之前所说的两种方法主要是通过备份里面u盘数据的方法,间接解决问题,下面所说的办法主要针对问题出处解决~因为磁盘损坏的是引导扇区DBR,dbr在第0扇区,所以针对第0扇区进行操作:
下载一个winhex软件,工具-打开磁盘-选择u盘-选择启动扇区,确认后出出现各种数据,从0000到分割线出现的位置之前,就是第0扇区的内容,对此进行操作。
到数据55AA位置就是主引导区范围 3.1推荐指数:★★
此部分数据出错,对此大家可以找一个一模一样的的u盘,将里面这部分的内容从第一个位置开始,右键选择“选块开始”-到55AA结束位置,右键“选块结尾”,然后右键-编辑-复制选块-标准,然后用winhex打开损坏的u盘,找到损坏的u盘的引导区数据,找到000000位置,右键-编辑-剪切版数据-写入-确认,这样就把正确的数据写入,然后点击保存,当然你的用来复制的引导区信息的u盘最好之前不用用来制造过其他引导盘,不然可能里面的信息内容不符。
(我当初操作是把一个内存卡的引导信息,复制写入我的金士顿u盘里面,保存之后,u盘的大小出现了,可用空间也出来了,打开里面的文件也在,但是打开某些文件的时候会出错,所以要找到匹配的引导文件,后来探索到更好地办法!)
(网上有种说法,每个磁盘在格式化之后会生成一个DBR和备份DBR,两个都是一样的,当DBR受损时可以用备份的DBR恢复 。DBR在第0扇区,备份DBR在第6扇区,所以我们要把第6扇区的备份DBR还原到0扇区的DBR,但是我找不到备份扇区,大家不妨试试可不可以)
3.2推荐指数:★★★
在不行之后我,想通过软件修复引导区,通过BOOTICE 引导扇区维护工具、通过DiskGenius,修复引导区,进行维护:
通过BOOTICE 引导扇区维护工具 感觉这个工具比较好用,看u盘引导区损坏情况,可能主引导记录灰色,修复不行,大家不妨试试。
diskgenius,可以修改分区表,修复引导区等等 3.3推荐指数:★★★★
通过winhex克隆u盘,生成img文件,然后格式化u盘,再winhex导入格式化后的u盘,复制引导区信息,打开img,修复引导区,再克隆到u盘,这样就出现问题前一模一样了!
点击克隆U盘 通过winhex克隆U盘 用winhex克隆,按照图片显示点击,然后确定,会生成一个img的文件。生成后,大家可以对u盘进行格式化,格式化后的引导区信息是正确的,所以按照上述的方法对引导区进行复制,然后打开刚才生成的img文件,点击专业工具-将镜像文件转成磁盘,点击之后会出现启始扇区,选择,并写入(粘贴)正确的引导信息。然后点击保存,到这里,在点击克隆磁盘,但是这次来源选择修改好的img文件,目标选择u盘,然后确认。完之后,u盘的数据跟原来一模一样了!(也可以修复之后,通过虚拟光驱,其他软件打开img文件,然后进行提取里面的数据!)
3.4推荐指数:★★★★
同样地思路,就可以对我们之前的ima(用ultraiso制作的硬盘映像,在前面提及过)进行修改,按照3.2的方法,把dbr修复后,保存,ima可以通过winimage打开进行,当然啦更好地办法就是通过ultraiSO打开ima文件,点击工具-写入硬盘数据,选择u盘,点击写入,如图:
通过ultraiSO打开ima文件 此种方法同winhex导入一样(因为winhex不支持ima格式),写入u盘后,U盘数据跟原来一模一样!
这题 写了将近半个月……总是在D各种Bug
总的说来-这题最难应该是在精度处理上
1
1
0 0 1
这组数据过了就说明精度处理差不多了……
Program kingdom; const maxn=100; maxm=100; le=0.000000001; type circle=record x,y,r:double; end; var s:array[1..maxn,1..1000] of circle; n,i,j,k:longint; m:array[1..maxn] of longint; ans:array[1..maxn,1..4] of double; wanted:array[1..maxn] of double; b:array[1..maxn] of boolean; l,r:double; function arccos(cosa:double):double; var sina,tana:double; begin if cosa=0 then exit(pi/2); sina:=sqrt(1-sqr(cosa)); tana:=sina/cosa; exit(arctan(tana)); end; function min(a,b:double):double; begin if a<b then exit(a) else exit(b); end; function max(a,b:double):double; begin if a>b then exit(a) else exit(b); end; function sector(a,r:double):double; begin exit(a*r*r/2); end; function triangle(a,r:double):double; begin exit(sin(a)*r*r/2); end; function inlside(s:circle;l:double):boolean; begin if (s.
C语言 print()函数 规则,格式 意思 C语言格式字符print()函数 printf后面的参数包括“格式控制字符串”和输出变量的列表
“格式控制字符串”由格式控制字符和普通字符。其中前者以%开始加某一个特殊字符。比如%d为输出整数、%c输出字符。普通字符是原样输出的内容。
输出变量列表即为输出的变量,其个数要与控制字符相对于。
比如有int a=3,b=4,然后pritf(“a=%d,b=%d”,a,b);输出结果为a=3,b=4.
所以printf("abc")中abc为格式控制字符串中的普通字符,原样输出。
print(“%d”,i)为以整形输出变量i的值。 格式控制字符的一般形式为:[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项。各项的意义介绍如下: 1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示: 表示输出类型的格式字符 格式字符意义 a 浮点数、十六进制数字和p-计数法(C99) A 浮点数、十六进制数字和p-计数法(C99) c 输出单个字符 d 以十进制形式输出带符号整数(正数不输出符号) e 以指数形式输出单、双精度实数 E 以指数形式输出单、双精度实数 f 以小数形式输出单、双精度实数 g 以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用 G 以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用 i 有符号十进制整数(与%d相同) o 以八进制形式输出无符号整数(不输出前缀O) p 指针 s 输出字符串 x 以十六进制形式输出无符号整数(不输出前缀OX) X 以十六进制形式输出无符号整数(不输出前缀OX) u 以十进制形式输出无符号整数 #include "stdio.h" #include "conio.h" main() { printf("Theprogram test print style!/n"); printf("%d/n" , 223); printf("%d/n" , -232); printf("/n"); printf("%o/n" , 223); printf("%o/n" , -232); printf("
十进制单位转换成标准的度分秒
十进制的经度,纬度数的整数部分就是度数(°),小数部分乘以60得到的数取整数部分就是分数(′),再用该数的小数部分乘以60就是秒数(″)。如一个经度的十进制为:117.121806,那么:
第一步:度数(°)117°,
第二步:分数(′)7′(0.121806×60=7.308360189199448,取整数部分为7),
第三步:秒数(″)18.501611351966858″(0.30836018919944763×60=18.501611351966858),即度分秒为117°7′18.501611351966858″。
度分秒的轉換
若有一經緯度是:a度、b分、c秒,以十進位表示及的公式如下:
例如121∘18' 32.00"的十進位表示
=121+18/60 + 32.00/3600
=121.3089
CTreeCtrl遍历某一节点以下的全部节点。
递归遍历方法:
//函数说明:返回值:与strId对应的节点.
参数: hItem 查找的起始节点, strId 待查找的数据的标识符,开始用SetItemData设置
ITEMDATA为自定义的数据结构
HTREEITEM CMyTree::TreeVisit(HTREEITEM hItem,const CString& strId)
{
//step1:检验开始节点. ITEMDATA *pData=(ITEMDATA*) GetItemData( hItem );
if( pData )
{
if( pData->strID.Compare( strID ) == 0 )
return hItem;
}
//step1:检查子结点
HTREEITEM hChildItem= GetChildItem( hItem )
HTREEITEM hFindItem=NULL;
while( hChildItem )
{
hFindItem= TreeVisit(hChildItem , strId) ; //递归
if( hFindItem ) return hFindItem;
hChildItem= GetChildItem( hChildItem );
}
//step2: 检查兄弟结点
HTREEITEM hSlibItem= GetNextItem(hItem,TVGN_NEXT);
while( hSlibItem )
NSRange NSRange range=[address rangeOfString:@"邮政编码"];
包含 range.length>0 range.location>0;
不包含 range.length==0 range.location 很大的数;
如果address==nil
那么range.location ==0,range.length==0
鼠标左键失灵吧!!!!!!
哈哈哈!!!
一直没找到怎么好的解决方法。重新安装驱动的什么,就不说了,我的本本上面,我碰巧了,在每次失灵的时候,我就用触摸板,只要在用触摸板点击一下,然后,就好了。。。
哈哈哈。。。
大家可以试试。。。
然后,我自己又一个问题,firefox开多个网页标签后,特别是边在线听歌,一边开七八个网页的时候,特别那些需要使用adobe插件的地方比较多地方,整个浏览器的性能立马下降,而且,CPU的计算突然猛增得很高。
而且现在的firefox还是一直在用一个进程来开N个网页,为什么不用多进程来做?用多线程,内核级线程;还是多进程? 线程切换开销小。但是哪一个在用户体验这里感觉更好?
看win上面的,几个国内的浏览器,都是在用多进程在做,而且感觉他们的用户体验还不赖。。。。
SPOOL命令使用详解
SPOOL是 SQLPLUS的命令,必须在SQLPLUS中使用,主要完成以标准输出方式输出SQLPLUS的命令及执行结果,一般常用户格式化导出ORACLE表数据。
对于 SPOOL数据的 SQL,最好要自己定义格式,以方便程序直接导入 ,SQL语句如: select '"'||custcode||'"'||','||custname||','||areacode||','||custaddr||','||to_number(to_char(rptdate,'YYYYMMDD')) from du_basis;
spool常用的设置 set colsep' '; //域输出分隔符 set echo off; //显示 start启动的脚本中的每个 sql命令,缺省为 on
set feedback off; //回显本次 sql命令处理的记录条数,缺省为 on
set heading off; //输出域标题,缺省为 on
set linesize 80; //输出一行字符个数,缺省为80
set pagesize 0; //输出每页行数,缺省为 0,为了避免分页,可设定为 0;但是需要注意:有些oracle版本中,此数值必须大于0,否则列标题无法显示。 set termout off; //显示脚本中的命令的执行结果,缺省为 on
set trimout on; //去除标准输出每行的拖尾空格,缺省为 off
set trimspool on; //去除重定向( spool)输出每行的拖尾空格,缺省为 off
set timing off; //显示每条sql命令的耗时,缺省为off
set verify off; //是否显示替代变量被替代前后的语句。fil
例如:
一些地方宣布实行教师资格定期认证注册制度。现在看来,有些老师确实不合格,对不合格的老师确实应该审核甚至淘汰。
“孩子表现不好,就在他脸上盖个蓝墨水的印章,这跟古代给犯人脸上刺字有什么区别”。25日,有家长投诉称,深圳龙华新区民治街道上芬小学有老师在表现不好的学生脸上盖章以示批评。记者在该校三年一班教室内看到,有3名孩子脸上分别有红、蓝两种颜色印章。涉事老师称,该校有一项争优创先的学生评比活动,在具体实施过程当中,她个人考虑欠妥,将原本应该盖在本子上的印章用在学生脸上。上芬小学副校长向孩子及家长表示歉意,并称会认真反思教学工作中的问题。(9月26日《南方都市报》)
对涉事老师这种粗鄙做法,不少网友怒不可遏,建议以其人之道还治其人之身,在其脸上或臀部上盖蓝印章。此招虽然解恨,但并不可取,既然认为给孩子脸上盖印章丑陋而荒谬,又何必留存和推广这种做法?不宜在老师脸上盖印章,不等于不能拷问这种做法,尤其在教师节刚过去不久,就发生这样的事情,让人痛心,促人反思。
给孩子脸上盖章,这是刺向教育的现代黥刑,因为类似事件不是一次两次地发生。从给差生戴绿领巾,到要求差生在走廊考试,从给差生测智商,到要求差生缴纳“不听话押金”……如果不是媒体报道的坐实,断难想象在现实中居然有这样冷漠而野蛮的教育思维。每一次丑闻爆发后,相关学校在纠错之余,总是不免辩解:考虑欠妥,这样做是为孩子好、激励差生,初衷不错、方式不对云云。如此辩解,苍白得没有一丝温情,初衷好就可以羞辱孩子吗?何况初衷好不好还不一定,有些老师这样做,无非是释放内心的恶,或给差生点颜色看看,这种羞辱式教育只为让孩子驯服而已。
报道中有一处细节令人心碎。一名被盖了蓝印章的孩子称,他曾要求老师将印章盖在手上,不像脸上那么明显,但遭到老师的拒绝,老师还告知他,只有回家才能擦掉。每个人都有尊严,孩子自然不例外,当他乞求老师盖在手里时是多么卑微而无奈,遭到老师拒绝后又该多么绝望而痛苦。
教育部一再明确要求各级各类学校面向全体学生,以符合学生成长规律和教育规律的正确方式教育和引导学生,坚决反对学校以任何方式对未成年学生进行所谓的“好”与“差”的区别。其实,不给学生贴“好”和“差”的标签,何需教育部重申?教育的目的是什么?有识之士认为,“教育是培养,而不是选拔和淘汰。教育要让每一个人都在进步,教人上台阶,而不是用台阶把人简单分类。”此说不无道理,任何心怀善意、懂得教育规律的校长和老师,都应该坚持有教无类。但为何总有老师无视政令和职业道德,以羞辱学生为能事?
前不久,一些地方宣布将打破教师终身制,实行教师资格定期认证注册制度。初闻此事,笔者还有些担心,教师队伍中有多少不合格者需要淘汰?这会不会给老师增加不必要的压力?现在看来,有些老师确实不合格,对不合格的老师确实应该审核甚至淘汰。老师不合格,与监管不到位有关,但老师也应该扪心自问,到底是不是真正爱孩子,有没有遵守教育规律?
当然,不是所有的老师都粗野地将学生分为差生和好生。获得全国模范教师称号的天津市第21中学语文教师王威工作20年,她有个经验,每接手一个新班级,都要鼓励每个同学将自己的优点写在纸上、贴在墙上,然后看着他们露出自信的笑容。王威老师认为,“一丝一毫的疏忽,带给孩子的也许是永远的遗憾;一席温暖的话语,可能会改变他们的一生。”“老师必须加强自身修养,让教育的感动直抵心灵,润物无声。”多一些这样的老师,该有多好。
zoj 3543 Number String
这道题搞了,一个晚上,别人说是很少的dp,但是就是搞不出来,看来确实是弱爆了……T_T,网上结题报告个人认为讲的都不清楚,对与细节的东西都没有讲明白,这里若菜讲讲我个人的理解……
如果题目要求的序列不是n的一个排列,而是n个数,每个数的范围在【1,n】,求符合给定递增递减的序列有多少个,这样题目就好做了吧? 不用想,状态表示dp[ len ] [ i ] 表示长度为len,末尾的数字为 i 的序列的个数。。。直接O(n^2) 就可以搞出来。。。但是这道题目要求的是1,2,....,n的 全排列,这样做显然是不行的。
状态表示还是dp[ len ] [ i ] 表示长度为len,末尾的数字为 i 的序列的排列个数,这样 i 的取值范围就是[1, len],当len = len+1 是,i 的取值范围就是[1,len+1],这时如果i取值<=len ,在之前的排列后加上个i,那么肯定是不行的,因为这个序列不是排列(有两个i),但是如果把原来排列i之后的数全部加+1,那么这样就符合条件了,比如原来 序列是: “12” , 现在是在其后加 1 , 那么“12” -> "23" ,然后加1,即是"231"...明白这点就保证“231”是一个合法的排列了,其他的都简单了
PS: 开始我用long long ,T了两次,该处int,1000+ms就过了……
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <algorithm> using namespace std; const int mod=1000000007; typedef long long ll; char s[1010]; int dp[1020][1020],sum[1020][1020]; int main() { while(scanf("
find . -name "*.txt" -exec rm {} \;
find . -name "*.txt" | xargs rm {} -exec
1.参数是一个一个传递的,传递一个参数执行一次rm
2.文件名有空格等特殊字符也能处理
-xargs 1.一次将参数传给命令,可以使用-n控制参数个数
2.处理特殊文件名需要采用如下方式:
find . -name "*.txt" print0 |xargs -0 rm {} 实验结果如下,可以清楚看到参数传递过程
[root@andes.com ~/tmp/dir]#find . -type f |xargs -t -n 2 echo echo ./data.txt ./env2.txt ./data.txt ./env2.txt echo ./env.txt ./export2.txt ./env.txt ./export2.txt echo ./s.txt ./d.txt ./s.txt ./d.txt echo ./export.txt ./set.txt ./export.txt ./set.txt echo ./fuck.txt ./fuck.txt [root@andes.com ~/tmp/dir]#find . -type f -exec echo begin {} \; begin .
Delphi把操作数据的方法分成了两种,
一种是function,另一种是procedure,分别称为“函数”和“过程”,
这二者最大的差别就是函数拥有返回值而过程没有,比如按钮的事件响应过程,这就是一个过程,因此它没有返回值;
而一个简单的函数如求字符串长度的函数Length,它的函数原形为
function Length(S:string):Integer;
这个函数有一个参数S,是您要计算的字符串,它的返回值是一个整数类型,返回字符串的长度。
举一个例子来说吧: 假设需要一个函数GetNum(),它有两个整形参数num1,num2,函数经过计算后返回这两个整数的平均数,
函数如下:
function GetNum(num1:Integer;num2:Integer):Integer;
//函数名var haha:Integer;Begin Result:=(num1+num2)/2;
//将计算结果赋给Result //GetNum:=(num1+num2)/2;
//也可以这样写 haha:=555; //如果对函数名赋值,函数就返回,就是说,如果使用GetNum:=(num1+num2)/2;对函数赋值,这句将永远执行不到。
End;
函数的声明:function 函数标示符(参数列表):返回值;
函数的定义:function MyFunc(Param1,Param2:Integer;Param3:Real):Integer;
//函数参数间用分号隔开,括号外面的类型是函数的返回类型。
Begin
//函数的定义部分
End;
函数返回值有两种赋值方法:
一种是直接对函数名赋值,另一种是赋值给Result变量。对函数名赋值将导致函数返回。Result是函数特有的局部变量,它的类型与函数的返回类型相同,对它的赋值等于对函数名赋值。与函数名不同,Result变量可以出现在赋值号的右边,如果函数名出现在赋值号的右边时,则意味着递归调用,也就是函数调用它自己。
另外,对Result赋值不一定导致函数返回,如:
function MyFunc(s:Integer):Integer;
Begin Result:=Result*s; //执行赋值但不返回。
MyFunc:=s*s;//赋值后程序返回。
End;
例2:
function MyFunc():Integer;
Begin
Result:=Result+5; //如果使用MyFunc():=MyFunc()+5;将导致死循环。
End;
function MyFunc(s:Integer):Integer;
Begin Result:=Result*s; //执行赋值但不返回。 MyFunc:=s*s;//赋值后程序返回。 End;例2:
function MyFunc():Integer;
Begin Result:=Result+5; //如果使用MyFunc():=MyFunc()+5;将导致死循环。
End;
linux下/etc/hosts 和hostname文件的区别 hostname与/etc/hosts的关系
很过人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。
hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts。
Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选。
127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。
修改hostname后,如果想要在本机上用newhostname来访问,就必须在/etc/hosts文件里添加一条newhostname的记录。比如我的eth0的IP是192.168.1.61,我将hosts文件修改如下:
#hostname blog.infernor.net
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.61 blog.infernor.net blog
这样,我就可以通过blog或者blog.infernor.net来访问本机。
从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件。两者没有必然的联系。
RHEL还有个问题。
我开始在测试的时候,只修改/etc/hosts,里面添加 192.168.1.61 blog.infernor.net blog,而/etc/sysconfig/network维持原状,也就是里面的HOSTNAME=localhost.localdomain。我重启系统后居然发现hostname给修改成了blog.infernor.net。这样看的话,倒真觉得/etc/hosts是hostname的配置文件。后来终于在/etc/rc.d/rc.sysinit这个启动脚本里发现了问题的所在。
rc.sysinit文件里一开始就设置了hostname
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
HOSTNAME=localhost
fi
确实使用了/etc/sysconfig/network里的hostname值。不过后面还有一段关于设置hostname的
ipaddr=
if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]
; then
adump一般是audit dump,放着一些审计信息。 bdump中有alert文件,和一些后台进程的trace file,bdump文件下放着的是数据库的预警文件,如果数据库出问题, 该文件是DBA要查看的首选文件 cdump一般放置一些核心的trace文件 pfile文件下放着的自然是数据库的初始化参数文件。 udump文件下放着的是用户进程跟踪文件,用于收集客户应用的SQL语句的统计信息。 当然这些目录都是默认的目录命名,通过修改对应的参数,你也可以指定到其他目录 adump一般是audit dumpb bdump是 background dump udump是user dump cdump是core dump
一、前言 (1)2012年经济不景气,身为软件工程师这次我体会到了找工作的难。
炎热的七月,找工作真是件费劲的事情;一个下午接到好几个电话,问到的问题真的另人头疼。
(2)由于从车载行业转到互联网行业,且想拿高工资,我经历了转行的困境;
(3)上一次找工作时的容易,和这次找工作的困难使我更加体会到了什么是失败和落魄;
(4)如果正在进行网络营销的培训,而又重新入职,这让我力不重心;
(5)有的公司先HR,等HR花了1小时,HR面完再推给技术主管,又是等半个小时,我等不及了,撇下走人好几次;
4.、熟悉opencv编程。 二、题目及答案 线程池的使用
1、COM中的类型库 typeLib
2、COM的双向机制 COM的调度 解决答案请看我的文章: <<http://blog.csdn.net/chenyujing1234/article/details/7753863>>
3、Direct UI 无窗口
4、反编译
5、COM与ATL的关系 解决答案请看我的文章:<<http://blog.csdn.net/chenyujing1234/article/details/7753930>>
6、COM中分发机制 dispatch
7、COM在电脑上的用例
8、COM做过什么东西
9、vector、list、map之间区别? (1)vector 动态数组,多用于容器,增加删除操最好在结尾处使用;
中的元素是顺序存放的,所以随机访问很快,但是要插入和删除,这个时间复杂度就很高了,vector初始化时有一个capacity,如果元素个数超出capacity,那vector就会重新分配一个新的空间,并把旧值复制到新的空间中,释法原空间,这个也要耗费很多时间,所以如果你知道元素的最大值,最好用reserve()函数初始最大空间,避免重新分配空间造成的时间。
(2)list 双向链表, 多用于从中间增加删除的操作,可以随机访问;
元素在内存中是分散的不连续的,它使用指针left,right,指向前一个元素和后一个元素。所以要删除和添加只要动动指针,所以很快,但是因为是不连续的所以要访问一个元素,你只能遍历序列。
(3)map 二路平衡查找树,哈希结构,用来映射;
元素是一个pair类型,具有public成员first和second,第一个的类型是key_type,第二个的类型是mapped_type,
两个的类型可以相同,
map用来当做关联式数组.索引操作会创建新元素然后再对数值部分赋值.make_pair是用来构造该map中的元素的,insert操作,如果是具有同样键的map,
那么只会在map中存在一个这样的键,因为map不允许重复键,并且元素是自动排序好的,默认是用一个less_than函数对象来排序的,还有一个默认存储器allocator吧.
10、网络I/O模型有几种? window 下的套接字以来两种方式执行I/O操作,阻塞IO 非阻塞IO,一般默认使用的是阻塞IO 即线程会等待不会把控制权利立刻返回给程序,这就意为一个线程在某一个时候只能够去执行一个IO操作。
如果服务端想和多个客户端同时进行通信的话就要使用多线程编程,但是会增加开销,如果采用非阻塞IO程序不会等待,会立刻返回结果但是在大部分情况下返回的结果是错误的,并返回一个WSAEWOULDBLOCK的错误,所以程序员要不断的检测函数返回的代码以判断一个套接字何时可供读写。
为了避免麻烦 winsock 提供了不同的套接字模型对IO进行管理 select (),WSAAsyncSelect(),WSAEventSelect(),Overlapped()。
Windows操作系统提供了选择模型、异步选择模型、事件选择模型、重叠I/O模型和完成端口共五种I/O模型。每一种模型均适用于一种特定的应用场景。编程人员应综合考虑到程序的扩展性和可移植性等因素,做出自己的选择。
(1)选择模式(Select) 选择模型是Winsock中最常见的I/O模型。之所以称其为“select模型”,是由于它的“中心思想”便是利用select函数,实现对I/O的管理!最初设计该模型时,主要面向的是某些使用Unix操作系统的计算机,它们采用的是 Berkeley套接字方案。select模型已集成到Winsock 1.1中,它使那些想避免在套接字调用过程中被无辜“锁定”的应用程序,采取一种有序的方式,同时进行对多个套接字的管理。
(2 ) 异步选择模式(WSAAsyncSelect) 使用异步选择模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。
(3 )事件选择模式(WSAEventSelect) WSAEventSelect和WSAAsyncSelect模型类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。对于WSAAsyncSelect模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型上。在用事件选择模型开发的应用程序中,也能接收和处理所有那些事件。该模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。
(4 ) 重叠I/O模式(Overlapped I/O) 在Winsock中,相比我们迄今为止解释过的其他所有I/O模型,重叠I/O模型使应用程序能达到更佳的系统性能。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求。针对那些提交的请求,在它们完成之后,应用程序可为它们提供服务。该模型适用于除Windows CE之外的各种Windows平台。模型的总体设计以Win32重叠I/O机制为基础。那个机制可通过ReadFile和WriteFile两个函数,针对设备执行I/O操作。
//-------------------------------------------------------------------------------------- // File: EmptyProject.cpp // // Starting point for new Direct3D applications // // Copyright (c) Microsoft Corporation. All rights reserved. //-------------------------------------------------------------------------------------- #include "dxstdafx.h" #include "resource.h" //#define DEBUG_VS // Uncomment this line to debug vertex shaders //#define DEBUG_PS // Uncomment this line to debug pixel shaders //-------------------------------------------------------------------------------------- // Global variables //-------------------------------------------------------------------------------------- ID3DXFont* g_pFont = NULL; // Font for drawing text ID3DXSprite* g_pTextSprite = NULL; // Sprite for batching draw text calls ID3DXEffect* g_pEffect = NULL; // D3DX effect interface CModelViewerCamera g_Camera; // A model viewing camera bool g_bShowHelp = true; // If true, it renders the UI control text CDXUTDialog g_HUD; // dialog for standard controls CDXUTDialog g_SampleUI; // dialog for sample specific controls //-------------------------------------------------------------------------------------- // UI control IDs //-------------------------------------------------------------------------------------- #define IDC_TOGGLEFULLSCREEN 1 #define IDC_TOGGLEREF 2 #define IDC_CHANGEDEVICE 3 //-------------------------------------------------------------------------------------- // Forward declarations //-------------------------------------------------------------------------------------- bool CALLBACK IsDeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed ); void CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, const D3DCAPS9* pCaps ); HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc ); HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc ); void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime ); void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime ); LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing ); void CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown ); void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl ); void CALLBACK OnLostDevice(); void CALLBACK OnDestroyDevice(); void InitApp(); HRESULT LoadMesh( IDirect3DDevice9* pd3dDevice, WCHAR* strFileName, ID3DXMesh** ppMesh ); void RenderText(); //-------------------------------------------------------------------------------------- // Entry point to the program.
这是新浪官网上给提供的例子,借助它可以学习一下新浪微博的开发
第一、首先进入新浪微博开放平台:http://open.weibo.com/ 创建一个自己的应用,点击
然后点击创建一个
然后进入一个填写信息获取app key 和app secret的界面
接着在应用信息----高级信息----OAuth2.0 授权设置设置授权回调界面:
然后在应用信息----账号测试----输入添加测试新浪微博账号的昵称
第三、下载新浪微博的android SDK,网址:http://code.google.com/p/android-weibo-sdk/downloads/detail?name=weibo_sdk_source_code_20120322.zip&can=2&q=
第四、解压SDK后导入eclipse中,在 com_weibo_android_example的工程的AuthorizeActivity中
private static final String CONSUMER_KEY = "输入自己创建应用中的app key ";
private static final String CONSUMER_SECRET = "输入自己创建应用中的app secret " 和
weibo.setRedirectUrl("输入回调网址----例如上面OAuth2.0 授权设置 的回调界面http://www.sina.com");
第五,然后运行一下,结果如下:
下面就是在自己新浪微博上发布的一条消息:
注:新浪微博android_SDK开发说明文档的网址:http://open.weibo.com/wiki/Android_SDK%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3
<?xml version="1.0" encoding="utf-8"?> <article> <item> <title size="1">title1</title> <content>content1</content> <pubdate>2009-10-11</pubdate> </item> <item> <title size="1">title2</title> <content>content2</content> <pubdate>2009-11-11</pubdate> </item> </article> 【直接生成字符串】 方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效! PHP代码如下: <?PHP $data_array = array( array( 'title' => 'title1', 'content' => 'content1', 'pubdate' => '2009-10-11', ), array( 'title' => 'title2', 'content' => 'content2', 'pubdate' => '2009-11-11', ) ); $title_size = 1; $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $xml .= "<article>\n"; foreach ($data_array as $data) { $xml .= create_item($data['title'], $title_size, $data['content'], $data['pubdate']); } $xml .
说明:
1,本文采用的Mybatis框架版本为: mybatis-3.0.4.jar
2, 以持久化一个简单的User bean为例
User实体类的代码如下:
package bean; public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public User(String name, Integer age) { super(); this.name = name; this.age = age; } public User() { super(); } //必须要有这个无参构造方法,不然根据UserMapper.
首先定义一些简单的辅助说明类 :
class A
{
void func1();
}
class B public:A
{
void func1();
}
类A一般是做为基类,类B则继承了类A。
A a = new B();
a.func1();
这样的结果是调用了A的func1方法。
B b = new B();则是显然是调用B的func1方法。
因为像这样定义一个对象A a, 不管我们构造滴是一个什么样的对象,在编译期间,编译器只知道我们是个A类型,只会按照A类型生成func1方法,在运行时,也是调用A类的func1方法。
假如我们有需要有更多的类像类B一样,继承类A,而且都有不同func1方法实现。我们可以在基类A的func1方法前面加个virtual关键字,表示它是虚函数,A类就是这样
class A
{
virtual void func1();
}
B类的写法不变,当我们在使用
A a = new B();
a->func1();则会调用子类B的func1方法。
虚函数是c++中继承和多态实习的实现。(而java和oc中默认重写父类的方法就是可以实现多态)
关于纯虚函数
纯虚函数写法 virtual void func2() = 0;纯虚函数是虚函数的一种特殊化。
只要是类中包含了纯虚函数的类,都是不能实例化的抽象类。
class A
{
virtual void func2() = 0;
}
而我再定义A a的时候再编译的阶段就会报错(A中包含了纯虚函数,是抽象类,不能实例化)。
其他方面纯虚函数和虚函数意义完全一样,引入纯虚函数纯粹是为了编码的规范和效率。使得一些问题在编译期间就能察觉。
关于指针:
由于自己对C++特别是其中的指针,完全不太熟 ,只是写写关于自己遇到的问题。
A、@Autowired
org.springframework.beans.factory.annotation.Autowired
public @interface Autowired
Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities.
标注一个构造函数,字段,setter方法或者配置方法,让它通过spring的依赖注入方法自动装填。
Only one constructor (at max) of any given bean class may carry this annotation, indicating the constructor to autowire when used as a Spring bean. Such a constructor does not have to be public.
任何一个给定的bean类只能有一个构造函数可以携带这个注释,表示这个类作为一个spring的bean使用时,这个构造器将用于自动装配。这个构造函数不是必须是public。
Fields are injected right after construction of a bean, before any config methods are invoked.
biz层一般作为业务逻辑层,无事务,可以对service返回的数据进行再加工
service层操作dao层获取数据,有事务
因为biz层的无事务,所以不能在biz里有对dao的操作,只能通过调用service操作dao返回结果给biz。
HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet("http://gd10010.cn/channels"); System.out.println("test-01"); HttpResponse response = client.execute(get); String entity = EntityUtils.toString(response.getEntity()); System.out.println("entity--" + entity);
再经典不过的算法了: // 功能:判断点是否在多边形内 // 方法:求解通过该点的水平线与多边形各边的交点 // 结论:单边交点为奇数,成立! //参数: // POINT p 指定的某个点 // LPPOINT ptPolygon 多边形的各个顶点坐标(首末点可以不一致) // int nCount 多边形定点的个数 BOOL PtInPolygon (POINT p, LPPOINT ptPolygon, int nCount) { int nCross = 0; for (int i = 0; i < nCount; i++) { POINT p1 = ptPolygon[i]; POINT p2 = ptPolygon[(i + 1) % nCount]; // 求解 y=p.y 与 p1p2 的交点 if ( p1.y == p2.y ) // p1p2 与 y=p0.
命令格式: sqlldr username/password@sid control=*.ctl *.ctl格式为: load infile "d://test.txt" 外部数据文件 infile "d://test1.txt" 可指定多个数据文件 append into table test 向表中追加数据 fields terminated by "," 外部文件的数据以“,”分隔 trailing nullcols 表中的字段没有对应的值时填充空值 ( id integer external, integer external 表示插入的数据是string,如果只保留integer,表示插入的数据是二进制 name "upper(:name)", 将插入的值转换为大写 con ":id||:name", 表中CON列的值是ID和NAME的组合值 dt date"yyyy-mm-dd" 插入日期型数据 ) 在append的位置还可以用以下列表中的一个值: insert 向表中插入值,但要求表开始时为空 replace delete表中的数据,然后插入新值 append 向表中追加数据 truncate trunctate表,然后插入新值 例: C:\Users\wzj>sqlldr scott/tiger control=d:/dept.ctl dept.ctl的内容如下: load infile "d://test.txt" append into table tt fields terminated by "," trailing nullcols ( id integer external, name "
select * from 表名 as of timestamp to_timestamp('2012-8-8','yyyy-mm-dd hh24:mi:ss')
原文链接 http://blog.csdn.net/zmyde2010/archive/2011/01/08/6123987.aspx Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本收藏 Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能 比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用 或者写个脚本,apk中直接调用,省去中间层或者JNI 这个至少效率应该比较高吧 代码: view plaincopy to clipboardprint? public class test extends Activity { TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.text); Button btn_ls = (Button) findViewById(R.id.btn_ls); btn_ls.setOnClickListener(new OnClickListener() { public void onClick(View v) { do_exec("ls /mnt/sdcard"); } }); Button btn_cat = (Button) findViewById(R.id.btn_cat); btn_cat.setOnClickListener(new OnClickListener() { public void onClick(View v) { do_exec("cat /proc/version"); } }); Button btn_rm = (Button) findViewById(R.
基本信息 OS:
RHEL 5.6 64BITEnterprise-R5-U6-Server-x86_64-dvd.iso
ORACLE:
ORACLE 11.2.0.2 64BIT
p10098816_112020_Linux-x86-64_1of7.zip
p10098816_112020_Linux-x86-64_2of7.zip
p10098816_112020_Linux-x86-64_3of7.zip(GI ASM)
ORACLE PSU:
11.2.0.2.3 Database PSU:
p12419331_112020_Linux-x86-64.zip
11.2.0.2.3 Grid Infrastructure PSU:
p12419353_112020_Linux-x86-64.zip
New Optch:
p6880880_112000_Linux-x86-64.zip
WEBLOGIC:
weblogic V18594-01-weblogic.zip
wls1032_generic.jar
JDK:
jdk-6u18-linux-x64-rpm.bin
GC:
V23674-01_1of3.zip
V23674-01_2of3.zip
V23674-01_3of3.zip
GC PSU:
Agent:p9345913_111010_Linux-x86-64.zip
Oms:p12620174_111010_Generic.zip
OS环境配置按照ORACLE 11.2.0.2数据库安装配置
安装OEL 5.6把ORACLE的包和ASM包选上
参数设置 [root@hotel01 ~]# uname -r
2.6.18-194.el5xen
[root@hotel01 ~]# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' \binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgomp- libgcc libstdc++ libstdc++-devel make numactl-devel- sysstat unixODBC unixODBC-devel
异常及解决方案
使用JAX-WS调用.Net写的WebService报了如下异常:
javax.xml.ws.soap.SOAPFaultException: System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: .... 网络上很多信息都提示说,给.NET的WebService类(即.asmx文件下的类)添加属性:
[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)] 即可解决。
但你知道为什么吗? 虽然JAVA和.NET都是实现W3C制定的WebService规范,但其实两者在实现上并没有完全保持一致,在实现SOAP规范1.1中JAX-WS并不需要SOAPAction,但.NET中是需要的,哪怕是空。这就导致了上面的异常。 那么SOAPAction到底是作什么的呢? SOAPAction 被用来标识SOAP HTTP请求的目的地。 在.NET中的实现原理是这样的:默认情况下,.asmx 处理程序使用 SOAPAction 头的值来执行消息调度。当客户端调用WebService时,.asmx 处理程序会通过查看SOAPAction确定要调用哪个方法。如: POST /math/math.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/Add" <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://tempuri.org/"> <x>33</x> <y>66</y> </Add> </soap:Body> </soap:Envelope> 通过SOAPAction可以确定要调用Add方法。
SOAP信息中还有种路由方式那就是使用<Body>XML 元素之后的第一个子元素,如:
POST /math/math.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "" <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://tempuri.org/"> <x>33</x> <y>66</y> </Add> </soap:Body> </soap:Envelope> 当SOAPAction为空时,则使用<soap:Body> 第一个子元素加上其命名空间来路由:http://tempuri.
poj 1222 高斯肖元模版题
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=30; int a[maxn][maxn+1],x[maxn]; int equ,var,free_num; void Debug() { for(int i=0;i<equ;i++) { for(int j=0;j<var+1;j++) cout<<a[i][j]<<" "; cout<<endl; } } int gcd(int a,int b) { if(a<0) return gcd(-a,b); if(b<0) return gcd(a,-b); return b==0?a:gcd(b,a%b); } int Gauss() { int k,col=0; for(k=0;k<equ&&col<var;k++,col++) { int mx=k; for(int i=k+1;i<equ;i++) if(a[i][col]>a[mx][col]) mx=i; if(mx!=k) for(int i=k;i<var+1;i++) swap(a[k][i],a[mx][i]); if(!a[k][col]) { k--;continue; } for(int i=k+1;i<equ;i++) if(a[i][col]!
在担任公司高管的几年间,我面试过数以百计的各个层面的员工,其中最让我感到遗憾的一个现象就是很多人有着非常好的素质,甚至有的还是名校的毕业生,因为不懂得去规划自己的职业,在工作多年后,依然拿着微薄的薪水,为了一份好一点的工作而奔波。很多这样的人,他们只要稍微修正一下自己的职业方向,就能够在职业发展上走得更从容。 有一次一个大连理工大学的研究生,好像是学电子的,来应聘我们的公关企划部部长。那小伙长得不错,将近一米八的身高,很阳光,个人素质也很好。他研究生毕业后去了一家稍微有点规模的IT企业,因为他对于软件的了解很不够,就没有做技术,而是从事管理,后来做到了总经理助理,主管行政和企划。工作5年后的薪水也就是5000多点,他在公司的发展也受到了一定的局限。我在面试的过程中了解到,他之所以应聘我们的公关企划部部长,只是因为我们这个职位给的薪水还可以,而不是因为他喜欢这样的工作。后来我帮助他分析,依照他的素质和职业兴趣,如果选择得当,几年后应该有着很好的发展。但是我们公关企划部部长的职位并不适合他,如果我们聘用了他,不但耽误企业的发展,而且也会耽误他本人的发展。我帮助他分析以后他恍然大悟,对我十分的感谢。后来他经过认真的思考及时修正了自己的职业道路,目前取得了不错的发展。所以有时候没有应聘上反而是面试的成功。在今天的市场环境中,类似的例子还有很多,这样的人大多都有一个共性,那就是最初的时候不知道自己应该在哪个领域开始自己的职业生涯,几年过去了,稀里糊涂的换了几家公司,回过头来才发现,只是积累了不同行业、不同职能方向不成功地丰富经验。而且据我观察越是聪明的人越容易产生这样的问题。因为似乎什么工作都难不倒聪明人,他们就有机会尝试不同的工作,结果却都是“蜻蜓点水”。一段时间以后突然发现,多种多样的工作经验并没有给自己带来沉甸甸的收获,反而造成了自己缺乏专长、缺乏核心竞争力的局面。最最关键的就是他们永远都难以结束低薪长跑,白白浪费了上天赋予他们的才智。 当然,和此相对应的是另外的例子。有的人起点并不高,既非名校也不是什么好得不得了的专业,甚至这里边还有大专和中专毕业的人,但是因为他们的正确的职业发展之路,几年之后他们在职场上的价值超过了很多当初起点比他们高的人。我们公司现在的财务总监就是专科毕业的。但在十多年的财务生涯中,从出纳、会计、主管会计到财务经理,他一步一个脚印走得很踏实。不少和他同龄的本科生、研究生也还没有取得这样的成绩。我也认识不少拿着高薪的人士,他们中不乏低学历的人才,只是因为在一个领域里辛勤耕耘而成为这个领域的专精之士,从而能够获得和他们价值相匹配的薪酬。 各种有趣的职场现象还有很多。 有的人进了国有企业,进了政府机关,没有得到太大发展,一直非常矛盾,想离开又不愿失去既得利益,转换成本越来越大,勉强得来一官半职,也很是没意思。始终处在矛盾当中,年轻人的激情在无聊的事务中慢慢消磨。 也有的人盲目的相信考证和考研,希望借助证书增加自己在职场的砝码;有人成功了,为数不少的人却越读越穷,所获得的薪酬远远达不到自己的期望。如果把考证和考研比作投资的话,至少是投资收益率不高。我就亲自面试过不少MBA,至少我是觉得他们没有获得和他们的投资相匹配的回报。 我们身边总有这种从一工作就抱怨不断却委曲求全的人存在,他们或者从一开始就没有为自己的职业做过规划,要么只进行过短期的职业指导,等有了一份自己可以接受的工作之后就“适可而止”,任由无聊和无奈一天天侵蚀自己日渐衰老的心。 根据我个人的经验和观察。有太多的人不了解如何去规划自己的职业生涯,包括不少读过职业生涯方面的书的人。接触到不少刚刚毕业的大学生,他们对这样的问题更是全然没有概念,甚至我看到有的人30岁了还在为自己的职业发展感到迷茫,而且看趋势还要继续迷茫下去。究其原因关键是功力太浅,仅仅囿于职业来考虑职业,没有能够从更高的高度上来考虑这样的问题;而目前所谓的职业生涯之南的书也大都为学者所作,理论性有余,实践性不足,用以促进思考或许还有点帮助,用来指导实践则全无所获。正是基于这样的原因,近来我一直考虑怎么样将自己对于职业生涯的经验和观点能够系统的表达出来,以期能够对这方面的问题感到困惑的朋友有所帮助。 事实上,只要我们拥有了一定的理念和技巧,我们完全可以使我们的职业生涯不断增值,达到我们所期望的境界。今天我就就和大家探讨一下职业规划相关的理念。 第一章职业生涯扬帆于选择 首先想表达的第一个观点就是选择比努力更重要。其实一生来讲失败的人和成功的人努力差不多,我甚至发现很多在职业发展上并不顺利的人非常努力,反而一些人顺风顺水,仿佛很轻易的就得到了别人眼中的成功。成功的人努力几年就很轻松了,顶多智力上开发的多一些;而失败的人也很努力,因为一旦他不努力就没有饭吃。 一个人一生当中最大的幸福在于选择对两件事,一是找对单位、找对老板、找对上司;第二件事就是找对妻子或丈夫。为什么这么说呢?当太阳升起时我们与上司共事,当日落西下时我们与自己的爱人相拥。 正确的选择是如此重要,然而你会发现现实生活当中很多的人面临选择的时候竟然会非常草率。一个人花在影响自己未来命运的工作选择上的精力,竟比花在购买衣服上的心思要少的多,这是一件多么奇怪的事情,尤其是当他的未来幸福和富足全部依赖于这份工作时。几乎没有人会认为自己是错误的——没有人会故意做出一个不利于自己的决定。他们之所以选错,往往是由于不懂得如何选择。很多人认为自己无法了解自己到底适合做什么工作,只好换来换去,希望能在过程中找到自己的兴趣所在,但许多年过去了,仍然很迷惑。所以我们要认真选择,否则你根本不知道这个世界上那片土地适合你生长,什么样的环境适合你发展。和企业发展是一个道理,方向比速度更重要,在没有选择对明确地方向以前,单纯的谈速度是没有太大意义的,甚至有时等待优于行动。没有明确选择的行动就是我们平时所说的瞎折腾,瞎折腾的结果就是无序导致无效. 在这个世界上,通向成功的道路何止千万条,但你要记住:所有的道路,不是别人给的,而是你自己选择的结果。你有什么样的选择,也就有了什么样的人生。你有什么样的职业选择,你就拥有什么样的职业生涯。你今天的现状是你几年前选择的结果,你今天的选择决定你几年后的职业状况.成功与失败者的区别在于,成功者选择了正确的方向,而失败者选择了错误,因此我们经常能够看到一些基础相差无几的人由于选择了不同的方向,职业生涯迥然不同。问题是人们在做出选择时,几乎没有人认为自己是错误的,因为没有人会故意作出一个错误的不利于自己将来发展的职业选择,他们之所以做出了错误的选择,是因为没有能力作出正确的答案,就如同我们在考场上遇到自己不会做的选择题,只能根据自己的判断去选择,就如同我们的父母,他们就认为我们做某一份工作会对我们有利,全然不知道那会把我们推向职业的陷阱。 晋惠帝司马衷当皇帝的时候,有一年闹大饥荒,官员向他汇报百姓无粮可吃,饿死了很多人。这个历史上有名的白痴皇帝很惊讶的问道:“他们为什么不吃肉呢。” 我们或者所谓得职业生涯规划专家很容易对于别人的职业选择开出药方,如果不喜欢自己当前所作的工作,那就去做自己喜欢做的事情吧。话很容易,但对于职业发展感到迷茫的人来说,就如同上面的笑话一样,这种美好的愿望在现实中很难轻易实现。 职场生涯是很现实的,这也是为什么那么多的生涯规划理论对我们没有实质性的意义,我个人的意见是一定要立足于现实积极思考,并且充分利用机会,一步一步的改善自己的职业状况。正如我开始所言,职业生涯扬帆与选择。在职业生涯发展的过程中,选择是一个连续的过程,你很难一下子就作出完全正确的选择,但要学会选择正确的方向。在生涯之初或者遭遇职业困境的时候,你的个人选择余地非常的狭小,并不能完全自主地做出决定,但是有志者自有千方百计,无志者只感千难万难,无论如何,你总是会有一定的选择余地,如何把握有效的选择权,使你的职业路径逐渐导向一个正确的方向是非常重要的,只有这样,在职业发展的长征路上,你的路才会越走越宽,你在职场的选在余地也才会越来越大并最终达到真正的职业自由。 那么究竟如何来做职业选择?职业选择的依据是什么?选择要考虑的要点又有哪些呢? 第二章价值观之于职业规划 根据我个人的经验,选择的最深层次的依据是你的价值观,选择的表面依据是你的职业目标,当然对于没有目标的人选择的依据就是他个人所理解的利益。主动选择要考虑的要点主要包括地域、行业、企业和职业。或者说一个非常清晰的职业目标应该描述为多少年后我希望在某地(北京/上海/纽约/老家的县城)某个行业(房地产/物流/教育培训等等)某个企业(500强/民企/国企/政府等等)的一个从事某职业(人力资源/财务/金融/管理等等高/中/低层)的人士。这几个要点我会在后面做详细地论述,我个人觉得也是最有实际参考作用的部分。 从实际的例子来看,我们的人生价值观决定了我们的生活态度,从而决定了我们的职业取向并导致了我们做出各种的职业选择,这种职业选择决定了我们的职业状况从而也决定了我们的生活方式,这种生活方式又最后决定了我们的人生幸福感。 价值观的这个环节是我们大多数人很容易忽略的,虽然它在事实上左右着我们的决定并进而决定我们的人生包括职业。一个人之要想成为职场的顶尖人物,他就必须清楚知道自己的价值观,同时确实按照这个价值观过其人生。我所见到的在职业上有着良好发展的人士都是因为他们秉持他们的价值观念,而一些不太顺利的人士大多思想混乱,要么是秉持错误的价值观念,要么是根本没有,随着社会大众的舆论摇摆不定。 从企业选人的角度也能够很好地揭示价值观的重要性。为什么麦肯锡的咨询顾问很多并不是出身于管理专业?为什么一些学业上并不突出的同学能够在竞争激烈的应聘中胜过那些学习成绩突出的人?为什么外企在招聘trainee的面试中总是会有“你最大的成就是什么”、“你最大的优缺点是什么”等等看似非常普通的问题?其实我觉得都和价值观有非常密切的关系。因为一个人在职业上的价值观念和他能取得的成就是息息相关的,与此相比,一时的学习成绩反倒成了末节。 从价值观的角度来说,职业发展成功还是失败的判别标准就是你是否得到了你想要的生活,你的职业所带来的生活方式是否符合你的价值观。如果符合,你就会感觉很快乐,哪怕收入会相对低一些;如果不符合,你会感觉很疼苦,哪怕你拿着看起来很高的年薪。我刚刚工作的时候,遇到哪些拿高薪的人,总是很羡慕;到了今天心态就比较平和,遇到比自己薪水高的人能够理解甚至有时候有些高薪的朋友还让人觉得同情,因为为了高薪他们也失去了很多,比如天伦之乐和某种程度的身体健康,但他们得到了成就感。所以,我一向主张在职业发展上我们没有必要去羡慕别人,因为当你得到的时候你就失去了,反之亦然。你可能得到的是高薪,但失去的是时间;你可能不能成为一个好领导,但会成为一个好儿子。关键是你得到的正好是你想要的,而你失去的你并不介意,真正的职业追求是圆满和平衡。 职业发展不能用挣钱的多少来判断,那不应该成为我们职业上的目标。我看到的真正成功的职业人士,即使在他们职业生涯的早期,也没有单纯的考虑金钱而是更多的追求自己的梦想,按照自己的价值观去发展,应该说,这样的人反而会成功,金钱是职业发展所带来的副产品。当你按照自己的梦想去追求而后成功,所有美好的东西都会朝你拥来,包括金钱。 接下来想谈一下选择的要点。来点实际的。 第三章职业规划的选择有四—地域首当其冲 第一个选择是要考虑地域。这也是不少人容易忽略的。我的高中同学的案例最能说明地域对一个人职业发展的重要性。我们高中同学大都来自于农村,也有部分是县城的,我们当地的教育不是很发达。同班的50个同学,包括后来复读的在内,后来考上大学包括本科、专科和中专的在内,也就是在30人左右。从我大学毕业到现在10年的时间,应该说大家的职业发展基本上定型。大学毕业后,大部分同学选择了比较发达的城市,但也有部分同学回到了并不发达的老家。尤其是家在县城的同学,因为当时大都专科或中专,基本上都回去了。但其中有两个本科毕业的农村同学也选择了回去。去年春节回家同学聚会,这两个同学都很后悔,因为他们所谓的学历和能力在落后的县城并没有用武之地,失去了竞争优势,稍微好点的企业加起来不超过5家,想跳槽都没有地方去,想再去一线城市吧,早已失去了当初的锋芒,更何况已经娶妻生子;反倒是家在县城的同学,因为家庭有良好的人际网络大都发展得不错。我说这话的意思并不是反对大家回去建设家乡,而是说一定要考虑长远发展,因为你改变不了落后的思维,更何况工作之初你本身就不成熟。如果你却由此意,我到建议你可以先在比较发达的地方学习,将来成为真正的职业人士在返回家乡或者到家乡去投资,都是一个很好的方式。 地域甚至会成为限制一个人发展的瓶颈。如果你分到县城,如果从政的话,基本上你就当到县委书记,至多当到地区专员,还要运气非常的好;如果你分到各大部委,运气不算太差的话也能混个处长,稍微好点就能干个司长,不小心就当了部长。当然,我这里有说笑的味道,但从概率上来讲,大致如此。 企业设立时选择和自己配套的区域。咨询公司基本上分布在北京、上海、广州和深圳,这四个地方恐怕占了全国咨询公司的80%,其他地方也有,但大都规模不大。济南和大连、青岛等地也有咨询公司,但日子整体上就不如上述四个地方的滋润。工厂选择时也要考虑配套,所以长三角和珠三角的工厂就星罗棋布。人才要发展也要考虑配套。你去比较适合自己的区域,就能够得到好的配套,比如比较好的平台、比较好的培训、更宽广的视野等等;否则缺了某个环节,比如得不到培训、事业狭窄等等你就很难得到发展。 单纯的说要去大地方发展或应该固守一隅都是不对的。因为更换地域而获得发展或发展受阻的例子都很常见,我只是告诉你这是个值得考虑的因素。在职业流动越来越普遍的今天,一生中在几个城市工作也很正常。我个人的建议是在职业发展的初期要尽可能在比较发达的地方工作,等你已经在职业发展上达到相当的程度再考虑生活上更能接受的城市;我也不建议职业发展过程中频繁的更换城市,因为你在某个城市积累的资源随着地域的变动而大大贬值,会无形中使你的很多成本上升。 有的人认为大城市竞争过于激烈,生活成本太高而没有勇气去面对挑战;其实完全没有必要。因为从另一方面来说,大城市的机会更多,而且激烈的竞争更能够激发个人潜能,更容易达到更高的职业高度。在二三线城市有个二三十万的年薪就很难再有上升的空间,但在北京、上海这样的薪水算不上什么。我原来公司的行政秘书素质很好,是学建筑的,身高178,很有气质,钢琴九级,因为工作的原因从大连调到上海,后来跳槽到斯坦威,是一家销售奢侈钢琴的公司,有了更为光明的职业前景,但在大连她永远没有这样的机会。 大多数人毕业时理所当然的留在自己读书的城市,或者回老家等等,其实有必要深思哪些地方更适合自己发展。即使在职业中期的朋友也可以考虑通过地域的转换让自己的职业生涯跃上一个新的平台。
第四章职业规划选择之二—行业选择要有内在连续性 第二个选择是要考虑行业。也有不少的朋友在这个问题上犯错误。有的人工作了7,8年都难说自己停留在哪个行业,其实行业和个人发展息息相关。如果你选择了金融,那就意味着几个人操纵上亿的资金;二三十个人操纵上千万上亿的资金,那是房地产行业;几百人拼死拼活的再干,只有百万数量级的利润,那是生产行业。选择什么样的行业,就有了什么样的发展空间。 在行业选择上最容易犯的错误就是没有行业。这是职业发展的大忌,也是最让人感到惋惜的,但是这点确实是比较容易避免的,关键是是要有行业的意识。有的人聊起来我干过多少多少行业,以为这是一个非常值得自豪的事情,其实对自己的职业发展并没有多少好处。我面试中遇到不少的人,在不同的行业作过,但是对哪个行业都没有深入地了解。我们前段时间招聘一个地产的副总裁收到了不少的简历,30-35岁这个年龄段,只有很少的人在这个行业拥有超过6年以上的行业经验,仅从这一点就能够淘汰很多的人。我在后面会讲到职业的选择,职业的选择也一定要结合行业才能有更大的发展。即使就财务而言,房地产的财务和物流行业、贸易行业的财务也会有相当大的差异。 刚刚工作的人有时也很难马上发现最适合自己的行业,但你可以去尝试,但我建议你的目标是要成为这个行业的专家,无论你是从事技术还是管理。没有相当年的行业经验,你很难说了解了一个行业,比如对于行业的惯例、发展趋势得了解、行业的价值链条、各个层面的细节、人脉关系的积累等等都需要相当时间的积累。失去了行业背景,你的价值就会大打折扣。 要尽可能的在一个行业深入的做下去,尽可能的不要轻易改行,因为这会让你损失掉很多的积累,但行业不是不可以改,如果一定要改行的话我的一个建议就是行业发展要有一定的内在的连续性。所谓内在连续性就是你以前积累的资源如经验、技能、人脉等等能够不断地得到延续和强化,有一条清晰的连续的轨迹,而不是天马行空的跳跃式发展。比如一直在一个行业作,或者沿着行业的价值链条在不同的企业工作,原来作建筑施工的到房地产公司做了工程管理,原来在国际物流企业去做贸易,原来做教师的改做培训师,原来做建筑的改到房地产,等等基本上都是比较可行的转换。 内在连续性的道理其实很简单,就是保持你的职业资源的不断升值增值,而不是把精力浪费在不同的行业,这个道理也适用于我在后面谈的职业的选择。其实职业发展的很多道理和作企业管理是相通的,比如管理中的SWOT分析、销售中的4P、战略制定的步骤等等很多的管理工具都可以拿过来指导我们的职业发展。我一向反对企业作不相关多元化,企业应该聚焦在自己最擅长的领域。同样我们个人也是如此。有的聪明人拥有的能量是10,分散在多个领域,每个领域都不超过5,而我们大家认为得并不聪明的朋友,或许能量只有8,但聚焦在一个领域反而会有好的发展。我有一位大学同学六年干过十个行业,基本一无所成,只积累了每个行业不成功的丰富经验。在高科技高速发展的现代社会,往往一个专业足够一个人奋斗一生,在这种分工很细的空间里我们自己的特长在哪里?我们立志在哪个行业干一辈子?你对行业的透彻见解和有所作为令人敬佩和追崇,那你的收入和你的生活才能跟一般人不一样。 我刚开始工作的时候,大家都喜欢往热门的行业里去,其实现在也存在这个情况。但是冷和热要辩证地去看,每个行业都有其发展的周期。如果是特别热,也就意味着到了波峰了,说不定就要开始衰退了,而冷门意味着衰退到底了,彻底没有希望了,或者处于低谷,开始积蓄力量,要上升了。任何行业本身也会经历高潮与低潮。行业判断要看大的趋势即可,如同投资股票,中间自然会有震荡调整,但真正投资成功的都是坚定的价值投资者,在行业的选择上我们也要做坚定的价值投资者。一个行业,只要大的趋势有前景而我们又喜欢,就应该坚定的在这个行业耕耘。互联网出现的时间这么短就已经经历了2-3个来回,今天成功的绝大多数都是在低潮的时候依然在坚持的企业和个人,那些因为低潮而震荡出局的人固然很难在这个新兴的行业里挖不到金恐怕也很难在其他的行业里成功,原因无它,就是频繁的转换行业而影响了积累。尽管中国的股市已经进入了牛市,但身边那些频繁操作的朋友挣到大钱的不多,反而是那些坚持投资原则不轻易跟风的人在获得越来越大的收益。 第五章职业规划选择之三—合适的企业 第三个选择是要考虑企业。 企业是个人职业的承载平台,是个人职业生涯不断得以拓展、得以精彩展现的舞台。一个好的平台往往能够让人得到成长和锻炼,不断获得职业能力的提升,增强个人对于职业的信心和兴趣,不断促进个人职业生涯的发展;而一个不好的平台往往不能够促进个人职业生涯的发展,甚至会让一个人慢慢的丧失职业发展的竞争力,让个人的职业生涯出现停滞或者是倒退。从某种程度而言,进入一个好的企业甚至比考上一所名牌大学都要更重要,因为你所获得的能力的提升和发展的机会比大学所能提供给你得要多得多,所以选择一个有助于自己发展的企业非常重要。 但是很多的人并没有给与足够的重视。有一个很出名的笑话,说一个喝得醉熏熏的人在路灯下拼命地找着什么东西。一个过路人恰巧经过,问他在找什么。那个醉鬼说在找钥匙。过路人就帮助他一起找。可是什么都没有找到。过路人问道:“我什么都找不到。您大概是在哪儿丢的钥匙?”醉鬼指向了街道旁边的黑暗处。过路人吃了一惊:“天哪,那您为什么不到那边去找?”醉鬼愤怒得看着他说道:“为什么?因为这里比那边亮。”其实很多的人在接受第一份工作的时候往往就是这样,比如企业就是位于他读大学的地方或者是这家公司有父母的朋友等等。这样解决职业的问题很方便,却往往将打开自己未来职业发展的钥匙给遗忘掉了。我最初工作的时候就没有任何的考虑。大多数人在开始跳槽后会开始重视企业和自己职业发展的问题。 美国人一辈子在不同的企业作相同的职业,日本人一辈子在相同的企业作不同的职业,唯有中国人不同,没有改革开放的时候,和日本人差不多,一辈子在相同的企业作不同的职业,改革开放了,人才流动了,不少人却又有点矫枉过正,变成了在不同的企业作不同的职业。当然随着大家职业意识的提高,这种状况会有所好转。 不同的选择导致不同的生活方式,选择企业更是如此。粗略来说,国内的企业大致可以分为外企、国企和民企,政府部门可以归到国企中去,我个人没有到政府部门发展的想法,但从和政府打交道的过程中,也发现了一些素质不错的人,只是要适应他们的工作习惯太难了,但我个人认为,如果把去政府也作为一个职业的话,这也是一个不错的选择。首选当然是各大部委,比去什么外企都要好,因为占有的资源多,其次是省、市,再下面的就没有什么意思了。企业里面有很多的隐形冠军,就是企业知名度不高,但是获利能力很好,又很好的行业地位,各大部委包括中央的一些企业有不少这样的隐形冠军,名气虽然没有500强大,但那待遇让500强的所谓白领都要羡慕,但他们不属于你我穷孩子做职业规划要考虑的范畴,基本可以排除,但是如果你万一遇到这样的机会,可别千万错过。 稍微有点跑题,接着刚才的话题来谈,其实外企、国企和民企他们各有各的风格,关键是什么样的企业适合不同阶段的你。有的人在国企作的很不好,到了外企反而成了一条龙;别看你在外企很牛,给你个民营企业你却不一定能玩得转。我在上海招聘我们下属工厂的销售总监的时候有比较深的体会。当时销售总监有在500强外企的工作经历,业绩也还不错,整体素质也很好,但到了民营企业就不知道怎么干了。他在外企的时候,有大把的钱花,预算批准了就可以去干,相对比较规范,下属人员的素质也都比较高;但我们上海工厂刚开业的时候比较节省,要用一分钱办两分钱的事,下属人员的素质和知名外企比也要差一些,有的流程也不是很清晰,总之需要他自己去完善的东西比较多。我就发现他很长时间不适应。外企的财务总监到了民营企业也会面临很多新的课题,要想着怎么去避税甚至要逃税,要想着如何运用非常的手段去融资,这些课题以前他们可能都没有接触过。所以单纯的说外企的能力强我是不认同的,大家的强项在不同的地方,要互相去学习。 我在这三种的企业都呆过,总的体会是外企讲能力,国企讲本事,民营企业既要讲能力,还要有本事。本事是中国人特有的词汇,也只有我们中国人才能明白其中的内涵。我们说政府部门或者国企某某人升迁了,我们的评价往往是这个人很有本事,所以我们遇到的国企领导大多都是比较有本事的人,但是能力怎样就不好说了。因此我的建议是有本事的朋友要去国企,有能力的朋友要去外企,两方面能兼顾的朋友要去民企呵呵。当然,这个事情不是绝对的,现在国企也讲能力,应该是国企本事的比例要大一些,外企对能力的要求要大一些,至于具体的比例,不同的企业不同。你要选择适合你自己的企业。 就具体的福利待遇而言,也要看最终的结果。外企总体的福利很好,但也很难让你有意外的收入;民企总体福利不好,但一不小心公司蓬勃发展,你就成了小富翁。外企压力大一些,培训比较系统,进步比较快;国营企业压力小,可以兼顾很多家庭的事情。我觉得本身无所谓好坏,就像我前面谈到的价值观,关键看你想选择什么。 但是扒开企业一个个看,却是各有各的特点。很难就简单得说外企就比国企或者民企好。要针对每个企业来做决定。同样是国企/民企/外企,也分三六九等。有的外企只是挂羊头卖狗肉而已,其管理和福利等甚至还不如一般的民企,即使是500强的下属公司,有时候待遇和发展空间也会有很大差异。我的一个同学就去了西门子的一家公司,待遇在外企里面也属于一般。刚毕业的同学最容易被这个光环迷惑,也有不少的企业用这个幌子来骗人。一旗在前面的帖子提到“好,继续期待,不过,在做选择的时候,有个问题是很难解决的,就是信息不对称,特别是对于某个企业的了解。”这是很有道理的。但是我们可以通过一定的手段来识别出来。 (首先非常感谢大家的参与,如果大家看后说这个帖子没有耽误我的时间,而且还会有一点启发和帮助,那我就感到非常的欣慰了。也非常欢迎大家提出建议和批评意见。 由于工作本身比较忙,还要抽出时间来写文章,有些朋友的留言回复的不一定很及时,但我会争取尽量回复,不周之处,请大家体谅。 大工的那个例子是这样的,企划部部长很难成为将来的总经理,而且及时刚开始的薪酬是不错的,但是后来薪酬提升的幅度很有限,就像我文章所言,我们企业的企划没有在主战场,如果将来换工作,这份工作很难为他加分。所以那个小伙后来回到了通讯行业去做销售去了,目前做的很不错,早已经远远超过了我们当初所给的薪酬,更重要的是他的职业具有非常强的可持续性。) 就规模而言,企业还可以分为大企业和中小企业。在大公司,你可以直接学习其思维方式和管理理念,大公司的视野、经验和人脉积累是小公司所不能比拟的;而在小企业你可以和公司一起成长,你甚至会成为左右公司发展的中坚力量,杨元庆和联想一起成长就是最典型的例子,很多成长起来的创业型公司的员工都获得了很好的汇报,这甚至是大企业很难获得的。在大公司,你可能学到很多管理规则和方法,但是很多背后的东西要想领悟则很难,比如沃尔玛的物流系统很先进,大家都知道很厉害,知道为什么并能够将其复制到另一个企业的人很少;大企业给的培训体系比较完善,会给你最基本的职业训练,把你塑造成更职业化的人士;大企业的职责分工清晰,在团队合作过程中能够学到沟通与协调等组织运作能力。缺点是工作相对狭隘,螺丝钉的工作居多。在中小企业你往往是身兼数职,实战经验强,而且中小企业是绝对的业务导向,创业机会多,缺点是培训机会少,经营风险大,说不定哪天公司就关门大吉了。 一般来说,大企业培养的人才大都是标准件,至少在大企业彼此之间是适配的,这是因为大企业的发展基本上是战略导向的,按照公司的战略稳步推进,各种制度比较规范,流程比较清晰,工作的内容比较标准。在这家干人力资源到了另一家同样规模的也马上就能上手,所以基本上没有失业的顾虑,只是如何发展的问题;中小的企业培养的人才以非标件居多,这是因为每家企业都有每家企业的特点,比如同样是做人力资源工作,可能有很大差异,人力资源工作本身的具体内容可能差别非常大,而且这家的人事还兼着行政,那家的人事还兼着法律。非标件再到其他企业契合的时候就稍微有一点麻烦,有时候不一定合适,有时候要多磨合一段时间。 我个人的意见是刚开始不要进一些比较小的企业,尤其是刚刚毕业的同学,除非遇到特别好的老板,当然这种机率非常小。因为你那时的社会经验非常少,很难处理得好很多的关系,非常容易对社会和职业等等方面形成一些错误乃至极端的看法。你从小企业获得的东西太少了,看似学到了一些东西,实际上得不偿失,再去找工作的时候才发现已经处于竞争的劣势。我就遇到过几个在小企业作副总经理的人,个人能力还不错,但是稍微大一点的企业都不愿再给他们机会,因为他们已经长成了一颗歪脖子树,公司宁愿招一些完全没有经验的人来。当你在大公司完成基本的职业训练并且具有了某种专长,已经是学有所成,到了厚积薄发的阶段,就可以到一些成长性很好、迫切需要规范的中小企业去。既可以让自己的所学有一个发挥的平台,从实践的角度进一步提高自己的能力,又可以分享到中小企业快速成长所带来的收益。 谈到这里,又要说题外话。不少人误把经验当作能力,误把学历、知识当作能力,都是不对的。有的人所谓的十年行业经验也只是对行业有点粗浅了解,有的人干了三年已经有了很深的见识。或者有的人让你感觉,虽然他的经验很不够,但他的那种思维方式很好,按照这个趋势发展下去肯定会有不错的发展。小时候老家有句骂人的话“你一把年纪都活到狗身上去了”指责某些人的见识没有随着年龄的增加而增长,话糙理不糙。所以我们人在企业,但不能局限于企业,要有更高的视角。董事会关注产业,总裁关注行业,总经理关注企业,员工关注职业,你要想成长为总裁或董事长,就要去关注他们应该关注的事情。 职业发展中最悲哀的两个状况一是拼命的在贫瘠的土地上耕耘,二是总是在寻找机会却不知道自己就站在肥沃的土地上。在企业里工作这么多年,我的体会是让你100%满意的企业是不存在的。我遇到不少的人整天抱怨企业,福利不好,上司或老板太苛刻等等,这都不是一种职业的素质。如果你觉得企业不满意,我的建议是要么离开他,要么去适应或者改进,抱怨不解决任何问题。我刚刚工作的时候,我们一帮一块进公司的大学生聚会的必修课之一就是一起抱怨公司,每天晚上的卧谈会就是对公司的声讨大会。我后来发现这种状态太危险,很容易把自己给搞成老大姐。去年我又到原来的公司去了一趟,发现抱怨的那些人还在抱怨,而没有抱怨的那些人要么已经在公司有了不错的发展,要么已经重新开辟了自己的职业领域。我并不是说一点都不能抱怨,现在不公平的事情太多,还不让我们说几句发泄一下嘛,但我只主张有限度的抱怨。根据我的观察,其实抱怨很容易形成习惯,结果最后抱怨成了主旋律。尤其是几个喜欢抱怨的人走到了一起,你一言我一语,开完声讨大会,不解决任何问题,反而容易消磨人的意志,所有的抱怨之词都成了你安慰自己的借口。这不是一个积极心态的人的做法。我和不少的私营企业老板打交道,现在社会上太多不公平的现象,尤其是政府部门,太多需要我们抱怨的东西,但我发现他们很少抱怨,他们只是想着如何来利用目前的这种体制。我不是说他们一定是对的,我只是请你相信,机会往往来自于不合理。 第六章职业规划选择之四—职业选定主战场 第四个选择是要考虑职业。 我在这里先解释一下,所谓的职业就是你所从事的具体职能比如营销、财务、行政、管理或者业务。我遇到的大部分职业规划不理想的人是在这部分,而在具体职业上的选择出现误差带来的伤害也最为明显、最为严重。 我先结合职业和企业来讲。 我遇到过学管理的同学到很小的企业去做管理,我觉得这个选择欠妥当。不是说小企业不需要管理,而是目前中小企业的现状实际上不重视管理。中小企业是业务和机会导向,还没有发展到战略、管理导向。如果你是做业务的,去中小企业也不一定有什么不妥,因为所有的大企业都是从小企业走过来的,但是学管理的或者说将来希望做管理的,你必须到能够让你理解管理、应用管理的地方去。千万不要以为你是管理专业毕业的你就会管理,这里面的学问太深了。你去了以后,一切全凭自己摸索,真正规范的东西没有学到,积累了一大堆错误的观念和操作办法,真的是把自己给害了。 人事行政部就是不少中小企业的产物。不否认有大的公司会设行政总裁,主管人事和行政,也不否认有的人事行政部经理发展得很好,但就我个人的职业经验而言,这个职位的发展空间小。尤其是行政。前段时间一个重点大学毕业的小女孩很高兴的告诉我她刚工作半年就被提升为办公室主任,后来我给她分析她才明白其中的道理。为什么呢?行政这个职位的发展空间太小,刚开始好像工资不低,但我很少见到在这个职位上拿高薪的,能突破20万年薪算是不错了。因为就绝大多数公司而言,它的进入门槛很低,经常遇到不知道干什么好地说,我来干行政吧,这个岗位提供的价值是基本上一定的,无论谁来做,也不可能做出花来,薪水上升到一定空间就后继乏力。很多有才情的小姑娘稀里糊涂在这个岗位呆了好几年,结果就成了软翅膀的蝴蝶,很难再飞起来了。这样的工作倒是很好找,但是哪怕你做了很多年的行政,薪酬也是在某个位置打晃,很难有突破。所以这个职位可以作为跳板,但不宜久留,那些能力强的,要迅速利用这个职位,成长为副总等等。 其实,不光是行政,不少岗位都存在这样的情况。关于职业这里我的建议就是要尽可能的到企业的主战场耕耘。 什么是主战场?举例来说,实际上就是那些最能够直接提供价值的部门,主要是业务部门,当然,对于一些大的企业而言,我认为财务、人力资源、战略规划部门等等也可以划入主战场的范畴。如果是在军队里面,那就是直接打仗的那一部分,当然也会包括信息和情报等支持部门,但是你如果进了炊事班,那你的职业空间就不是很大。有个笑话说炮兵连炊事班的战士“背黑锅、戴绿帽子”还要看别人打炮,简直是悲惨之极。也很少听说那个将军有多少年的炊事员生涯。所以,你要想当将军,不要去当炊事兵;你要想在职业上有上升空间,最好不要去企业的不是主战场的部门。但是大家可能会说,这些部门的存在对企业是确实必要的,我们都不去,那谁去?我的意见是让没有看到这个帖子的人去看呵呵。不过请大家放心,因为总归有些人喜欢平平淡淡,乐意去那样的部门。 主战场的部门汇集了公司最多的资源,也会拥有公司最多的升迁机会。一般来说,公司的高层大都出身于主战场的部门,偶尔有那么一个负责次要部门的高管,在公司的实际地位都还不如一个主战场部门的负责人。关于这一点,在政府部门工作的人最有体会,主战场部门的处长比那些边缘部门的局长要牛的多,其实无他,就是因为拥有更多的资源,有更好的发展前景而已。当经济不景气或者公司裁员时,往往是从边缘部门开始比如行政、公关等等,而那些公司的核心部门反而是需要加强或者影响不大的部门。 主战场的部门还有一个好处就是这样的部门员工的回报往往是随着公司业务的成长而成长,而且是非常的正相关;再者往往是同类型的公司都肯定要设的部门,往往决定公司的核心竞争力。所以不愁工作不好找。 我们也许选择了一个非常有发展前途的行业,也加入了一个非常优秀的公司,但如果不能进入主战场,在一些无关紧要的辅助性部门工作,即使付出了很多地努力,都很难取得职业上的长足发展。 企业中还有另外一个主战场,那就是权力的主战场,尤其是在大的公司,这点尤为重要。这也意味着要尽可能的在公司的总部工作。在规模较小的公司而言,老板可能就会认识每一个员工,每一个员工的能力和成绩都能够被老板观察到;事实上,也只有你的业绩被人认可你才有发展的机会,否则即使你打破了世界纪录,没有权威的人作证明也是没人相信。在分支机构遍布全国乃至全球的大公司里,在总部以外的地方工作的人,往往会遇到这个问题。他们离那个权威的能够证明他们业绩的人太远了,总部的决策层很难会注意到他们。这个和我在前面讲到地域的时候是一样的,那些县、乡镇就相当于分支机构,拼了老命才能熬个县长,就是因为远离权力的主战场;而在中央部委工作的那些人,稍微有点成绩往下一放就是个地区专员。因此,要想获得外在职业生涯的发展,一开始要尽可能的争取机会在公司总部工作。在公司总部,潜在的升迁机会更多,视野更宽广。接触到不同层面的人,从基层员工,中层经理直到董事会成员。还有不少的领导职位是分公司所不可能有的,尤其是公司总部不仅要安排总部自己的职位,而且当下属机构要为空缺的岗位安排人的时候总部的人员也是进水楼台。从这么多的职位中得到机会的机率,显然要比在分公司大很多倍。当然,如果当下属企业的规模本身足够大,几乎就能够给你的职业生涯很大的发展空间那也是可以接受的。 前两天遇到一个著名大学学计算机的研究生,他去了一家比较大的公司作业务软件的开发和硬件维护,虽然目前待遇也还可以,但我认为他的发展空间很有限,原因就是他没有在企业的主战场,他们公司将来的总经理只能是业务出身,不太可能是他的这种经历。如果将来他们公司计算机方面的业务外包,这非常有可能,他的发展就要受损,因为他和那些在软件公司工作的同学的差距已经在逐步拉大。我遇到好几个学计算机的,都在房地产、生产等等方面的企业,他们的发展空间可想而知。类似这种情况,要去也只能去一些非常大的公司,否则一点意思都没有。 这里想再说点题外话,我们去企业工作的时候,首先应该问一下我们能够替企业创造多大的价值,因为我们的收益实际上来自于我们创造的价值,如果我们的专业技能不能为企业创造价值的话,即使我们能够拿到一时的高薪,也很难有大的发展,关键是有职业素养的人会觉得很难受。我来目前公司的时候,有另外一家企业的老板也希望我过去做管理,给我的薪水是目前企业的1.
首先简单介绍一下S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”。是一种自动的硬盘状态检测与预警系统和规范。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行情况进行监控、记录并与厂商所设定的预设安全值进行比较,若监控情况将或已超出预设安全值的安全范围,就可以通过主机的监控硬件或软件自动向用户作出警告并进行轻微的自动修复,以提前保障硬盘数据的安全。除一些出厂时间极早的硬盘外,现在大部分硬盘均配备该项技术。
磁盘作为火星舱的主要数据存储介质,它的健康与否关系着整个火星舱的数据安全。为了更好的了解火星舱磁盘状况,我们在火星舱中引入了SMART检测工具smartctl,通过该工具可以一览磁盘的所有健康属性状况。下图是火星舱一块磁盘的SMART属性检测结果。 ARRIBUTE_NAME为属性名称,VALUE为当前值,WORST为历史最差值,THRESH为阈值,TYPE为属性类型,RAW_VALUE为原始值。
对于不同的属性,我们首先关心的是它的类型。包括一般类型“Old_age”和预损坏类型“Pre-fail”,我们也把标有“Pre-fail”类型称为的属性称为关键属性,因为这种属性可以决定一个磁盘是否即将损坏。其次我们要看的VALUE和THRESH的值,通常情况VALUE值是越大越好,如果VALUE值小于THRESH值,那就预示着该磁盘有问题了,如果关键属性的VALUE低于THRESH值,那就说明该磁盘即将损坏。
对于不同厂家的磁盘,关键属性的定义是不同的。如上图火星舱使用的西数硬盘,关键属性是1、3、5,其中:
Raw_Read_Error_Rate 表示存储器从一个硬盘表面读取数据时发生的错误率。原始值由于不同厂商的不同计 算方法而有所不同,其十进制值往往无意义的。一般来说有数值意味着磁头已出现问题了。
Start_Stop_Count 表示一个盘片启动关闭周期的统计值,只有硬盘从完全断电中启动或从睡眠模式恢复,盘片主轴电机被启动时才会记一次数。
Reallocated_Sector_Ct 记录由于损坏而被映射到无损的后备区的扇区计数。当硬盘出现损坏扇区时,可以通过将其物理空间指向到特定的无损区域进行重映射修复,从而出现坏扇区的硬盘仍可使用。但当高过一定数值后,后扇区消耗殆尽而无法再重映射修复时,这些坏扇区就会显现出来且无法自行修复。除外由于要要求磁头读取这些坏扇区时专门再移动到后备区读写数据,对硬盘读写性能也有影响。
因此只要我们监视所有磁盘的这三个属性的当前值是否低于阈值,就可以判断该磁盘是否即将损坏。如果发现有磁盘即将损坏,我们将立刻发送邮件通知管理员并且在火星舱面板点亮对应磁盘的红色预警灯,这样管理员就可以使用火星舱中的磁盘替换功能,从容的用一块未使用盘替换该盘,预防了磁盘损坏可能带来的灾难性后果。
判断ffmpeg读到的packet是否为关键帧
av_read_frame(avFormatCtx, readPacket)
if(readpacket->flags &AV_PKT_FLAG_KEY )
{
key frame
}
//如果是h264编码,从帧数据判断
frame = |length|data|
length后面紧跟着的第一个byte后5位如果是01001则为关键帧
if((frame[4] & 0x1f) == 5)
{
NSLog(@"关键帧");
}else{
NSLog(@"非关键帧");
}
两天前,打篮球,被同事弄伤了脸,左眼下脸被撕开了一道 4cm 长的口子。之后去北大医院缝了十一针,虽说是美容针,但难免留下疤痕,而这时候,我才 24 岁,大学毕业,刚出来工作两年,事业处于上升期,还没女朋友。 第一天的晚上,睡觉之时,转转反侧,如今脸上留下了一道疤痕,以后如何找女朋友?以后如何回家面对家人,亲戚,朋友?。。。。想得越多,心跳越紊乱,心里面的担心在这寂静的夜晚一下子爆发出来,结果,那一夜,眼睁睁的看着天亮。
第二天起来,精神很疲倦,思考了一个晚上,除了没精打采,没有任何的好处。那一刻,我开始调整自己的思维:休息不好会导致皮肤差,也会导致伤口的恢复能力减慢,最终的结果是可能会影响到伤口的恢复。就算是自己安慰自己,或者调节自己的一种手段吧。
从小到大,我从来没有懦弱的活过,一直活在自我坚强的氛围中。
小学的时候,因为家里穷,连一本几块钱的课后练习书都买不起,经常借同学买的书籍过来自己操写,然后完成。
中考前几天的时候,因为很担心自己考的成绩不好,而这时家里也正繁忙的季节,还得花上大半天的时间去干农活,只有晚上那么几个小时的时间好好复习,也没有人能够诉说心里的苦闷。
高中的时候,远离家里去外地读书,一个月的伙食费3百不到,除去来回车费20,一天消费280/30 = 7,早餐一块,午餐和晚餐3块,买一个本子都捉襟见肘。
大学的时候,一次打球不小心,手弄到拉,去医院做了手术,怕父母知道后受骂,不敢告诉家里听,结果做完手术,又要照顾自己起居生活,结果因为出血,伤口被感染啦,手上留下了一块长长的疤痕。
现在毕业了,脸上又给留下了一道深深的疤痕。。。。。。。。。。。。
感觉,上天老是在跟我开玩笑,而这玩笑,开得有点大啦,每一次我都要学会去自己默默的承受,不敢给家里人知道,没有经济来源,没有人的安慰。。。。。。
心里的苦闷,谁又能知道?我也想困难的时候有个温暖的家,作为自己坚强的后盾,可我没有,有的只是一顿痛骂;我也希望,能有个幸福的家庭,不用每天活得那么拮据,可我没有;我也想有个有权有势的家庭,在自己找工作或者找老婆的时候能够助上一臂之力,可我也没有。有的只是自己这一身躯,如果你坚强,那么就可能支撑起眼前的一切磨难,如果想放弃,那么也会默默的在尘世中消失,没人可怜。
想到这里,我觉得自己还有什么放不下的呢?在自己青年最珍贵的时候,上天在我的脸上给了我一道疤痕,可没有回头路,如果放不下,那道疤痕也不会消失。摆在面前的只有两条路,一是坦然的学会去接受眼前的一切,不管有多难;一是可以不停地抱怨和担心,但是也必须生活,仍然要面对这一切的一切。而我在第二天醒来后,就准备选择了第一条路,我会坚强的走下去,我甚至准备好告诉上帝,我会过得很好,带着您赐予的所有伤疤。
使用Microsoft Web Application Stress Tool对web进行压力测试 Web压力测试是目前比较流行的话题,利用Web压力测试可以有效地测试一些Web服务器的运行状态和响应时间等等,对于Web服务器的承受力测试是个非常好的手法。Web 压力测试通常是利用一些工具,例如微软的Web Application Stress、Linux下的siege、功能全面的Web-CT等等,这些都是非常优秀的Web压力测试工具。
虽然这些工具给我们测试服务器承受能力带来方便,但是它们的危害却更是惊人,甚至于利用随便一种比较全面的测试工具就可以对一台小型的 Web服务器发动灾难性的拒绝式攻击。下面我就带大家利用微软的Web Application Stress进行一次Web压力测试,其目的是为了让大家看到它的巨大危害。
一、工具简单介绍
Microsoft Web Application Stress Tool 是由微软的网站测试人员所开发,专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具,您可以使用少量的客户端计算机仿真大量用户上线对网站服务所可能造成的影响,在网站实际上线之前先对您所设计的网站进行如同真实环境下的测试,以找出系统潜在的问题,对系统进行进一步的调整、设置工作。就是因为这些特性,才使它具备了D.O.S轰炸的功能。
小提示:D.O.S(拒绝服务攻击)通过使你的服务计算机崩溃或把它压跨来阻止你提供服务。简单来说,就是让你的计算机提供可能多的服务从而使你的计算机陷入崩溃的边缘或崩溃。
二、工具简单设置
打开Web Application Stress Tool,很简洁的一个页面(如图1),上面是工具栏,左下方是功能选项,右下方是详细设置选项。在对目标Web服务器进行压力测试之前,先对它进行一些必要的设置。
图1
1. 在“settings”的功能设置中(如图2),一个是Stress level (threads)这里是指定程序在后台用多少线程进行请求,也就是相当于模拟多少个客户机的连接,更加形象的就是说设置多少轰炸的线程数。一般填写 500~1000,因为这个线程数是根据本机的承受力来设置的,如果你对自己的机器配置有足够信心的话,那么设置的越高,轰炸的效果越好。
要改变并发用户数,点Settings图标。如果少于100个用户,你可以直接设置Stress Level,要模拟多于100个用户,你还须设置Stress Multiplier。基本公式为:用户数(线程数)= Stress Level * Stress Multiplier.如果要模拟1,000个用户,你可以设置Stress Level为100而Stress Multiplier为10。
图2
2.在“Test Run Time”中来指定一次压力测试需要持续的时间,分为天、小时、分、秒几个单位级别,你根据实际情况来设置吧!
3.其余的选项不太重要,这里就不再浪费笔墨,朋友们可以自己尝试一下设置。
三、压力测试
工具介绍完了,下面来准备条件:这里与一个朋友商量好进行测试,他是单机上网,机器配置是CPU:Athlon XP2500+、内存512MB、硬盘80GB等,机器配置还不错。他在机器上安装了IIS,架设了一台对外的Web服务器,Web服务中的程序是动网 7.0。我就利用压力测试工具对这台服务器进行测试。
步骤1:在工具中点右键,选择Add命令,增加了一个新的测试项目:New script,对它进行设置,在主选项中的server中填写要测试的服务器的IP地址。在下方选择测试的Web连接方式,这里的方式Verb选择 get,path选择要测试的Web页面路径,这里填写/Index.asp,即动网的首页文件(如图3)。
图3
步骤2:在“Settings”的功能设置中将Stress level (threads)线程数设置为1000。完毕后,点工具中的灰色三角按钮即可进行测试(如图4)。测试完毕,等待朋友把任务管理器以及连接查看的截图发过来!
图4
攻击开始后,朋友从任务管理器中可以看到CPU使用率已经达到100%,损耗率达到最大(如图5)。在CMD窗口中使用命令netstat -an,可以看到我的IP地址在朋友服务器上的80端口进行了非常多的连接(如图6)。而且它的Web网站已经打不开了,提示过多用户连接,达到了跟 D.O.S攻击一样的目的。
图5
图6
试想,如果利用多台肉鸡对一台服务器进行Web压力测试,那么对这台服务器来说将是灭顶之灾,所以朋友们在使用它之前一定要慎重考虑。
分析测试结果
你可以点工具条上的Reports图标来看产生的报告。这将产生一个与Script tab相临的新的tab。报告被存储在一个大纲视图里。首先,在你的报告下面点Result Codes,这个将给你一个快速的印象,这次测试是否出现了什么问题。如果你看到的状态代码不是200,你也许需要调查一下出现了什么问题,通常的问题包括署名和不正确的URL路径。
由于项目中要求输入的数字用千分位显示,数字保留两位小数,而且要求再删除数字的时候也要求删除后的数字也要是千分位显示,好像表达的有点不清楚,贴代码吧,作为一个小工具吧。
/** * 格式化数字为千分位显示; * @param 要格式化的数字; * @return */ public static String fmtMicrometer(String text) { DecimalFormat df = null; if(text.indexOf(".") > 0) { if(text.length() - text.indexOf(".")-1 == 0) { df = new DecimalFormat("###,##0."); }else if(text.length() - text.indexOf(".")-1 == 1) { df = new DecimalFormat("###,##0.0"); }else { df = new DecimalFormat("###,##0.00"); } }else { df = new DecimalFormat("###,##0"); } double number = 0.0; try { number = Double.parseDouble(text); } catch (Exception e) { number = 0.
转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家拍砖!
源码下载地址: http://www.rayfile.com/zh-cn/files/bc9d6854-eb7e-11e1-a73e-0015c55db73d/
一、载入dll的另一方法:
1、 导出dll端
(1) 在自己的.cpp文件中定义extern"C"__declspec(dllexport)
这样就得到了导出的接口
(2) 提供给调用者接口.h文件,eg:
#ifndef DELAYLOADLIBAPI #define DELAYLOADLIBAPI extern "C" __declspec(dllimport)
#endif
///
DELAYLOADLIBAPI int fnLib();
DELAYLOADLIBAPI intfnLib2(); 由于是由宏DELAYLOADLIBAPI 开关,在此.h之前如果没有定义,那么就用dllimport。
2、使用导出dll的模块
(1)#incldue 上面讲到的 接口.h文件
这样会去运行目录下查找DelayLoadLib.dll,如果存在就加载它。
#include "..\20-DelayLoadLib\DelayLoadLib.h" // My DLL function prototypes (2)判断是否加载此dll。
HMODULE hmod =GetModuleHandle(pszModuleName);
返回值如果不为空,表明已经加载了。
(3)使用接口.
二、 延迟加载
此功能实现了当使用函数时再加载DLL,且可以用API __FUnloadDelayLoadedDLL2主动卸载DLL。
1、添加延迟加载的dll,及链接的lib(实验证明可以不加lib链接)
(1)在目标EXE工程中设置延迟加载的DLL,注意:它的路径是从执行的exe路径开始算的,如果是同一目录,那么直接写名字即可;
如果路径错误,那么会报以下警告:
这是因为VS2008编译器中的确延迟加载DLL模块的使用就是在代码中加入/DELALOAD选项,所以这与我们在代码中直接加入的效果是一样。(出现此警告,表示延迟加载没有实现)
(2)在“附加依赖项”里添加延迟加载的dll对应的lib,它的路径是从exe工程的路径开始算的。
如果不加此lib,编译时报以下 警告:
但不影响执行的情况。
我把链接的lib去掉后,执行时的情况是:
第一步: case dliNotePreLoadLibrary
第二步:
第三步:case dliFailLoadLib
第四步:进入异常处理函数
case VcppException(ERROR_SEVERITY_ERROR,ERROR_MOD_NOT_FOUND):
死锁的条件
互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):进程已获得了一些资源,但因请求其它资源被阻塞时,对已获得的资源保持不放。
不可抢占条件(No pre-emption) :有些系统资源是不可抢占的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
循环等待条件(Circular wait) :若干个进程形成环形链,每个都占用对方申请的下一个资源。
处理死锁的策略
1、忽略该问题。例如鸵鸟算法。
2、检测死锁并且恢复。
3、仔细地对资源进行动态分配,以避免死锁。
4、通过破除死锁四个必要条件之一,来防止死锁产生。
鸵鸟算法:
该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
银行家算法: 所谓银行家算法,是指在分配资源之前先看清楚,资源分配后是否会导致系统死锁。如果会死锁,则不分配,否则就分配。
按照银行家算法的思想,当进程请求资源时,系统将按如下原则分配系统资源:
(1) 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。
(2) 进程可以分期请求资源,当请求的总数不能超过最大需求量。
(3) 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
(4) 当系统现有的资源能满足进程尚需资源数时,必须测试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。
解决死锁的策略
对待死锁的策略主要有:
(1) 死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
(2) 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。
(3) 死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
(4) 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。
死锁的避免:
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。方法如下:
1.如果一个进程的当前请求的资源会导致死锁,系统拒绝启动该进程;
2.如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配;
显然要避免死锁,必须事先知道系统拥有的资源数量及其属性
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
当我们想将一个字符串分割时,会使用split函数,但是如果要实现以下效果该怎么办呢?
例如我们要讲如图所示的字符串先按行分割,再按=号分割,最后输出最大成绩。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 输出最高成绩 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string maxname; int maxScore =0; string[] lines = textBox1.Lines;//先使用Lines函数将字符串按行分割并赋值到一个字符串数组 foreach (string line in lines) { string[] a = line.Split('='); string name = a[0]; int score = Convert.
作者:david_zhang@sh 【转载时请以超链接形式标明文章】
链接:http://www.cnblogs.com/david-zhang-index/archive/2012/08/16/2642261.html
tkprof工具对跟踪文件进行格式化,提高可读性
Tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
1 [oracle@DCMSBDM trace]$ tkprof kobra_ora_31851.trc rich.prf 2 3 TKPROF: Release 11.2.0.1.0 - Development on Thu Aug 16 14:23:45 2012 4 5 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 6 7 [oracle@DCMSBDM trace]$ more rich.prf 8 9 TKPROF: Release 11.2.0.1.0 - Development on Thu Aug 16 14:23:45 2012 10 11 Copyright (c) 1982, 2009, Oracle and/or its affiliates.
2部图匹配,不能考虑0
Program P1325; var n,m,k,i,j:longint; p,x,y,level:longint; map,f,list:array[-1..300,-1..300] of longint; d,e:array[-1..300] of longint; queue:array[1..300] of longint; b:array[-1..300] of boolean; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; procedure dijstra; var h,t,i:longint; begin fillchar(d,sizeof(d),0); fillchar(queue,sizeof(queue),0); fillchar(b,sizeof(b),false); queue[1]:=n+m; b[n+m]:=true; h:=1; t:=1; while h<=t do begin for i:=-1 to n+m-1 do begin if (map[i,queue[h]]>0) then if (not(b[i])) then begin inc(t); queue[t]:=i; b[i]:=true; d[i]:=d[queue[h]]+1; end; end; inc(h); end; d[-1]:=n+m+2+1; end; procedure push(i,j:longint); var flow:longint; begin flow:=min(e[i],map[i,j]-f[i,j]); if (e[j]=0) and (j>-1) and (j<n+m) then begin inc(list[d[j],0]); list[d[j],list[d[j],0]]:=j; level:=max(level,d[j]); end; dec(e[i],flow); inc(e[j],flow); inc(f[i,j],flow); f[j,i]:=-f[i,j]; end; procedure relable(i:longint); var j,minj:longint; begin minj:=maxlongint; for j:=-1 to n+m do if (map[i,j]-f[i,j]>0) and (b[j]) then minj:=min(minj,d[j]); d[i]:=minj+1; level:=d[i]; inc(list[level,0]); list[level,1]:=i; end; Procedure hllp; var i,j,flow:longint; begin dijstra; level:=0; for i:=0 to n-1 do if b[i] then begin e[i]:=1; f[-1,i]:=1; f[i,-1]:=-1; inc(list[d[i],0]); list[d[i],list[d[i],0]]:=i; level:=max(level,d[i]); end; while (level>0) do begin i:=list[level,list[level,0]]; dec(list[level,0]); while (level>0) and (list[level,0]=0) do dec(level); for j:=-1 to n+m do if (d[i]=d[j]+1) and (map[i,j]-f[i,j]>0) and (b[j]) then begin push(i,j); if e[i]=0 then break; end; if e[i]>0 then relable(i); end; end; begin read(n); while (n>0) do begin fillchar(list,sizeof(list),0); fillchar(e,sizeof(e),0); fillchar(f,sizeof(f),0); read(m,k); fillchar(map,sizeof(map),0); for i:=1 to k do begin read(p,x,y); if (x=0) or (y=0) then continue; map[x,n+y]:=1; end; for i:=0 to n-1 do map[-1,i]:=1; for i:=n to n+m-1 do map[i,n+m]:=1; hllp; writeln(e[n+m]); read(n); end; end.
//#include <stdio.h>
#include <Windows.h>
int main()
{
//1.打开指定端口
HANDLE hComm = CreateFile("COM1", //串口名称
GENERIC_READ|GENERIC_WRITE, //串口属性:可读写
0, //串口设备必须被独占性的访问
NULL, //无安全属性
OPEN_EXISTING, //串口设备必须使用OPEN_EXISTING参数
FILE_ATTRIBUTE_NORMAL, //同步式I/O
0); //对于串口设备而言此参数必须为0
if(hComm == INVALID_HANDLE_VALUE){ //如果该串口不存在或者正被另外一个应用程序使用,
return FALSE; //则打开失败,本程序退出
}
//2.设置串口参数:波特率、数据位、校验位、停止位等信息
DCB dcb;
GetCommState(hComm,&dcb); //获取该端口的默认参数
dcb.BaudRate = 115200; //修改波特率
SetCommState(hComm,&dcb); //重新设置参数
//3.往串口写数据
char IpBuffer[] = "Hello world!"; //将要写入的数据
DWORD nNumberOfBytesToWrite = strlen(IpBuffer); //将要写入的数据长度
DWORD nBytesSent; //实际写入的数据长度
WriteFile(hComm,IpBuffer,nNumberOfBytesToWrite,&nBytesSent,NULL); //4.关闭串口
CloseHandle(hComm);
return 0;
}
转载于:https://my.oschina.net/imtoby/blog/72997
斐波那契数列的通俗解法是利用递推公式进行递归求解,我们可以更优化的去解决它。
方法一:通项公式
斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+sqrt(5))/2,(1-sqrt(5))/2.所以f(n)=Ax1n+Bx2n,带入f(0)=0,f(1)=1得A=sqrt(5)/5,B=-sqrt(5)/5.则f(n)求出。
方法二:分治策略
可以看出斐波那契数列有如下性质:
(fn fn-1)=(fn-1 fn-2)*A,可以得出A=(1 1;1 0)
递推可得:(fn fn-1)=(fn-1 fn-2)*A=(fn-2 fn-3)*A2=…=(f1 f0)*An-1
因此问题转化为n次幂的问题,因此幂运算有这样的性质ca+b=ca*cb,而n次幂的n可以拆成二进制的加法,所以只需要lgn次遍历即可。代码如下:
Matrix MatrixPow(const Matrix& base,int exponent) { Matrix temp=base; Matrix result=Identity; for(;exponent;exponent>>=1) { if(exponent&0x1) result*=temp; temp*=temp; } return result; } int Fibonacci(int n) { Matrix A={1,1,1,0}; Matrix a=MatrixPow(A,n-1); return 1*a[0][0]+0*a[1][0]; } 转载于:https://www.cnblogs.com/daniagger/archive/2012/08/15/2640131.html
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 数据库连接类 * 说明:封装了 无参,有参,存储过程的调用 * @author iflytek * */ public class ConnectionDB { /** * 数据库驱动类名称 */ private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; /** * 连接字符串 */ private static final String URLSTR = "jdbc:sqlserver://localhost:1433; databaseName=Northwind"; /** * 用户名 */ private static final String USERNAME = "