??xml version="1.0" encoding="utf-8" standalone="yes"?>
AQ?\lotus\Domino下增?xml4j.jar、xml.jar
BQD:\Program Files\lotus\Domino\jvm\lib\ext下增加AXIS1版本?.4.1版本的相关jar
axis.jar
axis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
commons-logging.jar
E序员ؓ了完成Q务或赶工Q编写过E中q不会考虑E序q行效率、容错等问题Q?/p>
在布|运行环境的时候,一般不会全面考虑服务器的q行状况Q不会对服务器进行相应的性能优化和调_所以在数据量增大和用户数增大时Q出现性能低下{问题?/p>
Z以上现象Q客h意度达不刎ͼ有可能造成目p|的可能性?/p>
遇到q类情况后,Domino理员就有必要通过一pd手段来评估目前环境的问题在哪Q性能瓉在哪Q主要什么原因引LQ应该如何进行调_
在我gDomino理员工作是非常复杂和繁锁的QDomino理工作可以l分从服务器理、数据库理、邮件管理、h员管理、安全管理、复制管理、策略管理等Q这些工作你可以一人完?q个相当牛B了,对Dominoq行机制Q邮件\由机Ӟ复制机制QInternet协议{都要有比较深层ơ的了解)Q也可以一个小l来完成?/p>
如果做ؓ一个合格Domino理员,不懂得如何编写程序,可以说根本算不上一个真正的pȝ理员。就像二黑客拿一些专门的黑客工具黑网站,黑QQ号一P只知道机械化的做Qƈ不知道ؓ什么要q么做,基础原理是什么?/p>
当你的Domino服务器宕机后Q向IBM800电话支持Q他们都会要求你提供NSD日志l他们进行分析,l他们分析后Q会告诉你宕机原因,是由什么由于引起宕机?/p>
a归正传,我们先讲讲如何分析NSD日志Qƈ从中扑և服务器目前的问题所在,宕机目要是由什么引L?/p>
NSD日志存放?DominoData%\IBM_TECHNICAL_SUPPORT目录下,文g格式Q?/p>
nsd___<日志生成日志(YYYY_MM_DD)>@<日志生成旉(HH_MM_SS)>.log
例:
nsd_all_AIX_as2_2008_04_03@17_32_40.log
nsd_W32I_as5_2008_07_18@11_07_24.log
以文件名能很快清楚服务器的基本信息?/p>
NSD分析工具有两U(目前我所知道的,也许q有其他的)Laza和Lotus Notes Diagnostic(UͼLND)两种Q大致功能是相同的,Laza因ؓ有SPR库和PMR库支持,可以快速的扑և服务器宕机的解释和解军_法,但是SPR库和PMR库,IBM是不对外开放;所以我们用的话Laza或LND是没区别的。我推荐大家使用LND_了,单方便,配合Google查询_完成NSD分析工作?/p>
如何分析Q很单,安装完LND后,启动Lotus Notes客户端,打开LND?LND~省会将lnd.nsf安装在你%NotesData%\LND目录?Q如下图Q?/p>
单击"Open & Process a file"Q打开一个NSD文gQ则会将一个NSDq行分析Qƈ结果保存在Notes文档中。NSD分析l果文档分ؓ以下部分Q?/p>
StackQ记录引起宕机的主要Stack片断信息
HighLightsQ主要强调的错误信息Q包括出错Q务名U、进E号或内存地址{?
SPR SearchQSPR查询关键字,使用q些关键字,在IBM Support|站上能查询相关信息Q(q个是最有效的解军_法之一Q?
OptionsQ设|信息,可以不管
Stack related infosQ记录详l的Stack信息Q分Z下几个部分,其中观察U色加粗部分可以定位宕Z要原因以及所由哪个用户在使用哪个数据库中哪个文档Q文档中调用了哪D늨序)所引v的:
open database(s) by the processQ进E打开的数据库
Possible file name(s) in stack framesQ可能涉及到的数据库文g?
Process Associated Collection(s)&View(s)Q进E所涉及到的集合和视?
Process Handle Table InfoQ进E所涉及到的Handle Table信息
Process MemoryQ进E用内存情?
Process Memory MappingQ进E用内存地址映射?
Process Top 10 Memory block usageQ进E中?0个内存块使用情况
Shared OS FieldsQ共享OS?此处记录了宕机的主要原因)
Stack frames DumpQStackl构回收信息
Virtual Thread(s)Q所涉及的虚拟线E?此处记录了宕机时所涉及到的数据库、文档以及Domino设计元素)
System related infosQ系l相关信息,如果你对服务器的?g环境非常了解Q可不关注此部分Q?
DebugQ调试方法,当出现宕机后Q可以用这里提供的Ҏ对Domino服务器进行调试。如果前面的Stack related infos定位不到宕机的真正原因,才用这里面介绍的方法进行调试;不过大部分错误能在Stack related infos扑־刎ͼq合IBM Support|站或官方论坛找到相应的解决办法?br />
NSD分析思\
1.通过LND解析NSD后,首先查看Stack信息Q如下图Q?/p>
2.从上图不隄Z上宕机原因,然后在SPR Search标签中可得到相关的查询关键字Q如下图Q?/p>
通过q些关键字,你能在IBM Support|站上或官方论坛上找到相关的信息或解x案。找到这些答案基本上分析工作完成了。根椐IBM Support|站上提供的解决ҎQ对服务器做出相应的调整卛_解决宕机问题。但如果SPR Search标签中ƈ未提供查询关键字(有些NSDq未提供q些Q这说明q不是Domino本nBUG所引v的,是由于你写的E序引v了宕?Q所以我们得q一步分析是哪个数据库中哪段E序引vq个原因的,HEHE?/p>
3.打开Stack Related Infos标签Q展开Shared OS Fields区段Q如下图Q?/p>
从上图我们可以看出宕机的原因和引起宕机的服务和相关线E。在某些宕机情况下FaultRecovery中会记录明显的错误,而不是内存地址信息Q如QPANIC:XXXXXXXX{,你可以以此ؓ关键字去IBM Support|站上查询相关信息,帮助你分析宕机原因,也可以直接得到答案。^_*
4.从上面示例中Q我们得C引v宕机的线E号Q展开Virtual Thread(s)区段Q通过比较相关U程Pp定位到是由哪个数据库中哪个设计元素引L宕机。如下图Q?/p>
通过相关U程号与VThread ID的对应,我们扑ֈ了是由哪个用h作哪个数据库引v的宕机。其中也记录了用h作的文档所引v的宕机。其中NoteID为Domino数据库元?名括设计元素和文?标识QClass为元素类别。元素类别如下:
Note Class
描述
0x0001
文档
0x0004
表单
0x0008
视图
0x0040
ACL
0x0200
代理
0x0800
公式
5.得到NoteID后,如何定位臛_素呢QNSD中NoteID是以10q制方式表示的,如果要在Domino环境中查扄应的元素Ӟ先将NoteID转成16q制再进行查询?/p>
打开Domino AdministratorQ在“File”标签中选中相应的数据库Q在双工具栏?#8220;Find Note”Q输入NoteIDQ即可找到相应的元素Q如下图Q?/p>
通过以上Ҏ对NSD分析Q能快速有效的扑ֈ服务器宕机的真正原因在哪Qƈ有针Ҏ的提出解决ҎQ也能找到是׃哪段E序引v了Domino服务器宕机,Z么会引v宕机Q可快速的修正代码错误?/p>
以上Ҏ主要通过LND工具q行分析。LND工具q不?00%从NSD中找到问题所在,q时你就得用LND工具分析Q手工分析方式。手工分析方法请参考Hands On NSD。Hands on NSD介绍了NSD文g的组成,分析ҎQ步骤等?/p>
从项目角度上来说Q造成大部分宕机的原因80Q以上都是程序代码所造成的。所以开发h员在实施目或开发品时应该充分x自己~写代码的质量,定wQ性能Q扩展等问题Q不要ؓ了完成Q务而不注重质量。如果只是ؓ了完成Q务,客户满意度达不到Q项目不能验Ӟ来q工Q同样也耗费了大量的旉Q也l以后的l护人员带来了很大的l护工作量,更重要的是不利于产品构架的扩展和性能高的应用。这q头客户不是dQ好不好用h家说了算Q验不验收h家说了算Q不要涂一时快zȝ整个团队带来ȝ?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/SquallZhong/archive/2008/12/05/3456602.aspx
一D늟短的自我介绍Q其实是Z揭开更深入的面谈而设的?
一分钟的自我介l,犹如商品q告Q在短短60U内Q针?#8220;客户”的需要,自己最好的一面,毫无保留地表现出来,不但要oҎ留下深刻的印象,q要x引发?#8220;购买?#8221;?/p>
自我认识想一矢中的,首先必须知道你能带给公司什么好处。当然不能空口讲白话Q必L事实加以证明?/p>
最理想是能够“展示”q去的成。例如你曾ؓ以往的公司设计网,q得q奖Ҏ赞扬。当Ӟq些例子都必M现在公司的业务性质有关?/p>
职位愈高Q自我认识就愈重要,应将个h的成败得失,录在日C。这P可以时刻都清楚自己的弱点与强项?/p>
投其所好清楚自q强项后,便可以开始预备自我介l的内容Q包括工作模式、优炏V技能,H出成就、专业知识、学术背景等?/p>
好处众多Q但只有短短一分钟Q所以一切还是与该公司有关的好。如果是一间电脑Y件公司,应说些电脑Y件的话题Q如是一间金融胦务公司,便可跟他说钱的事QM投其所好?/p>
但有一点必ȝ讎ͼ话题所C处,必须H出自己对该公司做出的A献,如增加营业额、减低成本、发掘新市场{?/p>
铺排ơ序内容的次序亦极重要,是否能紧握听众的注意力,全在于事件的~排方式。所以排在头位的Q应是你最想他记得的事情。而这些事情,一般都是你最得意之作。与此同Ӟ可呈上一些有关的作品或记录增加印象分?/p>
w体语言不管内容如何_ֽluQ若没有丽的包装,q是不成的。所以在自我介绍当中Q必ȝ意自己在各方面的表现Q尤其是声线。切忌以背诵朗读的口Ml自己。最好事前找些朋友作l习对象Q尽量o声线听来畅自然Q充满自信?/p>
w体语言也是重要的一环,其是眼接触。这不但令听众专心,也可表现自信?/p>
曾有一Ҏ告指出,日常的沟通,非语a性的占了70%.所以,若想面试成功Q便应紧记注意一下你的n体语a?/p>
面试问题及回{技巧大公开
1、我们ؓ什么要聘用?/p>
Q测试你的沉静与自信。)l一个简短、有CD的回{:“我能做好我要做的事情?#8221;我相信自己,我想得到q䆾工作?/p>
2、ؓ什么你惛_q里来工?/p>
Q这应该是你喜爱的题目。)因ؓ你在此前q行了大量的准备Q你了解q家公司。组l几个原因,最好是短而切合实际的?/p>
3、这个职位最吸引你的是什?/p>
Q这是一个表C对这个公司、这份工作看法的Z。)回答应考官认你具备他要求的素质?/p>
4、你是否喜欢你老板的职?/p>
回答当然?#8220;YESQ如你不满意Q可补充Q?#8221;当我有这个评能力时Q或“有这样一个空~时吧?/p>
5、你是否愿意d司派你去的那个地?/p>
如果你回{?#8220;NOQ你可能会因此而失掉这份工作,CQ你被雇用后你可以和公司p个问题再行谈判?/p>
6、谁曄l你最大的影响
选一个名字即可,最好是你过ȝ老师{,再简短准备几句说明ؓ什么?/p>
7、你在q家公司呆多?/p>
回答q样的问题,你该持有一U明的态度Q即Q能待多久待多久Q尽可能长,“我在q里l箋学习和完善自己?/p>
8、什么是你最大的成就
准备一两个成功的小故事?/p>
9、你能提供一些参考证明吗
你该准备好一些相关的整洁的打CgQƈ有现在的电话和地址?/p>
10、从现在开始算Q未来的五年Q你惌己成Z么样子?或者:告诉我,你事业的目标
回答一定要得体Q根据你的能力和l历?/p>
11、你有和q䆾工作相关的训l或品质?/p>
说明要短QD两三个最重要的品质,要有事实依据?/p>
12、导致你成功的因素是什?/p>
回答要短Q让考官自己LIӞ比如只一句话Q?#8220;我喜Ƣ挑战性工作?/p>
13、你最低的薪金要求是多?/p>
Q这是必不可的问题Q因Z和你的考官Z不同考虑都十分关心它。)你聪明的做法是:不做正面回答。强调你最感兴的是这个机遇和挑战q存的工作,避免讨论l济上的报酬Q直C被雇用ؓ止?/p>
14、你q有什么问题吗
你必d{?#8220;当然。你要准备通过你的发问Q了解更多关于这家公司、这ơ面试、这份工作的信息?/p>
假如你笑W说“没有Q心里想着l于l束了,镉K吐了口气Q,那才是犯了一个大错误。这往往被理解ؓ你对该公司、对q䆾工作没有太深厚的兴趣Q其ơ,从最实际的考虑出发Q你N不想听话听音敲打一下考官Q推断一下自己入围有几成希望Q?/p>
q里有一些供你选择的问题:1、ؓ什么这个职位要公开招聘Q?、这家公司(q个部门Q最大的挑战是什么?3、公司的长远目标和战略计划您能否用一两句话简要ؓ我介l一下?4、您考虑q个职位上供职的人应有什么素质?5、决定雇用的旉大致期限要多久?6、关于我的资g能力问题Q您q有什么要问的吗?
求职面试必考题大公开
以下归纳常见的面试必考题Q前往面试前别忘了事先仿真自己的答案或请亲朋好友赶快给你徏议哟Q?/p>
Z么选择来本公司应征Q?/p>
q是所有应征者必先遇到的问题Q以U极、正面的{案回答Q除说明公司的待遇、福利等条g吸引Z外,可进一步说明此工作可活用自q专长?/p>
Z么辞d一份工作?
此时如果一x评以前的工作Q便很难被录用。而应说明是ؓ?#8220;实现自我”之类了话语。此外,无工作经验者则可对应征公司的性质Q表现出兴趣作答?/p>
q去的工作经历如何?
C会新鲜人可量提出所有打工或D的经验,甚至曾义务帮助过学校Q其它团体或亲朋好友的工作经验皆可补充,最好能具体说明工作的内容及担Q此职位的q资Qƈq一步说明在此职位上所扮演的角Ԍ若有实际的成果可一赯明?/p>
对工作期望与目标ZQ?/p>
对工作拥有具体期望与目标的hQ通常成长较快。应征者针对这c问题可以回{:“我的目标?#8230;……Qؓ了达到这个目标,必须努力充实自己………Q而我拥有q样的自信?#8221;?#8220;q是我从到大的理想………?#8221;
喜欢q䆾工作的哪一点?
无工作经验的人可以针对自pq䆾工作吸引Q以及关心的地方回答Q如Q?#8220;交通方?#8221;?#8220;工作性质适合自己”之类。有工作l验者倘若能提份工作与众不同之处,ȝ多会极感兴趣的?/p>
谈谈在工作上接受挫|的经验?
每一位干l的工作者,都不免要接受挫|的挑战。挫折容忍力是面谈中必须考验的一,q时回答可以是积极的Q例如从中学到教训,努力扑և原因Q终于把事情做好{;那么׃得到较好的分数?/p>
选择q䆾工作的动机?
q类问题多针Ҏl验者,以了解其对工作的理解度,认求职者只是怀抱憧憬或Z兴趣应征。求职者从对工作的研究与个人兴的角度Q加以发挥?/p>
你认Z界发展如何?
主要是了解求职者对产业现况的理解及展望Q针Ҏl验者则试探其投入意愿与兛_E度Q不L太独特的见解Q只表达正的意见。如果是同业的{职者,不只L握业界的方向Q尚d入个解?/p>
你的优点是什么?
Z解求职者如何客观分析自己,q测试其表达与组l能力。除个h说法外,加上亲友的观点可增加说服力,应避免抽象的陈述Q而以具体的体验及自我反省ZQ内容更具吸引力?/p>
谈谈人际关系生活l验Q?/p>
面谈者能从你的性向和兴中解析Q你的应对能力及对事情决断能力的技巧,通常问题不外乎:“遇到与朋友冲H的时候,你怎么处理Q?#8221;?#8220;与主意见相左的时候,而你认ؓ你才是对的,你会用什么方式让ȝ接受Q?#8221;。每一个公叔R要的不是力争到底的坚持,而是需要更q一步的搜集资料Q透过人际关系来积聚力量,扑֯正确的工作决{和Ҏ?/p>
你希望的待遇ZQ?/p>
针对待遇问题以清楚明答复最佻I“依公司规?#8221;可能被误认ؓ~Z自信而非谦虚。客观归U个人年龄、经验、能力,再依产业别、公司规模等客观资料Q提出合理的数字Q而附带说明提高待遇的理由是必要的?/p>
何时可以上班Q?/p>
若是应届毕业生的话,一录取卛_上班是最理想的回{,但一边工作一边做转业打算的情形相当普遍,衡量说服上司批准职、工作交接等问题Q做充裕的时间ؓ宜。若旉拿捏不准致g后报刎ͼ可能Ҏ公司造成困扰Q说明现况,报到时间订在一个月之内应不?/p>
试环境Q?/span>
springframework 1.0
数据库:Informix 9.21.FC1
表结构:
Column name Type Nulls
f1 varchar(10,0) yes
f2 varchar(10,0) yes
f3 varchar(10,0) yes
f4 varchar(10,0) yes
f5 varchar(10,0) yes
f6 varchar(10,0) yes
f7 varchar(10,0) yes
f8 varchar(10,0) yes
f9 varchar(10,0) yes
f10 varchar(10,0) yes
?/span>f1上徏立烦?/span>
试情况Q?/span>
case 1Q?/span>SQL单个提交Q不prepareQ?/span>BaseDAOJdbc?/span>executeSqlҎ
case 2Q?/span>SQL单个提交Q?/span>prepareQ方法如下:
public void saveDataSinglePrepare(final List data) {
getJdbcTemplate().execute(insertData,
new PreparedStatementCallback() {
public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {
Iterator iter = data.iterator();
while (iter.hasNext()){
Object[] objs = (Object[]) iter.next();
for(int i=0; i ps.setObject(i+1, objs[i]); } ps.execute(); } return null; } } ); } case 3Q?/span>SQL扚w提交Q?/span>BaseDAOJdbc?/span>executeBatchҎ /** * Jdbc sql的批量操?/span> * @param sql sql语句 * @param values 包含参数?/span>ListQ?/span>List的每个元素是一?/span>Object[]Q?/span>Object[]是一个单独的sql操作所需的参?/span> */ public void executeBatch(final String sql, final List values){ if (values.size() == 0) return ; getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() { public void setValues(PreparedStatement ps, int i) throws SQLException { Object[] args = (Object[]) values.get(i); for(int j=0; j ///log.debug(String.valueOf(j+1)+":"+args[j].toString()); ps.setObject(j+1, args[j]); } } public int getBatchSize() { return values.size(); } } ); } case 4Q?/span>SQL扚w提交Q?/span>BaseDAOJdbc?/span>executeBatch2Ҏ private static final int batch_size = 100; public void executeBatch2(final String sql, final List values){ getJdbcTemplate().execute(sql, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException { Iterator iter = values.iterator(); int sqlCount = 0; while (iter.hasNext()){ if (sqlCount >= batch_size){ ps.executeBatch(); sqlCount = 0; //log.info("executeBatch:" + sql); } Object[] args = (Object[]) iter.next(); for(int i=0; i ps.setObject(i+1, args[i]); } ps.addBatch(); sqlCount ++; log.debug("sqlCount:" + String.valueOf(sqlCount)); } if (sqlCount > 0){ ps.executeBatch(); sqlCount = 0; //log.info("executeBatch:" + sql); } return null; } } ); }
]]>