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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • django验证码登录_双重认证怎么关闭

    django验证码登录_双重认证怎么关闭djoser是什么?作用:Django认证系统的REST实现。djoser库提供了一组DjangoRestFramework视图,用于处理注册、登录、注销、密码重置和帐户激活等基本操作。它适用于

    2022年7月30日
    5
  • 电容论坛(电感电容电压公式)

    玉山YGR智能电容以客为尊智能电容器模块是新一代无功补偿模块化装置,结合绿色智能电网的精神应用于绿色电网。产品以微电子技术为基础,集成了自动测控、无功优化、过零切换、多重保护、网络通信、大屏幕显示等技术,实现了低压无功补偿的全部功能,并改变不同的组合构造不同的补偿方案。它是一种智能化、模块化、标准化、集约化的无功补偿装置。 投切电容器组大约20-30毫秒内就完成一个全部动作,这种…

    2022年4月15日
    37
  • pythonrequests代理ip_python使用requests模块使用ip代理池

    pythonrequests代理ip_python使用requests模块使用ip代理池importjsonimporttelnetlibimportrequestsimportrandom#代理ip列表proxy_url=”https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list”#写入可用ip代理池文件路径ip_pool_file=”verified_proxies.json”#用…

    2022年5月26日
    80
  • prototype.js的系列文章——关于prototype.js

    prototype.js的系列文章——关于prototype.js 很早就知道prototype.js是一个javascript的工具函数库,平时的开发中使用频率也非常的高,但是,由于工作时间问题,一直都没有静下心来研究学习一下,最近又萌发了系统学习prototype.js的念头,刚好手头比较闲,就决定边学习边将学习心得记录下来,以和更多的同仁交流分享。关于prototype.js如果你曾经使用过prototype.js,那么,本系列文章希望能够给你提供

    2022年7月23日
    6
  • Springboot集成RocketMQ

    Springboot集成RocketMQ什么是RocketMQ?官方说明:随着使用越来越多的队列和虚拟主题,ActiveMQIO模块遇到了瓶颈。我们尽力通过节流,断路器或降级来解决此问题,但效果不佳。因此,我们那时开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。看到这里可以很清楚的知道RcoketMQ是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具…

    2022年6月3日
    34
  • 字符串的匹配算法_多字符串匹配

    字符串的匹配算法_多字符串匹配目录需求基础知识逻辑解析源码实现需求先简单描述溪源曾经遇到的需求:需求一:项目结果文件中实验结论可能会存在未知类型、转换错误、空指针、超过索引长度等等。这里是类比需求,用日常开发中常出现的错误类型作为需求,如果要以上结论则判断这个项目检测失败;解决方案一:大家常用的方式可能是if(){continue;}esleif(){continue;}…或者switch-case等;方案二:可能会使用集合contain()方法;方案三:依次匹配字符串中字符(暴力匹配);以上两种方案都能解决;然

    2022年8月21日
    1

发表回复

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

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