2020-09-22 12:29
外交学院 运营 Yasu0:Servlet 生命周期定义了 Servlet 从创建到毁灭的整个过程,总共分为四个步骤。
调用 init() 方法初始化
调用 service() 方法来处理客户端的请求
调用 destroy() 方法释放资源,标记自身为可回收
被垃圾回收器回收
0 点赞 评论 收藏
分享
Yasu0:开启事务,开启confirm(推荐),开启RabbitMQ持久化(交换机、队列、消息),关闭RabbitMQ自动ack(改成手动)
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
门头沟吴彦祖:Always
0 点赞 评论 收藏
分享
爱吃喵的柚子君:很认真听讲,从刚开始,一直都很向往旷世,希望能加入
😁
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
2020-09-15 12:10
外交学院 运营 Pino是只猪的名字:巧了,昨天面试官才问了这个问题。
需要分为IO密集型任务和CPU密集型任务讨论。
假设任务是IO密集型的,那么其实CPU利用率不高,每个任务进来,只用了很短的CPU时间就被中断了,大部分时间都在等待IO,所以我们将线程的数量增加,远超过CPU核心的数量,这样的话就能一定程度提高CPU的利用率,并且能做到在同一时间内处理更多的IO密集任务。
如果任务是CPU密集型的,那么其实每个任务对CPU的占用很大,利用率较高,就算我们开了大于CPU核心数量的线程,多余的线程其实也是在等待,没有空余的CPU时间分给它执行,或者会造成很多线程切换,导致浪费了大量的上下文切换时间。所以我们将线程数量设置为CPU核心数,这样就能处于一个比较好的利用率的状态。
纯手打,请尊重劳动成果,不要复制
0 点赞 评论 收藏
分享
2020-09-15 12:00
外交学院 运营 ZuiYue:其实大部分的锁都是使用了类似信号量的东西,就是一个变量,这个变量能被其他东西检测到,修改这个变量就是上锁的过程,检测这个变量的值就是查看是否上锁,在ReentrantLock中也是使用一个变量,不过它是借助了AQS,通过实现不同顺序加入等待队列来实现了公平或者非公平锁。真要拿出来分析能水三篇博客,个人感觉JUC的源码都可看看。
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
2020-09-07 15:50
外交学院 运营 牛客老铁er:我赢的概率是2/3.
首先,我赢的情况有哪些呢?
第一轮:我正
第二轮:我负 对方负 接着我正
第三轮:我负 对方负 我负 对方负 我正
这是一个等比数列,我赢的概率是(1/2)+(1/2)^3+(1/2)^5……(1/2)^(2k+1)
反过来看对方赢的概率
第一轮:我负 对方正
第二轮:我负 对方负 接着我负 对方正
第三轮:我负 对方负 我负 对方负 我负 对方正
这是一个等比数列,对方赢的概率是(1/2)^2+(1/2)^4+(1/2)^6……(1/2)^(2k+2)
不难发现下面对方赢的概率是我赢的概率的二分之一
故我赢的概率是2/3
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: