java---牛客网java专项训练知识点集锦
2016-11-14 17:43
204 查看
1.关于原码、反码、补码的问题。
经过强制类型转换以后,变量a,b的值分别为多少?
已知负数的补码,求负数:
补码-1=反码,反码按位取反=该负数绝对值
已知负数,求负数的补码:
(1)、负数原码除了符号位,按位取反(不含符号位),加1。
(2)、负数绝对值的补码(也就是原码),按位取反(含符号位),加1
java int 128转为byte,值:
128为正数,补码为10000000(前面24个0省略),变成byte,只剩下10000000(byte为1个字节),因为开头是1,所以为负数。即1个负数的补码是10000000。反码是01111111,原码是1000000。是128.因为是负数,所以是-128。
2、final修饰的变量是常量,必须进行初始化,可以显示初始化,也可以通过构造进行初始化,如果不初始化编译会报错。
final作为对象成员存在时,必须初始化;但是,如果不初始化,也可以在类的构造函数中初始
因为java允许将数据成员声明为final,却不赋初值。但是,final必须在使用之前初始化。如果不初始化,就会出现编译时错误。
3.stack是继承自vector,所以是线程安全的。
4.字符型类型的数据默认值是空。
5.Object类中的方法有:
6.在jsp文件中,errorPage="error.jsp"和isErrorPage的用法
如果在jsp页面a中声明了errorPage="error.jsp",那么表明a页面如果出现了异常,那么会跳转的错误页面“error.jsp”,并且error.jsp页面中要有isErrorPage=“true”的声明。只有声明了“isErrorPage”的页面才能使用Exception内置对象。
回忆一下jsp的九大内置对象:orrcs appe
7.下列关于Java并发的说法中正确的是(B)
摘自网友的解析:
A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性(线程A修改共享数据后,将工作内存的数据副本更新到主内存,主内存将新的共享数据更新到线程B的工作内存中),不保证原子
8.下面函数将返回?(C)
摘自网友的解析:
记住:无论如何finally语句都要执行就会这个题了
finally语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句不能影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。
9.下列哪个说法是正确的:(D)
摘自网友的解析:
A项:ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全;
B项:
public class HashMap<K,V> extends AbstractMap<K,V> implementsMap<K,V>,Cloneable,
Serializable
C项:Arrays.asList()
将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常.
D项:SimpleDateFormal类原文复制:Date formats are not synchronized. It isrecommended to create separate format instances for each thread. Ifmultiple threads access a format concurrently, it must be synchronized externally.
10.如何放掉一个指定占据的内存空间?(D)
摘自网友的解析:
A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象
C,赋值该对象引用为null,没有被引用的对象会被垃圾回收器当做垃圾进行回收
D,程序员可以调用System.gc()方法运行垃圾回收器,但是回收的是没有被引用的对象,也并不一定回收的就是程序员想要被回收的对对象,所以无法明确强制回收器必须回收哪个对象。
11.注意构造函数不能有返回值类型关键字生命,void也不行。
12.float x 与“零值”比较的if语句为?(C)
来自网友的解析:
folat类型的还有double类型的,这些小数类型在趋近于0的时候直接等于0的可能性很小,一般都是无限趋近于0.因此不能用==来判断。应该用|x-0|<err来判断,这里|x-0|表示绝对值,err表示限定误差
用程序表示就是fabs(x)<0.00001f
13.在java虚拟机加载类时,先加载类的静态代码块,再加载静态函数,因为静态函数中可能会用到静态代码块中的成员。
14.ArrayList list = new ArrayList(20);中的list扩充几次(A)
来自网友的解析:
ArrayList的构造函数总共有三个:
(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。
调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A
15.下面哪项技术可以用在WEB开发中实现会话跟踪实现?(A、B、C、D)
摘自网友的解析:
会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:<input type="hidden">,非常适合不需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
来自另外一位网友的解析:
HTTP是“无状态”协议:客户程序每次读取 Web 页面,都打开到 Web服务器的单独的连接,并且,服务器也不自动维护客户的上下文信息。即使那些支持持续性 HTTP连接的服务器,尽管多个客户请求连续发生且间隔很短时它们会保持
socket打开,但是,它们也没有提供维护上下文信息的内建支持。上下文的缺失引起许多困难。例如,在线商店的客户向他们的购物车中加入商品时,服务器如何知道购物车中己有何种物品呢?类似地,在客户决定结账时,服务器如何能确定之前创建的购物车中哪个属于此客户呢?这些问题虽然看起来十分简单,但是由于HTTP 的不足,解答它们却异常复杂困难。对于这个问题,存在 3 种典型的解决方案:
Cookie(结合session使用)
可以使用 cookie 存储购物会话的 ID;在后续连接中,取出当前的会话 ID,并使用这个 ID 从服务器上的查找表(lookuptable)中提取出会话的相关信息。 以这种方式使用 cookie 是一种绝佳的解决方案,也是在处理会话时最常使用的方式。但是,sevlet中最好有一种高级的 API来处理所有这些任务,以及下面这些冗长乏味的任务:从众多的其他cookie中(毕竟可能会存在许多cookie)提取出存储会话标识符的 cookie;确定空闲会话什么时候过期,并回收它们;将散列表与每个请求关联起来;生成惟一的会话标识符。
URL 重写
采用这种方式时,客户程序在每个URL的尾部添加一些额外数据。这些数据标识当前的会话,服务器将这个标识符与它存储的用户相关数据关联起来。URL重写是比较不错的会话跟踪解决方案,即使浏览器不支持 cookie 或在用户禁用 cookie 的情况下,这种方案也能够工作。URL重写具有 cookie 所具有的同样缺点,也就是说,服务器端程序要做许多简单但是冗长乏味的处理任务。即使有高层的 API可以处理大部分的细节,仍须十分小心每个引用你的站点的 URL ,以及那些返回给用户的 URL。即使通过间接手段,比如服务器重定向中的Location
字段,都要添加额外的信息。这种限制意味着,在你的站点上不能有任何静态 HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用 servlet 或 JSP 动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息也会丢失,因为存储下来的链接含有错误的标识信息。
隐藏的表单域
HTML 表单中可以含有如下的条目:<input type="hidden"name="session" value="a1234">
这个条目的意思是:在提交表单时,要将指定的名称和值自动包括在 GET 或 POST 数据中。这个隐藏域可以用来存储有关会话的信息,但它的主要缺点是:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。
16.PreparedStatement与Statement的区别:
-->创建时的区别:
Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
-->执行的时候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();
由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,
而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比 Statement要高一些
17.给出以下代码,请给出结果.()
来自网友的解析:
特别好的解析,一目了然。
18、在Java7及Java7版本以后中,能做Switch参数类型的是int(byte、short、char)、enum、String;
在Java7版本之前,只有int和enum能够作为switch参数(当然也包括能够自动转为int类型的类型,例如:byte、short、char)。
19、对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
,其最小内存值和Survivor区总大小分别是(D)
20、What results from the following code fragment?(c)
解析:
~10代表对10取反
10的原码:0000 1010
取反:1111 0101
现在问题转化为了求补码为1111 0101的真值。
补码-1 :1111 0100
再取反:0000 1011
得到真值:11
由于补码首位为1,所以真值为-11.
所以~10=-11.
经过强制类型转换以后,变量a,b的值分别为多少?
补码-1=反码,反码按位取反=该负数绝对值
已知负数,求负数的补码:
(1)、负数原码除了符号位,按位取反(不含符号位),加1。
(2)、负数绝对值的补码(也就是原码),按位取反(含符号位),加1
java int 128转为byte,值:
128为正数,补码为10000000(前面24个0省略),变成byte,只剩下10000000(byte为1个字节),因为开头是1,所以为负数。即1个负数的补码是10000000。反码是01111111,原码是1000000。是128.因为是负数,所以是-128。
2、final修饰的变量是常量,必须进行初始化,可以显示初始化,也可以通过构造进行初始化,如果不初始化编译会报错。
final作为对象成员存在时,必须初始化;但是,如果不初始化,也可以在类的构造函数中初始
因为java允许将数据成员声明为final,却不赋初值。但是,final必须在使用之前初始化。如果不初始化,就会出现编译时错误。
3.stack是继承自vector,所以是线程安全的。
4.字符型类型的数据默认值是空。
5.Object类中的方法有:
方法摘要 | |
---|---|
protected Object | clone() 创建并返回此对象的一个副本。 |
boolean | equals(Object obj) 指示其他某个对象是否与此对象“相等”。 |
protected void | finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 |
Class<?> | getClass() 返回此 Object的运行时类。 |
int | hashCode() 返回该对象的哈希码值。 |
void | notify() 唤醒在此对象监视器上等待的单个线程。 |
void | notifyAll() 唤醒在此对象监视器上等待的所有线程。 |
String | toString() 返回该对象的字符串表示。 |
void | wait() 在其他线程调用此对象的 notify()方法或 notifyAll()方法前,导致当前线程等待。 |
void | wait(long timeout) 在其他线程调用此对象的 notify()方法或 notifyAll()方法,或者超过指定的时间量前,导致当前线程等待。 |
void | wait(long timeout, int nanos) 在其他线程调用此对象的 notify()方法或 notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 |
如果在jsp页面a中声明了errorPage="error.jsp",那么表明a页面如果出现了异常,那么会跳转的错误页面“error.jsp”,并且error.jsp页面中要有isErrorPage=“true”的声明。只有声明了“isErrorPage”的页面才能使用Exception内置对象。
回忆一下jsp的九大内置对象:orrcs appe
7.下列关于Java并发的说法中正确的是(B)
A:CopyOnWriteArrayList适用于写多读少的并发场景--------------<应该是写少读多>
B:ReadWriteLock适用于读多写少的并发场景
C:ConcurrentHashMap的写操作不需要加锁,读操作需要加锁----------------<读写都要加锁>
D:只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
摘自网友的解析:
A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性(线程A修改共享数据后,将工作内存的数据副本更新到主内存,主内存将新的共享数据更新到线程B的工作内存中),不保证原子
8.下面函数将返回?(C)
A:1
B:2
C:3
D:编译错误
摘自网友的解析:
记住:无论如何finally语句都要执行就会这个题了
finally语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句不能影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。
9.下列哪个说法是正确的:(D)
A:ConcurrentHashMap使用synchronized关键字保证线程安全
B:HashMap实现了Collection接口
C:Arrays.asList方法返回java.uti.ArrayList对象
D:SimpleDateFormat对象是线程不安全的
摘自网友的解析:
A项:ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全;
B项:
public class HashMap<K,V> extends AbstractMap<K,V> implementsMap<K,V>,Cloneable,
Serializable
C项:Arrays.asList()
将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常.
D项:SimpleDateFormal类原文复制:Date formats are not synchronized. It isrecommended to create separate format instances for each thread. Ifmultiple threads access a format concurrently, it must be synchronized externally.
10.如何放掉一个指定占据的内存空间?(D)
A:调用free()方法
B:代用system.gc()方法
C:赋值给该项对象的引用为null
D:程序员无法明确强制垃圾回收器运行
摘自网友的解析:
A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象
C,赋值该对象引用为null,没有被引用的对象会被垃圾回收器当做垃圾进行回收
D,程序员可以调用System.gc()方法运行垃圾回收器,但是回收的是没有被引用的对象,也并不一定回收的就是程序员想要被回收的对对象,所以无法明确强制回收器必须回收哪个对象。
11.注意构造函数不能有返回值类型关键字生命,void也不行。
12.float x 与“零值”比较的if语句为?(C)
A:if (x == 0)
B:if (x < 0.00001f)
C:if (fabs(x) < 0.00001f)
D:if (x > -0.00001f)
来自网友的解析:
folat类型的还有double类型的,这些小数类型在趋近于0的时候直接等于0的可能性很小,一般都是无限趋近于0.因此不能用==来判断。应该用|x-0|<err来判断,这里|x-0|表示绝对值,err表示限定误差
用程序表示就是fabs(x)<0.00001f
13.在java虚拟机加载类时,先加载类的静态代码块,再加载静态函数,因为静态函数中可能会用到静态代码块中的成员。
14.ArrayList list = new ArrayList(20);中的list扩充几次(A)
A:0
B:1
C:2
D:3
来自网友的解析:
ArrayList的构造函数总共有三个:
(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。
调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A
15.下面哪项技术可以用在WEB开发中实现会话跟踪实现?(A、B、C、D)
A:session
B:Cookie
C:地址重写
D:隐藏域
摘自网友的解析:
会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:<input type="hidden">,非常适合不需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
来自另外一位网友的解析:
HTTP是“无状态”协议:客户程序每次读取 Web 页面,都打开到 Web服务器的单独的连接,并且,服务器也不自动维护客户的上下文信息。即使那些支持持续性 HTTP连接的服务器,尽管多个客户请求连续发生且间隔很短时它们会保持
socket打开,但是,它们也没有提供维护上下文信息的内建支持。上下文的缺失引起许多困难。例如,在线商店的客户向他们的购物车中加入商品时,服务器如何知道购物车中己有何种物品呢?类似地,在客户决定结账时,服务器如何能确定之前创建的购物车中哪个属于此客户呢?这些问题虽然看起来十分简单,但是由于HTTP 的不足,解答它们却异常复杂困难。对于这个问题,存在 3 种典型的解决方案:
Cookie(结合session使用)
可以使用 cookie 存储购物会话的 ID;在后续连接中,取出当前的会话 ID,并使用这个 ID 从服务器上的查找表(lookuptable)中提取出会话的相关信息。 以这种方式使用 cookie 是一种绝佳的解决方案,也是在处理会话时最常使用的方式。但是,sevlet中最好有一种高级的 API来处理所有这些任务,以及下面这些冗长乏味的任务:从众多的其他cookie中(毕竟可能会存在许多cookie)提取出存储会话标识符的 cookie;确定空闲会话什么时候过期,并回收它们;将散列表与每个请求关联起来;生成惟一的会话标识符。
URL 重写
采用这种方式时,客户程序在每个URL的尾部添加一些额外数据。这些数据标识当前的会话,服务器将这个标识符与它存储的用户相关数据关联起来。URL重写是比较不错的会话跟踪解决方案,即使浏览器不支持 cookie 或在用户禁用 cookie 的情况下,这种方案也能够工作。URL重写具有 cookie 所具有的同样缺点,也就是说,服务器端程序要做许多简单但是冗长乏味的处理任务。即使有高层的 API可以处理大部分的细节,仍须十分小心每个引用你的站点的 URL ,以及那些返回给用户的 URL。即使通过间接手段,比如服务器重定向中的Location
字段,都要添加额外的信息。这种限制意味着,在你的站点上不能有任何静态 HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用 servlet 或 JSP 动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息也会丢失,因为存储下来的链接含有错误的标识信息。
隐藏的表单域
HTML 表单中可以含有如下的条目:<input type="hidden"name="session" value="a1234">
这个条目的意思是:在提交表单时,要将指定的名称和值自动包括在 GET 或 POST 数据中。这个隐藏域可以用来存储有关会话的信息,但它的主要缺点是:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。
16.PreparedStatement与Statement的区别:
-->创建时的区别:
Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
-->执行的时候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();
由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,
而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比 Statement要高一些
17.给出以下代码,请给出结果.()
class Two{ Byte x; } class PassO{ public static void main(String[] args){ PassO p=new Passclass Two{ Byte x; } class PassO{ public static void main(String[] args){ PassO p=new PassO(); p.start(); } void start(){ Two t=new Two(); System.out.print(t.x+””); Two t2=fix(t); System.out.print(t.x+” ” +t2.x); } Two fix(Two tt){ tt.x=42; return tt; } }O(); p.start(); } void start(){ Two t=new Two(); System.out.print(t.x+””); Two t2=fix(t); System.out.print(t.x+” ” +t2.x); } Two fix(Two tt){ tt.x=42; return tt; } }
A:null null 42
B:null 42 42
C:0 0 42
D:0 42 42
E:An exception is thrown at runtime
F:Compilation
来自网友的解析:
特别好的解析,一目了然。
18、在Java7及Java7版本以后中,能做Switch参数类型的是int(byte、short、char)、enum、String;
在Java7版本之前,只有int和enum能够作为switch参数(当然也包括能够自动转为int类型的类型,例如:byte、short、char)。
19、对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
,其最小内存值和Survivor区总大小分别是(D)
A:5120m,1024m
B:5120m,2048m
C:10240m,1024m
D:10240m,2048m 解析: -Xmx:最大堆大小,10240M -Xms:初始堆大小即最小内存值,10240M -Xmn:年轻代大小,5120M -XXSurvivorRatio=3 Eden:Survivor=3:1,总共有两个Survivor区,所以Eden:总的Survivor区=3:2 所以,总的Survivor区=5120*2/5=2048M
20、What results from the following code fragment?(c)
A:Compilation error because”~”doesn’t operate on integers
B:-5
C:-6
D:15
解析:
~10代表对10取反
10的原码:0000 1010
取反:1111 0101
现在问题转化为了求补码为1111 0101的真值。
补码-1 :1111 0100
再取反:0000 1011
得到真值:11
由于补码首位为1,所以真值为-11.
所以~10=-11.
相关文章推荐
- 牛客网Java专项训练选择题错题解析
- Java专项面试训练(一)
- 错题集锦(二) -- Java专项
- 牛客网Java刷题知识点之调用线程类的start()方法和run()方法的区别
- 牛客网Java刷题知识点之Java集合类里面最基本的接口有哪些
- 牛客网Java刷题知识点之什么是死锁、死锁产生的4个必要条件、死锁的解除与预防
- JAVA知识点集锦
- 牛客网Java刷题知识点之什么是JSP的3大常用指令、JSP的6大哪些动作、JSP中include指令和include动作有什么区别
- 牛客网Java刷题知识点之进程和线程的区别
- 牛客网Java刷题知识点之Java为什么不能支持多继承,但可以用接口来间接实现多继承
- 牛客网Java刷题知识点之Iterator和ListIterator的区别
- 【转载】JAVA知识点集锦(上)
- Java知识点集锦
- 牛客网-java一般版专项练习
- 牛客网Java刷题知识点之四种不同的方式创建线程
- 错题集锦(二) -- Java专项
- JAVA知识点集锦
- 牛客网刷题知识点总结(五)java容器
- 牛客网Java刷题知识点之多线程同步的实现方法有哪些
- 牛客网Java刷题知识点之什么是JSP、JSP有哪些优点、JSP的9大内置对象、JSP的四大域对象、JSP的四种范围