答:等到数据到打 而不是就绪。
答:
异步模型并不会让程序的业务逻辑执行得更快,
但是它可以非常有效地避免线程等待,
大幅减少 CPU 在线程上下文切换上浪费的时间
线程:垂直扩展,利用多核, 实现异步。缺点:cas 安全
协程:1 交替执行 2. 实现同步,异步io
可以暂停 恢复函数。
答:数据公式 https://houbb.github.io/2020/01/23/data-struct-learn-07-base-dp-fib
https://code-examples.net/zh-CN/q/5812c
大厂面试到底在考些什么?相信绝大多数同学都经历过技术面试,你肯定发现,小厂与大厂的面试题差距很大,其中,大厂特别关注程序性能,为什么呢?
在我看来有这样 3 个原因:
首先,大厂产品的用户基数大,任何微小的性能提升都会被庞大的用户数放大。因此,员工具备性能优先的思维,有利于提升产品竞争力。
其次,大厂经常会重新造轮子,不管原因是什么,造轮子都需要深厚的底层知识,而性能是其中的核心要素。
而且,愿意花时间去掌握底层知识的候选人,学习动力更强,潜力也会更好。
最后,大厂待遇好,成长空间大,是典型的稀缺资源,大家都打破了头往里挤。
在这样优中选优的情况下,有区分度的性能题就是最好的面试题,通过快速筛选不同档次的候选人,可以节约招聘成本。那么,对于候选人来说,到底怎样才能答好性能面试题呢?
首先,背网上流传的大厂面试题,绝对不是个好主意,这是因为大厂的面试题并不是固定的,
往往都是考官自备的面试题,这与每位考官的个人经历有关,所以你押中面试题的概率非常低。
可见,这么一道简单的题目,就可以考察递归编码能力、递推解法、公式解法、矩阵解法、时间复杂度的推算、计算机浮点运算特性等许多知识点。
而且,随着你回答时涉及到更多的知识点,面试官会基于自己的经验进一步延伸提问。所以我不推荐你押题,把基础技能掌握好才是最有效的面试备战法。
如果员工遇到难题时,只会闷头冥想,这样的时间成本太高,既有可能延迟项目进度,
也不利于充分发挥大厂高手如林、资源丰富的优势。
所以,如果你在面试中,表现出善于沟通、乐于求助的特性,都是加分项。
求解斐波那契数列的F(n)
有两种常用算法:递归算法和非递归算法。
试分析两种算法的时间复杂度。
时间的复杂度为O(2^n),即2的n次方
https://wmjtxt.github.io/2018/12/26/three_method_of_fibonacci/
摘要
网络抖动 --网络分区--p2p
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。
//构建http client
CloseableHttpClient httpClient = HttpClients.custom().
setConnectionTimeToLive(3, TimeUnit.MINUTES).
//省略其它非关键代码
setServiceUnavailableRetryStrategy(new DefaultServiceUnavailableRetryStrategy(1, 50)).
//设置了一个自定义的重试规则
setRetryHandler(new CustomizedHttpRequestRetryHandler()).
build();
//自定义的重试规则
@Immutable
public class CustomizedHttpRequestRetryHandler implements HttpRequestRetryHandler {
private final static int RETRY_COUNT = 1;
CustomizedHttpRequestRetryHandler() {}
@Override
public boolean retryRequest(final IOException exception, final int executionCount, final HttpContext context) {
//控制重试次数
if (executionCount > RETRY_COUNT) {
return false;
}
//遇到下面这些异常情况时,进行重试
if (exception instanceof ConnectTimeoutException || exception instanceof NoHttpResponseException || exception instanceof SocketTimeoutException) {
return true;
}
//省略其它非关键代码
return false;
}
}
线上系统频繁Full GC问题排查【map 里面数据不释放】
https://dongzl.github.io/2019/09/20/05-online-system-frequent-full-gc-bug/index.html
map 怎么除非gc问题
https://network.51cto.com/art/202105/662175.htm
用举例子的方式来梳理一遍。总结下的话,就是帮你理清这些问题:
比如 Java 语言中的 BIO、NIO、AIO 分别对应了同步 IO 模型、IO 多路复用模型和异步 IO 模型
异步模型并不会让程序的业务逻辑执行得更快, 但是它可以非常有效地避免线程等待, 大幅减少 CPU 在线程上下文切换上浪费的时间。
思考题
最后留给你一道思考题。
IO 多路复用,它只是一种 IO 模型,
实际上有多种实现。在 Linux 中,有 select、poll、epoll 三种实现方式,
课后请你去查阅一下资料,看看这三种实现方式有什么区别?
https://docs.google.com/presentation/d/1TjYZOqYhAbOjv-a2oWQrCxk6HStoiCI9P4_5Ba3ZriY/edit#slide=id.gdc1225ce97_0_320
https://www.cnblogs.com/freebird92/archive/2011/06/28/2092795.html
Proactor模式给出了如何构造应用程序与系统, 高效的利用操作系统提供的异步机制。
When an application invokes an asynchronous operation, the OS performs the oper- ation on behalf of the application.
当一个应用程序调用一个异步操作时,操作系统来具体执行异步操作。
This allows the application to have multiple operations running simultaneously without requiring the application to have a corresponding number of threads.
这样允许应用程序同时请求多个异步操作,而不需要启动相应个数的线程