最新九月字节跳动面经算法真的很重要:算法+Spring+Mysql+线程安全+设计模式+Redis等

这篇文章主要介绍了最新九月字节跳动面经:Spring+Mysql+线程安全+反射+设计模式+Redis等
算法真的很重要~~QAQ
在这里插入图片描述
下方的题只是我整理出来的一部分常问面试题,另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,下方只是部分截图 想要资料的话也可以:点击这里领取!!! 暗号CSDN。在这里插入图片描述

算法题

单独把算法题列出来(附上答案)
1.代码编译过程
•在cpp文件中展开include文件。
•将每个cpp文件编译为一个对应的obj文件。
•连接obj文件成为一个exe文件(或者其它的库文件)

2.100W个整数中求最小的k个数,有哪些方法,优缺点

快速排序: 分区时,根据数P将数组分为两部分,设大于P的数个数为a,小于P的数的个数为b。如果,a>=k,则从这a个数取最大的k个数,若a<k,则从b个数取最大的k-a-1个。

3.两个10G的文件中,求含有相同整数,有哪些方法,优缺点

(1)快排+二分查找 (2)位图法

位图法的应用

1、给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中   首先,将这40亿个数字存储到bitmap中,然后对于给出的数,判断是否在bitmap中即可。

2、使用位图法判断整形数组是否存在重复 遍历数组,一个一个放入bitmap,并且检查其是否在bitmap中出现过,如果没出现放入,否则即为重复的元素。

3、在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数 参 考的一个方法是:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)。其实,这里可以使用两个普 通的Bitmap,即第一个Bitmap存储的是整数是否出现,如果再次出现,则在第二个Bitmap中设置即可。这样的话,就可以使用简单的1- Bitmap了。

4、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

方案1:顺序读文件中,对于每个词x,取,然后按照该值存到5000个小文件(记为)中。这样每个文件大概是200k左右。如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,知道分解得到的小文件的大小都不超过1M。对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100词及相应的频率存入文件,这样又得到了5000个文件。下一步就是把这5000个文件进行归并(类似与归并排序)的过程了。
5、海量日志数据,提取出某日访问百度次数最多的那个IP。

方案1:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。

6、僵尸进程产生的原因及解决方式:

如果子进程先于父进程退出, 同时父进程又没有调用wait/waitpid,则该子进程将成为僵尸进程。通过ps命令,我们可以看到该进程的状态为Z(表示僵死)。

一般,为了防止产生僵尸进程,在fork子进程之后我们都要wait它们;同时,当子进程退出的时候,内核都会给父进程一个SIGCHLD信号,所以我们可以建立一个捕获SIGCHLD信号的信号处理函数,在函数体中调用wait(或waitpid),就可以清理退出的子进程以达到防止僵尸进程的目的。

7、给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。

解:先选中前k个, 从第k+1个元素到最后一个元素为止, 以k/i (i=k+1, k+2,…,N)的概率选中第i个元素,并且随机替换掉一个原先选中的元素,这样遍历一次得到k个元素, 可以保证完全随机选取。这个算法叫做蓄水池抽样

8、有20个数组,每个数组里面有500个数组,降序排列,每个数字是32位的unit,求出这10000个数字中最大的500个。

将 20 个数组合并为 1 个,挨着连接起来即可,不必保证有序。在合并的数组中随机选取一个元素,然后将所有小于此元素的元素放在其左侧,大于到右侧。完成操作后,如果原来被选中的元素刚好处在右数第 500 的位置,那从它开始向右的元素即为所求。否则,如果右端元素数目大于 500,则对右端序列递归使用此方法;否则,如果左端序列数目大于 10000-500,则对左端序列递归使用此方法。复杂度 expected O(n)

9、栈问题:

如何用一个数组实现两个栈:分别用数组的两端作为两个栈的起点,向中间扩展,两个栈中的元素总和不超过n时,两个栈不会相遇。
10、二叉树:

找出二叉树上任意两个结点的最近共同父结点:首先数一下两个结点的深度,然后比较深的那个往上走(深-浅)步,最后同时往上走,肯定会命中最近共同父节点的。如果你把二叉树的所有节点看成N的话,我这个算法只需要lg(N)就可以搞定了

11、在二叉树中找出和为某一值的所有路径:

到达一个节点之后计算当前节点和sum的和,如果为target,输出路径返回,如果大于target,则直接返回,如果小于,则将当前节点的值入栈,更新sum的值,继续遍历,遍历完成之后,也就是从当前节点返回的时候,将其从栈中弹出,更新sum

一面

•自我介绍
•问项目
•项目里的超卖问题你是怎么解决的?
•java多态?
•java运行时数据区?作用?
•反射是什么?
•怎么用反射创建对象?好处?
•http协议有哪些组成,请求方式哪些?
•http与https区别
•get与post区别
•数据库索引
•创建索引的sql语句

三道编程:
•第一个硬币问题,具体怎么描述的忘了
•第二个:链表,两个链表的公共点
•第三个数组:具体怎么描述的忘了

沙漏问题

二面

•自我介绍
•介绍项目,你这几个项目上线没
•项目中的难点,怎么解决?
•Spring?
•什么是MVC模式?
•讲一下SpringMVC流程?
•讲一下mysql?
•有实习过没
•私有IP有哪些?
•三次握手,四次挥手?

编程题:10000万行iP地址,求出倒数第二列的所有IP

还有其他基础的题,实在想不出来了

三面

•自我介绍
•你这个项目有几个表
•这个数据表的这个字段有几种状态
•进程与线程?
•线程安全?
•编程题是连续子数组的最大和
•写单例模式?
•什么时候能用的单例模式?我说的是我项目中的一个例子
•什么是工厂模式?你的项目里有用到吗?
•redis里几个常用命令?
•linux常用命令?

hr面

•她先介绍了自己公司的福利
•然后你为啥选上海?
•家哪里人?
•你父母同意你在外吗?

面试总结

字节跳动的面试官都挺好,面试的内容是我面试那么多家以来最全面的,问题也没有特别刁钻,都比较符合工作场景。

项目很重要,项目是敲门砖也是面试的大头,如果我没有简历上的两个项目的话,估计简历都很难被捞起来,而且进入到3面。很多面试题都是从项目角度去提问的,而且回答的时候也可以结合项目回答,这个很加分。

除了项目所用技术之外,也要关注项目的业务以及架构,最好是能融合在一起讲清楚。

只有多面试,你才能将原有的「我以为」思维变成「原来是这样」。

猜你喜欢

转载自blog.csdn.net/a646705816/article/details/108652934
今日推荐