错题集day01

Day80_错题集

先定个小目标:每天做20-30道题把。加油

1、局部内部类可以用哪些修饰符修饰?

abstract 和final

局部内部类式放在代码块或者方法中的。不能有访问控制修饰符,也不能用static修饰。

2、指出下来程序运行的结果是

因为String是被final修饰的类,所以本身的内容是不会改变的,相当于基本数据类型的值传递,在changge方法中给str赋值了“test”,相当于重新创建了一个string类型的变量。

字符型char是可变的。所以变成了gbc

最后输出 good and gbc。

3、如下哪些是 java 中有效的关键字()

native 和 this。

这个关键字常见的坑:

true、false、null都不是关键字

goto、const、是保留的关键字

abstract                continue           for            new        
switch                  default            if             package     
synchronized            do                 goto           private     
this                    break              double         implements   
protected               throw              byte           else       
import                  public             throws         case       
enum                    instanceof         return         transient  
catch                   extends            int            short       
try                     char               final          interface    
static                  void               class          finally   
long                    strictfp           volatile       const      
float                   native             super          while
boolean                 assert 

4、运行代码,结果正确的是:输出true

Boolean flag = false;//赋值flag => false
if(flag = true){//这里flag = true 是赋值操作,flag =>true 后 再判断是否为正确, 所以输出true
	System.out.println("true");
	}
else{
	System.out.println("false");
	}

5、transient 变量和下面哪一项有关?

Serializable

和序列化有关,这是一个空接口,起标记作用,具体的序列化由ObjectOutputStream和ObjectInputStream完成。transient修饰的变量不能被序列化,static变量不管加没加transient都不可以被序列化。

6、对于线程局部存储TLS(thread local storage),以下表述正确的是

解决多线程中的对同一变量的访问冲突的一种技术
TLS会为每一个线程维护一个和该线程绑定的变量的副本
Java平台的java.lang.ThreadLocal是TLS技术的一种实现

上面这三个是对的。


这个是错的-- >>每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了

如果ThreadLocal本地变量的类型是不变类(如 String,Integer,Long等)或线程绝对安全的类,那么在多线程下访问同一个ThreadLocal本地变量时是不需要进行同步的,否则就算是相对线程安全的类(如Vector等)还是需要进行同步的。

7、 假设a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是1

boolean isOdd = false;

for(int i=1;i<=2;++i){
	if(i%2==1){
		isOdd = true;
	}
	else {
		isOdd = false;
		a+=i*(isOdd?1:-1);
	}
}

不管怎样线程对a的操作就是+1后-2

1.线程1执行完再线程2执行,1-2+1-2=-2

2.线程1和2同时+1,再-2不同时,1-2-2=-3

3.线程1和2不同时+1,同时-2,1+1-2=0

4.线程1和2既同时+1又同时-2,1-2=-1

没有结果为1的情况

8、java8中,下面哪个类用到了解决哈希冲突的开放定址法

ThreadLocal

ThreadLocal使用开放定址法解决hash冲突,

HashMap使用链地址法解决hash冲突

9、给定includel.isp文件代码片段,如下:
<% pageContext.setAttribute(“User”,”HAHA”);%>
________________________________ // 此处填写代码
给定include2.jsp文件代码片段如下:
<%=pageContext.getAttribute(“User”)%>
要求运行include1.jsp时,浏览器上输出:HAHA

<%@include file=”include2.jsp”%> -->>>静态包含,相当于不include2.jsp页面内容拷贝到此处,因此可以输出User属性值

<jsp:include page=”include2.jsp” flash=”true”> flash,这是浏览器插件名,不是include指令的属性

<jsp:forward page=”include2.jsp”> 请求转到一个新的页面, 题目用的是page域对象:pageContext,pageContent属性作用范围:仅限于当前jsp页面。所以跳转到其他页面的时候,就没办法起作用了

<% response.sendRedirect(“include2.jsp”); %> 转发重定向,转发的时候pageContent内的属性值不能被传递,因此得不到User属性值

跟上面这个一样。

posted @ 2021-08-09 23:14  独眼龙  阅读(135)  评论(0)    收藏  举报