Java类笔试知识点收集

1.在Spring框架中获取连接池可以有哪些方式?

四种方式,如下:

1:DBCP数据源

DBCP类包位于 <SPRING_HOME>/lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括<SPRING_HOME>/lib/jakarta-commons/commons-pool.jar。下面是使用DBCP配置oracle数据源的配置片断:

<bean id=”dataSource”
class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
  < property name=”driverClassName”

value=” oracle.jdbc.driver.OracleDriver ” />
  < property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” />
  < property name=”username” value=”root” />
  < property name=”password” value=”1234″ />
</bean>

  2:C3P0数据源

C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的Connection 和Statement 池。C3P0类包位于<SPRING_HOME>/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一个Oracle数据源:

<bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” destroy-method=”close”>
  < property name=”driverClassName”

value=” oracle.jdbc.driver.OracleDriver ” />
  < property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” />
  < property name=”username” value=”root” />
  < property name=”password” value=”1234″ />
</bean>

  3. Spring的数据源实现类(DriverManagerDataSource)

  Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口,但它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要额外的依赖类。

<bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource” destroy-method=”close”>
  < property name=”driverClassName”

value=” oracle.jdbc.driver.OracleDriver ” />
  < property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” />
  < property name=”username” value=”root” />
  < property name=”password” value=”1234″ />
</bean>

  4.获取JNDI数据源

  如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:

<bean id=”dataSource”

class=”org.springframework.jndi.JndiObjectFactoryBean”>
  < property name=”jndiName” value=”java:comp/env/jdbc/oracle”/>
  </bean>

通过jndiName指定引用的JNDI数据源名称。

2.String与StringBuffer、StringBuilder的区别。

String 字符串常量 

StringBuffer 字符串变量(线程安全) 
StringBuilder 字符串变量(非线程安全)
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都是String类的对象。字符串是常量;它们的值在创建之后不能改变。所以可以共享它们。StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象。StringBuilder与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果你只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。值得注意的是StringBuilder是在JDK1.5版本中增加的。以前版本的JDK不能使用该类。

3.关于ThreadLocal:

ThreadLocal类代表一个线程局部变量,通过把数据放在ThreadLocal中让每个线程创建一个该变量副本,避免并发访问的线程安全问题

1、ThreadLocal的类声明:

public class ThreadLocal<T>

可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
  所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立。
  由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,变量被彻底封闭在每个访问的线程中。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
 static class ThreadLocalMap {
          static class Entry extends  WeakReference<ThreadLocal> {
              /** The value associated with this ThreadLocal. */
              Object value;
              Entry(ThreadLocal k, Object v) {
                  super(k);
                  value = v;
              }
          }
          /**
           * The table, resized as necessary.
           * table.length MUST always be a power of two.
           */
          private Entry[] table;
  }
4.有关JAVA swing 和AWT:

Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT   的功能进行了大幅度的扩充。AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。

5.并发和并行:

并发:同一时刻只能有一个处于执行状态,但是它们交换着进行,因此在同一段时间内可看做是同时进行的。

并行:同一时刻多个同时进行,多路线进行。

在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)

时间片调度属于并发,多线程分别绑定CPU属于并行。

6.避免死锁的一个著名的算法是:

银行家算法是一种最有代表性的避免死锁的算法。又被称为“资源分配拒绝”法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值