js数组元素相关方法
var arr = new Array();
arr[0] = "aaa";
arr[1] = "bbb";
arr[2] = "ccc";
//alert(arr.length);//3
arr.pop();
//alert(arr.length);//2
//alert(arr[arr.length-1]);//bbb
arr.pop();
//alert(arr[arr.length-1]);//aaa
//alert(arr.length);//1
var arr2 = new Array();
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
//alert(arr2.length);//2
arr2.pop();
//alert(arr2.length);//1
arr2 = arr2.slice(0,arr2.length-1);
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
arr2[2] = "ccc";
arr2 = arr2.slice(0,1);
alert(arr2.length);//1
alert(arr2[0]);//aaa
alert(arr2[1]);//undefined
shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
unshift:将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。
pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5 //不用返回的话直接调用就可以了
push:将参数添加到原数组末尾,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
concat:返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length; //同unshift
var b = a.splice(a.length-1,1); //同pop
a.splice(a.length,0,6,7); var b = a.length; //同push
reverse:将数组反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
sort(orderfunction):按指定的参数对数组进行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
工具软件
2.FTP上传软件,FlashFXP、LeapFTP、CuteFTP比较好但是要收费,FileZilla是个免费的不错的一个FTP工具,其下载地址如下:
域名空间
网站建设
想学习建站还是需要进行系统学习,网上提供很多相关的视频教程,这里推荐一个学习地址
网易学院《网站设计系列多媒体教程》,但是如果不是想学习网页编程可通过一些现成的cms系统+模板方式进行建站,这样相对方便容易也大大减少了学习成本和建站时间,现在比较流行的cms系统有wordpress、J2CMS、phpcms、DEDECMS、Drupal,以下以wordpress为例讲解一下建站流程
1.下载wordpress 下载地址:http://cn.wordpress.org/wordpress-3.5.1-zh_CN.zip
2.将下载的wordpress-3.5.1-zh_CN.zip解压后,通过FTP软件上传到空间
3.输入你的域名访问,可进入wordpress的安装向导页面,按照提示一步一步操作,直到安装完成(过程相当简单,大约5分钟完成)。
4.安装完成后你的网站就可以访问了,通过访问你的域名加wp-login.php例如:http://www.test.com/wp-login.php可进入后台管理,这里可以修改网站的主题,在主题页面可免费下载非常漂亮的完整主题模板,选择好自己喜欢的主题模板后安装,在看看自己的网站,是不是非常漂亮,到此结束网站制作完成,之后只需要登陆后台进行文章发布就可以了。
奥尚软件(Aosunsoft),是一家
南充软件定制开发商,专业致力于企业管理信息化建设与服务,为企业提供网站建设,信息系统设计,网站建设设计以及网络营销解决方案。公司成立于2012年。公司是以向广大企业用户提供全面的ERP信息化解决方案、企业内部办公平台(OA)和网站发布系统搭建为主要业务的高科技企业。公司拥有一支团结协作、素质过硬、技术一流的研发与实施的团队,更好的为企业实现信息化管理。
所谓设计师,是那个站在时代前沿,必须具备敏锐洞察力的职业,他们应该具备鹰一般的眼睛,随时注视着周围环境的瞬息万变。
潜规则说得好,先一统人心,再集体办事。引导客户的终极目的也在于此,先拉其入帮,同化其思想,更有助于后续工作的开展。那么,人都是有思想的,因此你的介入性引导,也有可能不会得到预期的效果,这都依靠你在引导过程中的经验和手法。这就像你去按摩一样,第一次总是觉得像被揍,以后越来越舒服,都是一个技术层面的东西。
1. 试图同客户站在同一战线
客户一定是有底线的,你的设计不能太好,也不能太坏,不能太贵,也不能太贱,这是一个拿捏的过程。如何了解客户的底线?去拜访客户,去到他的地盘看他的山头插的什么旗。
公司的规模,人员的素质,前台的相貌,会议室多大,客户的西装什么牌子,他们的市场在哪里,他们是否有专业的产品经理…这一切都在透露着客户的底线和心理价位,最重要的,还有对设计的认知程度。
甲方与你直接对接的人,是对方的一把手,还是只是经办人?如果只是经办人,他是什么样的职位?在甲方单位中占据多少重量?他经办该项目是身负重担势必圆满完成否则有身家性命的风险,还是只想敷衍了事应付他们boss?甚至,该经办人是否潜规则了一点回扣?
有时候你的客户并不是一手客户,他的背后还有人,因此你还要深入的观察和询问真正对设计有着决定和执行权的那层,或许他们的信息才是真正需要在设计中实践的部分 — 所以我强调,对于设计合作的引导应该从最高层的领导开始,或者从对项目有着决定意义的单位开始。
这都是些什么?这与项目有关吗?这与设计师有关吗?答案是:有!而且这些问题应该是设计师在项目着手前应当去了解的事情。所谓设计师,是那个站在时代前沿,必须具备敏锐洞察力的职业,他们应该具备鹰一般的眼睛,随时注视着周围环境的瞬息万变。
某设计师曾经手过这样一个网站设计项目,经办人有着很多甲方那不可一世傲慢,丝毫不听取设计师的专业性建议,从项目一开始便对乙方有着敌对情绪,这样对项目的开展是很不利的。尔后设计师获取到这样的信息:对接人是甲方该项目的项目经理,曾说服其boss开展该项目,遂找到设计方进行项目开发。那这代表着什么?他属于什么类型?他希望得到什么,害怕发生什么?很显然,如果这项目搞砸了,他必当身败名裂,这就是他所害怕发生的。此时,本来设计师只用针对情况稍加引导便能水到渠成,可该客户极其主观,仍是一意孤行,他的很多决策甚至触犯了很多设计的大忌和原则。
此时,放在设计师面前的只有两条路,一是继续抗争,可这条路如果把握不当,轻者延误项目进度,加重双方的敌对情绪,重者遭到投诉甚至导致项目终止。二是逆来顺受,你爱怎么做,我就怎么做,只要项目顺利验收,无非就是多搞出了个垃圾项目而已。
对,垃圾项目,相信每一个设计师都不愿意这样的事情发生,那么,此时他该如何去抗争,如何去扭转现状?
那日,设计师借双方闲聊的机会,推心置腹的说道:“我一年要经手很多的项目,搞砸一个,对我来说并没有什么,更何况如果项目正常验收,理论上我也不算做砸,而你不一样,我也在和你类似的公司工作过,也负责过很多项目,我很理解你现在的心情,我知道你也很想把项目做好,等等这些,是我结合多年的设计经验给你的针对性建议,很多都是有实际数据证明的,希望你能够听取……”
尔后,双方成了朋友,项目也顺利完成,后来甲方借助该平台,业务开展得如火如荼,当然这和甲方自身强大的实力与丰富的资源密不可分,这是后话。
从客户的角度出发,生活中也有不少的例子,比如你去餐馆吃饭,无良的餐馆的服务生总是会推荐餐牌上的招牌菜多半是价格昂贵的,而有一点同理心的餐馆会从客户角度出发建议你点什么,点多少,甚至我还遇到过根据你的用餐目的来定制点菜和服务的。
同客户站在同一战线,是赢取客户信任的第一步,也是引导的第一个开端。
2. 不要扮演商务人员的角色
有部分刚被一脚踢进社会的设计师,不小心误入了山寨的路线,认为“引导客户”就是和客户“搞关系”,有部分很不幸,真的搞出了关系。。。。。。陪吃陪喝,风花雪月其实不是我们设计师的擅长,也不必要。
设计师必然是需要一些格调的,你和客户打成一片其实也未必就能让他对你的设计俯首称臣,设计需要交际,但是也需要挑客,你不能是个菜就捡进篮子里 — 我这么说确实现实了点,但现实远比这还卑鄙。
如果你坚持要做设计行业的口碑,就绝对不要和山寨客户坐到一桌推杯换盏 — 但是我还是想赚他们的钱怎么办?请雇佣专业的商务人士出面解决你的尴尬。
3. 强行引导会有反效果
什么叫强行引导呢?我相信客户方最有发言权,就是一个不怎么样的设计师和公司来推荐,或者不太成熟的内部团队做演示,设计出来的玩意外行看了都认为有点问题,他们自己还在说得眉飞色舞,什么“国际化风格”,“大气磅礴”,“精美绝伦”能用上的花言巧语全用上了,最后让人感觉像个小丑。
引导的过程中,从见面的第一刻起就回避客户的眼光,或者看得要把客户吃掉一样,客户一有意见就说“根据我们的成功经验,你的这个看法是。。。。。”,基本上这种作风的引导方式只会带来恶劣的反效果。自信应该表现在做人做事的细节和缜密,而不是行为和语言的攻击性上。
4. 客户关注的也许是设计以外的事
也许你不相信,大多数传统行业客户在听你的设计提案的时候,根本搞不清你在干嘛,他们关注的是你的语言流畅程度,关注你用什么笔记本电脑,关注你的着装,关注你的自我介绍……直到,对,直到你提及他们的产品名称,价格,市场占有率,利润率,品牌影响程度和深度的时候,他们的耳朵才会竖起来。
设计师放了太多精力在我们的设计过程中了,其实客户更关心的是“你这个设计究竟是怎么得来的?”“为什么要这么设计?”“用了这个设计产品就能好卖么?”“你的设计为什么这么贵?” — 好了,这同你去旅游一样,如果景色不磅礴,路途不遥远,人烟不稀少,文化不异域,你会认为旅行的意义没有那么的厚重。
5. 你的设计可能没有那么好
当然,你的客户未必都是不懂设计的,所谓没吃过猪肉也见过猪跑,如果你的客户花费了3个月,看尽了各种花俏的提案,参加了上百场的设计推荐会后,相信他的审美和设计理解也可以有一点改观和提升。那么,你在小处着眼的那些花花肠子不见得能起作用了,作为设计师,你至少应该保证自己的见识和作品是客户“意料以外”的,有时候引导客户的关键就在于作品创意和客户认知之间的落差。
如果可以的话,你想法了解一下共同争取客户的竞争对手的作品,找一找自己的差距,在任何方法都失效的情况下,也许问题就出在自己的身上,这是我们可以接受,并且要修正的。
本文转载自网页教学网!
http://www.sealee.com/design/design-5089.html
找了一个小东西,叫朋友帮忙改了一下,呵呵
wallpapers.rar
MANIFEST中的配置信息共有下面几类:
一. 一般属性
1. Manifest-Version
用来定义manifest文件的版本,例如:Manifest-Version: 1.0
2. Created-By
声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
3. Signature-Version
定义jar文件的签名版本
4. Class-Path
应用程序或者类装载器使用该值来构建内部的类搜索路径
二. 应用程序相关属性
1. Main-Class
定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。
三. 小程序(Applet)相关属性
1. Extendsion-List
该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性
2. <extension>-Extension-Name
3. <extension>-Specification-Version
4. <extension>-Implementation-Version
5. <extension>-Implementation-Vendor-Id
5. <extension>-Implementation-URL
四. 扩展标识属性
1. Extension-Name
该属性定义了jar文件的标识,例如Extension-Name: Struts Framework
五. 包扩展属性
1. Implementation-Title 定义了扩展实现的标题
2. Implementation-Version 定义扩展实现的版本
3. Implementation-Vendor 定义扩展实现的组织
4. Implementation-Vendor-Id 定义扩展实现的组织的标识
5. Implementation-URL : 定义该扩展包的下载地址(URL)
6. Specification-Title 定义扩展规范的标题
7. Specification-Version 定义扩展规范的版本
8. Specification-Vendor 声明了维护该规范的组织
9. Sealed 定义jar文件是否封存,值可以是true或者false
六. 签名相关属性
签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段
Name: javax/mail/Address.class
Digest-Algorithms: SHA MD5
SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=
MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==
这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码)
CAPTCHA,全称为“Complwwetely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)。简单来说就是人类验证。当我们注册邮箱或到一些网站留言的时候,都需要输入验证码,一般的验证码是扭曲或模糊的数字,或一道简单的四则运算。CAPTCHA的作用是防止计算机自动完成注册、留言等操作。
telnet
open 192.168.1.11
root
password
cd /websphere/siyn 目录跳转
ls 列表
mkdir test1 创建目录
mkdir test2
mkdir test3
rmdir test3 删除目录
ln /websphere/siyn/test2 /websphere/siyn/test1 在test1下建立了一个test2的软连接
rm /websphere/siyn/test1/test2 删除软连接
1.1数据库
①创建数据库
mysql:
查看数据库:show databases;
创建数据库:create database siyn;
②连接数据库
mysql: use siyn;
oracle:
③删除数据库
mysql:drop database siyn;
1.2表
①创建表(临时表,复制表)
mysql:
查看表:show tables;
创建表:
create table t_users(
id int,
name varchar(20),
sex char(1),
password varchar(20)
);
②删除表 drop table t_users;
③修改表结构,默认值,自增长
mysql:
查看表结构:desc t_users;
④约束与数据完整性(主键,外键,非空,唯一,检查)[添,删,改]
1.3视图
......
1.4
①索引
②序列
③触发器
摘要: 来源:http://www.cn-java.com/www1/?action-viewnews-itemid-3384
JDK为程序员提供了大量的类库,而为了保持类库的可重用性,可扩展性和灵活性,其中使用到了大量的设计模式,本文将介绍JDK的I/O包中使用到的Decorator模式,并运用此模式,实现一个新的输出流类。...
阅读全文
摘要: 原帖:http://www.bugcode.com/diary/10322
(1)、浮点数精确计算
每次报表统计的物资金额和实际的金额要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用java的浮点类型double来定义物资金额,并且在报表统计中我们经常要进行一些运算,但Java中浮点数(double、float)的计算是非精确计算,请看下面一个例子:
...
阅读全文
function getUrlParam(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
//alert(reg);
var r = window.location.search.substr(1).match(reg);
if(r!=null) return unescape(r[2]);
return null;
}
hql.append(" select new Map( ");
hql.append(" student.nj.njmc as njmc ");//年级名称
hql.append(" , student.sszy.zymc as zymc ");//专业名称
hql.append(" , student.bj.jxd.name as jxdmc ");//教学点名称
hql.append(" , student.bj.bjmc as bjmc ");//班级名称
hql.append(" , sum( case when student.xb = 1 then 1 else 0 end ) as male");//男
hql.append(" , sum( case when student.xb = 2 then 1 else 0 end ) as famale");//女
hql.append(" ) ");
hql.append(" from Student student where 1=1 ");
hql.append(" and student.nj.id > ? ");
hql.append(" and student.nj.id <= ? ");
hql.append(" and student.pycc.id = ? ");
hql.append(" group by student.nj.njmc , student.sszy.zymc , student.bj.jxd.name , student.bj.bjmc ");
hql.append(" order by student.nj.njmc desc , student.sszy.zymc , student.bj.jxd.name , student.bj.bjmc ");
摘要: 序号
内容类型
文件扩展名
描述
...
阅读全文
showModalDialog和showModelessDialog使用:
1.让在showModalDialog和showModelessDialog的超连接不弹出新窗口
在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。
2.刷新showModalDialog和showModelessDialog里的内容
<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload</a>
3.showModalDialog和showModelessDialog数据传递
传递方式:
window.showModalDialog("filename.htm",window)
读取和设置:
alert(window.dialogArguments.var_name)//读取var_name变量
window.dialogArguments.var_name="oyiboy"//设置var_name变量
摘要: struts2的验证器是用的xwork里面的验证,自定义验证器就是根据源码继承已有的字段验证器而来。具体步骤如下:
1.展开xwork-2.0.4.jar,com.opensymphony.xwork2.validator.validators目录下有个default.xml,将它复制到项目根目录下改名叫validators.xml。
验证框架首先在根目录下找validators.xml文件,...
阅读全文
native2ascii_bat.bat
del package_zh_CN.properties
copy package.properties package_zh_CN.properties.utf8
native2ascii -encoding utf-8 package_zh_CN.properties.utf8 package_zh_CN.properties
del package_zh_CN.properties.utf8
del *.bak
# $Id: Action.java 502296 2007-02-01 17:33:39Z niallp $
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
### START SNIPPET: complete_file
### Struts default properties
###(can be overridden by a struts.properties file in the root of the classpath)
### Struts的默认属性
###(可以通过在classpath根目录下新建一个struts.properties文件来重载此文件中的属性)
###
### Specifies the Configuration used to configure Struts
### one could extend org.apache.struts2.config.Configuration
### to build one's customize way of getting the configurations parameters into Struts
### 指定用于struts的配置类
### 一个继承于 org.apache.struts2.config.Configuration 的类
### 建立一个自定义的方式获得Struts的配置参数
# struts.configuration=org.apache.struts2.config.DefaultConfiguration
### This can be used to set your default locale and encoding scheme
### 这可以用来设置您的默认区域设置和编码方案
# struts.locale=en_US
struts.i18n.encoding=UTF-8
### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
### Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
### 如果指定的话,在这里默认对象的工厂类可以被重载
### Note: 在某些情况下可以支持缩写, 例如 "spring"
### 另外,您也可以在这里提供一个com.opensymphony.xwork2.objectfactory的子类名
# struts.objectFactory = spring
### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
### 指定自动装配的方式,当使用springobjectfactory 。
### 有效值有: name, type, auto, and constructor (name 是默认值)
struts.objectFactory.spring.autoWire = name
### indicates to the struts-spring integration if Class instances should be cached
### this should, until a future Spring release makes it possible, be left as true
### unless you know exactly what you are doing!
### valid values are: true, false (true is the default)
### spring是否使用自身的cache
struts.objectFactory.spring.useClassCache = true
### if specified, the default object type determiner can be overridden here
### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
### Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
### Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
### using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
### functions are integrated in DefaultObjectTypeDeterminer now.
### To disable tiger support use the "notiger" property value here.
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# 专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用)
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
#设置存储上传文件的目录夹
struts.multipart.saveDir=
#multipart请求信息的最大尺寸(文件上传用)
struts.multipart.maxSize=2097152
### Load custom property files (does not override struts.properties!)
### 加载附加的配置文件的位置(不重载struts.properties文件中的属性)
# struts.custom.properties=application,org/apache/struts2/extension/custom
### How request URLs are mapped to and from actions
### 如何将请求的URL映射到action类和从action类映射到URL
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
### 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀如login.do的'do'
### 你可以提供一个逗号分隔的列表,例如:struts.action.extension=action,jnlp,do
struts.action.extension=action
### Used by FilterDispatcher
### If true then Struts serves static content from inside its jar.
### If false then the static content must be available at <context_path>/struts
struts.serve.static=true
### Used by FilterDispatcher
### This is good for development where one wants changes to the static content be
### fetch on each request.
### NOTE: This will only have effect if struts.serve.static=true
### If true -> Struts will write out header for static contents such that they will
### be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
### headers).
### If false -> Struts will write out header for static contents such that they are
### NOT to be cached by web browser (using Cache-Content, Pragma, Expires
### headers)
struts.serve.static.browserCache=true
### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
### 是否允许动态方法调用
struts.enable.DynamicMethodInvocation = true
### Set this to true if you wish to allow slashes in your action names. If false,
### Actions names cannot have slashes, and will be accessible via any directory
### prefix. This is the traditional behavior expected of WebWork applications.
### Setting to true is useful when you want to use wildcards and store values
### in the URL, to be extracted by wildcard patterns, such as
### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or
### "/foo/save".
### 这个属性设为true以后,action的名字中就可以使用斜杠了。
### Struts2的默认设置是不允许action的名字中出现斜杠的,需要用package来分割命名空间。
struts.enable.SlashesInActionNames = false
### use alternative syntax that requires %{} in most places
### to evaluate expressions for String attributes for tags
### 是否可以用替代的语法替代tags
struts.tag.altSyntax=true
### when set to true, Struts will act much more friendly for developers. This
### includes:
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
### For example: normally a request to foo.action?someUnknownField=true should
### be ignored (given that any value can come from the web and it
### should not be trusted). However, during development, it may be
### useful to know when these errors are happening and be told of
### them right away.
### 是否为struts开发模式
struts.devMode = false
### when set to true, resource bundles will be reloaded on _every_ request.
### this is good during development, but should never be used in production
### 是否自动加载国际化信息
struts.i18n.reload=false
### Standard UI theme
### Change this to reflect which path should be used for JSP control tag templates by default
# 默认的UI template主题
struts.ui.theme=xhtml
# UI templates的目录夹
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
#设置默认模板类型. ftl, vm, jsp三个中的一个
struts.ui.templateSuffix=ftl
### Configuration reloading
### This will cause the configuration to reload struts.xml when it is changed
### 是否自动加载xml配置
### 这将导致配置重新载入struts.xml当它被改变
struts.configuration.xml.reload=false
### Location of velocity.properties file. defaults to velocity.properties
struts.velocity.configfile = velocity.properties
### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
struts.velocity.contexts =
### Location of the velocity toolbox
struts.velocity.toolboxlocation=
### used to build URLs, such as the UrlTag
struts.url.http.port = 80
struts.url.https.port = 443
### possible values are: none, get or all
struts.url.includeParams = get
### Load custom default resource bundles
### 加载附加的国际化属性文件(不包含.properties后缀)
# struts.custom.i18n.resources=testmessages,testmessages2
### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
### often used for WebLogic, Orion, and OC4J
struts.dispatcher.parametersWorkaround = false
### configure the Freemarker Manager class to be used
### Allows user to plug-in customised Freemarker Manager if necessary
### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
### Enables caching of FreeMarker templates
### Has the same effect as copying the templates under WEB_APP/templates
### 是否缓存freemarker模版
struts.freemarker.templatesCache=false
### See the StrutsBeanWrapper javadocs for more information
struts.freemarker.wrapper.altMap=true
### configure the XSLTResult class to use stylesheet caching.
### Set to true for developers and false for production.
### 是否缓存XSLT模版
struts.xslt.nocache=false
### A list of configuration files automatically loaded by Struts
### struts自动加载的配置文件列表
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
### Whether to always select the namespace to be everything before the last slash or not
###
struts.mapper.alwaysSelectFullNamespace=false
### END SNIPPET: complete_file
JS中,执行字符串的函数 老是忘,写这里了。
eval(s);
摘要: 一个FooService类 有一个add方法
public class FooServiceImpl implements IFooService
{
private IFooDAO fooDAO = null;
p...
阅读全文
摘要: GreatNumber.java实现了两个超大数值(整数或浮点数都可以)的相加,也可以进行精度控制。
package org.siyn.util;
/** *//**
* “超大数”实用类
* @author siyn
* @date 2008-04-27...
阅读全文
同人类任何语言一样,Java为我们提供了一种表达思想的方式。如操作得当,同其他方式相比,随着问题变得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。
假如你能记住运算符优先次序表(我从来记不住),那么就可以写出更“聪明”的代码。但再深入想一层,那也会使代码的读者/维护者感到困扰。所以忘了那些次序吧,在拿不准的时候加上括号即可。
根据以下线索,确定“谁养猫?”
1,红房子在蓝房子的右边、白房子的左边(不一定紧邻)。
2,黄房子的主人来自香港,而且他的房子不在最左边。
3,爱吃比萨饼的人住在爱喝矿泉水的人的隔壁。
4,来自北京的人爱喝茅台,住在来自上海的人的隔壁。
5,吸希尔顿香烟的人住在养马的人的右边隔壁。
6,爱喝啤酒的人也爱吃鸡。
7,绿房子的人养狗。
8,爱吃面条的人住在养蛇的人的隔壁。
9,来自天津的人的邻居(紧邻)一个爱吃牛肉,另一个来自成都。
10,养鱼的人住在最右边的房子里。
11,吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间(紧邻)。
12,红房子的人爱喝茶。
13,爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。
14,吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。
15,来自上海的人住在左数第二间房子里。
16,爱喝矿泉水的人住在最中间的房子里。
17,爱吃面条的人也爱喝葡萄酒。
18,吸“555”香烟的人比吸希尔顿香烟的人住得靠右。
01 02 03 04 05
------------------------------------------------------------------------
北京人 上海人 香港人 天津人 成都人
③(4)(16) ①(15) [⑩+1] ⑨ ⑩
------------------------------------------------------------------------
吸健牌香烟 吸希尔顿香烟 吸万宝路香烟 吸“555”香烟 吸红塔山香烟
② ② ② ② ②
------------------------------------------------------------------------
喝茅台 葡萄酒 喝矿泉水 茶 啤酒
③(4)(16) [⑦+1] ①(16) [⑧+2] [⑧+1]
------------------------------------------------------------------------
养马 狗 蛇 猫 养鱼
③(②)(5) [⑧+6] [⑦+1] (*) ①(10)
------------------------------------------------------------------------
蓝房子 绿房子 黄房子 红房子 白房子
④ [⑧+5] [⑩+2] [⑧+3] [⑧+4]
------------------------------------------------------------------------
豆腐 面条 牛肉 比萨 鸡
⑦ ⑦ ⑥ ⑦ ⑧
------------------------------------------------------------------------
①
②(11)(18)+(14)(15)
③(4)(16)
③(5)(②)
④(1红白不在最左)(2黄不在最左)(③+7绿不在最左)
⑤(6吃鸡不在中间)(3+16比萨不在中间)(16+17面条不在中间)-->只有豆腐牛肉可能在中间
[_?⑥_]假设豆腐在中间-->[_?⑦_](16+17面条在04位)
-->[_?⑧_]([_?⑦+3比萨在02位)
-->[_?⑨_](③+6鸡不在01位)
-->[_?⑩_]([_?⑥_]+[_?⑦_]+[_?⑧_]+[_?⑨_]牛肉在01位)
-->
-->([_?⑩_]+9+15矛盾了)
⑥(⑤+[_?⑥_])
⑦(③+6鸡不在01位)(16+17豆腐面条相连)(3)
⑧(⑥+⑦)
⑨(⑥+9+15)
⑩(⑨+15)
http://wjc414.blog.163.com/blog/static/1996079820086139273844/
周围是一片充满沼气的森林
人们在其中漫无目的的走着
还有几个人坐卧在地上
恶魔缠身般,挣扎着像是想摆脱恐惧
在远处,透着阳光的地方
有一群人的背影乎现乎隐
噢,有人跌倒了
朋友们跑过来,看这他恐慌的脸
伸出手把他扶起
这人脸色渐渐好转,从恐惧中缓过神来
继续前进...
...
在森林的一角
小孩子们在树上搭上秋千
有的则爬向那有鸟窝的树枝
ps脑子里莫名的闪出这样一个画面,于是把他写了下来
国外开发者博客中有一篇有趣的文章,将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级,中级,高级程序员,直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点,可将WEB开发者大致分为以下几个版本:
Alpha:阅读过一些专业书籍,大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前,你大概不会雇佣他们成为职业的WEB制作人员。
Beta:已经比较擅长整合站点页面了,在HTML技巧方面也有一定造诣,但还是用Tables来制作页面,不了解CSS,在面对动态页面或数据库连接时还是底气不足。
Pre Version 1 (0.1):比Beta版的开发者水平要高。熟悉HTML,开始了解CSS是如何运作的,懂一点JavaScript,但还是基于业余水准,逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。
1.0: 能够基本把控整个站点开发,针对每个问题尽可能的找到最直接的解决办法。但对可测性,可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础,需要有进一步的帮助和指导。
2.0:懂面向对象的编程语言,理解分层开发的必要性,关注代码分离,对问题寻找更完美的解决方法,偶然也会考虑设计模式的问题,但对此仍然概念不清。属于优秀的初级开发者,能完成较松散的代码开发(相对大型严谨的站点开发而言),在面对较复杂问题寻找解决办法时需要周边人的帮助。
3.0:开始较为深入的理解面向对象编程和设计模式,了解他们的用途,当看到好的设计模式时能看透其本质,逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者,雇主也确信他们最终能找到问题的解决办法,这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰,值得一提的是,只要给予一些指导,他们能很快理解并熟记做出的决定,以及选定方案的优势所在。
4.0:理解模式,重视用户的反馈。着手研究方法论,架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言,技术架构的整体方案,可根据需求解构程序。能从理论的角度,不同模式如何融合成最佳形态,将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手,理解不同系统和方法论的细微差别,属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员,将他们推向更高的级别。
5.0:从系统的角度考虑问题。对各种系统结构有深入研究,能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉,让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说,他们总是对新的技术和信息保持饥渴状态,试图用最简便的方案解决开发任务。在整个IT团队中获得信任,属于高级程序员和架构师。
那么,您属于哪个版本的程序员呢?
1。在一条街上,有5座房子,喷了5种颜色。
2。每个房子里住着不同国籍的人。
3。每个人喝着不同的饮料,抽不同品牌的香烟,养不同的宠物。
问题是:谁养鱼?
提示:
1、英国人住红色房子。
2、瑞典人养狗。
3、丹麦人喝茶。
4、绿色房子在白色房子左面。
5、绿色房子主人喝咖啡。
6、抽Pall Mall香烟的人养鸟。
7、黄色房子主人抽Dunhill香烟。
8、住在中间房子的人喝牛奶。
9、挪威人住第一间房。
10、抽Blends香烟的人住在养猫的人隔壁。
11、养马的人住抽Dunhill香烟的人隔壁。
12、抽Blue Master的人喝啤酒。
13、德国人抽Prince香烟。
14、挪威人住蓝色房子隔壁。
15、抽Blends香烟的人有一个喝水的邻居。
**以下内容为网上收集后整理而成,如有错误或描述不准确的地方或是别的请多指教.
当你使用Tomcat作为Web Server的时候,是不是会想过这样的一个问题:如何利用Tomcat建立多个Web应用 呢?
要实现这一点是很简单的,也有多种方法。(以下说明使用%tomcat_home%代表Tomcat安装目录)。
一.首先介绍一下Tomcat及server.xml.
Tomcat服务器是由一系列的可配置的组件构成,tomcat的组件可以在%tomcat_home%/conf/server.xml文件中进行配置,每个Tomcat组件和server.xml文件的一种配置元素对应.
主要分为4类:
1.顶层类元素:包括<Server>和<Service>,他们位于整个配置文件的顶层.
<Server>元素代表整个Catalina Servlet 容器,由org.apache.catalin.Server接口定义.<Server>包含一个或多个<Service>元素.
<Service>元素由org.apache.catalin.Service 接口定义.<Service>包含一个<Engine>元素,及一个或多个<Connector>元素.多个<Connector>元素共享一个<Engine>元素.
2.连接器类元素
连接器类代表了介于客户与服务之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果传递给客户.
<Connector>元素由org.apache.catalin.Connector 接口定义.代表了与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.
3.容器类元素
容器类元素代表处理客户请求并生成响应的组件.包括<Engine> <Host>和<Context>.
<Engine>元素由org.apache.catalin.Engine 接口定义.每个<Service>只能包含一个<Engine>元素,<Engine>元素处理在同一个<Service>中的所有<Connector>元素收到的客户请求.
<Host>元素由org.apache.catalin.Host 接口定义.一个<Engine>元素中可以包含多个<Host>元素.每个<Host>元素定义了一个虚拟主机,她可以包含一个或多个Web 应用.
<Context>元素由org.apache.catalin.Context 接口定义.代表了运行在虚拟主机上的一个Web 应用.一个<Host>元素可以包含多个<Context>元素
4.嵌套类元素
嵌套类元素代表了可以加到容器中的组件,如<Logger> <Realm>和<Value>.
关于server.xml的更多信息,可以参考Tomcat的文档:/webapps/tomcat-docs/config/index.html
样例:
<Server>
<Service name="Catalina">
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/>
<Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
</Host>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
</Engine>
</Service>
</Server>
二.建立多个Web应用方法:
1.通过配置多个<Context>元素(这是最为普遍的方法)
在<Host>下配置多个<Context>元素
<Context path="app1" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"></Context>
<Context path="app2" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"></Context>
然后通过 主机名:端口/应用名 访问,如: http://localhost:8080/app1 或 http://localhost:8080/app2
2.通过配置多个<Host>元素
在<Engine>下配置多个<Host>元素
<Host appBase="webapps" name="192.168.1.110">
<Context path="" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"></Context>
</Host>
<Host appBase="webapps" name="192.168.1.114">
<Context path="" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"></Context>
</Host>
然后通过 主机名:端口 访问,如: http://192.168.1.110:8080 或 http://192.168.1.114:8080
需要注意的是这样需要机器连接到局域网上.
3.通过配置多个<Service>元素(多端口 多应用)
在<Server>下配置多个<Service>元素
<Service name="Catalina">
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8453" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/>
<Connector port="8019" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8453"/>
<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost">
<Context path="" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"></Context>
</Host>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
</Engine>
</Service>
<Service name="Catalina2">
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8090" redirectPort="8453" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/>
<Connector port="8019" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8453"/>
<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost">
<Context path="" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"></Context>
</Host>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
</Engine>
</Service>
定义了两个Service分别是Catalina和Catalina2,侦听的端口分别是8080和8090
然后通过 主机名:端口 访问,如: http://localhost:8080 或 http://localhost:8090
返回数据库总结目录
| 数据类型 |
参数 |
描述 |
| char(n) |
n=1 to 2000字节 |
定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节) |
| varchar2(n) |
n=1 to 4000字节 |
可变长的字符串,具体定义时指明最大长度n,
这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
可做索引的最大长度3209。 |
| number(m,n) |
m=1 to 38
n=-84 to 127 |
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
如:number(3,0),输入575.316,真正保存的数据是575。 |
| date |
无 |
从公元前4712年1月1日到公元4712年12月31日的所有合法日期,
Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。 |
| long |
无 |
可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。 |
| raw(n) |
n=1 to 2000 |
可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。 |
| long raw |
无 |
可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。 |
blob
clob
nclob |
无 |
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
可以执行读取、存储、写入等特殊操作。 |
| bfile |
无 |
在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
Oracle 8i可以读取、查询BFILE,但是不能写入。
大小由操作系统决定。 |
返回数据库总结目录
表A MySQL 数据类型
|
数据类型
|
描述
|
字节
|
推荐使用
|
|
SMALLINT
|
整数,从-32000到 +32000范围
|
2
|
存储相对比较小的整数。
比如: 年纪,数量
|
|
INT
|
整数,从-2000000000 到 +2000000000 范围
|
4
|
存储中等整数
例如: 距离
|
|
BIGINT
|
不能用SMALLINT 或 INT描述的超大整数。
|
8
|
存储超大的整数
例如: 科学/数学数据
|
|
FLOAT
|
单精度浮点型数据
|
4
|
存储小数数据
例如:测量,温度
|
|
DOUBLE
|
双精度浮点型数据
|
8
|
需要双精度存储的小数数据
例如:科学数据
|
|
DECIMAL
|
用户自定义精度的浮点型数据
|
变量;取决于精度与长度
|
以特别高的精度存储小数数据。
例如:货币数额,科学数据
|
|
CHAR
|
固定长度的字符串
|
特定字符串长度(高达255字符)
|
存储通常包含预定义字符串的变量
例如: 定期航线,国家或邮编
|
|
VARCHAR
|
具有最大限制的可变长度的字符串
|
变量; 1 + 实际字符串长度 (高达 255 字符)
|
存储不同长度的字符串值(高达一个特定的最大限度).
例如:名字,密码,短文标签
|
|
TEXT
|
没有最大长度限制的可变长度的字符串
|
Variable; 2 +聽 actual string length
|
存储大型文本数据
例如: 新闻故事,产品描述
|
|
BLOB
|
二进制字符串
|
变量;2 + 实际字符串长度
|
存储二进制数据
例如:图片,附件,二进制文档
|
|
DATE
|
以 yyyy-mm-dd格式的日期
|
3
|
存储日期
例如:生日,产品满期
|
|
TIME
|
以 hh:mm:ss格式的时间
|
3
|
存储时间或时间间隔
例如:报警声,两时间之间的间隔,任务开始/结束时间
|
|
DATETIME
|
以yyyy-mm-ddhh:mm:ss格式结合日期和时间
|
8
|
存储包含日期和时间的数据
例如:提醒的人,事件
|
|
TIMESTAMP
|
以yyyy-mm-ddhh:mm:ss格式结合日期和时间
|
4
|
记录即时时间
例如:事件提醒器,“最后进入”的时间标记
|
|
YEAR
|
以 yyyy格式的年份
|
1
|
存储年份
例如:毕业年,出生年
|
|
ENUM
|
一组数据,用户可从中选择其中一个
|
1或 2个字节
|
存储字符属性,只能从中选择之一
例如:布尔量选择,如性别
|
|
SET
|
一组数据,用户可从中选择其中0,1或更多。
|
从1到8字节;取决于设置的大小
|
存储字符属性,可从中选择多个字符的联合。
例如:多选项选择,比如业余爱好和兴趣。
|
对于一个完整的列表和详细描述,可以查看MySQL manual。你也可以阅读文章Choosing the Right Type for a Column。
现在的程序员找工作不太容易,而我招聘程序员也不太容易,双方的需求总是有着很大的差距。来面试的人里面有一半是刚刚毕业或者刚刚参加XX计算机培训出来的,对于Asp.net编程的理解,就是打开Visual studio,新建一个页面,拖拖控件,双击一个按钮写一下SQL操作的代码,仅此而已。
以前我在面试的时候喜欢问他们有没有学过设计模式,有没有看过敏捷编程,知不知道测试驱动开发,喜欢上什么样的网站,知不知道现在互联网领域流行什么。后来我就不怎么问了,因为没有一个人答的出来。当然,这些东西对于一个程序员岗位来说并不是必须的,但是我们是一个互联网公司,而且是个小型的互联网公司。首先你必须要了解这个行业,才有可能有自己的想法。要了解它,就必须热爱它。如果只是因为自己学了编程这个东西,而不得不来找一份写代码的工作,那么我可以假设,你除了完成我告诉你的功能函数,是不会为公司提出什么建设性的意见和想法的。
退一步讲,即使你喜欢的并不是互联网,你也没想过创业,但是要想做好一份工作,你首先要喜欢这份工作本身。如果你喜欢编程,喜欢写代码所带来的美好的感觉,那么你应该时刻关注着这个领域的新的动向,和更高层次的要求。我当然不是说你应该去学习所有新出来的技术和语言,语言其实并不重要,重要的编程的思想本身。了解设计模式的人所做出来的程序架构,一定比从没听说过设计模式的人要好的多。虽然我们在实际工作中也没有要求一定要使用测试驱动开发的模式,但是知道这些概念,意味着你喜欢编程这份工作,意味着你时刻在关注着这个行业,而不是只是为了上班的时候完成老板的任务,下班以后就连看都懒的看电脑一眼。
好的工作状态是需要热情的,更好的工作状态是需要激情的。
国内都说程序员的工作只能在30岁以前做,这句话有几个基本前提:首先,大部分IT公司不够大,只能以最小的成本解决最根本的需求,人过30,对待遇的要求当然不能跟刚出校门的学生比,而学生经过一段时间的培训,在工作上完全能够满足公司的要求,所以,公司不会养一群年纪大的程序员。其次,编码这种工作,本身是无聊之极的,所以公司需要的是有相当有创意的员工,敢于打破原有的思考习惯,以特殊的角度看世界,这一点,30岁以上的人是比较难做到的。在同一个领域做的时间越长,思维就越容易僵化,越不敢轻易的打破传统。再者,外人看IT业都是高薪行业,如果过了30岁事业还没有起色,基本他也做不下去了。另外,程序员是个很累的活,不但是重脑力劳动,而且是重体力劳动,过了30岁以后身体状况下滑,身体也很难承受的住。最后,程序员创业是最容易的,技术基本不需要成本,弄台服务器,或者更简单的租个空间,自己花一两个月的人力成本,一个网站就起来了,在这个全民创业的大环境下,能忍受诱惑的人,不多。
那么,如果到了30岁,创业也没有成功,自己的公司又没有上市或者被收购,自己还是一个普普通通的打工者,那怎么办呢?其实放远了看,大部分人在四五十岁或者一直到退休,也就是拿着两三千块钱的工资,一直这样默默无闻的做下去,而在互联网这个躁动的行业,人们似乎已经很难接受这种现状了。因此,你需要提前给自己找好出路。
首先,如果你真的对编程充满激情,你愿意在某一个方向深钻下去,成为该领域数一数二的专家,那是最好不过了。中国现在真正缺少的就是这一类人,但是,前提是你可以解决自己的温饱问题,不用因为老板的干涉而每次将自己的活在不完美的状态下丢在一旁。
其次,因为项目经验的积累,你的能力足以领导多人的团队,进行沟通协调和管理,那么,你可以做一个部门经理或者项目经理,你只需要解决10%最核心的问题,其它的大可以交给团队里精力充沛的年轻人去做。
再次,如果你觉得自己在编程方面并没有太高的天分,再做下去也很难达到下一个高度,那么你可以转行去做实施或者销售。有开发背景的人做软件实施的时候可以更清晰的看到问题所在,不用跟后面的开发团队扯皮,小的问题还可以帮用户当场解决,博得用户的好感。做销售也一样,可以迅速的理解用户的需求背后隐藏的东西,并在开发难度和用户的预算之间找到平衡点,省的签下了单子回去再被开发人员骂,功能开发不出来回来再被客户骂。
如果你觉得由于某些原因(比如太内向),自己连实施和销售也做不了,那或许你还可以去某个中小学谋个一官半职,毕竟,你跟那些学校的老师比起来,有真材实料的多了。
如果你连这个也做不了……我也不知道你还能做什么了,也许,网游就是你的精神栖息地。
本文来源:http://ilikes.blog.sohu.com/
返回数据库总结目录
关系数据库设计之时是要遵守一定的规则的。尤其是数据库范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。
第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成为1NF有三种方法:
一是重复存储职工号和姓名。这样,关键字只能是电话号码。
二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性
三是职工号为关键字,但强制每条记录只能有一个电话号码。
以上三个方法,第一种方法最不可取,按实际情况选取后两种情况。
第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式的。
例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。 由以上条件,关键字为组合关键字(SNO,CNO)
在应用中使用以上关系模式有以下问题:
a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次。
b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。
c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。
d.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。
原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。
解决方法:分成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新关系包括两个关系模式,它们之间通过SC1中的外关键字CNO相联系,需要时再进行自然联接,恢复了原来的关系
第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各属性分别代表学号,
姓名,所在系,系名称,系地址。
关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。即SNO -> DNO。 而DNO -> SNO却不存在,DNO -> LOCATION, 因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系。
BCNF:如果关系模式R(U,F)的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选关键字,那么称关系R是属于BCNF的。或是关系模式R,如果每个决定因素都包含关键字(而不是被关键字所包含),则RCNF的关系模式。
例:配件管理关系模式 WPE(WNO,PNO,ENO,QNT)分别表仓库号,配件号,职工号,数量。有以下条件
a.一个仓库有多个职工。
b.一个职工仅在一个仓库工作。
c.每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件。
d.同一种型号的配件可以分放在几个仓库中。
分析:由以上得 PNO 不能确定QNT,由组合属性(WNO,PNO)来决定,存在函数依赖(WNO,PNO) -> ENO。由于每个仓库里的一种配件由专人负责,而一个人可以管理几种配件,所以有组合属性(WNO,PNO)才能确定负责人,有(WNO,PNO)-> ENO。因为 一个职工仅在一个仓库工作,有ENO -> WNO。由于每个仓库里的一种配件由专人负责,而一个职工仅在一个仓库工作,有 (ENO,PNO)-> QNT。
找一下候选关键字,因为(WNO,PNO) -> QNT,(WNO,PNO)-> ENO ,因此 (WNO,PNO)可以决定整个元组,是一个候选关键字。根据ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能决定整个元组,为另一个候选关键字。属性ENO,WNO,PNO 均为主属性,只有一个非主属性QNT。它对任何一个候选关键字都是完全函数依赖的,并且是直接依赖,所以该关系模式是3NF。
分析一下主属性。因为ENO->WNO,主属性ENO是WNO的决定因素,但是它本身不是关键字,只是组合关键字的一部分。这就造成主属性WNO对另外一个候选关键字(ENO,PNO)的部 分依赖,因为(ENO,PNO)-> ENO但反过来不成立,而P->WNO,故(ENO,PNO)-> WNO 也是传递依赖。
虽然没有非主属性对候选关键辽的传递依赖,但存在主属性对候选关键字的传递依赖,同样也会带来麻烦。如一个新职工分配到仓库工作,但暂时处于实习阶段,没有独立负责对某些配件的管理任务。由于缺少关键字的一部分PNO而无法插入到该关系中去。又如某个人改成不管配件了去负责安全,则在删除配件的同时该职工也会被删除。
解决办法:分成管理EP(ENO,PNO,QNT),关键字是(ENO,PNO)工作EW(ENO,WNO)其关键字是ENO
缺点:分解后函数依赖的保持性较差。如此例中,由于分解,函数依赖(WNO,PNO)-> ENO 丢失了, 因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现 一部件由两个人或两个以上的人来同时管理。因此,分解之后的关系模式降低了部分完整性约束。
一个关系分解成多个关系,要使得分解有意义,起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据本身,而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度,但是分解的同时必须考虑两个问题:无损联接性和保持函数依赖。有时往往不可能做到既有无损联接性,又完全保持函数依赖。需要根据需要进行权衡。
1NF直到BCNF的四种范式之间有如下关系:
BCNF包含了3NF包含2NF包含1NF
小结:
目地:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新
原则:遵从概念单一化 "一事一地"原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
方法:将关系模式投影分解成两个或两个以上的关系模式。
要求:分解后的关系模式集合应当与原关系模式"等价",即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。
注意:一个关系模式结这分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。
在关系数据库中,除了函数依赖之外还有多值依赖,联接依赖的问题,从而提出了第四范式,第五范式等更高一级的规范化要求。在此,以后再谈。
各位朋友,你看过后有何感想,其实,任何一本数据库基础理论的书都会讲这些东西,考虑到很多网友是半途出家,来做数据库。特找一本书大抄特抄一把,各位有什么问题,也别问我了,自已去找一本关系数据库理论的书去看吧,说不定,对各位大有帮助。说是说以上是基础理论的东西,请大家想想,你在做数据库设计的时候有没有考虑过遵过以上几个范式呢,有没有在数据库设计做得不好之时,想一想,对比以上所讲,到底是违反了第几个范式呢?
我见过的数据库设计,很少有人做到很符合以上几个范式的,一般说来,第一范式大家都可以遵守,完全遵守第二第三范式的人很少了,遵守的人一定就是设计数据库的高手了,BCNF的范式出现机会较少,而且会破坏完整性,你可以在做设计之时不考虑它,当然在ORACLE中可通过触发器解决其缺点。以后我们共同做设计之时,也希望大家遵守以上几个范式。
返回数据库总结目录
什么是数据库?
数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有数据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完全分开的若干个数据库时,则该系统包含一个“数据库集合”。
什么是数据库管理系统?
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。它提供多种功能,可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。
按功能划分,数据库管理系统大致可分为6个部分:
(1)模式翻译:提供数据定义语言(DDL)。用它书写的数据库模式被翻译为内部表示。数据库的逻辑结构、完整性约束和物理储存结构保存在内部的数据字典中。数据库的各种数据操作(如查找、修改、插入和删除等)和数据库的维护管理都是以数据库模式为依据的。
(2)应用程序的编译:把包含着访问数据库语句的应用程序,编译成在DBMS支持下可运行的目标程序。
(3)交互式查询:提供易使用的交互式查询语言,如SQL。DBMS负责执行查询命令,并将查询结果显示在屏幕上。
(4)数据的组织与存取:提供数据在外围储存设备上的物理组织与存取方法。
⑸事务运行管理:提供事务运行管理及运行日志,事务运行的安全性监控和数据完整性检查,事务的并发控制及系统恢复等功能。
(6)数据库的维护:为数据库管理员提供软件支持,包括数据安全控制、完整性保障、数据库备份、数据库重组以及性能监控等维护工具。
基于关系模型的数据库管理系统已日臻完善,并已作为商品化软件广泛应用于各行各业。它在各户服务器结构的分布式多用户环境中的应用,使数据库系统的应用进一步扩展。随着新型数据模型及数据管理的实现技术的推进,可以预期DBMS软件的性能还将更新和完善,应用领域也将进一步地拓宽。
数据库总结
一.数据库和数据库管理系统
1.什么是数据库?什么是数据库管理系统?
2.关系型数据库(范式)?
3.关系型数据库管理系统
3.1.Oracle
3.2.MySQL
3.3.MS SQL Server
二.结构化查询语言(SQL)
1.数据定义语言(DDL) 用于创建、修改、删除数据库的数据结构。
1.1数据库
①创建数据库
②连接数据库
③删除数据库
1.2表
①创建表(临时表,复制表)
②删除表
③修改表结构,默认值,自增长
④约束与数据完整性(主键,外键,非空,唯一,检查)[添,删,改]
1.3视图
......
1.4
①索引
②序列
③触发器
......
附A 数据类型
2.数据操作语言(DML) 于DDL不同的是,DML更关心的是存储在数据库中的数据,而不是数据库结构本身。
2.1 添加数据
①简单的单行插入
②多行插入
2.2更新数据
①简单的更新数据
②Oracle中添加关键字returning
③Oracle中使用where current of 处理游标
④MySQL中添加关键字limit
2.3删除数据
①一般的Delete删除数据
②使用truncate删除数据
2.4获取数据
2.4.1 简单查询 select <列A,列B> form <表名>;
2.4.2 表和列名注释及别名
2.4.3 返回计算列(数学计算,字符串连接)
2.4.4 排序 order by
2.4.5 过滤
① where ( 连接运算符[and,or],比较运算符[= ,<>......],模式匹配[like,...],集合[in,botween])
② distinct使用
③限定行数 (mysql[limit],oracle[rownum])
④ 处理null值
2.4.6 数据汇总(count , sum,avg,max,min...)
2.4.7 数据分组 group by
2.4.8 having使用(where先于聚合函数执行,不能where中使用聚合函数做判断,只能用having)
2.4.9 使用解析函数(mysql不支持,oracle支持)
2.4.10 组合查询
......
2.4.11 多表查询
......
2.5函数
2.6存储过程
2.7事务
3数据控制语言(DCL) 代表SQL语句支持的另一种功能,控制对数据库的访问。