牛客网-Java专项练习(1)

B

堆栈(Stack) : 如子弹入弹夹一样  先进后出
队列(Queue):如排队过隧道 先进先出

D

赋值运算符左侧必须为变量

C

1. java.awt提供了绘图和图像类,主要用于编写GUI程序,包括按钮、标签等常用组件以及相应的事件类。

2. java.langjava的语言包,是核心包,默认导入到用户程序,包中有object类,数据类型包装类,数学类,字符串类,系统和运行时类,操作类,线程类,错误和异常处理类,过程类。

3. java.io包含提供多种输出输入功能的类。

4. java.net 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET等。

5. java.applet包含java小应用程序的类。

6. java.util包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。
7. java.sql提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。

A

A.标准输入 B.标准输出 C.错误输出 D.结束程序

D

java的垃圾收集机制主要针对新生代和老年代的内存进行回收,不同的垃圾收集算法针对不同的区域。所以java的垃圾收集算法使用的是分代回收。一般java的对象首先进入新生代的Eden区域,当进行GC的时候会回收新生代的区域,新生代一般采用复制收集算法,将活着的对象复制到survivor区域中,如果survivor区域装在不下,就查看老年代是否有足够的空间装下新生代中的对象,如果能装下就装下,否则老年代就执行FULL GC回收自己,老年代还是装不下,就会抛出OUtOfMemory的异常

B

Struts框架的架构如下:

C

D

成员变量和局部变量的区别

1、成员变量是独立于方法外的变量,局部变量是类的方法中的变量

1)、成员变量:包括实例变量类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用。
2)、局部变量:包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。
2、成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型。
3、成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许,还可以在类的外部使用成员变量。
4、局部变量的生存周期与方法的执行期相同。当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。类的成员变量,如果是实例成员变量,它和对象的生存期相同。而静态成员变量的生存期是整个程序运行期。
5、成员变量在累加载或实例被创建时,系统自动分配内存空间,并在分配空间后自动为成员变量指定初始化值,初始化值为默认值,基本类型的默认值为0,复合类型的默认值为null。(被final修饰且没有static的必须显式赋值),局部变量在定义后必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。

6、局部变量可以和成员变量 同名,且在使用时,局部变量具有更高的优先级,直接使用同名访问,访问的是局部变量,如需要访问成员变量可以用this.变量名访问

本例中i为成员变量,有默认的初始值,如果定义在方法内部,就没有初始值

A

1、try...catch(捕获处理机制); 
2、throws(冒泡处理机制).
注意细节:使用try...catch块捕获时可以没有catch块,但当没用catch块的时候必须得有finally块.故选A)

A

1. 静态内部类:

    1. 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例而实例化。

2. 成员内部类:

    1. 成员内部类本身可以访问外部的所有资源,但是自身不能定义静态资源,因为其实例化本身就还依赖着外部类。

3. 局部内部类:

    1. 局部内部类就像一个局部方法,不能被访问修饰符修饰,也不能被static修饰。

    2. 局部内部类只能访问所在代码块或者方法中被定义为final的局部变量。

4. 匿名内部类:

    1. 没有类名的内部类,不能使用class,extends和implements,没有构造方法。

    2. 多用于GUI中的事件处理。

    3. 不能定义静态资源

    4. 只能创建一个匿名内部类实例。

    5. 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。

    6. 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效。

A

out是java.lang.System类中的一个字段,out是“标准“”输出流,public static final PrintStream out,

out是PrintStream类型,PrintStream是包装流,你传入什么,他就输出什么

E

A.可以实例化   //错误,抽象类中有抽象方法,需要被实现,不能实例化。

B.不可以被继承  //错误,可以被继承,如果不继承,里面的抽象方法就没意思了。

C.子类为abstract  //错误,子类不一定为抽象类,可以是,也可以不是。

D.只能被继承  //错误,我觉得,抽象类不仅可以被继承,还可以直接拿来使用的,当然,这个使用是拿来声明,而不是实例化,因为抽象类不能实例化,但可以声明使用。就像接口一样。可以动态绑定,地实现多态,

B

1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

A

mychar这个变量的类型没有变,所以依旧是字符型

A

A: Bean定义的类名的含义应该是实例化的一个类,在JSP中相当于id,class属性对应的是需要编译的类,在后面用到id的实例化类名 需要区分大小写

B: 是声明了一个Bean  不是引用

C: 引用的文件是web-Inf\class\下的class文件

D: 需要放在web-Inf\class\

C

J2EE中容器充当中间件的角色,主要的容器包括:

WEB容器:给处于其中的应用程序组件(jsp,servlet)提供一个环境,使jsp,servlet直接与容器中的环境变量接***互,不必关注其它系统问题。主要由WEB服务器来实现。 例如:tomcat,weblogic,websphere等

EJB容器:Enterprise java bean容器。供给运行在其中的组件EJB各种管理功能,满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理,并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器更多的和数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。

C

 

A

1、java文件中类型为public的类有两种,一种是外部类,一种是内部类;

2、当外部类的类型为public时,文件名需要与其相同;

3、当内部类的类型为public时,而外部类不是public类型的,则文件名可随意,但需要满足命名规范(以字母或下划线开头)。

A

RandomAccessFile 可以通过 seek(long pos) 方法去移动文件指针进行追加更新写入.

OutputStream() 是一个抽象类 不能直接实例化去写入

DataOutputStream() 也无法追加写入

D

D

编译看左边,运行看右边。 父类型引用指向子类型对象,无法调用只在子类型里定义的方法

D

AWT :是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格。 AWT 中的图形函数与 操作系统 所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用 操作系统 所提供的图形库。由于不同 操作系统 的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。

Swing :是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame

Swing是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame

Swing由纯Java写成,可移植性好,外观在不同平台上相同。所以Swing部件称为轻量级组件( Swing是由纯JAVA CODE所写的,因此SWING解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,因此称为轻量级组件!!!)

CD

A byte ,1字节,值域-128至127

B boolean并非包装对象Boolean,不能赋值为null

BD

存在一些特殊条件

AD

ACD

javac -help

用法: javac <options> <source files>

其中, 可能的选项包括:

  -g                         生成所有调试信息

  -g:none                    不生成任何调试信息

  -g:{lines,vars,source}     只生成某些调试信息

  -nowarn                    不生成任何警告

  -verbose                   输出有关编译器正在执行的操作的消息

  -deprecation               输出使用已过时的 API 的源位置

  -classpath <路径>            指定查找用户类文件和注释处理程序的位置

  -cp <路径>                   指定查找用户类文件和注释处理程序的位置

  -sourcepath <路径>           指定查找输入源文件的位置

  -bootclasspath <路径>        覆盖引导类文件的位置

  -extdirs <目录>              覆盖所安装扩展的位置

  -endorseddirs <目录>         覆盖签名的标准路径的位置

  -proc:{none,only}          控制是否执行注释处理和/或编译。

  -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程

  -processorpath <路径>        指定查找注释处理程序的位置

  -parameters                生成元数据以用于方法参数的反射

  -d <目录>                    指定放置生成的类文件的位置

  -s <目录>                    指定放置生成的源文件的位置

  -h <目录>                    指定放置生成的本机标头文件的位置

  -implicit:{none,class}     指定是否为隐式引用文件生成类文件

  -encoding <编码>             指定源文件使用的字符编码

  -source <发行版>              提供与指定发行版的源兼容性

  -target <发行版>              生成特定 VM 版本的类文件

  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用

  -version                   版本信息

  -help                      输出标准选项的提要

  -A关键字[=值]                  传递给注释处理程序的选项

  -X                         输出非标准选项的提要

  -J<标记>                     直接将 <标记> 传递给运行时系统

  -Werror                    出现警告时终止编译

  @<文件名>                     从文件读取选项和文件名

ACD

这几个类都没有类属性,不存在共享资源,为了满足题目的意思,应该是多线程情况下使用同一个对象,以达到使成员成为共享资源的目的;

A:没有成员(没有共享资源),线程安全;

B:假设存在线程1和线程2,count初始值为0,当线程1执行count++中count+1(此时未写回最终计算值),这时线程2执行count++中读取count,发生数据错误,导致线程1线程2的结果都为1,而不是线程1的结果为1,线程2的结果为2,线程不安全;

C:成员私有,对成员的set get方法都加重量级锁,线程安全;

D:volatile有两个作用:可见性(volatile变量的改变能使其他线程立即可见,但它不是线程安全的,参考B)和禁止重排序;这里是可见性的应用,类中方法对volatile修饰的变量只有赋值,线程安全; 欢迎指正。

ABCD

A正确。Map是一个接口,hashtable,hashmap都是它的实现。

B正确。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。

C正确。 HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

D正确。 哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:

      int hash = key.hashCode();
      int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

ABCD

ThreadLocal类用于创建一个线程本地变量

在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLocal,值为就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get方法之前要先set,否则就要重写initialValue()方法。

ThreadLocal的使用场景:

        数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值