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)
上一篇 2022年10月11日 下午10:16
下一篇 2022年10月11日 下午10:16


相关推荐

  • java spel_SPEL表达式注入-入门篇

    java spel_SPEL表达式注入-入门篇SpringExpressionLanguage(简称SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象图。语言语法类似于UnifiedEL,但提供了额外的功能,特别是方法调用和基本的字符串模板功能。同时因为SpEL是以API接口的形式创建的,所以允许将其集成到其他应用程序和框架中。个人理解就是Spring框架中的一种语言表达式,类似于Struts2中的OGNL的东西。一个最基础的…

    2025年10月29日
    5
  • Lasso回归总结

    Lasso回归总结Ridge回归由于直接套用线性回归可能产生过拟合,我们需要加入正则化项,如果加入的是L2正则化项,就是Ridge回归,有时也翻译为岭回归。它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和一个调节线性回归项和正则化项权重的系数α。损失函数表达式如下:J(θ)=1/2(Xθ−Y)T(Xθ−Y)+1/2α||θ||22其中α为常数系数,需要进行调优。||θ||2为L…

    2022年5月30日
    43
  • HashMap底层实现原理_hadoop原理

    HashMap底层实现原理_hadoop原理Note:文章的内容基于JDK1.7进行分析,1.8做的改动文章末尾进行讲解。大家可以看一下:https://www.imooc.com/article/267756一、先来熟悉一下我们常用的HashMap1、概述HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不…

    2025年10月20日
    3
  • hmily源码解读

    hmily源码解读一阶段TRYING入口点orderService.orderPayorderService.orderPay->CglibAopProxy$DynamicAdvisedInterceptor.intercept->methodProxy.invoke->OrderServiceImpl.orderPay业务…

    2022年5月22日
    44
  • 单核苷酸多态性(SNP)_单核苷酸多态性分析

    单核苷酸多态性(SNP)_单核苷酸多态性分析定义主要指基因组水平上由单个核苷酸的变异所引起的DNA序列多态性。在基因组水平上由单个核苷酸的变异所引起的DNA"序列多态性"。即:在不同个体的同一条染色体或同一位点的

    2022年8月4日
    7
  • jdbc测试数据库连接_ping测试网络连通性

    jdbc测试数据库连接_ping测试网络连通性JDBC连接MySQL测试1、下载MySQL驱动jar文件:https://dev.mysql.com/downloads/connector/j/2、在工程里新建一个文件夹lib,将下载后的jar文件拷贝到lib里面,并配置路径。3、加载驱动类:Class.forName(“com.mysql.jdbc.Driver”),本质是加载一个实现了java.jdbc.Driver的类(注意:这段代码需要

    2025年10月9日
    5

发表回复

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

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