点滴积累方有为,每步思索可致远

Posted 风华长情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点滴积累方有为,每步思索可致远相关的知识,希望对你有一定的参考价值。

1. 是否可以在static环境中访问非static变量?

不可以。因为静态的成员属于类,随着类的加载而加载到静态方法区内存,当类加载时,此时不一定有实例创建,没有实例,就不可以访问非静态的成员。

 

2. 使用线程同步取款,要求:用户rz账户中有500元,现在sy也有该账户密码,二者同时取款500元,假设每次取款机只能取100元(而且此时只能有一人能操作此账户,另外一人处于等待状态),请用Java代码模拟实现该取款方案。

  1 package com.fhcq.drawmoney;
  2 
  3 import java.util.concurrent.locks.Condition;
  4 import java.util.concurrent.locks.Lock;
  5 import java.util.concurrent.locks.ReentrantLock;
  6 
  7 public class Drawmoney {
  8 	public static void main(String[] args) {
  9 
 10 		//创建并发访问的账户
 11 		MyCount myCount = new MyCount("95599200901215522", 500);
 12 
 13 		Thread t1 = new DrawThread("rz", myCount, 100);
 14 
 15 		Thread t2 = new DrawThread("sy", myCount, 100);
 16 
 17 		t1.start();
 18 		t2.start();
 19 
 20 	}
 21 
 22 }
 23 
 24 
 25 class DrawThread extends Thread {
 26 
 27 	private String name; //操作人
 28 
 29 	private MyCount myCount; //账户
 30 
 31 	private int x; //取款金额
 32 
 33 	DrawThread(String name, MyCount myCount, int x) {
 34 
 35 		this.name = name;
 36 
 37 		this.myCount = myCount;
 38 
 39 		this.x = x;
 40 
 41 	}
 42 
 43 	public void run() {
 44 
 45 		myCount.drawing(x, name);
 46 
 47 	}
 48 
 49 }
 50 
 51 
 52 class MyCount {
 53 
 54 	private String oid; //账号
 55 
 56 	private int cash; //账户余额
 57 
 58 	private Lock lock = new ReentrantLock(); //账户锁
 59 
 60 	private Condition draw = lock.newCondition(); //取款条件
 61 
 62 	MyCount(String oid, int cash) {
 63 
 64 		this.oid = oid;
 65 
 66 		this.cash = cash;
 67 
 68    }
 69 
 70 
 71 	public void drawing(int x, String name) {
 72 
 73 		lock.lock(); //获取锁
 74 
 75 		try {
 76 
 77 			if (cash - x < 0) {
 78 
 79 				draw.await(); //阻塞取款操作
 80 
 81 			} else {
 82 
 83 				cash -= x; //取款
 84 
 85 				System.out.println(name + "取款" + x + ",当前余额为" + cash);
 86 
 87 			}
 88 
 89 		} catch (InterruptedException e) {
 90 
 91 			e.printStackTrace();
 92 
 93 		} finally {
 94 
 95 			lock.unlock(); //释放锁
 96 
 97 		}
 98 	}
 99 }
100 

 

3. Spring框架分为哪七大模块,各模块的主要功能作用是什么?

1. Spring Core:

Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。

2.Spring Context:

构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。

3.Spring DAO:

DAO (Data Access Object)提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。

4.Spring ORM:

ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。

5.Spring AOP:

Spring的 AOP 封装包提供了符合AOP Alliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。

6.Spring Web:

Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IOC容器初始化和针对Web的ApplicationContext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。

7.Spring Web MVC:

Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和Web Form之间。并且,还可以借助Spring框架的其他特性。

 

4. 简述Strust2是如何实现MVC架构模式的?画出草图?

1、浏览器发送请求,经过一系列的过滤器后,到达核心过滤器(StrutsPrepareAndExecuteFilter).

2、StrutsPrepareAndExecuteFilter通过ActionMapper判断当前的请求是否需要某个Action处理,如果不需要,则走原来的流程。如果需要则把请求交给ActionProxy来处理

3、ActionProxy通过Configuration Manager询问框架的配置文件(Struts.xml),找到需要调用的Action类;

4、创建一个ActionInvocation实例,来调用Action的对应方法来获取结果集的name,在调用前后会执行相关拦截器。

5、通过结果集的Name知道对应的结果集来对浏览器进行响应。

  Struts2-Architecture

 

5. Oracle11g表空间一般分有哪几类,每一类大概的功能是什么?

表空间具有以下类型:
系统编目表空间(SysCatSpace)
系统临时表空间(SysTempSpace)
用户表空间(UserSpace)
用户临时表空间(UserTempSpace)
一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间与系统临时
表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,
对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配
磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间,
若需要使用临时表,则需要创建用户临时表空间。

 

6. 什么是增量导出/导入?包含哪几种类型?语法分别是什么?

增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

增量导出包括三种类型:

(1)、“完全”增量导出(Complete)

即备份三个数据库,比如:

exp system/manager inctype=complete file=040731.dmp

(2)、“增量型”增量导出

备份上一次备份后改变的数据,比如:

exp system/manager inctype=incremental file=040731.dmp

(3)、“累积型”增量导出

累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:

exp system/manager inctype=cumulative file=040731.dmp

数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。

比如数据库的被封任务可以做如下安排:

星期一:完全备份(A)

星期二:增量导出(B)

星期三:增量导出(C)

星期四:增量导出(D)

星期五:累计导出(E)

星期六:增量导出(F)

星期日:增量导出(G)

如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:

第一步:用命令CREATE DATABASE重新生成数据库结构;

第二步:创建一个足够大的附加回滚。

第三步:完全增量导入A:

imp system/manager inctype=RESTORE FULL=y FILE=A

第四步:累计增量导入E:

imp system/manager inctype=RESTORE FULL=Y FILE=E

第五步:最近增量导入F:

imp system/manager inctype=RESTORE FULL=Y FILE=F

以上是关于点滴积累方有为,每步思索可致远的主要内容,如果未能解决你的问题,请参考以下文章

点滴积累方有为,每步思索可致远

JS实战 · 实践积累点滴杂烩

辅导日的点滴积累,希望有更多的点滴...

AJAX入门---点滴的积累

VsVim -- 编程路上的点滴积累

linux的点滴积累