当前位置:首页 » 操作系统 » 算法面试

算法面试

发布时间: 2022-01-08 18:36:41

1. java算法面试题

三个for循环,第一个和第二个有啥区别?去掉一个吧
可以用迭代器remove方法,在移除的同时添加。

不知道是你记错了还是题本身就这样,我只想说:
写这代码的是二货么?
1、每个循环的索引都是从0开始,这是什么遍历方式?
2、看这题的目的是想把用户添加到相应的组里,这我就不明白了,新建一个用户的时候就没分配组么?那用户的GroupId哪来的?

3、这是一个操作,难道就不会根据GroupId直接查出用户或者组么?

这哪是优化代码?分明是挖坑。

2. 如何面试算法工程师

墙面是算法工程师话你基本上你要有这个工程师的证,还有就是一些个人资料的简历证明

3. 算法面试

我在《再谈“我是怎么招程序员”》中比较保守地说过,“问难的算法题并没有错,错的很多面试官只是在肤浅甚至错误地理解着面试算法题的目的。”,今天,我想加强一下这个观点——我反对纯算法题面试!(注意,我说的是纯算法题)图片源Wikipedia(点击图片查看词条)我再次引用我以前的一个观点——能解算法题并不意味着这个人就有能力就能在工作中解决问题,你可以想想,小学奥数题可能比这些题更难,但并不意味着那些奥数能手就能解决实际问题。好了,让我们来看一个示例(这个示例是昨天在微博上的一个讨论),这个题是——“找出无序数组中第2大的数”,几乎所有的人都用了O(n)的算法,我相信对于我们这些应试教育出来的人来说,不用排序用O(n)算法是很正常的事,连我都不由自主地认为O(n)算法是这个题的标准答案。我们太习惯于标准答案了,这是我国教育最悲哀的地方。(广义的洗脑就是让你的意识依赖于某个标准答案,然后通过给你标准答案让你不会思考而控制你)功能性需求分析试想,如果我们在实际工作中得到这样一个题 我们会怎么做?我一定会分析这个需求,因为我害怕需求未来会改变,今天你叫我找一个第2大的数,明天你找我找一个第4大的数,后天叫我找一个第100大的数,我不搞死了。需求变化是很正常的事。分析完这个需求后,我会很自然地去写找第K大数的算法——难度一下子就增大了。很多人会以为找第K大的需求是一种“过早扩展”的思路,不是这样的,我相信我们在实际编码中写过太多这样的程序了,你一定不会设计出这样的函数接口 —— Find2ndMaxNum(int* array, int len),就好像你不会设计出 DestroyBaghdad(); 这样的接口,而是设计一个DestoryCity( City& ); 的接口,而把Baghdad当成参数传进去!所以,你应该是声明一个叫FindKthMaxNum(int* array, int len, int kth),把2当成参数传进去。这是最基本的编程方法,用数学的话来说,叫代数!最简单的需求分析方法就是把需求翻译成函数名,然后看看是这个接口不是很二?!(注:不要纠结于FindMaxNum()或FindMinNum(),因为这两个函数名的业务意义很清楚了,不像Find2ndMaxNum()那么二)非功能性需求分析性能之类的东西从来都是非功能性需求,对于算法题,我们太喜欢研究算法题的空间和时间复杂度了。我们希望做到空间和时间双丰收,这是算法学术界的风格。所以,习惯于标准答案的我们已经失去思考的能力,只会机械地思考算法之内的性能,而忽略了算法之外的性能。如果题目是——“从无序数组中找到第K个最大的数”,那么,我们一定会去思考用O(n)的线性算法找出第K个数。事实上,也有线性算法——STL中可以用nth_element求得类似的第n大的数,其利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:1)Sa中元素的个数小于k,则Sb中的第 k-|Sa|个元素即为第k大数;2) Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n)。搞学术的nuts们到了这一步一定会欢呼胜利!但是他们哪里能想得到性能的需求分析也是来源自业务的!我们一说性能,基本上是个人都会问,请求量有多大?如果我们的FindKthMaxNum()的请求量是m次,那么你的这个每次都要O(n)复杂度的算法得到的效果就是O(n*m),这一点,是书呆子式的学院派人永远想不到的。因为应试教育让我们不会从实际思考了。工程式的解法根据上面的需求分析,有软件工程经验的人的解法通常会这样:1)把数组排序,从大到小。2)于是你要第k大的数,就直接访问 array[k]。排序只需要一次,O(n*log(n)),然后,接下来的m次对FindKthMaxNum()的调用全是O(1)的,整体复杂度反而成了线性的。其实,上述的还不是工程式的最好的解法,因为,在业务中,那数组中的数据可能会是会变化的,所以,如果是用数组排序的话,有数据的改动会让我重新排序,这个太耗性能了,如果实际情况中会有很多的插入或删除操作,那么可以考虑使用B+树。工程式的解法有以下特点:1)很方便扩展,因为数据排好序了,你还可以方便地支持各种需求,如从第k1大到k2大的数据(那些学院派写出来的代码在拿到这个需求时又开始挠头苦想了)2)规整的数据会简化整体的算法复杂度,从而整体性能会更好。(公欲善其事,必先利其器)3)代码变得清晰,易懂,易维护!(学院派的和STL一样的近似O(n)复杂度的算法没人敢动)争论你可能会和我有以下争论,如果程序员做这个算法题用排序的方式,他一定不会像你想那么多。是的,你说得对。但是我想说,很多时候,我们直觉地思考,恰恰是正确的路。因为“排序”这个思路符合人类大脑处理问题的方式,而使用学院派的方式是反大脑直觉的。反大脑直觉的,通常意味着晦涩难懂,维护成本上升。就是一道面试题,我就是想测试一下你的算法技能,这也扯太多了。没问题,不过,我们要清楚我们是在招什么人?是一个只会写算法的人,还是一个会做软件的人?这个只有你自己最清楚。这个算法题太容易诱导到学院派的思路了。是的这道“找出第K大的数”,其实可以变换为更为业务一点的题目——“我要和别的商户竞价,我想排在所有竞争对手报价的第K名,请写一个程序,我输入K,和一个商品名,系统告诉我应该订多少价?(商家的所有商品的报价在一数组中)”——业务分析,整体性能,算法,数据结构,增加需求让应聘者重构,这一个问题就全考了。你是不是在说算法不重要,不用学?千万别这样理解我,搞得好像如果面试不面,我就可以不学。算法很重要,算法题能锻炼我们的思维,而且也有很多实际用处。我这篇文章不是让大家不要去学算法,这是完全错误的,我是让大家带着业务问题去使用算法。问你业务问题,一样会问到算法题上来。小结看过这上面的分析,我相信你明白我为什么反对纯算法面试题了。原因就是纯算法的面试题根本不能反应一个程序的综合素质!那么,在面试中,我们应该要考量程序员的那些综合素质呢?我以为有下面这些东西:会不会做需求分析?怎么理解问题的?解决问题的思路是什么?想法如何?会不会对基础的算法和数据结构灵活运用?另外,我们知道,对于软件开发来说,在工程上,难是的下面是这些挑战:软件的维护成本远远大于软件的开发成本。软件的质量变得越来越重要,所以,测试工作也变得越来越重要。软件的需求总是在变的,软件的需求总是一点一点往上加的。程序中大量的代码都是在处理一些错误的或是不正常的流程。所以,对于编程能力上,我们应该主要考量程序员的如下能力:设计是否满足对需求的理解,并可以应对可能出现的需求变化。

4. 算法面试一般都考什么

慕课网有相关的算法面试的课程,会告诉你一些面试常考的常用数据结构与算法

5. java面试算法题一定考吗

主要看你面试的公司是什么类型的公司.外包公司一般考的都是基础题,要是面试的公司有自己的项目,并且做自己的产品.就有可能考算法题.但是大部分公司还是不考算法的.放心吧 .哈哈

6. 为什么很多大公司都面试算法和数据结构

你说的那个数据结构不一定考的。Java面试就那么点东西,各个公司也不一样。有的分笔试和机试。这些公司

7. 如何准备互联网公司面试(算法相关)

书籍: 《算法导论》 这本是大部头,很多人都看不完。我本人也并没有看完,它跟了我这么多年,完全是属于常看常新的牛书。每一次看,都发现会有新的收获。比如,以前并不知道求K位数或者中位数有平均为O(n)复杂度的算法。看到了别的地方的参考资料,才知道,原来《算导》上专门有一小节讲这个内容。我基本上是本科比较集中的看了一遍,研一的时候又集中的看了一遍,才算是粗略的看完。但是其实,很多理论性的,以及图论一部分依然还是没有看完。个人推荐,先从简单的开始,挑选比较熟悉的一些偏重与数据结构方面的知识作为起点。这本书的习题非常重要,要是有时间,能够全部做完,那绝对是能够神功在手了。其实,集中把,第二部分(排序),第三部分(数据结构),第四部分(高级设计,我基本主要看动态规划和贪心),第五部分(高级数据结构,B树和二项堆,并差集),第六部分(图算法,最大流部分较难,自己可以看情况掌握)。这些部分可以先从算法本身开始,伪代码全部看懂。因为算法导论讲的很详细,而且有来龙去脉,基本不会有太大难度。数学证明,推荐大家掌握,但是,突击或者第一次,可以选择性的看看。我自己是重复看,才把证明看掉的。第一次看的时候,基本都跳过了。不过,证明和习题是精髓!希望如果有时间,一定要补回来。 《编程之美》《挑战编程》 这本书绝对是将全中国企业,或者说是一部分懒惰的企业面试题库提升了一个档次的一本神书。网络面我师兄的时候,我师兄直接把有一道题的最优解答出来了。但是,那个面试官显然是不知道最优解,一直在引导我师兄答出,这本书里面的第四个解。呵呵。书很不错。全部看一遍并不难。说个不好听的,可以背下来,而且相信我,基本上绝对有用!比如说,n!后面有多少个0。我相信,你们今年面试或者笔试,一定会碰到这道题。《挑战编程》大家可以自行考虑一下吧,这个完全是针对acm竞赛的,不过,看看题也不错。 《编程珠玑》 业界神书嘛。习题全部做完就是了。其实都是些小东西,但是,基本上一步步考察你的解决问题的能力。个人觉得,最常用的就是bit map做排序或者去重,拓展一下就是bloom filter,我当时都是在这本书里面看到的。 《算法技术手册》 这本书貌似出镜不多。书很薄,代码写的非常好,其实基本上全部都是基础算法和数据结构的实现。但是,它牛逼就在于,代码写的太好了,基本上,看一遍,绝对能背下来。面试基础很重要。基本上每个笔试或者面试,都会考一个100行以内的小程序。比如,给定一棵树,以及其中一个节点x,要求出这棵树的中序遍历序列中,x的后续节点,非递归实现。这种题非常简单,但是,真正写对的,其实并不多。《STL源码剖析》《C标准库》 都不厚。挑着看一遍非常舒服。特别是,看看STL每个数据结构迭代器类型啊,红黑书如何实现啊。C标准库,最常见的,比如strcpy()和memcpy()有什么区别啊。特别是,STL,看过之后,对泛型还是能有一定了解的。《C专家编程》《Effective c++》《深度探索C++对象模型》 第一本比较简单,可以当八卦书看。后两本其实也没啥好说的,其实都是些业界公认的牛书。我再重复一遍也没什么意义。但是,的确,考察基本上也就都是这么几本书上面的东西。基本上后两本主要侧重看c++对象方面的一些指示,特别是多态相关的。 《具体数学》《组合数学》 这两本其实可以看作修身养性的书。我当时是时间比较充裕的时候看完的。纯突击,大家就可以跳过了。但是,看完真的很有用。比如说,你们就可以跟面试官扯约瑟夫环的构造解了(这道题我觉得80%会遇到),直接推推公式,就不用写模拟代码了。《组合数学》也是,很多笔试一般会有些小智力题。不过,其实一般的题目,不看这本书也可以搞定。所以,这两本仅供参考。大家有兴趣的时候,可以翻翻。《Linux内核源码剖析》《Linux环境高级编程》…… 要是有机会,能看看最好。因为很多公司都会考察Linux相关的知识。最少要会点脚本,一些简单的Linux命令,以及正则表达式什么的。要是能聊聊内核源码或者驱动开发什么的东西,面试官肯定更加喜欢了。 知识: c & c++ 首先要知道c和c++的区别。常考的有const的用法,一些生僻关键字比如extern,static的用法。 结构体与类的差别。类里面的字对齐问题,也就是说一个类到底有多大。以及一个空的类有多大。 虚函数以及多态相关的显然是重点。比如析构函数什么时候需要写成虚函数,构造函数是否可以是虚函数。 int a[10]; a 和 &a的区别。 java java我并不熟。但是基本上肯定会考一些虚拟机相关的,以及GC等知识。然后,一般招聘的java程序员都会问到很多多线程编程的东西,以及hadoop!这个绝对是重点,淘宝绝对就是问这个的。 操作系统 这个看工作岗位的实际要求。基本的进程线程区别==肯定是会问到的。要是要求高一些,就会问很多多线程编程的问题。一些竞争死锁等基础知识,一些进程调度的算法,最近的kernel好像用的是CFS调度算法。shell编程,如何读取程序堆栈,写一些core mp的读取程序等等的。 数据结构 基本上所有的排序都要会写。与树有关的操作都要会些非递归版本。图一般考的不多。Flood-Fill算法等等。查找中位数。B树和红黑书最好要掌握,不用会写,能扯扯基本就行。KMP,这个很有可能考!而且的确真的不好懂。要是实在不行,背下来吧。哈哈。 网络 这个其实比较基础了。我个人网络方面的知识并不好。但是各种协议的基础,几次握手啊,一些操作系统的api实现到底是单工还是双工用的是TCP还是UDP。我个人网络纯粹靠拼RP。 数据库 数据库非常重要。基本的SQL肯定是要会的。最常见有一道题,inner join和out join的区别。MySQL是重点,基本上很多企业都是问这个。然后,网络扯多了会跟你扯MySQL引擎 的一些东西。这些我就不太懂了。要是能准备的话,或者说的确是做这方面的,就可以着重多准备下。 大规模数据处理这一块绝对是重点!而且本身不是一个系统的学科分支。但是,基本上几家大公司都会问这方面的。推荐先读读google那几篇论文。Page Rank那一篇,然后Map Rece好像有几篇吧。Big Table什么的。推荐一个网址。这篇貌似是转载的,我以前找到的源地址现在找不到了。处理这一类问题基本上思路都是,哈希,map rece以及bit map等等的。对了,推荐看一下外排序以及相关的败者树。这些都是大规模数据处理的一些典型问题。掌握了这些其实也就够了。这块有点屠龙之技的感觉,特别是对于学生,基本没有谁能有机会把这些代码实现出来。但是,没办法,这些公司就是喜欢考。看完那篇博客的,然后再自行查找一些资料,基本就够了。万变不离其中,而且,这些东西,没办法考那么难的。 推荐一个博客吧,作者收集了100+道面试题,并且全部给出了代码。把这个全部看完,基本上很多面试笔试,都是这些原题。 推荐Top Language里面的今天我们思考系列,好几年前的了。看大牛的思考过程,非常有帮助。希望自己能多想想再看答案。注意,google group好像有时被墙。 我把发芽网的题库版块也扫了一遍。 还有好多一时想不起来了。

8. 数据挖掘算法面试什么

数据挖掘算法主要面试那些常用的数据挖掘的方法

9. 程序员面试时都要考算法吗

看应聘什么职位...我面试的时候一点算法都没有涉及到...
某些特定开发岗位确实需要扎实的算法基础.比如根云存储,大数据什么的.但是像普通的程序开发岗位应该对算法要求不大.

所以,我猜测:如果面试跟算法不怎么相关的职位考官还问算法的问题时,应该是你前面的回答还不足以让考官录用你。考官在给你展示自己的机会.

热点内容
单片机android 发布:2024-09-20 09:07:24 浏览:762
如何提高三星a7安卓版本 发布:2024-09-20 08:42:35 浏览:661
如何更换服务器网站 发布:2024-09-20 08:42:34 浏览:309
子弹算法 发布:2024-09-20 08:41:55 浏览:286
手机版网易我的世界服务器推荐 发布:2024-09-20 08:41:52 浏览:815
安卓x7怎么边打游戏边看视频 发布:2024-09-20 08:41:52 浏览:160
sql数据库安全 发布:2024-09-20 08:31:32 浏览:91
苹果连接id服务器出错是怎么回事 发布:2024-09-20 08:01:07 浏览:505
编程键是什么 发布:2024-09-20 07:52:47 浏览:655
学考密码重置要求的证件是什么 发布:2024-09-20 07:19:46 浏览:479