三年半Java后端面试经历

转载自  三年半Java后端面试经历

经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征。

鹅厂

面试职位:go后端开发工程师,接受从Java转语言

都知道鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言,之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大

一面基础技术面

电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,偏简单

  1. redis有没有用过,常用的数据结构以及在业务中使用的场景,redis的hash怎么实现的,rehash过程讲一下和JavaHashMap的rehash有什么区别?redis cluster有没有了解过,怎么做到高可用的?redis的持久化机制,为啥不能用redis做专门的持久化数据库存储?
  2. 了不了解tcp/udp,说下两者的定义,tcp为什么要三次握手和四次挥手?tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制,知不知道time_wait状态,这个状态出现在什么地方,有什么用?(参考quic)
  3. 知道udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
  4. http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
  5. 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
  6. 既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
  7. 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
  8. 索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
  9. 有没有了解过协程?说下协程和线程的区别?
  10. 算法题一个,剑指offer第51题,数组中的重复数字?

自己的回答情况,redis这块没啥问题,具体rehash有印象是渐进式的,但是具体原理可能答的有点出入。tcp的time_wait这块答的不是很好,之前没有了解过quic机制的实现,所以问可靠性udp的时候,基本上脑子里就照着tcp的实现在说。https这块没啥说的,之前项目里面有用到类似的东西,研究的比较清楚了。raft算法这个因为刚好在刷6.824(才刷到lab2。。。),答的也凑合,不过paxos和zab算法确实不熟悉,直接说不会。MySQL这块很熟了,包括索引,锁,事务机制以及mvcc等等,没啥说的,都已经补齐了。协程和线程,主要说了go程和Java线程的区别以及go程的调度模型。面试官提示没有提到线程的有内核态的切换,go程只在用户态调度。最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路。

二面项目技术面

  1. 主要针对自己最熟悉的项目,画出项目的架构图,主要的数据表结构,项目中使用到的技术点,项目的总峰值qps,时延,以及有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有?
  2. 如果请求出现问题没有响应,如何定位问题,说下思路?
  3. tcp 粘包问题怎么处理?
  4. 问了下缓存更新的模式,以及会出现的问题和应对思路?
  5. 除了公司项目之外,业务有没有研究过知名项目或做出过贡献?

基本都没有啥问题,除了面试官说项目经验稍弱之外,其余还不错。

三面综合技术面

这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。 举个例子:

其中有个题是go程和线程有什么区别?
答:1 起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。接着问为啥成本比较高?因为Java线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?简单说了下内核态和用户态的定义。接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS这块依旧是痛呀,支支吾吾半天放弃了。

后面所有的提问都是这种模式,结果回答的节奏全无,感觉被套路了。大多度都能回答个一二甚至是一二三,但是再往后或者再深入的OS层面就GG了。

后面问了下项目过程中遇到的最大的挑战,以及时怎么解决的?

后面还问了一个问题定位的问题,服务器CPU 100%怎么定位?可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:先查看监控面板看有无突发流量异常,接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看。最后才提到使用top命令来监控看是哪个进程占用到100%。果然阵脚大乱,张口就来,捂脸。。。 
本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况,这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。

最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对?
这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。后面反思应该先定位业务的特点,这个业务明显是读多写少,然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标qps是什么等等?在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。

3天后收到短信被拒

总结

  1. tcp/udp,http和https还有网络这块(各种网络模型,已经select,poll和epoll)一定要非常熟悉
  2. 一定要有拿的出手的项目经验,而且要能够讲清楚,讲清楚项目中取舍,设计模型和数据表
  3. 分布式要非常熟悉
  4. 常见问题定位一定要有思路
  5. 操作系统,还是操作系统,重要的事情说三遍
  6. 系统设计,思路,思路,思路,一定要思路清晰,一定要总结下系统设计的流程
  7. 一点很重要的心得,平时blog和专栏看的再多,如果没有自己的思考不过是过眼云烟,根本不会成为自己的东西,就像内核态和用户态,平常也看过,但是没细想,突然要自己说,还真说不出来,这就很尴尬了。勿以浮沙筑高台,基础这种东西还是需要时间去慢慢打牢,多去思考和总结。

相关资料补充学习:

  1. 系统设计入门
  2. 系统设计典型问题的思考
  3. 协程的好处有哪些
  4. Golang的goroutine是怎么实现的?
  5. Context-Switch
  6. 从Java视角理解系统结构(一)CPU上下文切换

某东南亚互联网公司

一面技术面

先笔试算法题,LeetCode medium难度,然后综合问了下腾讯一面二面类似的问题+一个最熟悉的项目

二面研发经理综合面试

综合聊了下熟悉的技术,遇到了最难的问题,讲解一下项目的流程和架构

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nssl1164-观察【平衡树,LCA】

正题 题目大意 一棵树,开始全是白点,两个操作 将一个节点翻转询问一颗棋子与所有面朝上为黑色的棋子lca最深的那个的编号 解题思路 必备技能:平衡树(或set库的使用方法),大量卡常技巧,LCA 我…

开封游(一)

今天去开封玩了一下,白天在路程上耽搁太多时间,主要在晚上玩的。终于到显示我米9夜景功能的时候了。 去了包公祠,西司夜市,鼓楼夜市。 下午先去了包公祠 下面是夜景了,特别的炫酷。 首先是西司夜市 进去的时候 这个…

C#中的两把双刃剑:抽象类和接口

问题出现:我们在使用C#的抽象类和接口的时候,往往会遇到以下类似的问题,大致归纳如下:(1)抽象类和接口有什么本质的区别和联系?(2)什么时候选择使用抽象类,然啥时候使用接口最恰当呢?(3)在项目中怎样使用才…

开封游(二)

短暂的永远浪漫,漫长换来不满。人就是这样,第一天是怀着期盼喜悦的心情来的,等到二天,被漫长的行程磨平心境后就再也不想出来旅游了。 总之第二天的心情只能用疲倦来概括。 本来愉悦的心情,而转折点是在吃完海底捞之…

java 高并发面试题

转载自 java 高并发面试题 1、线程与进程 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。…

ssl提高组周六模拟赛【2018.9.23】

前言 我ssl模拟式爆炸了,我已经打算从1楼跳下去了 成绩 因为比赛的时候数据出bug,所以排名有些奇怪,就不放了。 正题 T1:nssl1162−T1:nssl1162-T1:nssl1162−农夫约的假期【中位数,,,贪心】 博客链接:https://blog.csdn.net/Mr_wuyongcon…

.NetCore之下载文件

本篇将和大家分享的丝.NetCore下载文件,常见的下载有两种:A标签直接指向下载文件地址和post或get请求后台输出文件流的方式,本篇也将围绕这两种来分享;如果对您有好的帮助,请多多支持。允许站点不识别content-type下载…

jeecg-boot中如何修改自定义主题颜色

大家好,我是雄雄。 前言 今天第一次上老丈人家,哈哈哈,有点猝不及防,本来没准备去,结果正好在小区门口碰到,人家让我去,我就把后备箱里面的东西拿下来带着去的。 聊了几个小时,也还…

开封一游后续

游玩过开封后还是很累的,等几个小时的火车更是相当的累。今天有缘坐火车的时候身边是一姑娘,前面没怎么聊,后面她讲她也是八点多到的,我就问她是不是阜阳的,和我们一个学校吗?就这样聊了起来,讲…

P1156-垃圾陷阱【dp】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1156 题目大意 有若干个垃圾,在tit_iti​时掉落,可以选择吃掉多活fif_ifi​天,也可以堆hih_ihi​高度,高度到达DDD就可以脱逃,求最短逃脱时…

跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

1谈一谈.NET 的跨平台终于要写到这一篇了。跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标。我在前面的文章已经提到过了,Microsoft Graph 服务针对一些主流的开源平台(主要用来做跨平台应用)都有支持,例如 python,…

两年 JAVA 程序员的面试总结

转载自 两年 JAVA 程序员的面试总结 前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就。因此在面试许多公司,找到了目前最适合自己的公司之后。于是做一个关于面试的总结。希望能够给那…

用指针完成函数参数的调用

#include<stdio.h>addUp(int a,int b,int c){ cab;printf("%d\n",c); return c;}main(){int c;addUp(6,5,c);printf("%d",c); }可以在函数中完成数字的加减但是发现无法再主函数中调用&#xff0c;是个初始值22&#xff0c;所有得想个办法将函数的值…

P1220-关路灯【区间dp】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1220 题目大意 有n盏灯&#xff0c;每个灯的所在位置和1s消耗的能量不同&#xff0c;现在一个人在c号灯下&#xff0c;他行走速度1m/s&#xff0c;他走到的地方灯会熄灭&#xff0c;求最少消耗能量。…

Java 8中Stream API的这些奇技淫巧!你都Get到了吗?

转载自 Java 8中Stream API的这些奇技淫巧&#xff01;你都Get到了吗&#xff1f; Stream简介 Java 8引入了全新的Stream API。这里的Stream和I/O流不同&#xff0c;它更像具有Iterable的集合类&#xff0c;但行为和集合类又有所不同。stream是对集合对象功能的增强&#x…

基于Office 365的随需应变业务应用平台

这是我去年10月底在微软技术大会&#xff08;Microsoft Ignite 2016) 上面的演讲主题&#xff0c;承蒙大家抬爱&#xff0c;也沾了前一场明星讲师的光&#xff0c;我记得会场几乎是满座。观众中既有IT部门的技术人员&#xff0c;也有业务部门的用户&#xff0c;也有少量的开发人…

关于return的用法

return其实就是个返回值&#xff0c;你要是想获得它只需开辟一个空间&#xff0c;赋值即可 让a该函数&#xff1b;即可获得返回值 下面是利用返回值和函数直接打印出两数相乘 #include<stdio.h>add(int p,int q){return p*q;}int main(){int aadd(10,55);printf("%…

jeecg中新建接口后报错404的解决方法

大家好&#xff0c;我是雄雄。 前言 最近项目中&#xff0c;一直用的是jeecg-boot的微服务版本&#xff0c;尤其是第一次用微服务&#xff0c;所以在用的过程中&#xff0c;各种问题层出不穷&#xff0c;我们就在边学习边应用的道路上缓缓前进。 索性现在项目已经做的差不多了…

P2672-推销员【贪心】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP2672 题目大意 每家住户有一个位置lil_ili​&#xff0c;推销会产生的疲劳值aia_iai​&#xff0c;向X家住户推销产品&#xff0c;对于每个X&#xff0c;要求使 ∑i1Xaxi2∗max{lxi}\sum_{i1}^{X}a_{…

一分钟理解Java公平锁与非公平锁

转载自 一分钟理解Java公平锁与非公平锁 和朋友聊天他提到&#xff1a;ReentrantLock 的构造函数可以传递一个 bool 数据&#xff0c;true 时构造的是“公平锁”、false 时构造的是“非公平锁”。我的印象中锁是不区分类型的&#xff0c;所以认为这应该是 Java 发明的概念&…