
面试题精选
文章平均质量分 93
主要介绍一些经典的面试题
xindoo
10+年技术博主,博客专家,曾就职于阿里 小米,目前任贝壳资深工程师。拥有运维、搜索广告、后端业务相关工作经验,擅长Java、Lniux、Redis……
展开
-
5种解法的算法面试题 来看看你是青铜还是王者?
先来详细描述下这道题。在一个全为正整数的数组中找到总和为给定值的子数组,给出子数组的起始下标(闭区间),举个例子:在[3 2 1 2 3 4 5]这个数组中,和为10的子数组是[1 2 3 4],所以答案应该是[2,5]。和为15的子数组是[1 2 3 4 5],答案为[2,6]。这是一道非常有意思的题,为什么这么说?最简单的解法只要具备基本的编程知识就能写出,更优的解法需要你有数据结构和算法能力,越高效的解法越巧妙,可能你一下子无法想出所有的解法,但我相信你看完这篇博客一定会感叹算法的神奇。回原创 2021-05-06 22:26:42 · 920 阅读 · 2 评论 -
面试题精选:神奇的斐波那契数列
斐波那契数列,其最开始的几项是0、1、1、2、3、5、8、13、21、34…… ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义。 f0 = 0f1 = 1f(n) = f(n-1) + f(n-2) 斐波那契数列其实有很多有趣的性质,比如你拿斐波那契里每项数为半径绘制1/4圆弧,你就会得到著名的黄金螺旋线。 上图只是绘制到了10多项,如果继续绘制,会变成下面这样。。另外斐波那契数还有一个神奇的性质,f(n-1)/f(n)约等于黄金分割比例,n越大,其越接近黄金原创 2020-11-19 11:16:17 · 1375 阅读 · 2 评论 -
面试题精选:单链表排序也能玩出花来
今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头]。不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭。单链表的排序在数据结构类的面试题中简直是集大成者,什么排序、链表、链表删除、添加…… 都能体现在单链表排序上,也非常考验候选者的编程基本功,思路说起来很简单,但能不能写出来又是另外一回事了。有些人觉得面试面这种题意义不大,谁实际工作中会写过单链表的排序,不都是直接调Collections.sort()吗? 是,没错 是这样,也许对某些人而言,他会这道题和不会这道题对将来的工作产生不了任何原创 2020-10-01 11:16:54 · 4382 阅读 · 2 评论 -
面试题精选:字符串替换
字符串处理在程序猿日常工作工作中非常常见,常见到几乎各种语言中都已经封装好了字符串相关的API,我们只需要直接拿过来用就好。就拿Java为例,jdk中的String()类几乎封装了所有字符串相关的操作,其方法数量有近百个,几乎满足了程序猿所有字符串相关的操作。正是因为这么方便,估计大多数Java程序猿都没自己实现过字符串的replace。这里正式引入一下今天的精选面试题:不依赖第三方库 实现一个字符串替换replace(String str, String target, String replacem原创 2020-09-20 21:25:12 · 2919 阅读 · 2 评论 -
面试题精选:数据伪造
这道题应该算是我原创的的一道题,来源于我遇到的一个具体需求。大致需求是已知一批数和每个数出现的次数,然后写个接口,每次调用都能返回已知数据中的某个数,且返回的概率和原始数据中每个数出现的概率一致,题目描述起来有些绕口,我们来举个实际的例子。以上面的输入为例,要求实现的接口必须以11.96%的概率返回5、18.10%的概率返回91……16.55%的概率返回98,当然我的要求不仅仅是这几个数,而是可能有10^5个数。 先别急着往下看,给你几分钟先思考下。各种语言其实都内置了random函数,可以随机返回i原创 2020-09-13 19:46:33 · 3601 阅读 · 2 评论 -
面试题精选:寻找最大的K个数
给你n个数,让你找出其中最大的K个数。解法1:很多人上来就对其进行排序,选用不同的排序方法有不同的时间复杂度,这里我们假设使用了最快的快排,时间复杂度为O(n*logn)。通过排序我摘出前K大的数。但也许快排不是最优的,我们只找最大的K个数,何必要对所有的数进行排序,我们只需要进行局部排序即可,时间复杂度大概是O(N*K)。但快排和局部排序谁优谁劣是并不是一定的,当原创 2013-06-19 22:18:03 · 2152 阅读 · 0 评论 -
面试题精选:两个线程按顺序交替输出1-100
陆陆续续,各个公司的校招季都开始了,我也成为了我司的校招面试官,最近也面了不少同学了,面试过程中也发现了很多问题,即有面试者的、也有面试官的、更有自己的问题,这里先挖个坑,后续写个博客详细聊聊,感兴趣的同学可以关注下。另外,我也有个专栏《面试题精选》,里面收录我之前写的一些面试题博客,长期更新、永久免费,近期我会多写一些面试题相关的博客,希望能帮助到在找工作的各位。今天分享一道Java多线程的面试题,更多面试,我在几年前面试的时候被问到过,当时我完全不知道怎么写,毕竟那个时候我还是运维。现在我面试别人的时原创 2020-09-06 13:56:55 · 11178 阅读 · 15 评论 -
面试题精选:循环队列
近期在面试找工作的小伙伴们很多啊,我周围就有好几个认识的朋友在找工作,于是我突发奇想在CSDN开了一个面试题精选的专栏,主要会关注一些算法题、设计题,次要会补充一些java面试相关的题(比较本博主是java出身)。其实在此之前已经写过一些相关的文章了,已经整理到专栏里的,后续会持续更新,希望对大家有所帮助,有兴趣的旁友可以关注下。今天分享的面试题是循环队列,我对这道题记忆深刻,因为我在14年参加来校招面试的时候,二面面试官就问了这道题,当时我没有完全答上来(不过面试官居然给我过了),后来我当面试官的时候也原创 2020-05-10 17:06:57 · 1426 阅读 · 0 评论 -
Java volatile 关键词
文章目录变量可见性问题Java volatile可见性保证volatile 完全可见性保证指令重排序挑战Java volatile和有序性(Happens-Before)保证volatile还不够什么时候volatile就足够了?volatile的性能考量原文地址Java中的volatile关键词被用来将变量标记为“存储在内存中”。准确地的讲每次volatile变量的读取和写入都是直接操作内存,...翻译 2020-02-23 19:41:58 · 1015 阅读 · 1 评论 -
面试题精选:Rand10()实现Rand7()
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...原创 2018-06-26 22:54:26 · 2542 阅读 · 0 评论 -
Java HashMap源码浅析
之前虽然很频繁使用java的hashmap,但一直都是纯用,至于里面怎么实现的,一直都是糊里糊涂的。今年4月份跳槽找工作,大概看了一下HashMap的源码,在面试过程中也被多位面试官问到HashMap的相关问题。本来几个月前就想着写一篇相关源码解析的博客(主要是加深自己的理解),一直拖到现在,接下来就跟我一起看下HashMap的实现(基于jdk8)。 HashMap实现了Map...原创 2018-09-11 23:07:15 · 1948 阅读 · 0 评论 -
Java弱引用(WeakReferences)
前一段时间当我面试有些来应聘高级java开发工程师岗位的候选人时,在我问的众多问题中,有个问题是“你能告诉我弱引用是啥吗”,我不期望得到像论文中的细节一样的答案。我很可能从有个20多年的老工程师口中得到“嗯……是不是和gc有关”这样的答案,所有哪些至少有5年以上经验的工程师只有两个人知道弱引用的存在,只有其中一个知道引用的相关知识。我甚至尝试给他们解释下看是否有人会有“哦,原来是这样”的反应,然而...翻译 2019-02-21 21:03:44 · 3142 阅读 · 2 评论 -
ThreadLocal Java多线程下的影分身之术
如果写过多线程的代码,你肯定考虑过线程安全问题,更进一步你可能还考虑在在线程安全的前提下性能的问题。大多数情况下大家用来解决线程安全问题都会使用同步,比如用synchron或者concurrent包提供的各种锁,当然这些都能解决问题。但有多线程做同步一定会涉及到资源争抢和等待的问题。java中各种同步方法都是提供一种准入机制,JVM会调用系统同步原语来保证临界区任意时刻只能有一个线程进入,那必然其...原创 2019-03-24 15:56:54 · 1740 阅读 · 3 评论 -
PriorityQueue 源码分析
学过数据结构的人应该对Queue 队列很熟悉了,队列是一种先进先出(FIFO)的数据结构,所以它出队列的优先级就是进入队列的次序。但我们有时候需要其它的优先级,很多高级语言都会提供带优先级的队列,在Java中就是PriorityQueue了,今天我们来看下PriorityQueue的使用和实现。使用PriorityQueue的使用很简单,如下。 public static void m...原创 2019-04-06 11:51:48 · 2311 阅读 · 0 评论 -
LinkedHashMap源码解析
相信即便是Java初学者都应该用过Java中的HashMap和TreeMap,但貌似大多数人都没怎么用过LinkedHashMap,对其知之甚少。因为基本上大多数情况下TreeMap和HashMap都能满足需求,只有在需要map中K-V保持一定顺序时才会用到LinkedHashMap。所以保序是LinkedHashMap较HashMap和TreeMap最大的特点,至于保什么序后面会详细讲解。 ...原创 2019-04-13 15:43:47 · 1407 阅读 · 0 评论 -
Java中的String、StringBuffer和StringBuilder
作为作为一个已经入了门的java程序猿,肯定对Java中的String、StringBuffer和StringBuilder都略有耳闻了,尤其是String 肯定是经常用的。但肯定你有一点很好奇,为什么java中有三个关于字符串的类?一个不够吗!先回答这个问题,黑格尔曾经说过——存在必合理,单纯一个String确实是不够的,所以要引入StringBuffer。再后来引入StringBuilder是...原创 2019-05-11 14:26:29 · 1538 阅读 · 0 评论 -
ReentrantLock源码解析
谈到多线程,就不避开锁(Lock),jdk中已经为我们提供了好几种锁的实现,已经足以满足我们大部分的需求了,今天我们就来看下最常用的ReentrantLock的实现。其实最开始是想写一篇关于StampedLock的源码分析的,但发现写StampedLock前避不开ReentrantReadWriteLock,写ReentrantReadWriteLock又避不开ReentrantLock,他们仨...原创 2019-12-20 19:19:37 · 3088 阅读 · 0 评论 -
ReentrantReadWriteLock源码解析
上回说到ReentrantLock,今天来谈谈读写锁(ReentrantLock)和其具体实现ReentrantReadWriteLock。看这篇文章前,强烈建议你回到先读懂ReentrantLock,因为ReentrantReadWriteLock其实是在ReentrantLock的基础上实现的,可以参考我之前的博客ReentrantLock源码解析既然有了锁,为什么还需要读写锁?我们来想象下...原创 2020-02-03 20:54:50 · 1725 阅读 · 0 评论 -
面试题精选:求根号2简单?高级算法你肯定不会
前两天逛github看到一道很简单的面试题——如何不用库函数快速求出2\sqrt22的值,精确到小数点后10位! 第一反应这不很简单嘛,大学数据结构课讲二分查找的时候老师还用这个做过示例。但转念一想,能作为大厂的面试题,背后绝对没有那么简单,于是我google了下,结果找到了更巧妙的数学方法,甚至发现了一件奇闻趣事…… 一道简简单单的面试题,不仅能考察到候选人的编程能力,还能间接考察到候选人的数...原创 2020-04-12 20:30:23 · 4567 阅读 · 3 评论