java中级面试题1

java中级面试题11、threadlocal问题https://blog.csdn.net/tiwerbao/article/details/50827305ThreadLocal源码可以看出:1)      ThreadLocal赋初始值的时候,需要在线程运行中,即run()中,不能作为thread的属性,否则ThreadLocalMap会挂错线程;2)      使用ThreadLocal隔离的值不能是引用,否…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、threadlocal问题

https://blog.csdn.net/tiwerbao/article/details/50827305

ThreadLocal源码可以看出:

1)      ThreadLocal赋初始值的时候,需要在线程运行中,即run()中,不能作为thread的属性,否则ThreadLocalMap会挂错线程

2)      使用ThreadLocal隔离的值不能是引用,否则隔离的只是引用,而引用所指向的对象则隔离失败;

3)      本地数据区ThreadLocalMap是挂在Thread对象上的,所以要注意线程复用(线程池)所带来的污染

2、

https://blog.csdn.net/h12kjgj/article/details/55063956springMVC中,一般Controller、service、DAO层的scope均是singleton;

每个请求都是单独的线程,即使同时访问同一个Controller对象,因为并没有修改Controller对象,相当于针对Controller对象而言,只是读操作,没有写操作,不需要做同步处理。

由于只有一个Controller的instance,当多个线程同时调用它的时候,它里面的instance变量就不是线程安全的了,会发生窜数据的问题。,因此,我们在使用spring mvc 的contrller时,应避免在controller中定义实例变量。

而tomcat可以选择但是不是每次收到请求就开一个新的线程,而是使用线程池,线程池的线程数量通常有限制的,如果所有线程都被阻塞(例如网速慢,或者被人恶意占用连接),那么接下来的请求将会排队等待。或者 使用nio 收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞.

Tomcat运行可以选择BIO或者NIO模型,原理分别对应上面的3和4两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" .../>

从性能上考虑建议使用NIO。

Tomcat线程池每次从队列头部取线程去处理请求,请求完结束后再放到队列尾部,也就是说前后两次请求处理不会用同一个线程。某个线程闲置超过maxIdleTime就释放掉。

真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。

3、

.CountDownLatch用法

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

CountDownLatch类只提供了一个构造器:

1
public
CountDownLatch(
int
count) {  }; 
//参数count为计数值

然后下面这3个方法是CountDownLatch类中最重要的方法:

1
2
3
public
void
await()
throws
InterruptedException { };  
//调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public
boolean
await(
long
timeout, TimeUnit unit)
throws
InterruptedException { }; 
//和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public
void
countDown() { }; 
//将count值减1

CyclicBarrier用法

字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。

CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器:

1
2
3
4
5
public
CyclicBarrier(
int
parties, Runnable barrierAction) {
}
 
public
CyclicBarrier(
int
parties) {
}

参数parties指让多少个线程或者任务等待至barrier状态;参数barrierAction为当这些线程都达到barrier状态时会执行的内容。

CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;

而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;

另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。

4\CopyOnWriteArrayList问到最大容量,一时懵逼,毕竟没人问过,看了下源码应该是int

5\线上服务器排查

https://blog.csdn.net/and1kaney/article/details/51214219


总结,需要认真对待每次面试,做好充分的准备才行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182996.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 错误信息:java.lang.AbstractMethodError

    错误信息:java.lang.AbstractMethodErrorjava.lang.AbstractMethodError:org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;错误信息详细如下:org.springframewo

    2022年5月20日
    35
  • eclipse修改工程文件编码

    eclipse修改工程文件编码eclipse修改工程文件编码

    2022年4月23日
    53
  • 图像标注-自动标注图像

    图像标注-自动标注图像常见的图像标注工具有Yolo_mark,labelImg,以下两篇文章是对这两款工具的说明Yolo_mark使用教程labelImg标注图像深度学习图像标注工具汇总这里需要提供另一款标注工具—百度物体检测模型,不同于以上的标注工具,百度提供的物体检测模型在标注一定数量(100张)后,提供智能标注功能,可以对数据集中的其他图片自动标注,详细介绍确认百度自动标注结果后可以将数据集…

    2022年6月26日
    64
  • Try out the latest C++ compiler toolset without waiting for the next update of Visual Studio

    Updated22/Apr/2016:TheNuGet packageis nowbeinguploadeddaily.Thepayloaddoesn’tch

    2021年12月23日
    38
  • pycharm统一缩进快捷键_pycharm 注释快捷键

    pycharm统一缩进快捷键_pycharm 注释快捷键1.批量注释:选择要注释的文本行,背景变化后,同时按Ctrl+/2.取消批量注释:选择已注释的文本行,背景变化后,同时按Ctrl+/3.批量缩进:选择要缩进的文本行,背景变化后,按下TAB键4.取消批量缩进:选择要缩进的文本行,背景变化后,按下SHIFT+TAB键…

    2022年8月27日
    5
  • Ubuntu安装Nginx_ubuntu gedit命令

    Ubuntu安装Nginx_ubuntu gedit命令目录ubuntu安装nginx 一、apt-get安装nginx 二、下载nginx包安装 ubuntu安装nginx目前支持两种安装方式,一种是apt-get的方式,另一种是根据包安装的方式为方便我统一使用root用户一、apt-get安装nginx#切换至root用户sudosurootapt-getinstallnginx查看nginx是否安装成功nginx-v1启动nginxservicenginxstart..

    2022年9月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号