首页 编程语言 跳槽!Java面试经验总结

跳槽!Java面试经验总结

0.前言

笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到成都字节。自认为自己在面试这方面有一点心得,处于记录和分享的目的便有了此文,此文纯主观,也许对3年社招的同学有所帮助。

本文主要是面试技巧,技术方面不涉及。

1.面试前

1.1 项目亮点梳理

也许你和我一样,写简历的时候写到项目亮点环节,感觉无从下手。

笔者在阿里甚至很少写数据库,大多做一些查询展示的功能,那么项目亮点从何而来?

亮点不等于高并发

实际618这种高峰情况下,生产环境有些接口qps小于机器数doge。不要觉得自己没有高并发的经验就觉得自己没有亮点。

你缺少发现亮点的眼睛

由于你是实际写项目的人,“不知庐山真面目,只缘身在此山中”,很多时候你也许需要另外一个人听你描述项目,在对方的问题中你将找到项目的亮点!(这个人可以是我,详见文末!)

亮点不一定是你已经实现的

在真实场景中,也许因为排期、不要过度设计、或者其他原因,真正实现的方式是一口气梭哈,甚至在极端场景下是有题的。

  • 亮点可以来自你yy想出的:也许你可以想一个更加完善、更加具备扩展性、稳定性的设计,只要你能较完备的设计出方案,并且方案是可行的,那么这可以作为你的亮点,即使你没有写代码。

    例子:我在淘天的时候有一个依赖第三方抽奖接口的功能,代码实现是调用第三方接口,然后同步落表,并依靠消息来保证最终一致性。在这个背景下,我yy了使用本地消息表的分布式事务,这便成为了我的项目亮点。

  • 亮点项目不一定是你做的项目:虽然这有点不诚实,但是大部分情况下核心功能轮不到你做,如果你能主动的去梳理这个功能,了解需求背景、技术方案、稳定性等相关内容并融合贯通,那么这个项目又何必是你做过的?doge

想清楚怎么描述你这个项目

一般来说,面试的时候会让你做一个自我介绍并简要的说一下你自认为比较有挑战的项目。

这个时候你需要简要的描述这个项目,并且能简要的说出技术挑战(吊一下面试官的胃口,引导面试官doge),我是这样做的

  1. 简单的说明一下需求背景,一般一句话,不要太长!因为我是业务开发,这一句话主要要表现你对业务是有理解的,甚至有自己的理解,最好能知道需求的目的!不要太长,因为你面试的是技术开发,不是产品!

  2. 分条说项目的难点or亮点:

    比如合理的设计分库分表,满足后续业务迭代,并实现冷热数据分离利用本地消息表,基于消息和重试机制实现最终一致性。这里是简单的说一下你的几个项目,因此大概说一些技术难点即可,不需要展开,因为你应该不只有一个项目。

  3. 提一下成果:

    比如最终业务成果(业务指标,模糊的说一下,太精确就涉密了),技术成果(性能优化了多少,能抗多少qps,这个成功要和你克服的难点对应起来!)

如上是说,简单介绍项目,主要是简要说一下,一般后续面试官回挑它感兴趣的点进一步挖掘,面试前你要准备好如何应答,我一般是这样梳理的:

  • 业务背景和业务上的限制:

    业务上下游及背景,有些时候一个项目是有早期的枷锁的,可以提一下。这里一样简短,主要是给面试官一个背景,不然上来说这个项目xxxx,人家直接懵逼了!

  • 实现了什么功能:大致说一下核心接口的功能,大致流程,有哪些模型。

  • 难点,以及怎么解决的:难点1 :xxxx,你设计了一个什么样的方案并最终解决。

  • 你为什么这么做:这里要体现出你对技术的思考,比如分布式事务,你为什么不用tcc(需要上下游改造,别人不try 你做不到,那么上下游会配合你么?),等等其他选型都可以说一下,最终你选择了本地事务+消息重试保证最终一致性(为什么?因为实现简单,并且需求不需要实时的一致性,最终一致性即可,那么中间这一段不一致的时间,你是如何解决的,前端是如何表达的,等等)

  • 目前还有什么不足,后续如何做

    这里主要是体现,你有规划,是主动的,有技术追求的。而不是一个纯粹的执行者!

1.2 简历编写

排版啥的我就不说了

规避你的弱点

比如你学历不好,但是在公司拿过很好的绩效,有不俗的成果,那么工作经历应该放在学历上面。

让面试官看到你想让他看到的

和谈恋爱一样,你po在微信的肯定是最好的一面。写简历一样,把你最自信的技术栈加粗,放在最容易能看到的地方。

针对性的写简历

如何你有多个项目ABCD,篇幅限制只能写2项目,项目A和B和你投递的公司是更为契合的,那么何不把业务最match的项目写上昵?,在工作经历也可以体现出更匹配的地方!

example:笔者投递过蚂蚁的SRE,虽然自己不是做SRE的,但是平时也会关注一些稳定性相关的,我在工作经历中写了自己有系统稳定治理经验,参加过大促稳定性保障,并加粗。虽然这个SRE和我这个狭义的稳定性不是完全的一致的,但是也是有一点关系的。

1.3 降低预期

天生我材必有用

也许是没hc了,而不是你不够优秀!

另外人和人是有磁场的,你也许就是和这个面试官不对付,而不是你哪里不好(当然不好的地方要复盘)

吃个口香糖,上个厕所

面试前放松一下,一直绷着也不太好!

2.面试中

2.1 保持沟通

特别写leetcode,有的同学不知道咋写就尬住了,你可以说一下你的思路,或者你的问题(题目看不懂,或者你的思路解决了不了这个问题)和面试官沟通,反馈。

因为面试你的人是你未来的师兄or上级,工作中你肯定不是啥都知道的,也是需要沟通请教的,沟通到位反而是一个加分项。

即使你很会写,也要在写的过程保持沟通,比如实现代码的第一步,第二步!

2.2 良好的表达

表达有条理,语速适中,分情况,分条的表达。

特别需要注意一点,你需要介绍一点业务背景,但是不要过度介绍,因为招聘的是开发,而不是产品。

适当的表达,利于面试官了解背景,在表达中突出自己的对业务的了解,也是不错的,毕竟是业务开发,还是要懂业务的。比如你聊到分库分表,设计了x张表,x个库,是希望用户的数据集中在一个库一个表,减少分页查询聚合的开销,预留了很多空间是因为后面有哪些需求计划(模糊,不要涉密)会带来数据量的暴增。

2.3 体现你对技术的思考

  • 能比较多个技术选型,知道自己选择这个技术选型后的舍与得,每个方案的缺点和有点。
  • 能体现技术在业务上的取舍:比如分布式最终一致性,中间态是怎么做的,比如隔一段时间进行回查,比如表达一个抽奖中的状态(因为本地写了INIT记录,然后调用第三方,第三方maybe超时了,这时候INIT表达为抽奖中,回查就是来弥补这个超时)
  • 能知道使用的中间件解决了什么问题,为什么要使用,底层原理。

2.4 合理的猜

问到你不懂的点,你可以说不知道,但是自己可以猜一下,根据你其他的知识联想,或者自己的技术scene来推断该如何解决,给出你的解决方案,这也是体现你能力的点。

比如你不帅,但是你有钱。

2.5 幽默

我是一个比较逗的人,在面试字节的时候问到抽奖接口流量很高,如何解决,说了常规解决方案1,2,3等等,面试官还是继续问还有没有其他的解决方案,我说:"能不能抽几个倒霉蛋默认中一些廉价奖品,一般抽奖会有一些兜底奖品,比如积分,可以提前跑任务写中奖记录,而不是调用下游去抽奖doge,如果业务可以接受的话"。这个方案好么,不那么好(前提是你前面给出了很多其他技术方案,不要上来就让业务做阉割),但是把面试官干笑了

人家写了一天代码,开了一天会,还要面试你,如果你风趣幽默,是不是在一众候选人中脱颖而出昵,更有记忆点昵?

3.面试后

复盘,不懂的点及时弄懂,其他比如表达某一个项目不清楚,可以再梳理梳理。

4.福利

笔者目前在提供免费的简历修改建议,以及帮找项目亮点,可以查看《系列文章目录和关于我》文末的二维码,加群私聊群主1v1。

  • 为什么我愿意被白嫖:
    • 后续发展副业doge。
    • 交个盆友。
    • 你的项目会被我学会,变成我的系统设计经验。
  • 我什么水平,够格帮你么?
    • 3年经验,大厂p6,脉脉正常水平。
    • 另外本身免费,要求不要太高哈,而且我也是刚开始(目前帮助了2位朋友)。
    • 交流向,不是我教你,是我们互相学习。
  • 目前暂定周末(工作日不行)1到2位,1次1个半小时,腾讯会议的方式,时间灵活。

站心网

0.前言笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天..

为您推荐

苦逼程序员如何在公司生存的经验分享

我本科从深大毕业,从事编程工作已经十几年。期间在大大小小的公司呆过,见惯并且厌倦了职场各种争斗。很庆幸自己从一开始的选择——做一个纯粹的技术人。很多初入职场的朋友存在一个误区,觉得只有从技术岗转管理岗..

写给那些想要自学成才的java程序员

自学java没那么难一:个人经历我的大学:第一年泡在图书馆看杂七杂八的书,跟学习毫无关系。第二年疯狂打LOL,从白银打到黄铜(黄铜守门员)。第三年上半年,被某人点醒,学习了整套C#知识体系,某马。下半年又决定..

Java中String类常见的方法

以下介绍字符串常见的几个方法。介绍String类在 Java 中,String类是一个代表字符串的类,具有以下特性:不可变性:String对象一旦被创建就是不可变的,即它们的值在创建后不能被更改。任何对String对象的修改操作实..

常用的javascript网页数字滚动插件

在网页开发中,数字滚动效果广泛用于展示统计数据、计数器、动画化的数字效果等。以下是几款常用的 JavaScript 数字滚动插件:1. CountUp.js简介: CountUp.js 是一个轻量级的数字滚动插件,提供平滑的数字滚动动画效..

简单优雅的Java ORM

Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。一、ORM示例Insertpublic CompletableFuture<Void> inser..

轻量级 JavaScript 动画库 mo.js使用教程

mo.js 是一个强大的 JavaScript 动画库,专为在网页项目中创建复杂动画和运动图形而设计。它注重提供平滑、动态的动画效果,并通过简单、模块化和灵活的组件让开发更加便捷。mo.js官网地址:https://mojs.github.io/..

文件上传JavaScript库FilePond使用教程

传统的文件上传控件往往显得笨拙且不够用户友好。FilePond的出现,为Web文件上传带来了革命性的改变。本文将详细介绍FilePond这一JavaScript库,探讨它如何优化文件上传流程,并提供无与伦比的用户体验。什么是FileP..

Swapy - 开源JavaScript js拖拽插件

Swapy是一个简单易用的JavaScript工具,能够将任何布局转换为拖拽交换布局。本文将详细介绍Swapy的功能、如何使用它,以及它在实际项目中的应用。什么是Swapy?Swapy是由TahaSh开发的一款开源JavaScript工具。它的核..

JavaScript 的 sessionStorage 能否加锁?

直接给 sessionStorage 加锁是不可能的。sessionStorage 的本质: sessionStorage 是浏览器提供的一种用于在当前浏览器会话中存储数据的机制。它存储在客户端,数据仅在当前浏览器窗口或标签页中有效。加锁的必要性..

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法。公司部分接口使用PHP开发,部分接口使用.NET开放,.NET使用redis,PHP使用memcache作为分布式缓存服务器,但是部分业务需要.NET读取memcache里的数据。m..

c#实现与Java无差异的GZip压缩和GZip解压缩

c#实现与Java无差异的GZip压缩和GZip解压缩,其中有个坑就是GZip压缩的时候,只有在GZipStream在Dispose后调应对应MemoryStream.ToArray()所得到的结果才是正确的压缩数据。如果在zipStream.Write(bytes, 0, bytes.L..

30多年程序员生涯经验总结

在我 30 多年的程序员生涯里,我学到了不少有用的东西。下面是我这些年积累的经验精华。我常常想,如果以前能有人在这些经验上指点一二,我相信我现在会站得更高。 1. 客户在接触到产品之后,才会真正明白自己的需..

你熟悉哪些.NET开发框架和库?请列举一些你曾用过的,并谈谈你在项目中使用它们的经验

以下是一些我熟悉的.NET开发框架和库:ASP.NET Core:ASP.NET Core是跨平台的Web应用程序开发框架。我见过许多项目使用ASP.NET Core构建Web API和Web应用程序。它具有良好的性能和可扩展性,支持依赖注入、身份验证..

JavaScript设计模式学习网站Patterns

今天分享一个Javascript学习网站patterns。patterns官网:https://www.patterns.dev/patterns学习书籍下载地址:https://www.patterns.dev/book改进构建 Web 应用程序的方式Patterns.dev 是一本关于设计模式和组件模..

.NET中运行Java代码

在.NET中使用Java代码可以通过不同的方法和工具来实现,尤其是通过一些桥接工具或者中间件来进行跨语言的操作。以下是一些常见的方法:1. Java和.NET的互操作性:通过跨语言框架:IKVM.NET: 这是一个开源项目,允许..

使用IKVM.NET在.NET中运行Java代码

IKVM.NET是一个开源项目,它允许Java字节码在.NET平台上运行。通过IKVM.NET,可以在.NET环境中直接调用Java类和库。以下是使用IKVM.NET的基本步骤:步骤一:安装和配置下载和安装: 下载并安装IKVM.NET。你可以在官..

如何进行.NET应用程序的性能优化?请谈谈你在性能优化方面的经验和使用的技术

.NET应用程序的性能优化是确保应用程序在响应时间、吞吐量和资源利用方面具有良好性能的关键任务。以下是一些我在性能优化方面的经验和使用的技术:代码优化:优化代码可以改善应用程序的性能。这包括避免不必要的循..

你如何设计一个可扩展的.NET应用程序架构?请描述你在这方面的思考过程和实践经验。

设计可扩展的.NET应用程序架构是为了满足应用程序在需求增长和负载增加时的可扩展性和性能要求。下面是我在这方面的思考过程和实践经验:需求分析:首先,我会进行需求分析,了解应用程序的功能需求和预期的负载。这..

在.NET开发中,你如何处理高并发和大数据量的情况?请谈谈你在这方面的经验和使用的工具

在.NET开发中处理高并发和大数据量的情况是一个关键的挑战。以下是一些我在这方面的经验和使用的工具:异步编程:使用异步编程模型(如async/await关键字)可以提高应用程序的并发性能。通过异步操作,可以释放主线..

.net core md5加密与java不一致

MD5是一种哈希函数,用于将输入数据映射为固定长度的哈希值。在理论上,无论使用哪种编程语言,对相同的输入数据进行MD5哈希,应该得到相同的结果。然而,如果你发现在.NET Core和Java中使用MD5加密得到的结果不一致..

发表回复

返回顶部