http://www.k8w.net/ >### 1440 j9国际站|(官网)点击登录 http://www.k8w.net/news/company/201603/541.html 新疆二域有多年的j9九游会履历,专注于手机APP开辟,新疆二域软件是一家专业的的企业挪动互联网办理方案的手机app开辟公司。j9九游会使用跨平台的开辟技能,一次开辟后可以在Android和Ios上通用。大大进步了开辟服从,浪费了企业开辟本钱。 手机APP开辟 Android开辟 ios开辟 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/201603/540.html 新疆二域面向当局、媒体、企业提供微信大众平台定制开辟商业。包括微信大众平台第三方定制开辟,微网站、微商城、微相册、微会员、微外卖、微预定、微付出、等商业的功效模块设计,接待来电征询。 微付出 微网站 微信接口 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/201603/539.html 第一章 体系简介 1.1、 体系概述 该体系次要因此微信大众号为入口,协助用户完成:剩余车位盘问、车位预定、左近车场信息盘问、车场优惠以及入场计时,进场计费、微信付出等办事的智能停车场微信付出平台。 整个体系由智能车牌辨认体系、微信大众号、体系办理平台、车场办理客户端、云端办事器体系组成,次要是给用户提供车场盘问、车场预定、以及快捷付出等办事。 1.2、 体系流程 1.2.1、入场流程 预定车辆:用户经过经过微信大众平台预定完成后,微信大众号会将预定的车场、预定工夫、预定车号经过云办事器发送给车场数据库,车场数据库开端计时并预留车位,同时将预定完成信息以及剩余车位发送到云办事器,同时前往给用户预定乐成的信息。 暂时车用户入场:车辆入场后摄像机抓拍车牌号将信息车牌号、剩余车位、入场工夫发送到云端办事器,办事器检索车牌号信息,天生订单并给响应的用户发送入场信息。 1.2.2、进场流程 车辆进场:抓拍摄像机辨认车牌号,车场数据库将进场工夫和车号发送到云办事器,云办事器经过车号检索到用户,同时统计停车工夫以及应付出金额,并将其发送到微信大众平台用户端上提示用户举行付出,用户付出完成后云办事器收到信息悔恨将该车的车号、完成付出的金额发送给车场数据库,车场放行,并将车辆进场工夫,剩余车位发送给云端办事器由云端对数据举行保管并更新车位信息。 第二章 步伐设计 2.1、 设计思绪 平台统共分为三个脚色,辨别为:微型大众号用户、停车场办理员、体系平台超等办理员,j9九游会会辨别为三个脚色设计差别的界面。 微佩服务平台便是微信大众号(简称“用户端”),用户端次要是为了办事于用户,为用户提供车场盘问、车位表现、车位预定、钱包充值、停车资微信付出或钱包付出等办事商业。设计思绪次要以功效片面,界面简便,利用便捷为主 停车场办理员:该脚色只需是为了办理车场而设计。该脚色可以对车场的地点、车位数、费率、车场优惠运动以及一系列的报表盘问状况以及静态的车场信息表现。设计思绪次要是一个窗口表现多样信息。 体系平台超等办理员(简称“超等办理员”):该脚色次要是为了办理维护平台而发生,具有盘问用户信息,统计用户的充值金额,办理车场,检察报表,以及用户真个首页信息维护、优惠信息的发送等功效。 2.2、平台介绍 2.2.1用户端 用户登录到用户端进入首页后将有三个主选项:我的信息、车场引导、我的订单。 2.2.1.1、我的信息 2.2.1.1.1、手机绑定 手机绑定功效次要是为初次登任命户注册账号而设计,就有注册新用户、手机登录、暗码找回功效。 2.2.1.1.2、团体信息 团体信息次要是让客户填写团体信息,有昵称、头像、账号、地点、地域这些信息录当选项,是为了更好的办理团体账户而设计。 2.2.1.1.3、我的钱包 我的钱包里可以为团体账户充值,盘问账户余额以及利用优惠券的功效(优惠券可以间接当做现金存在团体钱包里)。 2.2.1.1.4、我的坐骑 可以录入车牌号码、车辆型号、颜色、地点地等信息,此中违章盘问将间接跳转到交管所违章盘问网页。 2.2.1.2、车场引导 2.2.1.2.1、左近车场 表现舆图上我左近肯定范畴内车场点位的散布图,点击每个点位将表现车场的复杂信息,如:称号、剩余车位、费率、有无优惠、预定等信息,利用预定功效会间接跳转的预定界面。 2.2.1.2.2、预定 可以选择预定车场的称号(同时表现该车场费率)、预定开端工夫、预定多永劫间(默许1小时)完成后选择能否提交,提交后跳转到付出关键,可以选择钱包付出以及微信付出,付出完成后将为用户预留车位。 2.2.1.2.3、车场信息 车场的列表,可经过填上天区检索车场,点击概况将表现该车场的称号、所在、费率、剩余车位、预定等信息。 2.2.1.2、我的订单 该模块会表现团体的停车记载,并表现如今正在举行的订单情款,车辆进场时将会给用户发送信息提醒用户有必要付出的订单会给在线付出以及现金付出两个选项,选择在线付出进入在线付出关键,选择现金付出则流程完毕转到停车场体系处置。 2.2.2车场办理 车场办理是为车场办理员脚色提供的办理模块。次要有车场信息、车位办理、免费办理、优惠办理、报表办理几大办理选项。 2.2.2.1、车场信息 录入车场信息,如:车园地址、车场称号、简介、优惠运动等信息。 2.2.2.2、车位办理 车位信息的盘问,可以对总车位,剩余车位以及已预定车位的信息举行盘问。 2.2.2.3、免费办理 对车场的费率举行设置 2.2.2.4、优惠办理 对车场的优惠信息举行提交,可以在用户真个车场信息里看到该信息。 2.2.2.5、报表办理 盘问买卖记载,明细汇总信息都可以盘问。 2.2.3平台办理 次要有首页办理、权限办理、结算办理、车场办理、用户办理、报表办理几大办理选项 .2.3.1、首页办理 次要是为了对首页信息举行办理和推送,如公布优惠关照、平台简介、告白链接等信息。 2.2.3.2、权限办理 办理用户的脚色创立以及权限分派。 2.2.3.3、结算办理 与个车场牢固工夫的结算记载状况,如:能否结算、结算工夫、未结算统计等。 2.2.3.4、车场办理 车场提交下去的信息举行考核,以及对舆图举行办理,标注各停车场在舆图上的地位以及点位的信息费率输出。也可以对一切车场的信息举行盘问办理。 2.2.3.5、用户办理 办理微信誉户,盘问用户的车号信息以及用户钱包的余额信息,汇总用户余额。 2.2.3.6、报表办理 依据盘问条件盘问相干报表,明细大概汇总。 停车场办理体系 停车场软件 车牌辨认体系 微信付出 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/201211/538.html Domino是IBM 在96年左右盛行起来的OA开辟东西,好处是开辟速率比力快,基于Lotus的剧本举行开辟,善于于非布局化数据的处置,与Lotus 的邮件体系相整合,次要用来作事情流和外部邮件的通报,由于Louts接纳公用的文档数据库体系(有别于一样平常的干系型数据库,如oracle、mysql、SQL server等)。以是Lotus Notes关于仅对单一的音讯和事情流体系来说是不错的架构,但假如想做较大范围的商业整合大概商业开辟会是难重重。 Domino平台的上风: 1、可以十分疾速的完成操纵,关于复杂商业开辟服从十分快。 2、Domino拥有一个文档数据库办理体系,善于于存储非布局化信息,并提供全文检索、版本控制、留陈迹修正功效。 3、自己权限模子很完备,设置装备摆设复杂,体系宁静级别高。 4、Lotus Domino提供了强无力的事情流机制,它依据路由将信息从一个关键传到下一个关键,协助利用者构成数据,而且依据处置历程调解事情流向。 5. 自带web办事器、文档数据库。 6、可以利用Notes客户端拜访体系,在一个一致、易于办理的系统布局中提供天下一流的电子邮件、Web拜访、日历、群组日程布置、通告板和新闻组办事。在电子邮件功效的底子之上,可以渐渐扩展别的协作功效,照实时协作、信息公布、项目协作、事情流等 7、Domino自带邮件办事器,极强的避免渣滓邮件才能,内涵的Internet寻址、SMTP路由和MIME内容款式支持,支持S/MIME、SSL、POP3、 IMAP4、LDAP、HTTP、HTML、SNMP等协议。 8、支持Java集成,支持WebService。 Domino平台的缺陷: 1.对干系数据处置才能十分弱,且数据维护难(绝对干系型数据库),盘问和数据统计服从就比力低下,与干系型数据库的整合很欠好。 2.关于B/S开辟,Domino自己功效较弱,许多功效必要Java署理及外接数据库才好完成 3、Domino不是一个开放的体系,无论从数据的使用,照旧与其他使用体系的协同而言,都有较大的难展示、逻辑、数据之间耦合度较高,逻辑代码散布在表单、署理、视图等处,使得代码维护较为难,体系的机动性受肯定范围,也给新功效的二次开辟带来肯定的难。 4.Domino对Web支持还不完备,许多Notes客户真个先辈技能都无法失掉使用。 5、购置正版的Domino软件自己也是一笔较大的投资、IBM的产品代价一样平常都十分贵。 6、绝对于Java和.net的j9九游会,Domino开辟职员比力难找。由于懂louts言语的技能工程师较少,以是利用louts言语开辟的软件的产品面对最大的难是晋级维护,物以稀为贵,louts体系工程师的付出本钱也绝对比力奋发。 Domino 数据库 佚名 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/201211/537.html 在cnblogs 找到了一篇有效的文章,各人一同来学习一下。 asp.net MVC3 增长了一个Razor视图引擎,@表达式 便是最新的也是最快的表达方法 在这里必要留意ViewBag 和ViewData的差别,实在从实质上说这两个属性都是可以举行数据通报,但也有一些区别和联系。 起首,ViewBag是dynamic范例的,是静态范例的也便是说是在步伐运转的时分静态确定的范例,而ViewData则是ViewDataDictionary范例的,这是区别1. 其次,ViewBag是经过ViewBag.Message=’Some Content’ ; 如许的方法来举行赋值存取的,而ViewData[“Message”]=”Some Content”; 是经过Key 和Value 来举行存取的这是区别2 最初,ViewBag 和ViewData 我说实质上没有什么差别,是说ViewBag 可以和ViewData 举行数据的互换获取。这句话很拗口,我举个例子来说,ViewBag.Message=’Some Content’; ViewData[“Message”]=”Some Content 2”; 假如在前台View页面经过 ViewBag.Message 和ViewData[“Message”] 辨别表现的话,实在表现的是统一个内容,都是Some Content2 这是什么缘故原由呢?实在ViewBag 在外部完成上利用了ViewData,以是招致ViewBag 和ViewData 可以相互存取。另有别的一个例子表现,ViewBag.Message=”guo”; ViewData[“Content”]=”zhi”; 假如在View中 可以经过ViewData[“Message”] 来获取 为 guo ,也可以 用 ViewBag.Content 来获取ViewData中的数据 表现为zhi。 这就表现ViewData 和ViewBag 可以相互存取。不晓得我说的够不敷明白呢!不信的话,你可以本人尝尝奥。 另有一个紧张的题目便是 ,不行以间接欣赏Views文件夹下的View文件,必需经过Controller来举行拜访,这个差别于asp.net Web form 大概是php。至于什么缘故原由,我信赖只需是学习过MVC的冤家,都市明白。 ViewBag MVC3 佚名 www.cnblogs.com ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/201202/536.html 1. 体系办理 1.1. 用户办理 对利用体系的用户材料举行办理,包罗材料的修正、删除等功效。 1.2. 脚色办理 对利用体系的用户的脚色举行界说,可以界说恣意多个脚色。体系办理员拥有最高权限,可以给其他的用户分派脚色和权限。每个用户有本人的脚色,每个脚色有各自的权限。好比可以界说市办理员脚色、区县办理员脚色、企奇迹单元办理员脚色等等、每个脚色都可以设置差别的权限。 1.3. 权限办理 可对每个脚色举行权限设定,权限可以控制到按钮级别,包管了数据的宁静性。 1.4. 体系参数设置 对一些体系中用到的参数举行设置,如许包管了体系的机动性。当一些参数产生改动后,在《体系参数设置》局部就可以变动,无需修正步伐。 1.5. 数据备份 本体系接纳体系定时备份和手动备份两种方法备份数据。 (1) 定时备份:使用 MS SQLSERVER 数据库维护方案把数据库按设定的工夫距离定时备份到指定的目次。如天天清晨 2 点备份数据; (2>### 手动备份:步伐有备份模块,设定好备份途径,点击备份,即可把数据库备份到设定的目次。 1.6. 数据导出 经过此功效模块,牢固资产办理体系中的数据和报表可随意导出到 EXCEL 表格中。 2. 根本信息办理 2.1. 供给商档案办理 对供给商的根本材料举行办理 , 提供供给商底子材料的新增、修正、删除、盘问打印等功效。 2.2. 供给商分类办理 对供给商举行分类办理,提供分类的添加修正及删除功效。 2.3. 牢固资产分类办理 将牢固资产分为低值易耗品、牢固资产平分类,便于当前统计和盘问数据。 2.4. 牢固资产档案办理 对牢固资产的根本材料举行维护,好比牢固资产称号、规格、型号等根本信息。提供牢固资产材料的新增、修正、删除等功效。 2.5. 职员档案办理 对单元职员的根本信息举行办理、好比姓名、性别、入职工夫、一卡通卡号等根本信息。提供职员根本信息的新增、修正、删除、查找打印等功效。 2.6. 部分档案办理 对利用本体系的部分的构造架构举行办理。 2.7. 堆栈档案办理 对存储牢固资产的堆栈材料举行设置,可以设置多个堆栈寄存差别物品。 3. 商业办理 3.1. 牢固资产推销方案办理 各部分的领用职员可以经过此模块举行推销方案的订定。录入方案后卖力推销的相干职员可以经过体系检察到各部分提交的方案。 3.2. 牢固资产推销入库办理 本模块完成牢固资产推销商业的办理。对推销的牢固资产举行入库,录入供给商、库房、品名、规格、型号、数目、单价等信息。提供推销单的盘问、打印等功效。 3.3. 牢固资产领用办理 领用职员可以经过刷卡大概手工录入的方法领用牢固资产。领用牢固资产后该资产将记入该职员的名下,便于当前盘问。领用单材料包罗、领用人、物品称号、数目等信息。 3.4. 牢固资产退还 本模块提供牢固资产出借的功效。记载职员称号、出借物品称号、数目等细致信息。便于当前盘问统计。 3.5. 牢固资产库存办理 牢固资产库存办理模块用于办理牢固资产的库存数目。 4. 统计报表 4.1. 团体领用明细报表 依据选择的工夫段及职员信息天生该职员选定工夫段的领用明细报表。提供报表的打印和导出功效。 4.2. 部分领用明细报表 依据选择的工夫和部分天生选定部分领用明细报表。提供报表的打印和导出功效。 4.3. 部分领用汇总报表 依据选择的工夫段消费一切部分选定工夫内领用牢固资产的汇总报表。提供报表的打印和导出功效。 4.4. 牢固资产推销明细报表 依照选定的工夫范畴天生牢固资产推销明细报表。 4.5. 牢固资产库存明细报表 本模块可以经过多个条件盘问库存余额 4.6. 牢固资产退还明细报表 天生某段工夫内牢固资产退还明细报表。 4.7. 推销方案明细报表 按选定的条件天生各部分提交的推销方案明细报表。 牢固资产办理 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/201007/535.html 防盗弟子产办理体系功效简介 该体系是新疆二域软件公司依据防盗门企业办理的特点量身订做,集订单、贩卖、库存、预收款办理于一体,接纳盘算机网络技能,完成网络化办理,使防盗门办理到达信息化程度的使用步伐。软件接纳C/S布局形式,使用和数据离开,客户端只安置软件,这种布局可以无效的包管数据的宁静性、网络的波动性、使用的牢靠性,并进步数据处置速率。 客户信息办理 客户根本信息的办理,如所属地域、联系德律风、联系人、地点等信息。 供给商信息办理 配件质料供给商的根本信息办理,如所属地域、联系德律风 联系人等信息 订单办理 订单办理是办理客户的订货单,录入订单时从已录入的客户材料总选择客户,录入项有门型、规格、门面样式、门面厚度、门架要求、门架厚度、锁具品牌、拉手、门铃猫眼、门中门等细致的设置装备摆设状况及预收款子,联合库存的状况可主动消费义务单,在此底子上可完成按种种条件的订单盘问。如下图 主动盘算门价 依据录入订单的根本状况,主动盘算出客户要求定做的门的代价。不必再由人工盘算,浪费工夫和人力。 消费办理 依据订单的选项主动天生消费义务和消费图纸。用针式打印机一式几份,每个工序一份,不必再人工盘算尺寸和绘图,从接单到下单只需三分钟。即节流了人力,也制止了人工盘算操纵历程中发生的失误。如下图: 贩卖办理 依据订单或暂时客户必要天生贩卖单,在录入贩卖数目时主动提醒库存状况,制止了库存门的积存,也可完成锁具、拉手等配件的贩卖。贩卖完成后可以给客户打印贩卖收条。不必再手工开具收条。 库存办理 质料的入库、出库办理、库存盘问 库存信息维护:对库存代码等举行信息维护; 质料收支库处置:关于质料的收支库举行注销、更新等处置,可处置消费领料、发生制品入库、推销到货入库、贩卖出货出库; 本钱办理 关于每个订单,可以主动天生该订单所必要的板材,合页、拉手、螺丝等物料清单。可按天汇总,列出天天用于消费的种种质料的清单,好比明天用了那种规格的板材几多张,几多个收缩螺丝等。 贩卖统计报表 可按地域汇总出选定工夫端各经销商的贩卖金额并按升序大概降序分列。依据次报表办理职员可以订定响应的贩卖政策。 入库统计报表 出库统计报表 发货单打印 依据天天需发货的状况主动天生发货单,发货职员可依据该票据发货。 防盗弟子产软件 防盗门软件 防盗门体系 新疆防盗门 乌鲁木齐防盗门 乌鲁木齐防盗厂家 新疆防盗门厂家 佚名 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200902/534.html 4.2. 客户办理 4.2.1. 客户档案办理 对客户的根本天然属性等信息举行标准化、尺度化办理。根本材料次要有客户标识/编号、户名、所属地域(编号和详细地域称号) 、地点、邮编、所属行业(编号和详细行业称号) 、联系德律风、细致种别(一样平常客户、紧张客户) 等信息。 办理功效:客户根本材料办理根本功效包罗创建/导入、删除、修正、盘问(按肯定尺度,如行业、地域等) 、打印等功效。 4.2.2. 客户分类办理 录入、修正、删除 、客户分类的相干信息。 4.2.3. 客户回访记载 记载与客户一切的联系运动,如回访记载、售后办事等相干信息。 4.3. 条约办理 4.3.1. 条约分类办理 提供条约的分类自界说功效,可以对条约分类举行、添加删除、修正。设置条约分类的目标是为了当前更利便的举行条约的办理和盘问统计。 4.3.2. 条约档案办理 条约办理职员可以利便机动地添加或删除本人的条约文档,选选择利用的条约模板,填入相干信息便可以天生响应的条约。体系提供对条约的盘问、打印、排序等功效。同时有条约检察权限的职员也可以自主从网络上下载条约举行检察。 4.3.3. 条约权限办理 体系在用户权限的办理上举行了最过细和体恤的设置。在条约密级,客户密级方面,同级每个操纵员只能看到本人的条约材料,下级可以看到上级的材料状况,同时另有条约的公然设置,秘密条约只要特定操纵员才干看到。 4.3.4. 条约文件办理 办理一切与条约有关的文件,包罗条约原稿、变动文件、附图、天生的陈诉等外容,将恣意款式的电子版文档可以间接导入体系数据库中,利便当前盘问调阅。 4.4. 条约实行办理 4.4.1. 条约实行流程自界说 可以依据公司的商业流程自界说软件中条约实行流程,可自界说条约由那些部分的那些人实行。保管条约实行历程中一切的实行意见和文档,协助条约评价部考核职员参考。终极打印出相干的陈诉。 4.4.2. 条约实行进度监控 明白记载条约实行进度,利便向导随时理解条约静态实行的状况,究竟完成到何种水平,完成的百分比是几多,利便向导调解进度,布置下一步的事情 4.5. 财政办理 提供条约签署实行历程中首付款、尾款收款的办理功效,提供快到期的结款等要害节点或事变举行预警,提早做好财政计划和剖析决议计划。 条约流程 条约办理 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200902/533.html 找到一篇办理oracle不克不及毗连当地库的文章,有异样题目的冤家分项一下 我的Oracle数据库原来很正常,但是不晓得是什么缘故原由,近来用toad或是plsql毗连当地数据库的时分总是呈现上面的提醒: Error:ORA-01033:ORACLE initialization or shutdown in progress 细心察看办事启动状况后,发明这里不是题目的地点。厥后在网上找了一些回答,但大要的办理思绪和办法都是如许的: SQL>sqlplus SQL>conn / as sysdba SQL>startup force 试过频频之后,题目仍然没有办理,于是我对下面那三行代码在DOS下令行中实行的后果举行察看,发明Oracle数据库并不是很乐成地启动,在提醒信息前面另有如下的提醒: ORA-01157:无法标识/锁定命据文件 9 - 请参阅DBWR跟踪文件 ORA-01110:数据文件 9 D:\ORACLE\ORADATA\MYORACLE\ABC.DBF 此中“MYORACLE”是我数据库的实例名,而“ABC”是表空间的名字。 我去物理地位查找,发明MYORACLE文件夹里没有这个ABC.DBF文件。忽然间名顿开[míng dùn kāi],是不是由于曩昔误删操纵,招致把物理文件夹中的表空间文件给删失了,而对数据库的布局没做任何调解,招致纷歧致的呈现呢? 带着这个疑问,我在网上搜刮 ORA-01157:无法标识/锁定命据文件 9 - 请参阅DBWR跟踪文件 ORA-01110:数据文件 9 D:\ORACLE\ORADATA\MYORACLE\ABC.DBF 的办理回答。 最初发明,这种判别是准确的: SQL>alter database datafile D:\ORACLE\ORADATA\MYORACLE\ABC.DBF offline drop; SQL>alter database open; oracle 当地数据库 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200902/532.html 找到一篇文章各人分享一下: UpFiles文件夹是要保管你上传的文件,PlayFiles文件夹是用于你转换后保管的文件(用于网上播放) ImgFile文件夹是保管截取 视频文件 的图片,然后那两个mencoder和ffmpeg文件夹是 视频转换东西 .此视频转换也可叫做mencoder+ffmpeg视频转换. 起首,在设置装备摆设文件中给这些文件夹举行途径的设置装备摆设.如下 CODE: <appSettings> <!--东西文件夹--> <add key=ffmpeg value=ffmpeg/ffmpeg.exe/> <add key=mencoder value=mencoder/mencoder.exe/> <add key=mplayer value=mencoder/mplayer.exe/> <!--上传文件的途径--> <add key=upfile value=UpFiles/> <!--上专文件图片途径--> <add key=imgfile value=ImgFile/> <!--上传文件图片巨细--> <add key=CatchFlvImgSize value=240x180/> <add key=widthSize value=400/> <add key=heightSize value=350/> <!--转换后文件途径--> <add key=playfile value=PlayFiles/> </appSettings> 在上传.ASPX页面中 CODE: 题目:<asp:TextBox ID=txtTitle runat=server Width=358px></asp:TextBox> <asp:RequiredFieldValidator ID=RequiredFieldValidator2 runat=server ControlToValidate=txtTitle ErrorMessage=题目不为空></asp:RequiredFieldValidator> <br /> <asp:FileUpload ID=FileUpload1 runat=server Width=339px /> <asp:Button ID=btnUpload runat=server OnClick=btnUpload_Click Text=上传视频 Width=70px /> 文件范例<span style=color:Red;>(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)</span> <asp:RegularExpressionValidator ID=imagePathValidator runat=server ErrorMessage=文件范例不准确 ValidationGroup=vgValidation Display=Dynamic ValidationExpression=^[a-zA-Z]:( \\.+)(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)$ ControlToValidate=FileUpload1> </asp:RegularExpressionValidator> <asp:RequiredFieldValidator ID=RequiredFieldValidator1 runat=server ControlToValidate=FileUpload1 ErrorMessage=文件不为空></asp:RequiredFieldValidator></div> <div style= height:0px; border-top:solid 1px red; font-size:0px;></div> <div>上传列表.</div> 步伐事情的原理是:视频先上传上去,然后随着便是开端转换. 以是.在CS 文件中有 这里为了利便我是用sqlDatasource数据控件做数据的操纵 CODE: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page { // 扩展名界说 string[] strArrFfmpeg = new string[] {asf,avi,mpg,3gp,mov }; string[] strArrMencoder = new string[] {wmv,rm,rmvb }; protected void Page_Load(object sender, EventArgs e) { } // protected void btnUpload_Click(object sender, EventArgs e) { string upFileName = ; if (this.FileUpload1.HasFile) { string fileName = PublicMethod.GetFileName(this.FileUpload1.FileName);// GetFileName(); if ((string)Session[file] == fileName) { return; } upFileName = Server.MapPath(PublicMethod.upFile + fileName); this.FileUpload1.SaveAs(upFileName); string saveName = DateTime.Now.ToString(yyyyMMddHHmmssffff) ; string playFile = Server.MapPath(PublicMethod.playFile + saveName); string imgFile = Server.MapPath(PublicMethod.imgFile + saveName); //System.IO.File.Copy(Server.MapPath(PublicMethod.playFile + 00000002.jpg), Server.MapPath(PublicMethod.imgFile+aa.jpg)); PublicMethod pm = new PublicMethod(); string m_strExtension = PublicMethod.GetExtension(this.FileUpload1.PostedFile.FileName).ToLower(); if (m_strExtension == flv) {//间接拷贝到播放文件夹下 System.IO.File.Copy(upFileName, playFile+.flv); pm.CatchImg(upFileName, imgFile); } string Extension = CheckExtension(m_strExtension); if (Extension == ffmpeg) {   pm.ChangeFilePhy(upFileName, playFile, imgFile); } else if (Extension == mencoder) { pm.MChangeFilePhy(upFileName, playFile, imgFile); } InsertData(this.txtTitle.Text, fileName,saveName); Session[file] = fileName; } } // private string CheckExtension(string extension) { string m_strReturn = ; foreach (string var in this.strArrFfmpeg) { if (var == extension) { m_strReturn = ffmpeg; break; } } if (m_strReturn == ) { foreach (string var in strArrMencoder) { if (var == extension) { m_strReturn = mencoder; break; } } } return m_strReturn; } #region 拔出数据到数据库中 private void InsertData(string MediaName,string fileName,string saveName) { //string name=fileName.Substring(0, fileName.LastIndexOf(.)); string imgName = saveName + .jpg;//图片文件名; string playName = saveName + .flv; string sqlstr = insert into Media(FMediaName,FMediaUpPath,FMediaPlayPath,FMediaImgPath) values(@MName,@MUppath,@MPlaypath,@MImgpath); //string constr = ConfigurationManager.ConnectionStrings[sqlcon].ToString(); SqlDataSource1.InsertCommand = sqlstr; SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text;// CommandType.Text; SqlDataSource1.InsertParameters.Add(MName,MediaName); SqlDataSource1.InsertParameters.Add(MUppath,PublicMethod.upFile+fileName); SqlDataSource1.InsertParameters.Add(MPlaypath,PublicMethod.playFile+playName); SqlDataSource1.InsertParameters.Add(MImgpath,PublicMethod.imgFile+imgName); SqlDataSource1.Insert(); } #endregion } PublicMethod类如下: 在这个类内里次要是做文件转换和保管,在转换文件的时分CPU的使用率可以达100%. 它的次要原理是另起一个历程在转换的时分你会发明你的历程里多了一个. using System; using System.Configuration; /// <summary> /// Summary description for PublicMethod /// </summary> public class PublicMethod:System.Web.UI.Page { public PublicMethod() { } //文件途径 public static string ffmpegtool = ConfigurationManager.AppSettings[ffmpeg]; public static string mencodertool = ConfigurationManager.AppSettings[mencoder]; public static string mplayertool = ConfigurationManager.AppSettings[mplayer]; public static string upFile = ConfigurationManager.AppSettings[upfile] + /; public static string imgFile = ConfigurationManager.AppSettings[imgfile] + /; public static string playFile = ConfigurationManager.AppSettings[playfile] + /; //文件图片巨细 public static string sizeOfImg = ConfigurationManager.AppSettings[CatchFlvImgSize]; //文件巨细 public static string widthOfFile = ConfigurationManager.AppSettings[widthSize]; public static string heightOfFile = ConfigurationManager.AppSettings[heightSize]; // // //获取文件的名字 public static string GetFileName(string fileName) { int i = fileName.LastIndexOf(\\) + 1; string Name = fileName.Substring(i); return Name; } //获取文件扩展名 public static string GetExtension(string fileName) { int i = fileName.LastIndexOf(.)+1; string Name = fileName.Substring(i); return Name; } // #region //运转FFMpeg的视频解码,(这里是相对途径) /// <summary> /// 转换文件并保管在指定文件夹上面(这里是相对途径) /// </summary> /// <param name=fileName>上传视频文件的途径(原文件)</param> /// <param name=playFile>转换后的文件的途径(网络播放文件)</param> /// <param name=imgFile>从视频文件中抓取的图片途径</param> /// <returns>乐成:前往图片假造地点; 失败:前往空字符串</returns> public string ChangeFilePhy(string fileName, string playFile, string imgFile) { //获得ffmpeg.exe的途径,途径设置装备摆设在Web.Config中,如:<add key=ffmpeg value=E:\51aspx\ffmpeg.exe /> string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName))) { return ; } //取得图片和(.flv)文件绝对途径/最初存储到数据库的途径,如:/Web/User1/00001.jpg string flv_file = System.IO.Path.ChangeExtension(playFile, .flv); //截图的尺寸巨细,设置装备摆设在Web.Config中,如:<add key=CatchFlvImgSize value=240x180 /> string FlvImgSize = PublicMethod.sizeOfImg; System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; FilestartInfo.Arguments = -i + fileName + -ab 56 -ar 22050 -b 500 -r 15 -s + widthOfFile + x + heightOfFile + + flv_file; //ImgstartInfo.Arguments = -i + fileName + -y -f image2 -t 0.05 -s + FlvImgSize + + flv_img; try { //转换 System.Diagnostics.Process.Start(FilestartInfo); //截图 CatchImg(fileName, imgFile); //System.Diagnostics.Process.Start(ImgstartInfo); } catch { return ; } // return ; } // public string CatchImg(string fileName,string imgFile) { // string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool); // string flv_img =imgFile+.jpg; // string FlvImgSize = PublicMethod.sizeOfImg; // System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; // ImgstartInfo.Arguments = -i + fileName + -y -f image2 -ss 2 -vframes 1 -s + FlvImgSize + + flv_img; try { System.Diagnostics.Process.Start(ImgstartInfo); } catch { return ; } // if (System.IO.File.Exists(flv_img)) { return flv_img; } return ; } #endregion // #region //运转FFMpeg的视频解码,(这里是(假造)绝对途径) /// <summary> /// 转换文件并保管在指定文件夹上面(这里是绝对途径) /// </summary> /// <param name=fileName>上传视频文件的途径(原文件)</param> /// <param name=playFile>转换后的文件的途径(网络播放文件)</param> /// <param name=imgFile>从视频文件中抓取的图片途径</param> /// <returns>乐成:前往图片假造地点; 失败:前往空字符串</returns> public string ChangeFileVir(string fileName, string playFile, string imgFile) { //获得ffmpeg.exe的途径,途径设置装备摆设在Web.Config中,如:<add key=ffmpeg value=E:\51aspx\ffmpeg.exe /> string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName))) { return ; } //取得图片和(.flv)文件绝对途径/最初存储到数据库的途径,如:/Web/User1/00001.jpg string flv_img = System.IO.Path.ChangeExtension(Server.MapPath(imgFile), .jpg); string flv_file = System.IO.Path.ChangeExtension(Server.MapPath(playFile), .flv); //截图的尺寸巨细,设置装备摆设在Web.Config中,如:<add key=CatchFlvImgSize value=240x180 /> string FlvImgSize = PublicMethod.sizeOfImg; System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //此处组分解ffmpeg.exe文件必要的参数即可,此处下令在ffmpeg 0.4.9调试经过 //ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv FilestartInfo.Arguments = -i + fileName + -ab 56 -ar 22050 -b 500 -r 15 -s + widthOfFile + x + heightOfFile + + flv_file; ImgstartInfo.Arguments = -i + fileName + -y -f image2 -t 0.001 -s + FlvImgSize + + flv_img; try { System.Diagnostics.Process.Start(FilestartInfo); System.Diagnostics.Process.Start(ImgstartInfo); } catch { return ; } /**/ ///留意:图片截取乐成后,数据由内存缓存写到磁盘必要工夫较长,大约在3,4秒乃至更长; ///这儿必要延时后再检测,我办事器延时8秒,即假如凌驾8秒图片仍不存在,以为截图失败; ///此处略去延期间码.若有那位晓得怎样捕获ffmpeg.exe截图失败音讯,请见告,先谢过! if (System.IO.File.Exists(flv_img)) { return flv_img; } return ; } #endregion #region //运转mencoder的视频解码器转换(这里是(相对途径)) public string MChangeFilePhy(string vFileName, string playFile, string imgFile) { string tool = Server.MapPath(PublicMethod.mencodertool); //string mplaytool = Server.MapPath(PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(tool)) || (!System.IO.File.Exists(vFileName))) { return ; } string flv_file = System.IO.Path.ChangeExtension(playFile, .flv); //截图的尺寸巨细,设置装备摆设在Web.Config中,如:<add key=CatchFlvImgSize value=240x180 /> string FlvImgSize = PublicMethod.sizeOfImg; System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(tool); FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; FilestartInfo.Arguments = + vFileName + -o + flv_file + -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale= + widthOfFile + : +heightOfFile + -ofps 12 -srate 22050; try { System.Diagnostics.Process.Start(FilestartInfo); CatchImg(flv_file, imgFile); } catch { return ; } // return ; } #endregion } 视频 转换 flv 未知 梦境天堂 cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200901/531.html 本文泉源于: http://www.cnblogs.com/birdshover/ J2SE 6.0 (有些地方也叫1.6)增长了剧本嵌入,使JAVA可以模仿静态言语的方法运转。这个类是ScriptEngineManager,被添加在javax.script定名空间中。实行剧本的步伐很复杂,看以下代码: ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine engine = m.getEngineByExtension(js); try { engine.eval(java.lang.System.out.println(\测试剧本输入\);); } catch (ScriptException e) { log.Log(实行剧本错误: + file.getFileName()); log.Log(e.getMessage()); } 在java实行的javascript代码中也可以挪用java工具。如许就可以由java提供一些API,由javascript来构造逻辑局部。 好比,可以让下面的代码实行以下剧本: var Crawler = com.cnblogs.yurow.engin.Crawler; var StreamWriter = com.cnblogs.yurow.engin.StreamWriter; var RAMFile = com.cnblogs.yurow.engin.RAMFile; var out = java.lang.System.out; var starturl = http://www.cnblogs.com/birdshover/default.html?page =; for(var i = 435112;i<435212;i++){ var tempurl = starturl + i; var content = new Crawler(tempurl).getResponse(utf-8); if(content != null){ var file = new RAMFile(tempurl,content); StreamWriter.Save(result/ + i + .html,file,utf-8,true); } } 此中Crawler是抓取类,StreamWriter是用来保管文件的,RAMFile是内存中文件的构造布局。这些都是本人界说的java类。 我包装了一个JCrawler.jar,读取以后目次下的js文件以确定必要实行的剧本。这些剧本大概被寄存在差别的目次。读取到这个目次列表,然后实行目次列表中每个javascript的逻辑。 演示抓取步伐: 实行此中的bat文件就可以实行抓取,默许把抓取到的文件保管在result目次下。 写javascript的时分要留意剧本文件的正文最好不要利用单行只是“//”,而是要“/* */”。运转情况必要jre6.0。 Framework .NET 下载 佚名 cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200901/530.html NET Framework 2.0 Service Pack 2是专为办理客户在.NET Framework 2.0公布后陈诉的题目而提供的累积更新。 别的,此刊行版为.NET Framework 3.5 Service Pack 1提供了功能改良和必备功效支持。 请在体系需求一节中检察此摆设步伐包支持的操纵体系。Microsoft Vista 的响应更新和Microsoft Windows 2008的响应更新可经过完备的.NET Framework 3.5 service pack 1 摆设。 Microsoft .NET Framework 2.0 官方下载: [点击下载] Microsoft .NET Framework 2.0 Service Pack 1 官方下载: [点击下载] Microsoft .NET Framework 2.0 Service Pack 2 官方下载: [点击下载] Framework .NET 下载 佚名 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200901/529.html 2009年春节在即,为了便于公司员工提早布置好事情和生存,现将“春节”时期的放假布置关照如下: 1月21日(星期三)至31日(星期六)放假,共10天,2月1日(大年头七)下班。 请各部分布置好工夫、关好门窗。 祝公司员工及二域公司新老客户渡过一个痛快的节日! 2009年1月19日 2009春节放假关照 佚名 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200810/528.html 车辆车队办理体系模块功效简介 4.1. 根本信息 4.1.1. 车队办理 车队信息的添加、修正、删除。现在有消费车队、构造车队和通勤车队。当前车队假如增长,可以经过此模块办理。 4.1.2. 车辆所属单元办理 车辆所属单元的添加、修正、删除、查找、打印等功效。 4.1.3. 车辆分类办理 车辆分类的添加、修正、删除功效,经过此模块可将车辆分为统管分配、统管演习班等种别。 4.1.4. 车辆档案办理 车辆档案的录入、修正、盘问、打印等功效,支持导出车辆档案数据。车辆档案包罗车辆的根本信息(如车牌号,车辆范例、底盘号、发起机号等信息)还包罗车辆的投保信息(投保日期、保险公司、保险到期日)、审验信息(审验日期、下次审验日期)、以及车辆的图片信息。可以包罗如下数据项:派司号码、保险单号码、利用单元、资产所属单元、原派司号码 车型(如卡车、轿车、客车、吉普车等)、厂家型号、车身颜色、燃料品种、发起机号码、车架号码、出厂日期、轮胎数目、轮胎规格、驾驶室准乘人数、载主人数(或载货量) 购车日期、贩卖单元、购车资用总额 4.1.5. 车辆用度信息办理 车辆一切触及用度信息的添加、删除、修正。如保险费、质料费、维修费、油料费等。假如当前车辆有其他的用度,可以在这里举行添加。 4.1.6. 驾驶员档案办理 对驾驶员信息的办理,是经过创建车辆驾驶员信息档案举行的,包罗:姓名、性别、出生日期、事情种别(专职或兼职)、身份证号、驾驶证号、首次领证日期、准驾证号、准驾车型、事情单元、所属部分、所属车队、住址、联系德律风等。 4.1.7. 车辆维修项目材料办理 关于一些常常产生的维修项目,创建维修项目库,当前录入维修内容时间接从数据库中选择,增加录入职员的事情强度。 4.2. 商业体系功效 4.2.1. 车辆方案里程办理 录入、修正、删除各车辆的方案行驶里程。 4.2.2. 车辆维修办理 录入、修正、删除 、考核车辆维修的相干信息,如维修的质料明细等信息。 4.2.3. 车辆用度办理 车辆在利用和维护中要产生种种用度,为了控制理解每部车的经费付出状况,必要记载车辆产生的种种用度,举行统计剖析。本模块次要功效是录入修正、删除车辆所发生的用度。本模块支持疾速数据录入。好比,录入质料费只需输出clf即可,录入过盘费只需录入glf,体系即可主动检索出相干的用度信息。 4.2.4. 车辆行驶里程、油耗录入 录入车辆某段工夫的行驶里程、油耗等数据。 4.2.5. 车辆调理办理模块 次要应完成运转车辆的派遣、路单打印、接纳统计、外部考核并构成响应的日报、周报、月报。调理的流程包罗请求用车、车辆调理、实行义务、完成义务四个阶段 4.2.6. 车辆违章记载办理 记载车辆违章的细致材料,如驾驶员、违章内容、有无罚款、罚款金额、日期等细致材料。 4.2.7. 车辆变乱记载办理 车辆变乱记载纪录了变乱的紧张信息,包罗:派司号码、驾驶证号、变乱当事人、当事人事情单元、变乱产生日期(工夫)、变乱责任、变乱所在、补偿金额、变乱处置单元、变乱概略、报案日期、了案日期、本单元处置意见、下级部分处置意见、车辆修缮单元、修缮作业范畴、修缮用度。 4.3. 报表体系 依据要求对单车本钱、百公里油耗等目标举行统计核算。 4.3.1. 车辆用度统计报表 依据选择的工夫段,统计汇总车辆所发生的各项用度。 4.3.2. 车辆行驶里程统计表 依据选择的工夫段统计汇总各车辆行驶里程。 4.3.3. 车辆油料斲丧统计表 依据选择的工夫段统计汇总各车辆的油耗,百公里油耗等相干目标。 4.3.4. 车辆调理报表 依据选择的工夫段天生车辆调理方面相干的报表。 4.3.5. 其他统计报表 可依据车辆办理的要求,定制一些其他的办理报表。 4.4. 体系办理 4.4.1. 体系参数设置 设置一些和车辆办理体系相干的参数,增长体系的机动性。 4.4.2. 用户办理 对利用该体系的用户信息举行添加、删除、修正 4.4.3. 部分办理 对利用该体系的部分举行添加、删除、修正。 4.4.4. 用户权限办理 设置利用该体系的用户权限。 车辆办理软件 车辆办理体系 车队办理软件体系 车辆调理软件 admin admin ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200810/527.html 4.1. 根本信息 4.1.1. 公寓楼/宿舍档案办理 注销办理公寓楼、楼层、以及没楼层的宿舍。体系支持批量添加公寓楼和宿舍,可图像化表现公寓楼,每楼层的宿舍,以及该宿舍能否被占用。 4.1.2. 宿舍床位办理 办理每个宿舍的床位。支持批量的添加床位。 4.1.3. 宿舍牢固资产办理 注销、修正、删除每个宿舍的牢固资产。支持批量添加。 4.1.4. 先生档案办理 先生档案的录入、修正、盘问、打印等功效,支持批量导入导出先生档案数据。 4.1.5. 院系档案办理 学院、以及系档案的添加、删除、查找等功效。 4.2. 商业体系功效 4.2.1. 先生入住注销/宿舍分派 关于已有档案的先生输出学号等信息后即可查到的该先生的信息,然后分派宿舍。关于新入库的先生,录入相干的先生信息后,体系会主动将先生的信息参加的到先生档案库中。 4.2.2. 互换宿舍 完成先生宿舍的互换功效。 4.2.3. 先生退宿 注销退宿先生的根本状况,退宿缘故原由等信息。 4.2.4. 留宿缴费办理 先生留宿免费办理。 4.2.5. 退费办理 先生退费信息的办理 4.2.6. 收支注销办理 收支注销模块包罗:进楼物品注销、出楼物品注销、职员来访注销、完毕拜访注销四个功效模块。 1.进楼物品注销:细致注销某先生搬入宿舍楼的物品状况。 2.出楼物品注销:细致注销某先生搬出宿舍楼的物品状况。 3.职员来访注销:细致注销进入宿舍楼的外来职员状况。 4.完毕拜访注销:细致注销外来职员的分开状况。 4.3. 报表体系 4.3.1. 宿舍占用状况报表 可依据选择条件天生宿舍的占用状况报表。 4.3.2. 先生缴费状况报表 依据选择的条件天生写生缴费状况报表。 4.3.3. 退宿先生统计报表 天生已退宿先生的统计报表 4.3.4. 退费统计报表 天生已退费先生的统计报表 4.3.5. 其他统计报表 可依据宿舍办理的要求,定制一些其他的办理报表。 4.4. 体系办理 4.4.1. 体系参数设置 设置一些和体系相干的参数。 4.4.2. 用户办理 对利用该体系的用户信息举行添加、删除、修正 4.4.3. 部分办理 对利用该体系的部分举行添加、删除、修正。 4.4.4. 用户权限办理 设置利用该体系的用户权限。详见权限办理局部。 宿舍办理体系 宿舍办理软件 公寓办理体系 公寓办理软件 admin admin ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200810/526.html 搜集整理的关于数据库备份与复原的文章,一同学习一下。 TestDirector8.0数据库备份与复原 一、数据库备份 :从原办事器上备份出一切您要复原的TD体系数据库(在SQLServer2000中操纵); 二、文件备份 : 1、TD_Dir整个文件夹; 2、备份C:\Program Files\Common Files\Mercury Interactive\DomsInfo 文件夹中的一切文件; 复原数据库 一、将备份出来的DomsInfo文件夹的内容掩盖到C:\Program Files\Common Files\Mercury Interactive\DomsInfo 文件夹中, 这里举行项目设置装备摆设的复原。 1、用Access翻开DomInfo文件夹下的doms.mdb数据库文件,默许口令为tdtdtd,举行以下修正: a)修正Admin数据表,翻开该表并修正Admin_pswd 的暗码,假如你不想修正曩昔的Admin用户的暗码也可以不举行该步操纵。 b)修正DBServers数据表,翻开该表并修正DBServer_Name字段的第二行值为新TD办事器称号。 c)修正Params数据表,翻开该表并修正ACIServer、SiteScopeurl行对应的Param_Value字段值用新TD办事器称号交换旧TD办事器的称号。 d)修正Projects数据表,翻开并修正每个项目标Physical_Directory途径修正为:C:\TD_Dir\Default\项目称号; e)修正TDServers数据表,翻开并修正TDServer_Name、TD_IP_Address列的值为新TD办事器的办事器称号。 2、修正old_DomSetup.ini文件中的: TDSQLSERVER=TD办事器称号//好比我本机为TDSQLSERVER,是安置时默许的称号 Value_1=TD办事器称号:9999//当地安置TD的呆板称号,9999是默许的不要修正. Value_3=http://TD办事器称称/TDBIN/Redist/SiteScope/SiteScope4TD.htm   阐明:把TD办事器称号交换为新的办事器称号或IP。 二、复原体系文件 三、项目称号的创立及数据库的复原 1、在TD的Site Administrator页面中重新创建所要复原项目标域名和工程名; 2、创立乐成当前在SQLServer2000中会创立 数据库, 复原备份的数据库 1)、在TD的Site Administrator页面中重新创立已存在的项目称号,要千篇一律[qiān piān yī lǜ]的,如cost-killer,创立乐成后,在C:\TD_Dir目次下会天生该文件夹. 2)、将备份出来的TD_Dir文件夹中的内容cost-killer(文件夹) 掩盖到C:\TD_Dir文件夹下相反目次下--(阐明cost-killer”这个文件夹)便是要复原的项目体系文件; 复原后必需在盘问剖析器中实行以下2条语句:   exec sp_change_users_login Report   exec sp_change_users_login Update_One,td,td   阐明:这个剧本必需要实行,要不复原过去的项目不克不及激活,TD和SQLServer不克不及创建链接。 也可以在数据库中用户脚色中新增一个td用户,设置为体系办理员权限 四、在右下角的义务栏中停失TD办事,在启动TD办事; 五、翻开TD的Site Administrator页面中的举行数据库毗连测试,及对每个项目举行毗连测试。 TestDirector 备份复原 数据库 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200810/525.html 搜集整理了一篇关于.net验证方法的文章,各人看看。 此前我介绍了利用数据库完成的提交验证方案,一些冤家猜疑其服从欠安,以为Session是更好的方案。 确实利用Session也不会斲丧太多内存,并且现在内存白菜价,最不济就顺手买个2G的插上也就够了,以是我将在此写下Session版的完成提要,其他细节参考前篇。 完成方案简述: 在Session中存储一个哈希表用以记载该用户的每一条验证信息,哈希表的键为验证信息的过时工夫,值为验证码的明文。 过时工夫利用ViewState存储,以发给客户端,并在提交时获取,以读取对应的验证码明文。 传给验证码天生页面的ID参数是经ToFileTime()办法转换的过时工夫,验证码天生页获取到此参数落伍行逆转换,再读取对应的验证码明文以天生表现。 代码解说: 先创建一个静态类,名为“提交验证”,将用于存储验证信息的Session变量封装为一个属性: /// <summary> /// 验证信息表 /// </summary> static Hashtable 验证信息 { get { return Core.函数库.网络.Session[验证信息] as Hashtable; } set { Core.函数库.网络.Session[验证信息] = value; } } 清算办法,用于将过时的数据扫除: /// <summary> /// 清算一切过时的验证信息 /// </summary> public static void 清算() { if (验证信息 == null || 验证信息.Count < 5) return; foreach (DictionaryEntry f in (Hashtable)验证信息.Clone()) { if ((DateTime)f.Key < DateTime.Now) 验证信息.Remove(f); } } 小于5条验证信息则疏忽。 克隆一个验证信息表供foreach利用,假如利用原表循环的话,间接移除内容会改动表长度,从而引发非常。 添加办法: /// <summary> /// 添加一个新的验证信息。 /// </summary> /// <param name=验证码>要保管的验证码</param> /// <param name=过时工夫差值>用于盘算过时工夫,单元为分钟</param> /// <returns>过时工夫戳</returns> public static DateTime 添加(string 验证码, byte 过时工夫差值) { 清算(); var 过时工夫 = DateTime.Now.AddMinutes(过时工夫差值); if (验证信息 == null) 验证信息 = new Hashtable(); 验证信息.Add(过时工夫, 验证码); return 过时工夫; } 在添加行进行过时信息清算事情。 获取、验证、移除办法: /// <summary> /// 依据过时工夫戳获取对应的验证码 /// </summary> /// <param name=过时工夫戳>验证信息过时工夫戳</param> /// <returns>验证码明文</returns> public static string 获取(DateTime 过时工夫戳) { return 验证信息[过时工夫戳] as string; } /// <summary> /// 验证用户输出的验证码能否准确 /// </summary> /// <param name=过时工夫戳>验证信息过时工夫戳</param> /// <param name=验证码>用户输出的验证码</param> /// <returns>前往错误信息,如验证乐成则前往null</returns> public static string 验证(DateTime 过时工夫戳, string 验证码) { if (过时工夫戳 < DateTime.Now) return 验证信息已过时; var 验证码明文 = 获取(过时工夫戳); if (验证码明文 == null) return 验证信息有效或已过时; else if (验证码明文.ToLower() != 验证码.ToLower()) return 验证码错误; else return null; } /// <summary> /// 依据过时工夫戳移除对应的验证信息 /// </summary> /// <param name=过时工夫戳>验证信息过时工夫戳</param> public static void 移除(DateTime 过时工夫戳) { 验证信息.Remove(过时工夫戳); } 利用办法: 利用时在页面上封装一个基于ViewState属性: /// <summary> /// 工夫戳属性,基于ViewState /// </summary> public DateTime? 工夫戳 { get { return ViewState[工夫戳] as DateTime?; } set { ViewState[工夫戳] = value; } } 然后在load事情中挪用: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { 工夫戳 = 提交验证.添加(); Image1.ImageUrl = ~/VerifyImage.aspx?ID= + 工夫戳.Value.ToFileTime(); } } (无参数的“添加”办法是我完成的一个适配器封装办法,接纳默许的过时工夫设置,随机天生验证码) 提交时的挪用: protected void Button1_Click(object sender, EventArgs e) { var s = 提交验证.验证(工夫戳.Value, TextBox1.Text); if (s == null) { CustomValidator1.IsValid = true; //提交... 提交验证.移除(工夫戳.Value); } else { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = s; } } 验证方法 asp.net session 斯克迪亚 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200810/524.html ###;9九游会已对贩卖办理、推销办理、库存办理、会员办理体系软件举行了片面的晋级,不但软件从单机版本晋级为网络版本,并且在软件的功效方面有所增强,增长了短信等一些帮助功效。各分支机构间接只必要一套宽带线即可完成互联。接待新疆乌鲁木齐的新老客户来电垂询。 贩卖办理体系 贩卖软件 会员办理软件 推销 admin admin ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200810/523.html 怎样修正app.config 文件呢,用ConfigurationSettings.AppSettings.Set 方法步伐会报错,在网上找到一段静态修正winform app.config的代码,各人分享一下: public static void UpdateConfig(string p_strKey, string p_strValue) { try { string m_strFullPath = ; // Assembly Asm = Assembly.GetExecutingAssembly(); XmlDocument xmlDoc =new XmlDocument(); m_strFullPath = System.Windows.Forms.Application.ExecutablePath + .config; xmlDoc.Load(m_strFullPath); XmlNodeList nodeList=xmlDoc.SelectSingleNode(/configuration/appSettings).ChildNodes; foreach(XmlNode xn in nodeList { XmlElement xe=(XmlElement)xn; if( xe.GetAttribute(key).IndexOf(p_strKey) != -1 ) { xe.SetAttribute(value,p_strValue); } } xmlDoc.Save(m_strFullPath); } catch(System.NullReferenceException NullEx) { throw NullEx; } catch(Exception ex) { throw ex; } } app.config appSetting 静态修正 admin 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200808/522.html 在网上看到这篇关于for循环文章,介绍给各人看看: for循环的一样平常布局: for (int i = 0; i < 100; i++) { Console.WriteLine(i); } 递加的循环: for (int i = 100; i > 0 ; i--) { Console.WriteLine(i); } 但for固然不止如许一种用法。for的界说,()内的三段表达式,除了两头的必需发生布尔型,并未对其他两段有所限定,只需是表达式就可以了。在Lucene.Net中就有好频频如许的用法。比方: for (Token token = input.Next(result); token != null; token = input.Next(result)) { int len = token.TermText().Length; if (len >= min && len <= max) { return token; } } 这个语句和上面代码的结果是一样的: Token token; while((token = input.Next(result)) != null) { int len = token.TermText().Length; if (len >= min && len <= max) { return token; } } 实在我以为在这两种循环中,第二种比第一种好了解一点。 另有这种 for (i = 75; i-- > 0; ) jjrounds[i] = 0x80000000; 出了一个空表达式,呵呵。实在了解一下也很复杂,和上面代码的结果一样: for (i = 75; i > 0; i--) jjrounds[i] = 0x80000000; 空表达式,也是一个表达式啊,放在这里也不触犯法律。 嘿嘿,另有其他的表达式,好比: for (int i = 0; i < length; i++, pos++) 这个应该不难了解,第三个表达式有两个,第一个固然也可以有两个 >###for (int i = 100, j = 100; i > 0 ; i--,j++) 两头的表达式要想用两个就要加运算符了for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++) 如许就总结出三种for循环款式 1、for(int i = 0;i < 100;i++) //递加和递减的算一种 2、for(;true;) //有空表达式的 3、for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++) //有多表达式的 仿佛就这么多了。但另有一种,我无法了解的表达式 for(;;)这是个去世循环,汗!!!庐山瀑布汗啊,横竖我了解不了。 嘿嘿,了解下面的表达式,根本上看他人的代码就不会摸不着头脑了。那是不是真的没有了呢? 来尝尝这种 static void Main(string[] args) { for (Act(); ; ) { } Console.Read(); } static void Act() { } 哈哈,真是彻底被打败了。留意:没见过有这么用的,地道是实行,使用发生的结果我不卖力啊。 放上三个办法爽爽: static void Main(string[] args) { for (Act1(); Act2(); Act3()) { } Console.Read(); } static void Act1() { } static bool Act2() { return true; } static bool Act3() { return true; } 固然,你非要用个委托,我也没意见: delegate void Bind(); class Program { static void Main(string[] args) { Bind b = new Bind(Act1); for (b(); Act2(); Act3()) { } Console.Read(); } static void Act1() { } static bool Act2() { return true; } static bool Act3() { return true; } } delegate void Bind(); class Program { static event Bind bindEvent; static void Main(string[] args) { Bind b = new Bind(Act1); bindEvent += new Bind(Program_bindEvent); for (b(); Act2(); bindEvent()) { } Console.Read(); } static void Program_bindEvent() { } static void Act1() { } static bool Act2() { return true; } static bool Act3() { return true; } } 看出来了,只需是表达式,就能利用啊!除了第二个表达式必需为空,大概布尔值外,其他两个根本没什么限定。第二表达式为空则是去世循环。 FOR循环 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200807/521.html 二域汽车配件贩卖办理体系是新疆二域软件公司总结现在宽大汽车配件谋划者多年的理论,并联合二域公司多年j9九游会履历而推出的一款专业的汽车配件贩卖免费办理软件。二与汽车配件软件可以满意用户对贸易贩卖、 库存、一样平常事件、客户办理及员工稽核的必要,是中小汽车配件经销企业举行信息化办理的强力办理东西。二域汽车配件贩卖办理体系界面友爱观、功效适用、盘问利便、数据牢靠,美满的报表与集成盘问功效。软件功效模块的设计充实思索到操纵者的利用习气,利用户不用同时翻开多个窗口频仍操纵,完全在一个窗口中完成更多的功效。细致信息点击 http://www.k8w.net/software/qipei/ 汽车配件 汽配体系 汽修汽配办理体系 汽配办理软件 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200805/520.html 一、地磅称重体系简介 《二域地磅称重办理体系软件》是新疆二域软件公司开辟的一套努力于地磅称重范畴的盘算机称重办理体系软件,体系普遍地运用在口岸船埠、钢铁冶炼、煤矿、水泥、粮油、化工,酿造、饲料、水泥、 棉花烟草收买等 一切利用电子磅的企业。次要是针对企业在质料推销,物资挑唆历程举行的计量办理,制品贩卖及厂内物资倒运、可以经过局域网、因特网毗连完成数据和图像的及时监控,数据的盘问,统计,汇总。本体系可以主动收罗称重仪表上的分量信息,可主动统计毛重及总金额,可以完成各种报表统计 二、二域地磅称重体系软件的特点及目标 《二域地磅称重办理体系软件》利用尺度数据接口,可随时挂接其他大型数据库体系。 多种磅单款式、全能盘问、全能报表 多种背景数据库选择。 体系智能编码、无需影象、疾速录入 随时配接市道市情任何称重仪表 多级权限设置,多级部分设计 在原有称重体系的底子上,可定制以更合适于贵公司的商业需求,扩展软件接口,与更多外设毗连等. 数据收罗与仪表同步,兼容现在市场上大局部称重仪表 体系内置数据非常提示功效,打印次数限定功效, 称重数据主动收罗,监控操纵历程,避免人为作弊,避免反复过磅 疾速打印多联磅单,制止手工开单误写,细致丰厚的报表功效 严厉的权限控制,责任落实到人,根绝超权操纵,日记记载所有操纵 数据库既可接纳ACCESS也可接纳SQL Server2000 提供客户自界说报表功效,自界说表现列功效,提供主动天生谋划报表 支持多种扣重操纵,如扣水,扣杂,等 支持多台地磅联网,署理过磅 提供订单办理功效,支持预支款订货操纵 三、《二域地磅称重办理体系软件》功效概述 软件体系参数设置 设置单元称号,数据精度,地磅编号,等底子信息 体系办理   可设置体系账套,数据库备份,账套维护,规复等功效 通讯参数设置    通讯参数设置 可以设置体系软件毗连的仪表型号,以及设置仪表读数款式,设置仪表通讯参数 底子数据设置 包罗供给商设置,司机设置,客户设置,车辆设置,职员设置,权限设置,脚色设置等 入库商业 入库过磅 选择录入供给商,车号,体系主动从地磅仪表上读取称重数据,体系支持扣重处置 入库过磅盘问 可依照物料,供给商,工夫,车辆等信息盘问,盘问数据可导出excel,htm,txt等文档,或打印明细或过磅票据 出库过磅盘问   可依照物料,客户,工夫,车辆等信息盘问,盘问数据可导出excel,htm,txt等文档,或打印明细或过磅票据 出库过磅    选择录入客户,车号,体系主动从地磅仪表上读取称重数据,体系支持扣重处置,可设置装备摆设能否依据订单来控制出库 商业统计报表    入库报表 入库日报表,周报表,月报表,季度报表,明细表,汇总表, 出库报表 出库日报表,周报表,月报表,季度报表,明细表,汇总表, 数据办理    磅单修正 可以设置超等用户权限对地磅磅单做出修正 地磅 称重软件 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200805/519.html 搜集了一篇关于维度表的文章各人>###维度表可以看作是用户来剖析数据的窗口,纬度表中包括现实数据表中现实记载的特征,有些特征提供形貌性信息,有些特征指定怎样汇总现实数据表数据,以便为剖析者提供有效的信息,维度表包括协助汇总数据的特征的条理布局。比方,包括产品信息的维度表通常包括将产品分为餐饮、饮料、非消耗品等多少类的条理布局,这些产品中的每一类进一步屡次细分,直到各产品到达最低级别。 在维度表中,每个表都包括独立于其他维度表的现实特征,比方,客户维度表包括有关客户的数据。维度表中的列字段可以将信息分为差别条理的布局级。 sqlserver 维度表 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200805/518.html asp.net 步伐的布局该怎样设计呢,j9九游会看看上面的这篇文章: 从逻辑上讲,您必要计划办理方案以标识数据存储、数据拜访、商业规矩、用户界面等之间的“界限”。通常,Web 开辟职员会选择一个两阶段模子,并用 Web 窗体存储用于拜访现无数据存储体系(比方 Microsoft SQL Server)的一切代码。一个更无效的办法是创立一个位于 Web 窗体用户界面与 SQL Server 数据存储体系之间的两头层组件库。这种三层办法(Web 窗体、组件、数据库)通常是大少数使用步伐所需的。但,在某些状况下,大概必要一个其他层来处置办事器之间传输的数据。这个传输层可以利用独立于平台的协议(比方 XML-SOAP)来完成。但,假如您从头至尾[cóng tóu zhì wěi]都利用 Microsoft .NET 技能,则可以利用 .NET 近程协议的二进制版来完成这一义务,并且速率比利用 XML-SOAP 要快得多。   关于j9九游会的示例,j9九游会将界说三个逻辑界限:用户界面(Web 窗体)、两头层(一个 .NET 组件步伐集)和数据层(SQL Server 数据库)。   别的,逻辑层有助于j9九游会思索宁静题目。各个图层之间的界限都存在潜伏的宁静毛病。并且,各个图层大概有本人特定的宁静步伐(SQL Server 权限、.NET 运转时权限、ASP.NET 宁静等)。异样,j9九游会稍后会在本节中细致讨论这个题目。 如今j9九游会有一个复杂的逻辑模子。它是怎样起作用的?它有助于j9九游会思索各个逻辑组之间的界限。每个逻辑层应只管即便与其他层独立。抱负的状况是,图层中的变动应该对全体发生最小的影响。比方,假如将数据存储从 SQL Server 变动到 XML 数据文件,独一遭到影响的图层应是两头层图层。用户界面应该基本无需思索变动。这会使您举行思索:怎样完成办理方案的实践编码以完成此准绳。 一、物理系统布局   确定逻辑层后,思索物理层也很紧张。比方,您可以在同时安置有 SQL Server、Internet Information Server、ASP.NET 和 .NET 运转时的单个实践盘算机上完成这个使用步伐。这将是一个物理层。但更牢靠且可扩展的办法是:在由三个 Web 办事器构成的簇上摆设 Web 窗体,在两个使用办事器上摆设 .NET 组件步伐集,在两个妨碍规复形式的 SQL Server 上摆设数据库。如许发生的物理系统布局将七个 Windows 办事器包括在三个次要组中:Web 簇、组件簇和数据库簇。假如您理解体系的差别逻辑部件可以位于差别的盘算机上,您大概会完成差别的代码。关于示例,j9九游会接纳一个无效且壮大的两层模子:数据库办事器托管 SQL Server 数据存储Web 办事器托管用户界面和组件。假如通讯量十分大,这个模子使j9九游会可以机动地在簇中添加更多的办事器,并使其坚持充足的简便以便于处置。正如您看到的那样,逻辑系统布局和物理系统布局不用相反。在计划阶段还要思索一项内容:宁静。 二、宁静计划设计   Microsoft 有一个关于宁静性与软件这一主题的歌诀:“Secure by design, secure by default, and secure by deployment(设计宁静,默许宁静和摆设宁静)”。即,在宁静中设计,等待体系在默许状况下是宁静的,以及创立可以在宁静情况中乐成摆设的办理方案。宁静一直是紧张的。既然越来越多的软件要在公用的 Internet 上“生活”,编写宁静的软件就愈加要害。关于j9九游会而言,侥幸的是,.NET 运转时和 Windows 操纵体系提供普遍的宁静选项和功效,j9九游会可以轻松地将其包括在j9九游会的使用步伐中。无需太过注意标识和消弭联机办理方案中宁静毛病的细节,j9九游会可以指出此中一些最罕见的毛病并指出j9九游会的使用步伐计划怎样举行处置。   留意:有关可用选项的细致信息,请参阅 Microsoft Security Developer Center。 三、缓冲区溢出设计   这大概是已编译使用步伐中最罕见的宁静毛病。由于j9九游会将利用 .NET 运转时,而它是设计用来在内存中宁静运转的,因而不太大概产生缓冲区溢出。别的,j9九游会利用 Microsoft Visual Basic? .NET 对办理方案举行编码,而 Microsoft Visual Basic? .NET 不像 C 或 C++ 那样容易遭到缓冲区溢出题目的影响。但,即便j9九游会计划用 C++ 创立组件,j9九游会还可以利用编译步伐的特别功效,GS 转换,来掩护j9九游会免受大少数缓冲区溢出的打击。 四、数据库打击设计   另一种罕见的宁静毛病大概会使歹意用户取得拜访存储在数据库中的原始数据的权限。为了避免黑客取得数据的控制权,j9九游会仅利用 SQL Server 存储历程,而不利用“内联盘问”。如许可以大大增加试图在输出流中拔出其他 SQL 下令的打击。j9九游会还在步伐中多个地位处利用输出验证,以确保一切输出仅包括无效的字符。 五、交织站点剧本打击设计   对 Web 使用步伐举行的罕见打击另有一种,它触及到用户在输出流中添加客户方剧本,这类打击将实行附加的对话并诱骗用户将团体数据发送到黑客本人的 Web 站点。要办理这个题目,j9九游会利用 ASP.NET 1.1 的一个新功效,过滤出这种歹意代码的一切输出,避免将它置入体系中。表现屏幕上还包括附加代码,它将主动禁用任何剧本或表现大概会拔出到数据存储中的标志。 至此,j9九游会已取得了使用步伐的逻辑模子和物理模子,以及确保完成方案包括的宁静功效清单。拥有了这些以及目的声明和用户方案,j9九游会可以开端这次“编码前”探险的最初一局部了。 asp.net 布局设计 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200805/517.html 在网上找到一篇文章是关于项目办理的各人看看 一、软件体系更新 可利用WebService、WCF等通讯方法完成当地、跨网络、跨平台的体系更新。 二、软件多言语支持 利用.net 2.0支持的多言语办理方案,针对表现信息对资源文件举行差别言语之间的翻译。 三、负载平衡 忽然想到这个,先放着,当前更新。 四、组件、体系受权 经过受权,您作为组件或控件作者,可以验证开辟职员能否被付与利用您的组件或控件的权限,来掩护本人的知识产权。可以利用System.ComponentModel.LicenseProvider 完成,也可利用第三方的受权软件,设定组件的利用限期、利用次数等。固然,也可不必那么庞大,本人完成一个License机制,经过启动步伐查验License的无效性来决议能否启动步伐。 五、步伐代码掩护 为了掩护知识产权,一样平常的做法都市对公布的组件举行殽杂大概代码加密。殽杂可以增长代码阅读难度,但无法制止代码被反射。加密可以制止一样平常反射软件对组件代码的反射,连步伐的布局都无法获取。 假如项目比力大,并且各组件之间挪用干系庞大,为了增加殽杂的难度,可以利用加密软件,加密历程也很复杂,好比MaxtoCode、DNGuard等。 假如是小型项目,各组件间的耦合度较低,并且为了节流本钱,可以思索利用收费的殽杂器,好比Dotfuscator、Xenocode PostBuild等。 项目办理 软件项目 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200805/516.html 二域软件触摸盘问体系功效简介: 触摸屏盘问软件体系接纳现在盛行的B/S布局步伐设计方法,不必要任何特别的软件设置装备摆设,即可在触摸屏主机下流畅地运转。触摸屏盘问软件体系界面雅观小气,页面熟动生动,盘问功效简便明白利便,背景办理功效壮大,图文恣意混排栏目无线分别等特点。 1、前台欣赏模块功效简介 前台欣赏模块次要功效是表现触摸盘问软件的内容。 触摸屏盘问软件体系前台盘问模块具有以下功效: 前台欣赏模块接纳Web页面方法,一览无余[yī lǎn wú yú],操纵复杂明白,共同配景图片、极富动感的FLASH动画和柔美的配景音乐,使得盘问职员在盘问信息的历程中觉得满意、安宁。前台欣赏模块可以可以展示笔墨、图片以及视频,在背景办理模块中添加的所有内容均可以在前台欣赏模块中完善再现。 2、前往步伐首页 当触摸屏软件无人利用时,在设定的工夫点上,步伐将主动前往到触摸屏软件的首页,使厥后的盘问职员更利便的利用触摸屏。 3、主动播放配景音乐 支持MP3音乐款式,由随机播放温顺序播放两种播放形式可以选择。音乐的添加与办理触摸屏盘问软件体系的背景办理模块中举行。 主动封闭屏幕掩护、主动调解屏幕辨别率,主动封闭欣赏器图片东西栏、设置触摸屏盘问软件体系一直在最顶部、设置延时启动等功效,您渐渐利用中去领会吧。 二、背景办理模块功效简介 背景办理模块的次要功效是对触摸盘问软件的内容举行更新和维护,模块次要分为以下几个子模块: 1、图片办理模块功效跟 图片办理模块次要是办理触摸盘问软件中的图片风范内容。异样也支持栏目无穷级分别,所添加的图片恣意变动。可以为图片添加备注阐明,不论使介绍部分职员,照旧展示公司风范,图片办理模块都完全可以胜任。 2、文章办理模块。 文章办理模块次要是办理触摸盘问软件中的笔墨内容。支持间接中WORD中粘贴笔墨,本模块利用的HTML在线编辑器功效壮大,而且款式坚持稳定化,支持间接从其他网页中粘贴内容。恣意拔出表格、恣意图文混排、巨细、颜色、图片巨细鼠标托放调解、恣意笔墨款式、可以拔出FLASH动画、视频、音乐等等。栏目无穷级分别,基本不必担忧栏目标设置题目。所添加的文章次序恣意调解,恣意发扬,随意变动。 3、配景音乐办理模块 配景音乐模块次要是办理触摸盘问软件的配景音乐。在背景可以添加、修正、删除配景音乐。对配景音乐举行须要的办理。选择最合适用户场所的配景音乐举行播放。 4、视频办理模块功效 视频办理模块次要是办理触摸盘问软件中的视频交换内容。栏目无穷级分别,所添加的视频恣意变动。可以为视频添加备注阐明,细致的介绍视频文件的详细内容。假如您由视频必要展示,那么这个模块是最好的选择。 5、体系其他模块 惯例设置模块、用户和办理员模块、数据库办理模块等等。 触摸屏 盘问软件 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200804/515.html “东风陌上惊微尘,游人初丰年华新”、“芳草拾翠暮忘归”等等描述春季踏青的诗写得真好!为使二域公司的团队精力饱含负氧离子,消弭委顿、避免春困,由人事组专门构造的每年一次春季踏青运动在4月26日片面举动喽! 三个小组扬旗率领着全体员工搭车中转乌鲁木齐水磨公园。 途中劳累了一周的同事们,一起洒下了愉快的歌声和笑声。抵达目标地,在各组长的率领下辨别布置了本次运动的留意事变和运动内容。 “偷得浮生半日闲”, 自在运动的工夫里,各人似乎都融入了天然之中,看蓝天白云,闻菜花香,听燕子呢喃,洗浴弹簧里,徘徊在巷子上,光脚踏在土壤上,对天吼几声!往年的这次出游与今年差别的是,愈加表现出了公司全体员工酷爱生存和酷爱生命的心境。 高兴的事情,也高兴的生存是j9九游会二域软件公司个人的夙愿和久远偏向…… 团队运动 未知 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200804/514.html 从网上找到的一些办理办法,整理了一下各人看看 一、只管即便利用存储历程处置数据,进步数据库存取服从 二、盘问只管即便不要用SELECT * 的方法盘问数据,如许容易招致网络流量过大,使SERVER真个锁晋级到表锁 三、盘问数据的时分可以利用脏读 NOLOCK选项 四、利用事件的时分只管即便延长事件的周期,select 如许的语句不要放到事件中,为每个更新创建一个事件,减小锁定工夫。 五、假如利用query如许的控件,盘问终了后就封闭 sqlserver 去世锁 并发 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200804/513.html 随着养殖业的不停开展,养牛业正在从传统的消费办理方法向古代化的办理方法变化,对牛群的办理也正在渐渐由传统的集约型松懈化办理向精养型集约化办理偏向开展,这自己就要求对牛群的总体情况有过细的理解,对奶牛的喂养,产乳,繁衍,疾病的防备与诊治有严厉的监控,并且,随着我国乳业财产的不停开展,进步奶牛单体产乳量,进步牛群总体经济效益曾经是养牛业次要的开展偏向,在这种情势下,奶牛场引入盘算机办理已成为一定趋向。 奶牛养殖办理体系不但复杂的是一个软件,它是一个将企业的办理头脑、各部分的商业履历以及当今最新盘算机技能一致起来的完善表现。以下将复杂向你介绍二域软件公司为你定制的养殖办理体系以及体系中将要接纳的先辈的盘算机技能。 一、牛只体温监测体系设计 j9九游会接纳RS485网络举行数据传输,在网络上毗连温度丈量模块,每个测温模块可毗连1-128个温度探头 ,可依据牛舍中奶牛的数目决议安置在牛舍中的温度丈量模块的数目。测温总线与一台PC机相连,从PC机可以及时的读到每头牛的体温 ,经过公司的局域网络这些数据可被其他局部所共享。 以下是对测温网络的一些阐明: 1、温度监测体系方案为数字化方案,由每个温湿度探头输入的间接为可联网数字信号。 2、由于接纳先辈的数字化及网络技能,本方案按网络布线,利便、经济。 3、由于每个温湿度探头输入的间接为可联网数字信号,信号传输历程的衰减不会影响体系精度,且传输间隔长,每个出线口“一线总线”可接64个温湿度探头的间隔可达200M。 4、温度丈量模块主动辨认传感器范例、数目,设置装备摆设和扩展利便,,可以依据现场安置条件,得当选择模块的安置地位及利用模块的数目,以便低落本钱。 5、温度丈量事情站同温度收罗模块之间接纳支持间隔1.2公里的多子站通讯协议 6、接纳基于win98/2000平台的组态软件技能,可依据差别客户需求,利便、疾速的天生本性化的人机界面。 7、尺度化总线设计,可利便的扩展控制及其他功效及同其他体系互连。 8、接纳低功耗设计,只需对温度收罗模块供电,无需对温度探头供电,现场供电点少,施工利便 二、测温模块软件接口设计 在企业办事器上,j9九游会为其他商业部分提供温度丈量的接口。必要及时丈量奶牛体温的部分可经过该接口失掉必要的数据。温度丈量接口还提供温度报警办事。 对一些温度不正常的奶牛体系将收回告诫信息。 三、体系办理模块 1、牛群办理体系 牛只根本材料的办理 ,以及犊牛断奶、怀胎诊断、配准记载、产犊等的办理。 2、产乳办理体系 奶牛的泌乳办理、牛奶的品格查验等办理。 3、物资办理体系 奶牛饲料的入库、出库、库存盘问统计 ,以及兽药的入库、出库、库存办理。 其他物资的入库、出库、和库存办理。 4、繁衍办理体系 牛群的繁衍记载,公牛材料的办理。 5、疾病防疫办理体系 奶牛的疾病记载,罕见病的盘问 养殖办理体系 rs485 未知 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200804/512.html 整理了一篇关于avascript - Select操纵的技能文章,一同看看。 近来在看一本书,Wrox.Professional JavaScript™ for Web Developers,是老赵在他的Ajax深化浅出系列讲座中提到过的一本书。实在这本书不停都在我的电脑里,只是没仔细看过。不停没怎样很正式的学习过javascript,偶然用到的时分就到网上找些代码,改吧改吧就用了,这次重新开端学起,细细看上去,还真是有不少劳绩,乃至有点喜好上javascript了。 如今步入正题,看到书中讲Form元素的操纵,像Textbox、Button、Label等,都照旧比力复杂的,只是看到Select时,略微有些庞大,于是就想细心研讨研讨,于是就有了这篇文章。Select的操纵包罗静态添加、删除、挪动、获取选中项的值、排序等等,如今逐一报告。 1、向Select里添加Option function fnAddItem(text,value) { var selTarget = document.getElementById(selID); selTarget.Add(new Option(text,value)); } 2、删除Select里的Option function fnRemoveItem() { var selTarget = document.getElementById(selID); if(selTarget.selectedIndex > -1) {//阐明>### for(var i=0;i<selTarget.options.length;i++) { if(selTarget.options[i].selected) { selTarget.remove(i); i = i - 1;//留意这>### } } } } 3、挪动Select里的Option到另一个Select中 function fnMove(fromSelectID,toSelectID) { var from = document.getElementById(fromSelectID); var to = document.getElementById(toSelectID); for(var i=0;i<from.options.length;i++) { if(from.options[i].selected) { to.appendChild(from.options[i]); i = i - 1; } } } if 里的代码也可用上面几句代码取代 var op = from.options[i]; to.options.add(new Option(op.text, op.value)); from.remove(i); 4、Select里Option的上下挪动 function fnUp() { var sel = document.getElementById(selID); for(var i=1; i < sel.length; i++) {//最下面的一个不必要挪动,以是间接从i=1>### if(sel.options[i].selected) { if(!sel.options.item(i-1).selected) {//下面的一项没选中,上下>### var selText = sel.options[i].text; var selValue = sel.options[i].value; sel.options[i].text = sel.options[i-1].text; sel.options[i].value = sel.options[i-1].value; sel.options[i].selected = false; sel.options[i-1].text = selText; sel.options[i-1].value = selValue; sel.options[i-1].selected=true; } } } }在举行上下两项交换时,也可以利用以下代码,但服从很低,由于每一次的Dom操纵都将招致整个页面的重新结构,以是不如间接修正元素的属性>### var oOption = sel.options[i] var oPrevOption = sel.options[i-1] sel.insertBefore(oOption,oPrevOption);向下挪动同理 function fnDown() { var sel = fnGetTarget(selLeftOrRight); for(var i=sel.length -2; i >= 0; i--) {//向下挪动,最初一个不必要处置,以是间接从倒数第二个>### if(sel.options.item(i).selected) { if(!sel.options.item(i+1).selected) {//上面的Option没选中,上下>### var selText = sel.options.item(i).text; var selValue = sel.options.item(i).value; sel.options.item(i).text = sel.options.item(i+1).text; sel.options.item(i).value = sel.options.item(i+1).value; sel.options.item(i).selected = false; sel.options.item(i+1).text = selText; sel.options.item(i+1).value = selValue; sel.options.item(i+1).selected=true; } } } } 5、Select里Option的排序 这里借助Array工具的sort办法举行操纵,sort办法承受一个function参数,可以在这个function里界说排序时利用的算法逻辑。 array.sort([compareFunction]) 里compareFunction承受两个参数(p1,p2),sort操纵举行时,array工具会每次传两个值出来,举行比力;compareFunciton必需前往一个整数值:当前往值>0时,p1会排在p2前面;前往值<0时,p1会排在p2后面;前往值=0时,不举行操纵。 比方: function fnCompare(a,b) { if (a < b) return -1; if (a > b) return 1; return 0; } var arr = new Array(); //add some value into arr arr.sort(fnCompare); //这里sort的操纵后果便是arr里的项按由小到大的升序排序 //假如把fnCompare里改为 //if (a < b) // return 1; //if (a > b) // return -1; //return 0; //则sort的后果是降序分列 好,上面便是对Select里Option的排序 //由于排序可以按Option的Value排序,也可以按Text排序,这里只演示按Value排序 function sortItem() { var sel = document.getElementById(selID); var selLength = sel.options.length; var arr = new Array(); var arrLength; //将一切Option放入array for(var i=0;i<selLength;i++) { arr[i] = sel.options[i]; } arrLength = arr.length; arr.sort(fnSortByValue);//排序 //先将原先的Option删除 while(selLength--) { sel.options[selLength] = null; } //将颠末排序的Option放回Select中 for(i=0;i<arrLength;i++) { sel.add(new Option(arr[i].text,arr[i].value)); } } function fnSortByValue(a,b) { var aComp = a.value.toString(); var bComp = b.value.toString(); if (aComp < bComp) return -1; if (aComp > bComp) return 1; return 0; } 排序时还可以有更多选项,好比将value值看做Integer或是String举行排序,失掉的后果是纷歧样的。篇幅限定,不在多做介绍。 select javascript 茉莉老师 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/511.html ###起首,本文的目的读者是正在从事技能事情的架构师。为了制止糜费各人的本领,我会制止报告一些新鲜的最佳理论,比方一样平常构建(build daily)、测试统统(test everything)和常常集成( integrate often)。 任何具有称职架构师的项目都有分工明白的、界说精良的团队布局。他们还为举行编码反省、构建代码(逐日或在必要时)、举行测试(单位、集成和体系的)、摆设和设置装备摆设/开释办理而具有已记载的历程。 其次,我将跳过通常兜售的最佳理论,比方基于接口的设计、利用闻名的设计模子以及利用面向办事的架构等。相反,我将会合报告我曾学过而且利用了多少年的6(不是许多)个方面的in-the-trench课程。最初,本文的目标是让您思索一下本人的架构,提供事情代码示例大概办理方案凌驾了本文的范畴。上面就让我介绍一下这6课: 第1课:切勿绕过办事器端验证 作为一位软件参谋,我曾无机会不光设计并完成了Web使用步伐,并且还评价/考核了很多Web使用步伐。在庞大的、而且用JavaScript客户端封装的使用步伐内,我常常遇到对用户输出信息实行少量反省的Web页面。即便HTML元素具无数占有效性的属性也云云,比方MAXLENGTH。只要在乐成验证一切输出信息后,才干提交HTML表单。后果,一旦办事器端收到关照表单(哀求),便适当地实行商业逻辑。 在此,您发明题目了么?开辟职员曾经做了很多紧张的假定。比方,他们假定一切的Web使用步伐用户都异样老实。开辟职员还假定一切用户将总是利用他们测试过的欣赏器拜访Web使用步伐。另有许多其他的假定。这些开辟职员遗忘了使用可以收费失掉的东西,经过下令行很容易地模仿相似欣赏器的举动。现实上,经过在欣赏器窗口中键入得当的URL,您可以发送任何posted表单,只管云云,经过禁用这些页面的GET哀求,您很容易地制止如许的表单发送。但,您不克不及制止人们模仿乃至创立他们本人的欣赏器来入侵您的体系。 基本的题目在于开辟职员不克不及确定客户端验证与办事器端验证的次要差异。两者的次要差异不在于验证毕竟产生在那边,比方在客户端大概在办事器端。次要的差异在于验证面前的目标差别。 客户端验证仅仅是利便。实行它可为用户提供疾速反应??使使用步伐好像做出呼应,给人一种运转桌面使用步伐的错觉。 另一方面,办事器端验证是构建宁静Web使用步伐必须的。不论在客户端一侧输出的是什么,它可以确保客户端送往办事器的一切数据都是无效的。 因此,只要办事器端验证才可以提供真正使用步伐级的宁静。很多开辟职员堕入了错误觉得的骗局:只要在客户端举行一切数据的验证才干确保宁静。上面是阐明此看法的一个罕见的示例: 一个典范的登录页面拥有一个用来输出用户名的文本框和一个输出暗码的文本框。在办事器端,或人在吸收servlet中大概遇到一些代码,这些代码组成了上面情势的SQL盘问: SELECT * FROM SecurityTable WHERE username = + form.getParameter(username) + AND password = + form.getParameter(password) + ;,并实行这些代码。假如盘问在后果集的某一行前往,则用户登录乐成,不然用户登录失败。 第一个题目是结构SQL的方法,但如今让j9九游会临时疏忽它。假如用户在用户名中输出Alice--会怎样呢?假定名为Alice的用户曾经在SecurityTable中,这时此用户(更适当的说法是黑客)乐成地登录。我将把找出为什么会呈现这种状况的缘故原由做为留给您的一道习题。 很多发明性的客户端验证可以制止一样平常的用户从欣赏器中如许登录。但关于曾经禁用了JavaScript的客户端,大概那些可以利用其他相似欣赏器步伐间接发送死令(HTTP POST和GET下令)的初级用户(大概说黑客)来说,j9九游会又有什么措施呢?办事器端验证是避免这种毛病范例所必需的。这时,SSL、防火墙等都派不上用场了。 第2课:宁静并非是附加物 如第1课所述,我曾有幸研讨过很多Web使用步伐。我发明一切的JavaServer Page(JSP)都有一个配合的主题,那便是具有相似上面伪代码的结构: HTML, JavaScript, and JSP code to display data and allow user interaction --> 假如项目利用诸如Struts如许的MVC框架,一切的Action Bean都市具有相似的代码。只管最初这些代码大概运转得很好,但假如您发明一个bug,大概您必需添加一个新的脚色(比方,guest大概admin),这就会代表一场维护噩梦。 别的,一切的开辟职员,不论您多年老,都必要熟习这种编码形式。固然,您可以用一些JSP标签来整理JSP代码,可以创立一个扫除派生Action Bean的根本Action Bean。只管云云,由于与宁静相干的代码会散布到多个地方,以是维护时的噩梦依旧存在。由于Web使用步伐的宁静是逼迫创建在使用步伐代码的级别上(由多个开辟职员),而不是创建在架构级别上,以是Web使用步伐照旧很大概存在缺点。 很大概,基本的题目是在项目靠近完成时才处置宁静性题目。近来作为一名架构师,我曾在一年多的工夫里亲历了某一要完成项目标6个版本,而直到第四版时j9九游会才提到了宁静性??即便该项目会将高度敏感的团体数据表露于Web上,j9九游会也没有留意到宁静性。为了变动公布方案,j9九游会卷入了与项目赞助人及其办理职员的争斗中,以便在初版[chū bǎn]中包括一切与宁静相干的功效,并将一些商业功效放在后续的版本中。终极,j9九游会博得了成功。并且由于使用步伐的宁静性相称高,可以掩护客户的公有数据,这一点j9九游会引以为荣,j9九游会的客户也十分开心。 遗憾的是,在大少数使用步伐中,宁静性看起来并未增长任何实践的贸易代价,以是直到最初才办理。产生这种状况时,人们才慌忙开辟与宁静相干的代码,而丝毫没有思索办理方案的临时可维护性大概强健性。无视该宁静性的另一个征兆是缺乏片面的办事器端验证,如我在第1课中所述,这一点是宁静Web使用步伐的一个紧张构成局部。 记着:J2EE Web使用步伐的宁静性并非仅仅是在Web.xml 和ejb-jar.xml文件中利用符合的声明,也不是利用J2EE技能,如Java 认证和受权办事(Java Authentication and Authorization Service,JAAS)。而是颠末深图远虑[shēn tú yuǎn lǜ]后的设计,且完成一个支持它的架构。 第3课:国际化(I18N)不再是纸上谈兵 当当代界的现实是很多英语非母语的人们将拜访您的大众Web使用步伐。随着电子政务的实验,由于它容许人们(某个国度的住民)在线与当局机构交互,以是这一点分外真实。如许的例子包罗换发驾照大概车辆注销证。很多第一言语不是英语的人们很大概将拜访如许的使用步伐。国际化(即:i18n,由于在internationalization这个单词中,字母i和字母n之间一共有18个字母)使得您的使用步伐可以支持多种言语。 显然,假如您的JSP 页面中有硬编码的文本,大概您的Java代码前往硬编码的错误音讯,那么您要破费许多工夫开辟此Web使用步伐的西班牙语版本。但是,在Web使用步伐中,为了支持多种言语,文本不是专一必需详细化的局部。由于很多图像中嵌有笔墨,以是图形和图像也应该是可设置装备摆设的。在极度的状况下,图像(大概颜色)在差别的文明配景中大概有完全差别的意思。相似地,任何款式化数字和日期的Java代码也必需当地化。但题目是:您的页面结构大概也必要变动。 比方,假如您利用HTML表格来款式化和表现菜单选项、使用步伐题头或注脚,则您大概必需为每一种支持的言语变动每一栏的最小宽度和表格其他大概的方面。为了顺应差别的字体和颜色,您大概必需为每一种言语利用独自的款式表。 显然,如今创立一个国际化的Web使用步伐面对的是架构应战而不是使用步伐方面的应战。一个架构精良的Web使用步伐意味着您的JSP页面和一切与商业相干的(使用步伐特有的)Java代码都不知不觉地选择了当地化。要记着的教导是:不要由于Java、J2EE支持国际化而不思索国际化。您必需从第一天起就记着设计具有国际化的办理方案。 第4课:在MVC表现中制止配合的错误 J2EE开辟曾经充足成熟,在表现层,大少数项目利用MVC架构的某些情势,比方Struts。在如许的项目中,我罕见到的征象是对MVC形式的误用。上面是几个示例。 罕见的误用是在模子层(比方,在Struts的Action Bean中)完成了一切的商业逻辑。不要忘了,表现层的模子层仍旧是表现层的一局部。利用该模子层的准确办法是挪用得当的商业层办事(或工具)并将后果发送到视图层(view layer)。用设计形式术语来说,MVC表现层的模子应该作为商业层的表面(Fa?ade)来完成。更好的办法是,利用中心J2EE形式(Core J2EE Patterns)中叙述到的Business Delegate形式。这段自书中摘录的内容精美地概述了将您的模子作为Business Delegate来完成的要点和好处: Business Delegate起到客户端商业笼统化的作用。它笼统化,进而隐蔽商业办事的完成。利用Business Delegate,可以低落表现层客户端和体系的商业办事.之间的耦合水平。依据完成战略差别,Business Delegate可以在商业办事API的完成中,掩护客户端不受大概的变化性影响。如许,在商业办事API或其底层完成变革时,可以潜伏地增加必需修正表现层客户端代码的次数。 另一个罕见的错误是在模子层中安排很多表现范例的逻辑。比方,假如JSP页面必要以指定方法款式化的日期大概以指定方法排序的数据,某些人大概将该逻辑安排在模子层,对该逻辑来说,这是错误的地方。实践上,它应该在JSP页面利用的一组helper类中。当商业层前往数据时,Action Bean应该将数据转发给视图层。如许,无需创立模子和视图之间多余的耦合,就可以机动支持多个视图层(JSP、Velocity、XML等)。也使视图可以确定向用户表现数据的最佳方法。 最初,我见过的大少数MVC使用步伐都有未充实使用的控制器。比方,绝大少数的Struts使用步伐将创立一个根本的Action类,并完成一切与宁静相干的功效。其他一切的Action Bean都是此基类的派生类。这种功效应该是控制器的一局部,由于假如没有满意宁静条件,则起首挪用不该该抵达Action Bean(即:模子)。记着,一个设计精良的MVC架构的最壮大功效之一是存在一个强健的、可扩展的控制器。您应该使用该才能以增强本人的上风。 第5课:不要被JOPO约束停止脚 我曾目击很多项目为了利用Enterprise JavaBean而利用Enterprise JavaBean。由于EJB好像给项目带来自卑感[zì bēi gǎn]和井蛙语海[jǐng wā yǔ hǎi]的体现,以是偶然它是显酷的要素(coolness factor)。而其他时分,它会使J2EE和EJB惹起殽杂。记着,J2EE和EJB不是赞同词。EJB只是J2EE 的一局部,J2EE 是包括JSP、servlet、Java 音讯办事(JMS)、Java数据库毗连(JDBC)、JAAS、 Java办理扩展(JMX)和EJB在内的一系列技能,异样也是有关怎样配合利用这些技能创建办理方案的一组引导准绳和形式。 假如在不必要利用EJB的状况下利用EJB,它们大概会影响步伐的功能。与老的Web办事器相比,EJB一样平常对使用办事器有更多的需求。EJB提供的一切增值办事一样平常必要斲丧更大的内存和更多的CPU工夫。很多使用步伐不必要这些办事,因而使用办事器要与使用步伐争取资源。 在某些状况下,不用要地利用EJB大概使使用步伐瓦解。比方,近来我遇到了一个在开源使用办事器上开辟的使用步伐。商业逻辑封装在一系列有形态会话bean(EJB)中。开辟职员为了在使用办事器中完全禁用这些bean的钝化费了很大的劲。客户端要求使用步伐摆设在某一商用使用办事器上,而该办事器是客户端技能栈的一局部。该使用办事器却不容许封闭钝化功效。现实上,客户端不想改动与其互助的使用办事器的设任何置。后果,开辟商遇到了很大的贫苦。(好像)风趣的事变是开辟商本人都不克不及给出为什么将代码用EJB(并且照旧有形态会话bean)完成的好来由。不但仅是开辟商会遇到功能题目,他们的步伐在客户那边也无法事情。 在Web使用步伐中,无款式平凡Java 工具(POJO)是EJB强无力的竞争者。POJO是轻量级的,不像EJB那样包袱分外的包袱。在我看来,对很多EJB的好处,比方工具入池,估量过高。POJO是您的冤家,不要被它约束停止脚。 第6课:数据拜访并不克不及托管O/R映射 我曾到场过的一切Web使用步伐都向用户提供从其他地方存取的数据,而且因而必要一个数据拜访层。这并不是说一切的项目都必要标识并创建如许一个层,这仅仅阐明如许层的存在不是隐含的便是明白的。假如是隐含的数据层,数据层是商业工具(即:商业办事)层的一局部。这实用于小型使用步伐,但通常与大一些项目所承受的架构引导准绳相冲突。 总之,数据拜访层必需满意或凌驾以下四个尺度: 具有通明性 商业工具在不晓得数据源完成的详细细节状况下,可以利用数据源。由于完成细节隐蔽在数据拜访层的外部,以是拜访是通明的。 易于迁徙 数据拜访层使使用步伐很容易迁徙到其他数据库完成。商业工具不理解底层的数据完成,以是迁徙仅仅触及到修正数据拜访层。进一阵势说,假如您正在摆设某种工场战略,您可以为每个底层的存储完成提供详细的工场完成。假如是那样的话,迁徙到差别的存储完成意味着为使用步伐提供一个新的工场完成。 只管即便增加商业工具中代码庞大性 由于数据拜访层办理着一切的数据拜访庞大性,以是它可以简化商业工具和利用数据拜访层的其他数据客户真个代码。数据拜访层,而不是商业工具,含有很多与完成相干的代码(比方SQL语句)。如许给开辟职员带来了更高的服从、更好的可维护性、进步了代码的可读性等一系列利益。 把一切的数据拜访会合在独自的层上 由于一切的数据拜访操纵如今都委托给数据拜访层,以是您可以将这个独自的数据拜访层看做可以将使用步伐的其他局部与数据拜访完成互相断绝的层。这种会合化可以使使用步伐易于维护和办理。 留意:这些尺度都不克不及明白地调出对O/R(工具到干系)映射层的需求。O/R映射层一样平常用O/R映射东西创立,它提供工具对干系数据布局的检察和感知(look-and-feel)。在我看来,在项目中利用O/R映射与利用EJB相似。在大少数状况下,并不要求它。关于包括中等范围的团结以及多对多干系的干系型数据库来说,O/R映射会变得相称庞大。由于增长O/R 映射办理方案自己的内涵庞大性,比方耽误加载(lazy loading)、高速缓冲等,您将为您的项目带来更大的庞大性(和危害)。 为了进一步支持我的看法,我将指出依照Sun Microsystem所遍及的实体Bean(O/R映射的一种完成)的很多失败的实验,这是自1.0版以来不停折磨人的困难。在SUN的防卫步伐中,一些晚期的题目是有关EJB标准的开辟商完成的。这顺次证明白实体Bean标准本身的庞大性。后果,大少数J2EE架构师一样平常以为从实体Bean中离开出来是一个好主见。 大少数使用步伐在处置他们的数据时,只能举行有限次数的盘问。在如许的使用步伐中,拜访数据的一种无效办法是完成一个数据拜访层,该层完成实行这些盘问的一系列办事(或工具、或API)。如上所述,在这种状况下,不必要O/R映射。当您要求盘问机动性时,O/R映射正符合,但要记着:这种附加的机动性并不是没有价钱的。 就像我答应的那样,在本文中,我只管即便制止新鲜的最佳理论。相反,关于J2EE项目中每一位架构师必需做出的最紧张的决议,我会合解说了我的看法。最初,您应该记着:J2EE并非某种详细的技能,也不是强行参加到办理方案中的一些首字母缩写。相反,您应该在得当的机遇,适当的地方,利用符合的技能,并遵照J2EE的引导准绳和J2EE中所包括的比技能自己紧张得多的理论。 JAVA 例子 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200804/510.html 在Asp.Net的开辟历程中页面文件等都是放在以后网站目次下的,实在j9九游会可以使用.Net2.0新增的假造文件体系(VirtualPathProvider)将页面、图片等信息保管到数据库或其他目次中去,到达机动设置装备摆设。 曩昔开辟Asp.Net的web用户控件时,必要把用户控件和以后项目作为统一个项目时才干正常利用,并且公布时必要把dll文件和一切的ascx文件都公布才干利用;别的也不利便作为公用类给其别人利用 使用假造文件体系后可以把ascx文件作为资源打包到dll中,下次只需有这个dll就可以利用了,不必要ascx文件,很利便。 详细完成步调如下: 一、开辟web用户控件 这一步和曩昔的开辟没有区别。 1、起首新建一个web使用步伐(必要VS2005 sp1支持) 2、然后在内里开辟几个web用户控件 3、在ascx文件上右键-〉属性-〉天生操纵选择嵌入的资源 4、天生dll就可以了(dll的名字为:Test.Control.dll,前面会用到) 二、开辟一个假造文件体系提供类 这一步是最紧张的一步。 详细思绪便是:在体系中注册这个类,然后在每拜访一个文件/资源的时分会主动挪用这个类,在这个类中判别文件的途径能否是j9九游会界说的,假如是就用j9九游会的逻辑来处置,即从dll中取出资源。 起首把类的代码贴出来,我想大概很多人应该和我一样,喜好间接先看代码:) DllVirtualPathProvider public class DllVirtualPathProvider : System.Web.Hosting.VirtualPathProvider { public DllVirtualPathProvider() { } public override string CombineVirtualPaths(string basePath, string relativePath) { if (IsAppResourcePath(basePath)) { return null; } return Previous.CombineVirtualPaths(basePath, relativePath); } public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType) { return Previous.CreateObjRef(requestedType); } public override bool DirectoryExists(string virtualDir) { if (IsAppResourcePath(virtualDir)) { return true; } else { return Previous.DirectoryExists(virtualDir); } } public override string GetCacheKey(string virtualPath) { if (IsAppResourcePath(virtualPath)) { return null; } else { return Previous.GetCacheKey(virtualPath); } } public override string GetFileHash(string virtualPath, IEnumerable virtualPathDependencies) { if (IsAppResourcePath(virtualPath)) { return null; } else { return Previous.GetFileHash(virtualPath, virtualPathDependencies); } } private bool IsAppResourcePath(string virtualPath) { String checkPath = VirtualPathUtility.ToAppRelative(virtualPath); return checkPath.StartsWith(~/MyUserControl/Test.Control.dll/, StringComparison.InvariantCultureIgnoreCase); } public override bool FileExists(string virtualPath) { return (IsAppResourcePath(virtualPath) || Previous.FileExists(virtualPath)); } public override VirtualFile GetFile(string virtualPath) { if (IsAppResourcePath(virtualPath)) { return new AssemblyResourceVirtualFile(virtualPath); } else { return Previous.GetFile(virtualPath); } } public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart) { if (IsAppResourcePath(virtualPath)) { string path = HttpRuntime.AppDomainAppPath + virtualPath.Substring(1); return new System.Web.Caching.CacheDependency(path); } else { return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); } } }重点有以下几个: 1、必需从VirtualPathProvider类承继 2、IsAppResourcePath办法是用来判别能否为j9九游会界说的途径款式:~/MyUserControl/Test.Control.dll/,上面挪用的时分就利用这个途径 3、留意GetCacheKey办法: public override string GetCacheKey(string virtualPath) { if (IsAppResourcePath(virtualPath)) { return null; } else { return Previous.GetCacheKey(virtualPath); } }这里当切合条件时肯定要前往null,假如前往,会招致一切的用户控件都利用一个key值,从而一切的用户控件都表现异样的内容了。假如前往其他非空字符,会报非常(它会去查找cache,j9九游会是没有的) 别的一切的办法当不切合j9九游会的条件时肯定要挪用 Previous.**** 由于体系中大概有多个假造文件提供步伐的。 4、GetCacheDependency办法: if (IsAppResourcePath(virtualPath)) { string path = HttpRuntime.AppDomainAppPath + virtualPath.Substring(1); return new System.Web.Caching.CacheDependency(path); }这个办法是用来决议Cache的利用的,假如前往null,会招致功能严峻降落,每次挪用用户控件时都市重新编译,这里前往确当前途径(必要在网站目次下再创建子目次:MyUserControl\Test.Control.dll),这个目次下是空的,如许当每次取Cache时都市以为j9九游会的ascx没有修正,不必要重新编译。 5、在GetFile办法中j9九游会前往的是一个AssemblyResourceVirtualFile类: class AssemblyResourceVirtualFile : VirtualFile { string path; public AssemblyResourceVirtualFile(string virtualPath) : base(virtualPath) { path = VirtualPathUtility.ToAppRelative(virtualPath); } public override System.IO.Stream Open() { string[] parts = path.Split(/); string assemblyName = parts[2]; string resourceName = parts[3]; assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName); System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(assemblyName); if (assembly != null) { return assembly.GetManifestResourceStream(resourceName); } return null; } }这个类的目标便是从j9九游会的dll中读出资源文件。 三、注册这个假造文件提供步伐 这一个很复杂,在global.asax中注册: protected void Application_Start(object sender, EventArgs e) { System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new DllVirtualPathProvider()); } 四、挪用dll中的用户>### Control control1 = this.LoadControl(/MyUserControl/Test.Control.dll/Test.Control.Sample.List.ascx); Control control2 = this.LoadControl(/MyUserControl/Test.Control.dll/Test.Control.Sample.Sample.ascx); form1.Controls.Add(control1); form1.Controls.Add(control2);比力复杂,便是途径要和后面的分歧。 跋文: 起首感激 Leepy 同道仔细实际的的精力,找出了我这篇文章中的一个BUG。 原来我的第四步:挪用dll中的用户控件,是一个web使用步伐,假如是一个web站点的话就会呈现题目。由于在VS2005中调试时这两种方法出现出来的Url是纷歧样的: web使用步伐: http://localhost:****/Default.aspx web站点 : http://localhost:****/WebSite1/Default.aspx 也便是说我原来的步伐没有思索到非根目次摆设的状况,针对这个BUG要修正的地方有(为了BUG的原始记载,我就不在原文中修正了,把修正点列在上面): 1、GetCacheDependency办法: GetCacheDependency public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart) { if (IsAppResourcePath(virtualPath)) { string path = HttpRuntime.BinDirectory; return new System.Web.Caching.CacheDependency(path); } else { return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); } }这里改成间接改成以后网站的bin目次还可以免却建空目次的步调了, j9九游会网 2、在挪用的地方修正成以下方法: Control control1 = this.LoadControl(~/MyUserControl/MyWebApplication.dll/MyWebApplication.Sample1.ascx); Control control2 = this.LoadControl(~/MyUserControl/MyWebApplication.dll/MyWebApplication.Sample2.ascx); form1.Controls.Add(control1); form1.Controls.Add(control2); asp.net 假造文件体系 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/509.html 搜集整理了一篇开辟设置装备摆设的文章,各人看看,感激文章作者 设置装备摆设JB+WLS可以说是一场噩梦,网上搜了一切可以搜到的贴子,有质量的不外三四个,可以说这几个贴子在某些方面写得的确不错,笔者也是靠它们的协助,颠末几天艰辛的探索才完全乐成地整合了JB7+WLS7以及MYSQL数据库来开辟EJB的。但这几个贴子都因此前的JB4-6,WLS5-6。1的状况下写的,有许多选项都不实用于JB7+WLS7,并且都是片面[piàn miàn]的,没有一个从设置装备摆设到布署的完备的文档。 一、安置不说了。 二、设置装备摆设:安置好JB7和WLS7后,应该先设置装备摆设WLS7,由于WLS7设置装备摆设时和JB7有关而JB7要选择WLS的情况 上面按次序来一步步阐明: 我在文档中用到的例子字段(便是用“如:字段”),那么当前在要用到这个字段就间接写成如后的字段 设置装备摆设MYSQL(另外数据库都是一样的)新建一个库名,如:ejbdb,设置装备摆设好用户名和暗码如(root,111111) 把mysql的jdbc(如mysql.jar)放到一个目次中,一样平常放在%JAVA_HOME%/lib/下。不外只需不放在软盘上 总是能找到的。 设置装备摆设WLS7 倘使WLS7安置在c:\bea下,进入c:\bea\weblogic700\bin目次,修正startWLS.cmd(留意起首修正这个 文件是由于有的文档上说修正c:\bea\user_projects\mydomain\下的startWeblogic.cmd,是不合错误的。)起首修 改这个文件是这时c:\bea\user_projects\mydomain\下的startWeblogic.cmd还没有发生,包管你不会改错。如 果是linux下修正startWLS.sh 找到set CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar; %WL_HOME%\server\lib\weblogic.jar;%CLASSPATH% 加上mysql.jar:成 set CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar; %WL_HOME%\server\lib\weblogic.jar;path\mysql.jar;%CLASSPATH% 存档加入,在启动菜单上运转BEA Weblogic platform 7.0 -> domain configuration wizard有的就叫 configuration wizard。 1.Select a template:选择WLS Domain,Name默许的mydomain 2.Choose Server Type: 第一个 3.Specify directory for mydomain domain:C:\bea\user_projects\ 4.value Administrative Server Info-Admin Server Name or IP 写呆板的ip,如许保险,别的默许 5.Configure Managed Server: Server Name:默许为myserver Server Listen Address:写呆板的ip .别的默许 6.Create System UserName and Password:写用户名和暗码,如:system:aaaaaa 7.Install Server as Windows Servic:这里问要不要在启动操纵体系时启动,可依据本人的需用选择。 8.Install Domain in Windows Start Menu:这里问要不要在开端菜单添加速捷方法,发起是“Yes”. 如许在开端菜单中会呈现EBA Weblogic Platform 7.0->User projects-my domain->Start Server 假如8选择了yes,如今就从开端->EBA Weblogic Platform 7.0->User projects-my domain->Start Server启动 等一下子[yī xià zǐ],启动完毕落伍入: http://localhost:7001/console 假如找不到页面把localhost换成主机名或IP尝尝 假如不克不及进入反省下面的步调,横竖这里假如不克不及拜访向下做了,去世也要给我拜访到这个页面。 输出方才的用户名和暗码(system:aaaaaa)进入。 在右边的目次树中选中Services->JDBC->Connection Pools,单击右侧的Configure a new JDBC Connection Pool. 输出以下信息: Configuration->General页: Name = Mysql Connection Pool URL = jdbc:mysql://localhost:3306/ejbdb(留意ejbdb是我下面的例子字段,以下都市如许) Driver classname = org.gjt.mm.mysql.Driver Properties : user=root password=111111 这两行是Properties 的内容,便是name=value情势 单击Create创建毗连池。 选择Targets->Server页: 将myserver(办事器称号)移至右侧的列表中,但击单击Apply 在右边的目次树中选中Services->JDBC->Data Sources(大概TXData Sources)单击右侧的Configure a new JDBC Connection Pool.,输出以下信息: Configuration->General页: Name = Mysql Tx Data Source JNDI Name = ejbPool 这个名字便是你当前要援用的DataSource称号 Pool Name = Mysql Connection Pool 选中Emulate Two-Phase Commit for non-XA Driver和Row Prefetch Enabled 单击Create创建数据源。 Targets->Server页: 将myserver(办事器称号)移至右侧的列表中,但击单击Apply,设置装备摆设终了 设置装备摆设JB7 1. 修正情况变量TEMP和TMP 为不带空格的目次如:c:\winnt\temp,肯定要留意,否则公布一定不可功 2. 启动Jbuilder7,Tools->Configure libraries->class->Add,找到mysql.jar,OK,OK 3.选择:Tools->Configure Servers选中左侧的Weblogic Application Server 6.x+,选中左边的 Enable Server 4. 将General->Home Directory设为WebLogic7的Home Directory如:c:/bea/weblogic700/server,正常 的话Jbuilder7将主动为你添好其他的项。server parameters不填,在上面的class中用add加上mysql.jar默许曾经 加上了c:/bea/weblogin700/server/lib/weblogic.jar和c:/bea/weblogin700/server/lib/weblogic_sp.jar,假如 没有阐明c:/bea/weblogic700/server没有指定准确。实在c:/bea/weblogin700/server/lib/weblogic_sp.jar是不存 在的,不要管它。只需把mysql.jar加出去。假如2没有做,是找不到的。 5. 将Custom->JDK Installation Directory设为 JDK的安置目次,如:c:/bea/jdk131_02 6. 将Custom->BEA Home Directory设为WebLogic7的Home Director,如:c:/bea 7. 将Custom->Domain Directory设为你的域目次,如:c:/bea/user_projects/mydomain 8. 添好User name, Password ,Domain name, Server name后,单击OK加入。 9. 选择:Tools->Enterprise Setup,单击CORBA页上的New, 按下表填写响应信息: Name for this configuration = WelLogic Path for ORB Tools = c:/bea/weblogic700/server Library for Projects = WebLogic 6.x+ Deploy IDL compiler command = idlj.exe Commnad option for output directory = c:\temp(恣意目次,不要有空格) 单击OK加入。 10.config JDKS中最好坚持用jb7本人的JDK1。3。1或用EAB上面的JDK,不要改成别的安置的JDK1。4,由于 这个版本中有一些当地办法完成不克不及和WLS很好地事情,一定会堕落。 11.选择Project->Default Project properties 在Path页的Required libraries中将会看到WebLogic 6.x+ Client和WebLogic 6.x+ Deploy两项,假如没有,请反省以上步调能否准确。选择Server页,单击Single services for all service in project,在下拉列表中选择WebLogic Application Server 6.x+,但击OK加入。 12。Tools->Database pilot->view->options->Drivers->Add,弹出对话框中输出org.gjt.mm.mysql.Driver 确定后在上面的Simple URL中输出mysql://localhost:3306/ejbDB,留意后面没有jdbc:确定. 在File->New弹出new URL,选择Driver为方才参加的org.gjt.mm.mysql.Driver,则URL主动为表现为 jdbc:mysql://localhost:3306/ejbDB,确定,然后点中东西条谁人向右下的箭头(apply)。双击右边刚参加的这个, 输出用户名root和暗码111111但是测试数据库保持能否经过,假如没有看到上面的表请反省以上步调。 --------------------------------------------------------------------------------------------------------- 开辟EJB File->New Project天生一个新工程;如:myproject File->New 选择Enterprise,选择EJB2.0 Bean Designer,OK。 按New弹出EJB module Wizard,Name改为AccountApp,右边组树上呈现设计器AccountApp,点开后面的加号可以 看到它上面有JDBC 1 Datasources和Security Roles。双击EJB设计器AccountApp,左边表现设计界面,当前从另外介面 要前往设计界面就双击设计器。点击东西条上第一个图标,便是象一个谷子一样的工具下面有一个太阳了,title为 Create EJB.有四个选项,CMP2.0,BMP,SESSION,MESSAGEp 四种BEAN,本例选BMP,出来Bean设计窗,左边会有一个 Bean properties框,不外假如你MOUSE动得快它大概会消散了。没关系[méi guān xì],在BEAN的名字上左击会出来,把BEAN的名字改为 AccountBean,interface为local/remote。alway warp primary key为true,点击classes and package: package:改为你想要放的包名,本例为:com.fuck.axamn 假如你用默许类名也行,但我喜好近程接口中不加Remote,而local接口中加local,而JB恰好相反,它是如许的。 Bean class: com.fuck.axamn.AccountBean Home interface class: com.fuck.axamn.AccountRemoteHome local Home interface class: com.fuck.axamn.AccountHome Remote interface calss: com.fuck.axamn.AccountRemote Local interface calss: com.fuck.axamn.Account 而本例中我是如许定名的: Bean class: com.fuck.axamn.AccountBean Home interface class: com.fuck.axamn.AccountHome local Home interface class: com.fuck.axamn.AccountLocalHome Remote interface calss: com.fuck.axamn.Account Local interface calss: com.fuck.axamn.AccountLocal 右击Bean设计窗上BEAN的名字,选view source,好吧,把例子手工敲上去。先不要COPY上去啊,本人敲可以加深了解。如 果最初了堕落了再COPY。 Bean类自己设计好后,点击右边设计器下面的package内里会看到它的接口类,一个一个点击左边会呈现源码,一个一个 设计好,要参加的隶属类(好比本例中的AccountExeption)经过右击package,选Add files/packages,参加一个java文件, 留意要和主动天生的文件在统一目次。 所有写好后,右击工程名,make一下,然后按F9运转。假如WLS没有启动JB会主动启动它的。 没有题目后右击设计器,选择Deploy可以顺遂公布到WLS上,从 http://localhost:7001/console 进入后可以看到AccountApp 被公布到WLS中了。 --------------------------------------------------------------------------------------------------------------- 测试: 在工程中,File->New->Enterprise->EJB test Client.称号设为AccountClient 在右边组件树中双击AccountClient.java,编辑内容为本本例提供的内容. mysql -uroot -p 111111 use ejbdb; create table accounts (id varchar(60) not null primary key,ownerName varchar(60),double balance(8,2) default 0.00); make AccountClient.java run AccountClient.java ____________________________________________________________________ JB7+WLS7+MYSQL 开辟CMP CMP开辟实在比BMP更复杂(我说的是操纵上的复杂),只需界说好你的商业逻辑, 在完成时实在很快的.但网上居然找不到一任何用JB开辟CMP的例子,在J道上有一篇文章 居然要收50元才教各人怎样用JB开辟CMP,太黑了.并且是站长发的,以是在下不敢在那边 宣布这篇文章,不外请各人在另外地方互相转贴,不要让那家伙黑了心骗他人的钱. JB开辟CMP,实在利便得很,便是大少数人不晓得怎样操纵,由于CMP不是从BEAN设计器 的设计界面创建的.并且许多选项没有他人阐明的确不晓得选什么. 前题是依据原来的那一篇设置装备摆设的文章曾经设置装备摆设好JB7+WLS+MYSQL 如今开端,先界说CMP耐久化字段的数据库,好比j9九游会要做一个Product的BEAN,包罗四 个字段: productID:产品编号(独一) name:产品称号 description:产品阐明 basePrice:产品基价 那么先要界说好数据库: mysql -uroot -p 111111 use ejbdb; create table ProductBean( productID varchar(60) not null primary key, name varchar(60), description varchar(200), basePrice double(8,2) default 0.00 ); 启动JB7. File->New Project->输出工程名 如:myproject2 File->New 选择Enterprise,选择EJB2.0 Bean Designer,OK。 按New弹出EJB module Wizard,Name改为ProductApp,右边组树上呈现设计器ProductApp 留意这时不要从左边的设计界面上Create EJB,双击设计器ProductApp,在组件树上面会呈现 DataSources,右键选择 Import Schema From Database,弹出Database Schema provider窗口 在All schema后面打勾. 选择Driver为 org.gjt.mm.mysql.Driver,上面的url会主动为你原来设定的URL.留意在 原来设定URL时不该该加jdbc:,要不这儿就会呈现jdbc:jdbc:mysql://localhost:3306/ejbdb 假如是如许去失一个jdbc:,输出username和password(root:111111).把jdni name中的默许 值DataSource改为你在WLS中设置装备摆设MYSQL时的JDIN NAME(例子中是ejbPool).点击OK,假如保持 乐成在DataSources上面会呈现一个ejbPool,点击它后面的+号可以看到ejbdb这个库上面的所 有表,j9九游会如今要把productbean这个表来作为耐久化字段的对应干系,以是右击productbean 选把第一项Create CMP2.0 Entity Bean.留意Mysql把表名所有设为小写了,以是新建的Bean 的称号为Productbean,这时左边的设计界面中发生一个Bean设计窗,称号为Productbean,左击 称号,左边呈现属性对话框: Bean name:改为ProductBean. Abstract Schema name:会主动随着改成ProductBean. interface:local/remote always wrap primary key:true classes and packages:照旧的BMP一样,默许的定名是: Bean class: com.fuck.axamn.ProductBean Home interface class: com.fuck.axamn.ProductRemoteHome local Home interface class: com.fuck.axamn.ProductHome Remote interface calss: com.fuck.axamn.ProductRemote Local interface calss: com.fuck.axamn.Product 而本例中我是如许定名的: Bean class: com.fuck.axamn.ProductBean Home interface class: com.fuck.axamn.ProductHome local Home interface class: com.fuck.axamn.ProductLocalHome Remote interface calss: com.fuck.axamn.Product Local interface calss: com.fuck.axamn.ProductLocal CMP properties中,本例是一个BEAN对应一张表,以是先第一个Single table maping 假如是一个BEAN和多表关联系关系选第二项,然后把右边的primary key和左边各表对应的字段 用红线连一下就行了,你只需点primary key的字段拖就会呈现红线. 点击右边组件树上设计器ProductApp下面的package,一级一级点开,看到天生的5个文件 ProductHome.java ProductLocalHome.java Product.java ProductLocal.java ProductBean.java 逐一按本例附件中的文件内容敲出来.完成后双击设计器,让左边回到BEAN设计界面上,会看 到ProductBean的finder办法有七个,findByPrimaryKey是体系主动天生体系的,这个不要你思索. 但别的的6个体系不行能晓得你是按什么条件查找,以是要手工写入EJB-QL. 在各办法上点击一下就会在左边弹出对话框,别有都不动,在最上面的Query内容框中输出以 下对应的内容 findByName办法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.name=?1 findByDescription办法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.description=?1 findByBasePrice办法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePrice=?1 findExpensiveProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePricefindCheapProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePrice>?1 findAllProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.productID IS NOT NULL 右键点击工程mysproject make,假如输出没有错误,应该顺遂编译.然后按F9运转。假如WLS没有启动JB 会主动启动它的。 没有题目后右击设计器,选择Deploy可以顺遂公布到WLS上,从 http://localhost:7001/console 进入 后可以看到ProductApp 被公布到WLS中了。 测试: 在工程中,File->New->Enterprise->EJB test Client.称号设为ProductClient 在右边组件树中双击ProductClient .java,编辑内容为本本例提供的内容. make ProductClient.java run ProductClient.java 在测试文件中怎样查找ProductApp这个EJB呢,实在你在右边组件树中双击设计器上面ProductBean的 称号,左边会表现出这个BEAN的属性,Home JDNI NAME和Local JDNI name辨别便是近程和当地的JDNI 命称,你在测试文件就查找这个称号,如: Object objref = ctx.lookup(ProductBeanRemote); ProductBeanRemote便是Home JDNI NAME框中的值. JBuilder7 Weblogic 设置装备摆设 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200804/508.html 搜集了一篇j9九游会中项目办理的文章,各人看看 当项目单一的时分,必要标准,而且界说到细节,只要如许,才干支持大范围的开辟。 PM十分紧张,PM的才能将间接招致项目最初的质量。 本文是依据公司以后的近况而形貌的,并纷歧定广泛实用--符合的,便是最好的。 项目司理职责: 1、 根本职责便是确保项目目的的完成,向导项目团队定时、优质地完玉成部事情。 2、 与客户相同,理解项目标全体需求。并与客户坚持肯定的联系,即时反应阶段性的效果,和即时变动客户提出的公道需求。 3、 订定项目开辟方案文档,量化义务,并公道分派给响应的职员。 4、 跟踪项目标进度,和谐项目构成员之间的互助。 5、 监视发生项目停顿各阶段的文档,并与QA即时相同,包管文档的完备和标准。 6、 开辟历程中的需求变动,项目司理必要跟客户理解需求,在无法判别新的需求对项目标整理影响水平的状况下,需同项目构成员探讨,最初决议能否吸收客户的需求,然后再跟客户协商。确定要变动需求的状况下,需发生需求变动文档,变动开辟方案,关照QA。 7、 项目提交测试后,项目司理需理解测试后果,依据测试的bug的严峻水平来重新变动开辟方案。 8、 向上报告请示。向下级报告请示项目标停顿状况,需求变动等一切项目信息。 9、 项目完成的时分必要项目总结,发生项目总结文档。 项目司理权益: 1、 开辟指挥权。项目开辟职员的分派和调解。 2、 技能决议计划权。次要是检察和同意严重技能步伐和技能方案,以防决议计划失误,形成严重丧失。 3、 请求协作权。项目开展呈现不克不及办理的题目的时分,可以向下级请求协作。 4、 稽核成员权。稽核项目构成员,视觉和测试组只稽核组长。 必备流程: 1>###天天下战书5:00――6:00,项目司理调集该项目标相干职员(包罗开辟职员、美工等)作项目逐日总结,内容包罗: (1) 理解每个成员的事情进度状况。 (2) 理解成员在事情中遇到的难,并寻觅资源办理。 (3) 成员之间的共同能否和谐分歧(好比,必要提交的物件没有定时提交或忘记等)。 (4) 若有必要,依据以后的停顿状况调解项目方案。 (5) 布置每个成员第二天的事情。 (6) 假如思索到项目以后的停顿形态大概会招致项目延期,则项目司理有权布置项目组加班,以包管工期。 2>###假如项目司理吸收到新的需求,则项目司理应该在下战书的项目逐日总结会上提出,并分派布置事情。除非新来的需求分外告急或影响到项目组以后正在举行的义务,必要调集项目构成员告急讨论外,不然不该打断项目组确当前事情。 假如新的需求是在天天上班后吸收的,则项目司理应在第二天早上调集项目构成员讨论并布置义务。 软件 项目司理 zhuweisky cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200804/507.html 1. CRM客户干系办理软件次要功效形貌 1.1. 体系办理  用户办理 对利用该体系的用户材料信息举行添加、删除、修正、查找打印等  部分办理 对利用该体系的部分举行添加、删除、修正  用户权限办理 设置利用该体系的用户权限、和登录暗码。详见权限办理局部。  体系参数设置 设置一些体系运转必需的参数。 1.2. 客户办理  客户档案材料办理 对客户的根本天然属性等信息举行标准化、尺度化办理 根本材料次要有客户标识/编号、户名、性别、年事、所属地域(编号和详细地域称号) 、家庭地点、邮编、身份证号码、职业、所属行业(编号和详细行业称号) 、教诲程度、联系德律风、细致种别(一样平常客户、公寓客户、别墅客户) 、兴味兴趣等信息。等信息 办理功效:客户根本材料办理根本功效包罗创建/导入、删除、修正、盘问(按肯定尺度,如行业、地域等) 、打印等功效。  客户分类办理 对客户的分类举行办理(好比一样平常客户和紧张客户等)  客户级别办理 对客户的级别举行办理(好比钻石级、白银级等)  客户消耗信息办理 对客户消耗信息举行标准化办理,以便更好地对客户的消耗举动特性举行无效剖析,进而为企业谋划、营销、贩卖和办事实行提供战略性发起。 客户消耗信息包罗客户辨认信息(如客户标识/编号、客户范例等) 、客户消耗内容信息(如购置的那种产品、购置工夫、消耗总量及用度品种组成等)客户消耗举动信息(如消耗工夫、时长距离、次数、以及消耗习气等) 办理功效:客户消耗信息办理根本功效包罗创建/导入、删除、修正、盘问(按肯定尺度,如客户范例、产品范例、消耗金额、消耗工夫) 、打印等功效。  客户跟踪办事记载 记载与客户一切的联系运动,好比奉送生日礼品、回访记载等信息  客户流失的信息办理 对客户流丢失的信息举行标准化办理,以便对流失客户举行无效地剖析,进而接纳有针对性战略来避免客户流失。 办理功效:客户流丢失的信息办理根本功效包罗创建/导入、删除、修正、盘问(按肯定尺度,如客户范例、购置产品、所属地域以及流失范例等) 、打印等功效。  客户发起信息办理 对客户的发起信息举行标准化办理,从而理解客户为客户办事。 客户的发起信息包罗发起的编号、品种、发起产生的工夫、发起的发起人联系德律风、对发起处置举行跟踪、发起处置结果以及发起反应发起的品种包罗企业抽象及文明发起、代价尺度发起和其他方面的发起等。 客户发起信息办理根本功效包罗创建/导入、删除、尺度,如发起的品种、产生的工夫等) 、打印等功效。 1.3. 产品办理  产品材料档案办理 产品根本信息的办理,好比产品编码、称号、规格型号等信息。 办理功效:提供添加、删除、修正、打印等功效。  产品分类办理 对产品的分类举行办理 1.4. 会员卡办理  会员卡级别办理 对会员卡的级别(金卡、银卡等)、关于级另外扣头率。以及积分的办理。可支持储值卡,次卡和扣头卡等多种卡范例,可机动自在设置。  会员卡调级办理 可依据客户的消耗金额,体系主动调解客户的级别以及响应的扣头率。  积分消耗办理 可提供积分二次消耗大概积分兑换奖品的功效。  会员卡的挂失、充值、改密、补卡等功效 1.5. 消耗收银办理 提供产品开单所必要的种种栏目选择,包罗消耗卡和现金消耗,消耗卡主动辨认主顾身份和消耗扣头,智能化扣头、找零、抹零,可完成多个消耗项目一同开单,并选择能否打印单子 1.6. 员工办理  贩卖提成办理 体系可依据贩卖票据主动天生贩卖提成。  员工人为单天生 可主动天生员工的人为报表。 1.7. 盘问统计剖析体系  盘问体系 提供种种信息和档案的全能盘问体系。好比客户档案、产品档案等信息。  统计剖析体系 能天生种种统计报表和剖析图表。 1、 客户消耗才能变革剖析 2、 客户消耗排行榜 3、 客户的流失剖析报表 4、 客户忠实度剖析报表 5、 客户得意度剖析报表 6、 产品分类贩卖排行榜 7、 其他的一些剖析报表 1.8. 智能关照提示/短信体系 客户刷卡消耗时,可主动弹出相干的消耗记载、客户材料等信息。 客户生日和紧张节日时可提早提示,并可批量发送祝愿短信。 客户凌驾几多天没有发生消耗,体系会主动提示。 其他的一些提示。 1.9. 数据导入导出 体系的数据可随意导出到excel表格大概其他范例文件中。 关于已有的客户档案可由excel大概其他文件随意导入。 1.10. 金蝶K3库存财政接口(数据同步) 提供与金蝶K3的接口,体系天天主动会将贩卖票据导入到金蝶K3的软件中,便于财政统计数据。 CRM 客户干系办理 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/506.html 关于用户自界说的复合数据范例,必要由步伐员自已界说一些办法,对该范例的实例举行所需的操纵。在晚期很多步伐设计言语中,复合数据范例及其相干操纵的代码之间没有特别的联系。好比,用户界说日期Date范例.并界说一个办法tomorrow(),它吸收一个Date范例的参数,据此推测厥后继日是哪一天。步伐中界说变量的代码和tomorrow()办法的代码可以是分散的。 绝大少数步伐设计言语都预界说了一些根本数据范例,并响应界说了对那些范例的实例实行的操纵。好比,对整型、实型等数值范例,有加、减、乘、除等操纵,对逻辑范例,有逻辑与、逻辑或、逻辑非等操纵。 有些编程言语改良了这种处置方法,容许数据范例阐明和欲对该范例变量举行操纵的代码阐明之间有较严密的联系。通常把数据范例和对其举行的操纵收集在一同组成一种笼统数据范例。严厉地说,笼统数据范例是指基于一个逻辑范例的数据范例以及这个范例上的一组操纵。每一个操纵由它的输出、输入界说。一个笼统数据范例的界说并不触及它的完成细节,这些完成细节关于笼统数据范例的用户是隐蔽的。 给出了Date范例和tomorrow操纵之间创建的一种联系。 步伐: public ClaSS Date{ private int day,month,year; Date(int i.int j.int k){ day=i: month=j; year=k; } Date(){ day=1; month=m 1; year=1998; } Date (Date d){ day=d.day; month=d.montht year=d.year; } public Date tomorrow(){ Date d=newDate(this); d.day++l if(d.day>d.daysInMonth()){ //d8yslnMonth()前往每个月中差别的天数 d.day=1; d.month++; if(d.month>12)f d.month=1: d.year++; } } return d; } . } 在Java中把名为tomorrow的代码段叫做办法,也可以称为成员函数。 在有些步伐设计言语中,tomorrow()办法的界说大概会要求带一个参数,比方: void tomorrow(Date d); 像Java这种支持笼统数据范例的言语在数据和操纵间创建了较严厉的联系,即把办法与数据封装在一个类中。在步伐中不是把办法形貌为对数据的操纵,而是把数据看作是它晓得怎样修正本人,然后要求数据对它本人实行操纵。响应的语句如下: Data d=new Date(20,11,1998);//已初始化的date工具 d.tomorrow(); 这种写法标明,数据本人实行操纵,tomorrow()办法作用于变量d。要拜访Date类的域,可利用点操纵符“.”: d.day 它的意思是“d所指的Date工具中的day域”。相似地,d.tomorrow()是指“d所指的Date工具中的tomorrow()办法挪用”,epx,-Jd工具举行tomorrow操纵。 把办法看作是数据的特征,而不把数据与办法离开,这种头脑是创建面向工具体系历程中的紧张步调。 java 笼统范例 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200804/505.html 看到篇很好的文章,介绍给各人看看 Lambda表达式是一个匿名的办法,在开辟期j9九游会是不晓得其办法名是什么的,以是j9九游会要怎样递归挪用呢?假如你看过我这文章《让您晓得您的办法是被何“人”挪用 》的话,你应该会“啊哈”的拍一下头脑,思绪就出来了,没错!!便是间接用StackFrame获取以后实行的办法,然后间接Invoke即可。 示例代码: class Test { /**//// <summary> /// /// </summary> /// <param name=v1></param> /// <param name=v2></param> /// <param name=num></param> /// <param name=total></param> /// <returns></returns> public delegate long AddMethod(long v1, long v2, int num, int cout); /**//// <summary> /// /// </summary> /// <param name=addMethod></param> /// <param name=cout></param> static void Print(AddMethod method, int cout) { Console.WriteLine(method(0, 1, 2, cout)); } static void Main() { //求0,1,1,2,3,5,8.相似的数据行列步队在第30个地位>###Print((v1, v2, num, cout) => { Console.Write(v1); Console.Write(,); num++; if (num == cout) { Console.Write(v2); Console.WriteLine(); return v1 + v2; } else { //获得以后>### StackFrame frame = new StackFrame(0); //递归>### return (long)(frame.GetMethod().Invoke(num, new object[] { v2, (v1 + v2), num, cout })); } }, 30); Console.Read(); } } j9九游会的代码乐成运转了,乐成的求出在第30个地位的数值是:514229当时,.NET里另有一个东东可以利便的失掉以后挪用办法的援用,这东东便是MethodBase,其有一个静态办法GetCurrentMethod 可间接获取以后实行的办法援用,以是j9九游会可以将下面的StackFrame处的两句代码改为>### //递归>### return (long)(MethodBase.GetCurrentMethod().Invoke(num, new object[] { v2, (v1 + v2), num, cout })); 实行后的后果都是一样的(纷歧样才怪了Orz) Lambda 递归 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200804/504.html 为了增强现有oa体系的适用性,整合对短信的办理,继oa办公主动化软件前次晋级之后,二域办公主动化办理体系再次晋级为V3.6版本,增长了短信发送模块,片面支持短信功效。本次晋级对老用户收费,请老用户与j9九游会联系。 oa 办公主动化软件 admin 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200804/503.html 明天在网上搜集了一篇文章,讲的是C++的一些底子知识,各人一同学习一下: 对利用指针来处置数据读者应有了一些领会,即先界说一以数据或元素范例为基范例的指针变量;其次在界说的指针变量与要处置的数据之间创建联系关系,让指针变量指向要处置的数据;然后援用指针指向变量来完成数据的处置。 利用指针来处置布局体数据也不破例,上面举例阐明。 例指向布局体变量的指针变量的使用示例。 假定有一布局体,包括或人的姓名和年事,用指向布局体变量的指针变量完成输入处置。 源步伐如下: /*步伐10一13,指针使用于布局体*/ main() {struct person {char *name; int age: )someone; struct person *p;/*界说布局体范例的指针变量*/ someone.name=”张三”;/*假定姓名为张三*/ someone.age=20; p=&s19meone/*创建联系关系,*p即someone*/ printf(”姓名=%s,年事=%d\n,(*p).name,(*p).age); /*等价于printf(”姓名=%s,年事=9td\n,someone.name,someone.age);*/ ) 运转后果:姓名=张三,年事=20 阐明: (1)在用指向布局体的指针变量形貌布局体的重量时,必需利用“()”。如不利用“()”,像上例中*p.name,由于“.”运算的优先级比“*”高,这时实践表现就成为*(p.name),而不是(*p).name。 (2)布局体变量的指针,是指布局体变量的首地点,而不是变量中某成员的地点。指向布局体的指针变量不克不及指向布局体的成员。如: p=&someone.name;/*错误*/ (3)引入指向布局体的指针变量后,为了誊写利便和直观利用,C言语提供指向布局体成员运算来失掉布局体的成员。“一>”运算符由“一”和“>”复合构成。如p一>name、p一>age即someone.name、someone.age。“一>”运算优先级与“.”运算相反。 至此,j9九游会有三种情势来援用布局体成员:布局体变量.成员名、(*布局体指针).成员名、布局体指针一>成员名。 (4)关于利用布局体指针来处置布局体数组与后面介绍的利用指针来处置数组完全相似。 C 指针 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200804/502.html ###本文次要介绍了怎样从一个不克不及正常翻开的数据库(由于一个/多个数据库文件与其他文件纷歧致)中提取数据的详细示例,细致内容请各人参考下文。 详细案例: 一个磁盘破坏了而且丧失了一个数据库文件。从一周前的热备转储数据文件,但是丧失了几个归档日记文件。但有题目的数据文件包括了最紧张的表,接纳什么措施才干援救数据呢? 办理办法: 每个数据库办理员都晓得这是有题目的,肯定会丧失数据,由于某些事件丧失了,题目是会丧失几多数据?Oracle利用硬线路地位而且由于存在完备性束缚题目,因而不容许正常翻开数据。但假如利用十分规的办法让Oracle删除其硬线路属性,那么应该可以提取尽大概多的数据。而通常这会比丧失所有数据要好许多。 通常倘使仅仅丧失了堆表的索引,大概某些可以很容易重修的数据,那么最好的办法应该是删除表空间偏重建这些工具然后重新输出。但假如丧失的数据文件包括了紧张数据而且很难规复,并且只要前一次的备份却又丧失了某些归档日记,那么用户大概盼望可以尽大概多的从有题目的表空间规复数据而且删除和重修表空间。 详细步调如下: 1.对以后拥有的数据举行一个冷备; 2.转储丧失的数据库文件备份并使用可以使用的日记; 3.设置未文档化的初始化参数,其容许你在以后形态翻开数据库; 4.实行exp并提取所有可以从有题目的表空间提取的数据; 5.从先前的冷备转储数据库; 6.使破坏的数据文件offline; 7.实行exp并提取第4步没有提取的分外数据; 8.在一次从冷备转储; 9.删除有题目的表空间; 10.重修有题目的表空间; 11.利用第四步和第七步提取的数据重修数据; 利用案例形貌:ORDTAB表空间的一个数据文件ordtab03.dbf破坏,其包括许多 ORDERS表的分区,数据文件热备于July 4, 2004,July 4—至今的某些归档日记丧失。 第1步:备份数据库 第1步的义务是冷备以后拥有的任何数据文件,在线重做日记,和控制文件。假如丧失了一个/多个数据文件但数据库仍旧是open的,那么对每个剩余的数据文件举行热备并确保备份时期/之后的归档被宁静保管。 创立备份后,在封闭数据库之前,备份一下控制文件: ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS; 然后翻开备份的控制文件,删除第一个#之上的一切行,并删除“RECOVER DATABASE…”到文件开头的所有。 第2步:转储丧失的数据库文件备份并使用日记; 这一步应该转储藏份,并使用日记到直到无法在前向转动,此时假如实验正常翻开数据库,将会失掉ORA-01589: must use RESETLOGS or NORESETLOGS option for database open错误。 假如实验实行ALTER DATABASE OPEN RESETLOGS,将会失掉ORA-01195错误:ORA-01195: online backup of file %s needs more recovery to be consistent。 这里是Oracle利用其硬线路的地位。由于转储的数据文件不克不及规复到与其他文件分歧的地位,以是大概存在中缀的数据而且Oracle不容许正常翻开数据库。 第3步:设置未文档化的实例参数并翻开数据库 在初始化参数文件中起首必要将job_queue_processes设置为0,然后设置_allow_resetlogs_corruption=TRUE,变动该参数后,切换到保管新控制文件的目次,第一步创立的地位。然后以SYSDBA毗连并运转新的控制文件创立剧本。 此时数据库可以翻开了。 SQL> SELECT COUNT(*) FROM OE.orders; 第4步:实行导出并提取数据 在这一步可以很容易的看到那些表导出了所有的数据。 第5步:转储藏份的数据库 这一步,以及上面两步可选。这三步联合在一同容许提取更多的数据,这一步从备份的数据库转储可以高效的打消任何由于利用_allow_resetlogs_corruption参数形成的破坏。因而,这一步不会规复任何丧失的数据文件。 第6步:使破坏的数据文件offline ALTER DATABASE DATAFILE /u07/oradata/PRD/ordtab03.dbf OFFLINE; 这一步失掉数据库的完全分歧性形态。 第7步:实行导出并提取分外的数据 这一步大概可以提取从第四步不克不及提取的分外数据,如索引中的数据。 第8步 :转储数据库 这是最初一次转储数据库,这一步正式回滚数据库到利用隐含参数前那一刻,然后将数据库前往到正常形态,假如从第五步转储以来没有更新任何数据,可以跳过这一步。 第9步:删除有题目的表空间 起首必要检察能否有完备性束缚限定,利用以下盘问: SELECT CR.constraint_name FROM dba_constraints CR, dba_constraints CP, dba_tables TP, dba_tables TR WHERE CR.r_owner = CP.owner AND CR.r_constraint_name = CP.constraint_name AND CR.constraint_type = R AND CP.constraint_type IN (P, U) AND CP.table_name = TP.table_name AND CP.owner = TP.owner AND CR.table_name = TR.table_name AND CR.owner = TR.owner AND TR.tablespace_name <> ORDTAB AND TP.tablespace_name = ORDTAB; 假如有束缚,大概必要创立重修剧本。假如利用export dump重修数据,束缚可以从导出文件转储。 DROP TABLESPACE ordtab INCLUDING CONTENTS CASCADE CONSTRAINTS; 第10步:重修表空间 第11步:重修数据 实行导入后,完毕。 日记 规复 数据库 未知 赛迪网技能社区 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/501.html return 只能用在有前往范例的函数中,但有前往值的函数肯定要有return吗?return都可以用在函数的哪些地方呢?这是本文必要讨论的题目。 例一: class test { public String test() { if(true){ return ; } else{ return ; } } } 下面如许即可经过编译,但上面这两个例子却不克不及经过编译: (一) class test { public String test() { if(true){ return ; } } } (二) class test { public String test() { if(isTrue()){ return ; } else if(!isTrue()){//两个if里的判别包罗了一切的大概性,但照旧编译期error return ; } } boolean isTrue(){ return true; } } 结论1: 关于(一),这是由于java编译器认定独自的if语句只在当肯定条件满意状况下才实行,它以为if不会有任何状况下都能实行的才能。 关于(二),这是由于java编译器对if else 语句可以片面席卷一切状况的才能只有限在的if...else(或if...else if...else)时,而不包罗if...else if。 例二: class test { public String test() { while(true){ return ; } } } 下面如许即可经过编译,但上面如许不可: class test { public String test() { while(isTrue()){ return ; } } boolean isTrue(){ return true; } } 结论2: 这是由于编译器以为while语句有在任何状况下都能实行的才能,但只在入参为true的状况下有该才能。 例三: public class test { String test() throws Exception{ throw new Exception();//抛出非常后,跳出步伐,步伐中断 } } 结论3: 假如函数中创立了非常,并抛出,则该函数可以不前往值。 java return语句 未知 赛迪网技能社区 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200804/500.html 看到一片关于类底子知识的文章,搜集起来各人看一下。 System.Web.Services Namespace包罗很多类,使得步伐员愈加利便天时用ASP.NET和XML Web Service客户端来创立XML Web办事。System.Web.Service的类条理。 类 形貌 WebMethodAttribute 这个类不行被承继,将此属性添加到ASP.NET办法中,则使该办法可以随时被近程Web客户端挪用WebService 界说了XML的Web Services的可选的基类,该基类提供间接拜访的ASP.NET工具,如后面j9九游会讲过的application和session WebServiceAttribute 常用于添加附加信息到XML Web Service中WebServiceBindingAttribute 声明绑定一个大概多个在XML Web Service中的完成办法。这个类异样不克不及被承继 留意倘使不必要拜访AsP.NET的工具,那么即便不承继w_ebseVice也可以创 建一个XML Web Service。 这个ASP.NET工具可以经过上下文采拜访。XML Web Service办法将单一的性子,如SoapRpcMethodAttribute大概SoapDocument.Meth odAttribute的值设为True,如许,这些办法就不必拜访它们的HttpContext。异样地,拜访Web Service类的恣意一个属性,都可以经过XML Web Service办法前往一个表现空的指针 比方,使用一个工夫函数DateTime.Now.ToShortTimeString经过拜访Web Service来失掉办事器的工夫,而且使用Context属性失掉该值。 <%@WebSerVice Language=VB Class=UtilTime %> Imports System Imports System.Web.Services Public Class UtilTime Inherits WebService <WebMethod(Description:=”Returns the time as stored on the Server”, EnableSession:=FalseL> Public Function Time()As String Return Context.Timestamp.TimeOfDay.ToString() End Function Web Services 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200804/499.html ###SQL语句的优化是将功能低下的SQL语句转换成目标相反的功能优秀的SQL语句。 人工智能主动SQL优化便是利用人工智能技能,主动对SQL语句举行重写,从而找到功能最好的等效SQL语句。 数据库功能的优化 一个数据库体系的生命周期可以分红:设计、开辟和制品三个阶段。在设计阶段举行数据库功能优化的本钱最低,收益最大。在制品阶段举行数据库功能优化的本钱最高,收益最小。 数据库的优化通常可以经过对网络、硬件、操纵体系、数据库参数和使用步伐的优化来举行。最罕见的优化手腕便是对硬件的晋级。依据统计,对网络、硬件、操纵体系、数据库参数举行优化所取得的功能提拔,所有加起来只占数据库体系功能提拔的40%左右,其他的60%体系功能提拔来自对使用步伐的优化。很多优化专家以为,对使用步伐的优化可以失掉80%的体系功能的提拔。 使用步伐的优化 使用步伐的优化通常可分为两个方面:源代码和SQL语句。由于触及到对步伐逻辑的改动,源代码的优化在工夫本钱和危害上价钱很高,而对数据库体系功能的提拔见效有限。 为什么要优化SQL语句 . SQL语句是对数据库举行操纵的专一途径,对数据库体系的功能起着决议性的作用。 . SQL语句斲丧了70%至90%的数据库资源。 . SQL语句独立于步伐设计逻辑,对SQL语句举行优化不会影响步伐逻辑。 . SQL语句有差别的写法,在功能上的差别十分大。 . SQL语句易学,但难通晓。 优化SQL语句的传统办法是经过手工重写来对SQL语句举行优化。DBA或资深步伐员经过对SQL语句实行方案的剖析,依托履历,实验重写SQL语句,然后对后果和功能举行比力,以试图找到功能较佳的SQL语句。这种传统上的作法无法找出SQL语句的一切大概写法,且依赖于人的履历,十分泯灭工夫。 SQL优化技能的开展进程 第一代SQL优化东西是实行方案剖析东西。这类东西针对输出的SQL语句,从数据库提取实行方案,并表明实行方案中要害字的寄义。 第二代SQL优化东西只能提供增长索引的发起,它经过对输出的SQL语句的实行方案的剖析,来发生能否要增长索引的发起。 第三代SQL优化东西不但剖析输出SQL语句的实行方案,还对输出的SQL语句自己举行语法剖析,颠末剖析发生写法上的改良发起。 人工智能主动SQL优化 人工智能主动SQL优化呈现在90年月末。现在在商用数据库范畴,LECCO Technology Limited(灵高科研有限公司)拥有该技能,并提供利用该技能的主动优化产品LECCO SQL Expert,它支持Oracle、Sybase、MS SQL Server和IBM DB2数据库平台。该产品针对数据库使用的开辟和维护阶段提供的模块有:SQL语法优化器、PL/SQL集成化开辟调试情况(IDE)、扫描器、数据库监督器等。其中心模块SQL 语法优化器的事情原理为:①输出一条源SQL语句;②“人工智能反应式搜刮引擎”对输出的SQL语句,联合检测到的数据库布局和索引举行重写,发生N条等效的SQL语句输入;③发生的N条等效SQL语句再送入“人工智能反应式搜刮引擎”举行重写,直至无法发生新的输入或搜刮限额满;④对输入的SQL语句举行过滤,选出具有差别实行方案的SQL语句;⑤对失掉的SQL语句举行批量测试,找出功能最好的SQL语句。 LECCO SQL Expert主动优化实例 假定j9九游会从源代码中抽取出这条SQL语句(也可以经过内带的扫描器或监督器取得SQL语句): SELECT COUNT(*) FROM EMPLOYEE swheresEXISTS (SELECT X FROM DEPARTMENT swheresEMP_DEPT=DPT_ID AND DPT_NAME LIKE AC%) AND EMP_ID IN (SELECT SAL_EMP_ID FROM EMP_SAL_HIST B swheresSAL_SALARY > 70000) 按下“优化”按钮后,颠末10几秒,SQL Expert就完成了优化的历程,并在这10几秒的工夫里重写发生了2267 条等价的SQL语句,此中136条SQL语句有差别的实行方案。 接上去,j9九游会可以对主动重写发生的136条SQL语句举行批运转测试,以选出功能最佳的等效SQL语句。按下“批运转” 按钮,在“停止条件” 页选择“最佳运转工夫SQL语句”,按“确定”。 颠末几分钟的测试运转后,j9九游会可以发明SQL124的运转工夫和反响工夫最短。运转速率约有22.75倍的提拔(源SQL语句运转工夫为2.73秒,SQL124运转工夫为0.12秒)。如今j9九游会就可以把SQL124放入源代码中,完毕一条SQL语句的优化事情了。 “边做边学式训练”提拔SQL开辟程度 LECCO SQL Expert不但可以找到最佳的SQL语句,它所提供的“边做边学式训练”还可以教开辟职员和数据库办理员怎样写出功能最好的SQL语句。LECCO SQL Expert的“SQL比力器”可以标明源SQL和待选SQL间的差别之处。 以下面优化的后果为例,为了检察源SQL语句和SQL124在写法上有什么差别,j9九游会可以按下“比力器” 按钮,对SQL124和源SQL语句举行比力。“SQL 比力器”将SQL124绝对于源SQL语句的差别之处以蓝颜色表现了出来。假如选择“双向比力”复选框,“SQL 比力器”可以将两条SQL语句的差别之处以蓝色表现。固然,j9九游会也可以从源语句和重写后的SQL 语句中任选两条举行比力。 从比力的后果可以看到,重写后的SQL124把第一个Exists改写成了In;在字段DPT_ID上举行了兼并空字符串的操纵,以诱导数据库先实行子盘问中的 (SELECT DPT_ID|| FROM DEPARTMENT WHERE DPT_NAME LIKE AC%) 在子盘问完成后,再与EMPLOYEE表举行嵌套循环毗连(Nested Loop Join)。 假如以为对写法的改动难以了解,还可以点中“实行方案”复选框,经过比力两条SQL语句的实行方案的差别,来理解此中的差别。在检察实行方案历程中,假如有什么不明确的地方,可以点中“SQL信息按钮”,再点击实行方案看不明确的地方,LECCO SQL Expert的上下文敏感协助体系将提供实行方案该处的表明。 在“SQL比力器”中,选中“统计信息”复选框后,可失掉细致的两条SQL语句运转时的统计信息比力,这关于学习差别的SQL写法对数据库资源的斲丧很有协助。 LECCO SQL Expert优化模块的特点 LECCO SQL Expert优化模块的特点次要体现为:主动优化SQL语句;以独家的人工智能知识库“反应式搜刮引擎”来重写功能优秀的SQL语句;找出一切等效的SQL语句及大概的实行方案;包管发生相反的后果;先辈的SQL语法剖析器能处置最庞大的SQL语句;可以重写SELECT、SELECT INTO、UPDATE、INSERT和DELETE语句;经过测试运转,为使用步伐和数据库主动找到功能最好的SQL语句;提供微秒级的计时,可以优化Web使用步伐和有少量用户的在线事件处置中运转工夫很短的SQL语句;为开辟职员提供“边做边学式训练”,敏捷进步开辟职员的SQL编程技艺;提供上下文敏感的实行方案协助体系和SQL运转形态协助;不是推测或发起,而是无独有偶[wú dú yǒu ǒu]的SQL重写办理方案。 写出专家级的SQL语句 LECCO SQL Expert的呈现,使SQL的优化变得极端复杂,只需可以写出SQL语句,它就能帮用户找到最好功能的写法。LECCO SQL Expert不但能在很短的工夫内找到一切大概的优化方案,并且可以经过实践测试,确定最无效的优化方案。同以往的数据库优化手腕相比力,LECCO SQL Expert将数据库优化技能带到了一个极新的技能高度,依赖人的履历、泯灭少量工夫、受人的头脑约束的数据库优化手腕曾经被高效、省时且正确的主动优化软件所代替了。经过内建的“LECCO小助手”的协助,即便是SQL的开辟老手,也能疾速且复杂地写出专家级的SQL语句。 SQL 人工智能 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/498.html ###越来越多人开端利用Java,但他们大少数人没有做好充足的头脑预备(没有承受OO头脑系统相干培训),致使不克不及很好驾御Java项目,乃至 招致开辟后的Java体系功能迟缓乃至常常当机。许多人以为这是Java庞大招致,实在基本缘故原由在于:j9九游会原先掌握的关于软件知识(OO方面)不是太缺少便是不适当,存在了解上和办法上的误区。 软件的生命性 软件是有生命的,这大概是老调重弹了,但由于它事关分层架构的起因,重复夸大都不外分。 一个有生命的软件起首必需有一个机动可扩展的底子架构,其次才是完备的功效。 现在许多人对软件的头脑照旧核心落在后者:完备的功效,以为一个软件功效越完备越好,实在要害照旧架构的机动性,便是前者,底子架构好,功效添加只是工夫和事情量题目,但假如架构欠好,功效再完备,也不行能包罗将来一切功效,软件是有生命的,在将来发展时,更多功效必要参加,但由于底子架构不机动不克不及利便参加,绝路一条。 正由于平凡人对软件存在短视误区,对功效寻求高于底子架构,许多吃了亏的老步伐员就此分开软件行业,带走名贵的失败履历,新的自觉的年老步伐员照旧利用老的头脑往前冲。实在许多外洋收费开源框架如ofbiz compiere和slide也存在这方面圈套,貌似十分切合胃口,实在相似国际那些几百元的盗版软件,扩展性以及继续开展性严峻不敷。 那么选择如今一些盛行的框架如Hibernate、Spring/Jdonframework能否就表现底子架构打好了呢?实在还不尽然,要害照旧取决于你怎样利用这些框架来搭建你的商业体系。 存储历程和庞大SQL语句的圈套 起首谈谈存储历程利用的误区,利用存储历程架构的人以为可以办理功能题目,实在它正是招致功能题目的罪魁罪魁之一,打个比喻:假如一团体频临殒命,打一针可以让其延伸半年,但打了这针,其他一切医疗方案就所有生效,叨教你会利用这种短视方案吗? 为什么如许说呢?假如存储历程都封装了商业历程,那么运转负载都会合在数据库端,要两头J2EE使用办事器干什么?要两头办事器的散布式盘算和集群才能做什么?只能回到已往会合式数据库主机期间。如今软件都是面向互联网的,不象已往那样范围在一个小局域网,多用户并发拜访量都是无法确定和权衡,依托一台数据库主机显然是不克不及够接受如许恶劣的用户拜访情况的。(固然搞数据库集群也只是五十步和百步的区别)。 从分层角度来看,如今三层架构:体现层、商业层和耐久层,三个条理应该支解分明,职责明白:耐久层职责耐久化保管商业模子工具,商业层对耐久层的挪用只是协助j9九游会激活已经委托其保管的工具,以是,不克不及由于耐久层是保管者,j9九游会就以其为中心围绕其编程,除了要求其出借模子工具外,还要求其做其做庞大的商业组合。打个比喻:你在火车站将水果和盘子两个工具委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,公道吗? 下面是谈太过依赖耐久层的一个征象,另有一个恰好相反征象,耐久层分发出来,开端挤占商业层,腐化商业层,整个商业层四处瞥见的是数据表的影子(包罗数据表的字段),而不是商业工具。如许步伐员应该多看看OO经典PoEAA。PoEAA 以为除了耐久层,不该该在其他地方看到数据表或表字段名。 固然过量利用存储历程,利用数据库好处也是容许的。依照Evans DDD实际,可以将SQL语句和存储历程作为规矩Specification一局部。 Hibernate等ORM题目 如今利用Hibernate人也不少,但他们发明Hibernate功能迟缓,以是寻求办理方案,实在并不是 Hibernate功能迟缓,而是j9九游会利用方法产生错误: “近来自己正搞一个项目,项目中j9九游会用到了struts1.2+hibernate3, 由于干系庞大表和表之间的干系许多,在许多地方把lazy都设置false,以是招致数据一加载很慢,并且盘问一条数据更黑白常的慢。” Hibernate是一个基于工具模子耐久化的技能,因而,要害是j9九游会必要设计出高质量的工具模子,遵照DDD范畴建模准绳,增加低落联系关系,经过分层等无效措施处置联系关系。假如接纳围绕数据表举行设计编程,加上表之间干系庞大(没有迷信办法处置、侦探或增加这些干系),一定招致 体系运转迟缓,实在异样题目也实用于现在对EJB的实体Bean的CMP埋怨上,实体Bean是Domain Model耐久化,假如不起首设计Domain Model,而是设计数据表,和耐久化东西设计目的南辕北辙[nán yuán běi zhé],能不出题目吗?关于这个题目N多年就在Jdon争论过。 这里异样延伸出别的一个题目:数据库设计题目,数据库能否必要在项目开端设计? 假如j9九游会举行数据库设计,那么就发生了一系列题目:当j9九游会利用Hibernate完成耐久保管时,必需思索事前设计好的数据库表布局以及他们的干系怎样和商业工具完成映射,这实践上黑白常难完成的,这也是许多人以为利用ORM框架顺手基本缘故原由地点。 固然,也有脑力相称兴旺的人可以 完成,但这种围绕数据库完成映射的后果一定歪曲商业工具,这相似于两个板块(数据表和商业工具)相撞,一定发生地动,地动的后果是两全其美[liǎng quán qí měi], 软的一方亏损,商业工具是代码,相称于数据表布局,属于软的一方,最初招致商业工具酿成数据传输工具DTO, DTO满天飞,功能和维护题目随之而来。 范畴建模办理了上述浩繁不和谐题目,分外是ORM痛楚利用题目,关于ORM/Hibernate利用照旧那句老话:假如你不掌握范畴建模办法,那么就不要用Hibernate,关于这个条理的你:大概No ORM 更是一个复杂之道: No ORM: The simplest solution http://www.theserverside.com/blogs/thread.tss?thread_id=41715 Spring分层抵牾题目 Spring因此应战EJB相貌呈现,其自己拥有的壮大组件定制功效是好处,但存在实战的一些题目,Spring作为商业层框架,不支持商业层Session 功效。 详细举比方下:当j9九游会完成购物车之类商业功效时,必要将购物场所保管到Session中,由于商业层没无方便的Session支持,j9九游会只得将购物车保管到 HttpSession,而HttpSession只要经过HttpRequest才干取得,再由于在Spring商业层容器中是无法拜访到HttpRequest这个工具的,以是, 最初j9九游会只能将“购物车保管到HttpSession”这个功效放在体现层中完成,而这个功效分明应该属于商业层功效,这就招致j9九游会的Java项目条理杂乱,维护性差。 违犯了利用Spring和分层架构最后目标。 范畴驱动设计DDD 如今回到j9九游会讨论的重点下去,分层架构是j9九游会利用Java的基本缘故原由之一,域建模专家Eric Evans在他的“Domain Model Design”一书中开篇起首夸大的是分层架构,整个DDD实际实践是报告j9九游会怎样利用模子工具oo技能和分层架构来设计完成一个Java项目。 j9九游会如今许多人晓得Java项目根本有三层:体现层 商业层和耐久层,当j9九游会固执于讨论各层框架怎样选择之时,实践上j9九游会真正的项目开辟事情还没有开端, 便是j9九游会选定了某种框架的组合(如Struts+Spring+Hibernate或Struts+EJB或Struts+JdonFramework),j9九游会还没无意识[wú yì shí]到商业层事情还必要少量事情,DDD提供了在商业层中再分别新的条理头脑,如范畴层和办事层,乃至再细分为作业层、才能层、战略层等等。经过条理细化方法到达庞大软件的松耦合。DDD提供了怎样细分条理的方法 当j9九游会将精神破费在架构技能层面的讨论和研讨上时,j9九游会大概遗忘以何种根据选择这些架构技能?选择尺度是什么?范畴驱动设计DDD 答复了如许的题目,DDD会报告你假如一个框架不克不及帮忙你完成分层架构,那就丢弃它,同时,DDD也指出选择框架的思索目标,使得你不会 随声附和[suí shēng fù hé],堕入庞大的技能细节迷雾中,迷失了架构选择的基本偏向。 如今也有些人误以为DDD是一种新的实际,实在DDD和设计形式一样,不是一种新的实际,而是实战履历的总结,它将古人 利用面向模子设计的办法履历提炼出来,供厥后者学习,以便敏捷找到驾御j9九游会软件项目标基本之道。 java j9九游会 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200804/497.html 经过编程方法完成短信息的发送对许多人来说是一件比力烦杂的事变,现在一样平常的办理办法是经过盘算机和手机的连线,经过可敌手机编程的言语编写相干的手机短信息步伐来完成,而这种办法关于一样平常人来说是很难到达的,由于此种办法不但要有许多必备的硬件设置装备摆设,也还需明白手机编程的相干知识。本文就来探究一下别的一种经过Visual C#发送短信息的复杂完成办法,这种办法在完成历程中比j9九游会想象的要复杂很多,只需拥有Visual C#一样平常编程底子,并确定您的盘算机接入互联网即可。上面就来细致介绍一下Visual C#发送短信息的详细完成历程。   一. Visual C#发送短信息的原理:   我想当许多读者一看到本文的标题肯定会想本文内容肯定十分深奥,而且作者肯定晓得了电信的发送短信的网关地点,实在并非云云。本文实在是使用一个现成的资源,一个可发送短信的Web Serviec。这个Web Service便是新浪网就提供的一个,可供用户间接挪用的发送短音讯的Web Service。这个Service的地点是 http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl 。在这个Service中提供了一个发送短音讯的办法sendXml。此办法的语法款式如下: string sendXml (carrier , userid , password , mobilenumber , content , msgtype )   sendXml办法中的六个参数均为string范例,而且sendXml办法的前往值也是string范例。   以下是sendXml办法中的六个参数的详细阐明:   ·carrier:运营商称号,详细利用时此参数并没有什么详细要求,即这内里可以任意输,输出的字符串也不会在对方手机中有任何表现。   ·userid:在新浪网上注册的手机号,注册手机所用的地点是: http://sms.sina.com.cn ,详细注册办法上面会详细介绍。 [!--empirenews.page--]   ·password:您在新浪网乐成注册手机后,新浪网所反应来的暗码。   ·mobilenumber:要发送短信到对方的手机号码。   ·content:所要发送短音讯的内容。   ·msgtype:发送短音讯的范例,由于本文发送的不是彩信,以是输出Text。   挪用此Web Service只需在Visual C#开辟情况中间接添加Web援用,把该地点输出即可,就可以利用此Web Service中的sendXml办法发送短音讯了。固然发送短音讯的呆板必需接入互联网。   二.在新浪网上注册手机:   依照如下步调就可在新浪网上注册手机:   1. 翻开欣赏器,并在地点栏中输出新浪无线的地点: http://sms.sina.com.cn .。在欣赏器德左上角,可见如图01界面: 图01:新浪网注册手机界面之一   输出手机号后,单击图01中的登岸,假如你的手机没有在新浪,则提醒如图02所示信息。 图02:新浪网注册手机界面之二   2. 依照图02中的选项输出响应的信息后,单击登岸挪动梦网按钮,假如注册乐成,挪动梦网则会向你注册的手机上发送一个8位长度的口令就可以失掉图03所示界面。 图03:新浪网注册手机界面之三[!--empirenews.page--]   这个口令要保存,上面发送短信就要利用这个口令。   三.本文步伐设计、调试和运转的情况:   (1).微软公司视窗2000办事器版。   (2).Visual Studio .Net 2003企业构建版,.Net FrameWork SDK版本号4322。  四.Visual C#完成短信息发送的详细完成步调:   Visual C#发送短信息的要害便是经过Web援用新浪网提供的发送短信息的Web Service,并在援用完成后。挪用此Service的sendXml办法即可。以下便是Visual C#援用Web Service发送短信息的详细完成步调:   1. 启动Visual Studio .Net。   2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。   3. 将【项目范例】设置为【Visual Basic项目】。   4. 将【模板】设置为【Windows使用步伐】。   5. 在【称号】文本框中输出【短信】。   6. 在【地位】的文本框中输出【E:\VS.NET项目】,然后单击【确定】按钮,如许在E:\VS.NET项目目次中就发生了称号为短信的文件夹,并在内里创立了称号为短信的项目文件。   7. 把Visual Studio .Net确当前窗口切换到【Form1.cs(设计)】窗口,并从【东西箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并实行响应的操纵:   四个Label组件。   四个TextBox组件。   一个Button组件,其作用是发送短信息。并在这个Button组件拖入Form1的设计窗体后,双击它,则体系会在Form1.cs文件辨别发生这个组件的Click事情对应的处置代码。   8. 把Visual Studio .Net确当前窗口切换到Form1.vb的代码编辑窗口,并用下列代码交换Form1.cs中的InitializeComponent历程对应的代码,下列代码作用是初始化窗体中参加的组件: private void InitializeComponent ( ) { this.textBox1 = new System.Windows.Forms.TextBox ( ) ; this.textBox2 = new System.Windows.Forms.TextBox ( ) ; this.textBox3 = new System.Windows.Forms.TextBox ( ) ; this.button1 = new System.Windows.Forms.Button ( ) ; this.label1 = new System.Windows.Forms.Label ( ) ; this.label2 = new System.Windows.Forms.Label ( ) ; this.label3 = new System.Windows.Forms.Label ( ) ; this.label4 = new System.Windows.Forms.Label ( ) ; this.textBox4 = new System.Windows.Forms.TextBox ( ) ; this.SuspendLayout ( ) ; this.textBox1.Location = new System.Drawing.Point ( 144 , 16 ) ; this.textBox1.Name = textBox1 ; this.textBox1.Size = new System.Drawing.Size ( 184 , 21 ) ; this.textBox1.TabIndex = 0 ; this.textBox1.Text = ; this.textBox2.Location = new System.Drawing.Point ( 144 , 69 ) ; this.textBox2.Name = textBox2 ; this.textBox2.PasswordChar = * ; this.textBox2.Size = new System.Drawing.Size ( 184 , 21 ) ; this.textBox2.TabIndex = 1 ; this.textBox2.Text = ; this.textBox3.Location = new System.Drawing.Point ( 144 , 122 ) ; this.textBox3.Name = textBox3 ; this.textBox3.Size = new System.Drawing.Size ( 184 , 21 ) ; this.textBox3.TabIndex = 2 ; this.textBox3.Text = ; this.button1.Location = new System.Drawing.Point ( 152 , 256 ) ; this.button1.Name = button1 ; this.button1.Size = new System.Drawing.Size ( 80 , 32 ) ; this.button1.TabIndex = 4 ; this.button1.Text = 发送 ; this.button1.Click += new System.EventHandler ( this.button1_Click ) ; this.label1.Location = new System.Drawing.Point ( 56 , 24 ) ; this.label1.Name = label1 ; this.label1.Size = new System.Drawing.Size ( 88 , 16 ) ; this.label1.TabIndex = 5 ; this.label1.Text = 注册手机号: ; this.label2.Location = new System.Drawing.Point ( 88 , 77 ) ; this.label2.Name = label2 ; this.label2.Size = new System.Drawing.Size ( 72 , 16 ) ; this.label2.TabIndex = 6 ; this.label2.Text = 口令: ; this.label3.Location = new System.Drawing.Point ( 56 , 128 ) ; this.label3.Name = label3 ; this.label3.Size = new System.Drawing.Size ( 96 , 16 ) ; this.label3.TabIndex = 7 ; this.label3.Text = 目的手机号: ; this.label4.Location = new System.Drawing.Point ( 96 , 176 ) ; this.label4.Name = label4 ; this.label4.Size = new System.Drawing.Size ( 72 , 16 ) ; this.label4.TabIndex = 8 ; this.label4.Text = 内容: ; this.textBox4.Location = new System.Drawing.Point ( 144 , 175 ) ; this.textBox4.Multiline = true ; this.textBox4.Name = textBox4 ; this.textBox4.Size = new System.Drawing.Size ( 184 , 48 ) ; this.textBox4.TabIndex = 3 ; this.textBox4.Text = ; this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ; this.ClientSize = new System.Drawing.Size ( 410 , 303 ) ; this.Controls.Add ( this.button1 ) ; this.Controls.Add ( this.textBox4 ) ; this.Controls.Add ( this.textBox3 ) ; this.Controls.Add ( this.textBox2 ) ; this.Controls.Add ( this.textBox1 ) ; this.Controls.Add ( this.label4 ) ; this.Controls.Add ( this.label3 ) ; this.Controls.Add ( this.label2 ) ; this.Controls.Add ( this.label1 ) ; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle ; this.MaximizeBox = false ; this.Name = Form1 ; this.Text = Visual C#完成短信发送 ; this.ResumeLayout ( false ) ; } [!--empirenews.page--]   至此【短信】项目标界面设计和功效完成的预备事情就完成了,详细如图04所示: 图04:【短信】项目标设计界面   9. 选中【短信】的【办理办法资源办理器】,右击【援用】,弹出【添加Web援用】对话框。在此对话框中的【URL】文本框中输出 http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl 后,单击【转到】按钮,则会失掉图05所示界面: 图05:在【短信】项目中添加Web援用的界面[!--empirenews.page--]   此时单击图04中的【添加援用】按钮,则乐成完成在【短信】项目中添加可发送短信息的新浪网提供的Web Service。   10. 把Visual Stuido .Net确当前窗口切换到Form1.cs的代码编辑窗口,并用下列代码交换From1.cs中的button1的Click事情对应的代码,下列代码的作用是挪用引入的Web Service中提供的sendXml办法向指定手机发送短信息: private void button1_Click ( object sender , System.EventArgs e ) {  短信.cn.com.sina.smsinter.SMSWS ws = new 短信.cn.com.sina.smsinter.SMSWS ( ) ;  string result = ws.sendXml ( Sina ,textBox1.Text ,textBox2.Text ,textBox3.Text ,textBox4.Text ,new ) ;  MessageBox.Show ( result ) ; }   11. 至此,在上述步调都准确实行后,【短信】项目标所有事情就完成了。单击快捷键F5运转步伐,在输出【注册手机号】、【口令】、【目的手机号】和【内容】后,单击【发送】按钮后,步伐就会向指定的手机号发送短信息了。   五.总结:   本文介绍的这种Visual C#发送短信息办法,其办理要害是援用Web Service,挪用此Web Service中的办法。通观全文,此种办法是不是很复杂。最初还要提示诸位,使用这种发送短信息并不是收费的午餐,其资费尺度可参看新浪无线网站上的相干阐明,每发送一条免费一角钱,从在新浪网注册的手机上免费。在利用本文介绍的办法发送短信息时,在发送完成后,一样平常会有一个耽误。这是由于背景接纳明晰音讯行列步队机制,不外这种耽误一样平常只会有几秒钟的工夫。 C# 短信 Web Serviec 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200804/496.html 范畴特定言语(DSL)通常被界说为一种分外针对某类特别题目的盘算机言语,它不计划办理其范畴外的题目。关于DSL的正式研讨曾经继续许多年,直到近来,在步伐员试图接纳最易读而且简炼的办法来办理他们的题目的时分,外部DSL不测地被写入步伐中。迩来,随着关于Ruby和其他一些静态言语的呈现,步伐员对DSL的兴味越来越浓。这些布局松懈的言语给DSL提供某种办法,使得DSL容许最少的语法以及对某种特别言语最间接的体现。但,保持编译器和利用相似Eclipse如许最壮大的古代集成开辟情况无疑是该方法的一大缺陷。但是,作者终于乐成地找到了这两个办法的折衷办理方法,而且,他们将证明该折衷办法不光大概,并且关于利用Java如许的布局性言语从面向DSL的方法来设计API很有协助。本文将形貌怎样利用Java言语来编写范畴特定言语,并将发起一些组建DSL言语时可接纳的形式。 Java合适用来创立外部范畴特定言语吗? 在j9九游会评论Java言语能否可以作为创立DSL的东西之前,j9九游会起首必要引进“外部DSL”这个观点。一个外部DSL在由使用软件的主编程言语创立,对定制编译器息争析器的创立(和维护)都没有任何要求。Martin Fowler曾编写过少量种种范例的DSL,无论是外部的照旧内部的,每品种型他都编写过一些不错的例子。但利用像Java如许的言语来创立DSL,他却仅仅一笔带过。 别的还要偏重提出的很紧张的一点是,在DSL和API两者间实在很难区分。在外部DSL的例子中,他们实质上简直是一样的。在遐想到DSL这个词汇的时分,j9九游会实在是在使用主编程言语在有限的范畴内创立易读的API。“外部DSL”简直是一个特定范畴内针对特定题目而创立的极具可读性的API的代名词。 任何外部DSL都受它底子言语的文法布局的限定。好比在利用Java的状况下,大括弧,小括弧和分号的利用是必需的,而且短少闭包和元编程有大概会招致DSL比利用静态言语创立来的更冗长。 但从灼烁的一壁来看,经过利用Java,j9九游会同时能使用壮大且成熟的相似于Eclipse和IntelliJ IDEA的集成开辟情况,由于这些集成开辟情况“主动完成(auto-complete)”、主动重谈判debug等特征,使得DSL的创立、利用和维护来的愈加复杂。别的,Java5中的一些新特征(好比generic、varargs 和static imports)可以协助j9九游会创立比以往任何版本任何言语都简便的API。 一样平常来说,利用Java编写的DSL不会作育一门商业用户可以上手的言语,而会是一种商业用户也会以为易读的言语,同时,从步伐员的角度,它也会是一种阅读和编写都很间接的言语。和内部DSL或由静态言语编写的DSL相比有上风,那便是编译器可以加强纠错才能并标识分歧适的利用,而Ruby或Pearl会“痛快承受”荒唐的input并在运转时失败。这可以大大增加冗长的测试,并极大地进步使用步伐的质量。但是,以如许的方法使用编译器来进步质量是一门艺术,现在,许多步伐员都在为努力满意编译器而非使用它来创立一种利用语法来加强语义的言语。 使用Java来创立DSL有利有弊。终极,你的商业需求和你所事情的情况将决议这个选择准确与否。 将Java作为外部DSL的平台 静态构建SQL是一个很好的例子,其制作了一个DSL以合适SQL范畴,取得了引人留意的上风。 传统的利用SQL的Java代码一样平常相似于: String sql = select id, name + from customers c, order o + where + c.since >= sysdate - 30 and + sum(o.total) > + significantTotal + and + c.id = o.customer_id and + nvl(c.status, DROPPED) != DROPPED; 从作者近来事情的体系中摘录的另一个表达方法是: Table c = CUSTOMER.alias(); Table o = ORDER.alias(); Clause recent = c.SINCE.laterThan(daysEarlier(30)); Clause hasSignificantOrders = o.TOTAT.sum().isAbove(significantTotal); Clause ordersMatch = c.ID.matches(o.CUSTOMER_ID); Clause activeCustomer = c.STATUS.isNotNullOr(DROPPED); String sql = CUSTOMERS.where(recent.and(hasSignificantOrders) .and(ordersMatch) .and(activeCustomer) .select(c.ID, c.NAME) .sql(); 这个DSL版本有几项好处。后者可以通明地顺应转换到利用PreparedStatement的办法——用String拼写SQL的版本则必要少量的修正才干顺应转换到利用捆绑变量的办法。假如援用不准确大概一个integer变量被通报到date column作比力的话,后者版本基本无法经过编译。代码“nvl(foo, X) != X”是Oracle SQL中的一种特别情势,这个句型关于非Oracle SQL步伐员或不熟习SQL的人来说很难读懂。比方在SQL Server方言中,该代码应该如许表达“(foo is null or foo != X)”。但经过利用更易了解、更像人类言语的“isNotNullOr(rejectedValue)”来替换这段代码的话,显然会更具阅读性,而且体系也可以遭到掩护,从而制止未来为了使用另一个数据库供给商的办法而不得不修正最后的代码完成。 利用Java创立外部DSL 创立DSL最好的办法是,起首将所需的API原型化,然后在底子言语的束缚下将它完成。DSL的完成将会扳连到接二连三[jiē èr lián sān]的测试来一定j9九游会的开辟的确对准了准确的偏向。该“原型-测试”办法正是测试驱动开辟形式(TDD-Test-Driven Development)所倡导的。 在利用Java来创立DSL的时分,j9九游会大概想经过一个连接接口(fluent interface)来创立DSL。连接接口可以对j9九游会所想要建模的范畴题目提供一个简介但易读的表现。连接接口的完成接纳办法链接(method chaining)。但有一点很紧张,办法链接自己不敷以创立DSL。一个很好的例子是Java的StringBuilder,它的办法“append”总是前往一个异样的StringBuilder的实例。这里有一个例子: StringBuilder b = new StringBuilder(); b.append(Hello. My name is ) .append(name) .append( and my age is ) .append(age); 该典范并不办理任何范畴特定题目。 除了办法链接外,静态工场办法(static factory method)和import关于创立简便易读的DSL来说是不错的助手。在上面的章节中,j9九游会将更细致地讲到这些技能。 1、办法链接(Method Chaining) 利用办法链接来创立DSL有两种方法,这两种方法都触及到链接中办法的前往值。j9九游会的选择是前往this大概前往一其中间工具,这决议于j9九游会试图要所到达的目标。 1.1、前往this 在可以以下列方法来挪用链接中办法的时分,j9九游会通常前往this: ◆可选择的。 ◆以任何序次挪用。 ◆可以挪用任何次数。 j9九游会发明运用这个办法的两个用例: 1、相干工具举动链接。 2、一个工具的复杂结构/设置装备摆设。 1.1.1、相干工具举动链接 许多次,j9九游会只在希图增加代码中不用要的文本时,才经过模仿分配“多信息”(或多办法挪用)给统一个工具而将工具的办法举行链接。上面的代码段表现的是一个用来测试Swing GUI的API。测试所证明的是,假如一个用户试图不输出她的暗码而登录到体系中的话,体系将表现一条错误提醒信息。 DialogFixture dialog = new DialogFixture(new LoginDialog()); dialog.show(); dialog.maximize(); TextComponentFixture usernameTextBox = dialog.textBox(username); usernameTextBox.clear(); usernameTextBox.enter(leia.organa); dialog.comboBox(role).select(REBEL); OptionPaneFixture errorDialog = dialog.optionPane(); errorDialog.requireError(); errorDialog.requireMessage(Enter your password); 只管代码很容易读懂,但却很冗长,必要许多键入。 上面列出的是在j9九游会典范中所利用的TextComponentFixture的两个办法: public void clear() { target.setText(); } public void enterText(String text) { robot.enterText(target, text); } j9九游会可以仅仅经过前往this来简化j9九游会的测试API,从而激活办法链接: public TextComponentFixture clear() { target.setText(); return this; } public TextComponentFixture enterText(String text) { robot.enterText(target, text); return this; } 在激活一切测试办法中的办法链接之后,j9九游会的测试代码如今缩减到: DialogFixture dialog = new DialogFixture(new LoginDialog()); dialog.show().maximize(); dialog.textBox(username).clear().enter(leia.organa); dialog.comboBox(role).select(REBEL); dialog.optionPane().requireError().requireMessage(Enter your password); 这个后果代码显然愈加简便易读。正如先前所提到的,办法链接自己并不料味着有了DSL。j9九游会必要将办理范畴特定题目的工具的一切相干举动绝对应的办法链接起来。在j9九游会的典范中,这个范畴特定题目便是Swing GUI测试。 1.1.2、工具的复杂结构/设置装备摆设 这个案例和上文的很类似,差别是,j9九游会不再只将一个工具的相干办法链接起来,取而代之的是,j9九游会会经过连接接口创立一个“builder”来构建和/或设置装备摆设工具。 上面这个例子接纳了setter来创立“dream car”: DreamCar car = new DreamCar(); car.setColor(RED); car.setFuelEfficient(true); car.setBrand(Tesla); DreamCar类的代码相称复杂: // package declaration and imports public class DreamCar { private Color color; private String brand; private boolean leatherSeats; private boolean fuelEfficient; private int passengerCount = 2; // getters and setters for each field } java 外部范畴 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200804/495.html ###事情(event),这个词儿关于初学者来说,每每总是显得有些奥秘,不易弄懂。而这些工具却每每又是编程中常用且十分紧张的工具。各人都晓得windows音讯处置机制的紧张,实在C#事情便是基于windows音讯处置机制的,只是封装的更好,退一步发者无须晓得底层的音讯处置机制,就可以开辟出壮大的基于事情的使用步伐来。 先来看看事情编程有哪些利益。 在以往j9九游会编写这类步伐中,每每接纳等候机制,为了等候某件事变的产生,必要不停地检测某些判别变量,而引入事情编程后,大大简化了这种历程: - 利用事情,可以很利便地确定步伐实行次序。 - 当事情驱动步伐等候事情时,它不占用许多资源。事情驱动步伐与历程式步伐最大的差别就在于,步伐不再不绝地反省输出设置装备摆设,而是呆着不动,等候音讯的到来,每个输出的音讯会被排进行列步队,等候步伐处置它。假如没有音讯在等候,则步伐会把控制交回给操纵体系,以运转其他步伐。 - 事情简化了编程。操纵体系只是复杂地将音讯传送给工具,由工具的事情驱动步伐确定事情的处置办法。操纵体系不用晓得步伐的外部事情机制,只是必要晓得怎样与工具举行对话,也便是怎样通报音讯。   有了这么多利益,看来j9九游会确实有须要掌握它。俗话说:“难了不会,会了不难”。就让j9九游会一步一步开端吧...   要讲事情,一定要讲到委托(delegate)。它们之间的干系可以经过一个浅近的比喻来阐明,这个比喻大概不是非常适当。好比你要租一个衡宇,这是一个事情,那么委托便是衡宇租赁中介,当你把租屋子的音讯见告中介后,中介就会发生出一套切合你要求的衡宇租赁方案来。再由中介实行这套方案,你便租得了这个衡宇,即事情被处置了。固然你也可以欠亨过中介,间接找房东,但假如没有互联网等东西,你怎样失掉谁出租衡宇的信息?话题扯远了。 委托(delegate) 委托可以了解成为函数指针,差别的是委托是面向工具,并且是范例宁静的。关于委托的了解,可以参考我的另一篇文章《C#委托之团体了解》。 事情(event)   j9九游会可以把事情编程复杂地分红两个局部:事情产生的类(书面上叫事情产生器)和事情吸收处置的类。事情产生的类便是说在这个类中触发了一个事情,但这个类并不晓得哪个个工具或办法将会加收到并处置它触发的事情。所必要的是在发送方和吸收方之间存在一个前言。这个前言在.NET Framework中便是委托(delegate)。在事情吸收处置的类中,j9九游会必要有一个处置事情的办法。好了,j9九游会就依照这个次序来完成一个捕捉键盘按键的步伐,来一步一步阐明怎样编写事情使用步伐。 1、起首创立一个本人的EventArgs类。 引自MSDN: EventArgs是包括事情数据的类的基类,此类不包括事情数据,在事情引发时不向事情处置步伐通报形态信息的事情会利用此类。假如事情处置步伐必要形态信息,则使用步伐必需今后类派生一个类来保管数据。 由于在j9九游会键盘按键事情中要包括按键信息,以是要派生一个KeyEventArgs类,来保管按键信息,好让前面晓得按了哪个键。 internal class KeyEventArgs : EventArgs { private char keyChar; public KeyEventArgs( char keyChar ) : base() { this.keyChar = keyChar; } public char KeyChar { get { return keyChar; } } } 2、再创立一个事情产生的类KeyInputMonitor,这个类用于监控键盘按键的输出并触发一个事情: internal class KeyInputMonitor { // 创立一个委托,前往范例为void,两个参数 public delegate void KeyDown( object sender, KeyEventArgs e ); // 将创立的委托和特定事情联系关系,在这里特定的事情为OnKeyDown public event KeyDown OnKeyDown; public void Run() { bool finished = false; do { Console.WriteLine( Input a char ); string response = Console.ReadLine(); char responseChar = ( response == ) ? : char.ToUpper( response[0] ); switch( responseChar ) { case X: finished = true; break; default: // 失掉按键信息的>### KeyEventArgs keyEventArgs = new KeyEventArgs( responseChar ); // 触发>### OnKeyDown( this, keyEventArgs ); break; } }while( !finished ); } } 这里留意OnKeyDown( this, KeyEventArgs );一句,这便是触发事情的语句,并将事情交由KeyDown这个委托来处置,委托指定事情处置办法行止理事情,这便是事情吸收方的类的事变了。参数this是指触发事情的工具便是自己这个工具,keyEventArgs包括了按键信息。 3、最初创立一个事情吸收方的类,这个类先发生一个委托实例,再把这个委托实例添加到发生事情工具的事情列表中去,这个历程又叫订阅事情。然后提供一个办法回显按键信息。 internal class EventReceiver { public EventReceiver( KeyInputMonitor monitor ) { // 发生一个委托实例并添加到KeyInputMonitor发生的事情列表中 monitor.OnKeyDown += new KeyInputMonitor.KeyDown( this.Echo ); } private void Echo(object sender, KeyEventArgs e) { // 真正的事情处置函数 Console.WriteLine( Capture key: {0}, e.KeyChar ); } } 4、看一下怎样挪用 public class MainEntryPoint { public static void Start() { // 实例化一个事情发送器 KeyInputMonitor monitor = new KeyInputMonitor(); // 实例化一个事情吸收器 EventReceiver eventReceiver = new EventReceiver( monitor ); // 运转 monitor.Run(); } } 总结: C#中利用事情必要的步调: 1.创立一个委托 2.将创立的委托与特定事情联系关系(.Net类库中的许多事情都是曾经定制好的,以是他们也就有响应的一个委托,在编写联系关系事情处置步伐--也便是当有事情产生时j9九游会要实行的办法的时分j9九游会必要和这个委托有相反的署名) 3.编写事情处置步伐 4.使用编写的事情处置步伐天生一个委托实例 5.把这个委托实例添加到发生事情工具的事情列表中去,这个历程又叫订阅事情 C#中事情发生和完成的流程: 1.界说A为发生事情的实例,a为A发生的一个事情 2.界说B为吸收事情的实例,b为处置事情的办法 3.A由于用户(步伐编写者或步伐利用者)大概体系发生一个a事情(比方点击一个Button,发生一个Click事情) 4.A经过事情列表中的委托工具将这个事情关照给B 5.B接到一个事情关照(实践是B.b使用委托来完成事情的吸收) 6.挪用B.b办法完成事情处置 不妥之处,接待指正。 (完) c# 事情 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/494.html   远景展望   中国软件行业协会嵌入式体系分会副理事长王凯煌介绍说,嵌入式体系是公认确当前最有开展出路的IT使用范畴之一,手机、PDA、电子字典、可视德律风、游戏机等都是典范的嵌入式体系,属于我国鼎力开展的智力麋集型财产。而据威望部分统计,我国现在嵌入式软件人才缺口每年为50万人左右。由于这一范畴较新,现在开展太快,掌握新技能的嵌入式人才显得分外稀缺,因而市场将提供十分悲观的失业时机和失业远景。   相干信息:现在天下有包罗北京市、安徽省、福建省等10个省市的很多高职高专院校开设了此专业。   失业偏向   可在信息技能、控制、主动化等范例企业中从事嵌入式软件与体系的设计、开辟,也可在国度构造、奇迹单元从事盘算机、信息网络办理等事情。   【报考提示】   必要肯定盘算机底子   由于嵌入式体系是将先辈的盘算机技能、半导体技能、电子技能和各个行业的详细使用相联合后的产品,以是对学习者的学习才能和创新才能要求比力高。有志于从事这一范畴的先生最好对IT有着浓重的兴味并具有肯定盘算机底子。 嵌入式开辟 人才 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200803/493.html 媒介 j9九游会见到过许多带有宏大功能题目的Oracle使用步伐和电子商务套件安置。j9九游会得出的结论是:这些安置都可以在功能方面获得进一步的提拔。换句话说,功能曾经很高,简直不克不及失掉再失掉改进的安置是很少见的。 有争议的题目 针对产品体系货仓而言,j9九游会的底部端对端功能调优办法总是很快发生效果,比j9九游会以为的遵照普遍的备忘列表要快。我提出以下一些题目共讨论: 大局部功能改进的大概性都是在使用步伐级上:这条结论来自Metalink上关于功能调优的一个明显的正文。这条结论和j9九游会的履历功能调优体系货仓没有统计意义上的干系。 均匀必要两天的工夫:这是书上做出的结论。但j9九游会的履历不支持这个结论。我以为得出一个Oracle使用步伐功能改进的战略最少应该必要12天。第一天晚上闭会是很罕见的事。最初两上帝要用来完成行政方面和技能级上的有关发明、成功和紧接着的保举的文档事情。可以夸大地说,假如一本性能改进不被记载上去构成文档,那么当前很难再反复相似的功能改进。假如对呈现的题目不记载上去构成文档,那么很大概它会再次产生。假如一个题目及其办理办法不被记载上去构成文档的话,对它的监测将十分难。 扩展碎片:关于联机事件处置体系,这应该不是一个题目。j9九游会听过许多有关“联机事件处置体系”对碎片严峻的表(这些表完满是键值专一的)举行事件处置不会影响功能的说法。但,j9九游会应该常常性地重组以消弭碎片,这会带来功能上的宏大改进。Oracle存储办理改进正在向将碎片带来的影响最小化大踏阵势迈进。 由于缓冲输出输入不是大题目,以是必要对磁盘输出输入举行功能调优:这里有两点必要阐明。磁盘输出输入的实践开支并不是内存缓冲输出输入的一万倍。真实的比值靠近70。即便你的CPU好像正在抵销这个价钱,而且不带来任何明显的功能题目,但这个题目显然会限定你的体系的可伸缩性。随着工夫的流逝,j9九游会越来越器重过高的内存缓冲输出输入,同时找寻功能改进的时机。 OATablespace模子和迁徙东西集:已公布的Metalink正文(10/03)宣称“这个新模子带来了及时功能改进。”这个模子的观点是将100多个Oracle使用步伐表空间兼并成一个以10计数的表空间。这会带来潜伏的存储空间节流么?大概。这会带来更高的操纵服从么?它依赖于其他工具。j9九游会还没有解说这个东西集。但j9九游会曾经了解了在白板级上的表空间兼并是怎样改进功能的。 对你的团体电脑客户端举行磁盘碎片整理:在这本书中有关这个题目的讨论许多。这大概是准确的,由于在写作本书时正盛行“胖客户端”。但如今,Oracle使用步伐客户端是一个“瘦客户端”(从Oracle废弃Jinitiator开端,j9九游会称欣赏器为瘦客户端),不要等待能从对你的团体电脑客户端硬盘驱动器举行磁盘碎片整理中失掉功能提拔。 载入模块补丁:这是Oracle技能支持关于功能题目常常给出的对策,实在在许多状况下,它并分歧适。缘故原由是打补丁常常会带来不波动性。假如关于补丁的依赖性没有赐与充实思索,你大概会发明你不得不载入整个补丁包,而你基本就没计划载入它们,后果便是对你体系的货仓波动性发生了影响。 项目办理 项目办理是很要害的。Oracle使用步伐功能实行便是技能上的也是行政上的。某团体必需出来做掌舵者,即项目办理者。必需按功效区分出差别的优先序次。假如有大概,可以依照以下方法:贸易单元先盘算他们选拔人才的工夫耽误带来的财务开支,然后乘上用户的数目及其每分钟的支出。取得使用步伐功能改进的开支之一便是要记载文档。同时,也必要记载少量的纸质文档。用户的愿望必需被办理起来,由于并不是一切的地区都市发生异样戏剧性的后果。必需有一个办理者来分别差别的优先序次,有些时分乃至必要对功能团队的拜访举行过滤。一方面,用户会频仍地提出会招致底层功能题目的主见和要求。另一方面,和用户举行交互大概会阻碍你的事情进度。乐成也会招致表露下一层功能题目的呈现。 什么是用户不克不及报告你的 针对某个用户的从底向上的办法展现了一个独自的包斲丧的输出输入资源占所有的25%左右。对另一个用户而言,一个独自的盘问大概会惹起每周4.3TB的缓冲输出输入。功能调优使得缓冲开支降至原先的0.06%。题目是它会耗尽CPU资源,同时,在那种状况下,能否对CPU举行扩大还需小心思索。没有人晓得体系货仓正在抵销这个价钱。 关于功能调优守旧最精密的一个机密在Oracle功能调优指南中被发明的。作为一个团队,j9九游会发明这个机密曾经多年了。关于beta级或产品体系的功能题目,你应该从体系的最底层货仓开端诊断。不幸的是,功能诊断常常仅仅会合在体系货仓两头的四个局部。它们是: * 逻辑数据库布局 * 数据库操纵 * 拜访途径(SQL) * 内存分派 但,j9九游会常常可以在Oracle底层的几个级别上发明很大的功能题目,如下所示: * 输出输入和物理数据库布局 * 资源竞争 * 底层操纵体系平台 藏宝图 在Oracle功能调优级上,藏宝图便是v$sqlarea视图。假如我是一个IT办理者,我将会记着这个视图的名字。而且,每当我在大厅遇见我的数据库办理员时,我都市问他们这周他们盘问这个视图的次数。 Metalink 正文 235146.1给出了对这个视图举行盘问的一些样例。比方: select sql_text, executions, buffer_gets, disk_reads, rows_processed, sorts, address, first_load_time, HASH_VALUE, module from v$sqlarea where executions > 0 order by reads_per desc 近来,越来越多的Oracle 9i版本参加了模块(MODULE)这个列,该列展现了Oracle使用步伐的模块称号。 统计包 在许多大型企业中,统计包的利用仍旧被无视。这大概是带有胁迫性的报道。不要犯试图仅仅读取输入后果,就能获取一切信息的错误,即便是第一页就足以报告你这份报道中剩下的你应该器重的10%在哪儿。Oracle 9.2版本的统计包,如今包括CPU和斲丧工夫列。曩昔,为了将永劫间运转的SQL语句排序到最顶端,j9九游会不得不开启“追踪”,毗连追踪文件,并将它们交付步伐tkprof来处置。关于那些一个复杂的“追踪”就要处置多达10GB数据的大型企业而言,这是不实际的。 让用户到场到功能调优中去 将这条发起(即,让用户到场到功能调优中去)写入书中的人应该因其发明性而失掉表彰。让你的用户也到场到功能诊断中去。购置一台Oracle使用步伐评测团体电脑,并把它给用户利用。不要利用与团体电脑相似的设置装备摆设好的条记本,由于在异样标准的状况下,条记本没有团体电脑的异样功能特征。设置装备摆设清单如下: * 750 MB CPU * 256 MB 内存 * Windows 2000 企业版(第四版) * 利用独立的逻辑磁盘 * Jinitiator-锁定版 * 尺度软件,比方Office 2003 供评测用的团体电脑不必要以下设置装备摆设: * 墙纸 * 屏幕截图 * 东西条 * 常驻步伐 将评测用团体电脑奉上用户的桌面,带着功能题目。将用户的电脑接入局域网,让用户事情一段工夫。然后,再将用户的电脑放进盘算机房间,并把它接入两头层,让用户在它下面举行更多的事情。评测用团体电脑消弭了用户方对Oracle使用步伐功能的客观性,同时也消弭了面临用户埋怨功能题目你们的客观性。 索引计数和功能 回到70年月,开辟者指南根本上说不要在一个表上创建4到5个索引。明天,开辟者指南上的正文如下: Oracle不限定在一个表上创建索引的个数。只管云云,你必要思索索引所带来的功能改进,以及你的数据库使用步伐的实践必要,从而决议必要对哪些列创建索引。 现实是:每个Oracle使用步伐表大概包括30多个索引。假如j9九游会参加一个索引能将常常必要的SQL语句的输出输入增加,j9九游会会不思索高索引计数的题目而参加这个索引。 CPU 减小并发办理池的宽度,至今j9九游会还没发明这会壅闭义务的举行。j9九游会常常会看到的情形是:减小并发办理池的宽度实践上增长了批处置义务的吞吐量,它也使CPU不那么繁忙。有很多包括对等历程的义务必需被完成。假如一个义务的池宽渡过窄,所需的义务大概永久也得不四处理,从而壅闭全体义务。 j9九游会和Oracle使用步伐安置小组、培训者打过交道,他们喜好增长并发办理池的宽度,而漠视对CPU的影响,这种设置不停坚持到产品公布时仍旧存在。在训练和测试情况中,宁静题目的大门是开着的,而且安置者增长并发办理池的宽度以希冀他们的批处置义务可以尽早完成。他们如许做大概基本没有思索到对CPU的影响,CPU大概会因而而被完全占用。 CPU运转行列步队不该该比你的CPU计数的两倍还深。假如CPU在一天中被常常性完全占用,就必需保持某些设置。寻觅这个必要被保持的设置的第一地位就应该是并发办理池。 结论: Oracle一样平常维护和功能调优,不是单纯的技能,指定迷信严谨的办理维护方案更紧张,肯定要将调优,维护历程中的一切为困难记载,构成文档,在知识履历上失掉积聚,不至于异样的错误犯两次; 记载运转日记,什么时分体系功能差,速率慢;然后剖析找出缘故原由,指定办理的措施; 调优分两局部: 一.使用层,包罗逻辑数据库布局,数据库操纵,拜访途径(SQL),内存分派等.优化的办法有,剖析大表,修正要害表布局,剖析使用层的sql语句,优化,使之到达最优实行;设置装备摆设参数,适当地分派内存;活期剖析,重修索引,挪动表,消弭碎片; 二.体系层,包罗输出输入和物理数据库布局,资源竞争,底层操纵体系平台等;依据体系使用的范围,选择适当的文件体系,如许可以到达增加io操纵的次数;操纵体系是支持大范围的吞吐量,window是微内河,linux/unix是宏内核,形成了在体系内历程间通讯的速率和操纵功能的差别等. 依据需求->指定运维方案->剖析运转日记->更该运转方案->剖析运转日记....如许一个重复的历程 oracle 优化 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200803/492.html JAVA里提供的日期和工夫类,java.sql.Date和java.sql.Time,只会从数据库里读取某局部值,这偶然会招致丧失数据。比方一个包括2002/05/22 5:00:57 PM的字段,读取日期时失掉的是2002/05/22,而读取工夫时失掉的是5:00:57 PM.你必要理解数据库里存储工夫的精度。有些数据库,好比MySQL,精度为毫秒,但是另一些数据库,包罗Oracle,存储SQL DATE范例数据时,毫秒局部的数据是不保管的。以下操纵中容易呈现不易被发明的BUG: 取得一个JAVA里的日期工具。 从数据库里读取日期 试图比力两个日期工具能否相称。假如毫秒局部丧失,原本以为相称的两个日期工具用Equals办法大概前往false。 java.sql.Timestamp类比java.util.Date类准确度要高。这个类包括了一个getTime()办法,但它不会前往分外精度局部的数据,因而必需利用getNanos()办法。有毫微秒局部(即分外精度局部)的数值大概比没有这个局部的数值的大一个毫秒。假如你晓得你利用的数据库保管了毫秒局部,可以用上面的代码取得的数值: long time=timestamp.getTime()+timestamp.getNanos()/1000000; 毫微秒的局部便是为什么一个java.sql.Timestamp工具不即是一个java.util.Date工具,而一个java.util.Date工具大概即是一个java.sql.Timestamp工具的缘故原由。这使得equals办法该当坚持的对称被冲破了。 利用java.sql包中的工夫相干的类是紧张的,但它们也大概招致人为的错误。 这是由于,这些类的庞大性固然曾经在javadoc内里明白的形貌了,但由于这些类看上去很复杂而很少有人看这些文档。 data time java 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/491.html ###许多做编程冤家都喜欢念书的。但为什么要念书?读什么书?读几多书?怎样念书?这都成了很大的题目。我想就这些题目谈谈我本人的见解。留意,本文读者最好是那些工夫未几,盼望经过读一些好书能有大劳绩的冤家。假如那种只需是技能书都要去读读的冤家,你的精神和工夫真实太多了,本文应该不合适你。 起首,在中国,步伐员只能靠念书来进步本人的编程或设计才能,这自己实在是很无耐的,由于国际软件编程偏向的教诲曾经远远落伍于编程业的开展了。名师百里挑一[bǎi lǐ tiāo yī],可以听到名师的课的人十分少。运气好,进了大学大概公司,有个妙手师兄大概大牛同事带一带,发展会快些。不然,要想进步,除了念书,还真是没有另外措施。由于自己已经做过数学教员,我很明白,数学学习假如只是给你几本参考书,然后就能高考得高分,那是不行能的(你假如破例,只能说你是天赋,没有广泛意义)。念书永久没有好教师的好讲授来得无效(留意必要夸大“好”字)。由于教师和先生之间是有互动的,是在一个交换的氛围中学习,而不是念书的那种完全双方向的信息通报。如今有了网络视频录像,状况失掉了很大改进。不外视频异样存在只能报告你工具,而不克不及最疾速的办理你遇到的疑问的单向信息通报题目。好比你看了一个视频学习怎样用VS2008写一个HelloWorld步伐,但是你一直找不到视频里提到的“办理方案资源办理器”(缘故原由是之前你或他人偶然将它封闭了),大概你费了很鼎力,终于明确在东西栏上有按钮大概菜单中可以翻开它,但你的挫败感就很激烈了,这关于初学者来说,是很不爽的。假如有个教师,大概阁下有个同砚,这种题目几秒钟就能办理。再好比你看了战略形式的讲授书或视频,但是为什么肯定要用战略形式呢?我不行以用复杂工场吗?不行以用装饰形式吗?你的题目一个接一个,书中没有回答,回答只能依托本人去想。假如你对峙去想,你会有“悟”通的一天,但更大的大概是,算了,设计形式也太难了,当前再研讨吧。因而我以为多念书固然好,不外编程才能经过念书显然不是独一,更不是最好的措施。不外就现在的国际近况来讲,念书大概是在你没有教师的条件下最好的进步途径,尤其是初学者,体系看一些好书,学习一项技能是很有须要的,只靠实践的做项目来进步极有大概会开展不片面(培训学校我不保举,由于骗钱居多,好教员太难找)。 然后是读什么书的题目。如今许多过去的冤家都保举了一些好书,这些好书大多是颠末工夫验证,确实是难过的佳构,看看一些网上书店的排名和批评就大约晓得好书是哪些。不外题目又来了,是不是这些书都合适我阅读呢。回答不是,并不是只需是好书就合适读者阅读的。从技能书的分类来看,复杂的分就有步伐设计、软件工程、数据库、网络、图形图像等等;从技能难度上分,就有入门读物、进阶读物、初级读物等;从写作情势上分,有课本类、论文类、休闲类等;从价位上,有10-30、30-60、60-90、90-抢钱没探讨价等;从书的厚度或阅读工夫来讲,有三天读完、两周读完、两月读完、半年读完、阅读三遍、终生阅读平分类;固然最紧张的分类,应该是渣滓书、一样平常书、可念书、佳构书、必念书等。换句话说,仅仅是报告你,编程书好书有哪些是远远不敷的,每每会让读者基本没措施去区别这个好书是不是合适本人,是不是应该要如今阅读,能否有须要所有读完。固然,商家是不会做这么过细的分类的,没有什么商家会报告你,本书是渣滓书,本书不合适低手阅读,本书太厚没工夫不要读,本书很贵买前要小心、本书只要三章可以一读等等。但作为读者,假如你没有这种多角度分类的思索去找书的话,你大概会迷失在书的陆地中,无以自拔。打个比喻,只管这个比喻我曾经打过许多次,GoF的《设计形式》的确实确是好书,但真的不是每个编程者必要去阅读的,至多不是一开端去阅读的,假如你黑白面向工具步伐员(好比嵌入式开辟),你是干系数据库开辟者(好比存储历程开辟者),你是UI设计者(偏设计但触及步伐的那种),乃至你是面向工具编程初学者,我都发起你不要读它,真的没什么须要,只要等你真的曾经到达肯定的开辟量了,真的有须要进步本人的编程和设计才能的时分再去阅读它。总结,肯定要读颠末工夫查验的好书,看在这些好书中,必要分分类,必要多多思索本人是不是真的合适以后阅读。 接着,便是读几多书的题目了。好书许多,不是一本,不是十本,而是几十本上百本。有些书是全本都好,有些书是局部章节优,有些书有很强的时效性(好比如今去阅读一些asp.net 1.0入门经典方面的书大概就没有与时俱进了)。是不是有须要把相反范例好书都读了呢?我看没什么须要。好比你要学习asp.net,你真有须要把这方面的好书都阅读一遍吗?读一本足矣。终究这里愈加必要的是实习而不是阅读了。而要读的这一本书就应该是精读,乃至重复读。实在。因而另外行业大概很必要参考书,我看编程行业根本不必要参考书,Google百度便是最好的参考。头脑层面的,好比设计、剖析、项目办理等偏向的,大概要多读一些。但书真实是贵在精而不是多,照旧以设计形式为例,入门读《Head First设计形式》,进阶再去读GoF的《设计形式》就充足了。固然,像《Java与形式》、《设计形式剖析》都是好书,你有精神可以多读,没精神,那就不读也罢。 随着,也是比力要害的,便是怎样读的题目,原本这个题目不该该我来多说的,念书吗,重新读到尾就行了,但实在这里学问还真是不少的,技能书照旧很有区别于一样平常的小评话的。假如你只是复杂的了解为念书便是花点工夫,重新读到尾的话,你从这本书失掉的劳绩是很小的。起首,技能书,并纷歧建都是必要重新读起的。这要看是什么书,分外是使用级的书,每每是你以后最必要理解的技能,你必要多花工夫去研讨相干的章节。好的书通常都市在媒介就报告你,应该怎样去读这本书。我记得《矫捷j9九游会:准绳、形式与理论》书中媒介就写得很明白什么样的读者应该愈加存眷什么样的章节,分外他提到假如你以为无聊就看看书后的两个故事,哈,我还真是在一次没事做时,去仔细的阅读了那两个项目开辟比拟的故事,觉得十分好。技能的学习不是看完书就完全了解的,更不是看完就能立刻使用自若的,一项技艺要颠末晓得、了解、掌握、使用等等历程。我激烈发起读者冤家在精读一本书时,肯定要手拿着笔,最好阁下再有一本条记本(纸)和一台条记本(电)(哈,PC固然也没题目)。看到好的句子要摘录到条记本上(别懒,这实在不是让你当前去看你抄的工具,而是让你在抄的时分,加快你阅读的速率和节拍,而把大脑牢牢的会合在这个知识点上),有句话说,在一团体用笔写工具的时分,他是不行能分神去想另外事变的。这关于影象和了解黑白常有协助的,简言之,不动翰墨不念书(十分惋惜,如今我曾经很少看到喜好记念书条记的冤家了,有些人大概一年除了署名都写不了几个字,这真实是一大悲痛)。那么阁下那台条记本或PC要来干吗呢?不是让你来玩游戏的,更不是让你和MM聊QQ的,而是用来写代码的,代码只是看看是没用的,肯定要本人打一遍,最好的结果是看懂了后,依据本人了解的来编,结果差一些的是照着书中的抄一遍,但无论哪种都比你基本不写只是看要强。我见过不少冤家买了书,大概连随书的光盘封套都没拆过,又大概光盘中的代码只是复杂的运转一下。没有仔细的仿照打一遍,这都是欠好的学习办法。有些人以为书读完了,应该就差未几都掌握了,实在未必。不知你有没有过看一部影戏,过段工夫再看第二遍发明许多很故意思工具原来基本没在意。分外是英笔墨幕的电影,看第一遍乃至基本就不懂,看第二遍就得心应手[dé xīn yīng shǒu]这种状况不是许多吗。念书也是一样的,好书相对有须要多读,常读。不然了解大概照旧会很单方面。 最初,还得提一提两个细节题目。 关于电子版和纸版书的阅读题目。有些冤家喜好珍藏电子版的好书,一珍藏便是几十上百本,惋惜真正看完的大概是零头。书是用来看的,这些放在硬盘里不看的图书,不如删除改换为几部AV短片(终究后者看的大概性要大得多)。但为什么这些好书,却不克不及好好阅读呢?这也不克不及全怪读者,而是电子幅员书天生有其不敷之处。第一,它不利便携带,它肯定要在电脑眼前才干阅读(特指有图有代码的编程技能电子书),不像纸质书那样可以在地铁公交乃至茅厕里阅读;第二、永劫间伤眼睛,书差别于短的文章,在电脑眼前永劫间阅读很容易委顿,分外是要学习技能的书,看纸质书会更惬意一些;第三、不利便讲明,只管有的软件可以办理这题目,不外怎样利用不如纸质书来得利便;第四、有些电子书不明晰,有大概间接是把原书扫描而得,这显然无法和纸质书相比,阅读心情会发生很大影响。以是,只要在能完全克制这些难的人才可以经过阅读电子书来学习。不外如今老外的有些英文原版电子书制造得十分良好,在美元跌落却仍然购置不起纸质书的条件下,阅读好的电子书也是不错的选择。 关于图书馆借书照旧本人买书看的题目。有句鄙谚叫“书非借不克不及读也”。说的是由于本人的书,会有一种横竖曾经拥有,有空再读的想法,形成反而很永劫间都不去阅读。而借的书由于有还期,以是放松读的时机还更大一些。加之图书馆借书可以省许多买书的钱,以是去图书馆借书也是不错的选择。不外图书馆的书很难跟得上期间,许多都太老了,有些旧书图书馆固然引进了,但由于抢手也很难借失掉,分外好书,根本都要试试看[shì shì kàn]才行,加之有些书一个月外加一个月续借的工夫很难读完。以是借图书馆的书是好措施,但有些书借不到时,照旧要思索购置。但自觉的购置图书显然不是好措施。说到买书,无妨几个同事相约买书,如许可以平摊的购书的本钱,别的网络购书优惠不少,也是不错的选择。 总之,在国际的大情况下,念书照旧编程事情者提拔技能才能的最好措施。那么下面所谈到的题目,也就显得十分的须要。盼望本文可以给你的技能书阅读有所协助,我的见解也大概有失偏颇,各人一同讨论。但不论你能否赞同,留句话,那只管我花这么几个小时打字的休息也甚感欣喜了。 技能 图书 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200803/490.html Sun近来修补了Java中的一些宁静题目。这些毛病触及到Windows,Linux以及Solaris等平台。 这次 修补的毛病 数目为11。打击者可以使用这些毛病来盗取办事器上的敏感信息,并且能绕过宁静步伐,最初控制整台办事器。 看来Java的Write-Once-Run-Anywhere方案也有毛病,只需一出题目,简直一切平台都市被涉及。 以往一些十分巩固的体系,也会被打击者从Java这条捷径寂静侵入。Sun应该增强本身Java的宁静性,以让更多对宁静要求较高的用户能承受Java。 java 补丁 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200803/489.html   起首,Façade形式的作用是什么?简化接口。好比j9九游会买电脑,当电脑店伙计把机子组装好后交给j9九游会,j9九游会拿回家把表现器键盘等的插头都插到机箱前面,然后用电脑时只需按一下主机箱上的电源,电脑就启动了,j9九游会无需体贴机箱外部各个部件是怎样启动,是CPU先过电照旧硬盘先过电。在这里,这个机箱就可以以为是一个Façade,这个Façade(机箱)就使启动电脑变得很容易,就算是一个完全不懂电脑的人,也晓得怎样启动电脑了。这便是Façade最大作用地点:简化接口,使得客户步伐(人)更利便地利用子体系(电脑)。试想,假如没无机箱,那j9九游会想启动电脑岂不是得去记先启动CPU照旧先启动硬盘?要怎样启动它们?同时,Façade也让体系耦合度更低,由于你不必要间接跟CPU、硬盘等间接打仗了。 接上去就用代码示例一下: 上面是几个电脑配件类,它们都有一个Run()办法和一个Stop()办法,辨别表现它们的启动和>###/CPU internal class CPU { public void Run() { Console.WriteLine(Cpu is running...); } public void Stop() { Console.WriteLine(Cpu stopped.); } } //主板 internal class MainBoard { public void Run() { Console.WriteLine(MainBoard is running...); } public void Stop() { Console.WriteLine(MainBoard stopped.); } } //硬盘 internal class HardDisk { public void Run() { Console.WriteLine(HardDisk is running...); } public void Stop() { Console.WriteLine(HardDisk stopped.); } } //内存 internal class Memory { public void Run() { Console.WriteLine(Memory is running...); } public void Stop() { Console.WriteLine(Memory stopped.); } } //电源 internal class Power { public void Run() { Console.WriteLine(Power is running...); } public void Stop() { Console.WriteLine(Power stopped); } } 然后是个主机类(Facade): /// <summary> /// 电脑主机(Façade(表面)类) /// </summary> public class HostComputerFacade { private CPU cpu; private MainBoard mainBoard; private HardDisk hardDisk; private Memory memory; private Power power; //结构办法,初始化各个配件 public HostComputerFacade() { cpu = new CPU(); mainBoard = new MainBoard(); hardDisk = new HardDisk(); memory = new Memory(); power = new Power(); } //启动电脑,我不晓得各配件的启动次序怎样,j9九游会无妨假定它们就按如下次序>###public void TurnOn() { power.Run(); mainBoard.Run(); cpu.Run(); memory.Run(); hardDisk.Run(); } //封闭>###public void ShutDown() { hardDisk.Stop(); memory.Stop(); cpu.Stop(); mainBoard.Stop(); power.Stop(); } }   然后j9九游会就可以在Main()办法中利用“电脑”了: public static void Main(string[] args) { HostComputerFacade hcf = new HostComputerFacade(); hcf.TurnOn(); //…这里做一些利用电脑的操纵 hcf.ShutDown(); } Look,客户步伐要是想“利用电脑”的话,只需实例化主机,然后按下电源开关(TurnOn()),相箱内各部件就主动按次序启动了,再长按电源开关几秒钟(ShutDown()),机箱内各部件就按次序中止了,而假如没有这个HostComputerFacade类的话,j9九游会就要亲身入手让Power启动、再让MainBoard启动,然后再让CPU启动…,关的时分也要先让HardDisk中止,再让Memory中止…,那岂不太贫苦了,对吧? 总 结: Facade形式的作用就在于简化接口,同时更松耦合,而各个子体系之间一样平常是联系比力紧的,就像机箱内的各配件,在某种意义上说,它们之间的联系是挺紧的。 Facade Pattern 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200803/488.html ### 起首,复杂的剖析一下需求,剖析历程疏忽,次要的需求和要办理的题目大约有以下几个方面: 1.RSS源提供的RSS表现款式和表现内容一致性的题目 2.Ajax支持以及Ajax支持下的跨域拜访的题目 3.RSS源xml文件的编码题目 4.前端表现方法和留给用户操纵的易用性题目 5.要记着用户本性化的RSS定制方案 关于题目1,各大RSS 内容提供很好的遵照了所谓的业界标准,如新浪NBA的RSS布局大抵如下: Code <rss version=2.0> <channel> <title> <![CDATA[篮球-NBA新闻]]> </title> <image> <title> <![CDATA[体育-篮球]]> </title> <link>http://sports.sina.com.cn/basketball</link> <url>[InstallDir_ChannelDir]{$UploadDir}/200803/20080323130522110.gif</url> </image> <description> <![CDATA[篮球-NBA新闻]]> </description> <link>http://sports.sina.com.cn/basketball/index.shtml</link> <language>zh-cn</language> <generator>WWW.SINA.COM.CN</generator> <ttl>5</ttl> <copyright> <![CDATA[Copyright 1996 - 2007 SINA Inc. All Rights Reserved]]> </copyright> <pubDate>Mon, 24 Dec 2007 06:41:43 GMT</pubDate> <category> <![CDATA[]]> </category> <item> <title> <![CDATA[苏群每周评:绿衫军雄霸天下 火箭雄鹿如磨难兄弟]]> </title> <link>http://sports.sina.com.cn/k/2007-12-24/14353379491.shtml</link> <author>WWW.SINA.COM.CN</author> <guid>http://sports.sina.com.cn/k/2007-12-24/14353379491.shtml</guid> <category> <![CDATA[篮球-NBA新闻]]> </category> <pubDate>Mon, 24 Dec 2007 06:35:16 GMT</pubDate> <comments></comments> <description> <![CDATA[  以下为新浪体育特约专栏作者苏群排挤的0708赛季NBA第八周(12月18日-12月24日)各队气力排行榜:   1. 凯尔特人 22-3 2 -1 1 -   主场输给活塞队,但周末最初一战对把戏时又以103比91取胜,仍旧是东部主场战绩最强步队。现在凯尔特人坚持同盟防卫第一,近来12场竞赛中,.]]> </description> </item> <item> 布局同上一个item,此处省略 </item> </channel> </rss> 可以看出,起首是一些关于RSS内容本身的形貌性信息,如言语、链接地点、版权信息等等,然后是多少个以<item></item>并列的真正的内容地区,内容一样平常包罗题目、择要、公布工夫、所属分类、批评等等信息,如许的目次布局在业界遵照RDF(即资源形貌)的标准,因而,其他RSS内容提供商所提供的RSS也是这种尺度布局的,这使得j9九游会可以担心的订阅任何切合标准的网站RSS内容。但也不是万事大吉了,可以看到,提供的内容太多,而j9九游会想表现给用户的无非便是一个新闻题目,一个日期和一个择要,分外是一些内容提供网站如搜狐,常常在其择要中参加图片,假如j9九游会原封不动的让其表现出来,有大概会影响到一致性和雅观,想到这里,j9九游会接上去要做的事变就很明白了,便是有选择的在本人的RSS订阅表现地区只表现最紧张和最感兴味的内容,而不是所有内容。这就引出了别的一项必要掌握的技能:xslt,它是专门用来转换承载了RSS内容的xml文档的,有一系列本人语法和特点,这里不细讲,可以参考: http://www.baidu.com ,它提供了一套较为片面的教程。在我这里,终极必要的xslt文件内容如下: Code <?xml version=1.0 encoding=utf-8?> <xsl:stylesheet xmlns:xsl= http://www.w3.org/1999/XSL/Transform version=1.0> <xsl:output method=html/> <xsl:template match=/> <xsl:for-each select=/rss/channel/item [position() <= 5]> <div class=item> <a href={./link} style=font-size:14px; margin-right:10px; color:#42835B; target=_blank> <xsl:value-of select=./title/> </a> <span style=font-size:11px; color:red;> <xsl:value-of select=substring(./pubDate,6,20)/> </span> <div class=content id=content style=line-height:22px; margin:4px 0px 4px 0px; text-indent:24px;> <xsl:value-of select=./description disable-output-escaping=yes/> <xsl:if test=system-property(xsl:vendor)=Transformiix> <script type=text/javascript> var element = document.getElementById(content); element.innerHTML = el.textContent; </script> </xsl:if> </div> </div> </xsl:for-each> </xsl:template> </xsl:stylesheet> 以上的xslt划定了从源RSS内里选取前5条内容的题目,公布工夫和择要信息,并依照j9九游会本人划定的款式予以表现 另有一个题目是,j9九游会如今固然控制了要选取和实际的项,但项的内容j9九游会还没有举行处置,而恰好此中的图片和一些js剧本是j9九游会不想要的,以是务必过滤一下,一方面增加网络字节传输,另一方面切合了j9九游会想要的内容。过滤次要用到了正则表达式,可以在办事端(C#.net)和客户端(javascript)中举行,如在背景过滤js剧本,可以如许来举行: string regexstr = @<script.*</script>; str = Regex.Replace(str, regexstr, string.Empty, RegexOptions.IgnoreCase); 固然别忘了援用 System.Text.RegularExpressions 定名空间在javascript中过滤图片信息可以如许来举行: var reg =/<img.*?>/ig; str=str.replace(reg,); 在客户端举行的价钱是那些代表图片的html代码字节曾经传送到了客户端,会稍稍影响下载速率吧,但终究<img />标签不像js那样大概会大段大段的,以是这个影响是可以疏忽的。 至此,第一个题目的各个方面都有了一个比力好的办理接上去j9九游会来看第二个题目,ajax支持和ajax超过的题目,如今主流欣赏器都支持ajax,要利用ajax支持,无非是写一些结构ajax历程的js代码,固然也可以用成熟的js框架,如jquery,重点是第二个题目,为了包管宁静性,ajax是不容许超过的(这个题目百度一下,一堆一堆的),j9九游会要做的让它可以“跨域”,固然,这里的跨域是打上了引号的,作为援用,这里将接纳的不外是一种曲线方案,而让用户发觉不到。 我选取的方案是使用.net壮大而美满的功效来先借助办事器下载各个差别域上的RSS内容文件,剖析处置后发送至哀求的客户端,在这里j9九游会次要用到了.net的HttpWebRequest和HttpWebResponse类,它们位于System.Net定名空间下,使用它们可以哀求RSS内容提供商URL上的RSS文件,固然,获取该文件后j9九游会要做一系列的处置,这些处置包罗将前往的数据流款式转化成字符串款式,使用后面讲到的xslt来获取j9九游会想要的RSS选项,过滤此中的js代码,最初推送到客户端等等,中心代码如下: Code XmlDocument doc = new XmlDocument(); string reqUrl = Request.Params[url].ToString();//哀求的RSS>###HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(reqUrl); HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); Stream receiveStream = myHttpWebResponse.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding(utf-8); StreamReader readStream = new StreamReader(receiveStream,encode); Char[] read = new Char[256]; int count = readStream.Read(read, 0, 256); String str = String.Empty; while (count > 0) { str += new String(read, 0, count); count = readStream.Read(read, 0, 256); } myHttpWebResponse.Close(); readStream.Close(); string regexstr = @<script.*</script>; str = Regex.Replace(str, regexstr, string.Empty, RegexOptions.IgnoreCase); str = str.Replace(  , string.Empty); doc.LoadXml(str); XslCompiledTransform transformer = new XslCompiledTransform(); transformer.Load(Server.MapPath(xml.xslt)); System.Text.StringBuilder SB = new System.Text.StringBuilder(); transformer.Transform(doc, null, new System.IO.StringWriter(SB)); Response.Write(SB.ToString()); Response.Flush(); 这里次要用到了System.IO、System.Text、System.Xml、System.Xml.Xsl、System.Net和System.Text.RegularExpressions定名空间 至此,跨域哀求RSS的题目和在办事器端对RSS举行处置的事情曾经完成,在客户真个ajax哀求获取从背景发送已往的RSS内容之后,只需在客户端依照料想的款式举行剖析和DOM封装,便可以准确的表现RSS内容了。 题目三:RSS源xml文件的编码题目,一样平常说来尺度的RSS文件编码都是utf-8的,表现不会有题目,但一般站点提供的大概是utf-8范例的编码,这类RSS文件容易表现成乱码,关于这个题目,我现在还没有找到比力优雅的措施,在这里先征集一下方案吧,呵呵 题目4.前端表现方法和留给用户操纵的易用性题目 前端表现方面,在这里选取了时下比力盛行的tab方法,占有页面空间小,切换利便,后面说过可以思索jquery那样的框架,确实,jquery是一个很好的框架,除了有许多可以简化 开辟的功效外,它的第三方插件也黑白常丰厚的,这里就间接选用了一个基于jquery的tab插件,固然,都是一些基于jquery的js代码,你完全可以依据本人的必要对其举行改良,以合适特定的需求。该插件的挪用方法如下:先援用jquery.js,然后是tab插件相干的ui.tabs.css、ui.tabs.js,在页面里添加如下html代码 <div id=RssContainer style= float:left; width:100%> <ul> </ul> </div> 初始化时如许挪用: $(#RssContainer ul).tabs({ fxSlide: true, fxFade: true, fxSpeed: normal,event: mouseover }); 大抵意思因此正常速率和鼠标颠末事情处置tab的切换,还别的加上了滑动和消隐结果 接上去是用户操纵的题目,也便是要提供一种方法来让用户订阅和办理本人的RSS,在这里用户可以从保举的列表中选择RSS,也可以本人手动添加互联网上的恣意RSS地点,而关于 曾经订阅的RSS,也可以实行复杂的办理,如取消订阅等。办理地区的html代码如下: Code <div id=manageRssArea class=floatWindow> <div style=float: right; clear: both; height: 25px; width: 100%; background: url(images/floatDivbg.gif) no-repeat;> <div id=manageRssShow> 办理RSS</div> <div id=addRssShow class=tabStyle> 添加RSS</div> </div> <div id=addRssArea style=clear: both;> <p style=margin: 5px 0px 0px 0px;> <input id=fromChoosed name=addWay type=radio checked=checked /><span class=rssFont>从保举中选择</span>  <input id=addByHand name=addWay type=radio /><span class=rssFont>手动添加</span></p> <div class=floatDivLine> </div> <p id=exsitRssList> <input name=exsitRss type=checkbox value=Fun-文娱~~http://rss.yule.sohu.com/rss/yuletoutiao.xml />搜狐-文娱<input name=exsitRss value=star-星座~~http://astro.women.sohu.com/rss/xingzuoxinwen.xml type=checkbox />搜狐-星座</p> <div id=rssItem style=display: none; margin-top: 20px;> <p> <span>称号:</span><input class=textBoxStyle style=width: 100px; id=rssName type=text /></p> <p> <span>地点:</span><input class=textBoxStyle style=width: 250px; id=rssUrl type=text /></p> </div> <p> <input id=subBookRss class=btnStyle rssFont type=button value=提交 />   <input class=btnStyle rssFont onclick=$(#manageRssArea).css(display,none); type=button value=封闭 /></p> </div> <div id=manageRss style=display: none; clear: both;> <p style=clear: both;> 曾经订阅的RSS列表,去失勾选可以取消订阅</p> <ul> </ul> <p style=clear: both;> <input id=modifyBook class=btnStyle rssFont type=button value=提交 />   <input class=btnStyle rssFont onclick=$(#manageRssArea).css(display,none) type=button value=封闭 /></p> </div> </div> 相干的js代码在论述完第五个题目后一同给出 题目五:要记着用户本性化的RSS定制方案,记着有两重寄义,在办事端数据库里为每个用户记载其定制方案,大概在客户真个cookie里记载,前者斲丧办事器资源,并且必要用户登录才晓得用户是谁,后者嘛,也有题目,客户端禁用缓存大概删除cookie时会生效,至于cookie无效期的题目,j9九游会可以设置为永不外期。固然客户真个方案另有一个题目便是一个客户端准绳上只要一个用户的记载,除非你装了多个差别内核的欣赏器。在这里,我选择了客户真个方案,为此要引入cookie.js 写到这里发明代码真实有些多,论坛又不像cnblogs有专门处置代码的功效,因而就不全贴出来了,最初完备的例子在附件中给出。 http://www.k8w.net/technology/UploadFiles_4116/200803/20080323130522110.gif rss web2.0 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200803/487.html 前段工夫接到一个项目,该项目要求在局域网内的任何一台盘算机上安置一套计费软件,其他的客户端不必安置任何软件,只需客户拔出网线就可以计费。曩昔打仗到的计费软件都是安置在网打开的,要么便是要安置客户端软件,怎样完成如许的功效呢?研讨了一下,发明用arp诈骗的原理可以完成计费的功效,原理是在未守旧上彀功效的客户端拔出网线后,先克制局域网内的该盘算机上彀,等该客户端要求办理员守旧上彀功效后再排除对该客户真个制止并开端计费。arp诈骗信赖各人的都不生疏,网上有很多多少介绍arp诈骗的文章,也有很多多少arp诈骗的病毒,在这里就不再反复arp诈骗的原理了。 怎样制止局域网指定的客户端上彀呢? 用伪造的arp的哀求包革新要制止呆板的arp表,使之以为网关的mac地点为一个不存在的mac地点,如许的话就可以制止该呆板上彀了。 假定要制止的盘算机是A,安置计费软件的盘算机是B,网关是C A呆板 MAC:AA-AA-AA-AA-AA-AA IP>### B呆板 MAC:BB-BB-BB-BB-BB-BB IP>### C网关 MAC:CC-CC-CC-CC-CC-CC IP>### 在网上有很多多少arp例子都是c的,我用delphi和Winpcap完成代码如下: 安置Winpcap,援用:winsock,Packet32,shellapi单位 范例和常量界说: type TMacAddr = array [0..5] of byte ; TEHHDR=packed record Ether_Dest: TMacAddr ; {目标地点 } Ether_Src: TMacAddr ; {源地点 } Ether_Type:Word; {范例 } end; PEHHDR=^TEHHDR; TEtherData=packed record {Ethernet packet data} Ether_hrd:WORD; {hardware address } Ether_pro:WORD; {format of protocol address } Ether_hln: byte; {byte length of each hardware address } Ether_pln: byte; {byte length of each protocol address} Ether_op:WORD; { ARP or RARP } Ether_sha:TMacAddr; {hardware address of sender} Ether_spa:LongWord; {protocol address of sender} Ether_tha:TMacAddr; {hardware address of target} Ether_tpa:LongWord; {protocol address of target} end; PARPHDR=^TEtherData; TARPPACKET=packed record EHHDR:Tehhdr; EtherData:TEtherData; end ; PARPPACKET=^TARPPACKET; const INADDR_NONE = $FFFFFFFF; EPT_IP = $0800; EPT_ARP = $0806 ; EPT_RARP =$8035 ; ARP_REPLY =$0002 ; ARP_REQUEST = $0001 ; ARP_HARDWARE =$0001 ; function inet_addr(const cp: PChar): DWord; stdcall; external WS2_32.DLL name inet_addr; //他人的代码 function HexStrtoInt(var Buf: string): dword; //将十六进制的字符串转成整型 //判别能否是十六进制数 function IsHexChar(Chr: char): boolean; begin Result := (Chr in [0..9]) or (Chr in [A..F]); end; //将一个十六进制字符转换成数 function HexChrtoInt(Chr: char): byte; begin Result := 0; case Chr of 0..9 : Result := Strtoint(Chr); A : Result := 10; B : Result := 11; C : Result := 12; D : Result := 13; E : Result := 14; F : Result := 15; end; end; var BufLength: dword; TempBuf: string; Count0: dword; begin Result := 0; BufLength := Length(Buf); TempBuf := ; if BufLength > 0 then begin Buf := Uppercase(Buf); // for Count0 := 1 to BufLength if BufLength mod 2 = 1 then begin Buf := 0 + Buf; BufLength := Length(Buf); end; for Count0 := 1 to BufLength div 2 do if IsHexChar(Buf[Count0 * 2 - 1]) then begin if IsHexChar(Buf[Count0 * 2]) then begin TempBuf := TempBuf + inttostr(HexChrtoInt(Buf[Count0 * 2 - 1]) * 16 + HexChrtoInt(Buf[Count0 * 2])); end else begin Result := Count0 * 2; Break; end; end else begin Result := Count0 * 2 - 1; Break; end; if Result = 0 then Buf := TempBuf; end; end; //MAC转换 procedure GetMac(s : string;var Mac : TMacAddr); var hs : string; p : integer; i,j:integer; begin FillChar (Mac, SizeOf (Mac), 0) ; i:=0; if Length(s)=0 then Exit; p:=Pos(-,s); while P<>0 do begin hs:=Copy(s,1,p-1); HexStrtoInt(hs); Mac[i]:= strtoint(hs) ; Delete(s,1,p); p:=Pos(-,s); i:=i+1; end; if Length(s)>0 then begin HexStrtoInt(s); Mac[i]:=strtoint(s); end; end; {克制上彀,发送arp哀求包,这里的C_mac为伪造的C的mac地点} procedure SendArp(A_ip:string;A_mac:string;B_ip:string;B_mac:string;C_IP:string;C_mac:string); var ulMACAddr: TMacAddr; EHHDR:TEHHDR; EtherData:TEtherData; pp:pPacket; lpAdapter:Padapter; BUF:Array [0..512] of char ; begin //以太网包首部 GetMac(A_mac,ulMACAddr); Move(ulMACAddr , EHHDR.Ether_Dest,6);//目标地点-A盘算机的地点 GetMac(C_mac,ulMACAddr); Move(ulMACAddr , EHHDR.Ether_Src,6);//伪造的源地点-C盘算机的地点 EHHDR.Ether_Type := htons(EPT_ARP);//arp>###结构以太网包数据 EtherData.Ether_hrd := htons(ARP_HARDWARE); EtherData.Ether_pro := htons(EPT_IP); EtherData.Ether_hln := 6; EtherData.Ether_pln := 4; EtherData.Ether_op := htons(ARP_REQUEST);//arp哀求包 GetMac(C_mac,ulMACAddr); Move(ulMACAddr , EtherData.Ether_sha,6); EtherData.Ether_spa := inet_addr(Pchar(B_IP)); GetMac(B_mac,ulMACAddr); Move(ulMACAddr , EtherData.Ether_tha,6); EtherData.Ether_tpa := inet_addr(Pchar(B_ip)); lpAdapter := PacketOpenAdapter(\Device\NPF_{E00872C1-37C0-47CE-8472-313A5A23F896}); // 依据 你网卡名字翻开网卡,这是我网卡的设置装备摆设名 fillchar(BUF,sizeof(BUF),0); CopyMemory(@BUF,@EHHDR,SIZEOF(EHHDR)); CopyMemory(Pointer(LongWord(@BUF)+SIZEOF(EHHDR)),@EtherData,SIZEOF(EtherData)); // 分派内存 pp := PacketAllocatePacket(); //初始化布局指针 PacketInitPacket(pp, @BUF,512); //发arp应对包 PacketSendPacket(lpAdapter, pp, true); // 开释内存 PacketFreePacket(pp); PacketCloseAdapter(lpAdapter); end; //挪用示例 SendArp(192.168.1.1,AA-AA-AA-AA-AA-AA,192.168.1.2,BB-BB-BB-BB-BB-BB,192.168.1.253,00-00-00-00-00-00); {排除制止,发送arp应对包,这里的C_mac为真实的C的mac地点} procedure SendArpReply(A_ip:string;A_mac:string;C_ip:string;C_mac:string;B_mac:string); var ulMACAddr: TMacAddr; EHHDR:TEHHDR; EtherData:TEtherData; pp:pPacket; lpAdapter:Padapter; BUF:Array [0..512] of char ; begin GetMac(A_mac,ulMACAddr); Move(ulMACAddr , EHHDR.Ether_Dest,6); GetMac(B_mac,ulMACAddr); Move(ulMACAddr , EHHDR.Ether_Src,6); EHHDR.Ether_Type := htons(EPT_ARP); EtherData.Ether_hrd := htons(ARP_HARDWARE); EtherData.Ether_pro := htons(EPT_IP); EtherData.Ether_hln := 6; EtherData.Ether_pln := 4; EtherData.Ether_op := htons(ARP_REPLY);//arp应对包 GetMac(C_mac,ulMACAddr); Move(ulMACAddr , EtherData.Ether_sha,6); EtherData.Ether_spa := inet_addr(Pchar(C_ip)); GetMac(A_mac,ulMACAddr); Move(ulMACAddr , EtherData.Ether_tha,6); EtherData.Ether_tpa := inet_addr(Pchar(A_ip)); // 依据本人网卡的设置装备摆设名翻开网卡 lpAdapter := PacketOpenAdapter(\Device\NPF_{E00872C1-37C0-47CE-8472-313A5A23F896}); fillchar(BUF,sizeof(BUF),0); CopyMemory(@BUF,@EHHDR,SIZEOF(EHHDR)); CopyMemory(Pointer(LongWord(@BUF)+SIZEOF(EHHDR)),@EtherData,SIZEOF(EtherData)); // 分派内存 pp := PacketAllocatePacket(); //初始化布局指针 PacketInitPacket(pp, @BUF,512); //发arp应对包 PacketSendPacket(lpAdapter, pp, true); // 开释内存 PacketFreePacket(pp); PacketCloseAdapter(lpAdapter); end; //挪用示例 SendArpReply(192.168.1.1,AA-AA-AA-AA-AA-AA,192.168.1.253,CC-CC-CC-CC-CC-CC,BB-BB-BB-BB-BB-BB); 必要留意的是,收回伪造的arp哀求包过一段工夫后会被革新为准确的,以是每隔一段工夫要向被制止的呆板发送一个arp包,如许才干到达制止上彀的目标。 本文泉源于 新疆二域j9九游会网 http://www.k8w.net 转载请注明来由 delphi arp诈骗 arp cheat 计费 xjzcg 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/486.html 苹果周二宣布,它的3.1版Safari欣赏器曾经投放市场,运转Mac 和 Windows操纵体系盘算机用户可以下载利用。  苹果表现,3.1版Safari欣赏器支持很多新的网络尺度,此中包罗HTML 5(超文本标志言语)中最新的音频和视频标签,以及CSS(层叠款式单)动画。  苹果宣称与微软的IE7欣赏器相比,它的3.1版Safari欣赏器的网页存入工夫快1.9倍,比Mozilla的火狐欣赏器2.0快1.7倍;在Java形貌言语运转情况中,与其他欣赏器相比,新版Safari欣赏器的速率快简直六倍。   苹果称,新版欣赏器是Safari 3.0的改良版本,公司将向利用者提供收费下载。客岁六月Windows 用户初次开端利用Safari 3.0欣赏器。   苹果指出,为了更好的运转Safari 3.1软件,Mac用户必要安置Mac OS X美洲豹或Mac OS X 10.4.11 版山君操纵体系,微软Windows用户必要安置Windows XP 或 Windows Vista操纵体系。 苹果 Safari 未知 zcbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200803/485.html 笔者偶然在网上乱转的时分,发明了几个跟开源协议相干的商定阐明,以是就细心查明晰一些材料和各人分享,上面只列决了团体以为Java步伐员必需理解的七大开源协议: Mozilla Public License MPL License,容许收费重公布、收费修正,但要求修正后的代码版权归软件的提倡者。这种受权维护了贸易软件的长处,,它要求基于这种软件得修正无偿奉献版权给该软件。如许,围绕该软件得一切代码得版权都会合在提倡开辟人得手中。但MPL是容许修正,无偿利用得。MPL软件对链接没有要求。 BSD开源协议 BSD开源协议是一个给于利用者很大自在的协议。可以自在的利用,修正源代码,也可以将修正后的代码作为开源大概专有软件再公布。 当你公布利用了BSD协议的代码,或则以BSD协议代码为底子做二次开辟本人的产品时,必要满意三个条件: 1. 假如再公布的产品中包括源代码,则在源代码中必需带有原来代码中的BSD协议。 2. 假如再公布的只是二进制类库/软件,则必要在类库/软件的文档和版权声明中包括原来代码中的BSD协议。 3. 不行以用开源代码的作者/机构名字和原来产品的名字做市场推行。 BSD代码勉励代码共享,但必要恭敬代码作者的著作权。BSD由于容许利用者修正和重新公布代码,也容许利用或在BSD代码上开辟贸易软件公布和贩卖,因而是对贸易集成很友爱的协议。而许多的公司企业在选用开源产品的时分都首选BSD协议,由于可以完全控制这些第三方的代码,在须要的时分可以修正大概二次开辟。 Apache Licence 2.0 Apache Licence是闻名的非红利开源构造Apache接纳的协议。该协媾和BSD相似,异样勉励代码共享和恭敬原作者的著作权,异样容许代码修正,再公布(作为开源或贸易软件)。必要满意的条件: 1. 必要给代码的用户一份Apache Licence 2. 假如你修正了代码,必要再被修正的文件中阐明。 3. 在延伸的代码中(修正和有源代码衍生的代码中)必要带有原来代码中的协议,牌号,专利声明和其他原来作者划定必要包括的阐明。 4. 假如再公布的产品中包括一个Notice文件,则在Notice文件中必要带有Apache Licence。你可以在Notice中增长本人的允许,但不行以体现为对Apache Licence组成变动。 Apache Licence也是对贸易使用友爱的允许。利用者也可以在必要的时分修正代码来满意必要并作为开源或贸易产品公布/贩卖。 GPL GPL允许证是自在软件的使用最普遍的软件允许证,人们可以修正程式的一个或几个正本或程式的任何局部,以此构成基於这些程式的衍生作品。必需在修正过的档案中附有分明的阐明:您修正了此一档案及任何修正的日期。 您必需让您公布或出书的作品,包罗本程式的所有或一局部,或内含本程式的所有或局部所衍生的作品,容许第三方在此允许证条款下利用,而且不得由于此项受权举动而免费。 LGPL Linux便是接纳了GPL。GPL协媾和BSD, Apache Licence等勉励代码重用的允许很纷歧样。GPL的初始点[chū shǐ diǎn]是代码的开源/无偿使用[wú cháng shǐ yòng]和援用/修正/衍生代码的开源/无偿使用[wú cháng shǐ yòng],但不容许修正后和衍生的代码做为闭源的贸易软件公布和贩卖。这也便是为什么j9九游会能用收费的种种linux,包罗贸易公司的linux和linux上林林总总[lín lín zǒng zǒng]的由团体,构造,以及贸易软件公司开辟的收费软件了。 GPL协议的次要内容是只需在一个软件中利用(“利用”指类库援用,修正后的代码大概衍生代码)GPL协议的产品,则该软件产品必需也接纳GPL协议,既必需也是开源和收费。这便是所谓的”感染性”。GPL协议的产品作为一个独自的产品利用没有任何题目,还可以享用收费的上风。 由于GPL严厉要求利用了GPL类库的软件产品必需利用GPL协议,关于利用GPL协议的开源代码,贸易软件大概对代码有失密要求的部分就不合适集成/接纳作为类库和二次开辟的底子。 别的细节如再公布的时分必要陪同GPL协议等和BSD/Apache等相似 Public Domain 大众域受权。将软件受权为大众域,这些软件包没有受权协议,任何人都可以随意利用它。 Artistic允许 使作者坚持对进一步开辟的控制。 java 开源 题目太多 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200803/484.html 各人都晓得,在WF中默许状况下,其运动因此树状布局构成的,复杂说便是复合运动包括其子运动,假如子运动也是复合运动也可以包括其子运动,但统一个运动不克不及成为两个运动的子运动。这种方法被少量利用在WF自带的运动库中,好比:循环,条件运动等等。 这种方法的缺陷有以下几点: 1、传统的流程布局方法都是线性的,这种树状的大概会使流程设计职员恶感; 2、假如树的条理太多,会使流程难以了解。 由此,是不是可以既反面WF内涵树状布局抵触,又能在情势上以线性的方法表达流程布局呢? 我的想法是: 1、构建流程工具,把它作为根运动(复合运动),其他元素都以其子运动存在; 2、构建流(线)工具,它不是运动(Acticity)的子类,它指明白源运动和目标运动,同时也保管在流程工具中; 3、WF从根运动开端实行,这里便是流程工具,由它依据线的流向决议下一个实行的运动,但它不卖力诸如循环,条件如许的布局; 4、构建循环,条件等运动(非复合)并由其依据线的流向决议下一个实行的运动。 这种方法也不是完善的,其缺陷如下: 1、必要本人来构建循环、条件等流程布局,根本不克不及复用WF所提供的; 2、当触及取消、赔偿、非常处置时,不但必要本人来处置其跳转流程,并且还必要构建办理分支运动的举动(思索分支比力庞大的状况)。 固然,这两种方法都是可行的构建方案,详细选择还要看各自使用场景的差别以及项目自己的预算等条件的差别。 PS:这里讨论的不触及形态机的方法。 WF 流程 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/483.html it办事质量有题目,请看上面的报道: 北京3月13日电 国度工商行政办理局明天发布的2007年度消耗者申说状况剖析表现,2007年消耗者申说触及的题目绝对会合,此中质量题目仍然突出。别的,互联网、邮政、汽车、家政、餐饮类申说增加较快,成为消耗申说的新热门。   据介绍,天下工商行政办理构造客岁依托12315网络共受理征询、申说和告发等诉求总计5165631件,此中,征询4156270件、申说764309件、告发245052件,共处置消耗者申说746887件,办结率为97.72%,为消耗者挽回经济丧失7.38亿元。   统计数据表现,2007年商品消耗申说的比重占70.60%,高于办事消耗申说的比重。排在商品消耗申说前五位的是:家用电器类、日用百货类、餐饮类、家用东西类、建材类。排在办事消耗申说前五位是:电佩服务、住民办事、修缮维护办事、餐饮办事、大众办法办事。   同时可以看出,2007年消耗者申说触及的题目绝对会合,质量题目仍然突出。消耗者申说的题目次要会合在五个方面:质量题目、售后办事不到位、代价敲诈、计量不实、告白虚伪,此中,一半以上的申说是针对商品格量和办事质量题目,因而这两类题目也是以后一段时期消耗者权柄掩护事情的重中之重。   与上年相比,2007年申说量增加幅度较大的商品或办事是:互联网类申说、邮政类申说、家政类申说、汽车类申说和餐饮类申说。 it 办事 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200803/482.html ###java功能优化的一些看法,各人看一下 Java使得庞大使用的开辟变得绝对复杂。毫无疑问,它的这种易用性对Java的大范畴盛行功不行没。但是,这种易用性实践上是一把双刃剑。一个设计精良的Java步伐,功能体现每每不如一个异样设计精良的C++步伐。在Java步伐中,功能题目的大局部缘故原由并不在于Java言语,而是在于步伐自己。养成好的代码编写习气十分紧张,好比准确地、奇妙地运用java.lang.String类和java.util.Vector类,它可以明显地进步步伐的功能。上面j9九游会就来详细地剖析一下这方面的题目。 在java中,利用最频仍、同时也是滥用最多的一个类大概便是java.lang.String,它也是招致代码功能低下最次要的缘故原由之一。请思索上面这个例子: String s1 = Testing String; String s2 = Concatenation Performance; String s3 = s1 + + s2; 简直一切的Java步伐员都晓得下面的代码服从不高。那么,j9九游会应该怎样办呢?大概可以尝尝上面这种代码: StringBuffer s = new StringBuffer(); s.append(Testing String); s.append( ); s.append(Concatenation Performance); String s3 = s.toString(); 这些代码会比第一个代码片断服从更高吗?回答能否定的。这里的代码实践上正是编译器编译第一个代码片断之后的后果。既然与利用多个独立的String工具相比,StringBuffer并没有使代码有任何服从上的进步,那为什么有那么多的Java册本品评第一种办法、保举利用第二种办法? 第二个代码片断用到了StringBuffer类(编译器在第一个片断中也将利用StringBuffer类),j9九游会来剖析一下StringBuffer类的默许结构函数,上面是它的代码: public StringBuffer() { this(16); } 默许结构函数预设了16个字符的缓存容量。如今j9九游会再来看看StringBuffer类的append()办法: public synchronized StringBuffer append(String str) { if (str == null) { str = String.valueOf(str); } int len = str.length(); int newcount = count + len; if (newcount > value.length) expandCapacity(newcount); str.getChars(0, len, value, count); count = newcount; return this; } append()办法起首盘算字符串追加完成后的总长度,假如这个总长度大于StringBuffer的存储才能,append()办法挪用公有的expandCapacity()办法。expandCapacity()办法在每次被挪用时使StringBuffer存储才能更加,并把现有的字符数组内容复制到新的存储空间。 在第二个代码片断中(以及在第一个代码片断的编译后果中),由于字符串追加操纵的最初后果是“Testing String Concatenation Performance”,它有40个字符,StringBuffer的存储才能必需扩展两次,从而招致了两次价钱昂贵的复制操纵。因而,j9九游会至多有一点可以做得比编译器更好,这便是分派一个初始存储容量大于大概即是40个字符的StringBuffer,如下所示: StringBuffer s = new StringBuffer(45); s.append(Testing String); s.append( ); s.append(Concatenation Performance); String s3 = s.toString(); 再思索上面这个例子: String s = ; int sum = 0; for(int I=1; I<10; I++) { sum += I; s = s + + +I ; } s = s + = + sum; 剖析一下为何后面的代码比上面的代码服从低: StringBuffer sb = new StringBuffer(); int sum = 0; for(int I=1; I<10; I++){ sum + = I; sb.append(I).append(+); } String s = sb.append(=).append(sum).toString(); 缘故原由就在于每个s = s + + + I操纵都要创立并撤除一个StringBuffer工具以及一个String工具。这完满是一种糜费,而在第二个例子中j9九游会制止了这种状况。 j9九游会再来看看别的一个常用的Java类??java.util.Vector。复杂地说,一个Vector便是一个java.lang.Object实例的数组。Vector与数组类似,它的元素可以经过整数情势的索引拜访。但,Vector范例的工具在创立之后,工具的巨细可以依据元素的增长大概删除而扩展、减少。请思索上面这个向Vector参加元素的例子: Object obj = new Object(); Vector v = new Vector(100000); for(int I=0; I<100000; I++) { v.add(0,obj); } 除非有相对富足的来由要求每次都把新元素拔出到Vector的后面,不然下面的代码对功能倒霉。在默许结构函数中,Vector的初始存储才能是10个元素,假如新元素参加时存储才能不敷,则当前存储才能每次更加。Vector类就象StringBuffer类一样,每次扩展存储才能时,一切现有的元素都要复制到新的存储空间之中。上面的代码片断要比后面的例子快几个数目级: Object obj = new Object(); Vector v = new Vector(100000); for(int I=0; I<100000; I++) { v.add(obj); } 异样的规矩也实用于Vector类的remove()办法。由于Vector中各个元素之间不克不及含有“清闲”,删除除最初一个元素之外的恣意其他元素都招致被删除元素之后的元素向前挪动。也便是说,从Vector删除最初一个元素要比删除第一个元素“开支”低好几倍。 假定要很久以前面的Vector删除一切元素,j9九游会可以利用这种代码: for(int I=0; I<100000; I++){ v.remove(0); } 但,与上面的代码相比,后面的代码要慢几个数目级: for(int I=0; I<100000; I++){ v.remove(v.size()-1); } 从Vector范例的工具v删除一切元素的最好办法是: v.removeAllElements(); 假定Vector范例的工具v包括字符串“Hello”。思索上面的代码,它要从这个Vector中删除“Hello”字符串: String s = Hello; int i = v.indexOf(s); if(I != -1) v.remove(s); 这些代码看起来没什么错误,但它异样对功能倒霉。在这段代码中,indexOf()办法对v举行次序搜刮寻觅字符串“Hello”,remove(s)办法也要举行异样的次序搜刮。改良之后的版本是: String s = Hello; int i = v.indexOf(s); if(I != -1) v.remove(i); 这个版本中j9九游会间接在remove()办法中给出待删除元素的准确索引地位,从而制止了第二次搜刮。一个更好的版本是: String s = Hello; v.remove(s); 最初,j9九游会再来看一个有关Vector类的代码片断: for(int I=0; I 假如v包括100,000个元素,这个代码片断将挪用v.size()办法100,000次。固然size办法是一个复杂的办法,但它依旧必要一次办法挪用的开支,至多JVM必要为它设置装备摆设以及扫除货仓情况。在这里,for循环外部的代码不会以任何方法修正Vector范例工具v的巨细,因而下面的代码最好改写成上面这种情势: int size = v.size(); for(int I=0; I 固然这是一个复杂的窜改,但它依旧博得了功能。终究,每一个CPU周期都是名贵的。 拙劣的代码编写方法招致代码功能降落。但,正如本文例子所表现的,j9九游会只需接纳一些复杂的步伐就可以明显地改进代码功能。 java 功能 优化 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200803/481.html 在5.0中,collection最大的一个改动便是可以指定它的详细范例: List< String> list=new List< String>; 两个最根本的接口: public interface Collection< E> { boolean add(E element); Iterator< E> iterator(); . . . } public interface Iterator< E> { E next(); boolean hasNext(); void remove(); } 在5.0曩昔,常用的情势便是: Collection< String> c = . . .; Iterator< String> iter = c.iterator(); while (iter.hasNext()) { String element = iter.next(); do something with element } 但在5.0中参加别的一种循环方法,相似于for each: for (String element : c) { do something with element } 这种方法对任何完成了Iterable接口的类都实用。 在利用remove的时分分外要留意的一点是,在挪用remove之前必需先挪用一次next办法,由于next就像是在挪动一个指针,remove删失的便是指针方才跳已往的工具。即便是你想一连删失两个相邻的工具,也必需在每次删除之前挪用next。 对collection排序和查找 Collections类的sort办法可以对任何完成了List接口的类举行排序。在排序历程中,他默许这些类完成了Comparable接口,假如想用其他办法排序,可以在挪用sort办法的时分提供一个Comparator工具: Comparator< Item> itemComparator = new Comparator< Item>() { public int compare(Item a, Item b) { return a.partNumber - b.partNumber; } }); 反向排序: Collections.sort(items, itemComparator); Collections.sort(items, Collections.reverseOrder(itemComparator)); 查找一个工具: i = Collections.binarySearch(c, element); i = Collections.binarySearch(c, element, comparator); 但这些list必需是曾经排好序了。并且要留意的是这个算法必要随机拜访collection,假如不支持随机拜访那么这个算法的服从大概会很低。 几种常用Collection: ArrayList An indexed sequence that grows and shrinks dynamically 可以随机拜访,但假如要从两头删除一个工具会影响服从,由于有些未删除的工具要响应的调解地位。非线程宁静,但服从会比Vector要高,假如在单线程下,选它而不是Vector。 LinkedList An ordered sequence that allows efficient insertions and removal at any location 只能按次序拜访,添加删除很利便。固然提供了get(n)办法,但实践上照旧次序拜访的,假如发明在LinkedList内里利用了这个办法,要思索这个List范例能否选的符合 HashSet An unordered collection that rejects duplicates 以hashcode为索引,实用于不晓得所存工具地位而想寻觅某个工具的状况。不行反复 TreeSet A sorted set 与HashSet相似,但所存工具是排了序的 LinkedHashSet A set that remembers the order in which elements were inserted PriorityQueue A collection that allows efficient removal of the smallest element 参加Queue的时分会接纳一个优先级,从queue中取出的时分先取出优先级最低的 HashMap A data structure that stores key/value associations 存储key/value对,非线程宁静,与HashTable相比服从要高些 treeMap A map in which the keys are sorted 排序的HashMap LinkedHashMap A map that remembers the order in which entries were added jdk hamlet8266 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200803/480.html 一、概述   信息技能的飞速开展,使软件产品使用到社会的各个范畴,软件产品的质量天然成为人们配合存眷的核心。不管软件的消费者照旧软件的利用者,均生活在竞争的情况中,j9九游会商为了占据市场,必需把产品格量作为企业的紧张目的之一,以免在剧烈的竞争中被镌汰出局。用户为了包管本人商业的顺遂完成,固然盼望选用优质的软件。质量欠安的软件产品不但会使开辟商的维护用度和用户的利用本钱大幅增长,还大概发生其他的责任危害,形成公司信誉降落,继而打击股票市场。在一些要害使用 (如民航订票体系、银行结算体系、证券买卖体系、主动航行控制软件、军事进攻和核电站宁静控制体系等) 中利用质量有题目的软件,还大概形成劫难性的结果。   软件危急已经是软件界乃至整个盘算机界最抢手的话题。为理解决这场危急,软件从业职员、专家和学者做出了少量的高兴。如今人们曾经渐渐了解到所谓的软件危急实践上仅是一种情况,那便是软件中有错误,正是这些错误招致了j9九游会在本钱、进度和质量上的失控。有错是软件的属性,并且是无法改动的,由于软件是由人来完成的,一切由人做的事情都不会是白璧无瑕[bái bì wú xiá]的。题目在于j9九游会怎样去制止错误的发生和消弭曾经发生的错误,使步伐中的错误密度到达尽大概低的水平。   给软件带来错误的缘故原由许多,详细地说,次要有如下几点:   ①、交换不敷、交换上有曲解大概基本不举行交换   在使用应该做什么或不该该做什么的细节(使用的需求)不明晰的状况下举行开辟。   ②、软件庞大性   图形用户界面(gui),客户/办事器布局,散布式使用,数据通讯,超大型干系型数据库以及巨大的体系范围,使得软件及体系的庞大性呈指数增加,没有古代j9九游会履历的人很难了解它。   ③、步伐设计错误   向一切的人一样,步伐员也会堕落。   ④、需求变革   需求变革的影响是多方面的,客户大概不理解需求变革带来的影响,也大概晓得但又不得不那么做。需求变革的结果大概是形成体系的重新设计,设计职员的日程的重新布置,曾经完成的事情大概要重做大概完全丢弃,对其他项目发生影响,硬件需求大概要因而改动,等等。假如有很多小的改动大概一次大的变革,项目各局部之间已知或未知的依赖性大概会互相影响而招致更多题目的呈现,需求改动带来的庞大性大概招致错误,还大概影响工程到场者的正性。   ⑤、工夫压力   软件项目标日程表很难做到正确,许多时分必要估计和推测。当终极限期逼近和要害时候到来之际,错误也就随着来了。   ⑥、自傲人更喜好说:没题目,这事变很容易,几个小时我就能拿出来   太多不实在际的‘没题目’,后果只能是引入错误。   ⑦、代码文档缺少   缺少大概低劣的文档使得代码维护和修正变的非常艰苦,其后果是带来很多错误。现实上,在很多机构并不勉励其步伐员为代码编写文档,也不勉励步伐员将代码写得明晰和容易了解,相反他们以为少写文档可以更快的举行编码,无法了解的代码更易于事情的失密(“写得困难肯定读的痛楚”)。   ⑧、j9九游会东西   可视化东西,类库,编译器,剧本东西,等等,它们每每会将本身的错误带到使用软件中。就象j9九游会所晓得的,没有精良的工程化作为底子,利用面向工具的技能只会使项目变得更庞大。   为了更好地办理这些题目,软件界做出了林林总总[lín lín zǒng zǒng]的高兴。   人们已经以为更好的步伐言语可以使j9九游会开脱这些困扰,这推进了步伐设计言语的开展,更多的言语开端盛行,为了使步伐更易于了解开辟了却构化步伐设计言语,如pl/1,pascal等;为理解决及时多义务需求开辟了却构化多义务步伐设计言语,如modula,ada等;为了进步重用性开辟了面向工具的步伐设计言语,如simlasa等;为了制止发生不准确的需求了解,开辟情势化形貌言语,如hal/s等,这使得创建基于天然言语的形貌成为大概,人们以情势化言语来形貌需求;为了支持大型数据库使用,开辟了可视化东西,如visual studio、power builder等。步伐言语对进步软件消费服从起到了肯定的正作用,但它对整个软件质量尤其是牢靠性的影响,与其他要素相比作用较小。   大概是由于步伐言语基于严厉的语法和语义规矩,人们希图用情势化证明办法来证明步伐的准确性。将步伐看成数学工具来对待,从数学意义上证明步伐是准确的是大概的。数学家对情势化证明办法最有兴味,在论文上谈起来十分吸引人,但实践代价却十分有限,由于情势化证明办法只要在代码写出来之后才干利用,这显然太迟了,并且关于大的步伐证明起来十分难。   遭到其他行业项目工程化的启示,软件工程学呈现了,j9九游会被视为一项工程,以工程化的办法来举行计划和办理软件的开辟。   针对需求不确定的使用,可以利用渐进和迭代类的开辟模子。还可以接纳疾速使用步伐开辟(rad)和协同使用步伐开辟(jad)技能,由j9九游会者和用户代表配合到场开辟软件标准。rad和jad的根本思绪是开辟者和用户配合设计体系中的屏幕,开辟者敏捷地把完成这些屏幕的最根本功效编写好,然后把它们交给用户看,然后用户和开辟者回忆这些屏幕以确认它们到达了用户的要求,这个周期不停继续到体系的根本局部界说终了。一旦设计被用户承受,开辟者将完成完全完成屏幕必要的代码。rad和传统j9九游会项目之间的一个根本区别是:使用步伐rad体系是按阶段公布的。传统项目一样平常一次公布,也叫“big bang”。rad办法利用高效开辟东西,开辟者可以十分敏捷地设计出体系的根本屏幕,容许用户在开辟周期中很早就能见地到体系未来看起来怎样样,制止了在传统开辟项目中长篇大论而且单调难明的阐明。   ibm的dr.harlan mills提出了净室历程。净室历程组合了情势化步伐验证和统计历程控制(spc)。在这种办法中,起首用准确性数学证明防备缺陷产生,然后用mtbf器量软件质量。净室历程是一种相称新的j9九游会办法,它要求j9九游会在办理方法和技能办法上作严重改动,分外是要求spc使用到软件的知识,这影响了其被普遍的承受。   硬件本钱继续低落,可支持case东西运转的新的壮大的事情站和网络曾经成为软件工程利用的事情平台,case东西可完成一些特定的j9九游会历程。这些东西提供应软件设计者以图形方法形貌软件设计的才能,如许就易于维护、易于交织反省、易于了解。很多人(尤其是case东西供货商)信赖case东西饰演理解决软件危急和挽救软件产业的脚色,但现实上j9九游会看到的情况倒是很多公司花了少量的款项买回的case东西但很少利用,缘故原由在于这些东西实行的历程与机构的软件设计历程不相实用。   在可以借助很多新的技能和东西举行j9九游会的明天,j9九游会历程的成熟性题目开端惹起人们的器重。这种产品分歧性题目的次要症结在于办理,因而人们将目的转向了办理的改进,一些以改良j9九游会历程为目的的运动曾经展示出正的后果。   以下是一些比力典范的文本。   sei sw-cmm   iso spice(software process improvement and capability determination)   bootstrap   iso-9000-3   tickit   trillium   现实上,关于软件来讲,还没有象银弹那样的工具。不管接纳什么技能和什么办法,软件中仍旧会有错。接纳新的言语、先辈的开辟方法、美满的开辟历程,可以增加错误的引入,但不行能完全根绝软件中的错误,这些引入的错误必要测试来找出,软件中的错误密度也必要测试来举行估量。   测试是一切工程学科的根本构成单位,是j9九游会的紧张局部。自有步伐设计的那天起测试就不停陪同着。统计标明,在典范的j9九游会项目中,软件测试事情量每每占j9九游会总事情量的40%以上。而在j9九游会的总本钱中,用在测试上的开支要占30%到50%。假如把维护阶段也思索在内,讨论整个软件生活期时,测试的本钱比例大概会有所低落,但实践上维护事情相称于二次开辟,以致屡次开辟,此中肯定还包括有很多测试事情。因而,测试关于软件消费来说是必须的,题目是j9九游会应该思索“接纳什么办法、怎样布置测试?”   二、软件测试的目标   软件测试的目标决议了怎样去构造测试。假如测试的目标是为了尽大概多地找堕落误,那么测试就应该间接针对软件比力庞大的局部或因此前堕落比力多的地位。假如测试目标是为了给终极用户提供具有肯定可信度的质量评价,那么测试就应该间接针对在实践使用中会常常用到的贸易假定。   差别的机构会有差别的测试目标;相反的机构也大概有差别测试目标,大概是测试差别地区或是对统一地区的差别条理的测试。   在谈到软件测试时,很多人都援用grenford j. myers在《the art of software testing》一书中的看法:   ①、软件测试是为了发明错误而实行步伐的历程;   ②、测试是为了证明步伐有错,而不是证明步伐无错误。   ③、一个好的测试用例是在于它能发明至今未发明的错误;   ④、一个乐成的测试是发明了至今未发明的错误的测试。   这种看法可以提示人们测试要以查找错误为中心,而不是为了演示软件的准确功效。但仅凭字面意思了解这一看法大概会发生误导,以为发明错误是软件测试的独一目,查找不堕落误的测试便是没有代价的,现实并非云云。   起首,测试并不但仅是为了要找堕落误。经过剖析错误发生的缘故原由和错误的散布特性,可以协助项目办理者发明以后所接纳的软件历程的缺陷,以便改良。同时,这种剖析也能协助j9九游会设计出有针对性地检测办法,改进测试的无效性。   其次,没有发明错误的测试也是有代价的,完备的测试是评定测试质量的一种办法。细致而严谨的牢靠性增加模子可以证明这一点。比方 bev littlewood发明一个颠末测试而正常运转了n小时的体系有持续正常运转n小时的概率。   三、软件测试的根本办法   软件测试的办法和技能是多种多样的。   关于软件测试技能,可以从差别的角度加以分类:   从能否必要实行被测软件的角度,可分为静态测试和静态测试。   从测试能否针对体系的外部布局和详细完成算法的角度来看,可分为白盒测试和黑盒测试;   1、黑盒测试   黑盒测试也称功效测试或数据驱动测试,它是在已知产品所应具有的功效,经过测试来检测每个功效能否都能正常利用,在测试时,把步伐看作一个不克不及翻开的黑盆子,在完全不思索步伐外部布局和外部特征的状况下,测试者在步伐接口举行测试,它只反省步伐功效能否依照需求规格阐明书的划定正常利用,步伐能否能得当地吸收输出数锯而发生准确的输入信息,而且坚持内部信息(如数据库或文件)的完备性。黑盒测试办法次要有等价类分别、边值剖析、因?果图、错误揣测等,次要用于软件确认测试。   “黑盒”法着眼于步伐内部布局、不思索外部逻辑布局、针对软件界面和软件功效举行测试。“黑盒”法是穷举输出测试,只要把一切大概的输出都作为测试状况利用,才干以这种办法查出步伐中一切的错误。实践上测试状况有无量多个,人们不但要测试一切正当的输出,并且还要对那些分歧法但大概的输出举行测试。   2、白盒测试   白盒测试也称布局测试或逻辑驱动测试,它是晓得产品外部事情历程,可经过测试来检测产品外部举措能否依照规格阐明书的划定正常举行,依照步伐外部的布局测试步伐,查验步伐中的每条通路能否都有能按预定要求准确事情,而掉臂它的功效,白盒测试的次要办法有逻辑驱动、基路测试等,次要用于软件验证。   “白盒”法片面理解步伐外部逻辑布局、对一切逻辑途径举行测试。“白盒”法是穷举途径测试。在利用这一方案时,测试者必需反省步伐的外部布局,从反省步伐的逻辑动手,得出测试数据。贯串步伐的独立途径数是地理数字。但即便每条途径都测试了仍旧大概有错误。第一,穷举途径测试决不克不及查出步伐违背了设计标准,即步伐自己是个错误的步伐。第二,穷举途径测试不行能查出步伐中因脱漏途径而堕落。第三,穷举途径测试大概发明不了一些与数据相干的错误。   3.alac(act-like-a-customer)测试   alac测试是一种基于客户利用产品的知识开辟出来的测试办法。alac测试是基于庞大的软件产品有很多错误的准绳。最大的受害者是用户,缺陷查找和矫正将针对哪些客户最容易遇到的错误。   四、软件测试的庞大性与经济性   人们每每以为,开辟一个步伐是难的,测试一个步伐则比力容易。这实在是曲解。设计测试用例是一项过细并必要高度本领的事情,稍有失慎就会左支右绌[zuǒ zhī yòu chù],产生不该有的疏漏。   不管是黑盒测试办法照旧白盒测试办法,由于测试状况数目宏大,都不行能举行彻底的测试。所谓彻底测试,便是让被测步伐在统统大概的输出状况下所有实行一遍。通常也称这种测试为“穷举测试”。 “黑盒”法是穷举输出测试,只要把一切大概的输出都作为测试状况利用,才干以这种办法查出步伐中一切的错误。实践上测试状况有无量多个,人们不但要测试一切正当的输出,并且还要对那些分歧法但大概的输出举行测试。 “白盒”法是穷举途径测试,贯串步伐的独立途径数是地理数字,但即便每条途径都测试了仍旧大概有错误。第一,穷举途径测试决不克不及查出步伐违背了设计标准,即步伐自己是个错误的步伐。第二,穷举途径测试不行能查出步伐中因脱漏途径而堕落。第三,穷举途径测试大概发明不了一些与数据相干的错误。e.w.dijkstra的一句名言对测试的不彻底性作了很好的表明:“步伐测试只能证明错误的存在,但不克不及证明错误不存在”。   在实践测试中,穷举测试事情量太大,理论下行欠亨,这就注定了统统实践测试都是不彻底的。固然就不克不及够包管被测试步伐中不存在遗留的错误。软件工程的总目的是充实使用有限的人力和物力资源,高服从、高质量地完成测试。为了低落测试本钱,选择测试用例时应留意恪守“经济性”的准绳。第一,要依据步伐的紧张性和一旦产生妨碍将形成的丧失来确定它的测试品级;第二,要仔细研讨测试战略,以便能利用尽大概少的测试用例,发明尽大概多的步伐错误。掌握好测试量是至关紧张的,一位有履历的j9九游会办理职员在谈到软件测试时曾如许说过:“不充实的测试是愚笨的,而过分的测试是一种罪孽”。测试不敷意味着让用户承当隐蔽错误带来的伤害,过分测试则会糜费很多名贵的资源。   测试是软件生活期中用度斲丧最大的关键。测试用度除了测试的间接斲丧外,还包罗别的的相干用度。可以决议必要做几多次测试的次要影响要素如下:   ①、体系的目标   体系的目标的差异在很大水平上影响所必要举行的测试的数目。那些大概发生严峻结果的体系必需要举行更多的测试。一台在boeing 757上的体系应该比一个用于大众图书馆中检索材料的体系必要更多的测试。一个用来控制密封燃气管道的体系应该比一个与有毒爆炸物品有关的体系有更高的可信度。一个宁静要害软件的开辟组比一个游戏j9九游会组要有苛刻得多的查找错误方面的要求。   ②、潜伏的用户数目   一个体系的潜伏用户数目也在很大水平上影响了测试须要性的水平。这次要是由于用户集团在经济方面的影响。一个在全天下范畴内有几千个用户的体系一定比一个只在办公室中运转的有两三个用户的体系必要更多的测试。假如不克不及利用的话,前一个体系的经济影响一定比后一个体系大。除此而外,在分派处置错误的时分,所花的价钱的差异也很大。假如在外部体系中发明了一个严峻的错误,在处置错误的时分的用度就绝对少一些,假如要处置一个遍及全天下的错误就必要破费相称大的财力和精神。   ③、信息的代价   在思索测试的须要性时,还必要将体系中所包括的信息的代价思索在内,一个支持很多家大银行或浩繁证券买卖所的客户机/办事器体系中含有经济代价十分高的内容。很显然这一体系必要比一个支持鞋店的体系要举行更多的测试。这两个体系的用户都盼望失掉高质量、无错误的体系,但前一种体系的影响比后一种要大得多。因而j9九游会应该从经济方面思索,投入与经济代价绝对应的工夫和款项去举行测试。   ④、开辟机构   一个没有尺度和短少履历的开辟机构很大概开辟出充溢错误的体系。在一个创建了尺度和有许多履历的开辟机构中开辟出来的体系中的错误不会许多,因而,关于差别的开辟机构来说,所必要的测试的须要性也就截然的差别。   但是,那些必要举行大幅度改进的机构反而不大大概了解到本身的缺点。那些必要愈加严厉的测试历程的机构每每是最不行能举行这一运动的,在很多状况下,机构的办理部分并不克不及真正天文解开辟一个高质量的体系的利益。   ⑤、测试的机遇   测试量会随工夫的推移产生改动。在一个竟争很剧烈的市场里,夺取工夫大概是制胜的要害,开端大概不会在测试上花几多工夫,但几年后假如市场分派格式曾经创建起来了,那么产品的质量就变得更紧张了,测试量就要加大。测试量应该针对符合的目的举行调解。   五、软件测试的心思学题目   1、步伐测试的历程具有毁坏性   人类的运动具有高度的目标性,创建得当的目的具有紧张的心思作用。假如j9九游会的目标是要证明步伐中没有错误,那j9九游会就会不盲目地朝这个偏向去做;也便是说,j9九游会会偏向于挑选那些使步伐堕落的大概性较小的测试数据。另一方面,假如j9九游会的目的是要证明步伐中有错,那就会选择一些易于发明步伐所含错误的测试数据。尔后一种态度会比前者给步伐增加更多的代价。   测试的界说意味着步伐测试的历程是具有毁坏性的,其水平乃至到达了不行容忍的境地。社会上大少数人的人生观是建立性的,而不是毁坏性的。人们偏向于发明一个物品,而不是容易破坏?个物品。因而,步伐坏?个物品。因而,步伐测试的毁坏性的界说使人们对步伐测试事情望而却步[wàng ér què bù]。步伐测试界说还隐含着怎样设计测试状况(测过数据),以及应该由谁和不该由谁来测试一个给定步伐等等看法。   心思学研讨还报告j9九游会,当人在干一件曾经晓得是分歧适的或不行能做到的事时,每每做得欠好。比方:假如让一团体在15分钟解出一个登载在星期曰《纽约时报》上的交织填字字谜,10分钟后j9九游会会看到这人简直没一点停顿,由于他会感触实践上不行能做到而保持自已的高兴。但是,假如j9九游会要求花4小时解出这题,那大概就会看到他在扫尾的10分钟内有较大的停顿了。把步伐测试界说为在步伐中找堕落误的历程,就使测试成了可以做到的义务,从而克制了心思上存在的题目。   另一个令人急躁的题目是即便步伐完成了预期要求,仍大概含有错误。也便是说,假如步伐不按要求事情,它显然有错,但假如步伐做了不要它做的事,它也有错。   2、步伐员应制止测试本人的步伐   开辟者被指定测试本人的代码是一件很蹩脚的事。开辟和测试生来便是差别的运动。开辟是发明大概创建什么工具的举动,一个模块大概整个体系。而测试的独一目标是证明一个模块大概体系事情不正常。这两个运动之间有着实质的抵牾。一团体不太大概把两个截然统一的脚色都饰演的很好。基于这个想法,应该限定开辟者在测试中的到场。给他们比力符合的义务是举行有大概的最低层的测试--单位测试。差别当一个步伐员在完成了设计,编写步伐的建立性事情后,要一夜之间忽然改动他的看法,想法对步伐构成一个完全否认的态度,那黑白常难的。很多户主都晓得,揭失糊墙纸(毁坏性历程〉是不容易的,若糊墙纸原先是由他而不是他人贴上的,他几平会感触难以忍耐的懊丧。以是,大局部步伐员都由于不克不及使本人进入须要的精力形态(不是抱着要揭破出本人步伐中错误的态度),因此不克不及无效地测试本人的步伐。   除了这个心思学题目之外,另有一个紧张的题目:步伐中大概包括由于步伐员对题目的叙说或阐明的曲解而发生的错误。假如是这种状况,当步伐员测试本人的步伐时,每每还会带着异样的曲解致使题目难以发明。   再者,可以把测试看做是对一篇论文或?本书作校正,或与写批评相相似的事情。正多么多作者所知,校正或品评本人的著作黑白常难的。也便是说,在自已的事情中找有缺陷每每是人的心思形态所不容的。   以上见解并不料味着步伐员不行能测试自已的步伐。不外相比之下假如由别的?些人来举行步伐测试,就会更无效、更乐成。留意:这个结论并不实用于纠错(矫正已知错误),由原来步伐的作者纠错一定服从更高。   3、程库设计机构不该测试本人的步伐   在很多意义下去说,一项工程或一步伐设计机构是个有生命的无机体,它异样故意理学题目。再者,在大少数状况下,人们都因此在给定日期内,以肯定价钱体例步伐的才能来权衡步伐设计机谈判项目办理职员的。这祥做的一个来由是工夫和本钱目标便于权衡,而步伐的牢靠性却很难器量。要步伐设计机构在测试本人的步伐时持客观态度是难的,由于假如用准确的界说对待测试,就不大大概按预定方案完成测试也不大大概把泯灭的价钱限定在要求的范畴以内。   软件消费的三个最紧张的要素是:质量、进度和用度。   盘算技能的前进,意味着在经济范畴中信息体系更新的速率更快。新的硬件技能的开展,均会使软件过期,体系交付利用的工夫变得日益紧张,新产品在其功能和用度上被其他产品代替之前的倾销工夫,即市场窗口就曾经减少了。   由于用度和进度的限定,要开辟一种高质量、疾速交付和低本钱的软件产品变得越来越难,也便是说要同时到达三个目的是难的。因而在软件产品的开辟中就要衡量它们之间的干系,使软件的特征能满意用户的要求,这意味着软件产品特征的器量和估计是须要的。   软件测试由独立测试机构承当有很多利益。独立测试是指软件测试事情由在经济上和办理上独立于开辟机构的构造举行。独立测试可以制止j9九游会者测试本人开辟的软件,由于心思学上的题目,j9九游会者难以客观、无效地测试本人的软件,而找出那些由于对题目的曲解而发生的错误就愈加难。独立测试还可以制止j9九游会机构测试本人的软件,软件产品的开辟历程遭到工夫、本钱和质量三者的制约,工夫和本钱目标便于权衡,而质量却很难器量,因而在j9九游会历程中,事先间、本钱和质量三者产生抵牾时,质量最容易被无视,假如测试构造与开辟构造来自相反的机构,测试历程就碰面临来自与开辟构造统一泉源的办理方面的压力,使测试历程遭到搅扰。   接纳独立测试方法,无论在技能上照旧办理上,对进步软件测试的无效性都具有紧张意义。   ①、客观性   对软件测试和软件中的错误抱着客观的态度,这种客观的态度可以办理测试中的心思学题目,既可以以揭破软件中错误的态度事情,也能不受发明的错误的影响。经济上的独立性使其事情有更充实的条件按测试要求去完成。   ②、专业性   独立测试作为一种专业事情,在临时的事情历程中势必可以积聚少量理论履历,构成本人的专业上风。同时软件测试也是技能含量很高的事情,必要有专业步队加以研讨,并举行工程理论。专业化分工是进步测试程度,包管测试质量,充实发扬测试功效的一定途径。   ③、威望性   由于专业上风,独立测试事情构成的测试后果更具佩服力,而测试后果每每和对软件的质量评价联系在一同,由专业化的独立测试机构的评价,更客观、公平和具有威望性。   ④、资源有包管   独立测试机构的次要义务是举行独立测试事情,这使得测试事情在经费、人力和方案方面更有包管,不会由于开辟的压力增加对测试的投入,低落测试的无效性,可以制止开辟单元偏重j9九游会而对测试事情发生倒霉的影响。   六、好的测试工程师应具有的本质   人是测试事情中最有代价也是最紧张的资源,没有一个及格的、正的测试小组,测试就不行能完成。但是,在j9九游会财产中有一种十分广泛习气,那便是让那些履历最少的老手、没无效率的开辟者或不合适干其他事情的人去做测试事情。这相对是一种目光如豆[mù guāng rú dòu]的举动,对一个体系举行无效的测试所必要的技艺相对不比举行j9九游会必要的少,现实上,测试者将取得极端普遍的履历,他们将遇到很多开辟者不行能遇到的题目。   ①、相同才能。   一名抱负的测试者必需可以同测试触及到的一切人举行相同,具有与技能(开辟者)和非技能职员(客户,办理职员)的交换才能。既要可以和用户谈得来,又能同开辟职员说得上话,不幸的是这两类人没有配合言语。和用户发言的重点必需放在体系可以准确地处置什么和不行以处置什么上。而和开辟者谈相反的信息时,就必需将这些活重新构造以另一种方法表达出来,测试小组的成员必需可以划一地同用户和开辟者相同。   ②、移情才能。   和体系开辟有关的一切职员都处在一种既体贴又担忧的形态之中。用户担忧未来利用一个不切合本人要求的体系,开辟者则担忧由于体系要求不准确而使他不得不重新开辟整个体系,办理部分则担忧这个体系忽然瓦解而使它的名誉受损。测试者必需和每一类人打交道,因而必要测试小组的成员对他们每团体都具有充足的了解和怜悯,具有了这种才能可以将测试职员与相干职员之间的抵触和反抗增加到最低水平。   ③、技能才能。   就总体言,开辟职员对那些不懂技能的人持一种藐视的态度。一旦测试小组的某个成员作出了一个错误的判定,那么他们的可信度就会立即被外扬了出去。一个测试者必需既明确被测软件体系的观点又要会利用工程中的那些东西。要做到这一点必要有几年以上的编程履历,后期的开辟履历可以协助对j9九游会历程有较深化的了解,从开辟职员的角度准确的评价测试者,简化主动测试东西编程的学习曲线。   ④、自大心。   开辟者责备测试者出了错是常有的事,测试者必需对本人的看法有充足的自大心。假如允许他人对本人指东指西,就不克不及完成什么更多的事变了。   ⑤、交际才能。   当你报告或人他出了错时,就必需利用一些交际办法。机警干练和交际伎俩有助于维护与开辟职员的协作干系,测试者在报告开辟者他的软件有错误时,也异样必要肯定的交际伎俩。假如接纳的办法过于倔强,对测试者来说,在当前和开辟部分的互助方面就相称于“赢了和平却输了战役”。   ⑥、诙谐感。   在遇到狡赖的状况下,一个诙谐的品评将是很有协助的。   ⑦、很强的影象力。   一个抱负的测试者应该有才能将曩昔已经遇到过的相似的错误从影象深处发掘出来,这一才能在测试历程中的代价是无法权衡的。由于很多新呈现的题目和j9九游会曾经发明的题目相差无几。   ⑧、耐烦。   一些质量包管事情必要难以相信的耐烦。偶然你必要破费惊人的工夫去分散、辨认和分配一个错误。这个事情是那些坐不住的人无法完成的。   ⑨、猜疑精力。   可以意料,开辟者会尽他们最大的高兴将一切的错曲解释已往。测式者必需听每团体的阐明,但他必需坚持猜疑直到他本人看过当前。   ⑩、自我催促。   干测试事情很容易使你变得懒散。只要那些具有自我催促才能的人才干够使本人天天正常地事情。   11、洞察力。   一个好的测试工程师具有“测试是为了毁坏”的看法,捕捉用户看法的才能,激烈的质量寻求,对细节的存眷才能。使用的高危害区的判别才能以便将有限的测试针对重点关键。   七、参考文献   (软件测试的准绳)软件测试从差别的角度动身会派生出两种差别的测试准绳,从用户的角度动身,便是盼望经过软件测试能充实表露软件中存在的题目和缺陷,从而思索能否可以承受该产品,从开辟者的角度动身,便是盼望测试能标明软件产品不存在错误,曾经准确地完成了用户的需求,建立人们对软件质量的决心。中国软件评测中心的测试准绳便是从用户和开辟者的角度动身举行软件产品测试的,经过j9九游会的测试,可以为用户提供担心的产品,并对良好的产品举行认证。   为了到达上述的准绳,那么必要留意以下几点:   1.该当把“尽早和不停的测试”作为开辟者的座右铭   2.步伐员应该制止反省本人的步伐,测试事情应该由独立的专业的软件测试机构来完成。   3.设计测试用例时应该思索到正当的输出和分歧法的输出以及种种界限条件,特别状况下要制造极度形态和不测形态,好比网络非常中缀、电源断电等状况。   4.肯定要留意测试中的错误会合产生征象,这和步伐员的编程程度和习气有很大的干系。   5.对测试错误后果肯定要有一个确认的历程,一样平常有A测试出来的错误,肯定要有一个B来确认,严峻的错误可以召开评审会举行讨论和剖析。   6.订定严厉的测试方案,并把测试工夫布置的只管即便宽松,不要盼望在极短的工夫内完成一个高程度的测试。   7.回归测试的联系关系性肯定要惹起充实的留意,修正一个错误而惹起更多的错误呈现的征象并不少见。   8.妥善保管统统测试历程文档,意义是不问可知[bú wèn kě zhī]的,测试的重现性每每要靠测试文档。   在软件测试中怎样设置装备摆设软件情况装备测试情况是测试实行的一个紧张阶段,测试情况合适与否会严峻影响测试后果的真实性和准确性。测试情况包罗硬件情况和软件情况,硬件情况指测试必须的办事器、客户端、网络毗连设置装备摆设以及打印机/扫描仪等帮助硬件设置装备摆设所组成的情况 ;软件情况指被测软件运转时的操纵体系、数据库以及其他使用软件组成的情况。在实践测试中,软件情况又可分为主测试情况和辅测试情况,主测试情况是测试软件功效、宁静牢靠性、功能、易用性等大少数目标的次要情况,一样平常来说,设置装备摆设主测试情况可遵照下列准绳:   1.切合软件运转的最低要求。测试情况起首要包管能支持软件正常运转。   2.选用比力广泛的操纵体系和软件平台。比方,一个软件若宣称支持“Windows9X/ME/NT Workstation/2000 professional”和“MS OFFICE 97/2000/XP”,一样平常j9九游会会接纳如“Windows 2000professional+MS OFFICE 2000”的盛行情况。   3.营建绝对复杂、独立的测试情况。除了操纵体系,测试机上只安置软件运转和测试必须的软件,以免不相干的软件影响测试实行。   4.无毒的情况。使用无效的正版杀毒软件检测软件情况,包管测试情况中没有病毒。   辅测试情况每每用来满意差别的测试需求或特别测试项目:   兼容性测试:在满意软件运转要求的范畴内,可选择一些典范的操纵体系和常用使用软件对其安置卸载和次要功效举行验证。   模仿真实情况测试:有些软件,分外是面向群众的商品化软件,在测试时每每必要观察在真实情况中的体现。如测试杀毒软件的扫描速率时,硬盘上部署的差别范例文件的比例要只管即便靠近真实情况,如许测试出来的数据才有实践意义。   横向比拟测试:使用辅测试情况“克隆”出完全分歧的测试情况,从而包管各个被测软件同等比拟。 软件测试 jro2433 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200803/479.html 两年前用.net 2.0做了一个反向署理办事器,在这两年工夫里,不停修正BUG以及优化功能,使得可用性大大进步。迩来遇到一个功效需求,真实无法找出无效的办理措施,只好下去讨教列位高人。 先说说反向署理的事情机理吧。 1、客户端经过欣赏器拜访反向署理的时分,会收回一个HTTP哀求,反向署理收到这个TCP毗连的时分,创建一个新的会话用于处置这个哀求(BeginAccept、EndAccept); 2、会话工具创建一个从客户端吸收数据的委托,开端异步读取数据(BeginRead); 3、获得数据时,进入异步读取的回调函数中,开端处置数据(EndRead); 4、反省反向署理与办事器的毗连能否已创建,假如没有创建,那么必要先创建毗连(ConnectServer),并创建办事器的异步读取委托(BeginRead); 5、把数据异步写入办事器(BeginWrite); 6、重新创建客户端异步读取委托(BeginRead),回到3; 7、收到办事器前往数据时,处置后,异步写入客户端(BeginWrite); 8、重新创建办事器异步读取委托(BeginRead),回到7; 一切的数据传输,都利用异步来完成,而只必要在3和7处为商业编写数据处置代码即可。 实践上,关于反向署理来说,只必要处置客户端发来的数据就可以了,必要把HTTP的HOST头交换为真实办事器,而关于办事器呼应的数据,只必要原样发送给客户端就可以了。 在步调3中,j9九游会只晓得以后收到了客户端发来的数据,而不晓得这个数据是不是Http哀求头,大概是完备的Http哀求头。幸亏,关于反向署理来说,不必要体贴能否是完备的Http哀求头,只必要反省能否是Http哀求头,假如是,就修正Host即可。在这里,我假定Http哀求的第一个数据包一定是独立的数据包,不会“粘”在TCP毗连中上一次数据的前面,如许就可以间接利用Http协议划定的款式来反省这个数据包能否Http哀求头了。固然这个假定没有什么根据,但它的确十分无效。 步伐就如许事情了两年,没有什么题目。 但接上去,题目就呈现了,有一个需求,要求可以把办事器前往的页面中的某个字符串交换为指定的字符串。好比我用反向署理指向博客园,我就必要把博客园页面中一切利用了相对途径的毗连修正为指向反向署理办事器的毗连。这就要求在步调7这里处置数据,把数据转为字符串,然后交换链接,然后才发往客户端。 但步调7每次收到的数据只是一个片断,而不是整个页面的HTML。即便j9九游会再次假定Http呼应的第一个数据包是独立的数据包,也只能辨认哪些是呼应头,哪些是数据体罢了。也想过每一段数据转为这一段的字符串举行处置,但,假如恰好某个字符被网络层拆分到两个TCP数据包里怎样办?另有,想博客园如许利用了gzip的,假如不承受完备个页面的数据,是无法解压的;就算这两种状况都不存在,而网络层恰好在超链接的地方拆分数据包怎样办? 因而,最守旧的做法便是拿到整个页面数据再开端处置。也想过Http呼应头那边有个Content-Length指明内容长度的,但实践中,许多呼应基本就不到这个段。 我检察过HttpListener类和HttpListenerRequest类,实验从中发明它是怎样承受完一次哀求(呼应)的,惋惜这两个类挪用了少量NativeAPI,就无法得知了。 另有欣赏器,它又是怎样得知某次呼应能否曾经完成的呢? 还请列位高人多多指教! 这个署理曾经放到codeplex上,各人有兴味可以看看: http://www.codeplex.com/XProxy/ 网络 数据 复活命 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/478.html 微软研讨院发布了三个最新的搜刮工程,设计他们的理念是进步用户的搜刮体验,它们辨别是: SearchTogether CoSearch Searchbar SearchTogether: SearchTogether 是一个社会化搜刮的IE插件,可以让你和你的冤家一同经过IE搜刮框举行搜刮,这一产品将在2008年春季呈现,提供页面评分,切割搜刮和共享内容,谈天等功效. CoSearch: CoSearch 可以让你用手机和鼠标同时搜刮差别的信息,用户可以轻松将内容传送至手机. Searchbar: Searchbar 是一个IE边框,可以保管你的搜刮信息,构造和添加备忘. 搜刮工程 微软 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200803/477.html Websense Enterprise 在威望IT渠道媒体SP年度大奖的评比历程中,依附优秀的体现在浩繁参评的同类产品中锋芒毕露[fēng máng bì lù],一举摘得“2007渠道最佳代价奖”桂冠。 Websense Enterprise 所拥有的精彩的产品特征、丰富的技能气力后台和高承认度的渠道互助战略、美满的渠道互助系统取得SP资深编辑的普遍好评,分歧以为Websense Enterprise具有最佳的渠道代价。 依据Frost & Sullivan的市场份额统计,Websense现在占据环球Web过滤范畴6500万美元中28%以上的市场份额,并在整个内容宁静范畴18亿美元的市场中拥有10%的高增值率,再次彰显了Websense是Web宁静范畴居环球第一的丰富气力。Websense Enterprise可协助企业精准剖析互联网的利用状况,并经过对网络协议的控制和指定分类网页的过滤,完成对网络资源的优化、低落歹意入侵和秘密数据泄漏的伤害,在大幅进步消费力的同时低落运营本钱。停止2007年第四序度,Websense的产品为4270万名企业员工保证Web宁静,在中国,Websense Enterprise更以破竹之势获得突出成果。精良的业绩既助推了Websense在国际的品牌影响力大幅提拔,也为宽大渠道互助同伴带来了丰盛的利润报答。 作为环球抢先的Web过滤办理方案,Websense Enterprise拥有业界最全的网址数据库,网址分类涵盖了包罗中文在内的50多种言语语义和内容剖析。Websense中国研发中心,是Websense环球第二大研发中心,可提供更敏捷的对当地言语网站分类和产品需求的呼应,Websense Enterprise还能提供可供选择的公用宁静增值组分类,可制止企业员工拜访任何含有歹意代码的网站,制止企业盘算机受病毒或木马等步伐的损害。顺遂收买环球第二大网页过滤企业SurfControl之后,Websense在技能保证方面将成为相对的第一,产品设计将更能贴近用户需求。不但云云,Websense Enterprise还拥有Websense公司丰富的技能气力后台、精良的渠道互助系统和互利共赢的渠道战略等,协助渠道互助同伴更好的推进业绩提拔和办事用户。 SP资深编辑指出:“Websense Enterprise在面市以来,以其业内最大的网址数据库(拥有3650万条网址)和Websense第二大研发中心的支持吸引了浩繁渠道分销商的存眷,并在后续的互助中表现了分明的渠道互助上风。相比其他同类产品,Websense Enterprise具有渠道分销商最看重的产品功能、公司气力、渠道战略和后续支持这几大要害要素,天经地义[tiān jīng dì yì]的成为“渠道最佳代价奖”的首选。” Websense亚太区副总裁李建宇表现:“自Websense进入中国以来,旗舰产品Websense Enterprise在渠道互助同伴的鼎力推行下,业绩继续飞速增加,产品着名度和承认度也大幅提拔,这统统成极的获得与互助同伴的高兴是密不行分的。这次取得渠道最佳代价大奖,对j9九游会来说黑白常大的勉励和一定,Websense将在已有底子上,持续与渠道互助同伴深化互助,订定出更到位的渠道战略,为渠道互助同伴提供更壮大的支持。” Websense SP Tony 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200803/476.html 本文论述了怎样利用 DBMS 存储历程。我论述了利用存储历程的根本的和初级特征,好比前往ResultSet。本文假定你对DBMS和JDBC曾经十分熟习,也假定你可以毫无停滞地阅读别的言语写成的代码(即不是Java的言语),但,并不要求你有任何存储历程的编程履历。 存储历程是指保管在数据库并在数据库端实行的步伐。你可以利用特别的语法在Java类中挪用存储历程。在挪用时,存储历程的称号及指定的参数经过JDBC毗连发送给DBMS,实行存储历程并经过毗连(假如有)前往后果。 利用存储历程拥有和利用基于EJB或CORBA如许的使用办事器一样的利益。区别是存储历程可以从许多盛行的DBMS中无偿使用[wú cháng shǐ yòng],而使用办事器多数十分昂贵。这并不但是允许证用度的题目。利用使用办事器所必要破费的办理、编写代码的用度,以及客户步伐所增长的庞大性,都可以经过DBMS中的存储历程所整个地替换。 你可以利用Java,Python,Perl或C编写存储历程,但通常利用你的DBMS所指定的特定言语。Oracle利用PL/SQL,PostgreSQL利用pl/pgsql,DB2利用Procedural SQL。这些言语都十分类似。在它们之间移植存储历程并不比在Sun的EJB标准差别完成版本之间移植Session Bean难。而且,存储历程是为嵌入SQL所设计,这使得它们比Java或C等言语愈加友爱地方法表达数据库的机制。 由于存储历程运转在DBMS本身,这可以协助增加使用步伐中的等候工夫。不是在Java代码中实行4个或5个SQL语句,而只必要在办事器端实行1个存储历程。网络上的数据往复次数的增加可以戏剧性地优化功能。 利用存储历程 复杂的老的JDBC经过CallableStatement类支持存储历程的挪用。该类实践上是PreparedStatement的一个子类。假定j9九游会有一个poets数据库。数据库中有一个设置墨客去世年事的存储历程。上面是对老酒鬼Dylan Thomas(old soak Dylan Thomas,不指定能否有关典故、文明,请品评指正。译注)举行挪用的细致代码: try { int age = 39; String poetName = dylan thomas; CallableStatement proc = connection.prepareCall({ call set_death_age(?, ?) }); proc.setString(1, poetName); proc.setInt(2, age); cs.execute(); } catch (SQLException e) { // .... } 传给prepareCall办法的字串是存储历程挪用的誊写标准。它指定了存储历程的称号,?代表了你必要指定的参数。 和JDBC集成是存储历程的一个很大的便当:为了从使用中挪用存储历程,不必要存根(stub)类大概设置装备摆设文件,除了你的DBMS的JDBC驱动步伐外什么也不必要。 当这段代码实行时,数据库的存储历程就被挪用。j9九游会没有去获取后果,由于该存储历程并不前往后果。实行乐成或失败将经过破例得知。失败大概意味着挪用存储历程时的失败(好比提供的一个参数的范例不准确),大概一个使用步伐的失败(好比抛出一个破例指示在poets数据库中并不存在“Dylan Thomas”) 联合SQL操纵与存储历程 映射Java工具到SQL表中的行相称复杂,但通常必要实行几个SQL语句;大概是一个SELECT查找ID,然后一个INSERT拔出指定ID的数据。在高度规格化(切合更高的范式,译注)的数据库形式中,大概必要多个表的更新,因而必要更多的语句。Java代码会很快地收缩,每一个语句的网络开支也敏捷增长。 将这些SQL语句转移到一个存储历程中将大大简化代码,仅触及一次网络挪用。一切联系关系的SQL操纵都可以在数据库外部产生。而且,存储历程言语,比方PL/SQL,容许利用SQL语法,这比Java代码愈加天然。上面是j9九游会晚期的存储历程,利用Oracle的PL/SQL言语编写: create procedure set_death_age(poet VARCHAR2, poet_age NUMBER) poet_id NUMBER;begin SELECT id INTO poet_id FROM poets WHERE name = poet; INSERT INTO deaths (mort_id, age) VALUES (poet_id, poet_age);end set_death_age; 很共同?不。我赌钱你肯定等待看到一个poets表上的UPDATE。这也表示了利用存储历程完成是何等容易的一件事变。set_death_age简直可以一定是一个很烂的完成。j9九游会应该在poets表中添加一列来存储去世年事。Java代码中并不体贴数据库形式是怎样完成的,由于它仅挪用存储历程。j9九游会当前可以改动数据库形式以进步功能,但j9九游会不用修正j9九游会代码。 上面是挪用下面存储历程的Java代码: public static void setDeathAge(Poet dyingBard, int age) throws SQLException { Connection con = null; CallableStatement proc = null; try { con = connectionPool.getConnection(); proc = con.prepareCall({ call set_death_age(?, ?) }); proc.setString(1, dyingBard.getName()); proc.setInt(2, age); proc.execute(); } finally { try { proc.close(); } catch (SQLException e) {} con.close(); } } 为了确保可维护性,发起利用像这儿如许的static办法。这也使得挪用存储历程的代码会合在一个复杂的模版代码中。假如你用到很多存储历程,就会发明仅必要拷贝、粘贴就可以创立新的办法。由于代码的模版化,乃至也可以经过剧本主动消费挪用存储历程的代码。 Functions 存储历程可以有前往值,以是CallableStatement类有相似getResultSet如许的办法来获取前往值。当存储历程前往一个值时,你必需利用registerOutParameter办法报告JDBC驱动器该值的SQL范例是什么。你也必需调解存储历程挪用来指示该历程前往一个值。 上面接着下面的例子。这次j9九游会盘问Dylan Thomas去世时的年事。这次的存储历程利用PostgreSQL的pl/pgsql: create function snuffed_it_when (VARCHAR) returns integer declare poet_id NUMBER; poet_age NUMBER;begin -- first get the id associated with the poet. SELECT id INTO poet_id FROM poets WHERE name = $1; -- get and return the age. SELECT age INTO poet_age FROM deaths WHERE mort_id = poet_id; return age;end; language pl/pgsql; 别的,留意pl/pgsql参数名经过Unix和DOS剧本的$n语法援用。同时,也留意嵌入的正文,这是和Java代码相比的另一个良好性。在Java中写如许的正文固然是可以的,但看起来很混乱,而且和SQL语句摆脱,必需嵌入到Java String中。 上面是挪用这个存储历程的Java代码: connection.setAutoCommit(false); CallableStatement proc = connection.prepareCall({ ? = call snuffed_it_when(?) }); proc.registerOutParameter(1, Types.INTEGER); proc.setString(2, poetName); cs.execute(); int age = proc.getInt(2); 假如指定了错误的前往值范例会怎样?那么,当挪用存储历程时将抛出一个RuntimeException,正如你在ResultSet操纵中利用了一个错误的范例所遇到的一样。 庞大的前往值 关于存储历程的知识,许多人仿佛就熟习j9九游会所讨论的这些。假如这是存储历程的所有功效,那么存储历程就不是别的近程实行机制的交换方案了。存储历程的功效比这壮大得多。 当你实行一个SQL盘问时,DBMS创立一个叫做cursor(游标)的数据库工具,用于在前往后果中迭代每一行。ResultSet是以后工夫点的游标的一个表现。这便是为什么没有缓存大概特定命据库的支持,你只能在ResultSet中向前挪动。 某些DBMS容许从存储历程中前往游标的一个援用。JDBC并不支持这个功效,但Oracle、PostgreSQL和DB2的JDBC驱动器都支持在ResultSet上翻开到游标的指针(pointer)。 假想列出一切没有活到退休年事的墨客,上面是完成这个功效的存储历程,前往一个翻开的游标,异样也利用PostgreSQL的pl/pgsql言语: create procedure list_early_deaths () return refcursor as declare toesup refcursor;begin open toesup for SELECT poets.name, deaths.age FROM poets, deaths -- all entries in deaths are for poets. -- but the table might become generic. WHERE poets.id = deaths.mort_id AND deaths.age < 60; return toesup;end; language plpgsql; 上面是挪用该存储历程的Java办法,将后果输入到PrintWriter: PrintWriter: static void sendEarlyDeaths(PrintWriter out) { Connection con = null; CallableStatement toesUp = null; try { con = ConnectionPool.getConnection(); // PostgreSQL needs a transaction to do this... con.setAutoCommit(false); // Setup the call. CallableStatement toesUp = connection.prepareCall({ ? = call list_early_deaths () }); toesUp.registerOutParameter(1, Types.OTHER); getResults.execute(); ResultSet rs = (ResultSet) getResults.getObject(1); while (rs.next()) { String name = rs.getString(1); int age = rs.getInt(2); out.println(name + was + age + years old.); } rs.close(); } catch (SQLException e) { // We should protect these calls. toesUp.close(); con.close(); } } 由于JDBC并不间接支持从存储历程中前往游标,j9九游会利用Types.OTHER来指示存储历程的前往范例,然后挪用getObject()办法并对前往值举行强迫范例转换。 这个挪用存储历程的Java办法是mapping的一个好例子。Mapping是对一个集上的操纵举行笼统的办法。不是在这个历程上前往一个集,j9九游会可以把操纵传送出来实行。本例中,操纵便是把ResultSet打印到一个输入流。这是一个值得举例的很常用的例子,上面是挪用统一个存储历程的别的一个办法完成: public class ProcessPoetDeaths { public abstract void sendDeath(String name, int age); } static void mapEarlyDeaths(ProcessPoetDeaths mapper) { Connection con = null; CallableStatement toesUp = null; try { con = ConnectionPool.getConnection(); con.setAutoCommit(false); CallableStatement toesUp = connection.prepareCall({ ? = call list_early_deaths () }); toesUp.registerOutParameter(1, Types.OTHER); getResults.execute(); ResultSet rs = (ResultSet) getResults.getObject(1); while (rs.next()) { String name = rs.getString(1); int age = rs.getInt(2); mapper.sendDeath(name, age); } rs.close(); } catch (SQLException e) { // We should protect these calls. toesUp.close(); con.close(); } } 这容许在ResultSet数据上实行恣意的处置,而不必要改动大概复制获取ResultSet的办法: static void sendEarlyDeaths(final PrintWriter out) { ProcessPoetDeaths myMapper = new ProcessPoetDeaths() { public void sendDeath(String name, int age) { out.println(name + was + age + years old.); } }; mapEarlyDeaths(myMapper); } 这个办法利用ProcessPoetDeaths的一个匿名实例挪用mapEarlyDeaths。该实例拥有sendDeath办法的一个完成,和j9九游会下面的例子一样的方法把后果写入到输入流。固然,这个本领并不是存储历程特有的,但和存储历程中前往的ResultSet联合利用,是一个十分壮大的东西。 结论 存储历程可以协助你在代码中分散逻辑,这根本上总是无益的。这个分散的利益有: • 疾速创立使用,利用和使用一同改动和改进的数据库形式。 • 数据库形式可以在当前改动而不影响Java工具,当j9九游会完成使用后,可以重新设计更好的形式。 • 存储历程经过更好的SQL嵌入使得庞大的SQL更容易了解。 • 编写存储历程比在Java中编写嵌入的SQL拥有更好的东西--大局部编辑器都提供语法高亮! • 存储历程可以在任何SQL下令行中测试,这使得调试愈加容易。 并不是一切的数据库都支持存储历程,但存在很多很棒的完成,包罗收费/开源的和非收费的,以是移植并不是一个题目。Oracle、PostgreSQL和DB2都有相似的存储历程言语,而且有在线的社区很好地支持。 存储历程东西许多,有像TOAD或TORA如许的编辑器、调试器和IDE,提供了编写、维护PL/SQL或pl/pgsql的壮大的情况。 存储历程的确增长了你的代码的开支,但它们和大少数的使用办事器相比,开支小得多。假如你的代码庞大到必要利用DBMS,我发起整个接纳存储历程的方法。 目次权限 c# dongzc 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200803/475.html ###想用c#来设置和读取ntfs分区上的目次权限,找了许多材料,未果。终于发明了一段vb.net的代码,做了修正,以C#展示给各人。 using System; using System.Collections; using System.IO; using System.Security.AccessControl; static class Tester { public static void Main() { try { string filename = @f:\k; //目的>###string account = @Administrator;//用>###string userrights = @RW;//权限字符串,本人定>###AddDirectorySecurity(filename, account, userrights); Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e); Console.ReadLine(); } } static public void AddDirectorySecurity(string FileName, string Account, string UserRights) { FileSystemRights Rights = new FileSystemRights(); if (UserRights.IndexOf(R) >= 0) { Rights = Rights | FileSystemRights.Read; } if (UserRights.IndexOf(C) >= 0) { Rights = Rights | FileSystemRights.ChangePermissions; } if (UserRights.IndexOf(F) >= 0) { Rights = Rights | FileSystemRights.FullControl; } if (UserRights.IndexOf(W) >= 0) { Rights = Rights | FileSystemRights.Write; } bool ok; DirectoryInfo dInfo = new DirectoryInfo(FileName); DirectorySecurity dSecurity = dInfo.GetAccessControl(); InheritanceFlags iFlags = new InheritanceFlags(); iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow); dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok); dInfo.SetAccessControl(dSecurity); //列出目的目次所具有的权限 DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All); foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) { Console.WriteLine(----------------------------------); Console.WriteLine(rule.IdentityReference.Value); if ((rule.FileSystemRights & FileSystemRights.Read) != 0) Console.WriteLine(rule.FileSystemRights.ToString()); } Console.Read(); } } 目次权限 c# 未知 cnblos ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200802/474.html C#和Java都是很不错的言语。他们经过相似的方法到达了相似的目标,只管C#比Java多出来一些和句法相干的工具,比方foreach要害字和一些愈加让人开心的扩展/完成架构。不幸的是,这些改良的光辉被减弱的工具掩饰笼罩失了。在本文里,我将比力两种言语,并只管即便制止深化到JVM和CLR层。 Java:无可争辩地具有C++一切的精髓 在比力Java和C#的时分,你不行能不留意到它们诸多的类似之处,这在某种水平上要归结于它们配合的泉源:C和C++。但,当Gosling和他的同事们坐上去发明Java的时分,他们不但汲取了C++的才能,并且更紧张的是,他们减失了一些无用特征,后者让C++更容易堕落误并且更难学习。C#的设计者参加了许多C++的特征,而Java也参加了这些特征,但C#却没有去失C++的最蹩脚的一些特征。其后果便是如许一门言语,它仍旧为一切人提供了一切的特征,但其了局是外部抵触不停,并且过于庞大。 散漫的句法缺陷 最容易找出的错误是流控制和句法。C#提供了goto command,将其作为变动步伐实行点的机制。自从Edsger W. Dijkstra在1968年出书了他的《关于Go to报告式坏处的思索(Go To Statement Considered Harmful)》。Goto语句招致代码难以调试,并且很难被测试东西处置。 在另一种差别的状况下,操纵符过载异样也有很大题目,只不外条理纷歧样而已。当“+”依据操纵数的范例而代表任何工具的时分,代码的功效就不再通明,难以意料的反作用[fǎn zuò yòng]就会产生。 C#在宁静上的减弱 C#有一个用于将代码地区标示为不宁静的复杂机制。在这些不宁静的地区里,Java以及厥后的C#布置到位了一些宁静步伐,用以避免步伐员间接修正内存地位,以及利用点运算,但这些步伐是值得猜疑的。在利用具有渣滓清算功效的初级言语时,假如下到内存地点这一层,就会把工具/内存之间故意作出分散弄混。错误就会容易呈现,调试成了噩梦,缓冲区溢出再次仰面,C和C++里闻名的宁静毛病再次现身。 C#还容许对主机体系上本机库的复杂拜访。这个与非.NET工具相联合的拜访同Java本机接口(JNI)所提供的功效相似,但它愈加伤害。JNI被设计用来警惕地限定Java代码以及本机代码同已界说好的接口之间的交互操纵,.NET使得挪用本机工具文件变得极端复杂,后果招致开辟职员在做这的时分,无法认识到他们在这一历程中把平台的可移植性也扔出了窗外。 SOAP的集成 C#,及其更大的扩展.NET,曾经同SOAP Web办事严密地集成在一同。SOAP是利用XML指定参数和后果值来举行近程历程挪用的好尺度,但它并不是独一的方法。使用用于Web办事的内部库可以容许Java开辟职员容易地变动其Web办事的作风,使其成为SOAP、XML-RPC,大概什么还没有创造的工具。固然,C#的开辟职员总是可以选择将内部库用于SOAP的Web办事,但由SOAP尺度的严密集成所形成的限定要比它可以做的工具更多。 一切者的恐慌 C#里最令人恐慌的特征大概便是其一切者了。微软曾经为将C#和.NET用于非Windows平台举行了经心的展示,但这在很大水平上还只是作秀。其用于非Windows平台的CLR是题目多多,错误多多。它经过ECMA尺度化历程来运转C#??这一步连Sun也不敢在Java上迈出。其担忧来自于微软对此大概封闭的水平,假如它乐意的话。微软曾经请求了一个专利,以排挤别人编写第三方的CRL,比方Mono方案。假如微软决议对收费的C#和.NET社区施压,它就有才能拿票子和执法的大棒把其开辟运动赶回到Win32平台??固然这也不是它想看到的状况。 而Java言语则相反,不是ECMA尺度的,真惋惜Sun没有服从这一尺度。但,它是可以完成的,并且没有专利的拦阻,其假造机和中心类库都有来自第三方的开放和关闭源代码的完成。C#看起来是收费的,实在否则,而Java看起来限定许多,但它可以根据执法经过收费的途径来完成。 最初,我历来都没有想到我会说这个,但Java具有更好东西的支持,即便是在思索到集成开辟情况(IDE)的状况下。Visual Studio .NET是一个很不错的IDE。它代表了多年的高兴,并且特征很丰厚。但,Eclipse IDE包罗了对Java的支持,它在波动性、易用性和所提供的特征上凌驾了Visual Studio。IBM对Eclipse的奉献无足轻重[wú zú qīng zhòng],并且假如你信仰原来的软件格言“创立一个抛弃的(Build one to throw away)”,那么你可以把Visual Age作为第一个(被丢弃失了的)实验。关于利用C#的开辟职员来说侥幸的是,Eclipse的.NET版本正在开辟中。 不是那么差,但还不是Java 客观一点评价,C#里并没有什么很可怕的工具。它没有Visual Basic里的那些很可怕的工具,并且它现实上也没有承继像C里的一些工具,而这些工具会退一步发职员开枪却打中本人脚。但,底线是,C#并没有做许多工具,假如有任何工具比Java更好的话。它在某些方面很分明的要更差。在这两个十分相似的言语之间作选择的时分,请选择稍稍更好且履历风雨的谁人:Java。 c# java lmx875792 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200802/473.html 怎样才干逆序输入单链表呢??方才有人考了我一道题,逆序输入单链表: 我是如许答的(上面的代码为伪代码,不克不及经过编译): void printSList(slist *pList) { assert(pList); if (pList == NULL) return; string str; while (pList) { str = string(*pList) + str; pList = pList->next; } printf(%s, str.c_str()); } 厥后他让我想一想另有没有更为复杂的办法了,事先容许我上彀,我用了几分钟到网上找了一下,没有找到更好的措施,假如先把链表逆序,再次序输入工夫庞大度更高。 我走出大楼当前,突然想到,是递归呀,对是递归: void printSList(slist *pList) { assert(pList); if (pList == NULL) return; if (pList->next == NULL) printf(%s, *pList); else { printSList(pList->next); printf(%s, *pList); } } 哎,人生中时机便是一瞬之间,错过不晓得下一次又是什么时分。但只需做了就会劳绩,会一次比一次做的好。 单链表 逆序 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200802/472.html 功能题目应该从体系设计时期开端思索,并连续到体系的生命期停止之时。 具有可伸缩性的体系是指当体系的负载增长一倍,体系必要的资源也异样增长一倍。提及来复杂,但在实际情况中确难以做到。由于办理并发用户的开支的增加、锁事件的增加、分歧性读负载的增长、操纵体系负载的增长、低效的SQL或索引设计招致的过高的I/O等等要素,会招致体系资源的斲丧的增加宏大于一倍。 毁坏可伸缩性的要素: 1.低效的使用步伐设计、实行和设置装备摆设 2.硬件局部的范围分歧适 3.软件局部的限定 4.硬件局部的限定 体系的布局可分为硬件和软件两局部: 硬件局部包罗:CPU、内存、I/O子体系和网络模块。 软件局部包罗:办理用户接口、完成贸易逻辑、办理用户哀求和资源分派、办理数据和事件。 在设计体系时,应该思索以下几个题目: 体系将支持几多用户? 用户的交互方法是什么? 用户所处的地位? 网络的速率怎样? 用户将拜访几多数据?有几多数据是只读拜访? 用户对呼应工夫的要求? 用户能否必要24小时办事? 能否一切的修正必要及时完成? 使用步伐设计准绳: 设计复杂性准绳: 1.假如表的设计庞大到没有人可以完全的了解,那么表的设计大概是比力差的。 2.假如SQL语句过长致使于优化步伐无法优化该语句,那么SQL语句的设计、事件和表的设计肯定存在题目。 3.假如表的相反列上被反复索引,那么索引的设计大概是有题目的。 4.假如提交的盘问没有有限,致使无法敏捷的将后果前往给在线用户,那么用户接口或事件的设计是有题目的。 5.假如数据库的挪用被很多层软件从使用逻辑中笼统出来,那么,j9九游会的办法大概存在题目。 数据建模:该当留意,不要在非中心数据单位上破费过多的工夫。 表和索引的设计:选择符合的列举行索引、选择索引范例、留意索引的价钱、存眷索引中列的次序。 一个表上假如有3个索引,那么当举行INSERT/UPDATE/DELETE操纵时,会比不带索引的表慢约莫10倍。 组合索引中,选择性高的列在前盘问时必要的I/O更少。选择性低的列在前,有助于代排序操纵的盘问。 SQL实行服从: 数据库毗连办理:应制止没有须要的过多毗连。 数据库游标办理:利用cursor和绑定变量,只管即便制止硬剖析,较少软剖析。 硬剖析:sql语句第一次提交,并在共享池中无法找到。 软剖析:sql语句第一次提交,但可以在共享池中找到相反的语句。 实行新的使用步伐: 切换方法包罗两种:Big Bang Approach(一切用户一次性转移到新的体系上)和Trickle Approach(用户分屡次转移到新的体系上)。 功能清单列表: 1.设置MAXINSTANCES, MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS和 MAXLOGHISTORY的值高于预期值。制止体系的增加招致必需重修控制文件。 2.设置BLOCK SIZE和优化形式与开辟情况中相反。假如测试情况中的一切SQL语句的实行方案都是准确的,可以测试情况中的统计信息导入到正式库中。 3.只管即便少修正初始化参数。除了SGA的构成局部和归档目次的设置,其他初始化参数只管即便坚持默许值,可以为当前功能优化留下肯定的余地。 4.经过设置数据库工具的存储参数来办理BLOCK的争用。 5.一切的sql语句应该被优化。 6.验证两头层软件和步伐接纳高效的方法毗连数据库。 7.验证sql语句无效的使用游标。 8.确认一切方案的工具从开辟情况移植到了产品数据库中。 9.一旦完成体系的切换,创建数据库和操纵体系统计信息的基线。 10.发明开始呈现的瓶颈。 功能 软件设计 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200802/471.html 依据赛迪参谋最新研讨数据,人民币贬值亦成为我国软件外包业的打击之一, 2007年中国 软件外包 办事市场的增加率将从2006年的55.4%低落到40.6%。该独立调研机构表现,客岁中国软件外包办事市场的增加率亦从2006年的55%低落到40%。   综合估量,赛迪以为中国软件外包办事市场将来5年将以35%的年均复合增加率高速增加,凌驾同期环球的13%年均复合增加率。 到2012年中国软件外包办事市场范围将凌驾90亿美元。 软件外包 增加率 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200802/470.html ###利用水晶报表的壮大功效来完成使用步伐的统计剖析及打印导出等功效,是微软平台上举行.NET使用步伐开辟报表的一种不错的选择。水晶报表在设计、开辟、设置装备摆设以及摆设上,照旧会给初学者带来肯定的困扰的。那么,能否存在一种绝对比力复杂并且易用的方法来举行水晶报表的设计、开辟、设置装备摆设以及摆设呢?本文将提供一种比力复杂且绝对机动的办法。 本文将包括以下内容: Crystal Reports的另类非工具形式数据绑定 水晶报表的复杂形式摆设 P.S. 本文中形貌到的Crystal Reports为Crystal Reports for Visual Studio .NET,准绳上该版本是runtime free受权,for unlimited user的。VS IDE版本为2008,Crystal Reports版本为10 Crystal Reports的另类非工具形式数据绑定 水晶报表绑定命据的形式有许多种,此中包罗利用DataSet、DataReader及ObjectCollection等。在某个特定的体系项目中,j9九游会少数经过指定的商业数据库来提供对报表数据的支持。本文将次要形貌一种非数据库数据绑定的变通形式,经过这种形式举行绑定的报表,可以不必设置其数据库验证参数(DBLogon)的相干信息,详细的数据源可以泉源于数据库,也可以泉源于xml文件等其他半布局化数据。 在VS IDE项目标Solution Explorer中,创建寄存报表文件的文件夹,如ReprotFilesFolder 用鼠标右键点击新建的文件夹,选择添加新项(Add New Item...) 选择“XML Schema”,将文件定名为Demo.xsd 用DataSet Editor翻开该Schema文件,点击“Ctrl+Alt+S”,翻开“Server Explorer”,找到以后项目利用的数据库毗连,将报表展示触及到的数据表拖拽到设计地区 推拽的表可以是存在键值干系的表,也可以是毫有关系的表,乃至经过存储历程创建的暂时表,保管该xsd文件 用鼠标右键点击新建的文件夹,选择添加新项(Add New Item...) 选择Crystal Report,将报表文件定名为Demo.rpt,点击添加(Add) 在翻开的水晶报表导游窗口中选择“利用报表导游”,点击确定 在报表导游的数据导游页中,选择“创立新毗连-数据库文件” 点击数据库文件前的“+”,将弹出选择数据文件窗口,找到方才创立的Demo.xsd文件,并点击“翻开” 此时,j9九游会刚添加到Demo.xsd中的两个数据表将呈现在“数据文件”节点的子节点下,选中数据表,点击“>”按钮,将表添加到“已选择表”列表中 点击“下一步”,可以为表之间添加隐式的键值干系 点击完成,将天生一张空缺的报表 依据实践的商业状况设计切合要求的报表,并保管报表文件,比方下图 设计事情到此告一段落,上面将举行数据的绑定。 新建一个WebForm页面,将CrystalReportViewer添加到页面中,如下图所示 在背景页面中起首援用Crystal Reports的步伐集 using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; 界说变量 private ReportDocument reportDocument; 添加自界说办法 /// <summary> /// 初始化报表 /// </summary> private void ConfigureCrystalReports() { //以后商业的报表打印文件 string RPTFile = ; //以后商业的报表打印数据集 DataSet ds = null; #region 获取报表打印文件 if (Session[rf] == null) { RPTFile = Server.MapPath(Demo.rpt); Session[rf] = RPTFile; } else RPTFile = Session[rf].ToString(); #endregion #region 获取以后商业的报表打印数据 if (Session[pd] == null) { ds = new DataSet(); string sql = ; sql = select * from SalesMaster where BItemSerialNumber=0802280001; DataSet masterDs = 添补主表数据 //将主表添加到报表数据会合 ds.Merge(masterDs); //使用异样的办法添加子表或其他的表,乃至可以添加表和表之间的干系 //上述办法也可以从其他数据源读入数据,包罗Access数据库、xml数据等 Session[pd] = ds; } else ds = (DataSet)Session[pd]; #endregion if (Session[reportDocument] == null) { reportDocument = new ReportDocument(); reportDocument.Load(RPTFile); reportDocument.SetDataSource(ds); Session[reportDocument] = reportDocument; } else reportDocument = (ReportDocument)Session[reportDocument]; ReportViewer.ReportSource = reportDocument; } 在页面的Page_Load办法中添加Response.Expires = -1; 添加页面初始化办法 /// <summary> /// 页面初始化事情 /// </summary> /// <param name=sender></param> /// <param name=e></param> protected void Page_Init(object sender, EventArgs e) { ConfigureCrystalReports(); } 至此,报表的数据绑定及表现事情完成。编译项目后,在欣赏器中可以检察报表结果。此种办法的机动性在于 完成后,完全可以删除.xsd的Schema文件而运转,或将.xsd文件移进项目。 数据的读入,不管来自SQL Server、Access照旧xml数据,只需切合j9九游会设定的Schema的表款式,即可以绑定到报表中。 j9九游会也可以修正并强化上述的ConfigureCrystalReports办法,并创建体系办理页面,在办理页面上举行数据泉源的选择和设定等。 水晶报表的复杂形式摆设 将水晶报表摆设到目的办事器的缘故原由是,.NET Framework的安置中并没涵盖水晶报表的分解项。在之前,已经听说历程序员为了将水晶报表的支持摆设到办事器,而在办事器上安置VS IDE的事变。因而,在这里给一个复杂的办法。 在安置了VS IDE的开辟机情况中,翻开资源办理器 VS2005定位到: %systemroot%\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports VS2008定位到: %systemroot%:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5 在上述文件夹中找到CRRedist2005_x86.msi或CRRedist2008_x86.msi文件,在办事器上安置即可 水晶报表 Richard cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200802/469.html   SQL Server 2008引入了用于进步开辟职员、架构师和办理员的才能和服从的新功效。不但改良了包罗Transact-SQL语句、数据范例和办理功效,还添加了很多新特征,好比数据集乐成能,剖析办事,陈诉办事,以及Office集成等等,但大概它最为吸引人的地方在于引入了贸易智能。   SQL Server 2008是一个集数据仓储、剖析和天生报表功效为一身的可扩展的数据平台,提供应终端用户可以用来拜访和剖析贸易信息的壮大的和直觉东西,利用户可以:    ● 扩展用户的贸易智能办理方案的范畴,使其可以用于一切雇员。   ● 一致企业中一切数据的存储和拜访。   ● 创建和办理庞大的贸易智能办理方案。   SQL Server 2008并不是一款高不行攀的东西,经过与Office的深度集成,它为一切人提供了可用的贸易智能,使公司里一切层级的雇员都可以用他们可以了解和习气的方法,经过易用和功效壮大的东西看到和协助改动贸易实行。   别的,j9九游会可以看到SQL Server 2008新的特征如上面所示: 构成 形貌 SQL Server数据库引擎 为大型数据提供了一个可扩展的高功能的数据存储引擎。这为将企业的贸易数据兼并到一个用于剖析和天生报表的中间数据堆栈中提供了抱负的选择。 SQL Server集成办事 是一个用于提取、转换和加载(ETL)操纵的片面的平台,使得可以对你的数据堆栈举行操纵和与其同步,数据堆栈里的数据是从你的企业中的贸易使用所利用的伶仃数据源取得的。 SQL Server剖析办事 提供了用于联机剖析处置(Online Analytical Processing,OLAP)的剖析引擎,包罗在多维度的贸易量值收集和要害绩效目标(KPI),和利用特定的算法来区分形式、趋向和与贸易数据的联系关系的数据发掘办理方案。 SQL Server报表办事 是一个普遍的报表办理方案,使得很容易在企业表里创立、公布和发送细致的贸易报表。   与之前的版真相较,SQL Server 2008值得歌颂的地方包罗:   SQL Server 2008对用户的一切数据举行整合和办理:利用SQL Server 2008企业级的数据堆栈平台可以高效的利用用户的一切数据,并对其举行一致办理存储。   兼并用于最优的报表和剖析的数据:对用户一切的数据举行操纵,利用SQL Server 2008接纳任何用户盼望的方法与干系数据和非干系数据举行交互,包罗利用户无效的存储、办理和剖析无布局的数据——像文档和图片——的新的数据范例。   进步数据堆栈功能:更快的将数据整合到数据堆栈中,进步大型分区表的办理才能和功能,利用户更无效的办理不停增加的数据和用户的空间。   给一切用户提供一个片面的平台:利用可视化的导游和新鲜的东西在一个独自的情况中创建ETL、OLAP和报表办理方案,这个情况是设计用来进步开辟职员的消费力和减速对新的剖析和报表才能的使用。   进步开辟职员的消费力:利用SQL Server 贸易智能开辟套件提供的丰厚的可视化开辟情况,来开辟、测试和维护壮大、牢靠和可扩展的数据整合、报表制造和剖析办理方案。经过主动提醒潜伏题目来完成最佳的剖析使用。 低落办理用度:SQL Server 2008给数据库办理员提供了一个独自的一致办理东西,它可以提供一切SQL Server技能的集成办理,经过扩展SQL Server东西进步了消费力、机动性和可办理性。   掩护企业可扩展性:用户可以使用SQL Server 2008报表办事(SQL Server 2008 Reporting Services)高度可扩展的平台来无效的设计、办理和天生种种范围和种种庞大度的报表,并将这些报表在准确的工夫提供应公司内准确的用户。经过利用SQL Server 2008剖析办事提供的可视化cube设计东西和扩展了涵盖范畴的设计东西创建壮大的高功能办理方案,利用户的贸易智能进入下一阶段,利用户的剖析架构的开辟事情流程化。   使每一个用户都具有片面的洞察力:经过一个用于与Office协作的最佳的、可扩展的、开放的和内嵌的架构使每团体都拥有了丰厚的用户履历。   使终端用户具有了制造才能,并扩展了报表办法:经过使用新的Tablix报表设计联合静态和静态的行,以此来制造种种范围和种种庞大度的报表并进步机动性,Tablix报表设计使得曩昔很难或不行能设计得了的数据录制情况成为大概。进步终端用户的履历,并使用新的壮大的数据可视化东西将庞大的信息转化为丰厚的、图形化的和更容易了解的媒体文件。   经过熟习的东西扩展贸易洞察力:可以间接将报表制造成Excel和Word款式。这可以很容易的天生易了解的展望剖析提供应宽大的用户,使终端用户可以间接在熟习的Excel情况中使用剖析办事极端牢靠的数据发掘规矩。   经过以上SQL Server 2008的新特征以及其功效不丢脸出SQL Server 2008是一个可信托的、高效的、智能的数据平台。SQL Server 2008不但提供应公司可依托的技能和才能用于承受办理数据和给用户发送片面的洞察的应战,在要害范畴方面还具有明显的上风,它推出了很多新的特征和要害的改良,使得它成为至今为止的最壮大和最片面的SQL Server版本。 sqlserver2008 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200802/468.html ###Sun首席实行官乔纳森·施瓦茨(Jonathan Schwartz)在周二举行的新闻公布会中表现:“在我看来,收买MySQL是公司汗青上最紧张的一次收买.”施瓦茨表现,Sun付出了8亿美元现金和2亿美元股票完成了对MySQL的收买.   收买MySQL大概是Sun最紧张的一笔收买,但相对不是范围最大的一笔收买.2005年, Sun以31亿美元的代价收买了存储办事及办理方案提供商StorageTek.施瓦茨并未比力两笔收买,但却表示收买MySQL将具有更大的潜力.他说:“MySQL拥有普遍的用户底子,收买该公司有助于扩展Sun用户群.信赖没有几家公司可以提供像MySQL一样带来的机会.”   舒瓦茨表现,只管收买MySQL是公司收买开源软件厂商触及金额最高的一笔收买,但这将绝不是最初一次.MySQL首席实行官马顿·米克斯将出任Sun数据库部分初级副总裁,他将向Sun微体系软件实行副总裁里奇·格林(Rich Green)间接报告请示事情.   在已往五年里,MySQL是最为乐成的开放源代码软件公司之一,其数据库技能已普遍使用于环球各大网站,包罗Google、Facebook、百度和诺基亚等等.Sun表现,经过这一买卖,MySQL的数据库产品无望取得更多大企业客户,由于 Sun办事器和软件次要面向大企业.   与此同时,得益于Sun与IBM和戴尔等公司创建的精良互助同伴,MySQL产品的经销渠道将失掉进一步拓宽.对Sun而言,收买MySQL有助于该公司更好地为开放源代码网络使用平台LAMP提供支持.LAMP是Linux操纵体系、Apache网络办事器、MySQL数据库和PHP/Perl编程言语的首字母缩写.   Sun微体系不停是开放源代码软件的刚强支持者,该公司盼望经过这一形式从软件商业取得更多营收.在此之前,Sun不停为MySQL的竞争敌手PostgreSQL贩卖支持办事 sun mysql 收买 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200802/467.html 新浪科技讯 2月27日早间音讯,瑞星在其官方首页公布通告称,“瑞星在线杀毒2007”产品控件中存在某一宁静缺陷,黑客有大概使用该缺陷要挟用户电脑宁静,瑞星已晋级该控件,同时对用户致歉。   通告称,经确认的这一宁静缺陷将大概影响到“在线杀毒2007”和“在线查毒2007”办事用户,瑞星发起一切利用以上办事的用户尽快晋级更新该控件以消弭该隐患。   瑞星反病毒工程师表现,现在还没有监测到使用该宁静缺陷的病毒和木马,但在发明该题目后立刻晋级了该控件,并收回警示音讯。(俊炜)   以下为通告全文:   2008年2月26日瑞星宁静工程师确认,“瑞星在线杀毒2007”产品的控件中,存在一个宁静缺陷,黑客有大概使用该缺陷要挟用户的电脑宁静。瑞星公司提示一切利用瑞星“在线杀毒2007”和“在线查毒2007”办事的用户,尽快拜访瑞星在线杀毒办事页面,晋级更新该控件,即可消弭该隐患。   瑞星反病毒工程师表现,现在还没有监测到使用该宁静缺陷的病毒和木马,但承袭对用户卖力的态度,瑞星公司在发明该题目后立刻晋级了该控件,并收回警示音讯。   该宁静缺陷只针对“瑞星在线杀毒2007”和“在线查毒2007”的用户。   关于该题目给用户带来的方便,瑞星公司表现诚挚的歉意。 瑞星 杀毒软件 未知 自学编程网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200802/465.html 在开辟Web Control的时分,常常必要在源代码中嵌入一些HTML代码, 好比如许(代码片断): protected override void RenderContents(HtmlTextWriter output) { SPList myList = GetListByName(List); if (myList != null) { uint currentLanguageCode = getCurrentLanguageCode(); output.WriteBeginTag(ul); output.WriteAttribute(class, lng); output.WriteLine(HtmlTextWriter.TagRightChar); foreach (SPListItem item in myList.Items) { if (uint.Parse((string)item[Language Code]) != getCurrentLanguageCode()) { output.WriteBeginTag(li); output.WriteAttribute(class, (string)item[CSS Class]); output.WriteLine(HtmlTextWriter.TagRightChar); output.WriteBeginTag(a); output.WriteAttribute(href, ((Microsoft.SharePoint.Publishing.Fields.LinkFieldValue)item[Language URL]).NavigateUrl); output.WriteLine(HtmlTextWriter.TagRightChar); output.Write((string)item[Title]); output.WriteEndTag(a); output.WriteEndTag(li); } } output.WriteEndTag(ul); } } 这个控件的HTML会输入成相似如许: <ul class=lng> <li class=en> <a href=real-url-of-en>EN</a> </li> <li class=fr> <a href=real-url-of-fr>FR</a> </li> </ul> 但如许做有个题目,倘使j9九游会想改动这个web control的体现,好比把CSS Class从“lng” 改为“language”,那么j9九游会就必需要在这个代码内里修正,而且必要重新编译,如许就带来了极大的不利便。j9九游会必要一种可以不必要重新编译代码就可以改动HTML的办法。 这篇文章就介绍一种如许的办法,办理方案是XML + XSL 原理是,在下面办法中,j9九游会不间接卖力HTML输入,而是j9九游会构建一个XML文件在内存中,然后j9九游会必要本人编写一个XSL文件来界说这个XML的体现。  详细如许:(一共两步) 1。 改写下面办法为: protected override void RenderContents(HtmlTextWriter output) { SPList myList = GetListByName(List); if (myList != null) { try { XslCompiledTransform transformer = new XslCompiledTransform(); string s = SPUtility.GetGenericSetupPath(TEMPLATE\\LAYOUTS) + XslFileRelativeUrl; transformer.Load(s); StringWriter result = new StringWriter(); XmlDocument mydoc = BuildXML(myList); transformer.Transform(mydoc, null, result); output.WriteLine(result.ToString()); } catch (Exception ex) { Page.Response.Write(ex.Message); } } } 此中的BuildXML()办法为: // <languages> // <language title=EN code=1033 cssclass=en url=en-url /> // <language title=FR code=1036 cssclass=fr url=fr-url /> // </languages> public XmlDocument BuildXML(SPList myList) { if (myList != null) { XmlDocument doc = new XmlDocument(); XmlNode docNode = doc.CreateXmlDeclaration(1.0, UTF-8, null); doc.AppendChild(docNode); XmlNode languagesNode = doc.CreateElement(languages); doc.AppendChild(languagesNode); foreach (SPListItem item in myList.Items) { if (uint.Parse((string)item[Language Code]) != getCurrentLanguageCode()) { XmlNode languageNode = doc.CreateElement(language); XmlAttribute languageAttribute = doc.CreateAttribute(title); languageAttribute.Value = (string)item[Title]; languageNode.Attributes.Append(languageAttribute); languageAttribute = doc.CreateAttribute(code); languageAttribute.Value = (string)item[Language Code]; languageNode.Attributes.Append(languageAttribute); languageAttribute = doc.CreateAttribute(cssclass); languageAttribute.Value = (string)item[CSS Class]; languageNode.Attributes.Append(languageAttribute); languageAttribute = doc.CreateAttribute(url); languageAttribute.Value = ((Microsoft.SharePoint.Publishing.Fields.LinkFieldValue)item[Language URL]).NavigateUrl; languageNode.Attributes.Append(languageAttribute); languagesNode.AppendChild(languageNode); } } return doc; } else return null; } 2. 界说XSL文件: <?xml version=1.0 encoding=UTF-8 ?> <xsl:stylesheet version=1.0 xmlns:xsl= http://www.w3.org/1999/XSL/Transform > <xsl:output method=html encoding=UTF-8 indent=yes/> <xsl:template match=/> <ul class=lng> <xsl:for-each select=languages/language> <li class= {@cssclass }> <a href= {@url }> <xsl:value-of select=@title/> </a> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet> 如许就好了,当前想改HTML就间接改下面的XSL文件就可以了,再也不必重新编译了。并且如许做就把体现层的工具从代码中分散了,比力切合古代的软件设计头脑。 可以看到下面这个控件是在SharePoint中用的,但其头脑完全不范围于SharePoint xsl web 炎天的觉得 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200802/464.html 除了利用防火墙和杀毒软件,j9九游会还可以利用TCP/IP过滤来掩护j9九游会的盘算机。TCP/IP过滤可以容许特定的TCP和UDP端口大概IP协议毗连到用户的盘算机。 要设置装备摆设一个网络毗连的TCP/IP过滤,j9九游会可以遵照上面的步调: 1.在体系托盘中的网络毗连图标上右击,选择“形态”,如图1: 2.单击“属性”按钮,翻开网络毗连属性对话框,找到“网络”选项卡,单击Internet协议(TCP/IP): 3.单击属性按钮,翻开上面的窗口,如图2: 4.在上图中,单击“初级…”按钮,翻开“初级TCP/IP设置”对话框,单击“选项”选项卡。 5.在“可选的TCP/IP设置”标签下的选项中,单击“TCP/IP挑选” ,单击“属性”按钮,翻开如图所示对话框: 6.复选“启用TCP/IP挑选(一切适配器)”复选框。 7.关于每一个局部:TCP端口、UDP端口、IP协议,j9九游会只能选择“所有容许”或“只容许”。假如选择了只容许,就必要单击“添加”按钮来增长可以承受的端口或协议。假如你在任何工夫想改动主见,就必要选择端口,单击“删除…”按钮 tcpip 过滤 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200802/463.html ###一次和老总去用饭,等了很永劫间,饭菜却迟迟没有下去。 j9九游会俩都很气愤,这时分老总借景抒怀的说:“j9九游会做软件的时分,就象开饭馆一样,要只管即便满意”吃客“的要求,只管厥后,饭菜还比力适口,但由于等了老永劫间,当前j9九游会就再没有去过那家店。 作为一个步伐员,尤其是一个程度比力高的步伐员,他的头脑逻辑一样平常是比力笼统。而在设计软件的时分每每会呈现想固然的想法。好比,在脚色权限设计方面,一样平常状况,脚色权限可以分为两种1)针对行和列的权限战略,这种权限战略十分细致。2)针对模块的权限战略,这种权限战略比力广泛。只是限定对模块级另外拜访。两种办法个有千秋,不克不及说谁人好,谁人欠好,但假如在错误的情况下使用了错误的战略的话, 终极用户利用起来大概就比力费力。好比,在一个银行体系中,出纳可以检察客户的卡号和帐户余额,另有一些其他信息,而相对不克不及检察用户的暗码,此时假如接纳针对模块的权限,那完成起来就比力难。而关于相似给一个范围较小,职责比力会合的OA体系来说,假如接纳行,列受权,固然可以严厉包管体系的宁静性和操纵性,但如许的情况一样平常不会有专门的体系维护职员,而体系设置装备摆设起来,就大概比力贫苦。 这时分,j9九游会庞大的完成大概给客户带来的是繁琐和不解。最初相反会被一些复杂的体系所镌汰,就像java两头件内里,spring大有取代ejb趋向一样。异样是权限办理,在受权的时分,可以单一为脚色受权,另一种可以为脚色受权,也可以为独自用户受权,从完成来说,单一为脚色受权比力复杂,但在利用的时分,由于设置权限的办法比力单一,用户容易上手,某种情况下,大概比庞大完成的体系愈加受接待。 矫捷j9九游会宣言中有一句话:”响应变革,压服 遵照变革“。准绳中也有一项:”即便到了开辟的前期,也接待改动需求,矫捷历程使用变革来为客户发明竞争上风“,实在这些都是要求j9九游会以客户的需求来设计j9九游会的软件。假如能在遵照需求的底子之上,加上本人的履历,设计出即复杂,又满意功效要求的体系,那就更好了,但万万别单单评本人的直觉,设计出一些”切合步伐员的逻辑,不切合人类的逻辑“的步伐。如许,j9九游会大概很费力的,但用户还大概不喜好。 设计 需求 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200802/462.html 客户端和办事之间要可以举行乐成的通讯,并纷歧定要求通讯的两边都具有相反的范例,只必要通讯两边的范例具有等价的数据左券就可以了。假如Data Contract满意以下条件,j9九游会说它们是等价的: 1 具有相反的称号和定名空间 你可以经过DataContractAttribute的Name和Namespace属性指定(留意其值是巨细写敏感的)。缺省的定名空间是: http://schemas.datacontract.org/2004/07/Clr.Namespace 。(你也可以经过ContractNamespaceAttribute来为不包括delegate声明的整个模块或Assembly中的一切数据左券来修正此缺省值。)一样平常状况下缺省的数据左券称号是范例的称号,但假如是泛型范例的话,缺省的数据左券称号是由以下四局部顺次毗连构成: 1 泛型范例称号 2 Of 3泛型范例参数的数据左券称号(假如是多个参数就按参数次序顺次毗连) 4 依据泛型参数的数据左券的定名空间盘算出来的哈希值(假如泛型参数所有是根本范例的话,此局部疏忽)。 假如经过DataContractAttribute的Name属性来为泛型范例指定命据左券称号时,你可以在Name属性值中利用{0}来指定泛型的第一个参数的数据左券称号,{1}便是第二个泛型参数的,顺次类推。{#}表现经过泛型参数的数据左券定名空间盘算出来的哈希值。(注:必需要有{}哦) 2 包括相反的数据左券成员(留意其值是巨细写敏感>###数据左券成员缺省的称号是范例的字段或属性的称号。你可以经过DataMemberAttribute的Name属性来设置成你所盼望的值。 3 数据左券成员的次序必需>###数据左券成员的次序依照以下规矩举行顺次排序: 1 基类数据左券成员 2 DataMemberAttribute中不含Order属性的成员,依据数据左券成员的称号依照字母排序 3 DataMemberAttribute中含有Order属性的成员,先依照Order的次序排序,假如Order的属性值相反的依据数据左券成员的称号依照字母排序 左券 Contract LazyBee cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200802/461.html ###在.net1.0期间,在编写自界说控件时,想把js封装到控件中,把js文件和须要的文件签入到控件中去,怎样也做不出>### 终于到了2.0期间,微软替j9九游会想好了。但利用起来要留意几点。第一步,把js文件等文件拖入到Resource.resx资源办理窗口里,也便是让IDE静态的给j9九游会的资源在Resource.Designer.resx文件中参加办理代码。 第二步,要在j9九游会的步伐集里注册这些文件,可以在AssemblyInfo.cs注册,也可以在控件cs文件里定名空间外注册,注册的款式的例子>###[assembly: WebResource(TPI.Web.UI.WebSearch.Resources.jscript.js, text/javascript)] 熟习Attribute的一看就晓得,这是WebResourceAttribute类在起作用,它的结构函数>###public WebResourceAttribute (string webResource,string contentType),MSDN上对其参数的表明>### webResource:The name of the of Web resource>### contentType:The type of resource, such as image/gif or text/javascript. 关于这两个参数,contentType十分好了解,但webResource究竟是什么呢,我测试了下可有三局部>### webResource=步伐集的默许定名空间+绝对途径+文件名(包罗后缀),下面用颜色区分的便是。 第三步,怎样利用 到此j9九游会做了一样平常的处置,可以说第一步完成后,j9九游会可以用 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), jscript, Resource.JScript, true); 的办法失掉j9九游会想要的js,但它会write在html代码里,一给代码“添乱”,二倒霉于缓存加载。 因而j9九游会想在页面以 <script src=../JS/jscript.js type=text/javascript></script>方法加载, 于是才必要第二步的注册,找到办法 Page.ClientScript.RegisterClientScriptInclude(this.GetType(), jscript, Page.ClientScript.GetWebResourceUrl(this.GetType(), TPI.Web.UI.WebSearch.Resources.jscript.js)); 于是j9九游会发明页面里有了 <script src=/NonAcademic/WebResource.axd?d=18GnEWXiTaqo0-CNvFBU8OVJVEHyu4mE_KIPw9plZhwpxYWcW583j0-0wxZ_s2t2nrWYBrBdrkNjjrbA39IOcw2&t=633390378453593750 type=text/javascript></script> 正式j9九游会想要的。 但发明,js基本没有加载出去。为什么了? 这个题目困扰我多久,最初终于找出来,是个小题目,便是资源js文件有个属性“天生操纵”不停为“无”,把它置为“嵌入的资源”就行了。 增补,j9九游会方才谈到contentType,关于平凡的image/gif,text/javascriptj9九游会都比力熟习,但contentType的值许多,可以说控件可嵌入的资源 范例许多,图片,文本,视频等等。现归结一>###--------------------------------- .*=application/octet-stream .001=application/x-001 .301=application/x-301 .323=text/h323 .906=application/x-906 .907=drawing/907 .a11=application/x-a11 .acp=audio/x-mei-aac .ai=application/postscript .aif=audio/aiff .aifc=audio/aiff .aiff=audio/aiff .anv=application/x-anv .asa=text/asa .asf=video/x-ms-asf .asp=text/asp .asx=video/x-ms-asf .au=audio/basic .avi=video/avi .awf=application/vnd.adobe.workflow .biz=text/xml .bmp=application/x-bmp .bot=application/x-bot .c4t=application/x-c4t .c90=application/x-c90 .cal=application/x-cals .cat=application/vnd.ms-pki.seccat .cdf=application/x-netcdf .cdr=application/x-cdr .cel=application/x-cel .cer=application/x-x509-ca-cert .cg4=application/x-g4 .cgm=application/x-cgm .cit=application/x-cit .class=java/* .cml=text/xml .cmp=application/x-cmp .cmx=application/x-cmx .cot=application/x-cot .crl=application/pkix-crl .crt=application/x-x509-ca-cert .csi=application/x-csi .css=text/css .cut=application/x-cut .dbf=application/x-dbf .dbm=application/x-dbm .dbx=application/x-dbx .dcd=text/xml .dcx=application/x-dcx .der=application/x-x509-ca-cert .dgn=application/x-dgn .dib=application/x-dib .dll=application/x-msdownload .doc=application/msword .dot=application/msword .drw=application/x-drw .dtd=text/xml .dwf=Model/vnd.dwf .dwf=application/x-dwf .dwg=application/x-dwg .dxb=application/x-dxb .dxf=application/x-dxf .edn=application/vnd.adobe.edn .emf=application/x-emf .eml=message/rfc822 .ent=text/xml .epi=application/x-epi .eps=application/x-ps .eps=application/postscript .etd=application/x-ebx .exe=application/x-msdownload .fax=image/fax .fdf=application/vnd.fdf .fif=application/fractals .fo=text/xml .frm=application/x-frm .g4=application/x-g4 .gbr=application/x-gbr .gcd=application/x-gcd .gif=image/gif .gl2=application/x-gl2 .gp4=application/x-gp4 .hgl=application/x-hgl .hmr=application/x-hmr .hpg=application/x-hpgl .hpl=application/x-hpl .hqx=application/mac-binhex40 .hrf=application/x-hrf .hta=application/hta .htc=text/x-component .htm=text/html .html=text/html .htt=text/webviewhtml .htx=text/html .icb=application/x-icb .ico=image/x-icon .ico=application/x-ico .iff=application/x-iff .ig4=application/x-g4 .igs=application/x-igs .iii=application/x-iphone .img=application/x-img .ins=application/x-internet-signup .isp=application/x-internet-signup .IVF=video/x-ivf .java=java/* .jfif=image/jpeg .jpe=image/jpeg .jpe=application/x-jpe .jpeg=image/jpeg .jpg=image/jpeg .jpg=application/x-jpg .js=application/x-javascript .jsp=text/html .la1=audio/x-liquid-file .lar=application/x-laplayer-reg .latex=application/x-latex .lavs=audio/x-liquid-secure .lbm=application/x-lbm .lmsff=audio/x-la-lms .ls=application/x-javascript .ltr=application/x-ltr .m1v=video/x-mpeg .m2v=video/x-mpeg .m3u=audio/mpegurl .m4e=video/mpeg4 .mac=application/x-mac .man=application/x-troff-man .math=text/xml .mdb=application/msaccess .mdb=application/x-mdb .mfp=application/x-shockwave-flash .mht=message/rfc822 .mhtml=message/rfc822 .mi=application/x-mi .mid=audio/mid .midi=audio/mid .mil=application/x-mil .mml=text/xml .mnd=audio/x-musicnet-download .mns=audio/x-musicnet-stream .mocha=application/x-javascript .movie=video/x-sgi-movie .mp1=audio/mp1 .mp2=audio/mp2 .mp2v=video/mpeg .mp3=audio/mp3 .mp4=video/mpeg4 .mpa=video/x-mpg .mpd=application/vnd.ms-project .mpe=video/x-mpeg .mpeg=video/mpg .mpg=video/mpg .mpga=audio/rn-mpeg .mpp=application/vnd.ms-project .mps=video/x-mpeg .mpt=application/vnd.ms-project .mpv=video/mpg .mpv2=video/mpeg .mpw=application/vnd.ms-project .mpx=application/vnd.ms-project .mtx=text/xml .mxp=application/x-mmxp .net=image/pnetvue .nrf=application/x-nrf .nws=message/rfc822 .odc=text/x-ms-odc .out=application/x-out .p10=application/pkcs10 .p12=application/x-pkcs12 .p7b=application/x-pkcs7-certificates .p7c=application/pkcs7-mime .p7m=application/pkcs7-mime .p7r=application/x-pkcs7-certreqresp .p7s=application/pkcs7-signature .pc5=application/x-pc5 .pci=application/x-pci .pcl=application/x-pcl .pcx=application/x-pcx .pdf=application/pdf .pdf=application/pdf .pdx=application/vnd.adobe.pdx .pfx=application/x-pkcs12 .pgl=application/x-pgl .pic=application/x-pic .pko=application/vnd.ms-pki.pko .pl=application/x-perl .plg=text/html .pls=audio/scpls .plt=application/x-plt .png=image/png .png=application/x-png .pot=application/vnd.ms-powerpoint .ppa=application/vnd.ms-powerpoint .ppm=application/x-ppm .pps=application/vnd.ms-powerpoint .ppt=application/vnd.ms-powerpoint .ppt=application/x-ppt .pr=application/x-pr .prf=application/pics-rules .prn=application/x-prn .prt=application/x-prt .ps=application/x-ps .ps=application/postscript .ptn=application/x-ptn .pwz=application/vnd.ms-powerpoint .r3t=text/vnd.rn-realtext3d .ra=audio/vnd.rn-realaudio .ram=audio/x-pn-realaudio .ras=application/x-ras .rat=application/rat-file .rdf=text/xml .rec=application/vnd.rn-recording .red=application/x-red .rgb=application/x-rgb .rjs=application/vnd.rn-realsystem-rjs .rjt=application/vnd.rn-realsystem-rjt .rlc=application/x-rlc .rle=application/x-rle .rm=application/vnd.rn-realmedia .rmf=application/vnd.adobe.rmf .rmi=audio/mid .rmj=application/vnd.rn-realsystem-rmj .rmm=audio/x-pn-realaudio .rmp=application/vnd.rn-rn_music_package .rms=application/vnd.rn-realmedia-secure .rmvb=application/vnd.rn-realmedia-vbr .rmx=application/vnd.rn-realsystem-rmx .rnx=application/vnd.rn-realplayer .rp=image/vnd.rn-realpix .rpm=audio/x-pn-realaudio-plugin .rsml=application/vnd.rn-rsml .rt=text/vnd.rn-realtext .rtf=application/msword .rtf=application/x-rtf .rv=video/vnd.rn-realvideo .sam=application/x-sam .sat=application/x-sat .sdp=application/sdp .sdw=application/x-sdw .sit=application/x-stuffit .slb=application/x-slb .sld=application/x-sld .slk=drawing/x-slk .smi=application/smil .smil=application/smil .smk=application/x-smk .snd=audio/basic .sol=text/plain .sor=text/plain .spc=application/x-pkcs7-certificates .spl=application/futuresplash .spp=text/xml .ssm=application/streamingmedia .sst=application/vnd.ms-pki.certstore .stl=application/vnd.ms-pki.stl .stm=text/html .sty=application/x-sty .svg=text/xml .swf=application/x-shockwave-flash .tdf=application/x-tdf .tg4=application/x-tg4 .tga=application/x-tga .tif=image/tiff .tif=application/x-tif .tiff=image/tiff .tld=text/xml .top=drawing/x-top .torrent=application/x-bittorrent .tsd=text/xml .txt=text/plain .uin=application/x-icq .uls=text/iuls .vcf=text/x-vcard .vda=application/x-vda .vdx=application/vnd.visio .vml=text/xml .vpg=application/x-vpeg005 .vsd=application/vnd.visio .vsd=application/x-vsd .vss=application/vnd.visio .vst=application/vnd.visio .vst=application/x-vst .vsw=application/vnd.visio .vsx=application/vnd.visio .vtx=application/vnd.visio .vxml=text/xml .wav=audio/wav .wax=audio/x-ms-wax .wb1=application/x-wb1 .wb2=application/x-wb2 .wb3=application/x-wb3 .wbmp=image/vnd.wap.wbmp .wiz=application/msword .wk3=application/x-wk3 .wk4=application/x-wk4 .wkq=application/x-wkq .wks=application/x-wks .wm=video/x-ms-wm .wma=audio/x-ms-wma .wmd=application/x-ms-wmd .wmf=application/x-wmf .wml=text/vnd.wap.wml .wmv=video/x-ms-wmv .wmx=video/x-ms-wmx .wmz=application/x-ms-wmz .wp6=application/x-wp6 .wpd=application/x-wpd .wpg=application/x-wpg .wpl=application/vnd.ms-wpl .wq1=application/x-wq1 .wr1=application/x-wr1 .wri=application/x-wri .wrk=application/x-wrk .ws=application/x-ws .ws2=application/x-ws .wsc=text/scriptlet .wsdl=text/xml .wvx=video/x-ms-wvx .xdp=application/vnd.adobe.xdp .xdr=text/xml .xfd=application/vnd.adobe.xfd .xfdf=application/vnd.adobe.xfdf .xhtml=text/html .xls=application/vnd.ms-excel .xls=application/x-xls .xlw=application/x-xlw .xml=text/xml .xpl=audio/scpls .xq=text/xml .xql=text/xml .xquery=text/xml .xsd=text/xml .xsl=text/xml .xslt=text/xml .xwd=application/x-xwd .x_b=application/x-x_b .x_t=application/x-x_t .net2.0 控件 资源 未知 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200802/460.html ###在这篇专栏里,j9九游会将从开辟者的角度来探究SQL Server内存办理内情。 便是说,j9九游会将讨论SQL Server利用API和操纵体系功效办理内存的方法及其事情原理。经过这种方法探究一个产品,将有助于j9九游会了解产品开辟者的思绪,以及他们设计的利用办法。 了解一个产品的事情原理和它的设计用处,是掌握这个产品的关>###;9九游会将从底子的Windows内存办理根本原理介绍开端。和一切32位Windows使用步伐一样,SQL Server利用Windows内存办理功效分派、开释、办理内存资源,它挪用Win32内存办理API函数,与操纵体系提供的内存资源举行交互。 由于SQL Server中简直一切的内存分派都利用假造内存(不是内存堆),因而绝大局部内存分派代码终极都是经过挪用Win32的VirtualAlloc大概是 VirtualFree函数完成。SQL Server挪用VirtualAlloc预留、提交假造内存,挪用VirtualFree开释假造内存。 假造内存与物理内存 在x86系列处置器上,Windows为一切历程提供一个4GB假造内存事情空间。用假造这个词,意思是这个内存并不是通常意义上的内存,它只是一个地点范畴,并没有和物理存储单位联系关系在一同。当历程哀求内存分派时,这些地点空间才被利用,和详细的物理存储单位联系关系起来。但是这些物理存储单位并纷歧定是物理内存,它通常大概是磁盘空间,确切的说,是操纵体系的分页文件(System Paging Files)。 这便是为什么多个使用步伐可以同时运转在一个128M内存的体系上,每个使用步伐都有一个4GB的假造内存地点空间--它不是真正的内存,但对使用步伐来说可以了解为内存。Windows通明的处置分页文件(paging files)的数据互换,使使用步伐可以利用的内存可以凌驾呆板的实践物理内存,并使使用步伐可以公正的存取呆板的物理内>###这个4GB的地点空间被分红两局部:用户形式(user mode)局部和内核形式(kernal mode)局部。默许状况下,每个局部的巨细为2GB,在Windows NT系列的操纵体系上,可以经过BOOT.INI中的开关来改动这个默许设置(Windows NT, Windows 2000, Windows XP和Windows Server 2003属于Windows NT系列,Windows 9x和Windows ME不属于)。 物理内存 假造内存 未知 zxbc ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200802/459.html ###形式到明天曾经20年汗青了, 尤其是GoF形式, 更普遍被各人熟知, 这些形式就像武侠小说里的招式, 什么时分该利用什么招式, 徒弟们只能平常而谈, 准确的判别必需由我本人的做出. 当前会介绍些本人的浮浅履历, 并和各人讨论, 只是不晓得怎样写起; 无论你是存在题目, 照旧曾经有了本人的回答, 都可以给我留言; 关于前者我不见得会立刻复兴, 但对我怎样去写有很大启示. 在这里先整理一些有疑问的利用方法, 作为将来的素材. 职责链利用情形一: 原帖 在表达我的想法之前, j9九游会先优化一下作者原来的代码中如下局部, 固然这些优化中有一些关于真正的职责链形式是错误的, 而在这状况下利用链表是存在很大疑问的, 但j9九游会假如不拘泥于职责链称呼, 也不思索利用链表的公道性, 则这些优化可以看成一次重构的展示: 工具一: if (变量 == 信息一) 某操纵 else if (存在下一个工具) 下一工具.实行() else 默许操纵 工具二: if (变量 == 信息二) 某操纵 else if (存在下一个工具) 下一工具.实行() else 默许操纵 ... ... 这是什么? 这便是反复, 这种反复假如混进代码里每每没有那么分明; 先把最分明的局部搞失吧: public class BasicHttpBindingConstraint:BindingConstraint { public override bool Constraint(ServiceEndpoint endpoint) { if (endpoint.Binding.Name == BasicHttpBinding) { //原>###} return base.Constraint(endpoint); } } 判别能否有下一个等等写入基类, 照旧原来那些代码. 如许重构的利益除了消弭了代码反复, 原文中两个protected的字段, 也不必再向完成类表露, 做到了更好的信息隐蔽. 但真的没有反复了吗? 看看这句: if (endpoint.Binding.Name == BasicHttpBinding), 此中变革的只要引号外部的局部, 其他的照旧反复. 同时, 每一个完成类, 固然不必写else了但base.Constraint(endpoint)却得Copy&Paste一遍. 接上去j9九游会这么干一下基类: public abstract class BindingConstraint//:IEndpointConstraint { #region protected fields //只需是field, 最好连protected也不要. #endregion private BindingConstraint m_bindingConstraint; //与原来相比, private做到了更好的信息隐蔽 private bool m_hasNextConstraint = false; #region public methods public void AddConstraint(BindingConstraint constraint) { m_bindingConstraint = constraint; m_hasNextConstraint = true; } public bool Constraint(ServiceEndpoint endpoint) //留意, 不再abstract了 { if (BindingConstraintName == endpoint.Binding.Name) { return DoConstraint(endpoint);//留意, 这么优化是不合错误的, 见前面关于职责链的>###} else { if (m_hasNextConstraint) { return m_bindingConstraint.Constraint(endpoint); } else { return false; } } } #endregion #region public abstract methods //新增了两个 protected abstract bool DoConstraint(ServiceEndpoint endpoint); protected abstract String BindingConstraintName { get; } #endregion } 依据传说中的单一职责, 作为完成的子类, 无需再卖力链表的相干事情, 只需管本人干嘛, 并提供本人卖力事变的代号, 就可以了. 但我要阐明的是, GoF的代码例子, 是我和以后例子的作者的谁人两头值: 第一次优化后谁人后果; 为什么呢? 第一次优化后, base.Constraint(endpoint)这个, 还可以不实行, 如许j9九游会就有了一个时机, 界说默许操纵, 乃至将职责链本来的链条改动, 引导到别的一个职责链上去. 请各人留意这个现实: 利用base.Constraint(endpoint)的办法, 增长了反复, 但换到了机动性; 也便是说, 只需是丧失的, 必需换来别的的工具, 不然回家咱妻子也不干啊不是. 只是针对这个例子, 把去优化它两次没啥题目, 不外仍旧可以看作吃饱了撑的没事干, 独一的作用便是特地就问这么一个事变: 信息隐蔽完善, 没有反复, 利用优雅, 对扩睁开放, 统统切合教科书上种种准绳的代码. 就肯定是准确的代码吗? 该文作者利用链表作设计, 无可厚非, 终究, 他到达了他想要的目标; 但实在这种用法, 存在着一个的题目: 链表上每一个工具, 都要保管着上一个工具的援用, 从接到哀求, 到有一个工具呼应, 两头有几多个工具, 就有几多个废开支. 有开支没有题目, 题目是开支换来的是什么? 该文作者总结到: 援用(错误!见后)利用职责链形式必需恰如其分[qià rú qí fèn],不然会成为形式滥用的背面课本。依据我对职责链形式的了解,可以认定只需同时切合下列三个条件,就可以引入职责链形式: 1、当一个办法的传入参数将成为分支语句的判别条件时; 2、当每一个分支的职责绝对独立,且逻辑较为庞大时; 3、当分支条件存在扩展的大概时。 我的见解是, 根本上打到靶子外去了. 那些大概发生的开支, 实在是白白捐躯了还被扣了个废的帽子; 勤劳事情的CPU, 被我一个初学者硬生生的钉上了贪污和糜费, 是极大的犯法的汗青的羞耻柱. j9九游会这次支付, 不像下面GoF的老大们选择的不优化, 反而像谈爱情, 大把的白花花的银子花出去, 最初只比及一张坏人卡~ 好比用Strategy形式完成, 还是可以失掉这些利益. 好比该文作者的例子: 1. 创立一个类作为实行者, 实行者中持有一个保寸字符串和IBindingConstraint的字典(好比Dictionary, HashTable); 2. 这个字典的初始化, 既可以用原来Add的方法, 也可以经过一个设置装备摆设文件初始化; 3. 完成一个Execute, 依据endpoint.Binding.Name从字典取出IBindingConstraint, 并实行Constraint; 4. 利用时挪用: 保举者.Execute(endpoint). 很显然, 如许的做法, 不光有更小的开支, 也有更少的代码, 同时拥有更公道的布局. 在这里我要盛大的提示各人留意利用字典, 这种方法固然不入GoF 23种形式风雅之堂, 倒是n多大牛/大嘴保举的万灵丹. 对字典的利用也有一个普遍学名, 叫做表形式(照旧什么来着? 忘性欠好...). 固然就针对以后的讨论所针对的题目来说, j9九游会也可以把它了解为战略形式的一个使用. 为什么说这种方法更公道呢? 让j9九游会来看一下原文作者所说的三条, 其模子究竟是什么样的: 信息1 -> 历程或工具一 信息2 -> 历程或工具二 .... SELECT 工具 FROM 某处 WHERE 信息 = @变量, 查表, 光秃秃[guāng tū tū]的查表! 职责链呢? 作为一个设计形式, 仅仅是针对查表然后实行算法, 那战略形式早就对这个抢饭碗的提支持意见了. 现实上职责链究竟是干嘛地的呢? 搞明白这个题目, 就可以判别真正的职责链在这里是不是符合, 大概原文作者利用链表的方法, 能否是职责链所掩盖的范围了. DP955.1 CHAIN OF RESPONSIBILITY 1. 意图 使多个工具都无机会处置哀求...... 2. 念头 思索一个图形界面中上下文有关的协助机制.....假如关于那一局部界面没有特定的协助信息, 那么...表现一个关于以后上下文的较一样平常的协助信息, 好比说..... 因而很天然地, 应依据广泛性即从最特别的到最平凡的次序来构造.. 3. 实用性 有多个工具可以处置一个哀求, 哪个工具处置一个哀求运转时候主动确定. ... ... 找啊找啊找冤家, 找到一个女冤家~ 没错, 职责链说的便是这个事: 你了解一个分外精彩的女人, 你跟她说, 做我马子吧, 假如她赞同了, 天然好; 假如她说, 你就像我哥哥, 于是你说了, 既然我是你哥哥, 你得帮哥哥介绍一个吧? 她为了尽快开脱你, 把一个比她差点的冤家介绍给了你, 然后你说, 做我马子吧... 云云下去, 直到有一团体承受你为止. 有一个题目j9九游会要想到: 假定谁人分外精彩的女人是A, 她那天恰好想到的冤家是B, 你就去给B费钱了; 假如想到的是C, 那你便是给C费钱; 同时, B假如差别意, 大概会给你C的德律风, 大概会给你D大概E的德律风. 而BCDE都有大概承受你. 也便是说, 谁把你吸收了是纷歧定的, 但总有一个能吸收你, 固然这里假定你是个女人就行, 换个说法, 你是无要求的, 呼应者是不牢固的. 将Gof的例子抽象化, 想像一切的工具都是卡片, 叠在一同 如下: -- ------ -------------- -------------------- 从正上方看, 是一个窗口立体, 最顶层的谁人地区是某种Widget1, 上面一种是 Widget2, 再上面一种是Widget3, 最底下是4, 记着, 全都是差别的class, 承继自一个Handler. 当j9九游会用小问号点击Widget1地点地区的时分, 假如Widget1含有协助信息, 就表现Widget1的, 假如没有, 就表现Widget2的以此类推. 固然, 真实的例子不会这么摆, 只会比这个更庞大, 从最底层的工具开端, 往上根本是一个树状的样子. j9九游会可以以为下面的图, 是这棵树某一个分支, 恰好就这么复杂. j9九游会换一个放法: Widget1上面是Widget7, Widget3, Widget9(按次序), 也便是说, 步队基本差别了; 寻觅的历程仍旧类似, 只是终极表现的协助信息有大概纷歧样. 为什么呢? j9九游会思索一个控件: Label. Label自己一样平常没有协助, j9九游会把它放入Widget2里, 它假如被点击了, 其结果和点击Widget2应该是一样的; 换成Widget7假如Widget7有协助, 就应该表现Widget7的协助. 但假如恰好Widget7也没有协助呢? 就表现Widget3的呗, 由于Label既然是Widget7的一局部, 显然也是Widget3的一局部; Widget7本人被点击, 表现的也是Widget3的协助. j9九游会必要看到的是: Widget7和Widget3, 表现协助的方法大概完全差别, 这缘故原由并非由于Widget7对应了一个既定的传入信息而Widget3对应了别的一个, 而是由于Widget的绘图方法大概和Widget3差别; 即这种差别不是对应于内部工具, 而是职责链上工具自己的特征所确定的. 这就决议了, 在运转时, 关于某一信息, j9九游会改动了这一信息的处置方法. 没人处置的方法一样平常也不是前往false, 而是交给终极的一个DefaultHandler, 做默许操纵; 这外表看跟间接前往没啥区别, 每次还必需将DefaultHandler接离职责链尾端, 但本质上包管了处置方法的一致. 别的, GoF的例子中, 一个工具能否呼应职责链, 也是不牢固的, 这话看着和下面反复, 实在这是另一个不牢固: 任何一个从基类承继上去的工具, 好比下面这些Widget, 假如它被设置了协助, 当它被点击就会呼应, 假如没有设定协助(默许值), 就应该由它通报给更上层的一个. 这个状况下Widget7呼应这个哀求, 另一个状况大概就不呼应了, 这只和能否给Widget7设置了协助文本有关. 即: 判别是不是呼应的条件, 并非传入工具持有的信息(现实上GoF的例子基本没有传入工具), 而是由职责链上的工具本人持有的信息来确定.在GoF的说法里, 十分要害的一个词, 便是上下文相干, 这才是职责链的精华地点, 而通报这一情势, 仅仅是详细做法而已. 最初, 思索这个窗口立体的例子, j9九游会用小问号点击的Widget, 纷歧定是处于链表头的工具, j9九游会的点击可以落在链表中任何一层上任何一个工具所对应的范畴内, 以是链表中每一个工具都肯能并且可以成为入口. 依照原文例子的用法, 一切的哀求都只能从链表头也便是最下层出来, 这和DP95上所形貌的意图和布局完全不符, 在GoF形貌的职责链功效和用法中, 每一个详细子类都大概呼应哀求, 这是由输出静态决议的, 假如只重新部出来, 只禁绝哪个不应卖力的工具就举行了不准确呼应: 好比点击的Widget3, 哀求却让Widget1给截获了. 差别的子类, 只是举动差别, 而不代表该子类从基本上只可以处置它对应的信息, 不克不及处置别的信息, 即不存在(信息1 --> 举动1)如许的对应干系; 每一个举动都应该可以处置恣意一种信息, 子类改动的就只是处置方法, 而究竟哪一个用什么方法处置, 则是静态的依据形态决议的. 正是由于j9九游会不晓得某一工具, 能否会处置这个信息, 以是j9九游会就无法使用表形式, 如许就必要职责链形式来办理.这才是23种而不是22种设计形式的缘故原由. 好比如许的情势: XxxBindingConstraint x = new XxxBindingConstraint(); x.SetParent(previousBindingConstraint); x.AddNames({Basic, WS, xxx.}); 很显然, 假如如许修正原文的例子, 固然每个工具都能呼应哀求了, 却不克不及准确实行: 但由于其设计目标缘故, 好比Basic对应的完成只并不卖力处置WS, 只能等着抛出非常, 基本不就不切合这个意义: DP95第五章扫尾 Chain of Responsibility(5.1)....,依据运转时候状况任一候选者都可以呼应响应的哀求. 关于从链条两头开端呼应哀求却是不必要改, 只是这一举动基本无法做出: 由于这个设计从基本上讲只可以重新部遍历到谁人属于他的真命天女, 而并非由运转时输出所指定的谁人开端找一个最符合的工具. 以是j9九游会可以说, 这个例子只是徒具链表的情势, 却基本没有思索链表更合适哪些状况, 在那些状况下怎样发扬正面作用的; 无论这一设计完成的何等完善, 它相比别的选择, 更多的是担负了不应有的负面结果. 抛开是不是明确或曲解了什么设计形式如许毫无紧张性的事变, 这在我看来就像在已往常常提到的, 是缺乏对事物的准确剖析的缘故. 这一条件, 才是做出精良设计的独一条件, 哪怕你都不晓得设计形式是啥, 乃至连面向工具几个字怎样写都不晓得. 多说一句, 关于GoF的例子, 实在也存在着许多粗陋之处(过于复杂就不算了); 好比是不是HasHelp, 由基类提供一个办法判别, 但假如HasHelp()传回false, 由我们完成的子类来转发. 这个模子发生了一个纷歧致性: 假如基类的HasHelp()以为没有Help, 但实在你基本没有效基类这个逻辑, 依照子类的逻辑是有Help的以是你就间接呼应了呢? 于是为了消弭这个纷歧致性, j9九游会完成子类时就不得不给基类提供信息, 这就大概会增长不用要的繁文缛节. 只是这些不完善, 可以了解为示例的不严谨, 总体来说是没有任何大的毛病的. 再看看原帖作者的例子: 每一个传入的工具, 有一个明白的吸收者; 链上除这个明白吸收者之外的别的工具, 绝不会处置哀求, 而这个明白的吸收者, 能否处置某哀求这一要素是牢固的. 也便是说, 链上假如没有这个明白的吸收者, 该哀求不会被处置; 而不是由于链上的吸收者们在运转时候依据详细状况判别能否呼应这个哀求, 从而改动呼应哀求所实行的举动. 如许的用法, 半点职责链的独占利益也得不到, 只能说形似职责链, 实则表形式, 并且由于是链表, 就酿成了包袱职责链开支的战略形式. 怪怪设计形式第一反律: 可以找出对应干系的, 不要利用链表, 假如硬以通报的方法成链, 也不克不及叫做职责链, 只能叫做工具链表. 职责链是一根链上每一关键皆可呼应, 但纷歧定呼应; 不是只要一个牢固呼应, 别的卖力通报; 归根结底, 是整条链无机的卖力一个呼应一个哀求, 而不是一个链表中某一工具一团体在战役, 职责是链的职责而不是某一工具的职责. 不然这条链除了由于传统链表的通报而增长了包袱又有何意义? 什么时分该用职责链, 请本人思索, 但j9九游会完全可以做出什么时分不要利用职责形式的判别: 1、当一个办法的传入参数将成为分支语句的判别条件时; 2、当每一个分支的职责绝对独立,且逻辑较为庞大时; 3、当分支条件存在扩展的大概时。 总而言之, 只需你瞥见分支二字, 请不要利用职责形式. j9九游会深化一下这个题目的本质的话, 就会发明, 由于谁对谁呼应这个对应干系, 是在运转之前就确定的, 以是最合适的方法是利用表形式. 由此j9九游会可以得出: 怪怪设计形式第一推行: 可以找出对应干系的, 优先思索表形式; 瞥见分支二字, 优先思索战略形式. 最初j9九游会再看一下原作者的最佳理论: 援用(错误! 见后)1、应只管即便将职责链形式的笼统界说为笼统类,而不要界说为接口。如许有利于一些大众逻辑的重用。 2、应在完成职责链形式的同时,提供创立职责链的工场类。 关于1, GoF现在是笼统类, 但实在接口并不是不行以. 假如你想细究这个题目, 可以看下面关于GoF例子瑕疵的讨论, 来思索父类会合操纵有多粗心义. 但记着请先翻DP95, 理解明白谁人例子. 有没有笼统类, 要害还在于笼统类合分歧适: 怪怪第一哲学定律: 统统决议都是互换. 假如你大众操纵许多, 那你就支付笼统类站位的价钱(提醒:DP95的代码是C++, 可以多承继); 假如你的别的设计必要基类, 就要支付打字的价钱. 这两者可以兼得吗? 回答见文章末端正文一. 关于2, 完全不靠谱. DP95上说的十分明白, 职责链要办理的一个题目便是, 链条上单位的静态改动. 拿下面的Widget的例子来说, 岂非j9九游会应该为每种差别分列次序, 都搞个工场办法? 差别种别的Widget们只需能相互嵌套, 其分列组合有几多是可以预期的. 别的, 真正的职责链, 吸收哀求的工具可以是链条中的任何一个详细子类, 而用了Factory, j9九游会只能重新部传入信息, 职责链本来具有的举动就不正常了, 讨论见下面Widget那局部. 在文章末端, 我想严峻的说两句多余的话: 我不停在号令的是, 假如作者们不确定本人的了解, 请思索对博文读者的影响有多大大概性是坏的; 写工具时, 也不要太甚自大, 如清规戒律[qīng guī jiè lǜ]; 不如以发问的办法说, 好比: 我是如许想的, 各人看对不合错误? ; 更不要发急在失掉验证前, 任意将本人的文章放传达到更普遍的地方上去, 把炸弹酿成原子弹. 不外我仍旧以为, 明天这块板砖有点太大了, 由于我拿一本设计形式册本的作者看成了例子. 我想这篇文章是dudu都不肯看到的(君子之心度小人之腹), 终究该作者的大作属于博客园系列. 我实在十分夷由发不发该文, 由于说真实的, 他人对设计形式会不会曲解, 和我一样的初学者会不会受误导, 跟我有屁干系? 我又不因此技能宣传为生活手腕的, 何况假如我计划写书, 我害怕这篇文章连出书商都不肯意看到; 我害怕他们更乐意的是他人本人写本人的, 别触及他们的作者的文章; 哪个出书商会对没事冒犯人的人感兴味? 我之以是认识到这些题目, 却没有去换个例子, 也有思索: 我不停倡导的是, 无论谁写的是黑纸白字几十块一本, 照旧任意讨论瞎说几句, 各人最好都本人思索后再说; 从这个意义上讲, 原文作者的状况作为例子却是最符合的. 且不说招一大片人恶感的题目, 作为一个软件从业职员和潜伏竞争敌手, 对我来说, 他人走越多弯路, 是不是对我越无益呢? 我偶然会思索这个题目, 也盼望失掉各人的回答. ---------------------------------------- 正文一: 我的回答是可以; 这必要分外的学习和内部条件, 和引入一个新形式, Gasket, 即垫片形式; 这个形式也要互换从而支付很大的价钱:该形式有分散的特征, 招致你写步伐方方面面有彻底的变革, 乃至是没有打仗过的方法; 以是也要下工夫学许多新工具. P.S. 不必Baidu和Google了, 该形式是我自娱自乐的一个野途径, 在颠末我本人严厉查验前, 不计划宣布(并且关于许多顽固的人而言一定不肯意支付某些价钱去互换), 先卖个关子吧. 形式 未知 cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200802/458.html ###办事器为Oracle 9i,NHibernate利用NHibernate.Driver.OracleDataClientDriver(Oracle.DataAccess.dll,利用ODTwithODAC1020221这个版本安置。由于正式摆设计划用Oracle 10g,以是客户端NHibernate用了这个驱动,别的也是为了制止System.Data.OracleClient.dll操纵Clob/Nclob时的题目),连续发明不少奇异的题目。不明白是这个驱动跟Oracle 9i之间的兼容性形成照旧别的缘故原由,不外终极根本都办理了。 1. 明天办理了2本性能方面的题目,缘故原由都这天期范例的字段形成。 1.1 第一个盘问是对一个60多万的表实行单表盘问,有一个日期字段建了索引,盘问会利用这个日期字段。一开端盘问很慢,估量是NHibernate天生的SQL语句没有利用到索引(把日记中的SQL语句拿出来剖析,盘问方案中表现是利用了索引的)。办理办法是依照利用NHibernate, Oracle Clob/NClob无法拔出、乱码题目的方法创立一个用户自界说日期范例,将IDbCommand中对应参数的OracleDbType设置为OracleDbType.Date,然后在NHibernate中把日期字段设置装备摆设为这个范例。如许盘问就能利用到索引了。 1.2 跟第一个题目根本相似。 也是一个盘问,触及到多个表的联系关系,有个表数据400多万。异样估量是一个日期字段的索引没有发扬作用而招致的低效(异样,SQL语句抓出来用盘问方案剖析,表现索引是利用上了),但依照1.1中的办法之后照旧不起作用。独一差别之处是1.1用的ICriteria,而这个盘问用的是IQuery。 办理办法是把sql改成相似b.CreateDate>to_date(:startDate, ’YYYY-MM-DD’)这种情势,然后利用IQuery.SetString()办法而不是IQuery.SetDateTime(),如许就OK了。 第一个题目还好了解,假如参数范例没有设置准确无法使用索引,比力正常,但这个办法无法运用在第二个相似的题目上就比力隐晦了。 2. 用Oracle.DataAccess 10.2这个版本挪用Oracle 9i的Function/Procedure时题目比力多。 2.1 正常状况下挪用该当是这个样子: OracleConnection con = new OracleConnection(connection string); con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = function / procedure name; cmd.Parameters.Add(new OracleParameter(param name, OracleDbType.Double).Value = 12.1); int effectedRows = cmd.ExecuteNonQuery(); con.Close(); 但在Oracle 9i上函数或存储历程声明的参数范例为Number(老体系的工具,不敢窜改),而ODAC 10.2的OracleDbType是没有Number这个范例的,把参数设置成OracleDbType.Double、OracleDbType.Decimal等种种范例,均报错无法转换成数字范例。 只要改成上面这种方法才干乐成挪用: OracleConnection con = new OracleConnection(connection string); con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = @ Declare v_value Number; Begin v_value:=function or procedure name(:p1, :p2, :returnValue); End;; cmd.Parameters.Add(new OracleParameter(p1, OracleDbType.Double).Value = 12.1); cmd.Parameters.Add(new OracleParameter(p2, OracleDbType.Varchar2).Value = Test); cmd.Parameters.Add(new OracleParameter(returnValue, OracleDbType.Int32, ParameterDirection.Output).Value = 0); int effectedRows = cmd.ExecuteNonQuery(); con.Close(); if (cmd.Parameters[2].Value != null && cmd.Parameters[2].Value != DBNull.Value) { int returnValue = Convert.ToInt32(cmd.Parameters[2].Value); /*....*/ } 2.2 假如Function/Procedure有out型的参数,参数范例为Varchar2等字符串型的,必需指定参数的Size属性,不然报缓冲区溢堕落误。 3. 极一般的状况下,客户端曾经把一条数据删除了,用SQL盘问数据库的确查不到这条数据,但NHibernate仍旧可以获取到这个工具。 确认NHibernate没有开二级缓存;确认NHibernate有向办事器提交这个SQL语句,跟踪到NHibernate,在实行DbCommand盘问时天生的SQL语句准确,参数设置准确,日记中记载的这些也是准确的,但NHibernate实行完之后确实前往了这条数据;监控数据库办事器,确认办事器基本没有实行这个SQL。以是把题目确定在ODAC 10.2这个驱动下面。但更奇异的是客户端(Web Server,下面设置装备摆设了Oracle网络办事)重起呆板,题目还在;数据库办事珍视起呆板,题目还在,还能查出那条数据。厥后再没有产生这种状况,也无从查起。 2008.01.06 下面两个题目都是Oracle没有找准索引,从步伐层面将参数信息设置正确的确比力紧张。 别的优化历程中不停发明Oracle找禁绝索引的状况,在不少盘问中添加了指定索引,乃至是JOIN TYPE的hints,倒忘了别的一个紧张方面:测试库常常少量的导入测试数据,必要剖析维护Oracle索引! orcale dataaccess 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200802/457.html ###据报道,Gartner剖析师好像以为开源软件太好了,是一种不克不及错过的技能.很多开源软件技能是成熟、波动和有精良技能支持的.这篇陈诉称,开源软件为厂商以及要低落拥有总本钱和进步投资报答的用户提供宏大的时机.疏忽这个趋向将使企业处于十分倒霉的竞争位置. 这篇陈诉称,j9九游会曾经看到一些至公司接纳可一些小的步调.比方,Facebook、谷歌和微软近来参加了DataPortability.org构造.随着工夫的推移,还会呈现新的开展,直到发生滚雪球的效应. Gartner的展望未必准确.但,Gartner指出,在开源软件的题目上,它实践上低估了增加.嵌入式开源软件战略将成为将来五年里企业坚持竞争上风的最低限制的投资. 开源软件 未知 未知 ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200801/456.html ###在春节到临之际,二域公司感激公司新老客户一年来对公司的鼎力支持,祝公司新老客户以及公司全体员工新春痛快、财路滔滔、奇迹顺遂,万事快意!!! 新春痛快 春节 admin admin ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200801/455.html ###年春节放假布置如下:      2008年2月6日至2008年2月12日(夏历大年三十至初六)放假,共7天。2月13日(星期日)正常下班。      请各部分封闭电源关好门窗。祝各人春节痛快! 放假关照 春节 admin admin ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200801/454.html 我以为这个话题十分的好,随着M$做开辟的人都应该晓得codeproject,gotdonet以及迩来被M$用来标榜开源流派的codeplex。从这三个站点的一日千里[yī rì qiān lǐ]的变革,大概可以看到M$和M$的相干开辟者的心态变革和对整个步伐开辟社区的回应。 codeproject,是一个比力老的站点,内里的工具简直可以涵盖m$的方方面面,好久之前,公司做java的人和我说,codeproject不错,但是为什么没有java的代码呢?我看到只要J#。 好久之前少量的开源项目和一些M$公然源码的东西大概research都放在gotdonet上,如今依旧许多毗连都引自那边,但是点出来的时分却发明站点关闭了,m$放了一段声明在那边: Based on your feedback, weve made some adjustments to our schedule: CodeGallery phase-out – Completed on July 26, 2007 We suggest CodePlex as an excellent alternative. Please contact the CodePlex support staff with any questions you may have. Another alternative is GotDotNet User Samples . Please contact the CodePlex as an excellent alternative. Please contact the GotDotNet support staff with any questions you may have User Samples phase-out – Schedule update in Fall 07 We will not phase-out User Samples until we can provide customers with greater alternative. We will update you with further schedule information in Fall, 2007. Workspaces phase-out – Completed on June 19, 2007. We suggest CodePlex as an excellent alternative. Please contact the CodePlex support staff with any questions you may have. We appreciate the input you’ve given us regarding the GotDotNet phase-out. We will keep you posted as we move forward. We are phasing out GotDotNet for the following reasons: Microsoft wants to reinvest the resources currently used for GotDotNet in new and better community features for our customers Traffic and usage of GotDotNet features has significantly decreased over the last six months Microsoft wants to eliminate redundant functionality between GotDotNet and other community resources provided by Microsoft 套用时下游行的一句很黄很暴力,无法的转向codeplex,一个有着绿油油界面的站点,我就想到一个绿油油的谁人...,掩护目力照旧不错的,环保颜色。 codeplex由于是新的站点许多gotdotnet的工程都没有迁徙到那边,简直都是一些小范围的代码,m$力挺的工具仍旧很快很好很壮大的疾速迁徙到了codeplex而且失掉了少量的拜访和搜刮量。余下的项目就像小草一样冷静无闻的渐渐发展。 codeplex基于的tfs仿佛给用户的权限仅限于源码一块,公然的源码的更新无法打消,这些都表现出了codeplex的不可熟。 开源的历程是艰苦的,大局部项目都是一团体的项目,反观java的开源站点,不难过出一个结论,好的项目都不是一团体就可以做出来的。 起首要勉励开源,接上去就应该寻思开源项目标意义自己。 那些项目值得开源,那些项目不值得开源。我这里就不批评了。 至于开源的协议,codepelx上提供了很片面的参考,这点照旧很利便并且不错的。 在最开端提到的那一个帖子里有一个争议点,为什么开源?处于什么样的目标必要开源? 这实在是一个很庞大的题目,每一团体的态度和举动都市纷歧样,但有一点是配合的,向整个天下体现本人的代价,这里不是一群人,不是一个公司,也不是一个国度,而是整个天下。 对步伐员来说编程开辟是取得支出的一种手腕,也是一种泉源。开源的范围和源码的质量决议了开源与否从大范畴而言不会触及到团体的宏大的长处。 许多人看到了小利,大概一种梦想,梦想一个本人一团体的步伐大概库有贸易的代价,可致使富。 现实上这类为肯定贸易目标大概触及的详细的商业流程为了交付而赢利的源码开源的代价很小。 相反一些完成特定算法的大概提供一个笼统完成的代码在实用性上都是面向群众的,这类的代码值得开源,好比提到的NBear,一个心爱的teddy bear. 开源软件 codeproject Brain cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200801/453.html 许多人理解盘算机步伐设计是从学习流程图开端的,那些菱形矩形的复杂图表每每能让流程逻辑一览无余[yī lǎn wú yú]。但流程图不是可以运转的软件,充其量只是一种文档,以是入门后各人每每将流程图抛诸脑后间接剖析设计上手写代码。但流程图就真的只能作为文档吗?在许多方面代码比不下流程图: 1.一个步伐员写的步伐另一团体必要花很永劫间看懂此中的逻辑,不像流程图一览无余[yī lǎn wú yú] 2.在运转时看不到代码的运转情况,不晓得运转到了哪个阶段,这对大型项目办理带来停滞。 3.代码总是被封装在工具或历程里,工具(历程)之间必要分外的逻辑才干共享形态。 只管不停不是j9九游会的主流,但将流程图用在运转时总是一个不错的想法,尤其在文档生命周期办理、外部使用步伐逻辑流转、BPM、Pageflow等场景下上风尤为分明:流程图在设计时高度机动轻便、运转时高度可见、办理愈加利便。依据软件界水涨船高者生活的规矩,当前许多公司为了进步本人的服从会不停承受引入事情流引擎到本人的产品中以制止反复创造劣质的轮子,面对的主要义务便是挑选符合的事情流引擎。那什么是抱负中的事情流引擎呢?有人总结过事情流应该具有的一些支持形式,拜见Workflow Pattern http://en.wikipedia.org/wiki/Workflow_patterns http://www.workflowpatterns.com/ 这些都是很无益的总结,但由于有些厂商贸易长处混合此中,以是硬扯了一些Process Model的工具。也有许多人和我然后一样,参照openwfc,bpel4ws大概其他一些必要完成的功效点写过本人单元用的事情流引擎并冠以自主知识产权之名,但实践上离真正的事情流另有一段间隔。简而言之,一个绝对完备的事情流平台必需具有的功效如下: 1.可以完成流程跳转。 2.宿主历程、宿主、运转时、事情流引擎等各层解耦完全 3.宿主历程多样化,至多要可以居住与主流使用办事器上,制止利用者在非须要状况下自写使用办事器。 4.宿主层包括耐久化、定时器、跟踪、事件支持等运转时办事。 5.运转时层事情流实行必需的编排器、规矩引擎、跟踪底子框架与事情流生命周期办理必需的形态办理、激活、蛰伏等解耦。 6.事情流引擎支持包括常用的时序、形态等模子 一个抱负的事情流引擎除此之外还必要具有的功效如下: 1.宿主层支持与外界交互、多线程多历程支持等运转时办事,支持自界说运转时办事以便扩展。 2.事情流引擎支持的时序、形态等模子精良封装便于挪用;引擎支持基于战略/规矩的模子,支持自界说运动,为基于其上开辟行业组件包的互助同伴留出一条生路。 3.API精良构造挪用复杂,最好支持多言语多剧本。不要有特别乖僻的流程界说言语,最好是业界已有的大概各人能很快承受的。 4.在设计时和运转时都有许多的帮助东西与注入代码的地方。 5.在设计时与运转时都有兽性化的开辟、调试、测试模板视图与设计器。 6.对罕见两头款式如Plain Text,XML,Office Doc等有精良支持;对罕见数据库、罕见产业互换尺度有所支持或有扩展支持的接口。 除此之外,另有很多多少功效实在不属于事情流重点体贴的,但由于技能决议计划者必要以是抱负的事情流引擎也必需思索的: 1.界限明晰、办事自治、共享schema与战略而不是类、基于战略的办事兼容。明眼人大概一看就要拍桌子了,这不是WCF平分布式使用办事的设计准绳吗,怎样扣到事情流头下去了?缘故原由很复杂,由于便于公布成办事的事情流才是可塑性最强的事情流,以是事情流在屋檐下,不得不抬头,这也是微软为什么Silver(在.NET3.5中将WF公布成WCF)的缘故原由。 2.支持长事件,支持人-人、人-体系、体系-人、体系-体系等四种方法的流程协作,支持全生命周期的静态通明办理,模子高度可扩展。 3.可在差别事情流历程/线程间利便地转移操纵形态和数据,利便地举行赔偿冲帐等操纵。 基于以上思索,各人可以看到微软的Windows Workflow Foundation曾经完全可用了,固然还不是最抱负的。有一个必要留意的是,笔者估量当前微软的事情流引擎会遇到一个开展怪圈,现在的WF固然成熟水平曾经比大少数国际公司做的本人的事情流引擎很多多少了,但照旧笼统层级不高,固然如今有Enterprise library在做的Pageflow,上文提到的Sliver等修修补补的事情,仍旧难以挑起金瓯无缺[jīn ōu wú quē]的重担。更大的缘故原由是再往上做大概会遇到BizTalk Server或BizTalk Service的土地(再次廓清一下后二者都不是事情流引擎)。只能寄盼望于在Oslo中的体现了。 总体来说,基于流程开辟将在比年对j9九游会发生深远影响。各人可以如今开端依照以上尺度选择本人心仪的事情流并使用到一样平常事情中。 紧张声明:以上纯属团体看法,不代表任何公司意见,转载务请注明来由。 本文局部自创Paul Andrew,James Conard的看法,在此致以感激! 事情流 Pageflow 张大磊 cnblog ### j9国际站|(官网)点击登录 http://www.k8w.net/news/company/200801/452.html 一. 体系设置和底子数据维护 1、部分办理 对单元职员的所属部分举行办理。 2、职员根本档案办理 对单元的职员根本信息(包罗姓名、编号、部分、职务、职称、学历、相片、籍贯、政治相貌,职员在本单元工龄、条约工夫、银行卡等等)举行办理,包罗职员信息的添加、删除修正等操纵。 3、职员变更办理 职员部分变更、职位变更、变更记载 3、用户权限办理 可为每个利用本体系的用户设定权限,包管了数据的宁静性。 4、体系参数的设置 对一些商业中用到的参数举行设置,如许包管了体系的机动性。当一些参数产生改动后,在《体系参数设置》局部就可以变动,无需修正步伐。 5、职员职称办理 对职员职称举行添加、修正、删除等办理。 6、职员级别办理 职员级另外添加、删除、修正等操纵 7、职员分类办理 对职员的分类举行添加、删除、修正等操纵。 8、职员人为项目办理 对各种职员的人为项目举行办理,可依据用户需求对每个人为项目设定盘算公式。 9、其他一些须要项目标办理 二. 根本商业体系 本体系次要包括以下模块: 1、 职员各项人为数据录入、删除、修正 2、 收罗门禁体系数据 3、 天生职员的人为表 4、 打印人为条 5、 导入职员档案 6、 导出代发数据等 7、 职员变更处置 3. 统计报表体系 (1)、按部分统计人为报表 可依据必要天生商业上的各种报表。 (2)、定时间段(恣意工夫、月、季、年)统计人为报表 按所选择的工夫段统计人为 (3)、按其他的方法天生所需报表 (4). 综合盘问 提供人事档案信息的盘问。 提供对职员信息以及天生的人为数据的盘问、统计,打印等功效。 (5). 考勤机/门禁体系接口 提供门禁体系和考勤机的接口,能读取门禁体系和考勤机的数据,主动天生职员的考勤人为。 人事 人为办理 人为软件 未知 本站原创 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200801/451.html ###JAVA言语活着界上十分盛行,其使用触及电子商务,INTERNET网上数据库,CGI及多媒体等各个方面。1999年12月SUN公司宣布了最新版的JAVA2 SDK, 为新世纪的JAVA奠基基>###JAVA是一种面向工具的步伐设计言语(OOP)。它是一品种C++的言语,由于JAVA消弭了C/C++贫苦的内存办理和一些庞大的结构,如多承继等,JAVA的使用要比C++容易得多,何况JAVA的运转速率已与C++差未几(据美国有关部分测算)。另有那跨软硬件平台和一次编译,屡次运转的机制,怎能不让步伐员心动>###JAVA运转有两种情势:小步伐(APPLET)和使用步伐(APPLICATION),为了简化起见,本文只对使用步伐举行探究,小步伐是在JAVA原步伐经编译无误后嵌入到HTML后经IE或NC等欣赏器利用的情势,j9九游会在前面将给出使用步伐(APPLICATION)实例>### 用过VC++,VB,DELPHI和POWERBUILDER的冤家都晓得用这些软件设计GUI(GRAPHICS USER INTERFACE)图形界面十分容易,只需用鼠标拖拽控件即可,简直不必写什么代码。JAVA问世后,也有很多闻名至公司为JDK(JAVA2曩昔的版本叫做JDK,JAVA Developer Kit)开辟了集成GUI开辟情况软件,如MICROSOFT的Visual J++,Borland的JBuilder, Symantec的Cafe, Visual Cafe 等等,固然这些产品支持GUI界面,开辟步伐较易,但也分明存在着以下这些不敷之处: 1) 其JAVA版本滞后于SUN公司的最新版本。 2) 带来兼容性题目,由于各家开辟本人的类库文件,如MS用本人的WFC类库,形成无法与现实上的JAVA尺度SUN公司的JAVA,JDK(SDK)和JFC(JAVA FOUNDATION CLASSES)相兼容,发生难以超过平台等缺陷。 3) 控件文件巨大,编译和运转较慢,运转文件也较大。 4) 开辟情况价高,有些产品不克不及“有始有终[yǒu shǐ yǒu zhōng]”,半路短命,利用户处于主动场合排场。而SUN的JAVA,JFC等均是收费提供的,有SUN公司巨大的技能力气包管。 由于上述缘故原由,如今在国际上已盛行“Pure JAVA即“纯”JAVA技能,也便是说只用SUN公司的JAVA, JDK, JFC(GUI类库,相似AWT,但有着比AWT更壮大的功效,又称为SWING既“摇晃”)来开辟步伐。实在只需理解JAVA的编程原理,及JDK和功效壮大的JFC(SWING), j9九游会就可编写出具有专业程度的GUI界面的步伐来。 上面笔者以一个步伐为例,来介绍怎样编写具有“纯”JAVA的步伐。该步伐的要害语句都有表明: import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import com.sun.java.swing.*; public class myGUI extends com.sun.java.swing.JFrame { //此处设置情况常量,如:字体,颜色等略去。 com.sun.java.swing.JPanel MainPanel; com.sun.java.swing.JPanel TopPanel; com.sun.java.swing.JButton ClearButton; com.sun.java.swing.JButton SearchButton; com.sun.java.swing.JTextField SearchText; //结构器:对setMenu() 和 setGUI()数椐和挪用的初始化和实例化 public myGUI(){ super(Ideal GUI); addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ dispose(); System.exit(0);}}); //创立窗口事情 setMenu(); setGUI(); } protected void ClearButtonClicked(){ System.out.println(Clear Button Clicked); SearchText.requestFocus(); SearchText.selectAll(); } //处置ClearButton按钮事情子步伐 protected void SearchButtonClicked(){ System.out.println(Search Button Clicked); SearchText.requestFocus(); SearchText.selectAll(); } // 处置SearchButton按钮事情子步伐 class ButtonAction implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent event) { Object object = event.getSource(); if (object == ClearButton) ClearButtonClicked(); else if(object == SearchButton) SearchButtonClicked(); } // end public void actionPerformed(... } //监听事情的产生,如按钮的按下,鼠标的按动等,转向响应的处置。... public void setGUI(){ TopPanel=new com.sun.java.swing.JPanel(); //TopPanel面板 java.awt.GridBagLayout TopLayout = new java.awt.GridBagLayout(); TopPanel.setLayout(TopLayout); ClearButton = new com.sun.java.swing.JButton(Clear); //ClearButton按钮 SearchText = new com.sun.java.swing.JTextField(Enter text here.); //SearchText文本框 SearchButton = new JButton(Search); //SearchButton按钮 TopPanel.add(SearchText);//在TopPanel上安置SearchText文本框 TopPanel.add(SearchButton); ///在TopPanel上安置SearchButton按钮 TopPanel.add(ClearButton);// 在TopPanel上安置ClearButton按钮 MainPanel = new com.sun.java.swing.JPanel();//主面板MainPanel java.awt.GridBagLayout MainLayout = new java.awt.GridBagLayout(); MainPanel.setLayout(MainLayout); java.awt.GridBagConstraints MainConstraints = new java.awt.GridBagConstraints(); SetConstraints(MainConstraints, GBCBOTH,TOPPANELX,TOPPANELY,1,1); //TopPanel MainLayout.setConstraints(TopPanel,MainConstraints); MainPanel.add(TopPanel);//将TopPanel装入主面板MainPanel this.getContentPane().add(MainPanel); //将主面板装入Jframe框架 this.setSize(640,480); //设置表现巨细,可在步伐中变动 this.setVisible(true); //设置可表现 SearchText.requestFocus();//文本框聚焦(选中) SearchText.selectAll(); ButtonAction BAction = new ButtonAction(); ClearButton.addActionListener(BAction);//将按钮参加到运动监听器中 SearchButton.addActionListener(BAction); } public static void main(String args[]){ myGUI mGUI = new myGUI(); } //启动主步伐 JAVA的GUI界面是由一系列嵌入组件构成的,它利用了JDK和JFC(SWING)组件。本例起首创建框架(JFRAME),在下面再建一个主面板(MAINPANEL),再往下创建一个子面板(TOPPANEL),然后将两个按钮和一个文本框拔出到子面板中,这是一个典范的OOP实例, 在步伐辨别捕获到两个按钮的按动后,并表现按钮信息后再选取文本框中的内容。这个软件经扩大,可参加更多的子面板,和更多更庞大的组件(如JTABLE-表格或JTREE-树)。留意这个myGUI.java文件可用任何文本编辑软件编辑,以纯文本方法存盘。JFC的组件比AWT的组件更雅观,异样的按钮,JFC的悦目,并能举行更多的设置。 在安置好JAVA 1.2 (JDK)和JFC(SWING1.1.1或更高版本,这些体系可在有关网站下载)后即可在WINDOWS的DOS方法下编译和运转文件了。 先对文件举行编译: javac myGUI.java 如无错误可用上面下令运转文件: java myGUI.class 此时就可以看到一幅美丽的界面。 gui java 未知 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200801/450.html 一 JAVA 言语的泉源、及特点 在这个高速信息的期间,商家们纷繁把信息、产品做到Internet国际互连网页上。再这些不平凡网页的面前,要属功效完全、宁静牢靠的编程言语,Java是当之无愧的。Java是由Sun Microsystem开辟的一种功效壮大的新型步伐设计言语。是与平台有关的编程言语。它是一种复杂的、面象工具的、散布式的、表明的、键壮的、宁静的、布局的中立的、可移植的、功能很优秀的、多线程的、静态的、言语。 Java自问世当前,以其编程复杂、代码高效、可移植性强,很快遭到了宽大盘算机编程人士的喜爱。Java言语是Internet上具有反动性的编程言语,它具有壮大的动画、多媒体和交互功效,他使World Web进入了一个全新的期间。Java言语与C++极为相似,可用它来创立宁静的、可移植的、多线程的交互式步伐。别的用Java开辟出来的步伐与平台有关,可在多种平台上运转。背景开辟,是一种高效、适用的编程办法。人们在屏幕前只能看到比方图案、盘算的后果等。实践上操纵体系每每在背景来调理一些事情、办理步伐的流向等。比方操纵体系中的货仓,线程间的资源分派与办理,内存的创立、拜访、办理等。可谓举不盛举。上面就多线程来谈一谈。 二 JAVA的多线程实际 2.1引入 Java提供的多线程功效使得在一个步伐里可同时实行多个小义务。线程偶然也称小历程是一个猛进程里分出来的小的独立的历程。由于Java完成的多线程技能,以是比C和C++更键壮。多线程带来的更大的利益是更好的交互功能和及时控制功能。固然及时控制功能还取决于体系自己(UNIX,Windows,Macintosh等),在开辟难易水平和功能上都比单线程要好。传统编程情况通常是单线程的,由于JAVA是多线程的。只管多线程是壮大而乖巧的编程东西,但要用好却不容易,且有很多圈套,即便编程新手也不免误用。为了更好的理解线程,用办公室事情职员作比喻。办公室事情职员就象CPU,依据下级指示唱工作,就象实行一个线程。在单线程情况中,每个步伐编写和实行的方法是任何时分步伐只思索一个处置次序。用j9九游会的比喻,就象办公室事情职员从头至尾[cóng tóu zhì wěi]不受打搅和专心,只布置做一个事情。固然,实践生存中事情职员很难一次只要一个义务,更罕见的是事情职员要同时做几件事。老板将事情交给事情职员,盼望事情职员做一这个事情,再做点谁人事情,等等。假如一个义务无法做下去了,好比事情职员等候另一部分的信息,则事情职员将这个事情放在一边,转入另一个事情。一样平常来说,老板盼望事情职员手头的各个义务每一天都有一些停顿。如许就引入了多线程的观点。多线程编程情况与这个典范的办公室十分类似,同时给CPU分派了几个义务或线程。和办公室职员一样,盘算机CPU实践上不行能统一工夫做几件事,而是把工夫分派到差别的线程,使每个线程都有点停顿。假如一个线程无法举行,好比线程要求的键盘输出尚未获得,则转入另一线程的事情。通常,CPU在线程间的切换十分敏捷,使人们觉得到好象一切线程是同时举行的。 任那边理情况,无论是单线程照旧多线程,都有三个要害方面。第一个是CPU,它实践上举行盘算机运动;第二个是实行的步伐的代码;第三个是步伐操纵的数据。 在多线程编程中,每个线程都用编码提供线程的举动,用数据供应编码操纵。多个线程可以同时处置统一编码和数据,差别的线程也大概各有差别的编码和数据。现实上编码和数据局部是相称独立的,必要时即可向线程提供。因而常常是几个线程利用统一编码和差别的数据。这个头脑也可以用办公室事情职员来比喻。管帐大概要做一个部分的帐或几个或几个部分的帐。任何状况的做帐的义务是相反的步伐代码,但每个部分的数据是差别的。管帐大概要做整个公司的帐,这时有几个义务,但有些数据是共享的,由于公管帐必要来自各个部分的数据。 多线程编程情况用利便的模子隐蔽CPU在义务切换间的现实。模子容许伪装成有多个可用的CPU。为了创建另一个义务,编程职员要求另一个假造CPU,指示它开端用某个数据组实行某个步伐段。上面j9九游会来创建线程。 创建线程 在JAVA中创建线程并不难,所必要的三件事:实行的代码、代码所操纵的数据和实行代码的假造CPU。假造CPU包装在Thread类的实例中。创建Thread工具时,必需提供实行的代码和代码所处置的数据。JAVA的面向工具模子要求步伐代码只能写成类的成员办法。数据只能作为办法中的主动(或当地)变量或类的成员存在。这些规矩要求为线程提供的代码和数据应以类的实例的情势呈现。 Public class SimpleRunnable implemants Runable{ Private String message; Public static void main(String args[]){ SimpleRunnable r1=new SimpleRunnable(“Hello”); Thread t1=new Thread(r1); t1.start(); } public SimpleRunnable(String message){ this.message=message; } public void run(){ for(;;){ System.out.println(message); } } } 线程开端实行时,它在public void run()办法中实行。这种办法是界说的线程实行的出发点,就象使用步伐从main()开端、小步伐从init()开端一样。线程操纵的当地数据是传入线程的工具的成员。 起首,main()办法结构SimpleRunnable类的实例。留意,实例有本人的数据,这里是一个String,初始化为”Hello”.由于实例r1传入Thread类结构器,这是线程运转时处置的数据。实行的代码是实例办法run()。 2.2 线程的办理 单线程的步伐都有一个main实行体,它运转一些代码,当步伐完毕实行后,它恰好加入,步伐同时完毕运转。在JAVA中j9九游会要失掉相反的应对,必需略微举行窜改。只要当一切的线程加入后,步伐才干完毕。只需有一个线程不停在运转,步伐就无法加入。线程包罗四个形态:new(开端),running(运转),wait(期待)和done(完毕)。第一次创立线程时,都位于new形态,在这个形态下,不克不及运转线程,只能等候。然后,线程大概由办法start开端大概送往done形态,位于done中的线程曾经完毕实行,这是线程的最初一个形态。一旦线程位于这个形态,就不克不及再次呈现,并且当JAVA假造机中的一切线程都位于done形态时,步伐就强行中断。以后正在实行的一切线程都位于running形态,在步伐之间用某种办法把处置器的实行工夫分红工夫片,位于running形态的每个线程都是能运转的,但在一个给定的工夫内,每个体系处置器只能运转一个线程。与位于running形态的线程差别,由于某种缘故原由,可以把曾经位于waiting形态的线程从一组可实行线程中删除。假如线程的实行被中缀,就回到waiting形态。用多种办法能中缀一个线程。线程能被挂起,在体系资源上期待,大概原告知进入休眠形态。该形态的线程可以前往到running形态,也能由办法stop送入done形态, 办法 形貌 无效形态 目标形态 Start() 开端实行一个线程 New Running Stop() 完毕实行一个线程 New或running Done Sleep(long) 停息一段工夫,这个工夫为给定的毫秒 Running Wait Sleep(long,int) 停息半晌,可以准确到纳秒 Running Wait Suspend() 挂起实行 Running Wait Resume() 规复实行 Wait Running Yield() 明白保持实行 Running Running 2.3线程的调理 线程运转的次序以及从处置器中取得的工夫数目次要取决于开辟者,处置器给每个线程分派一个工夫片,并且线程的运转不克不及影响整个体系。处置器线程的体系大概是抢占式的,大概黑白抢占式的。抢占式体系在任何给定的工夫内将运转最高优先级的线程,体系中的一切线程都有本人的优先级。Thread.NORM_PRIORITY是线程的缺省值,Thread类提供了setPriority和getPriority办法来设置和读取优先权,利用setPriority办法能改动Java假造机中的线程的紧张性,它挪用一个整数,类变量Thread.MIN_PRIORITY和Thread.MAX_PRIORITY决议这个整数的无效范畴。Java假造机是抢占式的,它能包管运转优先级最高的线程。在JAVA假造机中j9九游会把一个线程的优先级改为最高,那么他将代替以后正在运转的线程,除非这个线程完毕运转大概被一条休眠下令放入waiting形态,否者将不停占用一切的处置器的工夫。假如遇到两个优先级相反的线程,操纵体系大概影响线程的实行次序。并且这个区别取决于工夫片(time slicing)的观点。 办理几个线程并不是真正的困难,关于上百个线程它是怎样办理的呢?固然可以经过循环,来实行每一个线程,但这显然是冗长、有趣。JAVA创立了线程组。线程组是线程的一个谱系组,每个组包括的线程数不受限定,能对每个线程定名并能在整个线程组中实行(Suspend)和中止(Stop)如许的操纵。 2.4信号标记:掩护别的共享资源 这品种型的掩护被称为互斥锁。某个工夫只能有一个线程读取或修正这个数据值。在对文件尤其是信息数据库举行处置时,读取的数据总是多于写数据,依据这个状况,可以简化步伐。上面举一例,假定有一个雇员信息的数据库,此中包罗雇员的地点和德律风号码等信息,偶然要举行修正,但要更多的照旧读数据,因而要尽大概避免数据被毁坏或恣意编削。j9九游会引入后面互斥锁的观点,容许一个读取锁(red lock)和写入锁(write lock),可依据必要确定有权读取数据的职员,并且当或人要写数据时,必需有互斥锁,这便是信号标记的观点。信号标记有两种形态,起首是empty()形态,表现没有任何线程正在读或写,可以承受读和写的哀求,而且立刻提供办事;第二种形态是reading()形态,表现有线程正在从数据库中读信息,并记载举行读操纵的线程数,当它为0时,前往empty形态,一个写哀求将招致这个线程进入等候形态。 只能从empty形态进入writing形态,一旦进入writing形态后,别的线程都不克不及写操纵,任何写或读哀求都必需比及这个线程完成写操纵为止,并且waiting形态中的历程也必需不停比及写操纵完毕。完成操纵后,前往到empty形态,发送一个关照信号,等候的线程将失掉办事。 上面完成了这个信号标记 class Semaphore{ final static int EMPTY=0; final static int READING=1; final static int WRITING=2; protected int state=EMPTY; protected int readCnt=0; public synchronized void readLock(){ if(state==EMPTY){ state=READING; } else if(state==READING){ } else if(state==WRITING){ while(state==WRITING){ try {wait();} catch(InterruptedException e){;} } state=READING; } readCnt++; return; } public synchronized void writeLock(){ if(state==EMPTY){ state=WRITING; } else{ while(state!=EMPTY){ try {wait();} catch(InterruptedException e) {;} } } } public synchronized void readUnlock(){ readCnt--; if(readCnt==0){ state=EMPTY; notify(); } } public synchronized void writeUnlock(){ state=EMPTY; notify(); } } 如今是测试信号标记的步伐: class Process extends Thread{ String op; Semaphore sem; Process(String name,String op,Semaphore sem){ super(name); this.op=op; this.sem=sem; start(); } public void run(){ if(op.compareTo(read)==0){ System.out.println(Trying to get readLock:+getName()); sem.readLock(); System.out.println(Read op:+getName()); try {sleep((int)(Math.random()*50));} catch(InterruptedException e){;} System.out.println(Unlocking readLock:+getName()); sem.readUnlock(); } else if(op.compareTo(write)==0){ System.out.println(Trying to get writeLock:+getName()); sem.writeLock(); System.out.println(Write op:+getName()); try {sleep((int)(Math.random()*50));} catch(InterruptedException e){;} System.out.println(Unlocking writeLock:+getName()); sem.writeUnlock(); } } } public class testSem{ public static void main(String argv[]){ Semaphore lock = new Semaphore(); new Process(1,read,lock); new Process(2,read,lock); new Process(3,write,lock); new Process(4,read,lock); } } testSem 类从process类的四个实例开端,它是个线程,用来读或写一个共享文 件。Semaphore类包管拜访不会毁坏文件,实行步伐,输入后果如下: Trying to get readLock:1 Read op:1 Trying to get readLock:2 Read op:2 Trying to get writeLock:3 Trying to get readLock:4 Read op:4 Unlocking readLock:1 Unlocking readLock:2 Unlocking readLock:4 Write op:3 Unlocking writeLock:3 从这可看到, 2.5去世锁以及怎样制止去世锁: 为了避免数据项目标并发拜访,应将数据项目的为公用,只要经过类自己的实例办法的同步区拜访。为了进入要害区,线程必需获得工具的锁。假定线程要独占拜访两个差别工具的数据,则必需从每个工具各取一个差别的锁。如今假定另一个线程也要独占拜访这两个工具,则该历程必需失掉这两把锁之后才干进入。由于必要两把锁,编程假如不警惕就大概呈现去世锁。假定第一个线程获得工具A的锁,预备取工具B的锁,而第二个线程获得了工具B的锁,预备取工具A的锁,两个线程都不克不及进入,由于两者都不克不及分开进入的同步块,既两者都不克不及保持现在持有的锁。制止去世锁要仔细设计。线程由于某个先决条件而受阻时,如必要锁标志时,不克不及让线程的中止自己克制条件的变革。假如要获得多个资源,如两个差别工具的锁,必需界说获得资源的次序。假如工具A和B的锁总是按字母次序获得,则不会呈现后面说道的饿去世条件。 三Java多线程的优缺陷 由于JAVA的多线程功效完全,种种状况面面具到,它带来的利益也是显然易见的。多线程带来的更大的利益是更好的交互功能和及时控制功能。固然及时控制功能还取决于体系自己(UNIX,Windows,Macintosh 等),在开辟难易水平和功能上都比单线程要好。固然一个好的步伐设计言语一定也不免有不敷之处。由于多线程还没有充实使用根本OS的这一功效。这点我在后面曾经提到,关于差别的体系,下面的步伐大概会呈现一模一样[yī mó yī yàng]的后果,这使编程者偶会感触困惑不解[kùn huò bú jiě]。盼望在不久的未来JAVA的多线程能充实使用到操纵体系,增加对编程者的狐疑。我等待着JAVA会更好。 java 多线程 aaron527 赛迪网 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200801/449.html 迭代,两层意思:反复、行进。典范的迭代办法有XP、Scrum等等。 矫捷,含有疾速、高效、正确的意思,矫捷开辟办法通常使用工夫定量的迭代和退化式开辟、利用自顺应方案、倡导增量交付并包括其他倡导矫捷性(疾速和机动的响应变动)的代价和理论。(摘自《UML和形式使用》) 顺手翻翻关于软件设计与开辟中的迭代、矫捷,觉得在这些观点呈现在本人视野之前,其局部琐屑的头脑早早呈现在已往软件项目实行历程中。记得研讨生时和别的一位同砚,随着一位有丰厚j9九游会履历(8年)的博士师兄做项目,那是个遗留项目,开辟职员不波动,项目需求变化大,而且j9九游会和之前的项目开辟组之间没有项目交代,实行历程中遇到了不少难,事先我想着充实使用之前积聚的客户需求材料,加上常常和客户商业职员相同,先整理出整个需求文档,重新做软件商业建模、工具UML设计、数据库设计等等,然后干洁净毛重写代码。师兄的想法便是先依据已有的材料做出软件的全体框架和商业使用的骨干,在最快的工夫内到用户现场去安置,让用户提意见,然后j9九游会再修正、美满,反复频频,每次都是一次迭代,是从细化到结构的历程,终极波动整个开辟框架与思绪,完成j9九游会,事先没有明白的矫捷UP开辟理念,但追念起来根本便是典范的矫捷UP案例,包罗每阶段开辟的集会、建模、编码、测试……。本人是个完善主义者,分外是在校园年月,本人事先内心真的是一百个不肯意,以为j9九游会应该服从尺度j9九游会形式,如许才干做出文档、软件设计、代码正文等等皆完善的软件,对软件不绝修修正改,乃至偶然部分颠倒重来极为恶感!如今看来,依照师兄的办法,项目完成了,假如依照本人的想法,大概j9九游会留下的不是一个适用软件,而是更多七零八落[qī líng bā luò]的文档给接上去的师弟师妹们。 不晓得师兄是不是故意依照迭代、矫捷头脑来推进项目标,但之前的j9九游会履历阐明了迭代与矫捷的确是实践j9九游会的履历总结,分外是在应对需求不波动的状况下,可以表现出它共同的一壁,终究j9九游会因此使用、软件为中心,而不是完备的项目artifact,如今关于UP、XP、Scrum、矫捷方面的册本和网络材料十分多,偶然觉得像是在玩观点,但一旦开端理解这些头脑,会发明不少的办法本人曾经在用了,持续看下去,会总结出本人已往开辟履历中的种种履历,更高效的、有层次的完成当前项目标设计与开辟。 矫捷开辟 迭代 Flyingis cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200801/448.html ###当你在做一个仿windows步伐的顶部菜单框架的时分,在asp.net中你大概会利用两个frame,一个frame在下面用来放菜单一个frame在上面用来方菜单点击后翻开的页面.页面完成很复杂, 单运转的时分你就发明放菜单的谁人frame将菜单的下列菜单在块基本伸不到上面的frame中.办理被块的题目是不克不及利用frame,做法是在一个独自的asp.net页面中放一个menu 和一个iframe,嗯,至此下拉菜单不会被块,单又有一个新题目出来了,那便是iframe的高度题目,假如强迫写去世它的高度,那基本是不行承受的.假如办理?办理的措施便是利用javascript 在body的onload和onsized事情中对iframe的高度举行控制.上面代码办理上述的题目. <%@ Page Language=C# AutoEventWireup=true CodeFile=Default5.aspx.cs Inherits=Default5 %> <html> <head runat=server> <meta http-equiv=Content-Type content=text/html; charset=utf-8 /> <title>无题目页</title> <script language=javascript type=text/javascript> function aaaaa() { document.getElementById(f1).height=document.body.clientHeight-80; } </script> </head> <body onload=aaaaa() onresize=aaaaa() scroll=no style=margin: 0> <form id=form1 runat=server> <table> <tr> <td height=80> <asp:Menu ID=Menu1 runat=server Orientation=Horizontal BackColor=#E3EAEB DynamicHorizontalOffset=2 Font-Names=Verdana Font-Size=0.8em ForeColor=#666666 StaticSubMenuIndent=10px> <StaticSelectedStyle BackColor=#1C5E55 /> <StaticMenuItemStyle HorizontalPadding=5px VerticalPadding=2px /> <DynamicHoverStyle BackColor=#666666 ForeColor=White /> <DynamicMenuStyle BackColor=#E3EAEB /> <DynamicSelectedStyle BackColor=#1C5E55 /> <DynamicMenuItemStyle HorizontalPadding=5px VerticalPadding=2px /> <StaticHoverStyle BackColor=#666666 ForeColor=White /> <Items> <asp:MenuItem Text=新建项1 Value=新建项1> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> </asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> <asp:MenuItem Text=新建项 Value=新建项></asp:MenuItem> </asp:MenuItem> <asp:MenuItem Text=新建项2 Value=新建项2></asp:MenuItem> <asp:MenuItem Text=新建项3 Value=新建项3></asp:MenuItem> </Items> </asp:Menu> </td> </tr> </table> <iframe id=f1 scrolling=auto width=100% height=200 src=HTMLPage5.htm></iframe> </iframe> </form> </body> </html> asp.net iframe menu 遮挡 飞飞航 cnblogs ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200801/443.html ###SharpDevelop2.2内置了NUnit,安置完后,可在上面目次找到NUnit: D:\Program Files\SharpDevelop\2.2\bin\Tools\NUnit 而且在SharpDevelop中可创建专门的Unit Test文件 默许创建如下所示的Nunit单位测试代码框架: /* * Created by SharpDevelop. * User: user * Date: 2008-1-4 * Time: 9:12 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; namespace Test1 { [TestFixture] public class Test1 { [Test] public void TestMethod() { // TODO: Add your test. } } } 假定我在MainForm中有如下必要测试的代码: public int add(int i,int j) { return i+j; } 则可在Test1中利便地添加如下所示的单位测试代码: [TestFixture] public class Test1 { [Test] public void TestMethod() { // TODO: Add your test. MainForm f = new MainForm(); Assert.AreEqual(2,f.add(1,1),1+1=2); } } 但,假如间接就如许编译会报错,提醒找不到NUnit,必要在Project中的Reference添加对nunit.framework.dll的援用。 可手工添加,也可经过选择“View | Tools | Unit Test”,在呈现的“Unit Test”办理界面中按“add reference to Nunit to current project”添加。 运转单位测试,可经过在测试办法中点右键,选择“current method | unit tests | run in unit test pad”运转,也可经过选择“View | Tools | Unit Test”,在呈现的“Unit Test”办理界面中运转。 运转后果信息表现在OutPut界面中: D:\Program Files\SharpDevelop\2.2\bin\..\bin\Tools\NUnit\nunit-console.exe D:\OpenSourceTestTool\SharpDevelop\Test1\bin\Debug\Test1.exe /results=C:\Documents and Settings\user\Local Settings\Temp\tmp24B.tmp /fixture=Test1.Test1 /testMethodName=Test1.Test1.TestMethod NUnit version 2.4.2 Copyright (C) 2002-2007 Charlie Poole. Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. Copyright (C) 2000-2002 Philip Craig. All Rights Reserved. Runtime Environment - OS Version: Microsoft Windows NT 5.1.2600 Service Pack 2 CLR Version: 2.0.50727.42 ( Net 2.0.50727.42 ) . Tests run: 1, Failures: 0, Not run: 0, Time: 0.351 seconds SharpDevelop 单位测试 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200801/442.html 上面是一个C#挪用QTP主动化工具模子的例子(复杂的C#挪用QuickTest主动化工具模子的例子) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test7 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 创立QTP使用步伐实例 QuickTest.Application app = new QuickTest.Application(); // 启动QTP app.Launch(); // 让QTP可见 app.Visible =true; } } } C# QTP 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200801/441.html   StyleCop提供了复杂和无效的方法来对项目标代码编写作风举行反省。 StyleCop可以多种方法运转,可以插件的方法在Visual Studio的IDE中运转; 也可以MSBuild义务的方法运转,可整合到步伐构建流程中;大概以下令行的方法运转,可针对一个或多个代码文件举行反省。 StyleCop的下令利用用办法: Usage: StyleCopCmd [options] [path] Options: -a Process all source files found under the start path (default) -cs {file} Analyze the specified file. -f Perform a full analyze (ignore cached results) -u Do not write results cache files. -o {file} Apply the given StyleCop options file to all projects and files -l {file} Save violation report at the given location. If omitted, saves StyleCopViolations.xml in the current directory. -p {path} Attempts to discover StyleCop AddIn modules under the given path. This flag may be specified multiple times to search under multiple paths -i Ignore the default StyleCop AddIn path under the All Users\Applica tion Data folder Conditional Compilation Flags: -define:FLAG1;FLAG2;FLAG3 Path: Specifies the path to begin search for source files. If this is omitted, uses the current directory as the start path. StyleCop 下令行 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/develop/200801/437.html   搜集了一下继续集成的观点 继续集成这个名词曾经在j9九游会范畴继续了N年了 一个比力复杂的界说如下:   继续集成(CI)是一种理论,可以让团队在继续的底子 上收到反应并举行改良,不用比及开辟周期前期才寻觅和修复缺陷。普通一点儿说,便是指关于开辟职员的每一次代码提交, 都主动地把Repository中一切代码Check out到一个空目次,而且主动运转一切Test Case。假如乐成则承受这次提交,不然报告一切人,这是一个失败的Revision。更详细的表明可以参考Martin fowler的Continuous Integration 。 继续集成 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/java/200801/434.html    近来,关于Java平台的将来有很多争辩,有些人以为Java应该参加更多的特性,如许才干与C#、Ruby如许的言语竞争,另一些人以为应该坚持Java的波动,以免变的过于庞大以致于难以利用。Bruce Eckel以为应该彻底中止往Java中增长新特征,这惹起了一场新的争辩。    在Bruce Eckel 的博文中,他说假如Java要坚持主流位置,那么就必要中止退化。作为一种言语,Java曾经“过于喧华”了,代码有些太过烦琐(比方System.out.println())。Eckel以为Java泛型增长了庞大性,这曾经惹起了人们的存眷,他还阐明了他看到的Java的一个要害题目:    j9九游会关于庞大性的独一控制手腕是笼统:隐蔽不必要表露的局部(分治法(divide and conquer)是一个变种)。在Java中的悖论是,庞大性题目的一个要害方面被疏忽了:没有了解到代码可读性是紧张的题目。仿佛IDE会为你写代 码,假如那样的话即便代码太过庞大也不是题目了。    [Joshua Bloch] 将关于庞大性的头脑提拔了一步。他说庞大 性不但仅是指一个伶仃的特定特性的庞大性,这种状况下庞大性通常是一览无余[yī lǎn wú yú]的。庞大性是指组合庞大性,这是当你将一个新特征与其他言语特征以恣意大概的方法举行组适时所带来的庞大性。假如你没有从一开端就警惕的设计,那么当你将一个新特征参加一种现存的言语中时,你无法控制该特征是怎样与其他现存特征举行 组合的。组合庞大性会发生可怕的结果,分外是在参加了特征之后,这时再做任何事变都为时已晚。早餐完毕后Josh说这类庞大性为Java的答疑解惑者提供 了丰厚的素材,但关于整个Java社区是无害的。   Eckel以为他本人是一个“特征上瘾者”,总是思索言语在新特征方面的退化,但如今他质疑假如一个特征不克不及被准确的完成,该特征能否应该被去失 (比方Java的泛型)。Eckel以为C和C++都十分波动,Java也应该波动而不是追逐新的言语特征大概试图追随一切的市场激动。有些人提出了冲破 向后兼容性的想法,他们以为那些盼望利用老特征的人们可以利用老版本的Java而不要晋级到新版本。Eckel关于不吝统统价钱维护向后兼容性的危害做了 告诫:   假如由于向后不兼容而不克不及准确的拔出特征,j9九游会在言语变革的时分会遭到很大约束,Java如今的情况与C++相反。C++常常因 为它的设计遭到品评,从C++尺度委员会刚开端运转我就在此中事情,曾经事情了8年,我看到了一切关于言语特征的争辩。这些言语特征不是变革无常的,而是 颠末十分审慎的并且深图远虑[shēn tú yuǎn lǜ]的考量的后果。是向后兼容C言语发生了言语庞大性和难性。一旦你在一切事变上都把本人与向后兼容绑定在一同,那么当你向言语 参加特征的时分必需做好言语被毁坏的预备。假如Java不肯意冲破向后兼容性,那么它就无法制止不打粮食的庞大性以及不完备的新特征完成。   Eckel以为新的言语是安排次要新特征的准确场合,Scala是“以后Java最好的加入战略”。他还以为Java独一的出路是成为象C那样的东西言语,未来只应该清算并丰厚如今不完备的库,把次要的言语变革(比方闭包)留给其他言语,而不是参加Java中。   Kevin Dangoor赞同Eckel的看法,他说在必要向后兼容性的言语中参加新的特征也是蠢笨的,他还指出在这一范畴ECMAScript与Java有异样的题目。Dangoor还关于开辟者一直要寻求新的、炫的特征来协助项目标批驳声响提出了质疑:   软件是思索的效果。其可锻性很强且新的头脑很容易测试。经过互联网,新的头脑和代码传达的很快很远,这是功德情。关于我来说,现 在开辟软件比5、10、15、20年前要好的多。我看到很多闪光的事物飞过,而没有真正的利用过它们。但我以为这些闪光的事物黑白常紧张的,此中包括了林林总总[lín lín zǒng zǒng]的头脑,可以利用差别的东西将其使用于差别的场景。一些出自这些头脑的完成成为了主流。   一样平常来说,人们不会转而利用一切从其身边 飞过的闪光的事物。有些人会仔细的实验这些事物,他们大概会成为乐成的开辟者大概蒙受失败的痛楚而转向其他办理方案。假如有充足的人喜好该头脑而且推进它 的开展,那么该头脑会成为主流。Rails是2004年闪光的新事物。毫无疑问,有一些晚期的利用者蒙受了痛楚,但在那些光阴里,绝对于利用其他东西的 人而言,更多的人由于利用Rails取得了十分高的消费率。不论终极有几多人承受了Rails,现实是自Rails呈现当前,它的许多头脑对事情发生了显 著的影响。   Cay Horstmann 异样以为应该增加对Java语法的存眷,增长对Java中痛楚之处的存眷。Horstmann征引了C++,指出Java办理了C++遇到的两个次要痛楚之处,内存办理和GUI/数据库的拜访。   但是,Java如今必要办理它本人的痛楚之处:   痴肥的代码 —— getter和setter办法,匿名类情势的事情监听器,可以由编译器推测出来的长的范例声明。   Web使用开辟 —— 这很难,用庞大的并且动力不敷的技能,比方JSP和JSF来开辟web使用“就像用叉子来喝汤”。   并发 —— “我不敷智慧,不克不及满怀决心的说我编写的紧张并发步伐不会有去世锁,不会有竞争条件。这就象我不敷智慧,不克不及满怀决心的说我编写的紧张C++步伐不会有内存泄漏或内存毁坏”   其他看法: Phillip Calçado以为Java应该牢固而不是持续扩展,但差别意关于Java自己难以阅读的说法,他说在创立Java的时分,它比事先的言语,比方C++易于阅读 Richard Relos以为 大少数Java代码不利用新的言语特征,增长新的特征仅仅疏散了开辟者的留意力,毁坏了逻辑情势。 Ian Cooper探究了C#的题目,他质疑C#能否曾经抵达了收益递加的点,他赞同次要新特征的行止应该是一个新言语 Giovani Salvador担忧假如Java不再增长新特征,它会过期,那么Java开辟者会酿成“恐龙” 。 Java 新特征 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/database/200801/432.html 上面的例子向你介绍了下令是怎样利用的 mysql> help describe Name: ’DESCRIBE’ Description: Syntax: {DESCRIBE | DESC} tbl_name [col_name | wild] DESCRIBE provides information about the columns in a table. It is a shortcut for SHOW COLUMNS FROM. As of MySQL 5.0.1, these statements also display information for views. (See [HELP SHOW COLUMNS].) URL: http://dev.mysql.com/doc/refman/5.0/en/describe.html MySQL describe 未知 网络 ### j9国际站|(官网)点击登录 http://www.k8w.net/technology/net/200801/425.html ###在一样平常的商业体系使用中,各人常常会利用到少量数据的的提交(包罗盘问、更新或删除),倘使目的数据库的数据量较大,一次必要处置的操纵较多,就会呈现体系实行服从低上等题目。文本中笔者以Oracle9i数据库为例,经过对ADO.Net中的数据库支持的使用理论,阐明几种罕见的优化处置办法,并比拟此中的优>###为了更细致阐明状况,笔者以某商业数据填报功效为例,假定有100个用户每周必要填报某统计数目,填报明细的数据量约为200条,有专门的填报页面完成一次提交,如许一周的数据增量约为2万,一年为100多万,要包管体系无效运转6年以上,必要思索数据存储(增、删、改)服从题目,(数据库自己的优化设置装备摆设,包罗表空间、索引等盘问服从曾经思索,不在此讨论范围)。这类商业的特点是,数据操纵量较大,但实行的指令庞大度较低,包括复杂的新增、修正、删除3类。 传统处置办法存在的题目 对每一个要处置的操纵,间接对目的表实行对应的SQL操纵(或存储历程),可利用ADO.Net的参数化SQL或经过DataSet与DataAdapter来直接处置。如许每个用户批量提交数据时,必要实行约莫200次SQL操纵,固然数据库举行了优化,单次实行SQL的服从并不低,但由于一次实行的指令较多,随着目的数据容量的增长,服从会渐渐低落,终极不行忍耐。 优化办法1:暂时表处置>### 关于大范围的目的数据库表,举行屡次修正、删除或更新操纵,服从肯定较慢,要低落对目的表的操纵次数,可以接纳暂时表的办理措施。详细办法为:创建一个与目的表布局相似的暂时表(由于B/S形式的特点,暂时表是基于事件的,而不是基于毗连的),并增长操纵形式标志字段,在实行操纵前,将本主要操纵的数据,便是某个用户,每周的数据(约200条左右,第一次处置时应该没无数据)一次盘问转入暂时表,再对暂时表实行修正、更新、删除(作删除标志)操纵,处置终了后,辨别将暂时表的数据分三类提交到目的表。流程如下图所示: 删除 Delete From TARGET_TABLE Where KEY In(Select KEY From TEMP_TABLE Where STATE=‘Delete’ 新增 Insert Into TARGET_TABLE … Select … From TEMP_TABLE Where STATE=‘Insert’ 修正 Update TARGET_TABLE Set … Where KEY=TEMP_TABLE.KET AND TEMP_TABLE.STATE=‘Update’ 实行证明,在50万数据量的条件下,此办法能比传统的办法快40倍左右,且实行服从受目的数据库容量的影响较小。 优化办法2:利用SQL批处置 SQL批处置一样平常有2种形式:一种是将要实行的SQL语句,毗连构成批处置指令,一次提交到办事器实行;一种是对实行的SQL指令,通报多组参数,批实行。这两种办法都必要数据库及ADO.Net的支持。 System.Data.OracleClient 的ADO.Net 2.0版本支持第一种方法的的批处置,如经过DataAdapter对DataSet的批量数据提交时,体系会依据数据聚集中的新增,修正,删除标识,结构批处置指令,构成SQL指令段,提交办事器实行。这种方法是将多个SQL指令构成一组SQL指令的办法,完成多个指令的批实行,能肯定水平进步功效的实行服从。原理如下所示: Begin Insert Into TAREGT_TABLE(A,B,C) Values(:1,:2,:3); Insert Into TAREGT_TABLE(A,B,C) Values(:4,:5,:6); Insert Into TAREGT_TABLE(A,B,C) Values(:7,:8,:9); …… Insert Into TAREGT_TABLE(A,B,C) Values(:n,:n+1,:n+2); end; 此办法构成的批处置SQL指令及参数会随着数据量的增长而成倍增长,数据更新量与实行服从遭到限定。而微软的Oracle ADO.Net完成并没有将批处置办法间接对外公然,只能经过DataSet的数据批量更新直接利用。 另一种处置办法是利用Oracle的ADO.Net完成。Oracle.DataAccess.Client完成的ADO.Net支持第二种形式的批处置指令,其使用Oracle数据库自带的批处置功效,经过设定OracleCommand的ArrayBindCount来完成对参数数组的通报。当ArrayBindCount设置为大于1时,通报给一个OracleCommand的参数不再是参数值,而是参数数组,如许,一条Command指令就可以实行多个处置,如:拔出100条数据。利用这种办法,使用了数据库自己对批量数据操纵的优化机制,极大进步了数据操纵服从。经过对目的数据库容量为50万的目的表测试发明,此办法实行比传统办法的实行服从进步50倍以上,在测试历程中发明,100万的目的数据量的状况下,一次拔出1万条数据,只必要1秒左右,且操纵服从受目的数据量的影响较小。 ADO.Net Oracle 数据更新 未知 网络 ###