一般属性映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
package属性,表示当前配置中所写的类名如果没有包名,则默认是这个包中的。
-->
<hibernate-mapping package="cn.rose.b_hbm">
<!-- <class>元素表示哪个类与对应哪个表,一个class元素代表一个类的映射。
name属性,类的全限定名(带包名)。
table属性,对应的表名,这个属性可以不写,代表表名和对象的简单名称是一样的。
-->
<class name="User" table="itcast_user">
<!-- 一、主键映射 -->
<id name="id" type="int">
<generator class="native"/>
</id>
<!-- 二、一般属性映射(值类型,在数据库中一个列可以存放的属性,例:int, varchar, date) -->
<!--
使用property元素映射值类型的属性。
name属性:对象中的属性名,必须要有。
column属性:对应的表中的列名,可以没有,默认为属性名。
type属性:指定的是数据类型,有两种指定的方式:
1,指定hibernate类型,例:string, int
2,指定Java类型,例:java.lang.String, java.lang.Integer
length属性:指定对应的表中的列的长度限制,可以不写。
在类型为string,text等时,指定length有效;
在类型为int,long等时,指定length无效。
-->
<property name="name" column="name" type="string" length="32" />
<property name="gender" type="int" />
<property name="birthday" type="date" />
<property name="photo" type="binary" length="512000" />
<!-- 指定了length=5000,则生成的数据库表中的列的text类型会至少能存5000个字符 -->
<property name="resume" type="text" length="5000" />
<!-- 三、集合映射(数组、List、Set、Map) -->
<!-- 四、关联关系映射(一对多,一对一,多对一、继承) -->
</class>
</hibernate-mapping>
关于集合的映射
<hibernate-mapping package="cn.rose.d_hbm_collection" >
<class name="User" table="itcast_user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<!-- Set集合映射(addressSet属性) -->
<set name="addressSet" table="rose_user_addressSet">
<key column="userId"></key>
<element column="address" type="string" length="128"></element>
</set>
<!-- List集合映射(addressList属性) -->
<list name="addressList" table="rose_user_addressList">
<key column="userId"></key>
<list-index column="index_"></list-index>
<element column="address" type="string" length="128"></element>
</list>
<!-- Bag集合映射(addressBag属性) -->
<bag name="addressBag" table="rose_user_addressBag">
<key column="userId"></key>
<element column="address" type="string" length="128"></element>
</bag>
</class>
</hibernate-mapping>
联合主键映射
<hibernate-mapping package="cn.rose.c_hbm_id2" >
<class name="User" table="itcast_user" mutable="true" dynamic-insert="true" dynamic-update="true">
<!-- 一、联合主键映射 -->
<!--
<composite-id>
<key-property name="firstName" column="firstName" type="string" length="32"></key-property>
<key-property name="lastName" column="lastName" type="string" length="32"></key-property>
</composite-id>
-->
<composite-id name="name" class="Name">
<key-property name="firstName" column="firstName" type="string" length="32"></key-property>
<key-property name="lastName" column="lastName" type="string" length="32"></key-property>
</composite-id>
<property name="birthday" type="date"></property>
</class>
</hibernate-mapping>
以教师表为例,教师表中还有个Name类嵌套,但是这是如果想把Name表中的两个属性也加在Teacher表中,这时就需要用到组建关联。
package cn.itcast.hibernate.domain;
import java.util.Set;
public class Teacher {
private int id;
private Name name;
private Set<Student> students;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
/**************************************************************************/
Name.java
package cn.itcast.hibernate.domain;
public class Name {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
/*******************************************************************************/
这时需要在Teacher.hbm.xml映射文件里做如下配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.hibernate.domain">
<class name="Teacher">
<id name="id" column="teacher_id">
<generator class="native"/>
</id>
<!--<property name="name" column="teacher_name"/>
-->
<component name="name" class="Name">
<property name="firstName" column="first_name"></property>
<property name="lastName" column="last_name"></property>
</component>
<set name="students" table="teacher_student">
<key column="teacher_id"></key>
<many-to-many class="Student" column="student_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
/******************************************************************************/
这样就会在一个表里:
Hibernate源代码包简要介绍
net.sf.hibernate.*
该包的类基本上都是接口类和异常类
net.sf.hibernate.cache.*
JCS的实现类
net.sf.hibernate.cfg.*
配置文件读取类
net.sf.hibernate.collection.*
Hibernate集合接口实现类,例如List,Set,Bag等等,Hibernate之所以要自行编写集合接口实现类是为了支持lazy loading
net.sf.hibernate.connection.*
几个数据库连接池的Provider
net.sf.hibernate.dialect.*
支持多种数据库特性,每个Dialect实现类代表一种数据库,描述了该数据库支持的数据类型和其它特点,例如是否有AutoIncrement,是否有Sequence,是否有分页sql等等
net.sf.hibernate.eg.*
Hibernate文档中用到的例子
net.sf.hibernate.engine.*
这个包的类作用比较散
net.sf.hibernate.expression.*
HQL支持的表达式
net.sf.hibernate.hq.*
HQL实现
net.sf.hibernate.id.*
ID生成器
net.sf.hibernate.impl.*
最核心的包,一些重要接口的实现类,如果Session,SessionFactory,Query等
net.sf.hibernate.jca.*
JCA支持,把Session包装为支持JCA的接口实现类
net.sf.hibernate.jmx.*
我不懂JMX,只知道JMX是用来编写App Server的管理程序的,大概是JMX部分接口的实现,使得App Server可以通过JMX接口管理Hibernate
net.sf.hibernate.loader.*
也是很核心的包,主要是生成sql语句的
net.sf.hibernate.lob.*
Blob和Clob支持
net.sf.hibernate.mapping.*
hbm文件的属性实现
net.sf.hibernate.metadata.*
PO的Meta实现
net.sf.hibernate.odmg.*
ODMG是一个ORM标准,这个包是ODMG标准的实现类
net.sf.hibernate.persister.*
核心包,实现持久对象和表之间的映射
net.sf.hibernate.proxy.*
Proxy和Lazy Loading支持
net.sf.hibernate.ps.*
该包是PreparedStatment Cache
net.sf.hibernate.sql.*
生成JDBC sql语句的包
net.sf.hibernate.test.*
测试类,你可以用junit来测试Hibernate
net.sf.hibernate.tool.hbm2ddl.*
用hbm配置文件生成DDL
net.sf.hibernate.transaction.*
Hibernate Transaction实现类
net.sf.hibernate.type.*
Hibernate中定义的持久对象的属性的数据类型
net.sf.hibernate.util.*
一些工具类,作用比较散
net.sf.hibernate.xml.*
XML数据绑定
以前听起hibernate总感觉是一个很奇怪的东西,不知道是用做什么,只知道是一个框架,今天对hibernate的学习,使我受益匪浅,知道了hibernate的作用。
以前在写程序的时候看,特别是在编写连接数据库程序的时候,总要用到jdbc,提前都感觉到jdbc是一个很好的手工方式,并没有想到更好的实现方法,也不知道jdbc的缺点是什么,因为在做大型项目的时候,必定会要写很多的程序,当然操作数据库的更不可缺,所以每次的有很多都是重复的,而且在对象模型和关系模型之间总会遇到很多的问题,也往往会转来转去的,当用了hibernate后,可以很方便的操作数据,不用写那么麻烦的代码,节省了很多的操作和代码的编写,这样大大提高了代码编写的效率,提高了开发的速度!现在将走向hibernate的世界:
一:首先要使用hibernate框架,必定要引入hibernate2.jar包,当然还要引入很多的包,然后写一个与数据表对应的JavaBean类,与数据库的字段对应,比如一个简单的java类如下:
package tmc.hibernat.domian;
import java.util.Date;
public class User {
private int id;
private String name;
private Date date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
然后编写一个映射的文件,
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="tmc.hibernat.domian">
<class name="User">
<id name="id">
<generator class="native" />
</id>
<property name="name" unique="true" />
<property name="date" />
</class>
</hibernate-mapping>
在写一个加载数据库和连接数据库的的配置文件:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<mapping resource="tmc/hibernat/domian/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
在此,一切的准备都已经完成,接下来执行写一些service的java类对数据库进行操作,就可以实现对数据库的操做了
写一个service的java类:
package tmc.hibernate.service;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUitl {
private static SessionFactory sessionFactory;
private HibernateUitl(){
}
/**
* 初始化代码
*/
static{
//配置的一个实例说明属性允许应用程序在测绘文件被用来当创造一个SessionFactory
Configuration cfg = new Configuration();
cfg.configure();//读取配置文件
sessionFactory = cfg.buildSessionFactory();//找出配置文件的所有信息
}
/**
* 获取SessionFactory的方法
* @return
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 获取session的方法
* @return
*/
public static Session getSession(){
return sessionFactory.openSession();
}
}
然后写对数据库的各种操作:
1.写一个接口:
package tmc.hibernat.domian;
public interface UserDao {
public void saveUser(User user);
public User findUserById(int id);
public User findUserByName(String name);
public void updateUser(User user);
public void remove(User user);
}
2.实现接口:
package tmc.hibernate.service;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import tmc.hibernat.domian.User;
import tmc.hibernat.domian.UserDao;
public class UserHibernateImp implements UserDao{
/**
* 根据id获取查询数据库的内容
*/
@Override
public User findUserById(int id) {
Session s = null;
try{
s = HibernateUitl.getSession();
//Criteria c = s.createCriteria(User.class);
//c.add(Restrictions.eq("name",name));
User user =(User)s.get(User.class,id);//User.class方便找到映射文件
return user;
}finally{
if(s!=null){
s.close();
}
}
}
/**
* 根据用户名,查询用户的信息
*/
@Override
public User findUserByName(String name) {
Session s = null;
try{
s = HibernateUitl.getSession();
Criteria c = s.createCriteria(User.class);
c.add(Restrictions.eq("name",name));
User user =(User)c.uniqueResult();//映射是唯一的
return user;
}finally{
if(s!=null){
s.close();
}
}
}
/**
* 和上面的使用是一样的,只是用不同的查询方式而已
* @param name
* @return
*/
public User findUserByName1(String name) {
Session s = null;
try{
s = HibernateUitl.getSession();
//Criteria c = s.createCriteria(User.class);
//c.add(Restrictions.eq("name",name));
String hql = "from User as user where user.name=:n";
Query q = s.createQuery(hql);
q.setString("n",name);
User user =(User)q.uniqueResult();//映射是唯一的
return user;
}finally{
if(s!=null){
s.close();
}
}
}
/**
* 移除数据库一条记录
* @see tmc.hibernat.domian.UserDao#remove(tmc.hibernat.domian.User)
*/
@Override
public void remove(User user) {
Session s = null;
//创建一个事务
Transaction tx = null;
try{
s = HibernateUitl.getSession();
tx = s.beginTransaction();
s.delete(user);
tx.commit();
}finally{
if(s!=null){
s.close();
}
}
}
/**
* 向数据库添加数据
*/
@Override
public void saveUser(User user) {
Session s = null;
//创建一个事务
Transaction tx = null;
try{
s = HibernateUitl.getSession();
tx = s.beginTransaction();
s.save(user);
tx.commit();
}finally{
if(s!=null){
s.close();
}
}
}
/**
* 修改数据库数据
*/
@Override
public void updateUser(User user) {
Session s = null;
//创建一个事务
Transaction tx = null;
try{
s = HibernateUitl.getSession();
tx = s.beginTransaction();
s.update(user);
tx.commit();
}finally{
if(s!=null){
s.close();
}
}
}
}
3.测试上面的类:
package tmc.hibernate.service;
import java.util.Date;
import tmc.hibernat.domian.User;
import tmc.hibernat.domian.UserDao;
public class TestDao {
public static void main(String[] args){
UserDao dao = new UserHibernateImp();
User user = new User();
user.setName("name");
user.setDate(new Date());
System.out.println("1111");
dao.saveUser(user);
user.setName("new name");
System.out.println("222");
dao.updateUser(user);
User u = dao.findUserByName(user.getName());
System.out.println("3333");
}
}
这样的话,就可以完成了对数据库的各种操作,这样写真的很方便,很灵活,减少了很多的重复代码,但就是配置文件的时候很麻烦,呵呵,反正很多都这样的,没有十全十美的东西,但只要好用,就足够了!
Hibernate Jar: hibernate3.jar,这个是hibernate3.0的核心jar包,必须的,呵呵,没的选,像我们常用的Session,Query,Transaction都位于这个jar文件中,必要。
cglib-2.1.3.jar,CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必要。
asm.jar ASM字节码库 如果使用“cglib”则必要,必要
asm-attrs.jar ASM字节码库 如果使用“cglib”则必要,必要
ehcache.jar EHCache缓存 如果没有其它缓存,则必要,必要
antlr.jar
ANother Tool for Language Recognition是一个工具,必要
jta.jar JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。但是为了测试方便建议还是带上。必要
commons-logging.jar Apache Commons包中的一个,包含了日志功能,必须使用的jar包。必要
commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必要
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。Hibernate用它来读写配置文件。必要
上面的就是Hibernate的核心jar包,是配置ssh架构中必须的,下面这些就是可选的了。
versioncheck.jar 版本检查 可选
swarmcache.jar 可选
jboss-cache.jar TreeCache 可选
jgroups.jar 可选
xalan.jar, xerces.jar, xml-apis.jar Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上,JDK1.4也包含了解析器,不过不是Xerces,是Crimson,效率比较差,不过Hibernate用XML只不过是读取配置文件,性能没什么要紧的,所以也是多余的。可选
c3p0-0.9.1.jar C3p0是一个数据库连接池,Hibernate可以配置为使用C3P0连接池。如果你准备用这个连接池,就需要这个jar包。
可选
connector.jar JCA API,如果你字啊App Server上把Hibernate配置为Connector的话,就需要这个Jar,不过实际上一般App Server肯定会带上这个包,所以也是多余的包 可选
jboss-system.jar 可选
jboss-system.jar 使用TreeCache时必要 可选
jacc-1_0-fr.jar JACC库 可选
checkstyle-all.jar 可选
junit.jar 测试单元 可选
javassist.jar Javassist字节码解释器 可选
ant-lanuncher.jar 可选
jaas.jar JAAS API 是用来进行权限验证的,已经包含在JDK1.4里面了,所以实际上是个多余的包 可选
jdbc2_0-stdext.jar JDBC扩展API,一般来说数据库连接池会用上它,不过App Server都会带上,所以也是多余的。 可选
ant-antlr.jar Ant anlr支持 可选
jboss-jmx.jar 可选
cleanimports.jar cleanimports 可选 xerces.jar SAX parser jdk本版低于1.4时必要 可选
jaxen-1.1-beta-7.jar Jaxen 如果想提高启动性能则去使用 可选
ant-junit.jar Ant junit support 可选
ant-swing.jar ant swing support
ant.jar Ant编译工具的jar包,可选
proxool.jar Proxool JDBC连接池 可选
concurrent.jar 使用TreeCache 需要
syndiag2.jar 可选
commons.collections.jar,commons-pool.jar, commons-dbcp.jar DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat的连接池也是DBCP.
Spring jar 包
spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。
除了spring.jar文件,Spring还包括有其它21个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合,而不必引入整个spring.jar的所有类文件。
spring-core.jar 这个jar文件包含Spring框架基本的核心工具类。Spring其它的组件要都要使用到这个包里的类,是其它组件基本核心,当然你也可以在自己的系统中使用这些工具类。外部依赖(Commons Logging, Log4J)
spring-beans.jar 这个jar文件是所有应用都要使用到的,它包含访问配置文件,创建和管理bean以及进行Inversion of Control / Dependency(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。
spring-aop.jar 这个jar文件包含在应用中使用Spring的AOP特性时所需的类和源码级元数据的支持。使用基于AOP的Spring的特性,如声明型事务管理(Declaritive Transaction Management),也要在应用里包含这个jar包。外部依赖(spring-core, spring-bean , AOP Alliance, CGLIB, Commons Attributes).
spring-context.jar 这个jar文件为Spring核心提供了大量的扩展,可以找到Spring ApplicationContext特性时所需的全部类,JNDI所需的全部类,instrumentation组件以及校验Validation方面的相关类。外部依赖spring-beans, spring-aop.
spring-dao.jar 这个jar文件包含Spring DAO, Spring Transaction进行数据访问的所有类,为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar外部依赖spring-core, spring-aop, spring-context, JTA API.
spring-jdbc.jar这个jar文件包含Spring对JDBC数据访问进行封装的所有类。外部依赖spring-beans, spring-dao.
spring-support.jar 这个jar文件包含支持UI模板(Velocity, FreeMarker, JsperReports, BSH, Groovy, Jruby, Quartz, EHCache)
spring-web.jar 这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入Web Application Context特性的类,Struts与JSF集成类,文件上传的支持类,Filter类和大量工具辅助类。外部依赖spring-context, Servlet API,(JSP API, JSTL, Commons FileUpload, COS).
spring-webmvc.jar 这个jar文件包含Spring MVC框架相关的所有类。包括框架的Servlets, Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的框架,则无需这个JAR文件里的任何类。外部依赖spring-web, sping-support, Tiles, iText,POI.
spring-portlet.jar spring自己实现的一个类似Spring MVC的框架,包括一个MVC框架和一个控制器。外部依赖spring-web, Portlet API, Spring-webmvc.
spring-struts.jar Struts框架支持,可以更方便更容易的集成Struts框架,外部依赖spring-web, Struts.
spring-remoting.jar 这个jar文件包支持EJB,远程调用Remoting(RMI,Hession, Burlap, Http Invoker, JAX-RPC)方面的类。外部依赖spring-aop, spring-context, spring-web,Hessian,Burlap,JAX-RPC,EJB API)。
spring-jmx.jar 这个jar包提供了对JMX1.0/1.2的支持类。外部依赖spring-beans, spring-aop, JMX API.
spring-jms.jar 这个jar包提供了对JMS1.0.2/1.1的支持类。
spring-jca.jar 这个jar包提供了对JCA1.0的支持。
spring-jdo.jar 这个jar包提供了对JDO1.0/2.0的支持。
spring-hibernate2.jar 对Hibernate2.1的支持,已经不建议使用
spring-hibernate3.jar 对Hibernate3.0/3.1/3.2的支持
spring-toplink.jar对TopLink框架的支持 spring-ibatis.jar 对Ibatis SQL Maps的支持。
另外的两个包
spring-mock.jar 这个jar 文件包含Spring 一整套mock 类来辅助应用的测试。Spring 测试套件使用了其中大量mock 类,这样测试就更加简单。模拟HttpServletRequest 和HttpServletResponse 类在Web 应用单元测试是很方便的。并且提供了对JUnit的支持。外部依赖
spring-aspects.jar 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中.
Struts1.2包介绍:
commons-digester.jar Digester基于规则的XML文档解析,主要用于XML到Java对象的映射(用来处理struts-config.xml配置文件,以达到通过XML生成相应的对象的功能)。
commons-beanutils.jar 提供对Java反射和自省API的包装。
struts的验证框架依赖以下的两个包
commons-validator.jar(校验方法)和校验规则,支持校验规则的和错误消息的国际化。struts使用它对表单进行验证。
jakarta-oro.jar 一套文本处理工具,能提供perl5.0兼容的正则表达式AWK-like正则表达式,glob表达式。还提供替换,分割,文件名过滤等功能。
struts.jar struts的核心Jar包
antlr.jar 它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。
Struts2.1.6jar包介绍
struts2-core-2.1.6.jar struts2的核心jar包。
freemarker-2.3.13.jar Freemarker是struts2默认的模版语言
commons-logging-1.0.4.jar
ognl-2.6.11.jar Struts2默认的表达式语言OGNL:对象图形化导航语言
xwork-2.1.2.jar 也是Struts2核心包,毕竟struts2很大部分是来自webwork
commons-io.jar (注意这个与2.0.x版本不同,即使不上传文件这个也是需要的)
commons-fileupload-1.2.1.jar(注意这个与2.0.x版本不同,即使不上传文件这个也是需要的)。
今天下午和几个要好的同学在南湖旁的草地上聊天,感觉好就没有这样的心情舒畅,虽然各自有各自的决定与想法,但是在没有离开,没有毕业之前,我们能聚在一
起,感觉还是非常高兴的。回想起在大学的这一年半之间,除了一次和全体室友一块儿出去打篮球,别的就再也没有过集体“出游”了,我很想能和室友们和朋友们
一起留下在南工的“脚印”,但是没办法,有时也只有几个志同道合的人最终能走在一块儿,那些曾经的曾经也只是一个过客。晚上和东炬在大谈数据结构,不但为
考前复习了知识,也同样给自己留下了一段美好的回忆,现在回想起来,在南工的一年半的时间里,能让自己有回忆的事情屈指可数。希望在剩余的一个月里,能尽
可能多的在南工留下属于自己的记忆!
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
今天把前段时间写过的幸福其实很简单系列进行了汇总。
在人生旅途中,我们总在四处寻找幸福, 而幸福就在我们身边,就在当下,就在我们的心里。
希望我们都变得很幸福~~
- 笑
如果假定我们能活80岁, 其中26年我们用在睡觉, 9年用在吃喝, 但是我们笑的时间只有20天. 笑得越开幸福也越多, 遇到不顺心的事情, 更要学会笑口常开.
现在你在笑吗? 幸福其实这么简单~~
- 感恩
学会感恩, 我们就变得宽容,不再抱怨,不再计较,发现我们拥有的东西是多么的美好; 学会感恩, 可以消解内心所有的积怨, 可以以更积极的心态去回报那些需要帮助的人;学会感恩, 可以让我们在平凡的日常中每天都感到一丝丝的幸福.
现在开始学会感恩吧.. 不多不少, 每天3个, 这样你会发现原来生活是这么美好,原来天空是这么蓝…今天你感恩了吗?
- 孝敬父母
像我们一样出门在外1年只有春节的时候回家, 假定1年在家里待10天,假设父母还能健在20年, 我们跟父母在一起的时间只有200天,不到1年。
孝敬是一种幸福, 因为孝敬可以使父母更健康/更长寿, 父母的健在可以让我们感受到更多爱的传递和幸福。
- 困难
失败是一种幸福, 因为它可以给你克服难关的智慧。
分手是一种幸福, 因为它让我们明白爱情的真意。
人生低谷是一种幸福, 因为它给你一次审视人生的机会。
失意的今天是一种幸福, 因为我们幸福的明天将从这里开始。
- 活在当下
任何人失去的不是什么别的生活,而只是他现在所过的生活。任何人所过的也不是什么别的生活,而只是他现在所失去的生活。
“今天”是我们最珍贵的资产,也是唯一确定拥有的资产。所以,不管你现在面临多么艰难的事情,请活在当下,享受当下这个时光,这才是让自己幸福的方法。
我们很多人有梦想,有目标。
而且很多人的目标很高,梦想很远大,而你的现实离你的梦想还很遥远。
正因为两者之间差距很大,在实现梦想的路程,我们很多人选择放弃,或对太遥远的梦想产生恐惧。
难道拥有很高的目标,远大的梦想是一种错误?
其实不然。但是有一点我们需要非常清楚。那就是“无论眼界多高,也必须脚踏实地”。
无论梦想和愿望是多么高远,现实中的每一天都要竭尽全力踏实地做。
挥洒汗水,一毫米、一厘米地前进,把横在眼前的问题一个个地解决掉。
在梦想与现实的巨大落差中,我们有可能受打击,但是人生只能是“每一天”的积累与”现在“的连续。
千里之行始于足下,无论多么伟大的梦想都需要经过一步一步、一天一天的积累,最终才能实现。
所以,认真、充实的度过今天,明天就会自然而然地呈现在你的眼前。
有可能你现在的每一步就像乌龟踱步,但是每一天脚踏实地地不断积累,就这样不知不觉中你会成长,
或你的公司会一点点地壮大起来,或你的处境会变得越来越好。
与其徒然为明日烦恼,孜孜不倦地计划未来,不如首先倾注全力充实每一个今天,做你力所能及的事情。
这就是实现梦想的最佳有效途径。
有志者事竟成 破釜沉舟 百二秦关终属楚
苦心人天不负 卧薪偿胆 三千越甲可吞吴
相传蒲松龄考乡试落第后,为铭其矢志不移,在铜尺上刻下了这副对联用以自勉。
另一副流传很广的对联是明代理学家胡居仁写的“苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。”
我曾听到某成功人士如下言论“要学会坚持,只有坚持我们才能取得胜利!”我个人的观点是:只有正确地坚持,我们才有可能取得最终的胜利。没有定义好方向只能是盲目的乱撞。
正确的坚持才是我们取得成功的惟一法宝,才是我们真正应该学习和掌握的技能。
案例1.1 第101次求职的女士
在超过1万场的面试经历中,我绝大部分面试都会给候选人留出至少十分钟的时间,他们可以在这段时间里讲述自己的工作经历和特点、提出问题以加强相互的了解。我的基本观点是:无论应聘者是从马路对面的家里来的,还是从天边来到公司的,作为招聘方我们应该给予他们足够的重视和尊敬,至少尊重他们付出的时间成本。
基于尊重是相互的这个原则,其中有3场面试求职者只在我面前待了不足5分钟。这3位候选人都可以用表现奇差来形容,全都超出我容忍的低线,其中一位就是第101次在北京求职的幸仪女士。
至今我对那次面试仍然记忆深刻。
当时是下午,坐在桌子对面幸仪穿着很不得体的紫色晚装。
我正要开口时幸仪说了话:“你好!这是我在北京第101次面试,希望能成功。”
略显惊讶的我请她介绍自己时,她是回答:“简历上不是都有吗?”
Leo:“呃……那还是说说您应聘猎头顾问助理职位的优势和不足吧。简历上写的还是太笼统。”
幸仪:“我这人吧特长是有干劲儿,愿意付出,年轻啊!还有我愿意学习,其实我是来这个行业学习的。我也不知道自己适合干什么。不足?我不太合群儿,大多数情况下不愿意接受别人的意见,除非我认为你说的对。还有我对你们行业也不是特别了解,我说了是来学习的。不过,我薪水要求还是挺合理的,希望你们能给个机会。”
Leo:“那您的期望薪水是多少呢?”
幸仪:“当然是越高越好!”
……
如果有面试官最讨厌听的十句话列表,幸仪面试时说到了其中两句,那就是“简历上不是都有吗?”和“薪水当然是越高越好。”前者代表着过分自信,而应聘者多半没有与此相应聘的资本;后者代表着态度不够诚恳,即不想错失机会又怕要了高价儿失去机会。
第一次犯的错误和最后一次犯的错误完全相同。结果可想而知,她失去了这101次机会,原因没有找到合适自己的方向的盲目坚持。如果找不到对她来说正确的方向,别说第101次就是第10001次怕是也找不到自己满意的工作。
找到自己的职业方向,继而正确地坚持才能让我们在职场路上越走越顺。
(有关“找方向”的方法在书第三章有具体介绍)
Tips 坚持也要选对方向坚持不是取得成功的保证,正确的坚持才是。方向有偏差就像两条有夹角的线,开始相差也许只有1厘米,随着不断延长两条线之前的距离会越来越远,努力方向稍有偏差有时后果不堪相像。我曾经收到过一封计算机专业博士毕业生的邮件,其中他提到自己从大学开始就不喜欢计算机,但因为不好就业、成绩还可以他选择了本系保研,研究生毕业又选择了硕博连读,现在快毕业了,面临着在自己不喜欢的专业方向上就业问题。他问我怎么办?除了沉默,我自己都不知道说什么。
适当的时候请停下来调整、纠正自己的方向,上文提到的应聘者如果能及时停止盲目求职,总结自己面试时的不足加以改进,相信不会落到次次失败的局面。计算机专业即将毕业的博士如果能尽早反思自己,可能也不至于落到如今这般田地。
案例1.3 我是否应该放弃编程
在错误的方向上坚持多半是苦不堪言,如果是痛苦,我们就让他早点结束。
Leo,您好!
我最近看了您写的文章,感觉获益良多;但是还有一些地方感到很困惑,希望能得到您的帮助,谢谢!
首先介绍下我的情况:我是08年毕业的,专业是软件工程,但是很惭愧,大学四年时间花在编程上的时间很少,软件专业的,只是属于入门级别的,java和C都只是just OK,估计叫我自己写东西都不一定写的出来,就连计算机的其他方面(如网络,硬件维护,数据库等)都比软件开发要强。
目前我有几个比较困惑的地方:
1、 我现在一家地方软件公司上班,公司在当地有一定知名度,因为是刚刚入职还在业务培训阶段,发现公司用的技术很多以前没有接触过的(如java的Hibernate,struts等),现在学起来个人感觉很吃力,一看到代码就觉得头痛,我应不应该继续在软件行业发展下去?
2、 .我想过要转行到其他的计算机行业去发展,但是来自家里的阻力很大,老妈经常说大学花了好几万的学费,让我一定要在软件上做下去,而且家里的长辈基本上都是这个态度,前段时间为此还和家里吵了一架。基本上我现在比较迷茫,不知道该如何选择。
我想问您,像我这样的情况该如何选择呢?
甘兵
甘兵,您好!
比起本书中提到的米雪松的表妹(详见本书案例:读了不喜欢的专业,找工作迷茫了)好像您不但学了自己不是特别有兴趣的软件工程专业,还更进步,开始干起了“一看到代码就觉得头痛”的软件开发,即干上了自己不喜欢的工作。
对于您我想说的是,首先想清楚、找到真正的方向再转行。再判断一下自己是否真的不喜欢软件开发。如果回答是肯定的,那真正的兴趣在哪?05年,我在IT销售这条路上已经走过了近8年时间,而且做的不错。虽然没兴趣并不一定代表做不好,但是我确认没有继续在销售领域里发展的打算。所以我选择了转行,把职业方向转到自己很有兴趣的人力资源工作上。转行差不多用了1年时间,之后我在HR领域也取得了些成绩,算是转行相对成功。这些可能要归功于,我在转行之前把两个问题想的比较清楚,建议您下决定转之前也要想想
问题一:我是不是真的对现在的工作及职业没兴趣?为什么会没兴趣?你不喜欢现在行业(职业)的真正原因是什么?
问题二:到底什么是我真正的兴趣所在(具体到职业方向、职位)?我是否有能力把兴趣转化为工作?在有兴趣的职业方向上我打算能走多远?(具体到职位、年限)
问明白自己上面两个问题之后,再做好一件事儿就可着手转行了,那就是:正确评估转行付出的代价。它们包括:
没有家人的理解和支持,比如你妈妈的反对就表现之一。坚持干不喜欢的工作,有点像尊父母之命维持一段不幸福的婚姻,可能自己感觉不好,但父母会支持你。反之寻找自己喜欢的工作像在父母的反对声中取(嫁)自己的另一半,自己可能感觉好,但多半不会得么他们支持。在没有取得真正成绩之前,不要指望家人坚定的支持。
薪水收入的下降,即转行的现金本成。进入新行业时,我们即没相关工作经验、也没有相关学历,惟一具备的就是兴趣。所以收入和生活质量都会下降。如果您能以机会为重,那么就要接受随之而来的可能是前不到尽头的低收入生活。
最后也是最大的代价其实是心理上的负担。以上种种综合因素会给打算转行的您带来极大心理负担,现实中很多人退缩了,甚至还对自己之前确定的兴趣产生了怀疑和动摇,。只有承压能力极强的人,才有机会在转行之路上走到成功。
最后说一句,如果你真对软件开发没兴趣,那就像是嫁或者娶了一个自己不喜欢的人,这已经很不对了。如果要继续在自己没兴趣的行业里再干下去,就像是准备跟自己不喜欢的家伙过一辈子,对自己对别人都是很残忍。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jobchanceleo/archive/2010/06/25/5693165.aspx
Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:nw","" ,"");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM 雇员 where (雇员id)>3");
out.print("<Table>");
out.print("<TR>");
out.print("<TH width=50>"+"雇员id");
out.print("<TH width=50>"+"姓氏");
out.print("<TH width=70>"+"名字");
out.print("<TH width=100>"+"雇用日期");
out.print("<TH width=50>"+"地址");
out.print("</TR>");
while(rs.next())
{
out.print("<TR>");
out.print("<TD >"+rs.getInt("1")+"</TD>");
out.print("<TD >"+rs.getString("2")+"</TD>");
out.print("<TD >"+rs.getString("名字")+"</TD>");
out.print("<TD >"+rs.getDate("雇用日期")+"</TD>");
out.print("<TD >"+rs.getString("地址")+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
sql.close();
}
catch(SQLException e1) {
out.print("error!");
out.print(e1.toString());
}
try{
Connection con = null;
Statement sta = null;
ResultSet rs = null;
Class.forName("com.mysql.jdbc.Driver");
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
String add = "jdbc:mysql://localhost:3306/blog";
String user = "root";
String pass = "123";
con = java.sql.DriverManager.getConnection(add,user,pass);
sta = con.createStatement();
String name = new String(request.getParameter("name").getBytes("iso8859_1"));
String context = new String(request.getParameter("context").getBytes("iso8859_1"));
String classID = request.getParameter("classID");
String in = "insert into rizhi values(null,'"+name+"','"+context+"',"+classID+")";
sta.executeUpdate(in);
你会休息吗?
你根本不会休息
为什么你睡了11个小时仍然觉得疲累?
为什么你花了好几万去岛国度假并没有增加生活的热情?
都说要去KTV,去夜店,去游乐园就能忘掉不快,更带劲地开始新的一天,但是尽兴归来心里只剩空虚?
我们真的明白休息的含义吗?我们休息对了吗?
首先,来看看我们对休息有哪些误解:
■脑力劳动者,补瞌睡对你没什么用
你写了一天的文案,编了一天程序,当一切都结束了,你叹到:太累了,这一天我要睡个好觉。我们的常识使得我们对疲劳的第一反应就是“去躺躺吧”。但这是一个陷阱。
睡眠的确是一种有效的休息方式,但它主要对睡眠不足着或体力劳动者适用。对体力劳动者来说,“疲劳”主要是由体内产生大量酸性物质引起,如果十分疲劳,应采取静的休息方式。通过睡觉,可以把失去的能量补充回来,把堆积的废物排除出去。如果不是很累,也可以在床上先躺一躺,闭目静息,让全身肌肉和神经完全放松后,再起来活动活动。
但如果你是坐办公室的,大脑皮层极度兴奋,而身体却处于低兴奋状态,对待这种疲劳,睡眠能起到的作用不大,(除非你是熬夜加班,连正常睡眠时间都达不到)因为你需要的不是通过“静止”恢复体能,而是要找个事儿把神经放松下来。这样你可以理解为什么你周末两天不出门依旧无精打采,而只需下班后游泳半小时就神采奕奕。
■不必停下来,只是换一下
既然睡觉不能帮助我们休息大脑,那什么办法才可以?答案是不停止活动,而只是改变活动的内容。
大脑皮质的一百多亿神经细胞,功能都不一样,它们以不同的方式排列组合成各不相同的联合功能区,这一区域活动,另一区域就休息。所以,通过改换活动内容,就能使大脑的不同区域得到休息。心理生理学家谢切诺夫做过一个实验。为了消除右手的疲劳,他采取两种方式——一种是让两只手静止休息,另一种是在右手静止的同时又让左手适当活动,然后在疲劳测量器上对右手的握力进行测试。结果表明,在左手活动的情况下,右手的疲劳消除得更快。这证明变换人的活动内容确实是积极的休息方式。
比如你星期五写了5个小时的企划案, 最好第二天去给你的盆栽们剪枝而不是睡到太阳晒屁股。还有一点,当你无法选择由脑力劳动转入体力劳动时,你不妨在脑力劳动内部转换。法国杰出的启蒙思想家卢梭就讲过他的心得:“我本不是一个生来适于研究学问的人,因为我用功的时间稍长一些就感到疲倦,甚至我不能一连半小时集中精力于一个问题上。但是,我连续研究几个不同的问题,即使是不间断,我也能够轻松愉快地一个一个地寻思下去,这一个问题可以消除另一个问题所带来的疲劳,用不着休息一下脑筋。于是,我就在我的治学中充分利用我所发现的这一特点,对一些问题交替进行研究。这样,即使我整天用功也不觉得疲倦了。”所以,这天你要是有好几个问题要处理,最好交替进行,而不要处理完一个再开始的二个,那样会很快被耗尽。
■最好的休息,是让你重燃生活的热情
我们的疲惫主要来自对现有的一层不变的生活的厌倦。所以最好的休息项目就是那些让我们重新找到生活和工作热情的活动。如果你干完一件事,能够幸福地感叹“明天又是新的一天。”那这件事对你来说就是最好的恢复热情,调节情绪的方法。但可惜,我们缺乏对“休息”的想象力。我们能想出来的休息方法不是痴睡就是傻玩。
我们给你开了下面一些活动清单,基本思路是以“做”来解决“累”,用积极休息取代消极放纵。当然,最适合你的方法还是要你自己探索。事实上如果你觉得打扫卫生比坐过山车是更好的放松,那么就去吧,别管世界上的其他人都在玩什么。
也许你可以:
●用看两小时让你开怀的漫画或小说代替去KTV唱那些一成不变的口水歌
●试着放弃在周六晚上去酒吧,10点入睡,然后在7点起床,去没有人的街上走走,或是看看你从来没有机会看到的早间剧场,你会发现这一天可以和过去的千万个周末都不相同。
●不要再去你已经去过无数次的度假村找乐子了。找一条你你从没去过的街道,把它走完。你会发现这个你感到腻味的城市结果你并没有完全体会到它的妙处。
●旅行,而不是换个地方消遣。去一个地方对那个地方本身心存好奇,对自己这趟行程心存美意,感受自己经验范围以外的人生样貌。而不是坐了5小时飞机,只是换个地方打麻将,换个地方游泳,换个地方打球......
●从这个周末起学习一项新的技艺,比如弹电子琴,打鼓......每周末练习1小时以上。
●去社交。不要以为它总是令人疲惫的。虽然和看书比起来,它稍有点令人紧张,但也能让你更兴奋,更有认同感。你必须每周有两三天是和工作圈子和亲戚外的人打交道。它让你在朝九晚五的机械运行中不至失去活泼的天性。女性朋友们尤为需要走出去和朋友聚会,这些时刻你不再是满脸写着“效率”的中性人,而是一个裙裾飞扬的魅力焦点。
●做点困难的事,如果你是精神超级紧张的人。心理学家发现解除神经紧张的方法,是去处理需要神经紧张才能解决的问题。曾经一位精神即将崩溃的总经理找到一位医师给出治疗建议,结果他得到的处方是去动物园当驯狮师。一个月以后完全康复。所以压力特别大的时候你可以为自己再找分工作,但不要是和你职业类似的。比如去孤儿院做义工,或者去一个复杂的机械工厂从学徒干起,或者做一道超级复杂的数学题。
往往珍惜生命的人,会不顾任何代价,去求得一个休息.休息十天、半个月,他们回来了.再看呀,是多么神奇的一种变化!他们简直是一个新生的人了.生机勃勃,精神饱满,怀着新的希望,新的计划,新的生命憧憬,他们己消除疲劳,获得了从新起航的动力---燃料。
关于种子法则(SEED)
切记:不会休息就不会工作
南昌大学医学院 胡春松 北京大学人民医院 胡大一
近几年,知识分子“过劳死”屡见报端,如,年仅32岁的中国社科院学者萧亮中;36岁的清华大学讲师焦连伟;46岁的清华大学教授高文焕;36岁的浙江大学教授、博导何勇等。由于严重的“过劳死”现象频繁出现,我国知识分子平均寿命仅有58岁。严峻的现实向许多中青年知识分子及管理层敲响了警钟。知识分子英年早逝,不仅是个人和家庭的损失,而且是国家的重大损失。大力实施人才安全战略的重要内容之一是保障人才安全与健康。
中青年知识分子由于事业、家庭的重担,对于自身的健康关注甚少。不良的生活方式如长期熬夜、工作超负荷、心理压力大、缺乏运动、营养不均衡、吸烟、嗜酒等以及睡眠障碍,悄悄地侵蚀着他们的健康。究其根源,主要有几个方面:
首先,应当说这些知识分子不注意劳逸结合,且缺乏对工作与休息关系的辩证认识。他们似乎忘记了“不会休息就不会工作”、“身体是革命的本钱”这些至理名言。
其次,不重视定期检查。导致知识分子英年早逝的主要疾病是生活方式病如心脑血管病、癌症、糖尿病、肥胖等。这些病不仅发病率高,如高血压发病率已达18.8%,个别地区甚至高达25%;而且发病年龄提前,如冠心病已提前到35岁—45岁,至少较以前提前10年左右。这些疾病早期可无任何症状,故人们称高血压为“悄悄的凶手”。因此,不进行定期检查就会贻误治疗,直至悲剧出现。
三是缺乏相关保健知识。尽管我国著名健康教育专家们的健康保健知识讲座亦不少,但遗憾的是对相关讲座关注的大多数是老年群体,中青年知识分子因为工作繁忙而忽视。中青年知识分子要避免“过劳死”,就要切实认识到:1、认识工作与休息的辩证关系。要牢记“不会休息就不会工作”的格言。2、坚持定期检查。研究表明,定期检查是防治疾病的重要措施,体现了预防为主的方针和对“预防是最好的治疗”的认识。管理层亦应重视和督促他们进行定期检查。3、学习相关健康知识。健康讲座不仅应进社区、进学校、进机关、企事业等单位,还应进高校实验室。要让中青年知识分子接受健康教育,认识到健康教育的重要作用。
通过上述三个方面的努力,使知识分子戒除不良的生活方式和习惯,从而大大减少生活方式相关疾病的致死致残率。
最近,我们提出了健康的“种子”法则,即最基本的健康要素包括睡眠(Sleep)、情绪(Emotion)、运动(Exercise)和饮食(Diet)。它们构成健康的“种子”法则(S-E-E-D法则)。其内容包括:(1)睡眠法则:合理睡眠,午间小憩;(2)情绪法则:情绪稳定,心态平和;(3)运动法则:有氧运动,动静结合;(4)饮食法则:科学饮食,营养均衡。它在人们的日常保健中起着非常重要的作用,是保持健康的基本要素和首要法则。若广大中青年知识分子能在日常工作生活中遵守和实践健康的“种子”法则,相信他们患心脑血管病、癌症、糖尿病和肥胖症的机率一定会大大减少,才华横溢的中青年知识分子就可以为国家为人民作更多更大的贡献。他们的平均寿命定可以从58岁上升为85岁。
天天都是休息天
M:我現在太久(超過一個時段)沒做事會覺得很沒安全感
杰:總是要休息的嘛
M:但休息太久會有罪惡感
杰:那就每天休息就不會啦(笑 ?)
M:(心中自語-自以為習慣每天休息就會麻痺喔 ?)
[摘自本日星夜談心]
天天都是休息天
雖然這句話在過常呈現休息狀態的人口中說出一點說服力都沒有(逃~)
不過也倒是很有道理咧
保持一種彈性
一種時間的彈性 情緒的彈性 思考的彈性
對於我這種過度神經質的人倒是不錯的提醒
走向不可避免的極端方向後要有回復平穩狀態的能力與彈性
如何避免“假期综合症”?
避免“假期综合症”,最重要的是要保持一颗平常心。
一、长假开始时就应该注意调节。事先做好计划,怎么过长假因人而异,但原则是不能破坏正常的生活规律。不可过度休息,也不可过度劳累。
二、以休息为主。如果长假能以休息为主,尽可能过得轻松愉快,适度的参与比平时多的娱乐,与亲友互访或与家人团聚。如天天蒙头大睡,或通宵上网等都不可取。
三、提前进入角色。人的神经有“自动调节”的特点,因此在上班前一天应有意识的做一些与工作有关的事,有助与尽早进入工作状态。上班前一天要保证充足的睡眠。
四、多想开心事。患“假期综合症”的多是年轻人,诱因很多,比如分离性焦虑,人际交往困难,在工作中有过委屈、挫折、羞辱等经历等。所以平时要多做一些自己开心的事,多找朋友聊聊天,呼吸新鲜空气,换一个新鲜的环境。也可以求助心理咨询师,毕竟心理健康,才会在事业上取得更大的成就,生活中才能体会更多的幸福!
x=x+1最低,因为它的执行过程如下:
1. 读取右x的地址;
2. x+1;
3. 读取左x的地址;
4. 将右值传给左边的x(编译器并不认为左右x的地址相同).
x=+1其次,它的执行过程如下:
1. 读取右x的地址;
2. x=1;
3. 将得到的值传给x(因为x的地址已经读出).
x++最高,它的执行如下:
1. 读取右x的地址;
2. x自增1.
"据国外知名网站管理员论坛webmasterworld.com报道(
Google's approach in China: buy Baidu?),
Google有可能通过
花300亿美元收购百度,并从此返回中国。"
网络上有许多网站提供在线协作服务,不过毫无疑问的是,Google文档正在成为时下最流行的品牌服务之一。
Google文档是免费的,在线的(即跨平台的),并且很容易上手。但是简单和免费并不意味这Google文档就没有自己的特色。
不管你是Google文档的老用户,还是只是尝尝鲜的新用户,
下面这六个小技巧可以帮你充分利用Google文档。
1. 在文档中聊天

要充分利用Google文档,你就需要能够与其他人进行实时沟通,这样做比在共享页面上相互留注释有效率的多。Google文档有一个内嵌的聊天客户端帮你解决这个难题,不需要时,你也很容易地就可以把聊天页面隐藏在右上角。

当你分享演示文档时,这个聊天客户端还可以从Picasa或者Flickr上分享图片或者插入Google Video和Youtube上的视频。(译者:我也是第一次知道)
2. 更轻松地整理你的文档

Google文档有一个非常干净的界面,但是当你与多人分享文档时,你就需要尽可能的把文档整理好。Google文档中保证内容有序的最好办法就是用颜色标注和注释(comments)

在Google表格中,你可以设置颜色注释规则(比如所有包含有你姓名的文本颜色变成紫色),你也可以在任何一个单元格上右键点击插入注释,而不用占用单元格的空间。

在Google文档的主界面中,文件夹也可以标注颜色,方法与颜色标注Gmail标签的方法类似。
3. 与他人分享文档

Google文档的精髓就算在分享,这个特点你已经知道了。不过关键的地方是你可以精确的控制分享的对象。文档所有者可以随意操作,你可以邀请协作者来编辑文档,或者只是简单的浏览共享文档。

Google文档默认的是任何能编辑文档的人都可以在将文档分享给其他人。如果你真的想放开大门,你也可以让所有都可以浏览和编辑文档。不过要注意的是,每个文档和演示稿(presentations)能够同时进行编辑的人数上限是10人(电子表格可以同时编辑的人数上限为50人)。
4. 回滚(修订版或者版本控制)

你已经知道Google文档可以自动保存你做的修改,但是你可能不知道你可以操作之前修订版本,弄清楚到底什么地方做了修改。

Google文档保留所有的修订历史记录,你可以追踪文档的改动。如果你需要,你可以将还原到之前的任何一个版本。在文档的修订历史记录中,你甚至可以并行对比两个版本,浏览用颜色标注的改动处。
5.绘图

最近Google给Google文档新添加了一个绘图功能。这功能新提供一系列的全新分享选项。现在图表的制作和分享变得非常轻松。它提供的选项还不算全面,不过你可以选择插入各种形状,线条,箭头,文本框,你可以添加颜色,旋转图形,甚至在某种程度上你可以对对象设置图层。上面这幅图就是用 Google文档画出来。
6. 其他
Google文档中还有其他许多功能,你可能会发现他们中有些很有用,有些派不上用场。

Google给你提供的有编辑Html原文件甚至是文档CSS文件的功能。在电子表格中,你可以从其他工作表中引用数据,然后在用户的当前工作表中同步更新数据。Google也提供实时的查找函数(lookup),让特定的单元格包含来自属网络的实时数据,等等。当你编辑HTML时,你Google 文档的页面上方会出现一个编辑框。
自Google China被重定向到Google Hong Kong之后,Net Applications的统计显示
Google Hong Kong全球流量增至3%。
在3月23日,谷歌中国的全球流量从前一天的1.68%降至0.10%,此后几天都在0.10%左右徘徊,而Google香港引擎则从前两天的0.06%和0.93%增加到2.72%,其后几天最高达到了3.12%,之后稳定在3%左右。Net Applications认为,如果Google香港引擎回落到0点左右,那么原因可能是中国大陆无法访问它了。
Fishdrowned在
日志上说,Google.com.hk (简体中文) 的 logo 改成 "Google中国", 而不是 "Google谷歌" 了, 而且 "欢迎您来到谷歌搜索在中国的新家" 也已经从页面上移除。
创建数据库:
create database 数据库名;
显示数据库列表:
show databases;
删除数据库:
drop database 数据库名;
用数据库:
use 数据库名;
显示数据表结构:
desc 表名;
显示数据库里面的所有表:
show tables;
创建表:
create table 表名(列名 该列的数据类型 【是否设置主键】,
列名 该列的数据类型,
列名 该列的数据类型,
······
);
查找表:
select * from 表名;
模糊查询:
select * from 表名 where 要查的列名 like ‘%关键字%’
删除表:
drop table 表名;
向表中插入数据:
insert into 表名 value( , , );(text类型用单引号)
删除表中的一条数据:
delete from 表名 where 范围;
清空表:
delete from 表名;
修改表中的数据:
update 表名 set 列名=要改的值 where 范围;
排序:
select * from 表名 order by 列名 desc;
求做大值:
select max(列名) as maxvalue from 表名;
求最小值:
select min(列名) as minvalue from 表名;
求平均值:
select avg(列名) as avgvalue from 表名;
求和:
select sum(列名) as sumvalue from 表名;
总数:
select count(*) as totalcount from 表名;
添加触发器:
alter table 表名(小弟表) add foreign key (小弟表内的字段) references 主键表(关联的主键) on delete cascade on update cascade ;
添加外键关联:
CONSTRAINT '外键的名字'(随意起的名字) FOREIGN KEY ('本表的字段名') REFERENCES 表名(要关联的主键字段);
Documents and Settings是什么文件?答案:
是系统用户设置文件夹,包括各个用户的文档、收藏夹、上网浏览信息、配置文件等。
补:这里面的东西不要随便删除,这保存着所有用户的文档和账户设置,如果删除就会重新启动不能登陆的情况,尤其是里面的default user、all users、administrator和以你当前登陆用户名的文件夹。
Favorites是什么文件?答案:
是收藏夹,存放你喜欢的网址。可以在其中放网址快捷方式和文件夹快捷方式,可以新建类别(文件夹)。
Program Files是什么文件?答案:
应用软件文件夹 装软件的默认路径一般是这里!当然里面也有些系统自身的一些应用程序
Common Files是什么文件?答案:
Common Files. 这个文件夹中包含了应用程序用来共享的文件,很重要,不能乱删除 Common Files这个文件是操作系统包扩系统程序和应用程序 Common Files是应用程序运行库文件数据库覆盖了大约1000多个最流行的应用程序的插件,补丁等等 文件夹common files里很多都是系统文件,不能随意删除,除非确定知道是干什么用的,没用的可以删掉。不过就算删掉了有用的东西,也没大的关系,顶多是某些软件用不了,不会造成系统崩溃。
ComPlus Applications是什么文件?答案:
ComPlus Applications: 微软COM+ 组件使用的文件夹,删除后可能引起COM+ 组件不能运行
DIFX是什么文件?答案:
不可以删除,已有的XML数据索引方法从实现思想上可分为两类:结构归纳法和节点定位法.这两种方法都存在一定的问题,结构归纳法的缺点是索引规模较大而且难以有效支持较复杂的查询,而节点定位法的主要缺点是容易形成过多的连接操作.针对这些问题,提出了一种新的动态的XML索引体系DifX,它扩展了已有的动态索引方法,采用一种动态的Bisimilarity的概念,可以根据实际查询需求以及最优化的要求动态决定索引中保存的结构信息,以实现对各种形式的查询最有效的支持.实验结果证明DifX是一种有效而且高效的XML索引方法,其可以获得比已有的XML索引方法更高的查询执行效率.
Internet Explorer是什么文件?答案:
不用说了,肯定不能删除,IE,浏览网页的!
===================================================================================
========
Kaspersky Lab是什么文件?
答案:卡巴斯基的文件包,这个是卡巴的报告,在 C:Documents and SettingsAll
UsersApplication DataKaspersky LabAVP6Report 的更新文件中有很多report文件 很占地
方的
删除了就好了,
1利用卡巴自带的清理功能,但不能完全清理干净。
2关闭自我保护,然后将report文件夹下面的文件手动删除。
===================================================================================
========
Messenger是什么文件?答案:系统自带的MSN是完全可以删除的。
相信有不少人都在使用MSN,可能有同样的经历,安装完 新的MSN 后,可每每打开 MSN 首先跳出
来的是旧版,而不是新版。即使在系统中删除了老版本,但过了不久也会自动恢复回来。
如果要彻底删除老版本.可以点击"开始"->"运行"->
代码:
RunDll32 advpack.dll,LaunchINFSection %windir%INFmsmsgs.inf,BLC.Remove
===================================================================================
========
microsoft frontpage是什么文件?答案:那个是系统自带的网页编辑器
===================================================================================
========
Microsoft Silverlight是什么文件?答案:Silverlight是于Adobe Flash基本相同的软件,运行在浏览器中的插件。实现交互、动画等
功能。使用XAML文件支持,支持.net运行库。
program files是Windows操作系统中所有应用程序的位置,大是正常的。很多情况都可能造成
program files创建文件夹,一般是安装应用程序后创建的。您需要提供出文件夹名称我们才可以
确切的说是不是无用的文件夹。
一般情况这里的文件夹不可以删除的,如果删除会影响系统或应用程序无法运行。
===================================================================================
========
Movie Maker是什么文件?答案:movie maker是 微软提供的 捆绑系统的一个视频编辑软件
我的这个文件也是空的,据猜测,应该是ghost版的系统优化掉了这个软件。
完全可以删除,不过系统总是重建这个文件夹。
可以用unlocker软件删除。
你无法删除的原因是仍然有桌面进程调用这个文件。
不解除锁定是无法删除的。
===================================================================================
========
MSBuild是什么文件?
答案:没找到,应该是系统相关的,最好别删!
===================================================================================
========
MSN Gaming Zone是什么文件?答案:一些系统自带的扑克牌等小游戏,
可以删除
控制面板-〉添加或删除程序-〉添加/删除windows组件,然后在列表里面找到你要删除的outlook
和msn explorer,把前面的勾去掉,就能删除了。
===================================================================================
========
MSXML 6.0是什么文件?答案:msxml
指微软的xml语言解析器,用来解释xml语言的。就好像html文本下再到本地,浏览器会检查html的
语法,解释html文本然后显示出来一样。要使用xml文件就一定要用到xml parser。不过不仅仅微
软有,像ibm,sun都有自己的xml parser。
===================================================================================
======
NetMeeting是什么文件?答案:是Windows自带的MSN的文件,如果你不用MSN以及Outlook Express,你完全可以把它删掉。
不过也占不多大地方的。是Windows自带的MSN的文件,如果你不用MSN以及Outlook Express,你完
全可以把它删掉。不过还是推荐看下网上的卸载方式,毕竟用系统自带的卸载方式比较安全。
NetMeeting文件夹是系统自带的有关远程控制的部分,你删掉后这个功能不能使用,但不影响正常操
作,但是由于是系统自带所以会自动生成,也有病毒喜欢潜伏在此文件夹内,不过并不是简单的通过删
除文件夹可以解决的
NetUpdateService.exe这个进程如果用户名项是system的话应该就是你的自动更新服务了,如果不
用自动更新的话最好关掉,省得浪费资源
===================================================================================
======
Online Services是什么文件?答案:上网用的!不能删除!
===================================================================================
======
Outlook Express是什么文件?答案:Outlook express 是Windows内置的邮件收发端
他的作用就是你不必每次登邮箱都要上网页只要打开outlook express就可以收发邮件了!!!!
!
级别:先知
是收发电子邮件的软件。 他是一个收发电子邮件的软件,由微软研发。
===================================================================================
======
Reference Assemblies是什么文件?答案:系统相关的!最好别删除
===================================================================================
======
SigmaTel是什么文件?
答案:这个文件是有用的文件!此文件是计算机声卡的驱动!注意!系统磁盘里的文件不懂的话,
千万不可乱删除哦!
===================================================================================
======
Tencent是什么文件?
答案:Tencent 就是QQ的文件夹了,如果你不用了就从开始菜单里卸载掉,如果还要使用,那就留着
吧
===================================================================================
======
VID_0E8F&PID_0003是什么文件?
答案:北通神鹰的驱动程序
===================================================================================
======
VMware是什么文件?
答案:系统文件,不要乱动
===================================================================================
======
Windows Media Connect 2是什么文件?
答案:程序的东西,别删除!
===================================================================================
======
Windows Media Player是什么文件?答案:是系统自身的一个播放软件!
Windows Media Player
使用 Microsoft Windows Media Player,您可以播放和组织计算机和 Internet 上的数字媒体文
件。这就好象把收音机、视频播放机、CD 播放机和信息数据库等都装入了一个应用程序中。使用
Windows Media Player,您可以收听世界各地电台的广播、播放和复制您的 CD、查找在
Internet 上提供的视频,还可以创建您的计算机上所有数字媒体文件的自定义列表。
总之,就是一种多媒体播放器,集视频与音频于一身~
===================================================================================
======
Windows NT是什么文件?答案:一种网络操作系统,特点如下:
1.将联网能力加入到操作系统中,使之成为操作系统功能的一个组成部分。
2.系统直接支持网络上各主机之间的文件复制、用户之间的电子邮件、支持作为仿真终端实现对远
程主机的登录等等。而用户不需要在机器上再安装此类网络服务软件。
3.由于系统支持多个网络协议,因此对现存的多种网络、网络服务器,都能很容易地实现数据交换
。
4.网络具有开放式结构,网络中使用地各种数据传输、网络驱动程序都可以被动态地装入和卸出,
而且不同种类地功能部件可以并存。这些都有利于网络功能地修改和扩充。
===================================================================================
======
WinRAR是什么文件?答案:winrar,是一款比较优秀的压缩解压缩软件,支持鼠标拖放及外壳扩展,完美支持 ZIP 档案
,内置程序可以解开 CAB、ARJ、LZH、TAR、GZ、ACE、UUE、BZ2、JAR、ISO 等多种类型的压缩文
件;具有估计压缩功能,你可以在压缩文件之前得到用 ZIP 和 RAR 两种压缩工具各三种压缩方式
下的大概压缩率;具有历史记录和收藏夹功能;压缩率相当高,而资源占用相对较少、固定压缩、
多媒体压缩和多卷自释放压缩是大多压缩工具所不具备的;使用非常简单方便,配置选项不多,仅
在资源管理器中就可以完成你想做的工作;对于 ZIP 和 RAR 的自释放档案文件( DOS 和 WINDOWS
格式均可),点击属性就可以轻易知道此文件的压缩属性,如果有注释,还能在属性中查看其内容。
===================================================================================
======
Xerox是什么文件?答案:Xerox文件夹是XP自己安装的,为自带的一些图像处理软件作临时空间用。
文件夹的名称源自Microsoft采用了Xerox公司授权的技术,该文件夹受WFP (Windows File
Protection)保护,所以不可能(也没必要)删除。
ATI Technologies是显卡控制程序,跟电脑芯片有关,不要动它
Online Services是网络服务文件夹
NetMeeting是MS最早基于IP聊天的一种工具,Netmeeting功能强大,除了语音、视频,它还有文字聊
天、电子白板、文件传送、程序共享等等。 可以删除
不过,在这个文件夹内的文件夹都是比较重要的,或者经常用的,最好不要动,弄不好就会对系统
造成影响,还不好恢复
JavaScript--正则表达式
正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。
正则表达式构造函数: new RegExp("pattern"[,"flags"]);
参数说明:
pattern -- 一个正则表达式文本
flags -- 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合
在构造函数中,一些特殊字符需要进行转意(在特殊字符前加""")。正则表达式中的特殊字符:
" 转意,即通常在"""后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/"b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"""后,/a"*/ 将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
["b] 匹配一个退格符
"b 匹配一个单词的边界
"B 匹配一个单词的非边界
"cX 这儿,X是一个控制符,/"cM/匹配Ctrl-M
"d 匹配一个字数字符,/"d/ = /[0-9]/
"D 匹配一个非字数字符,/"D/ = /[^0-9]/
"n 匹配一个换行符
"r 匹配一个回车符
"s 匹配一个空白字符,包括"n,"r,"f,"t,"v等
"S 匹配一个非空白字符,等于/[^"n"f"r"t"v]/
"t 匹配一个制表符
"v 匹配一个重直制表符
"w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如["w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
"W 匹配一个不可以组成单词的字符,如["W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
说了这么多了,我们来看一些正则表达式的实际应用的例子:
HTML代码的屏蔽
function mask_HTMLCode(strInput) {
var myReg = /<("w+)>/;
return strInput.replace(myReg, "<$1>");
}
E-mail地址验证:
function test_email(strEmail) {
var myReg = /^[_a-z0-9]+@([_a-z0-9]+".)+[a-z0-9]{2,3}$/;
if(myReg.test(strEmail)) return true;
return false;
}
正则表达式对象的属性及方法:
预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext,rightContext和$1到$9。其中input和multiline可以预设置。其他属性的值在执行过exec或 test方法后被根据不同条件赋以不同的值。许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(
JavaScript模拟perl的正则表达式)
正则表达式对象的属性:
属性含义
$1...$9 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$'' 参见rightContext
constructor 创建一个对象的一个特殊的函数原型
global 是否在整个串中匹配(bool型)
ignoreCase 匹配时是否忽略大小写(bool型)
input 被匹配的串
lastIndex 最后一次匹配的索引
lastParen 最后一个括号括起来的子串
leftContext 最近一次匹配以左的子串
multiline 是否进行多行匹配(bool型)
prototype 允许附加属性给对象
rightContext 最近一次匹配以右的子串
source 正则表达式模式
lastIndex 最后一次匹配的索引
正则表达式对象的方法:
方法含义
compile 正则表达式比较
exec 执行查找
test 进行匹配
toSource 返回特定对象的定义(literal
representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString 返回特定对象的串。重载Object.toString方法得到的。
valueOf 返回特定对象的原始值。重载Object.valueOf方法得到
例子
1. <script language = "JavaScript">
2. var myReg = /(w+)s(w+)/;
3. var str = "John Smith";
4. var newstr = str.replace(myReg, "$2, $1");
5. document.write(newstr);
6. </script>
7. 将输出"Smith, John"
常用的js正则表达式
javascript验证表单时常用
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?"d+$" //整数
"^"d+("."d+)?$" //非负浮点数(正浮点数 + 0)
"^(([0-9]+".[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*".[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
"^((-"d+("."d+)?)|(0+(".0+)?))$" //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+".[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*".[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?"d+)("."d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^"w+$" //由数字、26个英文字母或者下划线组成的字符串
"^["w-]+(".["w-]+)*@["w-]+(".["w-]+)+$" //email地址
"^[a-zA-z]+://("w+(-"w+)*)(".("w+(-"w+)*))*("?"S*)?$" //url