一面
面试时间1.5h,快16:00时hr催我进去,开始30min时上机一道编程题,如下:
上机编程题:
为了评估某网站的用户转化率,我们需要对用户的访问行为进行分析,并建立用户行为模型。日志文件中已经记录了用户名、访问时间 以及 页面路径。
为了方便分析,日志文件中的 N 记录已经被解析成三个长度相同且长度都为 N 的数组,分别是:用户名 username,访问时间 timestamp 和 页面路径 website。第 i 记录意味着用户名是 username[i] 的用户在 timestamp[i] 的时候访问了路径为 website[i] 的页面。
我们需要找到用户访问网站时的信息 『共性行为路径』,也就是有最多的用户都 至少按某种次序访问过一次 的三个页面路径。需要注意的是,用户 可能不是连续访问 这三个路径的。
『共性行为路径』是一个 长度为 3 的页面路径列表,列表中的路径 不必不同,并且按照访问时间的先后升序排列。
如果有多个满足要求的答案,那么就请返回按字典序排列最小的那个。(页面路径列表 X 按字典序小于 Y 的前提条件是:X[0] < Y[0] 或 X[0] == Y[0] 且 (X[1] < Y[1] 或 X[1] == Y[1] 且 X[2] < Y[2]))
题目保证一个用户会至少访问 3 个路径一致的页面,并且一个用户不会在同一时间访问两个路径不同的页面。
示例:
输入:
username = ["joe","joe","joe","james","james","james","james","mary","mary","mary"],
timestamp = [1,2,3,4,5,6,7,8,9,10],
website = ["home","about","career","home","cart","maps","home","home","about","career"]
输出:
["home","about","career"]
解释:
由示例输入得到的记录如下:
["joe", 1, "home"]
["joe", 2, "about"]
["joe", 3, "career"]
["james", 4, "home"]
["james", 5, "cart"]
["james", 6, "maps"]
["james", 7, "home"]
["mary", 8, "home"]
["mary", 9, "about"]
["mary", 10, "career"]
有 2 用户至少访问过一次 ("home", "about", "career")。
有 1 个用户至少访问过一次 ("home", "cart", "maps")。
有 1 个用户至少访问过一次 ("home", "cart", "home")。
有 1 个用户至少访问过一次 ("home", "maps", "home")。
有 1 个用户至少访问过一次 ("cart", "maps", "home")。
30min后,面试官进来,看了一下我的代码,并将我的思路和面试官讲了一下,面试官提醒到只需长度为3的页面路径列表,所以还需对内部进行拆分统计一下。
然后进入业务环节:
1.简单进行自我介绍一下。
2.unordered_map的实现原理是什么?(数组 + 链表)
3.当哈希表容量很大甚至超限时,你会怎么处理呢?
4.unordered_map和map的区别?
5.c++11新特性,比如你代码里出现的auto以及智能指针这些。
6.AVL树的插入、删除、查询的时间复杂度。
7.Epoll的实现原理。
8.讲述一下内存的结构。
9.多线程下,它们使用了内存中哪些区域?
10.多线程有什么优势呢,可和多进程以及单进程相比。
11.Tcp和Udp各有什么劣势。
12.在游戏中,当我们使用Udp去支持很高的流量场景时,但又不想出现丢包的情况,你会怎么去处理呢?
算法:
1.TopK问题。
2.一个人可向上走2步或3步台阶,走到n阶时的方案数。
3.两个人丢硬币,丢到正面的人获胜,求先手获胜的概率。
反问:面试官在项目中负责哪一模块呢?
回答:主要还是负责后端代码的编码与维护的工作,其实涉及范围还是挺广的,所以要做的事情也很多,不止单一模块。
感受:面试开始的一道题弄得有些压力,读题都读了快5min,好在30min也把也题写完了,在之后面试官也是有意慢慢引导我,有时也会换一个场景让我去理解,所以整个面试过程比较舒服,压力也不会很大。
二面
二面时间不到1h,面试过程全程自闭,面试官一点都不友好,回家路上越想越不对劲,总感觉他想故意刁难我,整个人越想越气。
开局自我介绍没什么好说的,不懂得就直接说不懂,千万不要装懂!
1.如何解决对象的生命周期问题。
2.有两个线程,一个线程中有一个shared_ptr,一个线程中有一个weak_ptr,两个指针同时指向堆中的一个对象,当shared_ptr和对象解绑,对象是否会销毁。
3.如果对象销毁,如何通知含有weak_ptr的另一个线程,此时的另一个线程正在不断执行代码。
4.ordered_map相比unordered_map,有什么特点,从多个角度回答。
5.ordered_map使用的是红黑树,为什么不使用平衡二叉树呢。
6.ordered_map插入一个节点时,需要旋转几次。
7.unordered_map底层使用的数据结构是什么,如何解决哈希冲突呢。
8.内存对齐的作用是什么。
9.内存对齐除了寻址方便,还有什么其它的优势呢。
10.32位机器上,一次最多可以向内存中取多少个字节呢。
场景题:24点卡牌游戏,如果有很多客户端到来时,服务器上除了24点卡牌游戏之外,还有其它的计算消耗,请问如何去提高服务器的并发量并且减少计算资源的消耗呢?
算法题:24点卡牌游戏,给你[1,13]范围内的4个数字,4个数字顺序任意,4个数字之间还可以使用括号,请你判断能否由这4个数字使用加减乘除去构造24这个数字,可以返回true,不能返回false。
算法题时我说这似乎可以不使用括号达到一样的效果,面试官否认了,想了很长时间面试官提醒计算机是如何计算表达式的,我说使用后缀表达式,借着这个思路能再想一想,最后还是没有想出来该如何构造形成24。
感受:面试过程很难受,全程似乎不给我喘息的机会,你看上面问到的问题可能不是很难,但是他会一直追问,追问到你答不出来为止,这让我面试过程十分自闭,不知道这也是不是一种抗压行为的检测。然后算法题也没写出来,简单暴力穷举也直接被面试官否决了。
以上是我的经历分享感受,希望可以帮到准备去面试的小伙伴们,下面整理了一些大厂的面试题和JAVA进阶资料整理,全部都已打包好,均是免费分享的,等待爱学习的你,需要这些资料的朋友可以直接后台私信小编
如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,,咱们下期见。
收藏 等于白嫖,点赞才是真情。
亲爱的小伙伴们,有需要JAVA面试文档资料请点赞+转发,关注我后,私信我333就可以领取免费资料哦