热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

逆风而行!从考研失败到收获到自己满意的后端开发Offer,分享一下自己的经历!

大家好,我是Guide哥,这篇文章是一位读者的投稿。这篇文章分享了他从确定Java后端方向 -> 考研 -> 考研失败->准备春招 -> 收货自己满意的offer 的心路历程。

Guide哥:建议好好看看,作者分享的内容很棒!相关阅读:《V2.0 版本的 《JavaGuide面试突击版》来啦!带着它的在线阅读版本来啦!》

逆风而行!从考研失败到收获到自己满意的后端开发Offer,分享一下自己的经历!

个人情况

我本科是某双非一本,大学四年也没做过太多有成就的事情。和很多在校生一样,我也经历过很迷茫的时间段,倒腾过单片机。

当时还出于对黑客的崇拜,折腾过一个月的网络安全。反正什么都去接触一点,以此来消磨我无聊的时间,不过后面谈了女朋友就不无聊了,哈哈。

Guide 哥:竟然有女朋友!

唯一感觉有收获的应该就是呆过 ACM 训练营,无奈自己太菜,拿的奖项都很小,蓝桥杯省一等奖这种水平。从大三开始,给自己明确了目标,还是老实实学习一个领域的技术吧。当时从知乎上查看了有很多方向,前端,后端,大数据,人工智能。根据我自己的兴趣(好就业)给自己明确了 Java 后端开发的方向。

考研

当时出于想继续学习提升自己的目的,选择了考研。这个地方想说一点就是,到大三了一定要规划好自己将来要做什么考研,就业,考公务员等等,坚定自己的信心和决心!。不要像我一样,在考研开始到结束的期间总会在某个时间段会心态上波动,觉得一整年的考研可能因此错过很多的机会,比如秋招。万一最后没考上研,就很尴尬了,毕业即失业?

尤其是自己考研期间复习不理想的时候,胡思乱想的东西就会越来越多。经常会找同学,朋友以及考上研的学长谈心来调节自己的心态。这个地方特别想感谢我的女朋友,在我每次心态爆炸,迷茫想放弃的时候,都愿意花自己的时间陪我出去散心,虽然她也在备战考研。有机会的话,还是建议能找几个比较自律的研友,可以互联督促约束。

Guide 哥:此处@一下这位老哥的女朋友。

这一切都过来的时候,才会觉得自己当初的想法比较幼稚,天无绝人之路。既然选择了远方,便只顾风雨兼程。专心做好一件事就行,只要自己保持上进心,相信未来一定会越来越好,一切美好都将与你环环相扣。

好在我最后还是坚持的走完了考研的旅程,虽然结果不那么的美好,但是我觉得一切都是值得的,至少我的计算机基础,高数,英语在这一年里都得到了很大的提高。

准备春招

我从考研结束之后,就开始着手准备春招的内容,复习以前做过的项目和学习过的技术栈。由于时间比较紧,任务比较重。这个时候,我觉得可以面向面经来学习准备,我花了一个上午的时间去牛客网刷面经,

最终按照不同的模块整理了一份不重复的面试常见问题,接着一切的学习任务都围绕着这个面试题来展开复习,查阅相关的书籍资料。

总结了一下,需要准备的内容也就是:

  1. 算法
  2. 项目
  3. 牛客网总结的常见面试知识点的复习。

算法的话,我的时间比较紧,复习的主要是 《剑指 offer》 + leetcode 的 top100。刚开始可以按分专题模块来刷,后面就可以随机练习。

项目的话,我觉得如果有机会能接触到真实的项目是非常好的,因为这一块当你面试的时候针对某些细节你可以自信的和面试官聊很多,如果要是自己包装的话,可能聊起来会觉得很虚。不过也没有关系,即使是自己跟着网课学习的或者找的开源项目,我觉得首先得保证能完全吃透这个项目的细节,细到数据库的表各个字段的含义,项目中哪些功能在哪一个模块实现,为什么这样实现,有没有更好的实现方式了。这些我觉得都是你需要思考的问题,因为面试中会出现各种不同的情况,面对不同的面试官,问的问题也是千奇百怪的。

关于项目经历,我再补充一下,避免大家踩坑。

不管是网课的项目,还是开源的项目。你能发现,别人也能发现,怎么才能避免雷同,体现自己的特色,项目中真正具有你的思考在里面。我有如下建议送给你:

  1. 可以替换其中的相关技术栈(比如 kafka 换成 RocketMQ),同时还需要准备自己选型这个技术栈的理由,一定要能够自圆其说。
  2. 可以自己在这个项目的基础之上添加一些额外的功能。这些内容都算是你自己写的,也是自己思考的点,面试的时候可以自信的和面试官介绍。对于项目介绍的部分,我觉得可以主动突出自己的亮点和难点。比如常见的考察 JVM 相关的问题,可以通过"自己创造难点,遇到的问题"来将这个问题主动出来,将主动权握在自己的手中。比如我当时为了说明项目中解决的问题,在项目的读写分离部分是通过 MyBatis 的数据源的动态切换,这一模块中使用了 Threadlocal 来进行隔离,因此抛出由于团队人员在开发过程中忘记 remove,最终导致项目上线后定期出现的 oom 问题,你可以聊你的解决方案以及定位问题的方法,接着面试官还有可能会考察 ThreadLocal 相关的问题,沿着这一条链路下来,可以思考着面试中面试官可能会问的这些问题,提前做好准备,让自己能够更有信心得去准备面试。对于面试,一定需要记住提早开始面起来,不要像我一样"等待一切都准备好"再投简历开始面试,这样会错过很多的机会。面了 2-3 家之后就慢慢培养出感觉来,从一开始自我介绍都结结巴巴,到最后把握面试的过程,这个阶段是需要练习的,可以刚开始投递自己最不想去的公司,当成自己练习的过程。

好在自己准备的还算充分,感觉比较幸运的是在这个疫情笼罩加上互联网寒冬时期,各大互联网公司裁员的情况下,经历了几个月的反复准备让自己拿了一些的 offer,最终也获得了自己比较满意的 offer。面经部分,个人觉得 SHEIN 这家公司问的比较全面,涵盖了常见的题目。如下,仅供参考学习。

SHEIN 面经分享

SHEIN 是一家成立于 2008 年的快时尚出口跨境电商互联网公司,集商品设计、仓储供应链、互联网研发以及线上运营于一体。

一面(45min 左右)

  1. 自我介绍
  2. 详细的聊了 TCP 三次握手四次挥手,以及各个环节可能会出现的相关问题。
  3. 有没有做过 MySQL 调优,MySQL 的一些优化方法,还问到了 MySQL 选错索引的问题,整条 MySQL 执行会经过哪些过程。
  4. HashMap 和 ConcurrentHashMap 1.7 和 1.8 的变化。hash 扩容为什么要扩大两倍,扩大 3 倍为什么不行。
  5. 本地缓存 GuavaCache 和 Redis 的区别,为什么项目中采用了多级缓存的设计
  6. 介绍常见的设计模式(这一块,我觉得结合 jdk 或者 spring 相关源码,或者自己的项目使用的设计模式聊比较好)
  7. 为什么要使用 SpringBoot,他能带来哪些好处。
  8. 线程池你在项目中怎么使用的,线程池内部原理的流程是什么样的。
  9. 阻塞队列有没有看过底层是怎么实现的
  10. synchronize 和 ReentrantLock 的区别,需要先介绍各自的底层实现。
  11. 有没有什么想问他的。

二面(1h 左右)

二面问了挺久,总共一个半小时,基本围绕着简历来问,

  1. 问了一些 Java 基础,HashMap,HashSet,重写了 hashCode 方法需不需要重写 equal 方法,如何解决哈希冲突的等等.
  2. B+树,InnoDB 与 MyIsam 的区别,还问了事务隔离级别读提交与可重复读的的一些区别.
  3. 接下来又问了 Java 并发知识点,Synchronized 与 ReentrantLock 区别,可见性的问题,CAS,问到 Unsafe 是什么,原子类等等.
  4. JVM 问的比较多,程序计数器的作用,虚拟机栈里面的栈帧存放着什么,本地方法栈又是干什么用的,新生代与老年代,垃圾回收算法,垃圾收集器等等问题。
  5. Spring 问了 IOC 和 AOP,这一块问的相对较少.
  6. 问了很多基础之后才开始问项目,项目从第一个开始问,问的很细,难点在哪,怎么解决,点赞后站内信的通知异步是怎么实现的等等,问完第一个项目接着问第二个项目。
  7. 问了 netty 如何使用的,nio 相关问题,最后问到 Linux 的 io ,select,epoll 这些。
  8. HashMap 存储了 50w 的数据,给出最快速给遍历方法
  9. 有没有什么想问他的。

三面(25min 左右)

三面问的技术问题就相对少了,主要问了跳表,Java 并发的知识点,Linux 的基础命令,Git 的常规问题,JVM 的回收算法介绍了下,还问了让我来介绍 Git 给不懂 Git 的人听,你会怎么跟他介绍。

四面 ( CTO 面 时间很短,不到 5 分钟)

大概就随便和我聊了下,为什么想来南京,有没有参加秋招,本科期间代码量怎么样,我当时都还没开始聊起来,他就说大概就这些了。 感觉有点虚,毕竟问的时间那么短,当时我还问了之前认识的一个老哥,他也面了 CTO 面,他也是 5 分钟左右,总体感觉 CTO 挺幽默的。

五面 HR 面

主要介绍了公司的情况,薪酬待遇,问能不能提前去实习等等一些问题。

总体感觉 shein 的面试效率还是很高的,基本一天一面。 HR 的态度非常好,中间由于一些事情耽误,还鸽了一次技术面试,HR 根据我的时间以及面试官的时间帮我额外安排了一次面试。对这家公司的映像非常好。
值得一提的是感觉现在互联网上的资料太过于多,各大线上架构师等培训机构的出现,间接的促进了面试难度在逐年加大,有些问题不能不理解的单单去记忆背诵,以此来期望面试通过,这个方法肯定行不通。
记得比较深刻的是有一场面试,我间接提了好几嘴自己对于 HashMap,ConcurrentHashMap 比较熟悉,面试官都不买账。包括后续问我对 Java 那一块比较熟悉除了集合部分(衰)。对于 JVM 的考察也不再是考察背诵垃圾回收算法以及常见的垃圾收集器,而是问为什么要按这个比例设定,如果不这样会导致什么问题等等。对于常见的排序和二叉树的时间复杂度被问到后,面试官希望你能够给他推导出来。所以,希望准备面试的小伙伴,

写在最后

还是要准备扎实的基础,不要靠直接背诵面试题这种方式来应付面试,方能以不变应万变。最后,吃水不忘挖井人,非常感谢 Guide 哥的帮助,Guide 哥的公众号和 github 在我学习 Java 的道路上包括后续的准备面试的过程中对我的帮助都非常大。

Guide 哥:这个彩虹屁 ???? 很喜欢,哈哈!


推荐阅读
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展
    观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 探究大数据环境下Kafka实现高性能的几个关键因素
    在大数据环境下,Kafka能够实现高性能的关键因素在于其独特的设计和优化策略。尽管Kafka的消息存储在磁盘上,这通常被认为会降低性能,但通过高效的文件管理和批量处理机制,Kafka能够在高吞吐量和低延迟之间取得平衡。此外,Kafka还利用了零拷贝技术、压缩算法和异步IO等手段,进一步提升了系统的整体性能。这些技术不仅保证了数据的可靠性和持久性,还使得Kafka成为处理大规模实时数据流的理想选择。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文详细探讨了MySQL并发参数的优化与调整方法,旨在帮助读者深入了解如何通过合理配置这些参数来提升数据库性能。文章不仅介绍了常见的并发参数及其作用,还提供了实际操作中的调整策略和最佳实践,适合希望提高数据库管理技能的技术人员阅读。 ... [详细]
  • JDK 1.8引入了多项并发新特性,显著提升了编程效率。本文重点探讨了LongAdder和StampedLock的特性和应用场景。此外,还介绍了在多线程环境中发生死锁时,如何通过jps命令进行诊断和排查,提供了详细的步骤和示例。这些改进不仅增强了系统的性能,还简化了开发者的调试工作。 ... [详细]
author-avatar
mobiledu2502861597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有