五月激情久久_黄色国产_狠狠爱网址_av黄色在线观看_日韩a视频_一级少妇女片

欢迎您访问技术面试考什么?算法面试本质是考思考、解决问题及沟通能力!

技术面试考什么?算法面试本质是考思考、解决问题及沟通能力

更新时间:2025-03-29 11:57:02作者:佚名

前言

在谈论这个问题之前,我想谈谈一个问题:“技术采访中正在测试什么?”

到底要进行技术采访

今天,当每个人都知道如何做问题时,面试官还知道每个人都可以做问题并为面试做准备,每个人都可以编写代码。那么,为什么您仍在面试中研究这些问题呢?那么,为什么有些人在编写代码后仍然挂断电话呢?

众所周知,美国主要制造商的访谈中有80%正在采用算法,实际上,在过去的5 - 10年中,该算法仅在Google和Yahoo领导。尽管国内制造商对算法研究并不那么热情,但他们越来越关注。

那么,算法采访真的只是参加算法测试吗?显然不是。从本质上讲,什么测试是思考问题的方式,分析和解决问题的能力以及与同事沟通的能力,以查看您是否可以积极进步来解决问题。

回答想法

例程是:

尽管这是例行程序,但这不是一种有效的工作方式吗?

当您收到问题时,您应该首先要澄清。因为工作就是这种情况。与提问网站的网站不同,面试官通常不会一次给您所有条件,而是要求您考虑并询问他。然后,通过此链接,面试官将知道您如何看待问题,您是否正在全面考虑,与他人进行交流以及与您合作的未来是什么。

就像我们工作时一样,我们需要不断澄清产品经理,尤其是未定义的零件。反复的讨论是,锐化刀不会延迟木材的砍伐。然后,这个过程可能需要1-2周的时间,而您将不愿意开始,否则,如果您努力工作,您将朝着错误的方向发展,这将是一个完全的离开。面试期间也是如此。撰写代码后,面试官说这不是我想问的。当时没有时间,是我们为此付出了代价。

第二个分析思想是当务之急,也是本文的核心。我将以LRU缓存为例,以展示我的思维方式和分析。

第三点是编写代码没有什么可说的,最终需要实现。

第四点是运行测试,许多学生可能会忘记它,因此,如果您可以主动提出运行测试用例,那么用一些示例进行测试非常好。

有人说我做了每个问题,为什么我仍然失败?然后比较这四个点以查看哪个链接是错误的。

持续测试的原因

此外,为什么主要公司喜欢接受这个问题?

首先,它可用于在多个方面和维度上检查候选人:此问题测试基本技能,测试数据结构的理解和使用,并测试您是否可以编写可读代码。在45-60分钟的采访中找出真正的候选人水平并不容易。

其次,由于这个问题很困难或容易,因此它可以像leetcode的问题一样简单,并且很难将系统设计的内容包含在Redis中的近似LRU算法。

received读音是什么_读是什么单词_remove是什么意思?怎么读

因此,跟进可以无限地深入。如果面试官想问您可以回答自己想要的一切,那么强大的雇用自然将无法逃脱。一些学生只会进入第一或第二级。访谈是选择最好的过程。其他学生将比您了解更多,并且他们具有良好的沟通能力。自然,其他人会得到报价。

让我们以这个问题为例。让我们在这里简要介绍我的思维过程,并给您一些建议?;队谙⑶蚍窒砟南敕?。

什么是lru cachelru

LRU =最近使用的

这是一种缓存驱逐策略[1]

LRU算法假定将来将不会使用最少使用的信息,因此,当容量受到限制时,这些不经常使用的信息可以被踢出并释放。

例如,当有热门新闻时,每个人都在搜索此信息。刚刚被一个人搜索的信息的可能性也高于两天前搜索的过时新闻的可能性。因此,我们启动了很长一段时间没有使用的信息,也就是说贝语网校,最近使用的信息被赶出了。

例如:我们的内存能力为5,现在我们有五个1-5的数字。

图片

我们现在想添加一个新号码:6

但是容量已经满,因此需要踢出一个。

然后,根据规则,您将拥有此缓存弹出策略。例如:

LRU的规则是踢出很长一段时间没有使用的内容,其隐含的假设是,它认为最近使用该信息的概率将来会更大。

在我们的示例中,我们踢出了最古老的1,然后变成:

图片

连续迭代...

什么是缓存?

一个简单的理解是:保存一些可重复使用的信息,以便以后可以快速获取信息。

至于它的存在,这是不确定的。最常见的是,它存在于内存中,即内存缓存,但也可以在内存中存在。

remove是什么意思?怎么读_received读音是什么_读是什么单词

还有更多用法场景,例如支持缓存的春季@CACH。上个月,我在工作中使用了此注释。当然,它是由我们公司打包的,这大大减少了对某个服务器的电话数量并解决了性能问题。

例如,在进行数据库查询时,如果您不想每次要求时调用数据库,则我们将一些常用的数据存储在内存中以提高访问性能。

这个设计思想实际上遵循著名的“ 28法”。在阅读和编写数据库时,每个I/O过程都会大量消耗很多,但实际上80%的请求使用了20%的数据,因此将这20%的数据放入内存可以大大提高整体效率。

简而言之,缓存的目的是存储一些可重复使用的信息,以便可以快速获得未来的请求。

LRU缓存

然后我们知道LRU和CACHE,我们将在一起是LRU CACH:

缓存满足后,使用LRU算法清理老人。

详细的思想解释

说了很多话,让我们来解决问题的肉!

每个人都知道,这个经典的问题是使用hashmap + double链接列表,或使用Java中现成的linkedhashmap,但是为什么呢?您如何看待使用这两个数据结构?如果您在面试中没有清楚地解释这一点,并且不要清楚地解释思维过程,那么正确编写代码是没有用的。

与工作中的设计思想类似,没有人会告诉我们要使用哪些数据结构。一般的想法是首先考虑哪些操作,然后基于这些操作,然后查看哪些数据结构是合适的。

分析操作

让我们分析此LRU缓存需要哪些操作:

首先,最基本的操作是能够从中读取信息,否则我该如何快速获取信息?

然后,您必须添加新信息,并且新信息最近使用。

在添加新信息之前,您必须检查是否存在任何空间。如果没有空间,则必须先将旧的空间踢出,并且您需要能够找到旧的旧空间并删除它。

如果添加的新信息已经在缓存中,则意味着密钥已经存在。为了更新值,您只需要调整此信息的优先级,该信息已从上次使用到最新信息。

查找数据结构

第一个操作很明显。我们需要一个可以快速搜索的数据结构。它是哈希图。如果您不了解hashmap的原理和设计规则,则可以在官方帐户中发送消息“ hashmap”并给您热门文章;

received读音是什么_remove是什么意思?怎么读_读是什么单词

但是随后的操作hashmap不再有用。 。 。

来吧,让我们计算基本数据结构:

阵列,LinkedList,堆栈,队列,树,BST,Heap,Hashmap

在执行此类数据结构问题时,您将列出所有数据结构并一一分析它们。有时这不是因为这种数据结构不好,而是因为其他数据结构更好。

如何称呼更好?忘记了我们的测量标准!时间和空间复杂性,快速审查递归文章,并在官方帐户中回复“递归”以获取它。

然后我们的分析如下:

数组,堆栈和队列基本上是由数组实现的(当然,堆栈和队列也可以使用linkedlist实现。)。插入新的,删除旧的,然后调整订单。数组可以完成或o(n),并且不能使用。

同样,时间复杂度为O(logn)。

即使可能的话remove是什么意思?怎么读,堆都是O(logn)。

linkedlist,有点好。按照从旧到新的顺序,可以安排,删除,插入和移动,并且它们都可以是O(1)!但是,删除时,我还需要一个以前的指针来删除它,因此我需要一个double linkedlist。

图片

然后,我们的数据结构最终确定为:

hashmap + double linkedlist

清楚地定义数据结构的内容

选择数据结构后,您需要清楚地定义每个数据结构的存储内容以及这两个数据结构如何相关。这是核心问题。

让我们首先考虑一个场景。在搜索引擎中,如果您输入问题问题,Google将返回答案。

然后,让我们假设存储了这两个数据结构,然后查看这些操作。如果它们俩都很平滑remove是什么意思?怎么读,那就没有问题。如果有任何问题,我们将对其进行调整。

现在,我们的hashmap和linkedlist看起来像这样:

图片

remove是什么意思?怎么读_received读音是什么_读是什么单词

然后让我们回顾一下这四个操作:

操作1,没问题,只需阅读hashmap的答案,o(1);

操作2。添加一组新的问答,并且必须添加两个数据结构。首先,我们需要确定当前缓存中是否存在此Q。然后,我们使用hashmap来判断。

但是,您如何找到linkedlist的节点?这不是我们要寻找一个接一个的遍历的东西,因为它需要o(n)时间,我们要使用o(1)时间进行操作。

这意味着以这种方式无法录制。您还需要在linkedlist中记录每个listNode的位置。这是这个问题的关键。

自然要记录listNode的位置信息,即Hashmap,也就是说,保存每个listNode的参考。

考虑一下,这实际上是正确的。无需在hashmap中记录答案。答案只需要在linkedlist中记录。

之后,当我们更新和移动每个节点时,无需更改其引用,因此不需要更改hashmap,而移动的唯一一件事是先前的下一个指针。

然后再考虑一下,实际上无需在linkedlist中记录问题,无论如何,在哈希姆普中就有它。

这两个数据结构用于彼此协调,无需记录相同的信息。

更新的数据结构如下:

图片

通过这种方式,我们分析使用了哪些数据结构,每个数据结构中存储的内容以及物理含义是什么。

实际上,Java中的LinkedHashmap实施得很好。但是,即使您可以在面试中使用它,它也会逐步派生,而不是一旦看到问题就知道如何使用它,而是乍一看只是记住答案。

同学问我,面试官是否问我是否以前做过这个问题,我应该如何回答?

答:说实话。

诚意在访谈和工作中非常重要,所以说实话。但是,如果面试官不问,则无需这么说。 。 。

实际上,面试官不在乎。您之前已经做过这个问题,因为每个人都做过,基本上已经做到了。提出这个问题是毫无意义的。只要您可以清楚地分析问题并清楚地解释逻辑,如果您做到了怎么办?许多做过问题的人无法清楚地解释它。 。 。

总结

让我们总结这四个操作:

读是什么单词_received读音是什么_remove是什么意思?怎么读

第一个操作是get()API,无话可说。

两个,三个,四个是put()API,这有点麻烦:

图片

绘画时,您在谈话时说话和写作,每个步骤均为从高级到详细信息再到代码,将代码??榛?。

当我画这张照片时,面试官没有要求我编写代码,然后直接进入了下一个问题...

然后,如果面试官要求您写作,那就写。 。 。

class?LRUCache?{
??//?HashMap:?
??//?LinkedList:?

??public?static?class?Node?{
??????int?key;
??????int?val;
??????Node?next;
??????Node?prev;
??????public?Node(int?key,?int?val)?{
??????????this.key?=?key;
??????????this.val?=?val;
??????}
??}

??Map?map?=?new?HashMap<>();
??private?Node?head;
??private?Node?tail;
??private?int?cap;

??public?LRUCache(int?capacity)?{
??????cap?=?capacity;
??}

??public?int?get(int?key)?{
??????Node?node?=?map.get(key);
??????if(node?==?null)?{
??????????return?-1;
??????}?else?{
??????????int?res?=?node.val;
??????????remove(node);
??????????appendHead(node);
??????????return?res;
??????}
??}

??public?void?put(int?key,?int?value)?{
??????//?先?check?有没有这个?key
??????Node?node?=?map.get(key);
??????if(node?!=?null)?{
??????????node.val?=?value;
??????????//?把这个node放在最前面去
??????????remove(node);
??????????appendHead(node);
??????}?else?{
??????????node?=?new?Node(key,?value);
??????????if(map.size()???????????????appendHead(node);
??????????????map.put(key,?node);
??????????}?else?{
??????????????//?踢走老的
??????????????map.remove(tail.key);
??????????????remove(tail);
??????????????appendHead(node);
??????????????map.put(key,?node);
??????????}
??????}
??}

??private?void?appendHead(Node?node)?{
??????if(head?==?null)?{
??????????head?=?tail?=?node;
??????}?else?{
??????????node.next?=?head;
??????????head.prev?=?node;
??????????head?=?node;
??????}
??}

??private?void?remove(Node?node)?{
??????//?这里我写的可能不是最?elegant?的,但是是很?readable?的
??????if(head?==?tail)?{
??????????head?=?tail?=?null;
??????}?else?{
??????????if(head?==?node)?{
??????????????head?=?head.next;
??????????????node.next?=?null;
??????????}?else?if?(tail?==?node)?{
??????????????tail?=?tail.prev;
??????????????tail.next?=?null;
??????????????node.prev?=?null;
??????????}?else?{
??????????????node.prev.next?=?node.next;
??????????????node.next.prev?=?node.prev;
??????????????node.prev?=?null;
??????????????node.next?=?null;
??????????}
??????}
??}


}

/**
*?Your?LRUCache?object?will?be?instantiated?and?called?as?such:
*?LRUCache?obj?=?new?LRUCache(capacity);
*?int?param_1?=?obj.get(key);
*?obj.put(key,value);
*/

总结

然后,让我们回去面试,为什么许多访谈都集中在算法考试上?这样的采访的原因是什么?算法问题面试能否真正衡量一个人的工作能力? (当然,对于某些工作经验,人们还将检查系统设计的内容。)

这是我一直在考虑的一个问题,下班后,我越来越认为这种采访确实有效。

因为我们需要的是解决未知问题的能力,因此可能会忘记知识,但是思考问题的方式总是跟随我们,我们需要不断改进。然后,在坚实的基本技能的前提下,有正确的方法和想法可以指导您,没有什么是不可能的。

参考

[1]

缓存替代政策:


重磅!程序员大白交流群-学术微信交流群已成立


额外赠送福利资源!邱锡鹏深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源

图片

获取方式:扫描下方二维码入群交流

点开群公告即可领取下载链接


注意:请大家添加时修改备注为 [学校/公司 + 姓名 + 方向]

例如 —— 哈工大+张三+对话系统。

号主,微商请自觉绕道。谢谢!

图片


百度的71个炸天的开源项目

微软官方再次上线了Python教程

如何画出优秀的架构图?

一次Linux系统被攻击的分析过程

史上最烂的项目




,西,,,[]!


图片

为您推荐

翻译工具推荐:中译英处理专业名词可用CNKI翻译助手

一些同学在做翻译的时候可能会借助一些工具来提高效率以及对译文进行查证,这里介绍几个比较好用的翻译工具/方法?!爸幸胗ⅰ钡囊桓瞿训阍谟诙砸恍┳ㄒ得实拇恚源耍萍鍪褂靡桓銎教ǎ篊NKI翻译助手。译文读起来比较通顺,意思也表达比较到位。其他名词的翻译也可以参考这一方法。

2025-03-29 16:30

Private与Personal的含义及读音区别详解

personal用作法律用语,意为“属于个人的,可动的”。personal还可用作语法术语,意为“人称的”。在英国,privateschool通常指“私立学?!保宰康摹T诿拦?,苏格兰和英国的属地,privateschool指的是收费的学校。

2025-03-28 15:17

proud是什么意思?怎么读 哈里王子与梅根喜迎新生命,阿奇·哈里森·蒙巴顿-温莎正式

当然,最高兴的还要数新晋奶爸哈里王子。接受采访时,哈里王子的喜悦更是溢于言表,直夸自己的宝宝是“梦寐以求的小东西”。每一位父亲和家长都会说,你的宝宝太棒了,他真是我梦寐以求的小东西。中文意思可理解为:非常高兴,欣喜若狂。那祝你好运,不过我觉得这样做没用——你可能还是得不了高分。

2025-03-28 11:36

precedent什么意思_precedent怎么读_precedent翻译_用法_词组_同反义词

precedent的基本释义为 基本解释 n. 前例;先例adj. 在前的,在先的等等。贝语网校(www.nenqi.cn)为您提供precedent发音,英语单词precedent的音标,precedent中文意思,precedent的过去式,precedent双语例句等相关英语知识。

2025-03-28 09:09

ports什么意思_ports怎么读_ports翻译_用法_词组_同反义词

ports的基本释义为 基本解释 abbr. portraits (复数)肖像;画像;模型;标本n. 港口( port的名词复数 );(事情的)意义;(计算机与其他设备的)接口;(船、飞机等的)左舷等等。贝语网校(www.nenqi.cn)为您提供ports发音,英语单词ports的音标,ports中文意思,ports的过去式,ports双语例句等相关英语知识。

2025-03-28 09:08

plugged什么意思_plugged怎么读_plugged翻译_用法_词组_同反义词

plugged的基本释义为 基本解释 adj. 塞紧的v. 插上插头( plug的过去式和过去分词 );以(塞子)塞住等等。贝语网校(www.nenqi.cn)为您提供plugged发音,英语单词plugged的音标,plugged中文意思,plugged的过去式,plugged双语例句等相关英语知识。

2025-03-28 09:07

加载中...
主站蜘蛛池模板: 亚洲欧美人色综合婷婷久久 | 国产欧亚州美日韩综合区 | 亚洲高清资源 | 被下了药糟蹋h文 | 久久久亚洲国产天美传媒修理工 | 97精品无人区乱码在线观看 | 91视频免费在线观看 | 日韩精品手机在线 | 干少妇18p | 国产日本视频 | 91在线看片 | 国产成人精品一区二 | 国产区中文字幕 | 国产深夜福利在线观看 | 天天爽夜夜爽人人爽一区二区 | 久久天堂网 | 在线观看免费亚洲 | 91免费视频在线 | 亚洲精品视频在线观看视频 | 国产亚洲一区二区精品 | 91精品国产高清久久久久久 | www.guochan| 天堂vs亚洲 | 久久123区| 99热在线免费 | а天堂中文最新一区二区三区 | 国产日韩欧美一区二区久久精品 | www.超碰在线观看 | 免费一区二区三区在线视频 | 在线男人天堂网 | 91免费看视频 | www.色涩涩.com | 一区二区三区免费高清视频 | 懂色av噜噜一区二区三区av88 | 久久久久国产精品久久久久 | 亚洲天堂一 | 91视频免费观看网站 | www在线观看免费视频 | 久久久精品国产一区二区三区 | 亚洲欧美男人天堂 | 91高清在线|