100万 0到1万随机乱序数,o(n)下,找中位数
算法题: 最长公共子串 (耗时22分钟)十分钟思考 12分钟写
算法题: 有三个子节点的树的层序遍历,并且实现测试用例编写和测试输出。 这道题半小时写完,既写层序遍历,还需要手写测试用例。
给定一个列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],给定一个k值,从这个列表中选取一个sub_list,且只能从最左或最右选取,选取的上限个数是k。要求找到和最大的sub_list,即max(sum(sub_lists))。
例如k=4时,可以选取[1, 2, 3, 4]、[7, 8, 9, 10]、[1, 2, 9 ,10]、[1, 2, 3, 10]等等,找到其中和最大的sub_list。
最开始给出了一个暴力解法,时间复杂度O(k^2)。然后加了个动态规划,降到了O(k)。
4、然后问数据结构:1000个数据取前50小的,答大根堆,前50个直接入堆,后面的跟堆顶比较,比堆顶小把堆顶pop掉然后数据入堆,比堆顶大直接丢掉。问复杂度,(n+k)logk
5、数组和链表区别:方便查找 /方便插入删除(应该再说一句数组遍历更快就可以扯到cpu缓存了,当时紧张忘记了)。
6、既要查找快也要插曲删除快用啥,可以平衡二叉树问复杂度,答logn。问还有啥,答红黑树,B树,B+树,跳表。
7、跳表讲一下,又是一个得分点到手。
8、做题,链表排序,用归并排序15分钟撸出来了但是递归爆栈,时间到了,面试官说思路没问题,不会特别影响给分,可以下去再调(发现是某个变量名写错了,不给用IDEA真的痛苦)
f 链表这一块:如果有一个单链表,有什么方法能实现O(1)时间复杂度的任意删除吗?(我知道肯定有,但不会啊。。。。)
面到这时候。大概过了30分钟,面试官小姐姐让我选择自己最擅长的方面,再选几个问题问我。我自信的说是算法(然后就是喜闻乐见的翻车了。。。)
a 动态规划算法使用有啥限制条件?
b 给个二叉树中序、后序遍历;求前序遍历(前,中后序;根左右 左根右什么的,傻傻分不清,问完面试官,画了半天图,给了个错误答案)
给你个自我表现的机会,我刚刚问的不一定全,你自己来说。(这一块我字节实习面时候也碰到了,两次都没把握好这个机会,不知道说啥好。)
1.判断链表有环?多种方法
2.数组中只有一个数的出现次数是1,其他数的出现次数都是2次,怎么快速找到这个数–异或操作
一般都会问还有没有其他方法,直到答不上来。
3.B+树VAL的对比
6.跳跃表和二叉树对比
二叉树的非递归中序和后序遍历
括号生成(leetcode 22)
数学题智力题,9000g面粉,有50g和200g面粉,一个天平,怎么样三次内获得2000g面粉
ML/DL 知识(1)将one-hot vector映射为embedding都有哪些方式?
(2)介绍下word2vec,其中用到的 hierachical softmax 和 negative sampling介绍一下。
mysql特性?隔离级别?
四种隔离级别的特点
mysql在哪个级别解决幻读问题的?
索引使用的数据结构
b+树和b树区别?
范围查询 b+树怎么实现的?
redis主从同步了解吗?
讲下redis数据类型
有序集合怎么实现的?
一致性哈希了解吗?
订单号怎么改进?UUID或者雪花算法,我问UUID不会降低查询速度吗,面试官说应该是可以接受的。打算回去改进一下了。
操作系统a 什么是进程?进程间通信方式。
进程是系统进行资源分配和调度的基本单位, 线程是CPU调度的基本单位
什么是线程?什么是进程?
IPC:管道,信号量,共享内存,消息队列
b 进程和线程区别?
c 进程和可执行文件有啥区别?可执行文件有了解过吗?
d 栈区和堆区有啥区别?
e 页面置换算法了解过吗?能展开说说一种吗?这部分我说了下LRU实现
编程基础:
a 看你写了会C语言,能谈谈C语言编译过程吗?
预处理、编译、汇编、链接
C语言的编译过程
b 你接触的语言哪些是面向对象的,哪些不是?
c 面向对象的特点?
d 面向对象的优缺点?
计算机网络:
a Http和Socket有啥不同?
WebSocket和Socket区别
可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。
HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。
WebSocket 协议 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种
b TCP三次握手?可以两次吗?
c http请求头数据?
数据库:
a 了解数据库吗?会哪些。
b 索引是什么?什么情况适合、什么情况不适合用索引。
c 数据库4大特性;什么是原子性?
死锁知道吗?进程之间怎么通信?
线程进程区别
进程状态
上下文切换
进程间通信
三握四挥
为什么要TIME_WAIT
-----------数据库--------------
隔离级别
幻读、不可重复读、脏读
红黑树
Redis的应用场景有哪些?Redis支持的数据结构?
40亿条数据,内存只有10G,如何确定一个数是否存在于这40亿的数字里面?
Spark的作业运行流程是怎么样的?
Spark处理数据倾斜的方法?
Kafka作为消息队列,它可解决什么样的问题?
数据倾斜问题
jvm内存中,堆和栈的区别?
Objects类中的通用方法?其中hashCode方法的返回值是什么?
如何创建一个线程?使用线程设置堆大小?
mysql和redis数据一致性是怎么保证的,mysql中数据量多大,redis中数据保存多少条,redis缓存淘汰策略是什么,lfu和lru的区别,lfu中频率相同的数据是什么淘汰策略。
进程线程协程(问得很深)
线程切换(背的忘记了没答上来)
计网五层的作用和对应的协议
ping原理
三次握手四次挥手
http
拥塞避免
acdi以及MySQL怎么保证
隔离级别
乐观锁悲观锁
hashmap(这个也很深啊,红黑树之后问,如果很大很大呢,求大佬解答)
18.怎么判断父子进程
20.-rwx------分别是啥?分别对应:文件的所有者、文件的组以及所有其他用户。
进程、线程和协程
C++进程怎么创建
设计模式的几大基本原则(单一功能,开放,封闭…)
说一下你理解的几种设计模式