边疆行 4 — 凭祥走边关

隶属于广西崇左市,接壤越南谅山,是广西口岸数量最多,种类最全,规模最大的边境口岸城市,是我国通往越南及东南亚最大和最便捷的陆路通道

  1. 友谊关:
    素有“中国南大门”之称,1885年著名的中法战争镇南关大捷,由冯子才指挥,中越两过领导访问,陆路的话就需要经过友谊关这个通道,然后在坐车到南宁然后再到其他地方。
  2. 友谊关口岸:
    越南要去欧盟或者其他国家的人通常选择友谊关口岸节省航班和机票的费用,很多去越南旅游的人都喜欢选择凭祥出境。到凭祥办理出入境手续很方便,不需要提交带护照,只需要带身份证和照片就可以来口岸办理出入境手续了,和护照不同的是办理的是边境通行证,价格便宜,凭祥是全国4个办理异地边境旅游的试点城市之一。
  3. 弄怀边贸点
    1992年开发建设,每天7点半到晚上12点两国的边民可以自由贸易,每人每天携带的货不能超过8000元。
  4. 浦寨边贸点
    中国从东南亚进口水果最大的一个边贸点,越南特产,越南的一些人也到这边来打工。
  5. 红木
    红木不是某一个树种,而是对稀有硬木的统称,常见的红木品种有紫檀,花梨,香枝,黑酸枝,红酸枝,乌木,条纹乌木,鸡翅木,凭祥从越南进口半成品红木家具然后进行精加工,黄花梨木瘤:需要把木头切开才能判断多少,好的木瘤得来非常不易,再加上黄花梨本来就很稀有,黄花梨木瘤就更加的名贵。
  6. 平岗岭地下长城
    地下长城连接着南炮台和北炮台,便于两个炮台直接相互支援,地下可以屯兵,储备弹药,后勤给养,全长1000多米,分别装有一门克虏伯大炮,

长安物语

  • 汉唐的西安
  • 西安的泡馍
  • 日本与唐代曾19次排人到长安学习,著名的有阿贝仲麻吕
  • 长安里的各种外国人,突厥(突厥人的官衔最多的时候和汉人的差不多),阿拉伯,波斯,胡人,日本人

法国项目背景要点 for Interview

几乎80%系统都会设计到person和group

group分类:

  • 永久:family,facebook,养老院,政府部门
  • 临时:旅游团队,高尔夫俱乐部,
  • 交易型:一次门诊流程设计的所有人员,交易其实也是临时,度假村

还分为

  • manual association:过滤器读取数据仓库所有表,然后根据规则过滤得到数据,点击create手动生成表
  • automatic association:过滤器读取数据仓库所有表,然后根据规则过滤得到数据,保存规则,自动生成group
  • recommended association:比如某人存在一个group中,根据group的属性自动推荐其它的group

 

Scrum要点 for Interview

瀑布模型:需求分析—详细设计—开发—测试—发布

Scrum:迭代式增量开发,每个阶段都包含瀑布里面最必要的步骤

Scrum Team Roles:

  • Scrum master: Scrum教练和团队带头人,确保团队合理的运作Scrum,并帮助团队移除实施中的障碍
  • Product Owner: 确定产品的方向和愿景,定义产品发布的内容、优先级及交付时间,为产品ROI负责
  • Team: 整个Team的规模在5-9人,按照优先级完成每个sprint的任务

15分钟站立会议:

每个scrum成员发表下当日任务情况和问题,1-2分钟

Scrum开发模式中的文档:

  • 产品订单(product backlog):产品的概要说明,订单的粗略估算
  • 冲刺订单(sprint backlog):细化为每个task,每个task一般不超过16个小时,超过需要再划分
  • 燃尽图(burn down chart):  显示每天未完成的小时数,理论的正常流程应该是一条向下的斜线,
  • Accept(客户认同量)应该是一条向上的斜线

Scrum项目一个冲刺阶段的基本流程:

  1. 首个Sprint的规划会议:代办事项制定优先级,sprint要完成几个user story,每个user story都需要根据复杂度来估计一个点数。
  2. 15分钟的站立式会议(日会):昨天完成了什么,遇到了什么问题,今天要完成什么任务,问题结对编程。
  3. 故事时间会议:有新需求的情况,新需求细化User story加入到代办事项排列优先级
  4. 演示会议:
  5. 回顾会议:当前sprint总结,会议完后,状态更新,burt down chart

Scrum优点和必须牢记的要点:

  • 传统瀑布是线型开发,Scrum对应非线性的需求,拥抱变化
  • 工作软件必须的文档高于详尽的文档
  • 客户合作高于合同谈判
  • 较短的周期持续不断的交付有价值的功能
  • 业务人员开发人员长期在一起
  • 面对面交流
  • 经过统计,软件系统中,平均45%的功能客户从来都不会去使用,所有sprint优先级很重要,先做最重要的,不重要的可能到了后面根本就不需要做了

Hibernate Criteria

除了hql意外,hibernate可以通过对象的查询条件方式查询

public List<Users> getUsersByCritetia(String name){
		Criteria criteria = HibernateUtil.getSession().createCriteria(Users.class);
		criteria.add(Restrictions.like("name", "%" + name + "%"));
		
		criteria.setFirstResult(0);
		criteria.setMaxResults(10);
		return (List<Users>)criteria.list();
	}

Query里面有的查询方法criteria都有,通过Restrictions来设置查询条件,只是如果有复杂的联合查询,Criteria可能无法实现,只能用HQL了。

Hibernate hql

String hql = "from Users";
		Query query = HibernateUtil.getSession().createQuery(hql);
		List<Users> list = query.list();
		// query.uniqueResult()

list:取得对象list,如果查询的对象有子类,会检索所有的子类

uniqueResult:取得唯一的对象,如果实际查询返回多条的时候会抛异常

hql带参查询方式:

String hql = "from Users as users where users.name = :name";
....
query.setString("name", ***);

分页:
query.setFirstResult(0);
query.setMaxResults(10);

因为我们知道不同的数据库分页的语句不通,比如mysql是limit …,sqlserver是top…

hibernate通过<property name=”dialect”>org.hibernate.dialect.MySQLDialect</property>在MySQLDialect这个类里面根据不同的数据库选择不同的分页方式

 

Hibernate 实体的三种状态

以Hibernate为参照物,对象的三种状态:

  • 瞬时:对象在数据库里面不存在数据,也没有被Session管理,这种状态就是瞬时,比如new Users()这个对象就是瞬时的。
  • 持久化:对象在数据库里面存在数据,也在被Session管理,对象值的改变能被hibernate知道,
  • 脱管(也叫游离态):对象在数据库里面存在数据,但是已经没有被Session管理了,比如session取出的对象,但是session已经关闭了

hibernate objects status

 

UsersDAO userDao = new UsersDAO();
			Users user = new Users();
			user.setName("ttt3");
			user.setAge(12);
			user.setAddTime(new Date());
			userDao.save(user);
			System.out.println(user.getId()); // 这里的user是脱管状态

public void save(Users user){
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateUtil.getSession();
			tx = session.beginTransaction();
			session.save(user);
			user.setName("new name"); // 这里的user是持久化状态
			tx.commit();
		}finally{
			if(session != null){
				session.close();
			}
		}
	}

这个方法会触发两个操作,第一个是保存user,第二个是用”new name”更新user对象,当执行到tx.commit()的时候才进行更新操作,这样如果有多个值改变的情况不会经常的去访问数据库

从这两个例子可以看出

  • 当对象处于瞬时的状态的时候用save或者persist让对象持久化
  • 当对象处于脱管的状态使用update方法
  • 无法判断对象是瞬时还是脱管状态的时候使用saveOrUpdate方法,saveOrUpdate调用后对象就会持久化,另外一个更新方法merge也可以实现更新,但是merge调用后,对象还是脱管状态

saveOrUpdate方法:

hibernate内部判断如果主键是int,如果不等于0就update,等于0就save;如果主键是String,如果等于null就save,不等于null就update

在映射文件中id有一个属性unsaved-value,可以给他设置一个数值,比如-1,那么hibernate就会判断如果不是-1的时候就更新,是-1的时候就save。

 Object状态流转图:

hibernate_object_status_exchange

 

Hibernate load和get的区别

假设要取的对象是Users

load:

  1. 运用的是懒加载的模式,当用load取得一个Users对象,这个对象通过user.getClass().getName()得到的类型是Users$$EnhancerByCGLIB$$660971c2这样的一个Users的代理类,也即是Users的一个子类,这个类里面的数据属性全部都还没有从数据库取值。只有用user.getName()这样取值的时候才真正的访问数据库,但是这个user对象指向的是Users$$EnhancerByCGLIB$$660971c2这个类型的实例,user里面的所有属性还是全部为空,包括name属性
  2. load方法取不到值的时候会抛ObjectNotFound的异常

get:

  1. 用get方法取得Users对象是,他的类型就是Users class,而且会取出所有属性的值,
  2. get方法取不到值的时候,返回null。