zoukankan      html  css  js  c++  java
  • java程序员跳槽难吗?掌握面试五个核心要素,跳槽阿里也不是难事

    现在疫情已经好转很多,相信现在很多朋友都已经复工了,但也有很多人都面临失业或想要跳槽的情况,不管那种情况金三已经过去了,银四已经过半了, 你将作何准备迎接这个找工作季节呢?

    倘若你打算在现在换工作的话,那样做为1个Java工程师,应当怎样使用一个月的时间,迅速的为即将来临的招聘面试开展充足的准备呢?

    站在面试官的角度:

    给大伙儿深入分析了平日互联网企业是怎样多方位的考察1个候选人的。
    小结下去,面试官调查候选人的时候首要是从技术广度、技术深度、基本功底、系统设计、项目经验好多个角度来开展的。

    这么本文我们就对于每一大块内容,主要的来讲一下调查的许多点。更关键的,是对于调查的那些点,怎样来迅速的做好准备。

    一、技术广度

    技术广度,说白了,你做为1个及格的工程师在开发设计1个系统,进行某些实际的技术任务的时候,必定是要采用到许多的技术的,并且对于那些技术还必须熟练掌握有些十分普遍,各类不一样的系统或者都会涉及的一些技术构架/技术方案。

    举例说明:

    1个互联网企业的较为关键的系统,首要毫无疑问会采用分布式服务框架

    例如:dubbo/spring cloud,那样都可以将系统拆分成分布式的架构,换句话说如今很流行的讲法是微服务架构,那样一个人负责一个服务并且是一个子系统。

    紧接着这一系统很可能为了支撑某些独特的技术性情景会采用别的各类技术。

    普遍的例如为了解决高并发的读会采用Redis缓存技术,因为做系统异步调用会用到RocketMQ技术,以便支撑大数据量的高性能搜索会用到Elasticsearch技术,等等。

    这么倘若这一互联网企业在招聘Java工程师的时候,他的任职要求是啥?

    会不会必需得规定候选人至少在dubbo、Redis、RocketMQ、Elasticsearch等好几个技术领域,都要具体的生产项目使用工作经验

    并且还对这些技术性的各种特性以及落地项目的时候常用的技术架构/方案都较为了解,那样招聘这一人过来以后能够上手立刻干活。

    规定1个候选人,对各类常用的技术及其有关架构都是具体的项目经验以及对技术本身也足够了解,这也是所说的技术广度,站在招聘候选人的视角来深入分析一下,想必大伙儿就理解这个“技术广度”考察项了。

    实际上技术广度这个东西,都说了是技术广度了,因此显然不仅就是上边提及的那点东西。

    事实上,1个及格的适合互联网企业的工程师在技术广度上,还必须熟练掌握别的许多东西。
    比如分布式事务、微服务架构、分布式锁、性能优化、Java虚拟机优化、Web Server优化、数据库优化,等等。

    越发大型的互联网企业,就越发会针对技术广度这块,考察的可能会越广泛,标准更高一些。

    二、技术广度的快速准备

    那样既然如此现已掌握了这个技术广度是什么意思之后,目前应对这一技术广度,在短期内内应当怎样来迅速的练习和打算呢?

    这一问题,我们分为二种具体情况来讲。

    倘若说你也是1个平日就很勤奋好学很拼命,以往两年始终在不断的学习的人,这么恭喜了,这方面东西百分之百难不住你

    因为你以往两年不断的学习,可能早已自身把技术广度的每个点的一些东西都探讨过,并且难免会都是一点运用的经历。

    针对你学习过或是实践过的东西,你显然都记录了许多摘记。

    你最好的准备方法,也是迅速的总结自身的摘记,把各类常用技术的核心内容基本原理和项目实践都按照摘记回顾的方式迅速的回想起来,在大脑里行成1个知识网络。

    假若1个不这么努力的工程师,或是是1个工作才一两年,涉世未深的年轻人,还那么多的积淀,这时该怎么办呢?

    那也不是不可以,熟记一句老话:临时抱佛脚,不快也光。你尽管没啥积淀,可是你都要面试了,怎么也得临阵突袭一下吧。

    下边也是要教你的办法了:

    你要自个把技术广度将会涉及的各类点都列举出来,随后上网搜一下每个技术点普遍的某些面试问题,或者是基础的某些核心内容原理。

    通过百度各个技术点,然后从各种技术博客中快速了解一个技术的方式,短时间内可以迅速建立起来对技术广度中涉及到的各个点的一些基本认知、核心原理,这样在面试的时候避免一问三不知。

    当然,大家也清楚,技术这东西是没法速成的,你采用第二种方法来突击,跟你第一种情况下有几年的积累厚积薄发,最后落地到面试的时候,表现是截然不同的,也会直接决定不同的人会进入不同层次的公司。

    第二种情况的同学可能面试的时候问到一个问题,就只能说个一两分钟,但是第一种情况的同学,功夫都在平时,只要复习到位,面试的时候问到一个问题往往可以举一反三,一下子给你说个十多分钟都可以。

    这就是区别所在。

    不过,就算你只说一两分钟,总比一问三不知,和面试官大眼瞪小眼好,对吧?

    最后还是给各位强调一下,成功无捷径,作为一个优秀的技术工程师,最重要的事情是一年365天,每天都不停的学习积累,坚持很多年。

    吃得苦中苦,方为人上人,笔者早年进行技术积累的时候,也是这样过来的。每天晚上学习到凌晨一两点,周六周日全天学习,坚持了很多年。

    只有通过几年的积累,你才能够厚积薄发,量变产生质变,菜鸟变成大牛。

    三、技术深度

    技术深度是指的什么呢?简单来说,假如你有了上面第一条说的技术广度,这不能说明你有多优秀,仅仅只能说满足了面试的最基本的要求,招聘进来过后立马就可以上手干活了,没太大的培养成本。

    决定你未来技术的高度有多高,还有你能否成为团队里顶梁柱的,是你的技术深度

    技术深度,顾名思义,就是说你对一个技术掌握的深度,举个最简单的例子。

    假如你们公司的一个系统里用到了kafka这个技术,好那么现在问题来了,线上生产环境中,每当高峰到来的时候,不知道为啥写kafka总会偶尔抛个异常出来,或者是说写入到kafka中的数据不知道为啥每天统计下来总会少一些。

    线上生产环境遇到这种稀奇古怪的问题的时候,往往就是团队里技术大牛出场的时候。

    技术大牛,一定是对各种技术都有一定深度研究的人,能否在遇到技术问题的时候,直接从本质和底层出发,分析和定位问题,最后带领团队解决问题。

    比如上面说的那些问题,那要解决的话,首先需要一个技术大牛对kafka的源码有过一定深度的研究,接着就是在遇到问题的时候根据当时的故障现场以及一些日志,结合源码的运行流程,来一步一步分析和定位出来问题所在

    最后可能就是通过一些kafka的参数的调整,就可以解决上述棘手的生产问题。

    上述描述的场景和能力,就是技术深度的体现,比如说你对某个技术有过完整的、全方位的、深入底层的源码研究,这就已经是常人不可及的技术深度了。

    因为很多人说是看过源码,但是其实都是浅浅的看过一点点,理解不太深入。

    同时如果还有一些对某个技术在线上生产环境遇到过一些棘手问题,通过源码分析来解决问题的经验的,那么就是更优秀的技术深度的体现。

    技术深度的突显,未必是说看完源码,这仅仅其中某种表达形式罢了,其他的也有,例如对某一非常有难度的技术场景,例如企业双十一每秒钟上百万QPS并发请求下,你负责了其中支付系统,成功应对超高并发量。

    在这一过程中,你对系统架构的设计,对系统做的大量的并发优化、性能优化,可以变成你现在某一技术领域的技术深度的体现。

    四、技术深度的短时间准备

    如何为了即将到来的面试快速的做技术深度的准备呢?

    其实也很简单,分为两种情况来讨论。

    如果你在过去几年,自己就深入阅读过大量开源技术的源码,在阅读源码的过程中,自己还把源码的架构图、流程图,手工画了大量的图出来。

    那么此时你完全就可以把过去几年的源码研究笔记翻出来,快速过一下,练习如何在面试现场在白板上纯手工把各种技术的源码架构图和流程图现场画出来。

    或者在过去几年,你对某个技术领域,针对很高的技术难度做过什么复杂的系统,在那个技术领域扎下了很深的研究的话,那么此时你也可以针对过去的笔记快速的复习,在面试现场一定要现场画图把你做过的复杂系统以及技术难度都说清楚。

    但是如果你过去几年没上述所说的任何积累,那咋办呢?

    还是那句话:临阵磨枪,不快也光。

    一般面试官在考察技术深度的时候,很可能会问你:你对哪个技术比较熟悉一些?

    遇到这个问题的时候,希望大家头脑清醒一些,千万不要脑子发热随便乱说,因为你要做好一个心理准备,一旦你说出某个技术出来,比如你说你平时用dubbo用的比较多,接着面试官可能会开启深入源码级别的10连击模式。

    比如说,面试官立马就会开始问你对你熟悉的某个技术,各种底层的机制和原理,让你说源码的理解,给你出各种技术挑战之下这个技术该如何应对,等等诸如此类的问题。

    我见过太多没经验的同学随便说个熟悉的技术,其实他就仅仅只是会用罢了,但是一旦当我深入提问的时候,基本就进入一问十不知的情况了。

    如果发生上述情况,会让面试官对你的印象和态度极其不好,大家一定切记切记!

    所以,假如你要是确实没有过对什么技术的深入的积累,这里也教你一个临阵磨枪的办法:
    你可以从简历中挑选出某个你相对来说用的比较多,熟悉一点点的技术,然后直接用万能的百度,搜索“XX技术源码分析”,“XX技术底层原理”。

    通过几天的时间快速的 “ 死记硬背#+ 软磨硬泡 ”,力争对某个技术相对有一些稍微底层一些的理解。

    这样做,起码在面试的时候被要求问到一些技术深度的时候,能相对给出一些比普通工程师的回答更好一些的分析,起码能在面试的时候,让你拿到好点的offer概率会相对更大一些。

    还是那句话,做,总比不做好。

    .你能对底层做了准备,有一些了解,总是要胜过那些浮于表面,只会使用API的工程师吧!

    同样笔者这里要说,回归技术的本质,对于技术深度的积累,那更是没有任何捷径可言,更不是几个月可以完成突击的。(除非有人指路带着你)

    因为真要有技术深度的话,你可能需要花费至少2年的时间,从底层开始研究一些基础性的技术。

    在打通你的底层技术任督二脉之后,再去对常见的开源技术进行深入的源码研究,比如说:dubbo、zookeeper、spring cloud、redis、rocketmq、elasticsearch,等等。

    有了几年的积累过后,最后你在面试的时候,技术深度的体现,其实都是厚积薄发的。

    基础功底

    这块其实没啥可多说的了,大家估计现在慢慢都感觉到了,社招的有经验的工程师去面试互联网大厂的时候,很多时候可是都要考察数据结构和算法的。

    五基础功底的快速准备

    这块如何快速准备呢?

    我的建议是,如果真的还有1个月要去面试了,那你最起码用几天的时间,网上搜三五十个最常见、最典型的算法题,反复练习、务必熟练。

    熟练到什么程度呢?

    你需要反复练习,最后自己能够在白纸上一遍就手写出没有bug的代码。

    哪些题目是最常见、最典型的?举个例子,经典排序算法以及其时空复杂度分析,经典查找算法,栈、队列、链表、二叉树等常见数据结构的算法题,这些相关的基础题目都要熟练掌握。

    当然最好的对于基础的算法之类的东西的积累,还是在平时,比如你要是坚持每天就在leetcode或者lintcode上花费半小时刷一个算法题,坚持一年,你就刷了至少300道算法题,坚持两年,你就积累了七八百道算法题。

    这个时候有了足够的积累,起码面试是不用担心任何基础性手写算法之类的问题了,功夫其实还是在平时的。

    至于算法题目的难度选择,只需要LeetCode或者Lintcode上easy难度和medium难度即可。
    社招对算法和数据结构的要求是低于校招的,校招是因为学生没有太多项目经验,只能考察你数据结构算法,看你聪不聪明。
    曾经网上流传着一句话:****如果你能手写所有easy和medium的题目,3遍之内通过,可以搞定硅谷大部分公司的技术面试,包括谷歌、Facebook等顶级公司的面试,这个在国内也差不多的情况。**


    答案,关注公众号下面二维码,即可


  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/look-look/p/12720604.html
Copyright © 2011-2022 走看看