java面试换背景颜色_三年经验Java程序员记一次失败的面试分享:鹅厂三面让我体无完肤!...

9a8d971f2ed2683a0bf71ade0dcd2472.png

欢迎关注专栏:里面定期分享Java架构技术知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。

程序员圈内那点事​zhuanlan.zhihu.com
af7ff781ab164aaae21584a9e11d0980.png

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

鹅厂

a4bd143aaf0e89c752b9ae7cc442cdf3.png

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

都知道鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言.

之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大

一面:基础技术面

电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,偏简单。大概整理回忆了一下:

  • redis有没有用过,常用的数据结构以及在业务中使用的场景。
  • redis的hash怎么实现的?
  • rehash过程讲一下和JavaHashMap的rehash有什么区别?
  • redis cluster有没有了解过,怎么做到高可用的?
  • 说说redis的持久化机制,为啥不能用redis做专门的持久化数据库存储?
  • 了不了解tcp/udp,说下两者的定义,tcp为什么要三次握手和四次挥手?
  • tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制
  • 知不知道time_wait状态,这个状态出现在什么地方,有什么用?
  • udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
  • http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
  • 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
  • 既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?
  • 有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
  • 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
  • 索引的常见实现方式有哪些,有哪些区别?
  • MySQL的存储引擎有哪些,有哪些区别?
  • InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
  • 有没有了解过协程?说下协程和线程的区别?
  • 算法题一个,剑指offer第51题,数组中的重复数字?
大概说下我自己的回答情况,redis这块没啥问题,具体rehash有印象是渐进式的,但是具体原理可能答的有点出入。
tcp的 time_wait 这块答的不是很好,之前没有了解过quic机制的实现,所以问可靠性udp的时候,基本上脑子里就照着tcp的实现在说。
https这块没啥说的,之前项目里面有用到类似的东西,研究的比较清楚了。
raft算法这个因为刚好在刷,答的也凑合,不过paxos和zab算法确实不熟悉,直接说不会。
MySQL这块很熟了,包括索引,锁,事务机制以及mvcc等等,没啥说的,都已经补齐了。
协程和线程,主要说了go程和Java线程的区别以及go程的调度模型。面试官提示没有提到线程的有内核态的切换,go程只在用户态调度。
最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路。

总得来说,答的还行,一面就这么过了

二面:项目技术面

二面从基础技术考察转移到了项目,主要问了我下面一些问题:

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

这一面答的也比较顺利,因为都是围绕项目,自己很熟悉,基本都没有啥问题,除了面试官说项目经验稍弱之外,其余还不错。

三面:综合技术面

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

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

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

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

还问了一个问题定位的问题,服务器CPU 100%怎么定位?

可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:

  • 先查看监控面板看有无突发流量异常
  • 接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看
  • 最后才提到使用top命令来监控看是哪个进程占用到100%。

果然阵脚大乱,张口就来,捂脸。。。
本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况,这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。

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

面试结果:3天后收到短信,被拒

总结:

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

赠送面试&学习福利资源

最近在网上发现一个不错的 PDF 资源《Java 核心面试知识.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!

需要的可以电子关注我私信【资料】即可免费获取!!!

目录以及部分截图:

15f49132fb12978c71918bffa9ca25b3.png

248603aa7b003a85c920048501fd8240.png

64134e9b61aa91e8605444e76ebe824a.png

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

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

相关文章

git 获取最新代码_github从远程仓库获取

前面我们说明了如何将本地的代码push到远程的仓库中,现在我们将学习从远程仓库上的获取代码到本地。1,建立一个新的文件夹,以从远端获取完整的git项目命令1:git clone https://github.com/huangguojie880/git-demo.git2&#xff0…

golang 远程批量执行shell_S2061远程代码执行漏洞复现及批量检测脚本(CVE202017530)...

声明由于传播、利用此文所提供的信息或工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,博鸿科技安全服务中心以及文章作者不为此承担任何责任。博鸿科技安全服务中心拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保…

准备学python用什么电脑_001-小白学python-初入python世界

计算机组成原理硬件 主机 cpu中央处理器 (运算器与控制器) 内存(只读,随机)外设 输入设备(键盘,鼠标,录影(音)机) 输出设备(屏幕&…

html 添加窗口小部件,如何:为自定义窗口小部件定义主题(样式)项

波斯汪是的,有一种方法:假设您有一个小部件的属性声明(在中attrs.xml): 声明用于样式参考的属性(在中attrs.xml): 为小部件声明一组默认属性值(在中styles.xml):声明自定义主题(在中themes.xml):将此…

excel帮助文档_可以惊艳到你的6个excel基础技巧

Excel技巧太多,也许我们一直都在学习的路上,每天掌握一点点,工作轻松一点点,今天给大家带来6个excel经常会用到的技巧,操作简单,非常实用。技巧一:给excel文件添加打开密码第一步,很…

python find 不区分大小写_学好python拿高薪系列一(5):字符串操作和python数据结构...

大家好,上一期我们分享了python函数部分的内容,那么在这一期我们将分享python中有关字符串和列表的部分。字符串字符串没有什么好说的,知道一些常用的用法就行了。#字符串操作strr "hello,world!"#1、获取字符串长度print(len(strr…

for里面调用方法 vue_Vue源码阅读连载之Vue实例

我们学习Vue都是从下面这个例子开始的new Vue({render: h > h(App), }).$mount(#app)事实上,所有的Vue项目的组成组件都是一个Vue的实例,最后由根部的Vue实例去挂载到DOM上,当然这个"挂载"的操作可以针对不同的平台而有不同的行…

计算机组装怎么备份系统,手把手教你用GHOST备份还原安装电脑系统详细图文教程...

首先我们可以利用之前安装系统时提到的带启动功能和工具的系统安装盘,比如98启动盘或番茄花园的光盘,如果你用的U盘上带有GHOST工具,那很简单,我们还是要设置由光驱为第一启动项,重新启动电脑让电脑由光驱启动&#xf…

python车牌识别系统开源代码_python利用百度云接口实现车牌识别的示例

一个小需求---实现车牌识别。 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开始准备使用百度云文字识别C SD…

c 包含其他文件_C/C++编程笔记:C/C++的编译和链接,计算机专业大学生必备知识...

C/C文件C/C程序文件包括 .h .c .hpp .cpp,其中源文件(.c .cpp)是基本的编译单元,头文件(.h .hpp)不会被编译器编译。C/C项目构建(build)过程,分为以下几个步骤 预处理 → 编译 → 链接。预编译预编译的过程可以理解为编译器(实际上是预处理器…

python函数命名空间_Python中的函数 ​命名空间 作用域和局部函数 匿名(lambda)函数...

函数 是 Python中最重要的代码组织和复用手段函数用def关键字声明,return关键字返回: def function(x, y, z1.5): if z > 1: return z * (x y) else: return z / (x y) ##可以拥有多条return语句,如果到达函数末尾时没有遇到任何一条ret…

二建施工管理思维导图_备考二建不丢分?二建思维导图全程指导,知识点记忆快、不分散...

关键字:二建 一建 建造师考试 建造师证书 建筑 工程 建筑项目 法规 管理 市政 公路目前,距离2020年二级建造师考试的时间越来越近,很多准备参加二建考试的朋友也开始紧张起来了。二建考试分为公共科和专业科,公共科为法规和管理&a…

机器学习线性回归算法实验报告_吴恩达机器学习系列4:线性回归的梯度下降算法...

之前我们已经学过了线性回归、代价函数和梯度下降,但是他们就像一个人的胳膊和腿,只有组合在一起才会成为一个「完整的人」,这个「完整的人」就是一个机器学习算法,让我们一起来学习第一个机器学习算法吧。这个机器学习算法叫做线…

树莓派python3_【树莓派】给ubuntu18安装python3.7

准备工作 安装工具 sudo apt update sudo apt upgrade sudo apt install gcc sudo apt install g sudo apt-get install libffi-dev sudo apt install build-essential checkinstall sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-de…

c++mfc编写实验_零基础学Windows窗口图形界面编程(不用MFC),菜鸟学完变身高手,敢与专业媲美...

又一门新的计算机课上线啦!什么课?看下面视频(以下视频是本课第一讲)用什么语言我们声明一下(这个在我们课上也跟同学强调):不要为用什么语言掐架!那是初学者的行为,为高手所不为。第二,我们这门课讲的不是…

超级计算机阿波罗11,Apollo 8000推进超算科学发展

Apollo 8000推进超算科学发展超级计算技术将理论转移到模拟数字环境和计算机分析,一直被应用于加快科学和工程领域的突破。最新的高性能计算技术带来的创新让企业客户也能够访问这些程序和应用、强化研发能力并获得竞争优势。Apollo 8000推进超算科学发展作为散热媒…

找不到r低版本_R的多进程使用与改进

R的多进程使用与改进在R中需要使用多进程时,常见方案是使用foreach和doParallel的组合。foreachforeach包中最重要的是foreach函数,该函数创建一个foreach对象,随后串行或并行的执行表达式。library(foreach)?foreachout:foreach( ..., .c…

html让图片移动到一定位置_百度移动搜索优化指南2.0

百度移动搜索优化指南 2.0前期准备工作【域名】与 PC 网站一样,域名是用户对一个网站的第一印象。一个好的移动域名,不仅容易记忆、易于输入,还能方便用户向其他人推荐。域名应尽量简短易懂,越短的域名记忆成本越低,越…

32位mysql安装包_关于Mysql的安装

在安装之前,为保证能够安装成功,请您尝试以下操作:1、卸载原有mysql;2、搜索C:盘中是否有残余的mysql文件,主要是log文件,全部删除;3、为保证能够正常连接服务器,尽量关闭电脑防火墙&#xff1b…

山东初二计算机会考,2017山东莱芜初二会考科目时间安排:6月14日

考试科目初中学业考试科目、分值和考试时长分别为:语文、数学、英语三科满分均为120分,考试时长均为120分钟,均按原始得分计入总分;思想品德、化学、历史、地理、生物满分均为100分,考试时长均为90分钟,均按考试分数50…