首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HashMap 容量为什么总是 2 的次幂?

为什么要保证 capacity 是2的次幂呢? 1)在get方法实现中,实际上是匹配链表中的 Node[] tab 中的数据。...00001111 & 10000011 = 00000011 这样做有2个好处 &运算速度快,至少比%取模运算块 能保证 索引值 肯定在 capacity 中,不会超出数组长度 (n - 1) & hash,当n2...次幂时,会满足一个公式:(n - 1) & hash = hash % n 2.为什么要通过 (n - 1) & hash 决定桶的索引呢?...,一个1,例如cap=17(00010001),n=cap-1=16(00010000) int n = cap - 1; //n = (00010000 | 00001000) =...尽量避免 bug 手法2、HashMap 为什么线程不安全?3、3种骚操作,教你查看 Java 字节码! 4、疯了!同事又问我为什么不能用 isXXX5、不能用 + 拼接字符串?这次我要吊打面试官!

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

解惑 | 为什么我根据时间戳获得的offset呢?

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --time ,但是我在测试的时候,发现有的时间戳会获取不到offset,是。...根据上面图片,举几个例子: 当 time 2020-09-16 11:59:20 时,获取的 offset 值。...当 time 大于等于 2020-09-16 14:09:24 时,获取的 offset 值 1049942,匹配的是 xxx.log 文件名称的那个 offset 。...当 time 远大于 2020-09-16 14:09:24 时,获取的 offset 值最新的 offset 值。 根据以上实践结果得知,一组时间戳均对应着同一个 offset 。...三、调用 kafka java api 获取时间戳对应的 offset,并封装成工具脚本 很纳闷,为什么官方不提供获取时间戳对应的精准的 offset 呢?

2.5K30

Mybatis查询结果时,为什么返回值NULL或空集合?

目录 背景 JDBC 中的 ResultSet 简介 简单映射 回归最初的问题:查询结果时的返回值 结论 背景 一行数据记录如何映射成一个 Java 对象,这种映射机制是 MyBatis 作为 ORM...看完这篇你就知道查询结果时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣的可以直接跳到最后看结论。...回归最初的问题:查询结果时的返回值 | 返回结果单行数据 可以从 ResultSetHandler的handleResultSets 方法开始分析。...所以不管是集合类型还是普通对象,Mybatis 都会先初始化一个 List 存储结果,然后返回值普通对象且查的时候,selectOne 会判断然后直接返回 NULL 值。...而返回值集合对象且查时,selectList 会把这个存储结果的 List 对象直接返回,此时这个 List 就是个空集合。

4.9K20

小程序里使用async和await变异步同步,解决地狱问题

但是我们的第11行打印却是0.这是为什么呢。 这个错误的原因就是我们使用数据没有写在请求成功里面。...二,使用async和await变异步同步 所谓的同步,就是我们保持代码正常的从上往下执行。但是呢只要有数据请求,就会有异步问题。所以我们这里要想办法变异步同步。...三,地狱 比如我们有这么一个需求: 用户注册的时候,要先查询是否注册过,没有注册过,才可以新注册。而注册成功后,才可以查看商品列表。...这就是地狱。 3-2,地狱代码 单纯的给你讲,你可能体会不到地狱的坏处。那么我用代码实现下我们上面的需求。...后面代码会变得越来越乱,为了避免地狱,我们也可以使用async和await来改造代码。

1.2K00

小程序里使用async和await变异步同步,解决地狱问题

但是我们的第11行打印却是0.这是为什么呢。 这个错误的原因就是我们使用数据没有写在请求成功里面。...二,使用async和await变异步同步 所谓的同步,就是我们保持代码正常的从上往下执行。但是呢只要有数据请求,就会有异步问题。所以我们这里要想办法变异步同步。...三,地狱 比如我们有这么一个需求: 用户注册的时候,要先查询是否注册过,没有注册过,才可以新注册。而注册成功后,才可以查看商品列表。 3-1,问题描述 这里给大家分析下需求 ?...这就是地狱。 3-2,地狱代码 单纯的给你讲,你可能体会不到地狱的坏处。那么我用代码实现下我们上面的需求。...后面代码会变得越来越乱,为了避免地狱,我们也可以使用async和await来改造代码。 四,async结合await解决地狱 首先看下改造后的代码 ?

76441

函数的注册机制为什么会在嵌入式固件开发中应用如此广泛?

硬件驱动程序是一个独立的可重用驱动程序,它不了解上面的层(在本例中用户应用程序)。硬件驱动程序提供 API 函数,允许用户应用程序将函数注册。...然后,此函数由硬件驱动程序作为执行的一部分进行调用。如果不使用回,就会被编码直接调用。这将使硬件驱动程序特定于特定的高级软件级别,并降低其可重用性。...机制的另一个好处是,在程序执行期间可以动态更改被调用的函数。 1、C语言中的 不同的编程语言有不同的实现的方式。...uint8_t Handler_Event(void) { /* code of the function */ } 注册函数——这是函数指针分配地址的操作。...用于寄存器中的每个函数分配一个标识(唯一编号)。函数指针被分配与唯一关联的函数的地址。

1.8K50

iOS网络请求之上传图片:从示例到源码解析 -- 以上传Face++SDK的图片例(HYNetworking,AFNetworking,XMNetworking)

前言 网络框架 本文一开始上传图片以调用HYNetworking的API例,这个网络框架是以AFNetworking基础进行的封装。...需求背景 这里的需求背景是,我们的app采用全球领先的AI方案提供商 -- 旷视科技 的Face++ SDK进行身份证识别:它识别到身份证后会一个图片数据,我们用此图片向Face++公司的服务器请求验证...,该请求通过则block调成功,接着将图片数据保存到手机本地,然后在合适的时机(比如,点击“完成”或者“下一步”按钮)把图片数据上传到自己公司的服务器。...MGIDCardError) { }]; 其中,croppedImageOfIDCard是为了从的...上传回图片 通过上面的保存操作,现在我们的APP到了点击下一步的情形,这时候需要我们向自己的后台(不是Face++的后台)上传图片了。

2.1K20

NodeJs 事件循环-比官方翻译更全面

当队列已为或达到限制时,事件循环将移至下一个阶段,依此类推。...在此示例中,您将看到计划的计时器与执行的之间的总延迟105ms。...如果脚本并没有setImmediate设置,则事件循环将等待poll队列中的,然后立即执行它们。 一旦轮询队列(poll queue),事件循环将检查哪些计时器timer已经到时间。...mainline 执行完开始事件循环,第一阶段是timers,这时候timers队列可能为,也可能有;如果没有那么执行check队列的,下一轮循环在检查并执行timers队列的;如果有就先执行...该API最近进行了更新,以允许将参数传递给process.nextTick,从而可以将回后传递的所有参数都传播的参数,因此您不必嵌套函数。

2.2K60

任务,微任务,队列和时间表

从鼠标单击到事件,与分析HTML一样需要安排任务,在上例中setTimeout。 setTimeout等待给定的延迟,然后为其安排新任务。...此规则来自HTML规范,用于调用回: 如果脚本设置对象堆栈现在为,请执行微任务检查点 — HTML:在步骤3 之后进行清理 …并且微任务检查点涉及遍历微任务队列,除非我们已经在处理微任务队列。...类似地,ECMAScript对此作业说: 仅当没有正在运行的执行上下文并且执行上下文堆栈时才可以启动作业的执行。...在调用每个侦听器之后…… 如果脚本设置对象堆栈现在为,请执行微任务检查点 — HTML:在步骤3 之后进行清理 以前,这意味着微任务在侦听器之间运行,但.click()会导致事件同步分派,...不幸的是,在IE / Edge中事情总是失败的,因为在之后无法处理突变事件。 希望我们很快会在这里开始看到一些互操作性。 你做到了!

2.2K20

【javascript】异步编年史,从“纯”到Promise

存在的问题 存在的问题可概括两类: 信任问题和控制反转 可能你比较少意识到的一点是:我们是无法在主程序中掌控对的控制权的。 例如: ajax( ".....(注:callback无论账号是否都会被调用) // 注: 这是一个相当乌托邦,且省略诸多内容的函数 function login (callback) {         // 当取得的账号变量name...的值时, 立即调用函数,此时callback同步调用)        if(!...name) {            callback();            return   // name时在这里结束函数         }        // 当取得的账号变量name...,(为了处理这个“痛点”你又又又将混入一些复杂的代码逻辑) 5.根本没有被调用 没办法在复杂的异步场景中很好地表达代码逻辑 哎呀这里我就不说废话了: 在异步中如果你总是依赖的话,很容易就写出大家都看不懂

1.1K80

惊艳!可视化的 js:动态图演示 Promises & AsyncAwait 的过程!

为什么这个状态很重要呢? 在上面的例子中,我们只是 Promise构造器传递了一个简单的函数 () => {} 。 然而,这个函数实际上接受两个参数。...尽管我们计时器提供的值是 0,在它被添加到宏任务队列 (setTimeout 是一个宏任务) 之后还是会被首先推入 Web API。...在 Promise 解决 (resolve) 值之后,它的 then 中的函数被添加到微任务队列。 JavaScript 引擎看到调用栈现在是的。...由于调用栈是的,它将会去检查在微任务队列中是否有在排队的任务!是的,有任务在排队,promise 的 then 中的函数正在等待轮到它!...JavaScript 引擎看到调用栈是的,因此,如果任务在排队的话,它将会再次去检查微任务队列。此时,微任务队列完全是的。 到了去检查宏任务队列的时候了:setTimeout 仍然在那里等待!

2K10

JavaScript 函数

这个过程就叫做回,不直接调用而是回头调用的意思。主函数的事先干完,回头再调用传进来的那个函数。刚开始看过很多博客,他们总是将回函数解释的云里雾里,很高深的样子。...//输出结果 我是主函数 我是函数 上面的代码中,我们先定义了主函数和函数,然后再去调用主函数,将回函数传进去。...定义主函数的时候,我们让代码先去执行callback()函数,但输出结果却是后输出函数的内容。这就说明了主函数不用等待函数执行完,可以接着执行自己的代码。...看到这里,聪明的你会不会发现ajax的success 不就是一个函数吗,我每天都在用ajax,为什么不懂什么是呢? 就是为了确保在网络请求耗时的情况下保证我们的代码执行有顺序的执行。...console.log(data); } function loadPage(){ //获取所有用户,假设id或者不传id就是查所有的用户 let param1 = {id: ""}; loadData

2.8K10

JS 事件循环 Node 篇

I/O callbacks 阶段 官方文档对这个阶段的描述除了timers、setImmediate,以及 close 操作之外的大多数的方法都位于这个阶段执行。...poll 阶段 poll 阶段主要有2个功能: 处理 poll 队列的事件 当有已超时的 timer,执行它的函数 even loop 将同步执行 poll 队列里的,直到队列为或执行的达到系统上限...所以咧,在poll阶段event loop会有一个检查机制,检查timer队列是否,如果timer队列非,event loop就开始下一轮事件循环,即重新进入到「timers阶段」。...在事件循环的任何阶段,如果nextTickQueue不为,都会在当前阶段操作结束后优先执行nextTickQueue中的函数,当nextTickQueue中的方法被执行完毕后,事件循环才会继续向下执行...,nextTick定义的也是由事件循环执行的,如果nextTick的方法中出现了阻塞操作,后面的要执行的同样会被阻塞。

2.2K10

使用React Hooks 时要避免的5个错误!

为了防止闭包捕获旧值:确保提供给 Hook 的函数中使用依赖项。 4.不要将状态用于基础结构数据 有一次,我需要在状态更新上调用副作用,在第一个渲染不用调用副作用。...useEffect(callback, deps)总是在挂载组件后调用回函数:所以我想避免这种情况。...修复DelayedIncreaser很简单:只需从useEffect()的中返回清除函数: // ......计时器,频繁请求(如上传文件),sockets 几乎总是需要清理。 6. 总结 从React钩子开始的最好方法是学习如何使用它们。 但你也会遇到这样的情况:你无法理解为什么他们的行为与你预期的不同。...不要忘记指出接受函数作为参数的 Hook 的依赖关系:例如useEffect(callback, deps), useCallback(callback, deps),这可以解决过时闭包问题。

4.2K30

浏览器和Node.js的EventLoop事件循环机制知多少?

Javascript语言本身是单线程的,而浏览器的API充当独立的线程,事件循环促进了这一过程,它会不断检查调用栈的代码是否。...如果,就从事件执行队列中添加到调用栈中;如果不为,则优先执行当前调用栈中的代码。 在EventLoop中,每次循环称为一次tick。...Check阶段:setImmediate() 函数在这里执行。 Close阶段:一些关闭的函数,如:socket.on('close', ...)。...为什么Process.nextTick这样的API会被允许存在于Nodejs中呢? 部分原因是因为设计理念,在nodejs中api总是异步的,即使那些不需要异步的地方。...使用process.nextTick可以保证apiCall()的总是在用户代码被执行后,且在事件循环继续工作前被执行。 那么Vue中nextTick又是做啥的呢?

1.4K20

8个问题看你是否真的懂 JS

事件循环(Event loop)不断地监视任务队列(Task Queue),并按它们排队的顺序一次处理一个。...每当调用堆栈(call stack)时,Event loop获取回并将其放入堆栈(stack )(箭头3)中进行处理。请记住,如果调用堆栈不是的,则事件循环不会将任何推入堆栈。...3、然后将foo函数传递给WebAPIs(箭头1)并从函数返回,调用堆栈再次 4、计时器被设置0,因此foo将被发送到任务队列(箭头2)。...5、由于调用堆栈是的,事件循环将选择foo并将其推入调用堆栈进行处理。 进程再次重复,堆栈不会溢出。 运行示意图如下所示: ?...由浏览器选择其中的一个队列并在该队列中处理。 在底层来看,JavaScript中有宏任务和微任务。setTimeout是宏任务,而Promise是微任务。

1.3K30
领券