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

「面试」小红书之旅

,秒回,自然就答应啊,并回复也喜欢你拉 第三次握手:收到女生回应说:“那晚上去吃火锅,看电影,理疗” 就这样在一起啦,那么后续是啥样?...行,差不多时间了,写个简单代码吧,实现一个无重复字符最长子串 思路:使用滑动窗口保证每个窗口字母都是唯一 使用 vectorm 来记录一个字母如果后面出现重复,i 应该调整到新位置 所以每次更新时候都会保存...从第一个开始将每一个模块当作一个已经排序好数组,有如双指针,在两个数组头设立指针,进行值比较,然后插入到新数组中,上代码咯 ? 归并排序 倒排索引了解不?...平时我们经常说内存容量,主要指的是物理内存,也叫做主存。只有内核才能直接访问,那么问题来了,进城如果要访问内存怎么?...么么哒 总结 请记下以下几点: 公司招你去是干活了,不会因为你怎么怎么而降低对你要求标准。 工具上面写代码和手撕代码完全不一样。 珍惜每一次面试机会并学会复盘。

87720

Redis系列(十七)独立功能之pubsub

这在分布式系统流行今天,肯定是不能接受,或者说应该场景及其有限。 那么今天我们就学习一下 Redis 在 5.0 之前,对于多播消息队列一个解决方案。PUBSUB....Java 代码使用 在代码中,我们实现了JedisPubSub一个内部子类,重写了几个回调方法,当订阅成功,取消订阅成功,收到信息打印相关信息。...对相关命令也简单做了介绍,那么现在就来介绍一下 Redis 是怎么实现发布订阅模块。 渠道订阅 为了保存当前服务器上渠道被订阅信息,Redis 服务器状态里保存了一个字典。...分布式锁在竞争锁失败,会自动订阅一个渠道,而在锁释放时候,也会发布解锁信息,通知所有的竞争方来重新获取锁。...觉得对于 Redis 所有的消息队列需求,都可以尝试用它来解决,而不是 PUBSUB.

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

【RTOS训练营】作业讲解、队列和环形缓冲区、队列——传输数据、队列——同步任务和晚课提问

我们假设有一个数组,一开始里面没有数据,r = w = 0。 要往里面写数据时候,怎么写?...buf[w] = val; w = (w+1); if (w == 4) w = 0; 刚写位置等于4时候,就把复位为0。 那怎么读数据?...可以看到,创建一个队列时候,会去创建一个结构体Queue_t,还会去分配保存数据空间: 三:队列——传输数据 我们可以通过队列传递数据、同步任务,实现互斥操作。 怎么传递数据?...我们以前写了一个项目: 业务系统在等待按键或者网络数据,我们可以把业务子系统写成一个任务。 读取按键,我们也可以单独写成一个任务, 读取网络数据,也可以单独写成一个任务。...0:没有数据我就返回一个错误,即刻返回。 portMAX_DELAY:没有数据我就永远等待,能够返回一定是已经得到数据。 其他值:没有数据我就等待一会,如果一直没有数据的话,时间到了就返回。

42340

一文让你看懂内存与CPU之间关系

例如,在一个 16GB 内存机器上每 8ns 复制 8 字节,紧缩全部内存大约要花费 16s。 有一个值得注意问题是,当进程被创建或者换入内存应该为分配多大内存。...如果此值是 0 的话,则表示该页表项对应虚拟页面不在内存中,访问该页面会引起一个缺页异常(page fault)。 保护位(Protection) 告诉我们哪一种访问是允许,啥意思?...当一个页面被写入时,硬件会自动设置修改位。修改位在页面重新分配页框很有用。如果一个页面已经被修改过(即它是 脏 ),则必须把写回磁盘。...而是必须搜索整个倒排表来查找某个表项。另外,搜索必须对每一个内存访问操作都执行一次,而不是在发生缺页中断执行。 解决这一问题方式使用 TLB。当发生 TLB 失效,需要用软件搜索整个倒排页表。...下面我们举个例子看一下(这个算法刚开始看时候有点懵逼,后来才看懂,还是很菜)。

10.8K62

内存:不管!

例如,在一个 16GB 内存机器上每 8ns 复制 8 字节,紧缩全部内存大约要花费 16s。 有一个值得注意问题是,当进程被创建或者换入内存应该为分配多大内存。...如果此值是 0 的话,则表示该页表项对应虚拟页面不在内存中,访问该页面会引起一个缺页异常(page fault)。 保护位(Protection) 告诉我们哪一种访问是允许,啥意思?...当一个页面被写入时,硬件会自动设置修改位。修改位在页面重新分配页框很有用。如果一个页面已经被修改过(即它是 脏 ),则必须把写回磁盘。...而是必须搜索整个倒排表来查找某个表项。另外,搜索必须对每一个内存访问操作都执行一次,而不是在发生缺页中断执行。 解决这一问题方式使用 TLB。当发生 TLB 失效,需要用软件搜索整个倒排页表。...下面我们举个例子看一下(这个算法刚开始看时候有点懵逼,后来才看懂,还是很菜) ?

1.1K11

【RTOS训练营】队列读写、休眠和唤醒、常规应用、使用和晚课提问

我们再来回顾一下怎么创建一个队列: 图片 这里,故意把这个程度改为4,来看看会发生什么事。...图片 我们还可以覆盖地写: 1.队列长度是1,也就是里面只会有一个元素 2.写了第1个数据之后,还可以继续写第2个数据、第3个数据 本来,如果队列已经满了,是无法再写入新数据,但是可以用另外一个函数...1.谁先来排队,谁就排在前面 2.谁优先级更高,他就可以插队 图片 列表项,里面有一个xItemValue,会先根据这个词在链表里面找到一个位置,再把插到链表里去。...答: 我们创建队列时候就指定了元素大小,我们去读写队列,都是使用memcpy。 图片 所以,假设数据源有A和B。 A本来只需要写一个字节, B需要写100个字节。...我们假设在中断里面写队列: 1.写入了数据 2.导致一个优先级非常高任务从阻塞变为了就绪 3.会马上调度吗? 4.不会,中断都还没执行完 5.怎么做?

1K30

编码中学习:LLM 如何隐性教导你

但是在练习过程中——涉及编写代码来处理 changelogs,然后以各种方式可视化更改——学到了许多有用东西。 打印预期值和实际值 这是编写测试之一。...不知道可选第二个参数(或者可能已经忘记了),所以我最初使用了第二行代码打印预期值和实际值。可以查一下吗?当然可以,但没有重要到要中断流程。...现在,最习惯 SQL,所以当 ChatGPT 提供基于 pandas.DataFrame 解决方案,它又创建一个学习机会。在几年前使用过 pandas,既不广泛也不容易。...有了那里代码脚本编写了两个文件:一个包含表格 HTML 文件和 HTML 中引用图像文件。 如果可能的话,喜欢最小化组成解决方案移动部分数量。...仍然有错误开端和死胡同!但通过一种非常类似结对编程协作,解决方案很快出现了。 现在,编程更多地涉及找到和应用存在令人困惑繁多库和组件。

9610

如何使用散列表实现一个O(1)时间复杂度LRU缓存算法

2.散冲突 首先散列表是作用于数组上,因为数组支持随机访问,所以能够达到O(1)时间复杂度,而散列表本身就是要达到O(1)时间复杂度,可是如果散冲突了怎么?...当我们往散列表中插入数据,如果某个数据经过散函数散之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找,看是否有空闲位置,直到找到为止。...举个例子,作为一个Java开发人员,时常会买一些技术书籍来看,但是家里书架只能放下10本,那么如果现在已经有了10本,又重新买了一本,应该怎么?...这样子操作,把最近最少使用书给扔掉,然后把新书放上去就行了,但是怎么看最近最少使用我们只要每次看过书都放在最上面,然后最下面的一本就是最近最少看了。...下面写了两个版本,第一个是采用了Java中自带HashTable来作为散,然后自定一个链表来实现,而另一个版本就是自定义一个散列表同时自定义一个链表来实现。

1.2K41

深入AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码

前言 今天咱们继续讲AQS源码,在上节课教大家怎么阅读AQS源码,跑不起来不读、解决问题就好 —目的性、一条线索到底、无关细节略过,读源码时候应该先读骨架,比如拿AQS来说,你需要了解AQS是这么一个数据...假如你要往一个链表上添加尾巴,尤其是好多线程都要往链表上添加尾巴,我们仔细想想看用普通方法怎么做?...等着前置节点叫醒你,所以上来之后是竞争,怎么竞争?如果你是最后节点,你就下别说了,你就老老实实等着,如果你前面已经是头节点了,说明什么?...我们来看下面的小程序。 强引用 首先看到我们一个类叫M,在这个类里写了一个方法叫fifinalize(),我们可以看到这个方法是已经被废弃方法,为什么要重写他?...一般用在容器里 来讲一个弱引用最典型一个应用ThreadLocal,我们来看下面的代码,注意看我们创建一个对象叫tl,这个tl对象引用指向ThreadLocal对象,ThreadLocal对象里又指向了一个

22830

Go语言核心36讲(Go语言进阶技术十六)--学习笔记

这个时候,panic 包含值会被取出,而在取出之后,一般都会被打印出来或者记录到日志里。 既然说到了应对 panic 保护措施,我们再来看下面一个问题。...所以,在panic函数调用之后代码,根本就没有执行机会。 那如果把调用recover函数代码提前?也就是说,先调用recover函数,再调用panic函数会怎么?...正因为如此,我们需要联用defer语句和recover函数调用,才能够恢复一个已经发生 panic。 我们来看一下经过修正代码。...仅当调用结果值不为nil,也就是说只有 panic 确实已发生才会打印一行以“panic:”为前缀内容。 紧接着,调用了panic函数,并传入了一个error类型值。...下面该你出场了,在 demo51.go 文件中编写了一个与本问题有关示例,其中核心代码很简单,只有几行而已。

41401

自动添加标签(1):初次实现

---- 注意 LATEX是一种创建各种技术文档标记系统,基于TEX排版程序。这里 提到只是想说明所要创建程序其他用途。...生成文本块,将其包含所有行合并,并将两端空白(如列表项缩进和换行符)删除,得到一个表示文本块字符串。(如果不喜欢这种找出段落方法,你肯定能够设计出其他方法。...将这些代码存储在文件util.py中,这意味着你稍后可在程序中导入这些生成器。 4.2.添加一些标记 使用这些基本功能,可创建简单标记脚本。为此,可按如下基本步骤进行。...(1)打印一些起始标记。 (2)对于文本块,在段落标签内打印。 (3)打印一些结束标记。 这不太难,但用处也不大。这里假设要将第一个文本块放在一级标题标签(h1)内,而不是段落标签内。...它将文本分成可独立处理文本块,再依次对每个文本块应用一个过滤器(这个过滤器是通过调用re.sub实现)。这种方法看起来不错,可在最终程序中使用。 如果要扩展这个原型,该怎么

1.5K40

(修订)斩获腾讯微信后台开发offer大神近1.5W字面试干货分享

但是有时候就绪事件只能满足一个用户,如果选择广播的话就会通知所有用户,然后最终只有一个用户可以得到满足,其他用户还是被阻塞导致不必要性能浪费 Q:那你如何解决惊群 A:…(写了一段伪代码,大致是加锁...A:emmm…让想一想…(把vector模板声明写了出来,指着vector模板参数Alloc),我们可以重写一个allocator,把共享内存划分给它,用这些共享内存实现一个内存池,让allocator...这么做有什么影响,emmm…让举个例子,假设我们监听一个管道可读,当事件就绪之后,我们只读了部分内容,还有部分内容没有读。...那LT模式中这个事件节点什么时候被删除,假设第一次epoll_wait时候,我们把管道里内容全部读完了,下次epoll_wait遍历到这个节点然后重新获取状态时候,已经不再就绪了,因为管道空了...当有连接到达时候,我们对socket调用accept,返回一个已连接套接字描述符,然后根据用户传输过来文件名去查找文件,读取文件内容并回送给用户(被打断) Q:读取文件时候服务器socket怎么

1.8K40

fork函数简介_fork()&&fork()

当你程序执行到下面的语句:pid=fork(); 操作系统创建一个进程(子进程),并且在进程表中相应为建立一个表项。...下面就介绍fork两次返回,一个函数调用怎么会返回两个值,这里要强调是,它不是返回了两个值,而是返回了两次,一次返回一个值,所以它还是符合函数返回值特性—只能返回一个值。...fork执行完毕后,出现两个进程,   有人说两个进程内容完全一样啊,怎么打印结果不一样啊,那是因为判断条件原因,上面列举只是进程代码和指令,还有变量啊。   ...iude   还有人可能疑惑为什么不是从#include处开始复制代码,这是因为fork是把进程当前情况拷贝一份,执行fork,进程已经执行完了int count=0;fork只拷贝下一个要执行代码到新进程...我们一个链表来表示这个关系:   p2043->p3224->p3225   第二步:假设父进程p3224先执行,当进入下一个循环,i=1,接着执行fork,系统中又新增一个进程p3226,对于此时父进程

1.1K21

【学点数据结构和算法】04-散列表

希望在最美的年华,做最好自己! 前面已经陆陆续续写了几篇介绍数据结构博客,包含数组,链表,栈和队列…本篇博客,我们再来学习一种有趣数据结构——散列表。 ?...也就是说,通过把关键码值映射到表中一个位置来访问记录,以加快查找速度。这个映射函数叫做散函数,存放记录数组叫做散列表。...我们在上面概念介绍,谈到过一个概念,叫做"散函数",其实它就是我们所熟知哈希(Hash)函数。 我们正是通过哈希函数,把Key和数组下标进行转换。 ?...解决哈希冲突方法,主要有链表法和开放寻址法 开放寻址 开放寻址法原理很简单,当一个Key通过哈希函数获得对应数组下标已被占用 我们可以“另谋高就”,寻找下一个空档位置。...每一个 Entry对象通过next指针指向一个Entry节点。当新来Entry映射到与之冲突数组位置,只需要插入到对应链表中即可。 ?

43740

HashMap、LRU、散列表

在第 8 行代码中,再次将键值为 3 数据放入到 LinkedHashMap 时候,会先查找这个键值是否已经有了,然后,再将已经存在 (3,11) 删除,并且将新 (3,26) 放到链表尾部。...所以,这个时候链表数据就是下面这样: ? 当第 9 行代码访问到 key 为 5 数据时候,我们将被访问到数据移动到链表尾部。...当我们按照键值查询元素我们用同样函数,将键值转化数组下标,从对应数组下标的位置取数据。 时间复杂度 插入一个数据,最好情况下,不需要扩容,最好时间复杂度是 O(1)。...散函数 散函数,顾名思义,它是一个函数。我们可以把定义成 hash(key),其中 key 表示元素键值,hash(key) 值表示经过散函数计算得到值。 该如何构造散函数?...散冲突 1.开放寻址法 线性探测 我们往散列表中插入数据,如果某个数据经过散函数散之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找,看是否有空闲位置,直到找到为止。

1K51

日志到底该如何打印

今天,我们来看第一个问题: 日志到底该如何打印? 咋一看,这个问题很简单,其实不然,随手写几个,您看看。...实话说,没有正确,全是错怎么样,是不是踩坑了,是不是给别人埋过这样坑。 那么,怎么打印日志才是正确?...比如,最近就遇到一个同学,他把远程调用用一个try catch包着,并在catch中捕获了异常,打印了日志"远程调用错误xxx",呵呵,有一次请求失败,非要说远程调用失败,对方出错了,对方说收到请求呀...源码中已经明确写了如果最后一个参数是Exception类型,就不会参与字符串格式化,会单独拿出来打印,同时,可以打印出堆栈信息。看源码去吧,在地铁上,就不截图了。 你以为本篇文章就结束了吗?...有没有更优雅日志打印方式认为,最好日志是以解决问题方式打印日志。 怎么理解我们以服务注册为例,当注册中心地址不通时候,我们能不能这样打印

87940

哦耶!美团二面过了!

假设在账户余额表插入一条小林余额为 100 万记录,然后把这两个隐藏也画出来,该记录整个示意图如下: 图片 对于使用 InnoDB 存储引擎数据库表,聚簇索引记录中都包含下面两个隐藏:...undo 日志中,然后这个隐藏是个指针,指向每一个旧版本记录,于是就可以通过找到修改前记录。...这就意味着,事务要么全部执行成功,要么如果部分执行失败,那么已经执行部分也会被撤销,保证数据一致性。 事务隔离性怎么实现?...创建给定了初始容量,会直接用给定大小。底层数据结构为数组+链表基本被淘汰了,要保证线程安全可以用ConcurrentHashMap。...发送方发送数据,需要等待接收方的确认应答,如果没有收到确认应答或者收到错误的确认应答,就进行重传。 超时重传:发送方在发送数据后设置一个超时时间,如果在超时时间内没有收到确认应答,就进行重传。

18030

社招后端21连问(三年工作经验一面)

联合索引,查询条件不是联合索引中一个,索引失效。 在索引列上使用mysql内置函数,索引失效。 对索引运算(如,+、-、*、/),索引失效。 索引字段上使用(!...你可以给面试官描述一下,一个加了索引SQL,是怎么执行查找,可以看下之前这篇文章哈: 阿里一面,给了几条SQL,问需要执行几次树搜索操作?...重启再重新执行AOF文件中命令来恢复数据。主要解决数据持久化实时性问题。 AOF是执行完命令后才记录日志。为什么不先记录日志再执行命令?...与select相比,poll解决了连接数限制问题。但是,select和poll一样,还是需要通过遍历文件描述符来获取已经就绪socket。...相反没有收到大多数“复制成功”响应,那么就返回错误给客户端; 当Follower接收到心跳信息,或者新AppendEntries消息后,如果发现Leader已经提交了某条日志项,而自己还没应用,那么

45721

数据结构-散列表(上)

Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过拼写检查功能?一旦我们在 Word 里输入一个错误英文单词,它就会用标红方式提示“拼写错误”。...散思想 散列表英文叫“Hash Table”,我们平时也叫“哈希表”或者“Hash 表”,你一定也经常听过在前面的文章里,也不止一次提到过,但是你是不是真的理解这种数据结构?...那究竟该如何解决冲突问题我们常用冲突解决方法有两类,开放寻址法(open addressing)和链表法(chaining)。 1....当查找、删除一个元素我们同样通过散函数计算出对应槽,然后遍历链表查找或者删除。那查找或删除操作时间复杂度是多少? 实际上,这两个操作时间复杂度跟链表长度 k 成正比,也就是 O(k)。...借助散列表这种数据结构,我们就可以轻松实现快速判断是否存在拼写错误。 内容小结 今天讲了一些比较基础、比较偏理论散列表知识,包括散列表由来、散函数、散冲突解决方法。

85420

C++后台腾讯WXG实习面经(已拿offer)

写了一段伪代码,大致是加锁、条件判断...) 中断作用 Q:中断作用是什么 A:......(把vector模板声明写了出来,指着vector模板参数Alloc),我们可以重写一个allocator,把共享内存划分给它,用这些共享内存实现一个内存池,让allocator来对进行管理 Q:重写一个...这么做有什么影响,emmm...让举个例子,假设我们监听一个管道可读,当事件就绪之后,我们只读了部分内容,还有部分内容没有读。...那LT模式中这个事件节点什么时候被删除,假设第一次epoll_wait时候,我们把管道里内容全部读完了,下次epoll_wait遍历到这个节点然后重新获取状态时候,已经不再就绪了,因为管道空了...(手写伪代码) Q:不用一行一行写出来 A:...(停下笔)首先创建一个服务器socket,然后bind地址,listen监听,然后把socket加入多路转接监听链表

2.1K100
领券